Kalibrasi (IoT)

Sekarang banyak orang mengembangkan IoT. Salah satunya adalah untuk mengukur temperatur dan kelembaban. Masalanya, kebanyakan hanya mengambil kode (dari internet) dan kemudian menjalankannya tanpa melakukan kalibrasi. Apakah data yang kita gunakan sudah benar? Apakah kode yang kita gunakan sudah benar? (Dalam kode terdapat konversi dari data yang diterima oleh sensor ke temperatur dan kelembaban.)

Untuk mengetahui hal tersebut, saya membeli sensor hygrometer. Saya beli dua buah. Eh, ternyata keduanya juga tidak akur datanya. Data temperatur nyaris sama (31C), tetapi data kelembaban jauh berbeda (35% dan 41%). Mana yang benar? Saya juga meragukan kebenaran data tersebut karena perasaan saya temperatur saat menulis ini tidak panas. (Ini di Bandung di rumah saya.)

Sensor Hygrometer

Memang saya membeli sensor yang harganya murah. Ini hanya untuk percobaan. Nampaknya saya harus membeli sensor yang lebih akurat (dan lebih mahal).

Bagaimana dengan data dari sensor IoT? Saya menggunakan sensor DHT-22 yang kemudian saya hubungkan dengan perangkat Wemos D1 mini. Data kemudian saya kirimkan ke komputer. Berikut ini perbandingan data dari sensor Hygrometer dan sensor IoT. (Mohon maaf fotonya agak kabur.) Mana yang benar? Temperatur: 30 C (hygrometer), 27,8 (IoT). Kelembaban : 45% (hygrometer), 77,4% (IoT).

Lagi-lagi saya tidak tahu mana yang benar. Nampaknya saya harus membeli alat hygrometer yang lebih akurat untuk mastikan hasilnya.

Tadinya saya ingin membuat grafik seperti ini, memantau temperatur dan kelembaban di rumah saya. (Saya juga memiliki sensor yang lebih akurat.)

Tulisan ini untuk menunjukkan bahwa kita harus melakukan kalibrasi dalam pengukuran yang menggunakan IoT sekalipun. Jangan merasa bahwa kalau data dari IoT sudah pasti benar.

Memantau Temperatur Secara Daring

Beberapa hari yang lalu katanya Bandung dingin. Pagi hari temperaturnya bisa mencapai 15C. Wah. Yang bener? Akhirnya saya iseng dan memasang sensor temperatur (DHT-22) yang saya hubungkan ke perangkat IoT (ESP 8266). Data dari sensor ini dapat diakses secara daring (online), meskipun masih internal di jaringan LAN kami. Videonya ada di sini.

Hasil dari pembacaan sensor kemudian saya plot dalam bentuk grafik. Hasilnya kok ada yang aneh. Ada lonjakkan pada jam tertentu. Apa ya? Lihat pada bagian kiri di grafik berikut ini. Ada bagian yang meloncat.

suhu

Akhirnya tadi pagi, saya tongkrongi pas jam segitu. Apa yang terjadi? Eh, ternyata sensor terkena sinar matahari secara langsung. Ha ha ha. Pantas saja ada lonjakan data. Maka sensor saya pindahkan, tapi masih di bawah atap. Hasilnya tidak ada lonjakan lagi, tapi temperatur Bandung masih terlihat tinggi.

photo6127252777890589447

Sekalian saya pindahkan ke tempat yang lebih adem saja. Di sini saja. Mari kita amati perubahannya. Secara cepat saya amati, bedanya 1 derajat Celcius. Beda jarak 1 meter sudah beda hasilnya. Masalahnya adalah lebih ke arah di bawah atap yang berbeda. Saya akan amati lebih lanjut.

Belajar Tidak Selalu Berhasil

Seharian ini saya mencoba ngoprek pemrograman lagi. Coding. Sebetulnya saya hanya ingin mencoba menggunakan bahasa pemrograman Golang untuk membaca webcam saya melalui OpenCV. Masalahnya versi OpenCV yang didukung Golang adalah versi terbaru yang tidak ada di komputer saya. Artinya saya harus mengunduh dan merakit (compile) sendiri. Oke lah.

Dahulu saya biasa merakit sendiri berbagai paket program dari kode sumbernya. Tidak masalah. Namun sekarang ternyata proses perakitannya menjadi lebih kompleks. Ini disebabkan kode sumbernya juga semakin kompleks dan platform yang digunakan orang juga bervariasi sehingga ada banyak konfigurasi yang harus dilakukan. Ternyata konfigurasi bawaan dari paket ini tidak cocok dengan sistem operasi yang saya gunakan (Linux Mint 18.1 Serena).

Setelah ngoprek nyaris seharian – dari pagi sampai menjelang Maghrib ini – ternyata hasilnya tidak ada, alias gagal. Ya begitulah. Belajar kadang memang harus seperti ini. Banyak gagalnya dahulu. Tidak selalu harus berhasil. Kesel memang. (Ini ngetiknya juga sambil kesel.) Habis mau gimana lagi? Keselnya saya adalah karena menghabiskan waktu yang seharusnya dapat saya gunakan untuk belajar yang lainnya. Grrr.

Anggap saja ini adalah upaya saya untuk menambah “jam terbang” ngoprek Linux. (Padahal saya ngoprek Linux sejak pertama kali dia dibuat Linus. ha ha ha.)

Berikut layar terakhir hari ini sebelum saya berhenti dulu. “100% tapi gagal”. Heu.

Oh ya, versi videonya ada di YouTube channel saya. Ini dia.

Solid: Memisahkan Data dari Aplikasi

Siapa yang sudah pernah dengar nama “Tim Berners-Lee”? Kalau Anda belum tahu, silahkan Google dahulu. Ya, dia adalah “penemu” – kalau dapat disebut penemu karena sebetulnya lebih cocok disebut “pengembang” – dari World Wide Web (WWW). Saya mengenal beliau sejak pertama kali WWW dikembangkan karena kebetulan. Kebetulan saya “terpaksa” menggunakan workstation NeXT dan kebetulan juga Tim Berners- Lee menggunakan NeXT workstation ketika mengembangkan WWW. (Mestinya saya cerita tentang hal ini ya? Panjang. Jadi saya tunda ya.)

Baru-baru ini Tim Berners-Lee mengusung sebuah ide baru yang disebut Solid. Apa itu Solid? Terpaksa saya membaca sana sini karena informasinya masih sangat minim. Solid adalah sebuah konsep (platform?) untuk mengembangkan aplikasi dengan memisahkan data dari aplikasi. Mengapa pemisahan ini penting?

Saat ini ketika kita menggunakan sebuah aplikasi (misalnya aplikasi untuk handphone Android kita), maka aplikasi tersebut membutuhkan informasi mengenai Anda sebagai penggunanya. Aplikasi tersebut akan meminta identitas Anda, nama, alamat email, dan seterusnya. Bahkan untuk aplikasi yang bersifat transaksional, aplikasi tersebut akan meminta nomor rekening Anda.

Ketika Anda memasang aplikasi yang lain lagi, maka proses di atas terulang kembali. Anda harus memasukkan data Anda lagi, lagi, dan lagi. Akibatnya adalah ada banyak data Anda yang tercecer dimana-mana. Di setiap aplikasi ada data Anda. Anda tidak tahu data apa saja yang disimpan di sana. Yang mengerikan lagi adalah kalau data Anda itu berada di berbagai penyedia layanan tersebut. Pokoknya kita sudah tidak dapat mengendalikan data (pribadi) kita lagi. Solid mencoba memecahkan masalah tersebut.

Pada Solid, data kita ditempatkan pada sebuah Pod (namanya itu). Aplikasi yang membutuhkan data kita akan mengakses Pod tersebut. Kita dapat memilah-milah mana yang akan kita berikan akses (atau kita cabut aksesnya). Data akan berada di satu tempat. Memudahkan kita untuk mengelolanya.

Nah, bagaimana cara mengembangkan aplikasi yang berbasis Solid ini? Itu saya juga belum tahu. Ha ha ha. Mari kita belajar bersama.

Apa Itu Internet of Things (IoT)?

Belakangan ini mungkin Anda sering mendengar kata IoT – Internet of Things. Apalagi dengan ramainya istilah industri 4.0, semakin banyak orang berbicara tentang bagaimana cara menghubungkan dunia nyata (fisik) dengan dunia siber (cyber). Apa itu IoT?

Ada dua kata dalam Internet of Things, yaitu “Internet” dan “Things”. Kita mulai dari kata keduanya dahulu, “things”. Apa itu “things”?

Terjemahan langsung dari kata “things” adalah “barang” atau “benda”. Dalam istilah ini yang dimaksudkan dengan barang adalah … ya apa saya, barang-barang. Maksud lebih spesifiknya lagi adalah barang yang dapat kita program. Kalau dahulu, barang atau benda yang dapat diprogram adalah komputer. Namun sekarang sudah banyak benda lain yang dapat diprogram. Handphone kita juga dapat diprogram. Microwave di dapur kita juga dapat diprogram. Mesin cuci juga dapat diprogram, meskipun barang-barang yang terakhir saya sebutkan di sini memiliki pemrograman yang terbatas.

Dalam istilah IoT, yang dimaksudkan barang adalah semua barang. Keberadaan komponen mikroprosesor dan mikrokontroler yang semakin kecil dan semakin murah membuat semua benda dapat diprogram.

Kata kedua adalah “internet”. Yang dimaksud dengan “internet” di sini adalah jaringan komputer. Boleh jadi jaringan komputer ini adalah “internet” yang kita kenal sekarang, tetapi boleh juga jaringan internal (misal berbasis Bluetooth).

Benda yang dapat diprogram sudah cukup menarik, tetapi mereka berdiri sendiri. Begitu mereka dapat diakses melalui sebuah jaringan maka benda tersebut dapat mengirimkan data ke tempat lain. Mereka juga dapat dikendalikan (dapat diprogram) dari jarak jauh.

Gabungan kedua kata tersebut – Internet of Things – bermakna benda-benda yang dapat diprogram dan terhubung melalui jaringan.

Contoh-contoh IoT ada banyak. Dalam kehidupan sehari-hari yang sudah sering kita lihat adalah smart watch, jam yang bukan hanya dapat menunjukkan waktu saja tetapi dapat juga memantau kondisi fisik kita; berapa jarak jalan kaki kita, denyut jantung, dan seterusnya. Hasilnya dapat dilaporkan melalui Bluetooth ke handphone dan dapat langsung terlihat di internet. Selain ini masih banyak contoh-contoh lainnya.

Mengapa Bahasa Python?

Saya ingin belajar bahasa pemrograman. Bahasa apa yang sebaiknya saya pelajari?

Pertanyaan ini merupakan salah satu pertanyaan yang sering (dan berulang) ditanyakan. Jawabannya bergantung kepada waktu. Jawaban beberapa tahun yang lalu akan berbeda dengan jawaban sekarang. Ini disebabkan oleh pesatnya perkembangan komputer dan bahasa pemrograman.

Jawaban atas pertanyaan ini pada saat sekarang adalah bahasa Python. Mengapa Python?

  1. Mudah. Definisi “mudah” ini tentu saja harus diperjelas lagi. Dia lebih mudah dipelajari daripada bahasa pemrograman lainnya, sehingga Python digunakan oleh orang dari berbagai bidang – tidak hanya orang yang berlatar belakang teknologi informasi saja. Saya melihat banyak penggunaan Python di bidang sains. Bahasa Python juga merupakan sebuah bahasa yang interpreted, yaitu tidak perlu dirakit (compile) dahulu seperti bahasa pemrograman C misalnya. Ini membuat siklus koding menjadi lebih sederhana.
  2. Tersedia di berbagai sistem operasi. Python tersedia untuk sistem operasi Linux, Mac OS X, Windows, dan seterusnya. Tidak semua bahasa pemrograman tersedia dengan baik untuk berbagai sistem operasi. Artinya siapapun dapat menggunakan Python./
  3. Tersedia banyak pustaka (library). Menurut saya ini aspek yang paling penting dari mengapa belajar bahasa Python. Pustaka (library, module) ini membuat pemrograman kita menjadi lebih mudah karena sudah ada orang lain yang mengembangkan alat bantunya. Untuk melakukan statistik, sudah ada pustakanya. Grafik? Ada juga. Untuk bidang-bidang yang khususpun seperti Artificial Intelligence dan Machine Learning juga sudah ada modulnya. Apapun, nampaknya sudah ada. Ini yang membuat bahasa Python sangat menarik dibandingkan bahasa pemrograman lainnya.

Oh ya. Versi video dari penjelasan ini ada di YouTube. Saya sedang memulai channel Padepokan Budi Rahardjo ini di sana. Silahkan dicek (dan juga dikomentari ya – kalau perlu subscribe juga).

Python dan Perl

Senin lalu melanjutkan memberikan training soal Data Science dengan menggunakan Python. Salah satu tugas yang harus kami lakukan adalah membersihkan data yang diperoleh dari proses dump aplikasi links ke akun twitter. (links -dump http://twitter.com/rahard)

Awalnya saya memulai koding dengan menggunakan bahasa Python, tapi di tengah jalan macet karena saya lupa cara-cara melakukan regular expression (regex) di Python. Misalnya lompati (skip) baris yang memiliki pola penulisan “* sesuatu”. Atau melompati baris yang hanya berisi spasi saja. Sebetulnya saya bisa sih, tetapi harus baca dokumentasinya dulu. Padahal ini lagi live coding. ha ha ha. Harus cepat. Akhirnya yang saya lakukan adalah saya koding awal dengan menggunakan bahasa Perl. ha ha ha.

Di kepala saya memang logika pemrograman diimplementasikan dengan menggunakan bahasa Perl. Jadi kalau mau mengerjakan sebuah kodingan, yang terpikir adalah kodenya dalam bahasa Perl.

Kembali ke kasus tadi. Dalam waktu singkat, kodingan Perl sudah menunjukkan apa yang saya mau (meskipun masih harus dilanjutkan lagi karena ada banyak exception yang harus dilakukan). Poin yang ingin saya sampaikan di kelas ada bahwa untuk melakukan pembersihan terhadap data dapat dilakukan dengan menggunakan skrip. Cara ini efektif meskipun caranya adalah quick and dirty. Namanya juga hacking. Itulah sebabnya dalam deskripsi tentang data science (yang diusulkan oleh Drew Conway), salah satu komponennya adalah “hacking skills“.

Kembali ke kasus (lagi), saya punya pekerjaan rumah untuk membuat versi Python dari kode Perl saya. Hadoh.

 

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.

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.)