Buat kuliah Keamanan dan Integritas Data, aku bikin algoritma enkripsi klasik. Dasarnya dari Julian chiper dengan dua pool dan dua variasi “gerakan” key berdasarkan jumlah genap/ganjil dua byte yang akan diubah. Singkat cerita kurang lebih begitu, lah.

Makalahnya bisa dibaca di sini.

Waktu itu ada yang bilang begini sama aku, “Kita itu kuliah buat kerja, kerja cari uang, beli ini-itu, menikah” saat acara makan bersama dari anggota laboratorium tempat saya ‘bermain’. Di kesempatan lain beliau (orang yang sama) mengomentari keinginan hidup saya: tentang bekerja sebagai engineer (beneran), earning money from certain–specific purposes, and such.

Beliau juga mengatakan tentang bagaimana kita harus patuh terhadap prosedur kerja, walaupun beberapa bumbu inovasi kecil mungkin dapat membuat hal-hal menjadi lebih menarik. Juga kutipannya berbicara mengutip managernya, “Kamu ga kerja di sini juga kita ga bakal rugi.”

Kutipan terakhir tersebut membuat saya (sedikit) sakit hati. Menurutku setiap orang dengan kondisinya masing-masing, kelebihan dan kekurangan masing-masing, mempunyai tempat spesialnya masing-masing. Pencapaian setiap orang tidak harus sama, bahkan harus tidak sama. Lingkungan kita bekerja (nanti) harusnya menghargai kita semestinya, tidak hanya dengan upah yang sesuai, namun juga penghargaan saat kita melakukan sesuatu buat mereka (dan diri kita sendiri) dan koreksi saat kita membuat kekeliruan.

Kerja buatku tidak hanya sekadar mendapat penghasilan, namun juga mengembangkan diri, mengeksplorasi kemampuan dan kemungkinan, mencari rekan dan menjaga kerpercayaan yang diberikan. Kalau kamu?

Baru-baru ini (mulai akhir Januari) di UB dipasang mekanisme login melalui web yang baru untuk RADIUS yang menggantikan yang lama (yang biru-putih itu).

Ada beberapa kekurangan yang pada antarmuka web yang baru ini:
– ga pakai SSL (mana sertifikatnya?),
– ga ada fungsi hash,
– isinya cuma plain text,
– interval sesi yang terasa terlalu cepat (berapa menit sih sebenarnya? atau aktivitas?),
– ga ada logo UB-nya (d’oh!),
Kesimpulannya: ndak mbois, blas!

Menanggapi kejengkelan tersebut, aku iseng-iseng bikin skrip auto-login biar bisa ninggal komputer download sampai besoknya. Pendekatannya sederhana: tangkap paket waktu login, duplikasikan secara periodik dengan shell/batch script.

Untuk mendapatkan bentuk paket, aku pakai wireshark, harusnya segera dapat paket HTTP dengan bentuk semacam ini:

POST /webAuth/ HTTP/1.1
Host: nas.ub.ac.id
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120313 Firefox/13.0a1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://nas.ub.ac.id/webAuth/
Content-Type: application/x-www-form-urlencoded
Content-Length: 62

username=--nimku--&password=--passwordku--&pwd=--passwordku--&secret=true

Paket tersebut tinggal disimpan jadi file dengan menu “Save as” di wireshark 🙂 Trim header-header dari enkapsulasi (aku pakai dd) sampai jadi paket HTTP-nya.

Nah, setelah punya file yang berisi paket tersebut kita bisa kirim secara periodik. Aku gunakan nc (netcat) untuk manipulasi socket-nya. Aku buat shell script:
#!/usr/bin/bash
while [ 1 ];
do cat paket-login | nc nas.ub.ac.id 80;
sleep 500; # 500 detik
done;

–buat sistem operasi Windows pakai skrip batch, yah. aku ga bisa jelasin, deh

Langkah terakhir, berdoa semoga skripnya bisa jalan sesuai yang diinginkan 🙂

Nah, berhubung programnya sudah obsolete dan (tampak) ga bakal jadi bahan gunjingan aku upload, deh.

Sistem yang dipakai:
– Linux (kalau ga salah dulu pakai Zenwalk 6.4, deh),
– Qt 4.6,
– qwt pre 6 (aku coba compile pakai qwt 6 udah ga bisa–QwtCompass-nya udah beda).

Pembacaan dari serial com pakai operasi I/O standar glibc, karena waktu itu malas pakai qextserialport (baru official masuk Qt 5) trus butuh eksekusi yang efesien. Kodenya jadi gado-gado, tuh.

Buat aplikasi widget fotonya sih fail, belum nemu manipulasi pixmap yang bisa gegas updatenya (apa aku yang kopok, yah?)

Download di sini buat kodenya. Maaf ga ada screenshot, atau apa–udah kehapus semua dokumentasinya 🙁

Sebetulnya sudah cukup lama aku mau post hal ini, tapi urung karena sebab-sebab yang kurang jelas.

“ASD” (a-es-de) dari dahulu (sebelum perubahan kurikulum di Elektro) sudah menjadi singkatan untuk dua mata kuliah berbeda:
– Algoritma dan Struktur Data,
– Analisis Sistem Daya (I dan II).
Nah, begitu pula candaan: **Algoritma Sistem Daya** (lol). Sementara "Analisis Struktur Data" adalah frasa yang cukup logis sehingga tidak jadi bahan candaan.

Sejak kurikulum baru diterapkan, hal yang lebih aneh terjadi:

“Artifisial Sistem Daya”, oh no! Nama matakuliah aslinya adalah “Artificial Intelligent dalam Sistem Daya”, tapi kalau ditulis setengah hati gini kok jadi lucu, yak.

Baru sadar kalau label salah satu laboratorium di Elektro kurang tepat ejaannya. See:


Seperti yang lain, “Endonesian Engrish”.

Laboratorium yang dimaksud adalah Laboratorium Bengkel Elektronika, entah mengapa lebih sering disebut sebagai “Laboratorium Proses” (padahal ga tahu proses apa?). Tapi kalau ditulis “Lab. Prosessing” semacam kurang cocok atau apa, ya? Andai ditulis dengan bahasa Inggris, Device and IC Processing Lab tentunya lebih tepat.

Menambahi post sebelumnya tentang poster yang salah pilih kata, kali ini konteksnya kurang ‘makcep’


Kali ini tulisannya “Keep Silent”, poster yang ini sudah ditempel sejak sebelum UAS (tapi aku kurang tahu kapan)

Bukan maksudku minta ini-itu, tapi kalau dicermati artinya silent itu hening. Berarti diskusi baik-baik di depan ruangan kelas sambil nunggu dosen semacam dilarang, dong? Keep Quiet (Tetaplah tenang!) sepertinya lebih proporsional, yak!

Nah, ‘pamer’ tugas lagi, nih 🙁 (publishnya kok juga mepet sama deadline tugas)



Kalau yang ini bikin form ‘pendaftaran’ yang dulu–hardcoded.
kode: form pendaftaran yang lama



kode: pakai designer
Sejenis dengan sebelumnya, cuma softcoded (isitlah apa itu?!) dengan designer di NetBeans.


Yang ini punya popup notifikasi jadi tampak seperti ini:

kode: tambah pop-up
Actionnya tiap Component ditaruh di ActionListener yang anonim. Tinggal timpa fungsi actionPerformed(ActionEvent e) dengan ‘kelakuan’ yang dibutuhkan.
________
Walaaa, kuis hari ini!

Kalau ditanya threading itu apa, aku definisikan begini: unit kecil dari program yang rutinnya dapat berjalan secara mandiri dari program induknya. Harusnya ada korelasinya dengan syscall fork(), tapi belum tahu di mana. 😀

Mari pelajari code-nya:
contoh thread di Java,
contoh thread di Qt

Di Java, kita dapat membuat thread berupa sebuah class sendiri yang extends dari java.lang.Thread. Kita disuruh menimpa fungsi run() sesuka kita. Sebetulnya ada cara lain dengan implements dari java.lang.Runnable, tapi bukan preference-ku, deh!
–selebihnya perbedaan kedua metode bisa dibaca di artikel dari stackoverflow ini

Di Qt kurang-lebih sama, inherit QThread, tumpuk fungsi run(), dan viola!

Dari dua contoh di atas, kita bisa ambil kesimpulan:
– karena thread menjalankan hanya fungsi di run(), maka coding program bakal terasa sekuensial di situ (padahal OOP),
– beberapa thread bisa jalan secara independen (and kinda ‘scrambled’), dan bisa diatur prioritasnya masing-masing,
– kita harus tahu bagaimana mengontrol thread: mulai, tahan, ulang, selesai, dan lainnya.
– thread rekursif? coba, deh! 🙂

____
Untuk fungsi-fungsi yang berkaitan dengan kontrol: start(), suspend(), stop(), prioritas , komunikasi antar thread, dan sebagainya bisa dirujuk sendiri ke dokumentasi masing-masing, ya!