Friday, August 28, 2020

Menulis disertasi: bacaan sebelum tidur bagi mereka yang tidak bisa tidur

Artikel ini merupakan terjemahan bebas saya atas tulisan Douglas E. Comer di website pribadinya [1], sebuah pengantar tidur untuk menulis disertasi. Beberapa batasan tulisan ini yang dapat dikembangkan adalah sebagai berikut.
  • Meski ditujukan untuk disertasi berbahasa Inggris, tips/prinsip di bawah ini bisa saja diaplikasikan pada tulisan ilmiah berbahasa Indonesia (khususnya tugas akhir/tesis/disertasi). 
  • Meski ditujukan untuk disertasi, prinsip-prinsip di bawah ini bisa juga diaplikasikan pada karya tulis jenis lain.
  • Meski ditujukan untuk mahasiswa sains komputer (computer science), prinsip berikut juga bisa diaplikasikan untuk disertasi bidang lain.

Untuk para kandidat:

Jadi anda sedang menyiapkan untuk menulis disertasi doktoral anda di bidang sains komputer (seperti saya saat ini). Kecuali anda telah memiliki pengalaman menulis berbagai dokumen formal sebelumnya, anda akan terkejut: menulis disertasi itu sulit!

Ada dua jalur untuk mencapai kesuksesan menulis disertasi:
  • Perencanaan yang matang
  • Hanya sedikit yang menempuh jalur ini. Sedikit orang tersebut meninggalkan universitasnya dengan sangat cepat sehingga mereka tidak diperhatikan. Jika anda menginginkan impresi lama dan karir panjang sebagai mahasiswa pasca sarjana, jangan memilih jalur ini.
  • Ketekunan
  • Yang perlu anda lakukan adalah bertahan dari komite doktoral anda. Berita baiknya, mereka umumnya lebih tua dari anda, jadi anda bisa menebak siapa yang akan "berakhir" duluan. Berita buruknya, mereka lebih berpengalaman dari anda dalam permainan ini.
Beberapa arahan berikut ini mungkin membantu anda ketika anda telah serius menulis disertasi anda. Daftar tersebut berlaku selamanya, tanpa pengecualian, dan anda mungkin tidak ingin membacanya dalam sekali waktu. Namun, bacalah arahan ini sebelum anda memulai menulis disertasi anda.

Ide dasar:

  1. Sebuah tesis adalah hipotesis atau penerkaan
  2. Sebuah disertasi doktoral adalah dokumen formal, panjang, yang berargumen dalam mempertahankan tesis, pernyataan yang didukung oleh argumen. (Terminologi tesis sendiri digunakan untuk merujuk dokumen, arti ketiga dalam bahasa Inggris).
  3. Dua kata sifat yang penting untuk menggambarkan disertasi adalah: orisinil dan substansial (KBBI: bersifat inti). Penelitian yang dilakukan harus mendukung keduanya dan disertasi yang ditulis juga harus menunjukkan hal tersebut. Secara spesifik, sebuah disertasi menunjukkan kontribusi orisinil.
  4. Metode saintifik berarti memulai dengan hipotesis dan kemudian mengumpulkan untuk mendukung atau menyanggah hipotesis tsb. Sebelum seseorang dapat menulis disertasi untuk mempertahankan sebuah tesis tertentu, dia harus mengumpulkan bukti untuk mendukung hipotesis tersebut. Oleh karenanya, aspek tersulit dari menulis disertasi adalah mengorganisir bukti-bukti (hasil) dan mengasosiasikan diskusi dalam bentuk yang koheren.
  5. Esensi dari disertasi adalah pemikiran kritis, bukan data eksperimen. Analisis dan konsep membentuk inti pekerjaan penelitian.
  6. Sebuah disertasi berkonsentrasi pada prinsip: dia menyatakan apa yang telah dipelajari, bukan hanya fakta dibaliknya.
  7. Secara umum, setiap statemen dalam disertasi harus didukung oleh referensi atau pekerjaan yang dilakukan. Sebuah disertasi tidak mengulang detail dari pemikiran kritis dan analis yang telah dipublikasikan; disertasi menggunakan hasil penelitian sebelumnya sebagai sebuah fakta dan menyarankan pembaca untuk merujuk pada sumber asli untuk detail lebih lanjut.
  8. Setiap kalimat dalam disertasi harus komplet dan benar secara tata bahasa. Sebuah disertasi harus memenuhi persyaratan ketat tata bahasa formal (singkatan, tidak ada bahasa cakapan, tidak jargon yang tidak didefinisikan, tidak ada bahasa slang, tidak ada bahasa alay, dst). Sebaliknya, penulisan dalam disertasi harus sejelas-jelasnya. Ketidakjelasan menyebabkan masalah; terminologi dan prosa harus dapat dibedakan. Setiap kata harus menyampaikan maksudnya secara jelas sesuai yang diniatkan/dimaksudkan, tidak kurang dan tidak lebih.
  9. Setiap pernyataan/statemen dalam disertasi harus benar dan dapat dipertahankan secara logis dan saintifik. Diskusi dalam disertasi harus memenuhi aturan logika yang berlaku dalam sains dan matematika.

Apa yang harus dipelajari dari latihan:

  1. Semua ilmuwan perlu mengkomunikasikan penemuannya; disertasi doktoral adalah latihan untuk berkomunikasi dengan ilmuwan lainnya.
  2. Penulisan disertasi mensyaratkan seorang mahasiswa untuk berpikir secara mendalam, mengumpulkan argumen-argumen untuk meyakinkan ilmuwan lainnya dan mengikuti aturan yang ketat, presentasi formal dari argumen dan diskusi.

Aturan praktis:

Tulisan yang baik penting dalam penulisan disertasi. Bagaimanapun, tulisan yang baik tidak dapat mengkompensasi lemahnya ide atau konsep. Justru sebaliknya, presentasi yang jelas selalu menujukkan kelemahan ide.

Definisi dan terminologi:

  1. Setiap term/istilah yang digunakan dalam disertasi harus didefinisikan dengan mengacu publikasi ilmiah sebelumnya (untuk standardisasi term dengan arti umum) atau didefinisikan dengan presisi, tidak ambigu sebelum istilah tersebut digunakan (untuk istilah baru atau istilah standar yang digunakan tidak pada umumnya) (Lihat teknik ke-6 pada artikel prinsip dasar logika).
  2. Setiap istilah harus digunakan hanya untuk satu makna/arti sepanjang disertasi.
  3. Cara termudah untuk menghindari pendefinisian istilah secara panjang lebar adalah dengan memasukkan pernyataan: "the terminology used throughout this document follows that given in [CITATION].''Kemudian, berikan perbedaannya jika ada.
  4. Bab "introduction" dapat memberikan intuisi dari istilah yang digunakan dan akan didefinisikan lebih presisi kemudian.

Istilah dan frasa yang sebaiknya dihindari (Bahasa Inggris):

  • adverb: kata keterangan, kata jenis ini banyak digunakan secara berlebihan dalam disertasi.
  • jokes or puns: guyon atau humor, tidak seharusnya ada dalam disertasi.
  • ``bad'', ``good'', ``nice'', ``terrible'', ``stupid'': Gunakan kata-kata kuantitatif/kategorikal daripada kualitatif seperti ini, misal: 80%, "benar", "salah".
  • ``true'', ``pure': penghakiman (dalam arti "baik")
  • ``perfect'': tidak ada yang sempurna.
  • ``an ideal solution'': menghakimi lagi.
  • ``today'', ``modern times': Hari ini adalah besoknya kemarin.
  • ``soon': seberapa soon? nanti malam? dekade selanjutnya?
  • ``we were surprised to learn...'': meski memang demikian, mau apa?
  • ``seems'', ``seemingly'',: tidak masalah bagaimana sesuatu muncul.
  • ``would seem to show'': semua permasalahan adalah fakta.
  • ``in terms of'': biasanya tidak jelas.
  • ``based on'', ``X-based'', ``as the basis of'': hati-hati, bisa menyamarkan arti.
  • ``different'': apakah yang dimaksud "various"; berbeda dari apa?
  • ``in light of'': ragam cakapan.
  • ``lots of'': samar dan cakapan.
  • ``kind of'': samar dan cakapan.
  • ``type of'': samar dan cakapan.
  • ``something like'': cakapan.
  • ``just about'': cakapan.
  • ``number of'': samar, pernyataan kuantitatif lebih disukai.
  • ``due to'': cakapan.
  • ``probably'': hanya jika disertai probabilitas statistik.
  • ``obviously, clearly'': hati-hati, apakah jelas kepada pembaca?
  • ``simple'': dapat memiliki konotasi lain, misal "simpleton"
  • ``along with'': gunakan "with" saja.
  • ``actually, really'': definisikan secara presisi untuk mengeliminasi perlunya klarifikasi.
  • ``the fact that'': membuat kalimat meta, gunakan frasa lain.
  • ``this'', ``that'': Seperti pada kalimat "This causes concern." Alasan: "This" dapat merujuk pada subyek dari kalimat sebelumnya, seluruh kalimat, atau seluruh paragraf, seluruh seksi sebelumnya, dll. Lebih penting lagi, "this" juga dapat diinterpretasikan dalam arti konkrit atau meta-konkret. Sebagai contoh: "X does Y. This means ... ." Pembaca dapat mengasumsikan "this" merujuk pada Y atau berdasarkan fakta bahwa X melakukan Y. Meski dalam bentuk restriktif (lebih baik), misal "this computation", frasa tsb sering terlihat lemah dan ambigu.
  • ``You will read about...'': Sudut pandang kedua ("you") tidak memiliki tempat dalam disertasi.
  • ``I will describe...'': Sudut pandang pertama tidak memiliki tempat dalam disertasi. Gunakan self-reference, misal: "Chapter 10 describes... ."
  • ``we'' seperti pada ``we see that'': Jebakan yang sebaiknya dihindari. Alasan: kebanyakan kalimat dapat dimulai dengan "we" karena "we" dapat merujuk pada: pembaca dan penulis, penulis (termasuk pembimbingnya), penulis dan tim riset, ilmuwan eksperimental komputer, seluruh grup komunitas sains, komunitas sain, atau grup lainnya.
  • ``Hopefully, the program...'': program komputer tidak berharap, kecuali diimplementasikan sistem AI. Jika anda menulis disertasi di bidang AI, berkonsultasilah ke ahli lainnya, setiap bidang punya gayanya masing-masing.
  • ``...a famous researcher...'': tidak masalah terkenal atau tidak. Faktanya, pernyataan ini adalah prasangka.
  • ``few, most, all, any, every'' : Hati-hati menggunakan istilah ini. Sebuah disertasi haru presisi. Jika ada kalimat " Most computer systems contain X", anda harus bisa mempertahankan argumen ini. Apakah anda tahu faktnya? Berapa komputer yang terjual kemarin?
  • ``must'', ``always'': Yakin?
  • ``should'': Siapa yang mengatakan demikian?
  • ``proof'', ``prove'': Kecuali dapat dibuktikan secara matematik.
  • ``show'': Jika digunakan dalam arti yang sama dengan "prove", maka "show" harus didukung oleh bukti formal/matematika.
  • ``can/may'': ibu anda mungkin bisa menjelaskan perbedaanya (may: formal, can: ability; You may use can if you wish, and you can use may if it makes you feel better.)

Kalimat aktif vs. pasif:

Gunakan konstruksi kalimat aktif. Sebagai contoh, tulis "the operating system starts the device" daripada "the device is started by the operating system."

Tense:

Tulis dalam bentuk present tense (bentuk sekarang). Sebagai contoh, tulis " The system writes a page to the disk and then uses the frame..." daripada "The system will use the frame after it wrote the page to disk..."

Definisikan negasi di awal:

Contoh: tulis "no data block waits on the output queue" daripada "a data block awaiting output is not on the queue." 

Tata bahasa dan logika:

Berhati-hatilah bahwa subyek setiap kalimat sesuai dengan kata kerja yang dilakukanya. Kalimat "Programs must make procedure calls using the X instruction" tidak sama dengan kalimat "Programs must use the X instructuion when they call a procudere." Kalimat pertama salah. Contoh lainnya, "RPC requires programs to transmit large packets" tidak sama dengan "RPC requires a mechanism that allows programs to transmit large packets."
Semua ilmuwan komputer seharusnya tahu aturan logika. Sayangnya, aturan tersebut lebih sulit diikuti ketika bahasa tulisan adalah Bahasa Inggris, bukan persamaan-persamaan matematika. Sebagai contoh, kalimat "There is a compiler that translatesthe N languages by..." berarti ada satu compiler eksis yang menangani semua bahasa, sedangkan kalimat "For each the N languages, there is a compiler that translates..." berarti ada 1 compiler, 2 compiler, atau N compiler. Ketika menggunakan simbol matematika, perbedaannya sangat jelas karena frase "for all" dan "there exist" adalah berlawanan.

Fokus pada (cara mendapatkan) hasil, bukan orang atau kejadiannya:

"After working eight hours in the lab that night, we realized ..." tidak memiliki tempat dalam disertasi. Tidak masalah bagaimana sulit atau berapa lama anda bekerja untuk mendapatkan hasilnya. Contoh lainnya: "Jim and I arrived at the numbers shown in Table 3 by measuring..". Letakkan ucapan terima kasih pada Jim di bab "Acknowledgement", tetapi jangan memasukkan nama (termasuk nama anda sendiri) pada bagian isi disertasi. Anda mungkin akan berusaha untuk menjelaskan secara detail tahapan mendapatkan hasil penelitian. Hindari hal tersebut secara total. Sebagi tambahan, jangan mendokumentasikan pengaruh mistis, misal: "if that cat had not crawled through the hole in the floor, we might not have discovered the power supply error indicator on the network bridge''. Jangan pernah memberi atribusi pada hal mistis atau keanehan yang mempengaruhi hasil penelitian anda. Secara ringkas: gunakan fakta. Deskripsikan hasil tanpa memasukkan reaksi anda terhadap kejadian, yang mungkin saja membantu, ketika mendapatkan hasil tersebut.

Hindari penilaian/penghakiman pribadi:

Kedua contoh berikut tidaklah tepat: ``The method outlined in Section 2 represents a major breakthrough in the design of distributed systems because...'' ``Although the technique in the next section is not earthshaking,...''

Merujuk pada karya tulis, bukan penulisnya:

Penulis disertasi harus menyitasi karya tulis, bukan penulisnya. Oleh karenanya, gunakan kata kerja bentuk tunggal (singular) untuk merujuk larya tulis meski ditulis oleh banyak penulis. Sebagai contoh "Johnson and Smith [J&S90] reports that...''.
Hindari frasa "the authors claim that X." Penggunaan kata "claim" meragukan "X" karena merujuk pada pemikiran penulis, bukan fakta penulisan. Jika anda setuju bahwa "X" adalah benar, maka nyatakan dengan "X" diikuti dengan referensinya. Jika harus merujuk ke karya tulis daripada hasislnya, katakan "the paper states that ..." atau "Johnson and Smith [J&S 90] presents an evidence that ... ".  

Konsep vs. contoh:

Pembaca bisa menjadi bingung ketika batas antara konsep dan contoh tidak jelas. Contoh yang umum termasuk: sebuah algoritma dan program tertentu sebagai implementasinya, bahasa pemrograman dan compiler, abstraksi umum dan implementasi tertentu dari sistem komputer, struktur data dan contoh penggunaan memorinya.

Terminologi untuk konsep dan abstraksi:

Ketika mendefinisikan istilah untuk sebuah konsep, berhati-hatilah untuk memutuskan bagaimana suatu ide diterjemahkan kedalam suatu implementasi. Pertimbangkan contoh berikut ini:
VM systems include a concept known as an address space. The system dynamically creates an address space when a program needs one, and destroys an address space when the program that created the space has finished using it. A VM system uses a small, finite number to identify each address space. Conceptually, one understands that each new address space should have a new identifier. However, if a VM system executes so long that it exhausts all possible address space identifiers, it must reuse a number.
Poin penting contoh di atas adalah diskusi dalam tulisan tersebut hanya masuk akal karena "address space" didefinisikan secara independen dari "address space identifier". Jika penulis mengharapkan diskusi perbedaan antara  konsep dan implementasinya, maka perbedaan antar keduanya harus terlihat jelas. 

Pengetahuan vs. data:

Adalah fakta bahwa hasil eksperimen disebut data. Istilah pengetahuan (knowledge) mengimplikasikan data yang telah dianalisa, dikondensasi, atau dikombinasikan dengan data dari eksperimen lain untuk menghasilkan informasi yang berguna.

Sebab dan akibat:

Sebuah disertasi harus secara hati-hati memisahkan hubungan sebab-akibat dari korelasi statistik sederhana. Sebagai contoh, jika semua program komputer yang ditulis di lab Profressor x membutuhkan memori lebih banyak daripada program komputer yang ditulis di lab Professor Y, bisa jadi tidak ada hubungannnya sama sekali dengan kedua professor ataupun programmernya (misal, mungkin orang-orang di lab Professor X sedang bekerja pada aplikasi yang membutuhkan memori lebih banyak daripada aplikasi yang dikembangkan di lab Professor Y).

Hanya mengambil kesimpulan yang kuat:

Penulis harus berhati-hati untuk hanya mengambil kesimpulan yang didukung bukti-bukti. Sebagai contoh, jika program komputer berjalan lebih lambat di komputer A daripada kompter B, maka tidak dapat disimpulkan bahwa komputer A lebih lambat dari komputer B kecuali penulis membahas perbedaan sistem operasi, divais input-output, ukuran memori, memori cache, atau lebar pita bus internal. Faktanya, penulis juga harus menghindari penilaian antar kedua komputer kecuali telah mendapatkan hasil dari eksperimen kontrol (misal, menjalankan satu set program beberapa kali, setiap kalinya ketika komputer dalam keadaan diam/idle). Bahkan jika penyebabnya sangat jelas, penulis tidak dapat menyimpulkan kecuali dengan bukti yang kuat.

Komersial dan sains:

Dalam disertasi saintifik, penulis tidak boleh mengambil kesimpulan berdasarkan kesuksesan ekonomi atau komersialisasi dari suatu idea/metode, tidak juga berspekulasi pada sejarah pengembangan ide. Seorang ilmuwan harus tetap obyektif tentang keunikan ide secara independen dari kepopuleran komersial. Sebagai tambahan, seorang ilmuan tidak seharusnya mengasumsikan bahwa sukses komersial menjadi ukuran dari bekerjanya suatu ide (banyak produk populer justru tidak didesain dan direkayasa dengan baik). Oleh karenanya, statemen seperti  ``over four hundred vendors make products using technique Y'' tidak relevan dalam disertasi.

Politik dan sains:

Seorang ilmuwan menghindari semua pengaruh politik ketika mengkaji suatu ide. Jelas tidak menjadi masalah ketika organisasi pemerintahan, partai politik, grup keagamaan, atau organisasi lainnya mendukung suatu ide. Lebih penting dan sering terlewatkan, tidak menjadi masalah ketika sebuah ide berasal dari ilmuwan yang telah memenangkan hadiah Nobel ataupun mahasiswa tingkat satu. Penulis harus mengkaji sebuah ide secara independen dari sumbernya.

Struktur disertasi:

Secara umum, setiap disertasi harus mendefinisikan masalah yang memotivasi penelitian, menjelaskan mengapa masalah tersebut penting. memaparkan apa yang telah dilakukan (oleh peneliti lain), dan apa kontribusinya yang baru, mendokumentasikan eksperimen yang memvalidasi kontribusi, dan mengambil kesimpulan. Tidak ada struktur baku untuk sebuah disertasi: setiap struktur adalah unik. Bagaimanapun, penulis baru untuk disertasi dibidang sains komputasi eksperimental akan menemukan contoh berikut sebagai awalan yang baik untuk menulis disertasi.
  • Chapter 1: Introduction
  • Berisi deskripsi umum dari permasalahan; mengapa hal tsb penting; ringkasan dari pencapaian dan pernyataan hipotesis dari pertanyaan spesifik yang akan dieksplorasi. Buat bab ini dapat dipahami oleh semua orang.
  • Chapter 2: Definitions
  • Berisi istilah-istilah baru. Definisikan secara presisi, singkat, dan tidak ambigu.
  • Chapter 3: Conceptual Method
  • Deskripsikan konsep utama yang melatarbelakangi pekerjaan anda. Buat bab ini sebagai theme yang menghubungkan semua argumen anda. Bab ini harus menjawab pertanyan yang diekspose di bab pertama pada level konsep. Jika diperlukan, tambahkan bab tambahan untuk memberikan alasan tambahan tentang permasalahan atau solusinya.
  • Chapter 4: Experimental Measurements
  • Deskripsikan hasil eksperimen yang memberikan bukti untuk mendukung kesimpulan anda. Biasanya eksperimen tersebut menitik beratkan pada proof-of-concept (mendemonstrasikan bekerjanya suatu teknik/metode efisiensi (mendemonstrasikan suatu teknik/metode memberikan hasil yang lebih baik dari metode yang telah ada).
  • Chapter 5: Corollaries and Consequences
  • Deskripsikan variasi, ekstensi, dan aplikasi lain dari ide utama.
  • Chapter 6: Conclusions 
  • Buat ringkasan dari apa yang telah dipelajari dan bagimana hal tsb dapat diimplemtasikan. Sebutkan kemungkinan untuk penelitian selanjutnya.
  • Abstract
  • Sebuah (atau beberapa) paragraf pendek yang berisi ringkasan disertasi. Deskripsikan permasalahan dan pendekatan penelitian. Sebutkan kontribusi utamanya.

Urutan yang direkomendasikan saat menulis:

Cara termudah untuk membangun sebuah disertasi adalah dari luar ke dalam. Mulai menulis dari bab yang menggambarkan penelitian anda (Bab 3, 4, 5 dalam outline di atas). Kumpulkan semua term/istilah ketika muncul dan definisikan tiap istilah tersebut. Definisikan setiap term teknik, meski istilah digunakan dengan cara konvensional.
Organisasikan setiap definisi adalam sebuah bab. Buat definisi secara presisi dan formal. Review bab tersebut untuk memverifikasi penggunaan term teknis melekat pada definisinya. Setelah membaca bab selanjutnya untuk memverifikasi terminologi, tulis kesimpulannya (Bab 6). Tulis pengantarnya (Bab 1) kemudian. Terakhir, lengkapi dengan abstrak. 

Kunci sukses:

Tidak ada kunci sukses selain latihan. Tidak ada yang pernah belajar untuk menulis dengan membaca esai seperti ini. Sebaliknya, anda butuh latihan, latihan, dan latihan. Setiap hari.

Pemikiran terakhir:

Kami meninggalkan anda dengan beberapa ide berikut untuk dipikirkan. Jika ide-ide tersebut tidak berarti untuk anda sekarang, revisi ide-ide ini ketika anda menyelesaikan disertasi anda.
After great pain, a formal feeling comes.
-- Emily Dickinson
A man may write at any time, if he will set himself doggedly to it.
-- Samuel Johnson
Keep right on to the end of the road.
-- Harry Lauder
The average Ph.D. thesis is nothing but the transference of bones from one graveyard to another.
-- Frank J. Dobie


Referensi
[1] https://www.cs.purdue.edu/homes/dec/essay.dissertation.html
[2] https://www.cs.purdue.edu/homes/dec/essay.escape.html

Monday, August 24, 2020

Menulis Artikel (Ilmiah Populer) Agar Mudah Dipahami: Beberapa Prinsip

Tulisan ini bertujuan untuk mengenalkan beberapa prinsip yang dapat dipakai untuk memudahkan pembaca memahami tulisan anda. Lebih jelasnya, silahkan baca sebuah paragraf berikut.


Beberapa prinsip tersebut adalah sebagai berikut. Tulisan dalam bentuk miring, seperti ini, adalah perbaikan dari contoh dengan menerapkan prinsip yang disebutkan.

1. Semakin pendek kalimat, semakin mudah dipahami.
Tulisan yang pendek lebih mudah dipahami daripada tulisan yang panjang; kalimat yang pendek lebih mudah dipahami daripada kalimat yang panjang. Singkatnya, otak kita akan lebih cepat memproses kata antar kata dalam satu kalimat, kalimat antar kalimat dalam satu paragraf. Bandingkan dua paragraf berikut.

Terminologi "kontinyu" pada tulisan ini mengacu pada kontinuitas waktu, bukan pada kontinuitas dimensi, seperti halnya sinyal analog yang memiliki semua nilai pada rentang waktu tertentu. Terminologi kontinyu juga ada pada pembagian emosi, yakni emosi berdasarkan kategori dan emosi berdasarkan dimensi yang sering disebut juga emosi kontinyu. Meski definisi emosi kontinyu juga dipakai pada tulisan ini, terminologi 'kontinyu" pada judul tulisan ini merepresentasikan emosi dalam domain waktu singkat, bukan mereprentasikan kontinuitas nilai emosi pada ruang dua atau tiga dimensi.
Terminologi "kontinyu" pada judul tulisan ini mengacu pada domain waktu. Selain domain waktu, terminologi kontinyu juga diaplikasikan pada ruang tiga dimensi emosi. Pada ruang tersebut, emosi memiliki nilai pada ruang tertentu. Kontinuitas emosi pada domain waktu menjadi bahasan utama selain kontinuitas nilai emosi pada dimensi ruang.

Bandingkan paragraf pertama dengan kedua. Paragraf pertama berisi tiga kalimat dengan 78 kata sedang paragraf kedua berisi empat kalimat dengan 46 kata. Selain lebih singkat, paragraf kedua lebih mudah dipahami, bukan?

2. Semakin tidak kompleks tulisan, semakin mudah dipahami. Kompleksitas sebuat tulisan (kalimat) dapat diukur dari banyaknya tanda baca koma dan titik koma. Contohnya adalah sebagai berikut.
Berbagai upaya telah dilakukan untuk meningkatkan kinerja AC, namun pada artikel ini hanya difokuskan pada penggunaan energi panas bumi.
Berbagai upaya telah dilakukan untuk meningkatkan kinerja AC. Tulisan ini hanya difokuskan pada penggunaan energi panas bumi.


3. Eksplisit lebih baik daripada implisit.
Perhatikan contoh berikut.
Banyak sumber energi lain yang dapat dipakai untuk meningkatkan kinerja AC.
Energi angin, panas bumi, dan cahaya matahari dapat dipakai untuk meningkatkan kinerja AC.
Bab ini berisi penjelasan tentang X dan Y serta hubungannya satu sama lain.
Bab ini bertujuan untuk menjelaskan hubungan X dan Y.

Contoh kedua di atas yang ditulis tebal disebut juga sebagai signpost dalam tata tulis bahasa Inggris. Signpost ini sangat berguna bagi pembaca untuk memberitahu mereka secara eksplisit apa yang sedang mereka baca. Selain signpost, cara lain untuk memberitahukan secara eksplisit maksud suatu kalimat adalah dengan kata-kata transisi. Misalnya: "Selanjutnya akan dipaparkan XXX", "..., dapat disimpulkan bahwa ... ", "Kontribusi artikel ini adalah sebagai berikut, ...".


4. Satu paragraf berisi satu ide pokok (di awal kalimat/kalimat topik); satu kalimat hanya berisi satu ide.

Satu paragraf hanya berisi satu kalimat topik. Kalimat ini biasanya, dan sangat disarankan, berada di awal paragraf. Kalimat topik pada penulisan akademik berisi statemen thesis. Kalimat-kalimat selanjutnya dalam paragraf tersebut mendukung kalimat topik. Tidak bertentangan ataupun tidak berhubungan dengan kalimat topik. Prinsip ini disebut kesatuan (unity).

Sebagaimana paragraf, satu artikel hendaknya hanya berisi satu ide atau konsep yang ingin dijelaskan. Satu konsep sebagai konsep utama tersebut ditunjang oleh beberapa sub-konsep yang mendukun konsep utama. Konsep utama harus tergambar dalam judul. Sub-konsep sub-konsep pendukungnya bisa berupa seksi (section) yang ditulis dalam heading 1, 2, .. dst. Dengan demikian alur tulisan akan lebih mudah dipahami.

5. Koheren, konsisten dan logis (sound)
Koheren dapat diartikan bahwa antar kalimat dalam satu paragraf memiliki hubungan semantik antarunsur kebahasaan. Hubungan ini biasanya ditandakan dengan kesamaan kata; kata di (akhir) satu kalimat dipakai lagi di (awal) kalimat berikutnya. Koherensi membuat paragraf mudah dimengerti oleh pembaca. Koheren membutuhkan kohesi: hubungan antaralinea bersifat padu [1]. Kohesi ini dapat dibantu dengan kata-kata transisi dan kata-kata penunjuk arah (signpost).

Konsisten dalam penulisan adalah pemakaian istilah, singkatan, dan tanda-tanda yang bersifat tetap [1] sedangkan logis adalah benar baik struktur (sintaks) dan kontennya. Konsisten membantu pembaca untuk lebih mudah memahami isi artikel; pembaca tidak perlu berpikir dua kali untuk arti dari kata yang sama. Perhatikan contoh berikut.

Model A memiliki 23 input dan 3 output. Sistem tersebut tersusun atas 3 lapis jaringan LSTM satu arah. Arsitektur ini diadopsi dari [x] yang terbukti memberikan hasil yang baik untuk sistem pengenalan suara. Dengan ide yang serupa, penggunaan sistem tersebut untuk pengenalan emosi dari suara manusia mungkin akan memberikan hasil yang lebih baik dari sistem yang ada saat ini.

Contoh di atas menggunakan kata-kata yang tidak konsisten. Model, sistem, dan arsitektur adalah kata-kata yang berbeda untuk menunjukkan arti yang sama. Cara ini akan menyulitkan pembaca memahamai tulisan tersebut. Paragraf diatas akan lebih mudah dipahami jika menggunakan kata yang sama, misal "model". Konsistensi membantu mempermudah pemahaman, sebagaimana koherensi dan logika.

Perbedaan dengan penulisan dalam bahasa Inggris

Ada beberapa perbedaan antara penulisan artikel ilmiah dalam bahasa Indonesia dan bahasa Inggris. Diantaranya adalah dua hal berikut ini.
  1. Pada Bahasa Inggris kalimat verbal lebih mudah dipahami daripada kalimat nominal; pada bahasa Indonesia prinsip ini tidak perlu berlaku mutlak. Kalimat nominal kadang lebih mudah dipahami.
  2. Pada Bahasa Inggris, kalimat aktif lebih mudah dipahami daripada kalimat pasif. Prinsip ini juga tidak perlu pada artikel berbahasa Indonesia. Kalimat pasif sering lebih mudah dipahami seperti dalam kalimat ini.
Dua prinsip menulis artikel ilmiah di atas sangat membantu mempermudah pemahaman artikel ilmiah berbahasa Inggris namun tidak mutlak diperlukan pada artikel ilmiah populer berbahasa Indonesia.

Penutup

Dalam tulisan ini, saya berargumen bahwa ada beberapa prinsip (dalam hal ini lima) yang sangat penting agar sebuah artikel ilmiah populer dapat dipahami dengan mudah. Meskipun ditujukan untuk artikel ilmiah populer, bukan tidak mungkin prinsip-prinsip tersebut dapat diaplikasikan pada artikel jenis lain untuk tujuan yang sama: agar tulisan mudah dipahami pembaca.

Referensi:
[1] RM Wibowo, 2013, "Cermat Menulis dalam Bahasa Indonesia", Yogyakarta: A.com Advertising.

Tuesday, August 18, 2020

Menulis: Mengikat Ilmu dan Memajukan Bangsa

Ikatlah ilmu dengan menuliskannya | Tie science by writing” (Ali bin Abi Thalib)

Petuah dari seorang presiden dan ilmuwan masa lampau di atas patut direnungkan. Tanpa mengabaikan latar belakang agama (Islam), quote dari Ali di atas telah terbukti kebenarannya. Kejayaan bangsa timur tengah pada masa lampau adalah karena kejayaan mereka pada ilmu pengetahuan dan penulisannya. Pun demikian dengan era kejayaan bangsa-bangsa Eropa dan Amerika pada masa kini. Kualitas dan kuantitas menulis yang bisa diketahui dari jumlah publikasi, baik artikel, buku, baik ilmiah maupun non ilmiah menjadi ukuran kemajuan suatu bangsa yang sejalan dengan realita di lapangan. Sebagai contoh, daftar publikasi buku di dunia per negara per tahun menempatkan Amerika, China dan Inggris sebagai penerbit buku terbanyak. Tidak berbeda jauh, rangking jurnal dunia per negara juga menghasilkan urutan yang sama untuk tiga besar negara sains internasional berdasarkan jumlah publikasi jurnal, sitasi dan indeks jurnal tersebut.

Publikasi buku, dan mungkin juga publikasi ilmiah, dapat dijadikan acuan untuk mengukur tingkat standar kehidupan, pendidikan, dan kesadaran berbangsa [1]. Amerika pada tahun 2010 menerbitkan buku dengan jumlah tertinggi sebanyak 328,259 eksemplar dan Indonesia berada di urutan 19 dengan lebih dari 24,000 eksemplar per tahun [2]. Sayang data ini tidak diperbarui (diupdate). Hanya beberapa negara yang memperbarui datanya. Kini, Indonesia masuk 10 besar (Indonesia menggunakan data tahun 2018, sedangkan negara lainnya kebanyakan masih data tahun 2013).



Karena data publikasi buku tidak dapat dibandingkan secara langsung karena perbedaan data per tahun, memakai data publikasi ilmiah akan memberikan hasil yang lebih sesuai. Berikut adalah perbandingan data publikasi ilmiah yang dilansir oleh Scimagojr.com pada tahun 2013 dan 2019.

Tabel 1. 10 besar negara dengan publikasi ilmiah terbanyak (1996-2013)[4]
No Country Documents Citable documents Citations Self-Citations Citations per Document H index
1 United States 7,063,329 6,672,307 129,540,193 62,480,425 20.45 1380
2 China 2,680,395 2,655,272 11,253,119 6,127,507 6.17 385
3 United Kingdom 1,918,650 1,763,766 31,393,290 7,513,112 18.29 851
4 Germany 1,782,920 1,704,566 25,848,738 6,852,785 16.16 740
5 Japan 1,776,473 1,734,289 20,347,377 6,073,934 12.11 635
6 France 1,283,370 1,229,376 17,870,597 4,151,730 15.6 681
7 Canada 993,461 946,493 15,696,168 3,050,504 18.5 658
8 Italy 959,688 909,701 12,719,572 2,976,533 15.26 588
9 Spain 759,811 715,452 8,688,942 2,212,008 13.89 476
10 India 750,777 716,232 4,528,302 1,585,248 7.99 301

Tabel 2. 10 besar negara dengan publikasi imliah terbanyak (1996-2019)[5]
No Country Documents Citable documents Citations Self-citations Citations per document H index
1 United States 12,839,607 11,339,587 339,229,687 151,101,326 26.42 2386
2 China 6,589,695 6,469,704 61,658,138 35,288,321 9.36 884
3 United Kingdom 3,715,590 3,145,039 89,357,199 20,051,057 24.05 1487
4 Germany 3,222,549 2,964,814 70,371,678 16,909,011 21.84 1298
5 Japan 2,893,614 2,762,245 48,232,916 12,366,873 16.67 1036
6 France 2,249,498 2,084,654 48,364,784 9,918,365 21.5 1180
7 Italy 1,881,818 1,708,800 37,430,348 8,584,150 19.89 1030
8 Canada 1,877,183 1,684,334 45,766,661 7,875,702 24.38 1193
9 India 1,873,277 1,741,868 18,243,852 6,215,206 9.74 624
10 Australia 1,489,730 1,315,978 32,118,547 6,519,905 21.56 1001

Indonesia pada tahun 2012 diatas menempati urutan ke-61 rangking sains internasional secara keseluruhan (1996-2020). H indeks pada tabel diatas mencerminkan jumlah publikasi dari satu negara yang di-sitasi (dikutip) dan menerima minimah h sitasi.(sumber: SCImago Journal & Country Rank ). Pada tahun 2019 Indonesia menempati 47. Jika diasumsikan kenaikan peringkatnya adalah linier, maka Indonesia membutuhkan waktu 24 tahun lagi untuk bisa menembus 10 besar negara dengan publikasi ilmiah terbanyak di dunia (dihitung dari tahun 1996-). Peringkat per tahun dengan metrik H-index mungkin lebih baik dalam merepresentasikan posisi negara-negara di dunia berdasarkan publikasi ilmiahnya.

Dari data diatas, jelaslah posisi kita diantara negara-negara lain di dunia. Kita di posisi buncit, khususnya dalam H-indeks. Tidak harus menulis buku atau membuat publikasi ilmiah untuk memulai menulis. Namun, dengan tulisan sederhana yang bisa kita bagikan untuk orang lain bisa menjadi awal untuk menuju ke tahap yang lebih tinggi. Bagaimana bisa? menulis artikel (ilmiah populer) akan mendukung kemampuan menulis ilmiah. Jika dibalik, tulisan ilmiah (publikasi seminar atau jurnal) ditulis dalam blog, media sosial, atau media cetak, peluang untuk disitasi semakin besar sehingga meningkatkan indeks sitasi dan H-index.

Menulis: Bakat atau Keahlian??

Ada yang mengatakan, skill (keahlian) yang kita miliki itu diciptakan, bukan jatuh dari langit. Pepatah inggris mengatakan: greatness isn't born by nurture, It's grown by nature. Seorang Thomas Alfa Edison butuh 1000 eksperimen gagal (dia tidak menyebutnya gagal, namun 1000 cara berbeda) sebelum menemukan bola lampu dan berbagai penemuan lainnya. Begitu juga dengan menulis, diperlukan usaha yang keras untuk bisa memiliki keahlian menulis. Beberapa orang mungkin memiliki bakat menulis sejak lahir, namun tanpa mengasah kemampuan menulisnya, dia tak akan menjadi ahli. Sebaliknya, seseorang yang tidak memiliki bakat menulis pada awalnya, namun dia rajin dan selalu mengasah keahliannya, dia mampu menjadi penulis besar pada akhirnya.

Imajinasi dan Kreativitas

Karena menulis tidak hanya datang dari bakat, namun latihan menulis lebih utama untuk mengasah imaginasi dan kreativitas dalam menulis. Imaginasi mengambil apa yang yang kita lihat, pengalaman kita dan mengkombinasikannya menjadi suatu hal yang baru. Satu hal yang bisa menjadikan anda skillful dalam menulis adalah dengan menulis hanya topik/ilmu yang anda sukai dan kuasai, bukan topik-topik yang lain. Menjadi seorang ahli dalam satu bidang akan lebih baik, daripada tidak menguasai satu hal-pun dikarenakan bidang yang sangat luas cakupannya. Dalam menulis, mengasah kemampuan dalam topik tertentu serta menggunakan imajinasi kita dalam menulis topik tersebut akan menghasilkan tulisan yang kreatif. Dengan menulis, maka akan mengikat ilmu anda pada bidang tersebut. Kalau kelak anda lupa atau ingin memperbaiki tulisan anda, anda tinggal membuka catatan tentang hal tersebut.

Dari mana memulai?

Kita bisa memulai menulis dari mana saja. Membuat blog adalah salah satu hal paling cepat dan mendasar untuk mengembangkan kemampuan menulis kita. Wordpress dan Blogspot adalah dua provider blog terpopuler saat ini. Silakan bergabung di salah satu atau kedua blog tersebut dan kembangkan kemampuan menulis anda disitu. Blog adalah buku harian atau diary di era modern. Namun tak hanya tulisan-tulisan pribadi saja yang hendaknya di posting di blog. Tulisan yang kiranya bisa lebih bermanfaat untuk orang lain akan memiliki nilai lebih dari sekedar kisah pribadi tentang diri kita.

Bagaimana selanjutnya?

Jika anda sudah memiliki blog, bagaimana selanjutnya? Langkah-langkah berikut mungkin bisa membantu anda meningkatkan kemampuan menulis anda.
  • Banyak membaca, semakin banyak membaca, akan memperkaya tulisan anda.
  • Menulis sebanyak mungkin, kuantitas menghasilkan kualitas.
  • Meminta saran dan pendapat teman tentang tulisan anda (read dan proofread).
  • Menggunakan kata-kata baku, bukan alay, bisa mengacu pada KBBI.
  • Mengikuti kursus MOOC menulis, misalnya di EdX, Coursera, atau yang lainnya.
  • Berkontribusi pada web sukarela, misalnya di SainsHack.com
Sebagai tambahan, saat ini saya bertindak sebagai editor SainsHack.com, dan kami akan sangat senang menerima kontribusi tulisan anda.

Penutup

Artikel ini memotivasi pembaca untuk menulis. Ada dua manfaat utama yang diperoleh, yakni secara internal penulis akan lebih mengokohkan bangunan keilmuannya, dan secara eksternal meningkatkan daya saing bangsa melalui kenaikan tingkat standar kehidupan, pendidikan dan kesadaran berbangsa. Penulis memaparkan dan mengalisa secara singkat dua buah metrik, publikasi buku dan publikasi ilmiah. Penulis mengalisa data keduanya dengan membandingkan data antar waktu. Dari analisa publikasi ilmiah, penulis memprediksi bahwa Indonesia baru akan masuk pada 10 besar negara dengan publikasi ilmiah terbesar di dunia berdasarkan ranking Scimago pada tahun 2044. Diperlukan langkah-langkah tambahan untuk mempercepat masuknya Indonesia pada 10 besar negara dengan publikasi ilmiah terbanyak di dunia, dan menulis artikel ilmiah mungkin salah satunya.

Referensi:
[1] Wresch, William. Have and Have-Nots in the Information Age. Rutgers University Press, 1996, p. 39 (via [2])
[2] http://en.wikipedia.org/wiki/Books_published_per_country_per_year, diakses 20 Oktober 2013.
[3] http://en.wikipedia.org/wiki/Books_published_per_country_per_year, diakses 16 Agustus 2020.
[4] https://www.scimagojr.com/countryrank.php?order=h&ord=desc, diakses 10 Oktober 2013.
[5] https://www.scimagojr.com/countryrank.php?order=h&ord=desc, diakses 16 Agustus 2020.

Sunday, August 09, 2020

Fair Use dan Menghindari Jebakan Karya Berhak Cipta

Fair use

Fair use merupakan penggunaan karya berhak-cipta untuk tujuan mentranformasikan informasi di dalamnya (karya berhak-cipta) untuk tujuan non-komersial. Secara umum sebuah karya berdasarkan haknya dapat dibagi menjadi dua: copyright dan copyleft [atau right to copy :)]. Copyright dilindungi undang-undang, sedangkan copyleft memperbolehkan anda untuk mengcopy material tertentu dengan syarat dan ketentuannya. Misalnya material di dalam blog ini berlisensi Creative Commons 3.0 4.0 CC-by-SA, artinya anda bisa menggunakan materi dalam blog saya ini dengan tujuan apapun, bahkan untuk tujuan komersial sekalipun (dengan kata lain anda boleh menjual tulisan saya selama tetap menyertakan nama saya!), kecuali materi-materi yang saya ambil dari luar, maka lisensinya mengikuti sumber materi tersebut.

Empat faktor yang harus dipertimbangkan dalam penggunaan fair use:
1. Tujuan dan karakter penggunaan: apakah untuk tujuan komersial (misal penulisan buku komersial) atau untuk non-komersial (penggunaan di kelas atau web non-komersial).
Prinsip dasar fair use adalah tujuan penggunaan karya cipta. Sederhananya, jika untuk tujuan komersial maka bukan termasuk fair use.

2. Bentuk materi yang digunakan: apakah gambar, teks, tabel, dll.
Setiap karya cipta, jika tidak disebutkan lisensinya, by default dilindungi oleh hak cipta. Gambar, ilustrasi, dan tabel TIDAK BISA disitasi tanpa ijin. Hanya teks yang bisa dikutip, itupun tidak secara langsung. Pengutipan langsung (tanpa editing) dan dengan secara utuh (misal satu kalimat) termasuk plagiasi.

3. Porsi dan substansi dari karya yang digunakan, apakah (gambar/tulisan) utuh atau hanya sebagian.
Menggunakan materi secara utuh (misal: semua gambar) nampaknya tidak fair. Kita hanya bisa menggunakan sebagian (kecil) dari karya yang kita sitasi.

4. Efek dari karya yang digunakan ulang; apakah menimbulkan kerugian dari karya yang digunakan.
Salah satu penilaian penting fair use adalah dampak yang dihasilkan; apakah menguntungkan bagi pemakai fair use dan merugikan pembuat karya cipta asli. Jika ada kerugian dari pembuat karya cipta aslinya, maka pemakaian karya cipta tersebut tidak fair use.

Salah satu contoh kasus gagalnya penggunaan fair use ini adalah pemakaian Java programming language di Android. Google dinilai tidak menggunakan java programming secara fair use dan diharuskan membayar royalti ke Oracle atas revenue yang diperoleh dari Android [1].

Menghindari jebakan karya berhak cipta

Karya berhak cipta bersifat menjebak. Telah dijelaskan sebelumnya, by default, semua karya (tulisan, gambar, video, dll) dilindungi oleh hak cipta meski tidak disebutkan lisensinya. Hanya karya yang berlisensi creative commons yang bisa digunakan tanpa izin (tapi harus mencantumkan kredit). Karya berhak cipta tetap bisa digunakan ulang, namun harus meminta izin pemegang hak cipta. Berikut cara singkatnya.

Mencari tahu lisensi dari karya cipta

Lisensi dari sebuah karya cipta biasanya dicantumkan langsung di bawah judul dan penulis (untuk karya ilmiah). Lagi, jika tidak ada lisensi CC, maka karya cipta tersebut berhak cipta (copyrighted). Berikut adalah contoh-contoh pencantuman lisensi karya tulis ilmiah.
Contoh karya tulis berhak cipta dan berlisensi CC.



Contoh karya tulis berhak cipta dan berlisensi non CC.

Meminta izin

Jika karya yang ingin disitasi berlisensi non CC, maka langkah selanjutnya adalah meminta izin. Dua hal penting saat meminta izin karya berhak cipta, ada yang gratis dan ada yang berbayar. Berikut contoh permintaan izin karya yang berbayar dan gratis.
Permintaan izin karya berhak cipta berbayar
Permintaan izin karya berhak cipta gratis

Memberi kredit karya berhak cipta

Setelah mendapatkan izin dari pemegang hak cipta, kita bisa menampilkan gambar, tabel, atau ilustrasi yang ingin kita sitasi. Kita tetap diwajibkan memberikan kredit atas izin yang telah diberikan tersebut. Berikut contoh pemberian kredit terhadap pemegang hak cipta.
Contoh pemberian kredit terhadap karya berhak cipta [2] 

Penutup: diagram alir penggunaan karya berhak cipta

Sebagai penutup, diagram alir dibawah ini menjelaskan proses permintaan izin karya berhak cipta. Karya cipta yang digunakan pada diagram alir ini dibatasi hanya karya cipta yang berlisensi cc dan non-cc yang gratis.
Diagram alir penggunaan materi (gambar, tabel, dll) dari karya tulis berhak cipta


Referensi:
[1] https://en.wikipedia.org/wiki/Google_v._Oracle_America
[2] https://www.sainshack.com/2020/08/07/foto-atom-hidrogen/

Sunday, August 02, 2020

Respon masyarakat terhadap kebijakan "belajar di rumah" di masa pandemi

Tulisan ini menganalisa sentimen dan emosi masyarakat terhadap kebijakan "belajar di rumah" (SD, SMP, SMA, Perguruan Tinggi) di masa pandemi. Data ("masyarakat") yang digunakan adalah data Twitter yang di-crawling oleh Drone Emprit periode 1 April sampai dengan 31 Juli 2020. Kata utama yang digunakan adalah "kuliah, belajar, #Belajardirumah, #belajardarirumah" dengan kata kunci tambahan "online" dan "rumah" (filter AND).

Bagaimana sentimen dan emosi masyarakat terhadap kebijakan "belajar di rumah"?

Jawaban singkatnya untuk sentimen: negatif. Masyarakat menilai negatif kebijakan "belajar di rumah" ini. Total, 52% mention memiliki sentimen negatif, 44% negatif, dan sisanya netral. Awalnya (data bulan pertama, lihat data per bulan) persepsi masyarakat positif, namun semakin lama menjadi negatif. Perlu diselidiki kenapa persepsi masyarakat bisa berubah dari positif ke negatif. Data di bawah ini menunjukkan perbandingan sentimen positif dan negatif sampai akhir bulan Juli 2020.

Sentimen total (s/d Juli 2020) terhadap kebijakan "belajar di rumah"

Bagaimana dengan emosi masyarakat? Hasilnya sedikit berbeda. Dengan mengasumsikan bahwa "joy, trust, fear, surprise" adalah emosi positif dan lawannya, "sadness, disgust, anger, anticipation" adalah emosi negatif maka dari total mentions, sebanyak 9700-nya bernilai emosi positif sedangkan 5300 mentions bernilai emosi negatif. Penjelasan lebih lanjut tentang jenis emosi ini bisa dilihat pada tautan referensi.
Emosi total kebijakan "belajar di rumah" (1 April s/d 31 Juli 2020)

Perubahan sentimen dan emosi dari bulan ke bulan

Satu hal yang menarik dari data sentimen dan emosi dari respon publik terhadap kebijakan "belajar di rumah" adalah perubahan sentimen dari positif ke negatif. Pada bulan pertama (April) respon masyarakat positif. Mulai Mei sampai sekarang berubah menjadi negatif. Berikut adalah data sentimen tiap bulan mulai April hingga Juli 2020.
Sentimen terhadap kebijakan "belajar di rumah" di Bulan April

Sentimen "belajar di rumah" di Bulan Mei

Sentimen "belajar di rumah" di Bulan Juni 2020
Sentimen "belajar di rumah" di Bulan Juli 2020
Sedangkan data perubahan emosi dari April sampai dengan Juli 2020 dapat ditampilkan seperti berikut.
Emosi publik terhadap "belajar di rumah", April 2020

Emosi publik terhadap "belajar di rumah", Mei 2020
Emosi publik terhadap "belajar di rumah", Juni 2020

Emosi publik terhadap "belajar di rumah", Juli 2020

Kenapa bisa berubah dari positif ke negatif?

Baik sentimen dan emosi dari data di atas berubah-ubah dari positif ke negatif. Dari sisi sentimen, hanya bulan pertama yang positif, selebihnya negatif. Dari sisi emosi, dua emosi berubah-ubah secara drastis: trust dan anger. Di bulan pertama, masyarakat lebih banyak "marah"-nya daripada "percaya"-nya. Di bulan kedua sebaliknya. Di bulan ketiga kembali tingkat kemarahan masyarakat naik dan tingkat kepercayaannya turun sedikit. Yang menggembirakan, di bulan keempat tingkat kemarahan masyarakat turun drastis meskipun tingkat kepercayaannya juga menurun. Bisa jadi perubahan emosi ini karena turunnya jumlah mention dengan kata-kata kunci yang dimonitor karena tingkat kepedulian masyarakat terhadap kebijakan "belajar di rumah" ini menurun (tak acuh). Bisa jadi karena sebab lain. Analisa mendalam tentang isi Tweet dengan perubahan sentimen dan emosi akan membantu pemahaman terhadap penyebab dari berubahnya sentimen dan emosi publik atas kebijakan "belajar di rumah" ini.

Jadi apa penyebab perubahan sentimen dan emosi masyarakat terhadap kebijakan "belajar di rumah"? Seperti dituliskan pada kalimat sebelumnya, hal ini diluar jangkauan tulisan ini. Mencari penyebab perubahan persepsi masyarakat tersebut sangat menarik, namun diperlukan telaah mendalam. Misalnya dengan menganalisa "apa yang terjadi" di bulan Mei dengan kata-kata yang sering muncul pada tweet bersentimen negatif.

Kata-kata apa yang banyak digunakan untuk sentimen positif dan negatif?

Kata-kata yang banyak digunakan untuk tweet bersentimen negatif dan positif diperlihatkan pada gambar di bawah ini. Untuk sentimen positif kata-kata seperti "demi, rumah, hingga internet, miliki" merupakan paling banyak digunakan. Sedangkan untuk sentimen negatif kata-katanya adalah "tuan, tetamu, sakit, respect, stupid, masuk." Sulit untuk menganalisa hubungan kata-kata tersebut dengan sentimen kecuali dengan analisa semantik dan sintaksi dari isi Twitter yang bersangkutan. Hal ini juga cukup menarik untuk dipelajari (dijadikan tema tugas akhir??)
Word cloud sentimen positif kebijakan "belajar di rumah"

Word cloud sentimen negatif kebijakan "belajar di rumah"

Hasilnya berbeda dengan reaksi masyarakat atas kinerja Kemenkes

Dengan teknik yang sama, analisa sentimen dan emosi masyarakat terkait kinerja Kemenkes telah dilakukan. Hasilnya berbeda! Jika pada masa belajar di rumah ini sentimen masyarakat cenderung negatif (begitu juga emosinya), tidak demikian dengan kinerja Kemenkes menghadapi pandemi Covid-19 ini. Masyarakat justru menilanya positif. Seperti apa sentimen dan reaksi emosi masyarakat terhadap peraturan Kemenkes tersebut? Nantikan di artikel selanjutnya (dijadwalkan di penghujung September 2020).


Sangkalan: Tulisan ini dibuat dari data yang ditampilkan oleh Drone Emprit. Metode pengambilan data hingga data diperoleh dan visualisasinya diluar kendali penulis, termasuk demografi data yang diambil; bisa jadi data tidak hanya berasal dari masyarakat Indonesia karena kesamaan kata (misal: Brunei dan Malaysia ikut terjaring).

Referensi tambahan (interpretasi jenis emosi):
[1] https://www.6seconds.org/2017/04/27/plutchiks-mo

Monday, July 27, 2020

Latex add directory for figure

In the practice of Latex writing, it is common to use the same figure or figure directory across different projects (papers). Instead of a copy-paste-ing figure directory, which is usually big in size, it is better to just drop a line of latex code to specify where the location of the figure directory. By using this technique, we can avoid increasing memory size by preventing copying the same files/figures used by different tex files.

Here is how.
% for a single directory
\graphicspath{{figures/}} %Setting the graphicspath

% for multiple directories
\graphicspath{{figures1/}{figures2/}{figures3/}} %Setting the graphicspath


Don't forget the slash '/' after the name of the directory.
That's all. It works!

Monday, July 13, 2020

Menginstall static library di (JAIST) cluster

Salah satu kelemahan (sekaligus keunggulan) menggunakan superkomputer atau komputer cluster adalah ketiadaan akses root. Akses root ditiadakan agar user tidak bisa mengutak-atik system. Apa jadinya kalau user bisa masuk /usr, /lib, /etc, dll...? Sistem akan dengan sangat mudah dilumpuhkan, pun tanpa serangan (ketidak sengajaan, ketidaktahuan, dll).

Tidak punya akses ke root artinya tidak bisa menginstall program atau library di sistem. Hanya admin yang bisa melakukannya. Permasalahan yang sering muncul adalah menghadapi admin yang bandel alias strict. Contoh: saya minta di-installkan library A, "Dear Pak Admin, tolong install library A di server/superkomputer." Alih-alih memberi jawaban, biasanya admin ngeles seperti ini, "maaf saya tidak terbiasa menggunakan library A, di kluster sudah tersedia library B." Tamat sudah kalau begini jawabannya. Cari cara lainnya.

Kalau anda sering menggunakan Linux atau Unix, berita baiknya, anda bisa menggunakan library atau program tanpa perlu meningstallnya ke system (/usr/bin). Ini dinamakan library statik. Kita bisa menginstall library di home direktory dan memerintahkan sistem untuk mencari di library home tersebut. Singkatnya begini: Hai sistem, cari librari ini ditempat ini. Berikut dua contoh instalasi library statik: ffmpeg dan libsndfile. Dua-duanya dipakai untuk pemrosesan suara.

ffmpeg

Jika menggunakan komputer biasa, library ini dengan mudah bisa di-install dengan `sudo apt intall ffmpeg`. Di superkomputer atau kluster hal ini tidak bisa dilakukan. Untung ada pre-built statik library ffmpeg yang disediakan oleh https://johnvansickle.com/. Download file-nya, uncompress, dan update $PATH seperti berikut.


wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz
tar -xvf ffmpeg-git-amd64-static.tar.xz

Hasilnya, kita akan memiliki direktory yang berisi program ffmpeg. Misalnya direktori dengan versi berikut: "ffmpeg-git-20200130-amd64-static". Di dalamnya ada direktori bin dan didalam bin ada file program ffmpeg. Jadi kita arahkan $PATH pada lokasi tersebut. Ketik perintah berikut pada terminal.
export PATH="/home/$USER/ffmpeg-git-20200130-amd64-static:$PATH"

Untuk mempermamenkannya, kita bisa letakkan perintah tersebut di .bashrc atau .bash_profile dan kita `source` untuk mengupdate file config bash tersebut. Sangat simpel dan cepat (daripada meminta tolong admin kluster).

libsndfile

Pada contoh kedua saya menggunakan linuxbrew. Brew adalah program seperti apt/apt-get yang didesain untuk Unix (Mac dan Linux). Pertama kita harus menginstall linuxbrew di home direktori cluster.
wget https://raw.githubusercontent.com/Homebrew/install/master/install.sh
bash ./install.sh
Kadang kita perlu mengganti akses permisi dari file install.sh. Jika dibutuhkan, coba dengan `chmod +x install.sh`.
Brew akan memberi pilihan dimana kita menginstall. By default akan diinstall di system (root). Lagi, karena kita tidak punya akses ke root, maka installasi brew kita tempatkan di home direktori (pilih opsi ini dengan Ctrl-D). Nah setelah terinstall, seperti halnya ffmpeg, kita akan memiliki program brew di .linuxbrew/bin. Ini contohnya pada kasus saya.

Singularity tensorflow_1.14.0-gpu-py3.sif:~> ls .linuxbrew/bin/brew 
.linuxbrew/bin/brew
Sekarang kita bisa menginstall program yang tersedia di brew, termasuk ffmpeg dan libsndfile. Libsndfile kita install dengan perintah berikut,

Singularity tensorflow_1.14.0-gpu-py3.sif:~> .linuxbrew/bin/brew install libsndfile 
/home/s1820002/.linuxbrew/Homebrew/Library/Homebrew/brew.sh: line 4: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
/home/s1820002/.linuxbrew/Homebrew/Library/Homebrew/brew.sh: line 4: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory
Updating Homebrew...
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
/home/s1820002/.linuxbrew/Homebrew/Library/Homebrew/brew.sh: line 4: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
No changes to formulae.

/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
/home/s1820002/.linuxbrew/Homebrew/Library/Homebrew/brew.sh: line 4: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory
Warning: libsndfile 1.0.28 is already installed and up-to-date
Karena saya sudah menginstallnya maka brew mengabari kalau libsndfile sudah terinstall dan update. Langkah terakhir adalalah mengupdate #LD_LIBRARY_PATH. Semua library yang terinstall dengan brew akan terinstall di .linuxbrew/lib. Karenanya kita perintahkan LD_LIBRARY_PATH untuk mencari library di situ.

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$HOME/.linuxbrew/lib"

Bisa juga perintah tersebut ditambahkan di .bashrc. Saya juga perlu menambahkan ini dalam .bashrc,
eval $(~/.linuxbrew/bin/brew shellenv)

Seleasai. Sekarang kita bisa menggunakan container tensorflow dengan library LibROSA yang membutuhkan libsndfile untuk membaca file suara.

Studi case di JAIST cluster
Di JAIST cluster, saat kita masuk ke vpcc (cluster yg memiliki gpu) telah tersedia tensorflow-gpu via container (singularity). By default, python yang diload adalah python bawaan Anaconda yang menyebabkan library tidak dapat ditemukan (karena perbedaan path, kemungkinan). Solusinya adalah dengan tidak menggunakan python bawaan anaconda, dan menggunakan python bawaan container/singularity dengan perintah berikut.
module remove py35

Cara tersebut cukup ampuh daripada meminta admin untuk menginstall library (sndfile) di cluster.

Thursday, July 09, 2020

How-to: Install Numba and LibROSA in Jetson AGX Xavier (Ubuntu 18.04)

Installing Numba and Librosa in Jetson AGX Xavier is very painful. To document my experience, I wrote this note. Here is how-to install Numba and Librosa on AGX Xavier.

Device: AGX Xavier Dev Kit (32GB RAM)
Software
OS: Ubuntu 18.04
nvidia-jetpack: Version: 4.4-b186
python: Version 3.6.9
llvm: Version 9.0.1 (and 7.1.0)

First, we need to install llvmlite. We can install either from source or via apt. I installed it from the source as shown below.

cd /tmp
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-9.0.1/llvm-9.0.1.src.tar.xz
tar -xvf llvm-9.0.1.src.tar.xz 
cd llvm-9.0.1.src/
mkdir llvm_build_dir
cd llvm_build_dir
cmake ../ -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="ARM;X86;AArch64"
make -j4
sudo make install
cd bin/
echo "export LLVM_CONFIG=\""`pwd`"/llvm-config\"" >> ~/.bashrc
echo "alias llvm='"`pwd`"/llvm-lit'" >> ~/.bashrc
source ~/.bashrc
python3.6 -m pip install --user -U llvmlite==0.31

If you want to install via apt, do it as follows. I use llvm-7 from Ubuntu repository (llvm-9 fails installing llvmlite 0.31 but success for 0.33).

sudo apt install llvm-7

If you install llvm via apt, you need to specify where llvm-config is located in .bashrc. For example here is mine. First, locate llvm-config.
s1820002@s1820002-desktop:~$ locate llvm-config
/usr/bin/llvm-config-7
/usr/include/llvm-7/llvm/Config/llvm-config.h
/usr/lib/llvm-7/bin/llvm-config

Then add the location of llvm-config to .bashrc.
export LLVM_CONFIG=/usr/lib/llvm-7/bin/llvm-config

Please be remembered that you need to `source .bashrc` after you edit your .bashrc.

As an alternative to using .bashrc, you can make softlink by mapping llvm-config-9 to llvm-config.
$ cd /usr/bin
$ sudo ln llvm-config-9 llvm-config

The installation of llvm must success before installing llvmlite. If installation of llvmlite by the last line on the script above success, it shows like this one,

Collecting llvmlite
Installing collected packages: llvmlite
Successfully installed llvmlite-0.33.0

If you face an error regarding `setuptools`, you may upgrade your setuptools as follows.

python3.6 -m pip install --user -U setuptools

Now, we can install numba. We need numba version 0.48 to install librosa 0.7.2. To install Numba, first, we must disable tbb.h according to this.

sudo mv /usr/include/tbb/tbb.h /usr/include/tbb/tbb.h.bak

Then, install numba as the following:
bagus@s1820002:~$ python3.6 -m pip install --user -U numba==0.48
Collecting numba==0.48
Collecting setuptools (from numba==0.48) Using cached
 https://files.pythonhosted.org/packages/41/fa/60888a1d591db07bc9c17dce2bcfb9f00ac507c0a23ecb827e76feb8f816/setuptools-49.1.0-py3-none-any.whl
Collecting numpy>=1.15 (from numba==0.48)
Collecting llvmlite<0 .32.0="">=0.31.0dev0 (from numba==0.48)
Installing collected packages: setuptools, numpy, llvmlite, numba
Successfully installed llvmlite-0.33.0 numba-0.50.1 numpy-1.19.0 setuptools-49.1.0

Again, it must install numba without fail to be able to install Librosa.
Before installing librosa, the following packages must be installed via apt.
sudo apt-get install libblas-dev liblapack-dev libatlas-base-dev gfortran

Finally, we can install librosa via pip as below.
bagus@s1820002:~$ python3.6 -m pip install --user -U librosa
Collecting librosa
Collecting resampy>=0.2.2 (from librosa)
Collecting numpy>=1.15.0 (from librosa)
Collecting numba>=0.43.0 (from librosa)
Collecting scikit-learn!=0.19.0,>=0.14.0 (from librosa)
Collecting joblib>=0.12 (from librosa) Using cached
 https://files.pythonhosted.org/packages/51/dd/0e015051b4a27ec5a58b02ab774059f3289a94b0906f880a3f9507e74f38/joblib-0.16.0-py3-none-any.whl
Collecting scipy>=1.0.0 (from librosa)
Collecting soundfile>=0.9.0 (from librosa) Using cached
 https://files.pythonhosted.org/packages/eb/f2/3cbbbf3b96fb9fa91582c438b574cff3f45b29c772f94c400e2c99ef5db9/SoundFile-0.10.3.post1-py2.py3-none-any.whl
Collecting decorator>=3.0.0 (from librosa) Using cached
 https://files.pythonhosted.org/packages/ed/1b/72a1821152d07cf1d8b6fce298aeb06a7eb90f4d6d41acec9861e7cc6df0/decorator-4.4.2-py2.py3-none-any.whl
Collecting six>=1.3 (from librosa) Using cached
 https://files.pythonhosted.org/packages/ee/ff/48bde5c0f013094d729fe4b0316ba2a24774b3ff1c52d924a8a4cb04078a/six-1.15.0-py2.py3-none-any.whl
Collecting audioread>=2.0.0 (from librosa)
Collecting llvmlite<0 .34="">=0.33.0.dev0 (from numba>=0.43.0->librosa)
Collecting setuptools (from numba>=0.43.0->librosa) Using cached
 https://files.pythonhosted.org/packages/41/fa/60888a1d591db07bc9c17dce2bcfb9f00ac507c0a23ecb827e76feb8f816/setuptools-49.1.0-py3-none-any.whl
Collecting threadpoolctl>=2.0.0 (from scikit-learn!=0.19.0,>=0.14.0->librosa) Using cached
 https://files.pythonhosted.org/packages/f7/12/ec3f2e203afa394a149911729357aa48affc59c20e2c1c8297a60f33f133/threadpoolctl-2.1.0-py3-none-any.whl
Collecting cffi>=1.0 (from soundfile>=0.9.0->librosa)
Collecting pycparser (from cffi>=1.0->soundfile>=0.9.0->librosa) Using cached
 https://files.pythonhosted.org/packages/ae/e7/d9c3a176ca4b02024debf82342dab36efadfc5776f9c8db077e8f6e71821/pycparser-2.20-py2.py3-none-any.whl
Installing collected packages: six, numpy, scipy, llvmlite, setuptools, numba, resampy, threadpoolctl, joblib, scikit-learn, pycparser, cffi, soundfile, decorator, audioread, librosa
Successfully installed audioread-2.1.8 cffi-1.14.0 decorator-4.4.2 joblib-0.16.0 librosa-0.7.2 llvmlite-0.33.0 numba-0.50.1 numpy-1.19.0 pycparser-2.20 resampy-0.2.2 scikit-learn-0.23.1 scipy-1.5.1 setuptools-49.1.0 six-1.15.0 soundfile-0.10.3.post1 threadpoolctl-2.1.0

Now everything seems good. We can do audio processing in Jetson AGX. Librosa is the best audio library in python so far. Having it installed on Jetson is a basic requirement.

BONUS: Installing TensorFlow
Step-by-step:
1. Install the following packages.
sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev
2. Install/upgrade testresources
python3.6 -m pip install --user -U testresources
3. Installing other python dependencies
python3.6 -m pip future==0.17.1 mock==3.0.5 h5py==2.9.0 keras_preprocessing==1.0.5 keras_applications==1.0.8 gast==0.2.2 futures protobuf pybind11
4. Install tensorflow.
python3.6 -m pip install --user --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v43 'tensorflow<2' 
output:
Successfully installed absl-py-0.9.0 astor-0.8.1 google-pasta-0.2.0 grpcio-1.30.0 importlib-metadata-1.7.0 markdown-3.2.2 opt-einsum-3.2.1 tensorboard-1.15.0 tensorflow-1.15.2+nv20.3.tf1 tensorflow-estimator-1.15.1 termcolor-1.1.0 werkzeug-1.0.1 wrapt-1.12.1 zipp-3.1.0
5. Test the GPU device.
import tensorflow as tf
tf.test.gpu_device_name()
output:
>>> tf.test.gpu_device_name()
2020-07-10 16:01:36.242822: W tensorflow/core/platform/profile_utils/cpu_utils.cc:98] Failed to find bogomips in /proc/cpuinfo; cannot determine CPU frequency
2020-07-10 16:01:36.244367: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x37b6c3f0 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-07-10 16:01:36.244536: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2020-07-10 16:01:36.259171: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2020-07-10 16:01:36.432077: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:950] ARM64 does not support NUMA - returning NUMA node zero
2020-07-10 16:01:36.432674: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x37a81480 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:
2020-07-10 16:01:36.432768: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Xavier, Compute Capability 7.2
2020-07-10 16:01:36.433580: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:950] ARM64 does not support NUMA - returning NUMA node zero
2020-07-10 16:01:36.433892: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1639] Found device 0 with properties: 
name: Xavier major: 7 minor: 2 memoryClockRate(GHz): 1.377
pciBusID: 0000:00:00.0
2020-07-10 16:01:36.433987: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.0
2020-07-10 16:01:36.467839: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10.0
2020-07-10 16:01:36.496813: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10.0
2020-07-10 16:01:36.534413: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10.0
2020-07-10 16:01:36.576197: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10.0
2020-07-10 16:01:36.600464: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10.0
2020-07-10 16:01:36.688185: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-07-10 16:01:36.688573: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:950] ARM64 does not support NUMA - returning NUMA node zero
2020-07-10 16:01:36.690082: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:950] ARM64 does not support NUMA - returning NUMA node zero
2020-07-10 16:01:36.690253: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1767] Adding visible gpu devices: 0
2020-07-10 16:01:36.690456: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.0
2020-07-10 16:01:38.484495: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1180] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-07-10 16:01:38.484668: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1186]      0 
2020-07-10 16:01:38.484715: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1199] 0:   N 
2020-07-10 16:01:38.485215: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:950] ARM64 does not support NUMA - returning NUMA node zero
2020-07-10 16:01:38.485695: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:950] ARM64 does not support NUMA - returning NUMA node zero
2020-07-10 16:01:38.485953: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1325] Created TensorFlow device (/device:GPU:0 with 23699 MB memory) -> physical GPU (device: 0, name: Xavier, pci bus id: 0000:00:00.0, compute capability: 7.2)
'/device:GPU:0
Source:
[1] https://github.com/jefflgaol/Install-Packages-Jetson-ARM-Family
[2] https://forums.developer.nvidia.com/t/install-python-packages-librosa-jetson-tx2-developer-kit-problem/126337/5
[3] https://learninone209186366.wordpress.com/2019/07/24/how-to-install-the-librosa-library-in-jetson-nano-or-aarch64-module/

Friday, July 03, 2020

Outline: Persepsi pendengaran manusia dan pemodelannya

Berikut adalah outline catatan kuliah "Human Perceptual Systems and its Models" yang diajarkan oleh Prof. Unoki di JAIST pada tahun 2018. Agar tidak menguap begitu saja, catatan-catatan tersebut saya cantumkan di sini. Kuliah ini sangat berguna bagi mereka yang ingin mempelajari bagaimana sistem pendengaran manusia bekerja (auditory system) serta model komputasinya.
  1. Pengantar persepsi manusia dan pemodelannya
  2. Pengolahan sinyal auditori
  3. Representasi suara dan pemrosesannya
  4. Analisa sinyal suara dan teknik sintesis
  5. Fisiologi dari peripheral auditori dan pemodelannya
  6. Ketidaklinearan sistem pendengaran
  7. Atensi, hubungannya dengan cocktail party problem dan deeplearning
  8. Ketidaksinkronan mata dan telinga: Efek McGurk
Opsional:  
 Satu hal yang paling menarik dari kuliah tersebut adalah bagaimana membuat model yang meniru (imitate) bagaimana sistem pendengaran manusia bekerja. Meski tidak semua dapat dimodelkan dengan eksak, dan tidak semua model yang meniru cara kerja manusia lebih baik dari model lain (misal, deep learning), model dengan hasil terbaiklah yang dipakai. Dan biasanya model terbaik tersebut merupakan kompromi antara peniruan cara kerja manusia dan, misalnya, deep learning.

Catatan kuliah ini juga disimpan di Github pada alamat berikut: https://github.com/bagustris/perseptual.

Monday, June 22, 2020

Menghapus dan mengganti data NaN pada Numpy

Data NaN (Not a Number) sangat menjengkelkan; bisa dibilang sampah. Data ini, bisa dari pengukuran atau simulasi, tidak dipakai dalam pengolahan data dan perlu dihilangkan atau diganti. Ya, dua cara tersebut (menghapus atau mengganti data NaN) merupakan dua cara agar data yang terkontaminasi NaN bisa diproses. Oya, data NaN ini juga bisa merupakan data outlier, misal ketika mengukur suhu rentang 23-27 derajat celcius kita mendapatkan data pengukuran 127 celcius yang tentu saja tidak masuk akal. Bisa juga data NaN ini berupa nilai "0" karena kegagalan sensor pengukuran.

Menghapus Data NaN di Numpy

Misalkan kita memiliki 10 data pengukuran dari tiga sensor.  Pertama, kita mencari elemen NaN sebagai berikut.
In [1]: import numpy as np 
In [2]: a = np.array([[1, 2, 4], [1, 2, 1], [np.nan, 1, 2], [1, 2, np.nan], [2, 1, 1]])
In [3]: np.isnan(a).any()
Out[3]: True
In [4]: np.where(np.isnan(a))                                                                           
Out[4]: (array([2, 3]), array([0, 2]))

Dari output ipython tersebut kita mengetahui bahwa data NaN berada pada (2, 0) dan (3, 2). Ingat Python mengindeks dari 0. Untuk menghapus baris (row) yang berisi NaN, gunakan perintah berikut:

In [3]: b = a[~np.isnan(a).any(axis=1)] 

Algoritma menghapus NaN pada satu baris di atas dapat dijelaskan sbb:
1. Mencari indeks data NaN dengan np.isnan.
2. Mencari data jika ada NaN dengan np.any.
3. Mencari data jika ada NaN pada kolom (axis=1, karena yang kita hapus barisnya).
4. Membalik hasil pencarian pada (1-3) dengan ~, dengan kata lain, cari data yang bukan NaN.

Untuk lebih jelasnya, perhatikan setiap output perintah berikut:
In [57]: np.isnan(a)                                                                                     
Out[57]: 
array([[False, False, False],
       [False, False, False],
       [ True, False, False],
       [False, False,  True],
       [False, False, False]])
In [58]: np.isnan(a).any()                                                                               
Out[58]: True
In [59]: np.isnan(a).any(axis=1)                                                                         
Out[59]: array([False, False,  True,  True, False])
In [60]: ~np.isnan(a).any(axis=1)                                                                        
Out[60]: array([ True,  True, False, False,  True])

In [61]: a[~np.isnan(a).any(axis=1)]                                                                     
Out[61]: 
array([[1., 2., 4.],
       [1., 2., 1.],
       [2., 1., 1.]])
Baris untuk memfilter data NaN disebut fancy indexing. Inilah salah satu hal yang paling membedakan Numpy dengan List python. Dengan teknik ini kita bisa memfilter suatu array dengan array lainnya. Contohnya data dengan index NaN ini. Permasalahan menghapus data yang berisi NaN selesai.

Mengganti Data Nan di Numpy

Bagaimana jika kita tidak ingin menghapus dana NaN, tapi mengubahnya..? Misal, dalam pengukuran suhu, suhu yang tidak terbaca sensor kita anggap sebagai suhu 25 derajat celcius.
Berikut data dummy pengukuran tiga sensor suhu.

In [52]: a = np.random.uniform(23, 28, [10, 3])                                 

In [53]: a                                                                      
Out[53]: 
array([[27.78837233, 23.24395001, 23.57374599],
       [24.19978931, 23.25094801, 24.49294423],
       [26.73693715, 23.16475293, 25.96576384],
       [26.70315233, 24.85865614, 25.3510446 ],
       [25.31885087, 27.42903322, 25.26193883],
       [25.68032566, 27.06242615, 27.0408585 ],
       [26.64473586, 27.56036335, 24.49159284],
       [24.90196938, 26.00082306, 25.70781393],
       [26.58828295, 25.36263426, 27.6251521 ],
       [24.63801191, 24.23193679, 26.99034562]])

Kita tambahkan 5 data NaN secara acak.
In [54]: a.ravel()[np.random.choice(a.size, 5, replace=False)] = np.nan         

In [55]: a                                                                      
Out[55]: 
array([[27.78837233,         nan,         nan],
       [24.19978931, 23.25094801, 24.49294423],
       [26.73693715, 23.16475293, 25.96576384],
       [26.70315233, 24.85865614, 25.3510446 ],
       [        nan, 27.42903322, 25.26193883],
       [25.68032566, 27.06242615, 27.0408585 ],
       [26.64473586, 27.56036335,         nan],
       [24.90196938, 26.00082306, 25.70781393],
       [26.58828295,         nan, 27.6251521 ],
       [24.63801191, 24.23193679, 26.99034562]])

Terlihat 5 data NaN pada baris 0, 4, 6, dan 8 (indeks mulai dari 0). Kita ganti data NaN tersebut dengan 25.0 derajat celcius. Perintah yang digunakan adalan np.nan_to_num(a, nan=25.0).

In [56]: np.nan_to_num(a, nan=25.0)                                             
Out[56]: 
array([[27.78837233, 25.        , 25.        ],
       [24.19978931, 23.25094801, 24.49294423],
       [26.73693715, 23.16475293, 25.96576384],
       [26.70315233, 24.85865614, 25.3510446 ],
       [25.        , 27.42903322, 25.26193883],
       [25.68032566, 27.06242615, 27.0408585 ],
       [26.64473586, 27.56036335, 25.        ],
       [24.90196938, 26.00082306, 25.70781393],
       [26.58828295, 25.        , 27.6251521 ],
       [24.63801191, 24.23193679, 26.99034562]])

Cukup sederhana, jika argumen nan=25.0 tidak ditambahkan, maka data NaN akan diganti dengan angka "0" (default). Jika ingin mengganti dengan angka lain, misal 25.5, tinggal mengganti nan=25.5. Selesai permasalahan mengganti data NaN pada Numpy array.
 
Untuk Pandas (dataframe) silahkan baca di sini.

Saturday, June 20, 2020

Konversi file svg ke pdf via terminal

Ekstensi pdf sangat fleksibel, baik digunakan secara independen maupun ketika di "embedd" ke dalam file lain, misalnya Latex. Gambar yang baik (resolusinya) kebanyakan bukan dalam format pdf, tapi (contohnya) SVG. Konversi yang cepat (dalam hitungan detik) dibutuhkan agar kita tidak perlu membuka program berbasis grafis (seperti InkScape atau Adobe Illustration) untuk konversi dari SVG ke PDF. Berikut solusinya.

# install program jika belum terinstall
$ sudo apt-get install librsvg2-bin
$ rsvg-convert -f pdf -o output.pdf input.svg

Cara ini menghemat waktu sekitar 10 menit dari cara konvensional (berbasis grafis). Selain itu, aplikasi berbasis grafis sering "mend-distract" kita untuk mengerjakan sesuatu yang lain di aplikasi tersebut.

Thursday, June 11, 2020

Benchmarking Intel-based Numpy packages

Intel has their own distribution (modified version) of Numpy, Scipy, and scikit-learn packages. They claim that these packages are optimized from those existing packages. To prove this claim, I made a little following benchmark. I used two similar machines MBP 2012 and Lenovo G580. Both have similar specs, i7-3520 processors, and 16GB RAM. The following code I used to benchmark.

Saturday, June 06, 2020

Outline: Logika bahasa ilmiah

Berikut adalah outline dari beberapa resume kuliah "Scientific Discussion" yang diajar oleh Prof. Preining pada 2019 di JAIST. Agar tidak menguap begitu saja, saya membuat outline (daftar isi/tulisan) yang pernah saya buat untuk merangkum isi kuliah tersebut. Dalam Bahasa Indonesia, "scientific discussion" lebih pas diterjemahkan sebagai "logika bahasa ilmiah" atau "logika diskusi ilmiah", karena isinya banyak berupa prinsip logika yang dipakai dalam diskusi ilmiah.

Materi kuliah tersebut sangat cocok untuk membangun alur berpikir dalam berbahasa ilmiah, baik tulisan maupun lisan (lebih dikhususkan pada tulisan, namun bisa diaplikasikan secara lisan/ucapan, less formal). Klik setiap baris item outline di bawah ini untuk membaca artikel dengan judul tersebut.

  1. Menjadi logis: Menyiapkan akal untuk logika
  2. Menjadi logis: Prinsip dasar logika
  3. Argumen: Bahasa logika [1]
  4. Argumen: Bahasa logika [2]
  5. Sumber pemikiran tidak logis
  6. Prinsip-prinsip pemikiran tidak logis
  7. Logika dan percakapan-nya Grice (implikatur) beserta kritiknya
  8. Panduan berpikir kritis
Tulisan-tulisan tersebut cukup menarik karena sejatinya bukan tulisan saya. Namun, ulasan dari buku-buku dan makalah yang benar-benar berbobot. Beruntung saya pernah mendapatkan kuliah tersebut. 

Jika ada tulisan baru saya dengan tema yang sama/mirip, akan saya tambahkan dalam outline di atas.

Monday, May 18, 2020

Pentingnya bersih-bersih setiap hari...

Pada suatu ketika, di sela-sela belajar bahasa Jepang (kursus gratis man-to-man diadakan oleh volunteer), guru saya bertanya, "Bagus-san, kamu bersih-bersih tiap berapa hari sekali?" Saya menjawabnya, "Seminggu sekali, sensei." Sensei saya menimpali "Are, Takebi-sensei, mainichi souji shimasu". Itu si Takebi-sensei bersih-bersih rumahnya tiap hari. Takebi-sensei yang berada di belakang saya mengangguk dan menimpali, "hai, mainichi souji shimasu." Orang jepang suka yang bersih dan suka bersih-bersih. Bahkan saya curiga, pekerjaan mereka cuma bersih-bersih.

Mari berhenti sejenak dari membaca tulisan ini dan melihat dua video pendek berikut yang dibuat oleh vlogger amatir Jepang.



Saturday, May 09, 2020

Ketidaksinkronan telinga dan mata: Efek McGurk

Efek McGurk adalah salah satu contoh nyata pemrosesan multimodal manusia (human multimodal perception). Sederhananya, jika apa yang diperdengarkan berbeda dengan apa yang diperlihatkan, maka otak kita akan menerimanya dengan berbeda juga.

Yang diperdengarkan (audio): BA-BA-BA
Yang diperlihatkan (visual): GA-GA-GA
Yang terdengar: DA-DA-DA

Ini adalah sebuah ilusi. Sistem multimodal persepsi manusia tidak bekerja sendiri-sendiri (misal penglihatan sendiri, pendengaran sendiri), namun bekerja bersama-sama untuk menghasilkan persepsi (dalam hal ini persepsi pendengaran). Ketika sensor bekerja secara simultan (mata dan telinga) maka informasi dari keduanya akan diproses oleh otak dan hasilnya, terjadilah ilusi, apa yang terdengar (DA) bukan sebenarnya (BA). Video di bawah ini menjelaskan dengan singkat dan padat tentang efek McGurk.




Efek McGurk pada Audio-Textual

Adakah efek McGurk pada Audio-textual? Saya meyakininya ada, namun belum ada bukti empiris hal itu terjadi. Sederhana saja, jika pada audio-visual fenomena tersebut ada, kenapa tidak pada audio-textual? Misal Si A mengatakan "Dia marah", namun si B mendengar "Dia ramah". Alhasil, si B kemudian menimpali "Ah enggak, dia enggak ramah sama sekali." Pernah kan kita dalam situasi seperti ini? Fenomena ini asyik kalau dibuat eksperimennya. Semoga kelak saya (atau orang lain) bisa melakukannya.

Penutup

Efek McGurk mengajarkan kepada kita: Apa yang kita dengar dan kita lihat belum tentu benar!.

Wednesday, May 06, 2020

10 tips for writing a truly terrible journal article

This post is a summary of tutorial video on research academy at Elsevier:
https://researcheracademy.elsevier.com/writing-research/writing-skills/10-tips-writing-truly-terrible-journal-article.
Visit the link for a more complete explanation. This writing is just a short version of what I heard.

Bear in mind, the following 10 sure-fire ways guarantee your paper won’t be accepted (NOT THE OPPOSITE). So, to make your paper to be accepted, DO THE OPPOSITE WAYS. You already have been warned.

The 10 tips (minute 13:31)

1. Refuse to read the previous literature published in your field.

Every scientific paper should add knowledge to the field. In other words, it should contain novelty. Failure to read previously reported findings means a rejection for you.

2. Take the lazy route and plagiarize (including your previous own article)

Don't make a double submission because of laziness waiting review. Don't plagiarize others including your own. If you submit an article from conference to journal (with a major change of contributions), cite and state your previous works. Plagiarism is a crime no matter how small it is.

3. Omit key article components.

Scientific article follows strict rules and components. One of the well-known is IMRaD model (Intro, Method, Results, and Discussion; conclusions is optional).

4. Disrespect previous publications.

Example of disrespecting previous publications: plagiarism, repeating paper without adding novel contribution, not citing previous papers, etc.

Saturday, May 02, 2020

Mengedit video dan audio untuk keperluan konferensi virtual

Di musim pandemi seperti sekararang ini, banyak seminar/konferensi dialihkan menjadi online/virtual. Tulisan ini akan membahas teknik presentasi online/virtual berbasis perangkat lunak  gratis, khususnya yang berjalan di sistem operasi berbasis Linux.

Perangkat yang dibutuhkan/digunakan antara lain: Beamer atau Impress atau Google Slide, SimpleScreenRecorder atau OBS Studio, ffmpeg dan audacity. Jadi setidaknya kita menggunakan empat perangkat, misal Beamer > OBS > ffmpeg > Audacity, atau, Impress > SimpleScreenRecorder > ffmpeg > Audacity. Diagram alir dari langkah-langkah yang dilakukan dapat digambarkan pada gambar di bawah ini.


Diagram alir proses peremakan presentasi virtual
Di akhir tulisan, saya akan demokan dua hasil perekaman dengan teknik yang saya jelaskan di artikel ini.

Thursday, April 23, 2020

Dos and Don'ts in Academic Presentation


Before reading this article it is suggested to read the previous article on 201 presentation skills (in Bahasa, right-click in Chrome and click translate, to make it in English).

This article is a resume/summary of the book "Conferencing and Presentation" by Michael Guest, particularly on Part IV (chapter 12-16). The book itself is free and can be downloaded from the Springer  Nature website. The following dos and don'ts focus on a practical manner from opening to closing. Before entering this structure, however, formulae to formulaic academic phrases serve is listed as building blocks of academic discourse. These formulae including,
  1. Occupy a mid-point between ‘general English’ and specialist terminology;
  2. Contain constituents that are flexible (i.e., excluded vs. ruled out, possibilities vs. results);
  3. Have cross-disciplinary academic application;
  4. Are utilized in both written and spoken modes;
  5. Hold long-term (intrinsic) value for academics/professionals;
  6. Mark entry or membership into the academic discourse community.
Having those formulaic phrases, Let's start the practical implementation of those phrases in the academic presentation.

1. Opening
Don'ts:
  • My name is X, and my presentation is entitled Y. (this and next three are too slight)
  • Hello everyone.
  • My topic today is X. (This and below are too much casual)
  • Today I’m going to present about X.
  • I’ll present on X, OK?
  • OK, so, I’ve just changed the title to show... X.
  • I’m gonna talk about something that is very hot ‘n sexy...

Monday, April 06, 2020

Berpindah ke vscode (dari gEdit)

Hidup itu harus dinamis, tidak harus saklek pada satu hal (tool/perangkat). Ketika ada perangkat lain yang lebih mudah, meskipun awalnya saya membencinya, maka kita harus berpindah ketika ternyata perangkat tersebut memberikan kemudahan dan kecepatan dari perangkat lama.

Kali ini saya berbicara tentang "editor", perangkat lunak yang digunakan untuk mengetik. Contoh editor sederhana adalah notepad di Windows. Di Linux, sejak pertama kali menggunakannya secara intensif tahun 2009 sampai sekarang, editor bawaan dari Gnome, yakni gEdit, adalah editor default saya, selain vim. Dua hal utama yang saya gunakan dengan editor: (1) mengkoding Python, dan (2) membuat manuskrip dengan Latex. Hal-hal lainnya adalah menulis dengan markdown, txt, dan format-format lainnya. Jadi, editor yang saya gunakan paling tidak harus mendukung Python dan Latex, dan gEdit sudah mendukung keduanya dengan beberapa kekurangan (code completion, snippets, dll).

Setelah mencoba beberapa editor lain: Atom, Sublime text, Spyder, PyCharm, dan vscode, akhirnya saya memutuskan vscode sebagai editor saya untuk seterusnya. Tulisan ini mengupas kenapa saya berpindah dari gEdit ke vscode.


Related Posts Plugin for WordPress, Blogger...