Mengejar Impian

Tiap orang memiliki impian sejak kecil. Impian di sini maksudnya sesuatu yang diinginkan, bukan mimpi ketika tidur, walaupun kadang keinginan itu dibawa mimpi juga sih. Berbeda dengan anak-anak yang ketika bermimpi tidak memperhitungkan mungkin atau tidaknya, orang dewasa terkadang membatasi diri dengan faktor-faktor luar yang membuat mimpi tersebut tidak mungkin tercapai.

Mimpi yang Sempurna

Jika dalam syair lagu “mimpi yang sempurna” Ariel bertanya kepada bintang-bintang tentang mempinya yang sempurna, ada baiknya mengikuti pendapat Arnold Schwarzenegger ketika dia bermimpi menjadi bintang Hollywood. Orang lain mengatakan tidak mungkin mengingat aspek-aspek di dirinya yang tidak cocok seperti logat khas Jerman yang pasti akan membuat produser tertawa-tawa. Justru ternyata logat tersebut menjadi kalimat sederhana yang terkenal: “I’ll be back” dalam film terminator dalam logat Jerman yang kental, mirip mesin. Vision atau dalam bahasa Indonesia Visi, harus dimiliki oleh siapapun karena akan mengarahkan ke tujuan. Tentu saja visi yang baik dan jelas.

Mimpi berbeda dengan keinginan, seperti ingin rujak yang tidak lama kemudian terkabul. Ada proses panjang untuk mengarah ke impian. Terkadang memang seharusnya kita yang mengikuti impian, bukan sebaliknya impian yang fleksibel mengikuti keadaan.

No Pain No Gain

Terkadang memang banyak penderitaan yang menyertai perjalanan menggapai impian. Selama ada hasrat dan keinginan tentu saja penderitaan sebesar apapun tidak berarti. Banyak rekan-rekan saya yang sakit, masalah rumah tangga bahkan meninggal dunia dalam menggapai jenjang pendidikan tertentu. Di tempat saya bekerja pun hanya separuh yang menyelesaikan studi doktoralnya, tapi tetap saja tidak dianggap penderitaan karena memang itu harus dijalani. Kemarin ada rekan yang sedang berusaha memperoleh beasiswa menceritakan perjalanannya yang berliku. Ketika memperoleh beasiswa ternyata lokasi kampusnya di Jogja bukan yang diinginkan (Jakarta). Padahal perjalanan mencapainya cukup panjang, pemberkasan, wawancara di daereah Jawa Timur, ketika sudah beres ternyata hamil dan nunggu melahirkan. Namun toh tetap saja dia mencoba lagi.

Santai dan Tetap Pertahankan Minat

Seperti biasa ketika ada rekan yang berhasil mendapatkan beasiswa dan mulai studi lanjut atau ada rekan yang telah menyelesaikan kuliahnya banyak yang bersemangat untuk mengikuti jejaknya. Tapi yah … seperti itu, semangat di awal dan kemudian redup lagi dan kemudian muncul lagi ketika ada yang lolos atau lulus dan begitu berulang kali. Makanya doctoral bootcamp yang diadakan Kemenristek DIKTI kurang begitu berhasil.

Impian itu mirip dengan lari jarak jauh atau lari marathon, bukan sprint 100 meter. Ketika berlari, memperoleh momentum dan energi baru. Kalau impian cepat sekali memperolehnya, jangan-jangan itu bukan impiannya, tapi “ada kesempatan dalam kesempitan”. Ada konsep dalam traditisi Tibet yaitu keinginan merupakan “loba” alias keserakahan, kesedihan/menderita adalah “dosa”, dan ketidaktahuan adalah “moha”, kalau dalam Islam diistilahkan nafsu. Jika impian kita jalankan seperti itu, sudah dipastikan akan sulit mencapainya. Anggap saja impian misalnya doktor, guru besar, atau apapun itu sekadar objek yang dituju tanpa ada keinginan ataupun nafsu yang mengebu-gebu, seperti dalam konsep meditasi yaitu santai dan tetap pertahankan minat. Dalam Islam diistilahkan nafsu mutma’inah. Mungkin film yang dibintangi Will Smith di bawah bisa menginspirasi. Yuk, tetap melangkah tanpa gejolak di hati.

Iklan

Pemrograman Dinamis – Konsep Memoization

[algoritma|tek.inf|r408|pert.8]

Salah satu materi algoritma standar adalah pemrograman dinamis (Dynamic Programming). Walaupun ada kata “programming”-nya ternyata tidak ada hubungannya dengan kode/script. Ternyata istilah pemrogramannya karena teknik yang biasanya digunakan untuk optimalisasi ini memanggil suatu fungsi diri sendiri (rekursif) sebelum menentukan hasil-hasil yang optimal. Optimal di sini bisa maksimal atau minimal.

Pemotongan Batang (Rod Cutting)

Kasus ini contoh proses pemotongan bilah batang panjang agar dihasilkan margin keuntungan yang optimal. Misalnya batang baja sepanjang 10 inchi yang akan dipotong dengan potongan kelipatan 1 inchi.

Kombinasi dari ukuran potongan ternyata sangat menentukan keuntungan berdasarkan harga per potongnya. Misal, untuk baja sepanjang 4 inchi memiliki keuntungan dengan komposisi dua buah batang berukuran 2 inchi.

Selain dua buah potongan berukuran 2 inchi, panjang potongan menghasilkan harga 4, 7, dan 9. Sementara dua buah potongan 2 inchi menghasilkan harga 10 (tentu saja ini kasus bagi penjual, kalau pembeli tentu lebih menguntungkan beli potongan-potongan kecil satu inchi).

Memoization

Istilah ini saya fikir salah tulis, harusnya memorization, ternyata tidak. Istilah ini berasal dari kata “memo”, yaitu secarik surat/infor singkat. Misal untuk tiap-tiap panjang bilah akan dihasilkan nilai optimal sebagai berikut:

Perhatingan untuk baja sepanjang 1 sampai 3 inchi, optimalnya adalah tanpa dipotong, masing-masing berharga $1, $5, dan $8. Baja 2 in ada dua kemungkinan yaitu 1+1 atau 2 in tanpa dipotong. Karena 1in+1in menghasilkan hanya $2 maka yang dipilih 2 in tanpa dipotong, yaitu $5. Untuk baja berukuran 4 in ada beberapa kemungkinan seperti gambar batangan di atas dan dihitung semua kemungkinannya hingga diperoleh maksimal adalah dua potongan @2in. Pseucode-nya sebagai berikut:

Keterangan: baris ke-4 sampai 6 menghitung komposisi potongan baja. Misal untuk i=1, maka akan dicari maksimal dari 1 dan (n-1)-nya. Jika batang 4 in, maka 1 dan 3, berikutnya 2 dan 2 (dari n-2) dan seterusnya. Untuk kasus contoh di atas diperoleh nilai maks 10 (ketika i=2 dan satu potongan lainnya 2 in juga).

Karena potongan 2in sudah dihitung dari sebelumnya (batang ukuran 2in) maka ketika menghitung 4in tidak perlu menghitung kembali yang 2in hanya menggunakan riwayat yang lalu, alias dari “memo” sebelumnya. Di sinilah muncul istilah memoization, atau dalam bahasa Indonesianya mungkin memoisasi.

Top Down Memoization

Dengan rekursif, beberapa perhitungan dihitung berulang kali sehingga tidak efisien (naif). Oleh karena itulah pemrograman dinamis diterapkan untuk menggantikan proses rekursif berulang tersebut. Jadi sekali telah dihitung, maka jika akan menghitung proses yang sama hanya me-ngintip (lookup) hasil perhitungan yang lampau.

Untuk dengan memoization, ditambahkan arrah yang berisi nilai yang sudah dihitung dengan suatu routine yang disebut helper “Memouzed-Cut-Rod-Aux” (simbol minus tak hingga artinya unknown dan perlu dihitung):

Baris 1-3 mengecek apakah nilai sudah ada di array hasil perhitungan atau tidak. Jika tidak ada (else) masuk ke q yang unkhown (minus tak hingga) dengan baris 7 yang berisi maksimal komposisi-komposisi yang maksimal. Hanya saja di sini rekursif yang bekerja dengan mengecek hasil hitungan sebelumnya jika sudah ada di array hasil, langsung mengkopi saja tidak perlu menghitung lagi nilai r-nya (lihat r1 sampai r10 di contoh paling atas postingan ini untuk batang sepanjang 10 in).

Buttom Up Memoization

Teknik buttom up lebih sederhana karena tidak membutuhkan mekanisme rekursif, hanya dengan menghitung maksimal potongan-potongan dari terkecil hingga terbesarnya.

Keterangan: Seperti biasa array hasil dipersiapkan. Variabel j merupakan hasil optimal komposisi potongan yang bergerak dari kombinasi i dengan pasangannya. Misal ketika j=4 maka i bergerak dari i=1 dan r(3) mana yang lebih maksimal dibanding komposisi lainnya misal i=2 dan r(2), dan seterusnya. Baik buttom up ataupun top down memiliki running time yang kuadratik. Sekian, semoga bermanfaat.

Referensi:

Cormen, dkk. “intro to algorithms”, MIT Press: 2009.

Shift and Reduce Parsing

[tek.kompilasi|t.informatika|s-103|pert.8]

Untuk orang yang non ilmu komputer atau teknik informatika, istilah parsing merupakan istilah asing yang membuat dahi keriput. Bagaimana tidak, hanya menggunakan bahasa pemrograman saja sudah pusing, ini malah diminta membuat suatu bahasa pemrograman. Tapi perlu diingat, salah satu kewajiban pembelajaran adalah “apakah yang kita ajarkan sudah seharusnya yang kita ajarkan?”. Pertanyaan itu merupakan pertanyaan yang harus dijawab. Pertanyaan yang dikeluarkan oleh Mahatma Gandhi ketika India baru merdeka dan ingin segera bersaing dengan negara maju.

Grammar

Kembali ke proses pembuatan bahasa pemrograman. Sebelum bisa membuat suatu bahasa, perlu mengetahui cara kerja suatu bahasa. Bahasa bekerja mengikut grammar yang ada. Chomsky mengusulkan suatu context free grammar yang bebas dari linguistik lokal yang tidak beraturan. Sebagai contoh kita memiliki aturan grammar sebagai berikut:

Apa maksudnya? Di sini ada tiga aturan yang membolehkan pengguna mengoperasikan: 1) variabel ditambah variabel. Variabel di sini diistilahkan dengan non-terminal (bukan titik destinasi akhir), sementara terminal berupa konstanta atau operasi seperti tambah, kurang, kali dan bagi. 2) variabel dikalikan dengan variabel, serta 3) variabel diisi oleh konstanta. Secara singkat, notasi grammar di atas dapat ditulis dalam satu baris: E->E+E|E*E|id. Ekspresi di atas mengikut kaidah Backus Naur Form (BNF) yang terkenal untuk context free language.

Tugas bagian parsing adalah mengecek validitas operasi yang diberikan oleh pengguna apakah sudah sesuai dengan grammar yang ada atau tidak. Sebagai contoh user mengetikan persamaan matematis: E->x+y*z. Parsing akan mengecek apakah sudah sesuai atau tidak dengan grammar.

Shift and Reduce Parsing

Sesuai dengan namanya metode ini mengkombinasikan antara penggeseran dan pengurangan parsing. Contoh sebelumnya jika kita kerjakan maka otak kita lebih mudah mengerjakan lewat mekanisme ‘top down’ sambil melihat grammarnya. Dalam contoh di atas, ada penjumlahan (x+y) dan perkalian (dengan z). Dengan menggunakan left hand first diperoleh urutan berikut ini:

Perhatikan aturan grammar yang diterapkan di dalam kurung di samping kanan proses top-down. Pertama-tama digunakan aturan perkalian yang menghasilkan dua non-terminal E. E yang kanan dengan menerapkan rule no.3 diperoleh konversi dari E ke id (dalam hal ini z). Langkah berikutnya dengan menggunakan aturan no.1 dimana E menurunkan E+E (simbol -> diistilahkan turunan (derrive). Teruskan dengan menggunakan rule no. 3 akan merubah non-terminal menjadi terminal berturut-turut x dan y. Karena hasil akhir sama dengan soal, maka dapat dikatakan instruksi x+y*z dapat diterima parser.

Kita mungkin mudah mengerjakan dengan top-down method ini. Bagaimana dengan komputer? Tentu saja berbeda dengan otak kita. Untuk itulah metode shift and reduce layak diperhitungkan. Cara kerja shift and reduce adalah sebagai berikut:

  • Tulis operasi yang akan dicek grammar-nya
  • Lakukan operasi shift untuk memisahkan non-terminal/variabel yang akan diisikan id.
  • Lakukan operasi reduce untuk mengganti variabel menjadi terminal.

Perhatikan 11 langkah di atas, yang merupakan tipikal operasi shift and reduce. Pada langkah pertama, instuksi akan siap-siap melakukan proses “shift” dimana x bergeser ke kiri. Selanjutnya, x yang telah berada di kiri dikonversi menjadi terminal/variabel E. Berikutnya langkah ke3 dan 4 dua buah proses shift yaitu untuk plus dan y dilanjutkan dengan reduce y menjadi terminal E. Langkah 8, 9, dan 10 bermaksud mereduksi instruksi mengikut grammar sehingga dihasilkan E yang artinya instruksi x+y*z dapat diterima (accepted). Berikutnya akan dicoba lewat perangkat lunak Lex and Yacc, khususnya bagian Yacc yang bertanggung jawab mengurusi Grammar.

Perhatikan saat kompilasi Yacc di bagian komentar. Tampak Yacc menunjukan 4 shift/reduce [1] yang konflik. Ini tipikal dari bagian pengecekan instruksi (dengan shift and reduce). Perhatikan di sini saya iseng mengganti “+” dengan “p” dan “-” dengan “m”. Kira-kira hasil bahasa pemrograman primitif sebagai berikut di bawah ini. Perhatikan, “p” bermakna plus dan “m” bermakna minus. Sekian, semoga bermanfaat.

 

Kisah Unik Matematikawan Dodgson – Dodgson Condensation

Membaca tulisan yang membahas seorang ahli matematika abad 19, Reverend Charles Lutwidge Dodgson (1832-1898) cukup menarik juga. Ahli matematika ini ternyata menulis cerita terkenal “Alice in Wonderland” dan “Through the Looking Glass” dengan nama samaran Lewis Carroll. Dikisahkan bahwa Ratu Victoria ternyata kagum dengan cerita “Alice in Wonderland” sehingga ketika selesai membaca dia meminta bawahannya untuk membawakan buku karangan Lewis Carroll (yang nama aslinya Dodgson) yang lain. Tidak berapa lama kemudian tibalah bawahannya tersebut dengan membawa buku Dodgson yang berjudul “Elementary Theorems Relating to Determinants” yang ternyata buku matematika .. haha.

Metode Kondensasi Dodgson

Metode terkenal ini sangat ampuh untuk menghitung determinan matriks dengan jumlah baris dan kolom yang banyak. Tentu saja penting di jaman dulu ketika komputer (atau minimal kalkulator) belum ditemukan. Postingan ini sedikit banyak membahas metode ini, sebagai kelanjutan post terdahulu tentang invers matriks 4×4.

Misal sebuah matriks A dengan ukuran lebih besar atau sama dengan 3×3 dengan matriks dalam (interior matrix) menyatakan matriks (n-2)x(n-2) hasil penghilangan baris awal, akhir dan kolom awal serta akhir (kalau pusing, langsung loncat ke contoh kasus di bawah ya). Metode kondensasi Dodgson terdiri dari empat langkah/tahap antara lain:

  • Gunakan metode operasi baris dan kolom untuk menghilangkan nol dari matriks dalam (interior).
  • Cari determinan matriks 2×2 untuk tiap-tiap empat elemen untuk membentuk matriks baru berukuran lebih kecil (n-1)x(n-1), misalnya diberi nama matriks B.
  • Ulangi langkah sebelumnya untuk matriks (n-2)x(n-2) lalu bagi tiap elemen menurut interior original matriks A, untuk memperoleh matriks C.
  • Lanjutkan terus “kondensasi” di atas sampai hasil satuan ditemukan. Nilai ini merupakan determinan dari matriks A.

Sebagai ilustrasi ada baiknya menggunakan contoh kasus. Lebih mudah khususnya orang teknik yang suka praktis-praktis seperti saya, hehe. Diketahui matriks A.

Karena tidak ada nol di interior, langsung ke langkah 2 untuk mencari matriks B hasil penentuan determinan. Misalnya untuk sisi kiri atas serta sampingnya.

Lanjutkan hingga seluruh matriks A sehingga matriks B dari tahap kedua adalah sebagai berikut:

Tampak matriks A berukuran 5×5 menjadi (5-1)x(5-1) di atas. Tahap ketiga selanjutnya meneruskan kondensasi menghasilkan matriks 3×3, misalnya untuk bagian kiri atas.

Teruskan untuk sisi-sisi lainnya sehingga diperoleh matriks C

Lanjutkan dengan cara yang sama hingga menjadi matriks D. Di sini istilah kondensasi sepertinya ada benarnya. Ibarat embun yang timbul dari uap air yang terkumpul di udara.

Nah berikutnya adalah membagi matriks terakhir D ini (terkecil) dengan interior dari Matriks B yakni:

Tiap elemen matriks D dibagi mengikuti posisi int B, misalnya -84 dibagi -6, -580 dibagi 2, dan seterusnya hingga diperoleh matriks E:

Dengan mudah kita menghitung determinan matriks E ini dengan cara biasa det=14*(-109)-421*(-290) yang menghasilkan 120564. Apakah sudah selesai? Belum, dikit lagi yaitu membagi nilai tersebut dengan interion matriks C yang bernilai 36. Dan hasil akhirnya adalah 3349. Sekian semoga bermanfaat.

 

Menguasai Keterampilan dengan Cepat

Untuk mengetahui informasi dengan cepat dapat dilakukan dengan mencoba melatih membaca cepat. Makin banyak yang dibaca makin banyak pula informasi yang diperoleh, sehingga dengan waktu yang sama jika membaca dengan cepat akan diperoleh informasi/pengetahuan yang lebih banyak. Untuk informasi memang hanya bisa dilakukan dengan membaca, tapi bagaimana dengan keterampilan? Apakah bisa dengan membaca? Tentu saja tidak. Video di youtube ini cukup baik bagaimana meningkatkan keterampilan (bahkan menguasai keterampilan baru) hanya dalam waktu 20 jam, yang jika dirinci per hari berlatih selama 40 menit maka hanya dibutuhkan waktu 30 hari saja.

Ada lima langkah untuk menguasai dalam waktu 20 jam atau 40 menit sehari.

Beberapa ahli mengatakan istilah 10 ribu jam berlatih agar menjadi ahli dalam satu keterampilan, tetapi postingan ini sedikit memberi kabar baik bahwa tidak harus selama itu. Namun dibutuhkan hal-hal berikut ini jika ingin menerapkan prinsip 20 jam ini, antara lain:

1. Menentukan apa yang diinginkan terhadap keterampilan tersebut

Ini sangat penting karena tidak ada gunanya menguasai keterampilan tetapi tidak mengerti manfaatnya, minimal untuk dirinya sendiri. Dengan mengerti dan sadar manfaat yang diperoleh, tekad untuk menguasainya jadi lebih besar. Misalnya menguasai bahasa Inggris. Dengan menyadari keterampilan ini bermanfaat bagi karirnya sebagai seorang dosen (studi lanjut atau publikasi jurnal internasional) maka usaha untuk menguasainya lebih intens dibanding sekedar iseng.

2. Mencari keterampilan utama yang dibutuhkan hasil dari break down

Tiap keterampilan terdiri dari sekumpulan keterampilan-keterampilan kecil yang terhubung satu sama lain menghasilkan keterampilan tertentu. Seorang pemain bole selain harus memiliki kemampuan dribbling juga memiliki keterampilan-keterampilan kecil dari stamina berlari, passing, hingga sekedar menahan emosi ketika tanding. Jadi harus mampu memecah keterampilan utama menjadi beberapa keterampilan bagian (sub-skill) agar lebih mudah dilatih. Biasanya pelatih memiliki program yang membagi keterampilan menjadi beberapa keterampilan kecil. Mirip perkuliahan yang membagi menjadi beberapa sistem kredit semester (SKS).

3. Riset terhadap kemampuan diri (evaluasi diri) yang perlu dilatih sehubungan dengan sasaran skill

Tiap orang memiliki bakat tertentu yang membuat mudah dalam menguasai keterampilan tertentu. Tapi pasti ada kelemahan-kelemahan tertentu juga. Agar proses latihan lebih efektif adakalanya kita harus memahami apa keterampilan bagian tertentu yang menjadi titik lemah kita dan diperkirakan membutuhkan waktu lama dalam menguasainya. Jika lemah di babak akhir dalam permainan catur, perlu melatih lebih banyak dalam menerapkan teori-teori babak akhir. Jujur terhadap diri sendiri sangat diperlukan dalam tahap ini.

4. Menghilangkan hambatan-hambatan ketika berlatih

Karena per hari hanya dibutuhkan waktu 40 menit saja, maka perlu menjaga dari gangguan-gangguan yang mungkin terjadi ketika proses pelatihan. Televisi, radio, ponsel, dan sejenisnya perlu disingkirkan terlebih dahulu. Sedapat mungkin dalam melakukan latihan tidak perlu persiapan yang njlimet sehingga membuat kita malas sendiri untuk memulai latihan. Misalnya ketika berlatih gitar, maka sedapat mungkin gitar tersebut diletakan di kamar, dan ketika mulai latihan langsung di tempat itu juga, tidak perlu pergi ke studia, ke kebun .. apalagi sampai mandi kembang dulu, hehe.

5. Menguatkan tekad di awal proses latihan

Ini ibarat kunci starter kendaraan, apakah kita putar on atau tidak, tergantung tekad kita sudah bulat atau masih angin-anginan. Jika masih tidak jelas, sudah tentu tidak efektif untuk dieksekusi. Akan membuang waktu 20 jam yang percuma karena tidak sesuai dengan hasil yang diinginkan pastinya walaupun mengerti manfaat, mampu memecah menjadi sub-skill, mampu mengevaluasi diri dan menghilangkan gangguan-gangguan. Yuk dicoba.

 

Mencari Pertanyaan itu Sulit Juga

Saat ini era milenial sudah masuk ke segala bidang kehidupan mengikuti bertambahnya usia generasi Y yang lahir antara tahun 1981 hingga 1995. Generasi yang muncul akibat derasnya arus informasi menuntut generasi-generasi sebelumnya ikut gaya mereka yang mencintai segala informasi. Entah ada hubungannya atau tidak, saat generasi ini mulai beranjak dewasa istilah “KEPO” muncul, yang artinya sifat ingin tahu yang tinggi (KEPO=knowing Every Particular Object). Sifat yang membuat para guru kewalahan ini ada baiknya dimanfaatkan untuk hal-hal yang positif. Minimal keingintahuannya diakomodir dengan alat-alat bantu pembelajaran.

Untuk bisa klop dengan generasi ini tidak ada cara lain mengikuti gayanya yang kepo itu. Tidak ada yang salah dari sifat keingintahuan yang tinggi. Hanya saja tinggal diarahkan ke hal-hal yang bermanfaat/berguna. Kemampuan mencari pertanyaan di genenerasi ini ada baiknya ditiru oleh generasi-generasi sebelumnya yang telah lama diajarkan sesuatu yang setelah tahu, digunakan seterusnya. Padahal saat ini sesuatu yang diketahui saat ini, tidak lama kemudian akan digantikan oleh sesuatu yang baru lagi dan harus diketahui agar tidak tertinggal.

Pentingnya Bertanya

Saya sempat beberapa menit menyusun sebuah komposisi pertanyaan ketika tiba di negeri orang. Maklum banyak masalah ketika terpaksa studi lanjut di luar negeri, padahal komunikas satu-satunya hanya bahasa Inggris. Aneh juga, selama ini saya belajar bahasa Inggris menjawab pertanyaan-pertanyaan. Hampir tidak pernah diajarkan membuat pertanyaan, padahal di lapangan sering sekali pertanyaan harus dibuat. Einstein dikabarkan oleh ibunya ketika pulang sekolah selalu ditanya apa yang dia tanyakan ke gurunya ketika sekolah, bukan nilai atau materi pelajaran. Jika Anda telah mampu membuat pertanyaan yang tidak ada seorangpun yang menjawab, level Anda sudah masuk kategori calon doktor. Biasanya ujian kandidasi adalah mempresentasikan sebuah pertanyaan yang merupakan gap antara temuan terkini dengan yang saat ini dibutuhkan (teknik, metode, dan lain-lain).

Arah Pemikiran

Untuk menyelesaikan pekerjaan mental berupa penyelesaian masalah, diperlukan kombinasi kemampuan berfikir runtun dan acak. Namun tetap saja harus ada arahnya, dalam hal ini pertanyaan yang tepat. Semakin detil pertanyaan, semakin baik arah pemikiran seseorang. Hal ini yang perlu dibentuk ke generasi-generasi milenial yang jika tidak diarahkan hanya akan memiliki pemikiran yang banyak tetapi dangkal. Kita membutuhkan anak-anak muda yang memiliki pemikiran yang mendalam, bukan hanya luarnya saja. Memang lebih mudah mencari informasi dangkal karena tersedia secara instan di internet. Untuk hal-hal yang mendalam, kemungkinan perlu digali dari sumber-sumber lain yang baik dari sisi variasi, juga akurasinya (misalnya jurnal).

Pasangan Setia: Tanya dan Jawab

Sebagai contoh mudah adalah permainan catur. Pertama kali saya bingung, apa yang dilakukan orang bermain catur. Ternyata sederhana, menemukan pertanyaan kemudian merespon dalam bentuk jawaban. Yang repot adalah posisi yang sepertinya tidak ada solusi yang harus dijawab. Prof. Max Euwe, mantan juara dunia catur dari Belanda memberikan arahan yaitu memunculkan pertanyaan awal berupa apa saja “Ciri” bangunan saat ini, dilanjutkan dengan pertanyaan apakah bisa ber-“inisiatif”. Jadi dari awal hingga akhir isinya hanya pertanyaan dan menjawabnya, hingga ditemukan siapa yang paling mampu menjawab pertanyaan yang di level master (bukan catur jalanan) biasanya pertanyaannya sama. Sebagai ilustrasi, perhatikan partai di bawah ini, antara Grandmaster Milenial dengan Gen X yang seru. Sekian, semoga bisa menginspirasi.

Mengubah Text Box Pada Form Ms Access 2013 menjadi Combo Box

[basis.data|akuntansi|lab.soft|u.t.s]

Form merupakan salah satu aplikasi untuk berinteraksi dengan basis data. Dalam penerapannya, pengguna tidak seharusnya mengisi data lewat Database Management System (DBMS) yang memang hanya level administrator yang boleh membukanya. Oleh karena itu perancangan Graphic User Interface (GUI) dalam bentuk form sangat menentukan tingkat user friendly dari aplikasi yang dibuat. Postingan ini kelanjutan dari post sebelumnya tentang pembuatan FORM. Di sini ada sedikit tambahan bagaimana dalam menginput data, khususnya isian berupa primary key harus sesuai dengan yang ada di basis data. Di bawah ini merupakan relasi mahasiswa yang mengambil perkuliahan pada tabel jadwal. Ketika mengisi KRS maka mahasiswa menjadwalkan perkuliahan lebih dari satu kelas.

Membuat Form

Anggap kita sudah membuat form transaksi KRS lewat Form Wizard yang disediakan oleh Ms Access. Pastikan mahasiswa menjadi form utama sementara kelas-kelas yang harus diambil adalah sub-formnya.

Mengkonversi Text Box Menjadi Combo Box

Pada bagian text box yang akan dirubah menjadi combo box klik kanan dan pilih Change to – pilih Combo box. Jika dijalankan lewat mode View (di pojok kiri atas pada menu home) akan tampak combo box di salah satu field, misalnya dalam contoh ini kode. Hanya saja masih kosong dan perlu diset lebih lanjut.

 

Mengeset Row Source

Untuk mengeset isian dari combo box dengan cara mengisi field pada tabel yang sesuai lewat Property. Jalankan property dengan mengklik kanan pada text box dan pilih form property. Cara yang lebih cepat adalah dengan menekan alt + enter.

Jalankan form yang baru saja dirancang, lalu coba combo box yang baru saja dibuat. Pastikan seluruh kode kelas yang ada di tabel tampak di combo box. Berbeda dengan List Box, combo box bisa mengisi tanpa memilih, alias menambah baru. Dengan combo box, kode kelas yang diisi pasti sudah terdaftar di tabel kelas. Demikian pula informasi tentang kelas tersebut langsung muncul di isian, misalnya nama dosen pengampu mata kuliah dan lain-lainnya. Sekian semoga bermanfaat.

 

Bumi Dipijak Langit Dijunjung

Pepatah yang mengatakan “dimana bumi dipijak di sana langit dijunjung” mengandung arti agar mengikuti adat istiadat dimana kita berada. Tapi pada postingan ini pepatah itu dapat diterapkan dalam keadaan apapun terlepas dari sebuah lokasi geografis.

Bumi Dipijak

Sadar posisi saat ini merupakan syarat utama mengorganisasi sebuah institusi. Sadar akan posisi yang mirip dengan perumpamaan “bumi dipijak”, membuat kita memahami diri (evaluasi diri) untuk kemudian merancang visi dan misi ke depan. Beberapa tahun riset data spasial yang melibatkan posisi geografi membuat saya paham betul prinsip utama geografi “banyak faktor yang berpengaruh, tetapi faktor geografilah yang utama”. Walau yang mengatakan memang orang geografi, tapi rasanya benar juga (dulu saya dengar lebih parah “semua yang ada dimuka bumi itu, adalah geografi” .. waduh). Ketika mengetik tulisan ini saya berada di dalam rumah di kawasan Bekasi, beda kan jika posisi di Palu saat gempa atau di dalam pesawat JT610 .. (semoga Allah memberikan tempat yang layak kepada korban-korban).

Bumi Dipijak – Alhamdulillah

Di awal semester kuliah doktoral, saya mengalami hal yang rumit dan berat. Diawali keberangkatan yang tidak di-ridhoi beberapa senior hingga kewajiban mengikuti pembekalan DIKTI yang membuat saya telat dua bulan mengikuti kuliah. Padahal kuliah tetap berjalan dan wajib ambil 12 sks dengan IPK min 3,5. Beberapa rekan dari kampus teknik terbaik di Surabaya pun mengalami nasib yang sama. Kesulitan mendapat IPK yang baik. Di situlah prinsip “bumi dipijak” bekerja. Evaluasi diri adalah teknik yang logis. Tapi sebelumnya dalam kondisi yang kalut, kata Alhamdulillah merupakan kata mujarab di segala kondisi. Ketika merasa di titik terendah, dengan kata yang wajib di baca ketika shalat itu, selalu teringat pemberian-pemberian Allah yang kita terima, dari istri, anak yang sehat, pekerjaan yang masih ada, dan lain-lain. Padahal yang tidak ada itu hanyalah secuil, walaupun “drop out” di mata. Dengan prinsip Alhamdulillah ditambah menyadari “bumi dipijak”, langkah tepat saya ambil, berganti jurusan ke information management. Yup, langkah yang tepat, karena saya lulusan pertama Computer Science & Information Management (CSIM) walaupun semester pertama (sebagai mahasiswa Computer Science) tidak dihitung yang logikanya saya harusnya lulus belakangan. Arti kata Alhamdulillah adalah segala puji bagi Allah, berarti berfungsi juga sebagai benteng kokoh dari sikap ingin dipuji. Cari muka, show up, dan hal-hal lain yang ingin agar kita dianggap orang hebat tidak akan dilakukan oleh orang yang memahami makna Alhamdulillah. Cuma kadang suka lupa juga sih ..

Langit Dijunjung

Kita bukanlah kerbau yang main seruduk ketika merasa prinsip kita benar. Memperhatikan orang lain saat ini sangat penting. Banyak organisasi yang berguguran karena kurang memperhatikan orang lain, yang dalam teori IT Strategic disebut “key performance indicator”. Ketika perusahaan taksi tidak bisa memahami kesulitan-kesulitan dan kedongkolan-kedongkolan yang dialami oleh konsumen, hadirnya aplikasi online menghantam organisasi itu. Contoh lain, saat ini institusi kampus sedang “kebingungan” dengan kondisi saat ini, merger di mana-mana, bahkan di tempat saya sesaat lagi beralih ke pemilik lain. Membuat konsumen dan pihak-pihak terkait puas akan pelayanan dan servis yang diberikan sepertinya wajib diketahui bukan hanya oleh bagian pemasaran, melainkan seluruh karyawan. Yang utama tentu saja pemilik/yayasan harus menyadari hal itu. Jika di perusahaan Gojek ada istilah “North Star” yaitu visi utama yang harus dipahami oleh seluruh pegawai (jika ada satu saja cancel – seluruh analis segera mengolah big data apa sebab-sebabnya), di kampus pun harus ada juga, katanya. Jika hanya mahasiswa yang dimanja, tetapi nasib dosen tetap merana, ya udah kabur saja. Sekian, semoga bisa menghibur.

Membuat Sitasi dan Daftar Pustaka Otomatis pada MS Word

[komputer.1|manajemen|lab.sainstech|pert.7]

Saat ini Mendeley merupakan alat sitasi otomatis yang banyak digunakan oleh peneliti-peneliti di seluruh dunia. Tetapi jika tidak sempat membuat akun Mendeley, gunakan saja fasilitas yang ada di Microsoft Word. Perhatikan menu RERENCES di bawah ini, khususnya pada bagian Citation.

Manage Sources

Langkah pertama untuk membuat sumber sitasi adalah mengisi sumber sitasi pada Manage Sources. Isi jenis sitasinya: buku, jurnal, laporan, dan lain-lain. Untuk pengarang, gunakan format <last_name>, <first_name>, <middle_name>.

Tekan New jika ingin menambahkan satu sumber (1). Pastikan tipe sumber sesuai (2), jika tidak pilih yang sesuai. Isi data-data tulisan secara lengkap (3). Tekan OK jika sudah selesai. Berikut cara menyisipkan sitasi di tulisan.

Arahkan kursor di lokasi tempat sitasi berada, misalnya setelah kata “Menurut”. Pilih References Insert Citation – pilih nama pengarang yang akan disitasi. Maka secara otomatis Word akan mengisi (Sunandar, 2017). Praktis bukan? Bahkan jika ingin merubah Style (defaultnya APA), format akan berubah juga. Coba ganti style menjadi IEEE, maka format akan berubah seperti di bawah ini (format angka).

Membuat Reference Otomatis

Jika sudah selesai mensitasi, di akhir tulisan dapat ditambahkan daftar pustaka. Caranya adalah dengan meletakan kursor di bagian bawah tulisan lalu tekan References Bibliography dan pilih yang sesuai/diinginkan.

Pastikan muncul daftar pustakan yang diinginkan beserta formatnya. Selamat mencoba. Tapi sangat disarankan menggunakan Mendeley.

Menggambar Entity Relationship Diagram (ERD) dengan Ms Visio 2013

[basis.data|akuntansi|lab.soft|pert.7]

Beberapa alat bantu rekayasa perangkat lunak saat ini sudah mampu membangkitkan kode dari diagram yang digambar. Namun jika hanya ingin sekedar menggambar, dengan Microsoft Visio pun bisa dengan mudah dibuat. Salah satu diagram yang dibahas dalam perkuliahan sistem basis data adalah Entity Relationship Diagram (ERD). Diagram ini menggambarkan relasi antara satu entitas dengan entitas lainnya. Entitas di sini merupakan abstraksi dari sistem real ke dalam sistem basis data, misalnya informasi-informasi yang terkait dengan barang, pelanggan, atau pun yang dalam bentuk transaksi seperti transaksi penjualan, pembelian, pemesanan dan sejenisnya.

Memulai Penggambaran

Visio yang digunakan dalam postingan ini adalah Microsoft Visio 2013. Aplikasi ini terpisah dengan paket Microsoft Office lainnya (Word, Excel, Access, dan Outlook). Agak merepotkan karena perlu membeli lisensi software tersebut. Tetapi jika sudah ada, apa salahnya untuk dimanfaatkan. Pilih jenis Shape untuk basis data: Basic Shapes Software & Database Databasebe Chen’s Databae Notation. Di sini kita coba menggunakan jenis notasi Chen yang sudah digunakan sejak tahun 70-an, walau saat ini kalah pamor dengan Crow’s Foot Database.

Ada empat bentuk dasar yang tersedia antara lain: Entitas, Relationship, Attribute, dan konektor relationship. Misalkan kita ingin menambahkan dalam model sebuah entitas, katakanlah barang. Drug mouse dari Entity ke bidang kerja. Hasilnya adalah segiempat dengan warna biru. Untuk merubahnya tekan format yang transparan (3).

Dobel klik pada Entity lalu isikan namanya. Atur ukuran huruf beserta warnanya agar mudah dibaca, karena default-nya adalah biru muda dan agak sulit dibaca. Untuk membuat Entity yang lain ada baiknya mongkopi dari yang sudah jadi karena tidak perlu mengeset huruf dan ukurannya lagi. Buat relasi barangmembeli suplier. Primary key, seperti biasa ditulis dengan garis bawah. Relasi gunakan bentuk Relationship Connector di jajaran Chen’s Database Notation dan BUKAN di bagian atas, karena nanti agak repot harus menghapus panahnya.

Gambar ERD di atas dikenal dengan istilah perancangan basis data secara konseptual (conceptual database planning). Secara konsep memang ERD di atas masuk akal, tetapi secara fisik tidak bisa diterapkan, khususnya di tabel pembelian (relasi membeli). Ketika barang dibeli dari suplier tertentu, berisi bisa lebih dari satu barang, padahal dalam tabel tidak bisa diterapkan satu field berisi lebih dari satu record. Oleh karena itu diperlukan konversi dari ERD ke Logical Record Structure (LRS) yang masuk dalam tahap perancangan basis data logikal. Biasanya muncul satu tabel baru bernama DetilPembelian untuk mengakomodir hubungan Many-to-Many.

Stemming Pada Matlab

[per.informasi|t.komputer|lab.soft|pert.5]

Jika pada pertemuan sebelumnya telah berhasil memisahkan kata-kata dalam suatu kalimat agar bisa menghitung jumlah katanya maka pada pertemuan kali ini akan mencoba memisahkan kata dari imbuhan (awalan dan akhiran) agar diperoleh kata dasarnya yang dikenal dengan istilah stemming/lematization. Proses ini sangat penting dalam perancangan mesin pencari (searching). Imbuhan merupakan ciri khas bahasa Indonesia yang memang berbeda sekali dengan bahasa Inggris. Coba rancang GUI berikut untuk melakukan proses stemming.

Imbuhan ada banyak misalnya me, meng, ber, per, -an, dan lain-lain. Untuk memisahkannya kita perlu memproses pencarian berdasarkan spasi dan titik (untuk akhiran). Jika tanpa spasi akan terjadi kesalahan karena sistem akan mereplace seluruh yang diduga awalan/akhiran walau terletak di tengah-tengah kata yang tentu saja salah.

  • % menghilangkan “-an”
  • y=regexprep(y,‘an+\s’,‘ ‘) % sebelum spasi
  • y=regexprep(y,‘an+\.’,‘.’) % sebelum titik
  • set(handles.edit1,‘String’,y)

Kode di atas bermaksud menghilangkan akhiran –an. Jika diinput kata “akhiran.” Akan dihasilkan kata dasarnya “akhir”. Ada dua deteksi yaitu sebelum spasi dan sebelum titik.

Logika sederhananya adalah mengganti “-an” tersebut dengan “blank”. Fungsi yang digunakan adalah regexprep yang mencari dan me-replace suatu string. Pertemuan berikutnya akan menggunakan proses perhitungan karakter tertentu, misalnya “makan”, tidak bisa jadi “mak” karena kurang dari 4 karakter. Selain itu perlu proses N-gram (dua, tiga, dst). Selamat mencoba, semoga UTS dapat dikerjakan dengan baik.

Membuat Bahasa Pemrograman Sendiri

[tek.kompilasi|tek.inf|s-103|pert.7]

Sebelumnya kita kerap melihat program yang dibuat oleh pengembang. Program yang dibuat tersebut diramu dengan bahasa pemrograman tertentu seperti visual basic, c++, pascal, php, phyton, dan lain-lain. Pernahkah berfikir siapa yang membuat bahasa pemrograman tersebut? Apakah sama dengan membuat program? Postingan kali ini sedikit banyak menjelaskan masalah itu.

Compiler atau Interpreter?

Di tahun 80-an atau 90-an waktu SMA saya belajar bahasa basic sebagai bahasa pemrograman. Materi tersebut disisipkan dalam mata pelajaran matematika. Jadi tidak heran di beberapa universitas ilmu komputer merupakan sempalan dari jurusan matematika. Bahasa basic sendiri ketika diprogram hasilnya berupa program executable (*.exe). Proses membentuk source code (format text berekstensi *.bas) menjadi *.exe dikenal dengan istilah kompilasi atau beberapa aplikasi diberi nama deployment. Bagaimana dengan bahasa pemrograman lainnya seperti php?

Berkembangnya website membuat tuntutan terhadap aplikasi yang bisa berjalan di atas platform tersebut. Salah satunya adalah php dengan basis datanya yang terkenal MySQL. Bahasa ini berbeda dengan bahasa berbasis desktop seperti VB, C++, dan sejenisnya karena instruksi tidak dikompilasi menjadi executable, melainkan dijalankan baris per baris di engine PHP. Jadi kode sumber tersimpan dalam server (biasanya apache). Proses penerjemahan kode sumber menjadi eksekusi dikenal dengan istilah interpreter. Perbedaan nyatanya adalah jika program yang di-compile dapat dijalankan hanya dengan mengandalkan sistem operasi, pada program yang dijalankan dengan interpreter membutuhkan engine pembaca, salah satunya browser seperti mozilla, internet explorer, safari dan lain-lain. Salah satu keunggulannya adalah karena berbasis browser maka dapat dijalankan di berbagai platform (windows, linux, dll) atau pun beragam alat seperti PC, laptop, handphone, tablet dan lain-lain yang memiliki browser. Java sendiri sebelumnya memang telah getol mengembangkan kompilernya dengan teknik byte code yang dapat dijalankan diberagam platform dan mesin, asalkan menginstal terlebih dahulu Java Runtime-nya (JRE).

Peran Pembuat Bahasa Pemrograman

Dahulu, pembuat bahasa pemrograman dapat diibaratkan sebagai fardhu kifayah (maksudnya cukup segelintir orang saja yang mengerjakan), yaitu para vendor bahasa pemrograman. Namun saat ini dikala merajalelanya aplikasi berbasis android maka kebutuhan akan bahasa pemrograman yang mudah dan memanjakan programmer mutlak diperlukan. Apalagi saat ini programmer tidak harus dari jurusan informatika dan komputer, jadi peran pembuat bahasa pemrograman banyak diperlukan. Bahkan seoarang anak SD pun saat ini mampu membuat aplikasi android yang canggih berkat bantuan compiler yang spesifik untuk aplikasi tertentu, khususnya di android atau ios.

Aplikasi Pembuat Bahasa

Memang untuk bisa menggunakan aplikasi-aplikasi pembuat bahasa pemrograman diperlukan teori khusus yaitu teori otomata dan bahasa (grammar). Tanpa hal itu dijamin kebingungan menggunakannya. Biasanya aplikasi yang digunakan untuk membuat bahasa adalah aplikasi yang berbasis C++ atau Java. Salah satu yang terkenal dan banyak dijadikan bahan praktek mata kuliah teknik kompilasi adalah Lex and Yacc (lihat pertemuan 6). Bagan dibawah adalah proses pembuatan bahasa pemrograman dengan mengkonversi Lex-file dan Yacc-file menjadi executable.

Di sini dicontohkan dua buah kode sumber (bas.y dan bas.l) yang masing-masing berfungsi sebagai grammar (yacc) dan scanner (lex). Setelah di-build/compile dengan cc, diperoleh file bas.exe yang siap digunakan. Apa maksudnya? Sepertinya masih bingung ya.

Kita ambil contoh sebuah bahasa pemrograman Matlab. Jalankan Matlab.exe (bahasa pemrograman) dan masuk ke Command Window. Ketik 1+1 dan tekan Enter. Apa yang dihasilkan? Matlab akan meng-scan 1+1 dan mengeksekusi menjadi “makna” penjumlahan satu dengan satu dan dihasilkan 2.

Walaupun sederhana banget, toh itu contoh bahasa pemrograman. Perlu diketahui Matlab biasanya berfungsi sebagai interpreter (Matlab harus dibuka untuk menjalankan program m-file) namun bisa juga sebagai compiler (terlebih dahulu mengkompilasi m-file menjadi exe). Di pertemuan berikutnya akan kita coba menggunakan lex and yacc untuk membuat bahasa pemrograman seperti Matlab di atas (walau sederhana) seperti di bawah ini. Terus mengikuti ya.