Machine Learning dan Deep Learning Specialization (Coursera)

Awal tahun ini (8 Januari) saya iseng mulai ikut Machine Learning di Coursera. Setelah dua minggu ternyata saya masih semangat, jadi saya memutuskan untuk membayar, tujuan utamanya bukan supaya dapat sertifikat, tapi supaya semangat karena sudah bayar 79 USD.

Di tengah kesibukan saya selama Januari-Februari (nemu banyak bug), saya bisa menyelesaikan Course ini pada 23 Februari. Saya mengerjakan semua kuis dan tugas programming dengan Octave. Materinya dari sangat low level sekali, dari mulai linear regression sampai mengimplementasikan neural network (forward dan back propagation) dengan perkalian matriks.

Materi Machine Learning ini memang tidak membahas deep learning, jadi saya penasaran ingin belajar topik itu. Saya jadi ingat dengan blog senior saya Pak Benny Prijono (indoml.com). Pak Benny sudah mengikuti dan mereview banyak course dan membuat banyak catatan yang sangat rapi. Setelah membaca semua reviewnya, sepertinya yang menarik berikutnya adalah deep learning specialization dari pengajar yang sama.

Pengajar Machine Learning (Andrew Ng) memang enak cara penjelasannya. Dan beliau juga yang mengajar materi spesialisasi deep learning. Cara berbicaranya menurut saya agak terlalu lambat (saya terbiasa dengan kecepatan Bu Inge), tapi untungnya player video coursera mendukung percepatan video hingga 2x kecepatan normal (saya memakai kecepatan 1.50-1.75x tergantung materinya).

Kanan bawah adalah Andrew Ng, pengajar materi Machine Learning dan Deep Learning

Spesialisasi Deep Learning terdiri dari 5 Course. Review lengkapnya dalam bahasa Indonesia bisa dilihat di indoml.com, daftar 5 mata kuliahnya adalah:

Biayanya 49 USD/bulan sampai selesai. Kalau bisa selesai sebelum sebulan seperti saya, bisa hanya bayar 49 USD saja. Ada juga trial gratis 7 hari jika belum yakin apakah ingin mendapatkan sertifikat atau tidak. Untuk saya sendiri kemungkinan besar sertifikat ini tidak akan saya pakai, tapi tanpa membayar kita tidak bisa mengakses kuis dan tugas pemrogramannya.

Lanjutkan membaca “Machine Learning dan Deep Learning Specialization (Coursera)”

Block Cipher

Seperti namanya, sebuah block cipher mengenkrip 1 blok data setiap waktu. Ukuran blok ini biasanya kecil, misalnya AES memakai ukuran blok 128 bit (16 byte). Karena enkripsi dilakukan per blok, maka jika ukuran data kurang dari ukuran blok maka perlu ditambahkan padding (yang sudah dibahas sebelumnya). Jadi tidak seperti stream cipher, ukuran data hasil bisa sedikit lebih besar karena padding.

Ada banyak contoh block cipher, misalnya AES (yang jadi standar saat ini), DES (standar sebelumnya), TEA (block cipher yang sangat sederhana), Blowfish, dsb. Salah satu alasan enkripsi dilakukan per blok adalah: ada operasi permutasi yang bisa dilakukan dalam tiap blok. Contohnya jika ukuran blok hanya 4 byte dan kita memiliki data dengan urutan 1 2 3 4, maka bisa dilakukan permutas sehingga urutannya (misalnya) menjadi 2 3 1 4.

Tentunya tidak hanya permutasi saja yang dilakukan, biasanya ada banyak langkah yang diulang beberapa kali (iterated block cipher). Setiap langkah bisa berupa substitusi (menggunakan yang namanya S-BOX), permutasi, pemecahan blok menjadi beberapa bagian, dan penggabungan kembali bagian tersebut.

Mode Of Operation

Untuk tiap block cipher, kita bisa menggunakannya dalam berbagai mode. Mode paling sederhana adalah Electronic Codebook (ECB): ambil satu blok, enkrip blok itu saja, lupakan semua, jika ada blok baru maka enkrip blok itu saja, dst. Ini jadi mirip dengan stream cipher hanya saja ukurannya per blok. Di dalam mode ini tidak ada IV (initialization vector).


Lanjutkan membaca “Block Cipher”

Jonathan dan Global Art

Jonathan dari kecil gak suka mewarnai. Dari dulu kalau menggambar juga ya suka asal-asal saja. Sejak homeschooling, karena saya tidak sabar ajarin teknik gambar warna ataupun yang mengarah ke art, saya daftarkan Jonathan ikutan kelas di Global Art dekat rumah.

Global Art ini franchise international, mereka punya program yang cukup jelas step by stepnya. Tiap level ada buku kerja untuk muridnya, di akhir level anak akan diberi semacam test kecil dan diberi laporan ke orangtua. Sejak ikutan kelas di sana, Jonathan sudah menyelesaikan 2 buku (1 buku kira-kira 10 gambar), dan sekarang sudah hampir menyelesaikan buku ke – 3.

Tujuan saya masukkan Jonathan ke Global Art untuk menjadi bagian dari homeschoolnya karena saya tidak bisa mengajar art. Awalnya saya pikir masa sih mewarnai saja harus dilesin? tapi ternyata setelah sekian lama saya bisa lihat kalau lesnya gak sekedar mewarnai. Ada teknik mewarnai mulai dari menggunakan crayon, pensil warna, cat air dan kadang-kadang ada selingan kelas handicraft juga.

Lanjutkan membaca “Jonathan dan Global Art”

Stream cipher

Dalam stream cipher plaintext dienkrip satu byte tiap waktu. Ini berbeda dengan block cipher (akan dibahas di posting berikutnya) yang harus mengenkrip satu blok byte dengan ukuran tertentu. Prinsip stream cipher adalah: dari sebuah key dihasilkan sebuah urutan byte-byte yang acak. Byte-byte ini kemudian di XOR-kan dengan plaintext. Karena sifat stream cipher yang menghasilkan byte acak, kadang ada yang menggunakan ini sebagai RNG (Random Number Generator)

Dengan stream cipher, panjang hasil enkripsi bisa sama dengan teks yang dienkripsi. Karena enkripsi bisa dilakukan per byte, maka begitu ada 1 byte data tersedia, data tersebut langsung bisa dienkripsi (tidak perlu menunggu satu blok data).

Beberapa contoh stream cipher adalah: RC4 (dipakai di banyak hal misalnya WIFI WEP dan juga oleh banyak malware) serta A5/1 dan A5/2 (dipakai di GSM versi lama). Secara umum block cipher bisa diubah menjadi stream cipher dengan mode OFB (Output Feedback) dan CTR (Counter), jadi sekarang ini tidak banyak stream cipher yang populer.

Baik block cipher maupun stream cipher perlu diberi IV (initialization vector). Tujuan IV ini mirip dengan salt pada waktu hashing. Jika ada dua message yang dienkrip dengan key yang sama, dengan menggunakan IV yang berbeda maka hasil enkripsinya akan berbeda. Dalam stream cipher, jika tidak ada IV dan kita mengenkrip dua pesan yang berbeda (A dan B), maka akibatnya kita bisa mendapatkan (A XOR B) meskipun tidak tahu keynya. Ini bisa terjadi karena

E1 = (A XOR C) # dengan C adalah sebuah stream dari key K
E2 = (B XOR C) # dengan C adalah sebuah stream dari key K yang sama
X = (E1 XOR E2) = (A XOR C) XOR (B XOR C) = A XOR B

Contohnya seperti ini jika data yang dienkrip adalah gambar dengan teks “Yohanes”

Hasilnya bagus tidak terbaca

Lanjutkan membaca “Stream cipher”

Jauh Dekat itu Relatif

Kalau ditanya waktu belajar matematika atau fisika mengenai apa unit yang dipakai untuk mengukur berapa jauh sebuah jarak? jawabannya biasanya meter (atau konversinya ke cm, km tergantung jarak apa yang mau diukur. Tapi, sekarang ini, rasanya jarak tidak lagi diukur semata-mata dengan meter saja. Misalnya nih waktu di Jakarta, diajakin ke suatu tempat, kalau ditanya: eh kalau TMII jauh gak ya dari Depok. Jawabannya: deket kok, cuma sekitar 1 jam. Tapi kalau ditanya: eh kalau dari Monas ke Depok jauh ga ya? jawabannya: jauh itu, naik grab aja kalau lagi rush hour bisa 300ribu ongkosnya, belum lagi berjam-jam sampainya.

Sejak tinggal di Chiang Mai, kebanyakan tempat itu terasa dekat, terutama yang berada di sekitar rumah. Kalau nyetir gak sampai 15 menit walaupun jaraknya 15 km dari rumah, pasti berasa dekat. Kalau jarak tempuhnya 30 menit dekat atau jauh? ya tergantung di mana, kalau di Jakarta 30 menit itu dekat, kalau di Chiang Mai 30 menit nyetir itu terasa jauh (dan memang jarak yang ditempuh lebih jauh pada nyetir 30 menit di Jakarta).

Ada 1 lagi faktor yang bikin perasaan jauh atau dekat itu. Semakin sering kita ke suatu tempat, semakin dekat rasanya. Misalnya, dulu ke taman rajapreuk terasa jauh dari rumah kami, padahal ya nyetirnya 15 – 20 menitan, tapi setelah tahun lalu hampir setiap weekend main ke taman rajapreuk, tempat itu jadi dekat dari rumah. Ada lagi daerah turis di sini, tempat anak muda sering nongkrong, daerah Nimanhaemin, dulunya tempat itu terasa jauh buat kami (karena memang lalu lintasnya juga sering macet), tapi waktu Jonathan ke sekolah deket situ, akhirnya nemu jalan pintas dan jadi terasa dekat. Sekarang gimana rasanya setelah gak ke sana lagi tiap hari? ya mulai terasa gak jauh tapi juga gak deket-deket banget.

Masalah jarak tempuh ke suatu tempat di Chiang Mai sebenarnya sudah mulai ada perubahan juga. Kalau dibandingkan 12 tahun lalu, Chiang Mai yang sekarang ini jalannya tambah banyak. Jalan tambah banyak tapi juga volume kenderaan tambah banyak karena sepertinya penghuni kota ini juga bertambah banyak. Jam-jam tertentu, lalu lintasnya mulai terasa lama di jalan, tapi untungnya jalanannya tetap terjaga kualitasnya gak pada berlubang.

Dulu, di Bandung, rasanya ke mana-mana dekat. Tapi belakangan saya dengar Bandung mulai macet. Terakhir kami pulang, kami gak jadi ke Bandung karena katanya jarak tempuh Jakarta Bandung sekarang ini bisa sekitar 5 jam dan lebih baik naik kereta api daripada mobil sendiri atau bis. Nah sebenearnya ini pasti tergantung jam berapa juga, kemungkinan karena banyak yang gak mau bangun pagi misalnya, jadilah jalanannya penuh di jam orang normal bangun dan bikin jalanan macet. Jadi sepertinya dengan kemacetan yang ada membuat Bandung jadi Jauh dari Jakarta walaupun sudah ada jalan tol.

Dulu, pulang ke Indonesia itu terasa jauh sekali, apalagi karena belum banyak pilihan pesawat dan kadang-kadang transit itu harus nginap dulu karena jadwal pesawat gak ada yang pas untuk langsung sampai di hari yang sama. Beberapa tahun belakangan ini, sudah semakin banyak pilihan maskapai dan juga mau transit di mananya dan rata-rata bisa sampai di hari yang sama (yang beda cuma harga tiketnya saja). Harapannya di kemudian hari Chiang Mai terasa makin dekat dari Indonesia, walaupun jaraknya tidak berubah dari dulu kala.

Pantesan saja ya ada yang bilang jauh di mata bisa dekat di hati, karena jauh dan dekat itu relatif terhadap perasaan hehehe. Tulisan random ini sebenarnya sedang bersyukur bisa tinggal di kota Chiang Mai yang jarak tempuh ke tempat-tempat yang perlu kami kunjungi tidak terlalu lama dan atau terasa jauh.

Tanda tangan digital (kriptografi)

Sebagian orang menyangka tanda tangan digital adalah tanda tangan manusia hasil scan/foto/ditulis dengan stylus, tapi dalam kriptografi, maksudnya bukan itu. Tandatangan digital bertujuan untuk membuktikan bahwa:

  • seseorang tidak bisa menyangkal bahwa pernah menandatangani sebuah dokumen/file (non repudiation)
  • semua orang lain bisa memverifikasi bahwa tanda tangan tersebut valid

Ada banyak skema tanda tangan digital. Prinsipnya sama: ada key private yang dimiliki oleh penandatangan (signer) dan ada key publik yang disebarkan publik. Contoh algoritma yang bisa dipakai adalah RSA. Saya memilih satu algoritma saja untuk menjelaskan karena saya sudah membahas RSA di posting lain.

Lanjutkan membaca “Tanda tangan digital (kriptografi)”

Mencoba Mi Band 3

Setelah lama memakai smart band tak bermerk seharga 17 dollar, akhirnya hari ini memutuskan membeli Mi Band 3. Sebenarnya smart band yang sebelumnya masih bekerja dengan baik dan baru saja saya ganti talinya, lagipula saya gak memakainya untuk tracking langkah atau lari. Selama ini lebih terpakai untuk notifikasi kalau ada telepon masuk saja. Saya selalu set HP saya tanpa nada dering kecuali memang sedang menunggu pesanan delivery makanan haha. Nah kalau lagi di luar sama anak-anak, kadang saya gak tahu kalau ada telepon masuk. Dengan bantuan smart band, saya bisa tahu ada telepon atau pesan masuk.

Bagusan mana? yang hitam atau yang merah?

Mi Band 3 harganya 2 x lipat smart band saya yang lama, tapi juga masih lebih murah dibandingkan smart watch lainnya. Alasan saya membeli Mi Band 3 ini karena jam yang lama softwarenya sudah tidak diupdate lagi. Setiap kali ganti HP, Joe harus mengatur secara khusus supaya jam nya bisa terhubung ke HP. Selain itu, entah kenapa belakangan ini jam tangannya sering terputus koneksinya dari HP, dan saya menyadarinya biasanya setelah ada panggilan tak terjawab di HP saya.

Belakangan ini saya juga mulai sering berenang, nah jam yang lama tidak tahan air, sedangkan si Mi Band 3 ini katanya walaupun tidak punya aplikasi khusus untuk mengukur berapa jauh kita sudah berenang, tapi versi ini sudah tahan air dan bisa di bawa berenang. Jadi ya…bertambahlah alasan buat beli. Siapa tahu juga ke depannya jadi rajin buat mencapai target jumlah langkah seharinya hehehe.

Sebenarnya ada banyak jenis smart band/smart watch yang tahan air dan bisa dipakai berenang selain memberi notifikasi telepon dan pesan masuk, tapi saya membeli Mi Band 3 karena benda ini cukup murah, batere tahan lama dan fungsinya cukup untuk kebutuhan saya. Saya gak butuh tracker aneh-aneh, tapi kalaupun butuh untuk hitung langkah, lari, atau heart rate selain berenang semua sudah ada di Mi Band 3. Jadi dengan harga murah dapat fitur lebih dari cukup untuk saya, ya…jelas dong beli ini aja.

Kesan pertama lihat jam ini lucu juga dan terasa lebih ringan dari jam sebelumnya. Sayangnya, untuk chargingnya saya butuh charger khusus, tidak seperti jam saya sebelumnya yang bisa langsung bisa di charge tanpa kabel ke USB. Memang sih kalau ada colokan masuk ke USB langsung, jamnya jadi agak lebih panjang dari seharusnya. Tapi ya repot karena kabelnya gak standar, kalau hilang bisa berabe.

Semoga generasi mi band berikutnya bisa di charge langsung tanpa kabel seperti versi jam saya yang lama

Kata Joe, talinya nanti bisa beli warna-warna lain, tapi sekarang ini saya mau lihat juga berapa lama kira-kira umur tali yang hitam. Kalau sudah bosan boleh juga nanti beli warna lain biar berasa jam baru lagi hehehe. Semoga juga jam ini tahan lama kayak jam versi sebelumnya, kapan-kapan kalau udah lebih tau banyak plus minusnya akan saya tuliskan lagi.