Showing posts with label Education. Show all posts
Showing posts with label Education. Show all posts

Alat Kejahatan Cyber: Cara Kerja & Pencegahannya

Melalui artikel ini saya ingin memberi peringatan kepada para pengguna internet (komputer) untuk lebih berhati-hati. 2 alat dibawah ini adalah contoh alat-alat yang digunakan penjahat cyber (hacker). Mengerikannya alat tersebut dijual dengan harga yang “relatif” murah.
Cyber Crime

WiFi Pineapple Nano: WPN [atau alat lain yang semacam] ± $100
Situshttps://www.wifipineapple.com/pages/setup#nano
Cara Kerja/Contoh Kasus:
  1. Piranti anda (HP/LapTop/tablet) terkoneksi sebuah jaringan WiFi gratis (open): misal di mall/bandara, dll.
  2. Setiap data yang dikirim dari piranti anda akan melalui WPN sebelum diteruskan ke web tujuan. Catatan: kita tidak akan sadar kalau data telah diambil.
  3. Misal anda login ke email, bank, atau menggunakan kartu kredit maka WPN dapat menyimpan username, password, dan-atau nomer kartu kredit anda (dalam bentuk unencrypted/tidak tersandi!!!).
  4. Alat ini juga akan “menyadap” setiap data yang dikirim. Misal anda mengirim photo/video yang bersifat pribadi ke pasangan anda.
Pencegahan:
  1. Jangan pernah menyambungkan ke WiFi gratis yang tidak jelas. Biasanya di tempat umum cyber hacker seperti ini akan memberikan umpan (bait) dengan cara seolah-olah memberikan WiFi gratis ke orang lain. Bahkan di beri nama seolah-olah WiFi dari restaurant, misal “Starbucks/DunKinDonut/dll”
  2. Kalaupun terhubung dengan WiFi gratis yang “jelas” misal WiFi gratis dari PemDa atau Library, usahakan jangan menggunakannya untuk kegiatan yang penting seperti eBanking, belanja online, atau akses admin ke database atau HPC.
  3. Kalau mau cek eMail atau login usahakan login dari koneksi yang aman (pribadi/rumah/kantor). Sehinga di WiFi public tidak perlu login kembali.
  4. Selalu aktifkan SMS autorisasi eBanking atau gunakan token. Manfaatkan support verifikasi sms dari web-web penting (contoh web eGov pemerintah Australia atau account microsoft).
Contoh Gambar:
Contoh wpn

KeyLogger [atau alat lain yang semacam] ± $50

Situs http://www.veriato.com/ppc/veriato-360/keylogger
Cara Kerja/Contoh Kasus:
  1. Seseorang menggunakan komputer yang dipakai secara bersama: misal di library, warnet, kantor, airport, dll.
  2. Sang penjahat cyber terlebih dahulu menancapkan alat ini (biasanya di belakang PC agar tidak terlihat/atau bahkan didalam PC!). Sering di ‘samarkan’ dengan kabel penghubung keyboard/mouse/alat lain.
  3. KeyLogger akan menyimpan “SEMUA” rangkaian tombol yang di tekan di keyboard. Sehingga jika anda memasukkan username dan password, maka informasi tersebut juga akan tersimpan.
Pencegahan:
  1. Saat menggunakan komputer umum, hindari kegiatan penting: eBanking atau semacamnya.
  2. Cek ke semua port USB, cari tanda-tanda adanya alat yang mencurigakan. Terkadang seperti kabel biasa, tapi lebih “gemuk” di bagian tertentu.
contoh gambar: 

Contoh Keylogger yang disamarkan

Video :
   
Pencegahan secara umum:
  1. Ganti password secara berkala.
  2. Selalu gunakan koneksi pribadi untuk kegiatan penting.
  3. Save login di Laptop dan HP, tapi beri password untuk menggunakannya. Tujuannya agar saat HP/Laptop hilang maka account kita tetap aman.
  4. Jangan simpan data penting di USB drive/External HardDisk. Jika terpaksa, maka encrypt file atau drivenya. Ini contoh software-software gratis untuk meng-encrypt usb drive anda: [LINK]

!!!PERINGATAN!!!

  1. Cyber crime/Hacking adalah tindakan kejahatan. Hukumannya diatur dalam undang-undang, baik hukum nasional maupun internasional. Baca lebih lanjut disini: http://www.hukumonline.com/klinik/detail/cl5960/landasan-hukum-penanganan-cyber-crime-di-indonesia
  2. Jika kepolisian kita sudah memiliki divisi e-Cyber yang aktif, maka kepolisian bisa melakukan “reverse engineer” dan mendeteksi serta menangkap para penjahat cyber ini, walaupun mereka tidak/belum mencuri data rahasia penting/personal.
Artikel ini ditulis sebagai pengetahuan agar kita semakin cerdas dan lebih berhati-hati dalam menggunakan internet/komputer. Insya Allah nanti akan saya lanjutkan dengan artikel lainnya untuk menangkal berbagai kejahatan cyber, terutama yang disebarkan melalui situs-situs di internet.
Cheers,
</TES>®

Mengurus Izin Sekolah Anak Setelah Tugas Belajar di Luar Negeri

Mengurus administrasi sekolah seringnya menjadi momok bagi para orang tua yang dinas/bertugas di luar negeri saat mereka akan kembali ke tanah air. Sebagian dari mereka bahkan merelakan untuk pulang terlebih dahulu ke tanah air sebelum back for good (BFG).

Beberapa kendala yang ada diantaranya: ketidakjelasan apa saja yang harus disiapkan, bagaimana caranya, berapa biayanya, berapa lama ngurusnya, kepada siapa, dan siapa yang bisa saya tanya. Saya sendiri mengalami hal yang serupa beberapa waktu yang lalu, melalui tulisan ini saya hendak membagi pengalaman saya dengan harapan bermanfaat bagi teman-teman lain yang menghadapi hal yang serupa.
Langsung saja ya, prosesnya saya bagi 2 (ditambah beberapa catatan tambahan):

[1]. Di Negara Asal (luar negeri):

  1. Surat keterangan dari sekolah asal
    Untuk meminta surat ini kita akan ditanyakan kapan anak mulai belajar di sekolah tersebut dan hari/tanggal terakhir berada di sekolah. Prosesnya sangat mudah, datang saja ke school office lalu isi exit form yang mereka berikan, biasanya setelah 1-2 hari kita bisa ambil suratnya (terkadang bahkan hanya butuh 10 menit). Surat ini berguna untuk menginformasikan level/kelas anak kita saat ini. Surat ini juga akan digunakan saat meminta surat pengantar dari kedutaan/konjen RI di negara asal, di DikBud saat minta Surat Penyaluran/Penyetaraan, dan kelak di sekolah tujuan di tanah air. Contoh suratnya seperti ini (LiNK).
  2. Surat keterangan dari KonJen/kedutaan RISurat ini berguna sebagai acuan ketika mengurus administrasi di DikBud dan juga (terkadang) diminta di sekolah tujuan di tanah air. Untuk teman-teman di Australia bisa mengacu ke Link ini. Normalnya proses ini hanya dilakukan lewat email saja & membutuhkan waktu 3 hari kerja. Lampiran yang dibutuhkan: Paspor orang tua dan anak, Formulir permohonan yang sudah diisi (download di link di atas), Surat keterangan dari sekolah awal (point 1).
  3.  Hubungi Sekolah Tujuan
    Okay, here is an important trick. Sebenarnya proses ini bisa dilakukan oleh saudara/teman/tetangga/perwakilan di tanah air. Sehingga kita tidak perlu langsung ke tanah air. Bahkan seperti kasus saya diskusi bisa dilakukan lewat email & WhatsApp. Hal yang perlu disampaikan: rencana kita untuk memindahkan anak kita ke sekolah tersebut, ketersediaan kuota kelas, biaya, jadwal pendaftaran, syarat dari sekolah, minta brosur sekolah, tanya akreditasi sekolah, fasilitas, dsb.Saran saya lagi, agar pengurusan efisien lakukan hal ini saat menunggu poin 1 atau 2 di atas selesai.
    Catatan penting yang perlu didiskusikan dengan sekolah tujuan: Jika anak kita sudah punya NISN (Nomer Induk Siswa Nasional) maka kita “aman”. Namun jika belum, maka sulit/mudahnya proses berikutnya bergantung pada kelas berapa anak kita. Jika anak kita kelas 5 SD ke bawah, maka masih relatif “aman”. Tapi jika sudah kelas 6 SD ke atas dan belum punya NISN, maka wajib dibicarakan dengan hati-hati ke sekolah. Ada sekolah-sekolah yang enggan menerima murid kelas 6 SD ke atas yang belum ber-NISN. “Konon kabarnya” birokrasinya cukup rumit dan lama.
  4. Siapkan Rapor anak
    Jika anak kita  >3 tahun bersekolah di luar negeri, maka siapkan raport cukup 3 tahun terakhir. Jika kurang dari itu, cukup seadanya. Raport terakhirnya di legalisir. Sebaiknya di legalisir sekolah, tapi kalau di Australia bisa juga di legalisir di JP (Justice for Peace).
  5. Apply penyaluran &/ Penyetaraan online di DikBud
    Ok, yang ini awalnya kalau ndak tau akan lumayan ribet. Tapi kalau sudah tau informasinya jadi mudah. Jadi begini …
    [1]. Link sistem online DikBud: http://119.235.30.114/.
    Things to do: Daftar dulu account, lalu verifikasi, kemudian login. Setelah login, perhatikan poin berikut.
    [2]. Kalau anak kita lulus SD/SMP/SMU di negara lain maka nanti di sistem DikBud harus melakukan 2 pengurusan: “Penyetaraan” dan “Penyaluran“.  Kalau anak kita hanya SD/SMP/SMU tapi tidak mendapatkan ijazah di luar negeri, maka cukup isi form “penyaluran”. Prosesnya seketika, artinya setelah di submit maka proses online-nya selesai. Proses selanjutnya nanti akan dilakukan di tanah air dengan menunjukkan bukti fisik.
    Jika harus penyetaraan, maka setelah isi form online, maka kita harus menunggu beberapa hari untuk aplikasi online tersebut di setujui.  Kalau beruntung bisa jadi hanya satu hari. Sama seperti penyaluran, kita tetap perlu menunjukan berkas asli kelak di tanah air.
    Catatan penting, terutama bagi mereka yang berdomisili jauh dari Jakarta. Proses verifikasi bukti fisik bisa diwakilkan oleh orang lain. Tapi saran saya jangan pernah menggunakan calo. Saya akan jelaskan alasannya nanti saat saya menerangkan prosedur di tanah air.
    [3]. Dokumen yang perlu di unggah: Pas Foto, paspor, surat dari Konjen/kedutaan, Ijazah, transkrip nilai, kurikulum, akte kelahiran, rapor 3 tahun terakhir.
    Catatan Penting: Sistem online DikBud tidak menerima file pdf!!!… File harus berbentuk PNG/JPG. Saran saya pakai adobe acrobat, lalu pilih “split file” untuk secara automatis memecah file pdf yang terdiri dari beberapa halaman. Atau buka file pdf di Adobe Photoshop, pilih open all, lalu save satu persatu sebagai png/jpg.
    Catatan penting lainnya dari pengunggahan file adalah, jangan hawatir bila beberapa dokumen tidak ada. Misal di Australia tidak ada UN, sehingga transkrip tidak ada. Maka tidak mengapa kolom unggahan di kosongkan, tapi beri keterangan di kolom komentar yang tersedia.
    Catatan penting lain lagi. Terkadang kurikulum sekolah sangat banyak halamannya (misal >30). Maka kita tak perlu mengunggah dokumen tersebut. Cukup berikan link saja dari website resmi di negara asal (misal link dari website sekolah).
  6. [Optional] Update komunikasi dengan sekolah tujuan
    Saat berkas-berkas dari sekolah asal, konjen, raport yang dilegalisir, dan bukti online kepengurusan dikbud sudah tersedia, maka sebaiknya berkas-berkas ini dikirimkan (lewat email saja) ke sekolah tujuan.  Tujuannya agar sekolah sedini mungkin mempersiapkan kedatangan anak kita.
Ok, kurang lebih hal-hal tersebut diatas yang perlu kita siapkan di negara asal. Tentu saja ditambah hal-hal lain seperti menyiapkan dana (curcol :p ), memperkenalkan anak dengan kurikulum dan mata pelajaran Indonesia, memberitahu anak informasi tentang sekolah di Indonesia, dan lain-lain. Sekarang mari kita bahas tentang proses selanjutnya di tanah air.

[2]. Proses di Indonesia

Tentu saja sepulang-nya ke tanah air kita masih lelah (jet lag) dan terkadang ingin kangen-kangenan dengan sanak saudara atau orang tua. Namun, sayangnya bagi orang tua bersantai-santai & istirahat terkadang adalah sebuah hal yang  mewah (curcol lagi :p ).  Berikut adalah hal-hal yang perlu dilakukan untuk melanjutkan proses diatas.
  1. Verifikasi Berkas ke DikBud
    Seperti yang dijelaskan di atas proses-nya bisa diwakilkan. Verifikasi dilakukan di Sekretariat e-Layanan Pendidikan Dasar dan Menengah, Komplek KEMDIKBUD Gedung E Lantai 14, Jl. Jenderal Sudirman, Senayan Jakarta. Perhatikan, gedung ini bukan gedung utama Pusat Layanan terpadu (PLT). Gedungnya di belakang sebelah kiri.Saat masuk gedung dan ke lantai 14, hati-hati disini banyak calo. Hiraukan saja mereka dan ga usah tanya-tanya ke mereka. Takutnya malah dibikin ribet, disuruh bayar, dll. Langsung saja ke arah kiri dan cari ruangan dengan tulisan “Sekretariat layanan Pendidikan dasar dan Menengah”, kalau masuk ruangan tersebut di meja paling depan akan ada meja penyetaraan (kanan) dan penyesuaian (kiri).
    Catatan penting: Selama kita sudah melakukan proses online, proses verifikasi cepat dan gratis. Jika melakukan penyetaraan kita perlu menunjukkan juga bukti kalau proses online sudah disetujui. Kalau penyaluran, nanti kita disuruh Foto Kopi surat pengantar yang disiapkan DikBud sebanyak 4 lembar. Foto kopi bisa dilakukan di lantai tersebut (di pojok ruangan). Siapkan uang pas sekitar 2 ribu untuk keperluan hal tersebut.
  2. Pendaftaran di Sekolah Tujuan
    Proses ini sangat bergantung dengan sekolahnya. Jika sekolahnya sama dengan sekolah anak dahulu sebelum ke luar negeri, biasanya akan jauh lebih mudah.Berkas yang disiapkan-pun berbeda-beda. Kalau pengalaman pribadi saya kemarin yang perlu disiapkan adalah : dana (bisa jadi cukup besar #CurColTerusss), Materai, Pasfoto orang Tua dan anak, berkas-berkas diatas, isi formulir pendaftaran, dll.
    Walaupun nampaknya mudah, jangan remehkan tahap ini. Pengalaman saya, banyak sekali form dan berkas yang harus disiapkan. Luangkan 1-3 hari untuk proses ini. Beberapa sekolah juga mengadakan psikotes kepada anak kita. Tujuannya sangat baik, untuk menilai kesiapan anak kita di sekolah tersebut. Jika diperlukan mereka akan menyiapkan semacam program matrikulasi untuk anak-anak kita.
Kurang lebih “hanya” itu proses di tanah air yang harus dilakukan. Ada beberapa catatan tambahan yang juga sebaiknya diperhatikan.
  • Perhatikan Jadwal pendaftaran sekolah tujuan
    Di beberapa sekolah menerapkan pendaftaran dalam beberapa gelombang. Biasanya gelombang pertama lebih murah biaya pendaftarannya dan anak kita memiliki kemungkinan diterima yang lebih besar.
  • Perhatikan waktu mulai belajar di sekolah Asal dan Tujuan
    Jika orang tua jeli, maka ia bisa menetapkan waktu optimal agar anak kita mengalami “reverse culture shock” dan penyesuaian seminimal mungkin. Memulai belajar di awal tahun pelajaran akan lebih memudahkan anak-anak kita ketimbang di pertengahan tahun pelajaran. Memudahkan maksudnya dalam adaptasi kurikulum dalam negeri dan dalam bersosialisasi.
Kurang lebih itulah proses yang harus dilakukan Ayah-Bunda … Semoga penjelasan di atas walau mungkin membingungkan (mungkin juga menakutkan), tapi semoga bisa menjelaskan apa yang harus disiapkan/dilakukan untuk buah hati kita tercinta.. :)   … Please remember it’s hard for our children too, so please keep smiling and SemangKa!!!… :)
We take care of our children, even more than our self.
PS:
Link-link lain yang bisa dijadikan referensi:

My Life as Nancy Yeats

Sebuah cerita yang ditulis kakak Nisrina (Saat ia kelas 4 SD), sebagai bagian dari tugas sekolahnya. Ia bertugas untuk mempelajari sejarah tentang apa, siapa, mengapa dan dimana suatu kejadian terjadi di masa lalu, kemudian membuat sebuah cerita fiksi diatas fakta tersebut (i.e. inspired by true story). Ceritanya seperti ini ….


——————————————–
Chapter 1: Life in England
——————————————–
“After her!” Men were shouting, people were chasing me, shouting, huffing, puffing and yelling to me. My feet were too tired to run away and hide in my little part of the street.
“Come on Nancy, keep running!” I said quietly in my heart.
I know it’s wrong to steal, but I only stole 100 shillings and a soft cozy pillow. It’s nothing compared to the very rich people. It’s the only way I could survive!
I’m sure you wondered what happened. Well, if you want to know, it all started 3 months ago. My old job was to be a milliner, and if you asked what’s it like, well, it’s horrible! It’s tiring, it’s stinky, and I don’t get much money or nice treatments from mistress Rose.
”That’s impossible!” people think she’s nice and kind and pretty; when really, she’s not. She forced me to make pretty hats for rich women and paid no more than 1 shilling. She treated me like rubbish on the streets in London, and we know what’s London streets are like; stinky and smelly! That’s why I run away from the shop.
I’ve been stealing stuff and sleeping on the streets since then, but it was better than making hats and hats and hats for Mistress Nellie. I’ve never been caught before, (even though my heart beats so fast and loud like a drum) until today.
I was trying to steal something from a big house far away from my ‘house’. But I was caught, by a man, a fancy, a well-dressed man. When he saw me, he gasped, and suddenly he shouted, “Thief! Thief! The girl is trying to steal from ‘ouse’!” he yelled, then it all started. Screaming, yelling, running,…
My feet slipped at the rickety road because of the heavy karts. I fell down, men were holding my hands very tight like there’s a 500 pounds of chains around my wrists pulling me up.
“So little girl, you’re trying to steal from me ‘ouse’ eh?” the man said.
“Well, I don’t ‘ink so you filthy little peasant!” he giggled and then chuckled and then he laughed as he take me to the Old Bailey.
——————————————–
Chapter 2: Sentenced to death
——————————————–
“So, guilty or not guilty?” asked the judge with his low voice.
“G…guilty s…s…sir,” I admitted.The crowd gasped and boomed at me.
“Ha, serves you right, serves you right! You should be ‘anged in front of my eyes,” a man said. The judge looked at him with his cold scary eyes.
“S…sorry, Sir,” the man said.
“OK young lady… Guilty!”
“You are sentenced to death!” he said.
I was carried by guards to the old, stinky, and smelly gaol. All I have left was my dirty grey work dress from Mistress Nellie’s hat shop. The guards put me in a cell. It was crowded with women crying and yelling. I just sat at the corner, whimpering, crying, and sobbing. I was scared… very scared. Tears fell down from my eyes.
Then I realized that I made a mistake! I should’ve stayed in the hat shop with Mistress Nellie, and none of this would happen. Oh, I’m crazy! I really am! My mind was full of thoughts, then suddenly I fell asleep.
——————————————–
Chapter 3: All Changed
——————————————–
“Oy!! Wake up! Wake up you lazy lady!” the guard shouted. I was shocked and I jump up and woke up from my sleep.
“Here’s your grub,” he said handing out a little bit of food. I looked at it. Dried and salty meat and peas and about 3 pints of water.
“You won’t get much! You’re leaving in the middle of the day, you lucky lad!” he said.
Lucky? Lucky?
In my whole life I never ever think that I’m lucky! And what’s with ‘leaving in the middle of the day’? I think that was meant to be ‘you will be hanged in the middle of the day’. Ha ha ha!
I ate my food as well as remembering my past. Oh mama, I guess I’m joining you now. My mama died when I was born. My father gave me my name but it was half-hearted, and when I was 5 he sold me to Mistress Nellie because he had a new wife. With tears in my eyes and sad memories in my head, I lie down back on the floor. It was midday. Suddenly two guards grabbed my arms and took me to a place that looked like the Old Bailey.
Then I had an idea.
“But what about my grub? Surely we can’t left those good things away. It’s a waste of food, don’t you think?” I said trying to make an excuse to go back and maybe, just maybe, to run away.
“No way! Am I going to fall to your trap, you liar!” one of the guard say.
I didn’t know what to do. But then, I saw the Old Bailey and then I realized that I didn’t have to do anything, because….it’s too late for me.
——————————————–
Chapter 4: Yay???
——————————————–
“Nancy Yeats!” the judge shouted.
“Yes, Sir?” I replied. I was confused because if they wanted to hang me, then why did the guards send me here?
“I have changed my mind,” he said. The crowd gasped and started whispering to each other.
“Silence!” the judge said in a very loud voice.
“Nancy Yeats, I have changed your sentence,” he said.
“Changed my sentence, Sir?” I said, trying to be polite so may be he will free me. But I knew he won’t.
“I haven’t finished yet, Nancy,” he said.
“Your sentence has changed into seven years transportation to New South Wales!”
The judge has finalized his verdict and the crowd were making their way home. I was taken to the gaol again. I guess I have to wait ‘till it’s time. The judge smiled at me as I walked out from the Old Bailey. I bowed a courtesy at him as a sign of gratitude, for letting me keep my life.
——————————————–
Chapter 5: On the boat
——————————————–
Days passed. It was the 13th of March 1787. I was taken to a ship that says ‘Lady Penrhyn’ written on the side. The guards put chains around my wrists, legs and neck when I was on the boat. I’ll miss London. I’ll miss the place where my mama once lived. The guard took me to the ship.
I spotted a girl about my age crying at the corner, just like me when I was in the gaol. There were many women, yelling and crying, just like the ones in the gaol. There was much violence too. The girl at the corner looked sad and had given up on hope. The guard gave me a grey blanket, a little one, and the same food they gave me in the gaol, and then left.
I quickly ran to the girl, well…kind of. You see, the ship is starting to sail, and boy! The chains are so annoying. I managed to reach her, and suddenly, she got up and gasped.
“Who are you? What do you want from me?” she said.
“I don’t want anything from you!” I said. “I’m just worried because I saw you crying,” I said calmly.
“Well… go away!” she said. But I didn’t.
“Look. I know you need someone to comfort you, and I volunteer to. I know how it feels, it’s alright,” I said. She calmed down a little and stopped crying.
“I’m Sarah. Sarah Bellamy. What’s your name?”
“Nancy Yeats,” I said.
We chat and spoke to each other, and fortunately we became friends. “I’m going to miss England,” she said.
“I don’t believe it but… I agree with you Sarah,” I said.
The day passed. The sun went down and the moon took over. The other woman in the corner was having a fight with somebody and distracted me.
“Night, Sarah.” But it appeared that she already fallen asleep.
An old woman tried to get my blanket, but I refused and fight back. I lied on the floor and put my blanket on. A rat crawled over my feet and made me jump. But, I managed to fall asleep.
“Sarah! Sarah, wake up! It’s morning already!” I shouted waking Sarah up. She woke up and said, “Nancy, I think I’m going over there to explore this ship.”
“Go on then,” I said.
It was a weird morning. Some women were looking very sick and the buckets were full of-oh yucky stuff, you know.- And some other women were getting diseases already. The ship smelled like a rubbish bin. And, some other women have born babies! Poor them, this must ‘ve been hard for them.
A month passed and I’m getting used to this condition. And Sarah is starting to play games with me too, so I won’t be alone all the time. It is getting hotter and hotter by the time we go soooo far away from England.
The night has come and the storm comes, washing some women, marines, and the people who can’t hang on any longer. But Sarah and I hold on. The storm passed and so was the time.
The month also passed and the ship reached the land. The marines let us go upper deck to let us see the land. The guards and marines said that this is Tennerife, a little island far away from England. I’m starting to love the trip, because, unlike in England, this island is much better than England. A lot more better than England.

BFS & DFS dengan NetworkX di Python

Kemarin kita sudah membahas permasalahan sederhana Greedy algorithm di NetworkX. Sekarang kita akan membahas 2 permasalahan sederhana lain di Teori Graph masih dengan NetworkX, yaitu Breadth First Search (BFS) dan Depth First Search (DFS). O iya, post ini adanya di blog ini, bukannya di blog data science, karena permasalahan yang dibahas agak menjauh dari tema DS/IoT/BD.

Ada cerita yang (menurut saya) menarik dibalik post ini. DFS & BFS biasanya dibahas (setidaknya) di either mata kuliah Matematika Diskrit atau Analisa Algoritma. Either way saya akhir² ini agak "gemes" mahasiswa ga sadar betapa pentingnya materi² yang ia pelajari di kehidupan nyata. Sebenarnya mungkin ndak sepenuhnya salah mereka juga sih, karena ndak hanya pengajar, bahkan bukunya-pun jarang yang menerangkan hal ini. Tapi sekarang jaman internet, mereka bisa dengan mudah mendapatkan informasi ini. Singkat cerita, DFS/BFS ini cukup banyak aplikasinya di dunia nyata, misal saja penentuan rute di GPS atau permasalahan di bidang sistem transportasi. Kemungkinan besar they use modified version of the algorithm, tapi basic/logic-nya masih sama (baca disni atau disini).
Contoh Aplikasi Graph Traversal - Map Route (GPS)
Anyway, di kelas saya sering melempar pertanyaan dengan iming² nilai tambahan di ujian (UTS/UAS). Misal UTS/UAS+10, 20, atau bahkan 30 bergantung kesulitan soal yang saya berikan di kelas. Prinsip saya ujian kan hanya meng-evaluasi pemahaman mahasiswa, kalau di kelas ia sudah mampu menunjukan bahwa ia mengerti materi yang diberikan, maka sebenarnya ujian menjadi tidak terlalu efektif buat mereka. Anyway balik ke laptop, eh maksudnya BFS/DFS, ... pas ngajar ini di kelas saya agak gemes karena mereka kok kurang termotivasi dengan imimng² bonus nilai di ujian di atas. Walhasil saya waktu itu iseng dan mengatakan:

"kalau ada yang bisa aplikasikan DFS atau BFS ini ke NetworkX untuk menemukan Spanning Tree dari Graph dalam 30 menit, maka ndak hanya nilai ujian UTS & UAS-nya yang di tambah, tapi juga saya traktir makan siang di warung Padang, minumnya es jeruk, dan boleh nambah. Ga hanya itu, boleh di kerjakan berkelompok (semua member di traktir & dapat bonus nilai) dan boleh nyontek dari internet (copas)."

Jujur, saat itu agak deg²an juga, bukan hanya karena uang di dompet pas²an, tapi juga karena belum nge-check di internet: "ada ga ya?" ... 😂 ... (Notes, mereka sudah belajar networkX dan aplikasi²nya di pertemuan² sebelumnya). "Untungnya" ndak ada yang bisa .... 😄 ... (#DosennyaJahatGaIkhlas) ... Anyway, saya cukup PD karena saya sering menyayangkan kurikulum perguruan tinggi yang jarang update dari puluhan tahun yang lalu (di banyak universitas dalam & bahkan luar negeri). Hal ini di dukung dengan kenyataan bahwa mereka ndak bisa menemukan aplikasi langsung BFS/DFS ini ke aplikasi yang kekinian. (that!, atau nge-Google-nya kurang cermat ... 😅)

Ah udah ah ... ceritanya kepanjangan ... mari kita bahas DFS/BFS-nya 😊. BFS/DFS sebenarnya merupakan Graph traversal, atau dengan kata lain traversal adalah jalan² di graph melalui edge²nya. namun tentu saja dengan syarat tertentu. Teori "ngasal"-nya mudah sekali:
BFS: "Traverse level yang rendah dan sesuai urutan nodes terlebih dahulu"
DFS: "Keep Traversing sesuai urutan nodes, lalu backtrack kalau mentok"
Kalau mau penjelasan teori lebih lengkap dan formalnya bisa simak disini: BFS & DFS

Sehingga kalau diberikan graph seperti ini:
dengan pemisalan root = "a" dan urutan node sesuai abjad (a,b,c,d,e,f,g,h), maka spanning tree BFS-nya adalah:
Penjelasannya cukup sederhana: dimulai dari root "a" (level 0), maka di level selanjutnya (1) ada nodes b, c, & g. Sesuai level dan urutan maka setelah a terus b, lalu c, kemudian g. Setelah itu ke level 2, ada d & e. Kemudian f di level 3 dan terakhir h di level 4. Sehingga spanning tree-nya seperti di atas.

dan spanning tree DFS-nya adalah:
Dimulai dari user-defined root = "a", kemudian traverse sesuai urutan node: berarti b, kemudian terus maju sesuai urutan node: d, dan seterusnya sampai h. Karena di h mentok, lalu "backtrack" ke f, tapi di f tidak ada lagi edge yang bisa di tambahkan, kemudian backtrack lagi ke e, kemudian terakhir tambahkan g.

Mudah sekali kan? ... Ok, kalau sudah mengerti sekarang coba Agan coba sendiri dulu aplikasi NetworkX-nya. Kalau perlu refresh lagi pengetahuan dari post sebelumnya ini. Agan boleh search ke internet for clues (tapi ga boleh ke blog dan github saya). Coba selesaikan masing-masing (DFS & BFS) dalam waktu <30 menit (total 1 jam). Inputnya graph diatas, outputnya gambar graph spanning tree seperti di atas. If you can please let me know in the comment. Catt: nope, agan ga dapet makan siang gratis ... 😄 ... saya penasaran aja ... 

... Asumsi pembaca lagi ngerjain ....

~

... masih juga berasumsi yang sama ....

~

... Ceritanya masih nungguin ...

~

Ok... mari kita bahas contoh solusinya. Seperti biasa, saya akan berikan code yang tidak/kurang efisien. Saya mengharapkan Agan bisa latihan untuk meng-efisienkan code tersebut. Seperti yang dijelaskan disini, algoritma & program yang efisien sangat penting di Data Science/Big Data.

Code lengkap berikut ini saya letakkan di GitHub saya ini, dan nama filenya "BFS_NetworkX.py" dan "DFS_NetworkX.py" dengan file pendukung "my_NetworkX_lib.py" supaya BFS dan DFS-nya ndak keriting. Ok, berikut penjelasannya:

1. Menyiapkan graph awalnya:

    import networkx as nx
    from my_NetworkX_lib import buildGraph, drawGraph # ini berdasarkan post networkX saya sebelumnya.

    V = ['a', 'b', 'c', 'd' , 'e', 'f', 'g', 'h'] # Untuk memudahkan kita asumsikan urutan di V ini = urutan nodes di soal.
    E = [('a','b'),('a','c'),('a','g'),('a','g'),('b','d'),('b','g'),('c','d'),('c','e'),('d','f'),('e','f'),('e','f'),('f','h'),('g','e')]
    G = buildGraph(V, E=E) # Graph di soal
    root = V[0] # Asumsi root = "a"

   Untuk bagian ini tidak perlu penjelasan, karena sudah dibahas di post sebelumnya. Bedanya hanya sekarang kita tidak punya weight di edges-nya (lebih simple/sederhana).

2. Solusi BFS:

    Levels = [[root]]
    Vtemp = [root]
    # Mulai dengan mencari informasi nodes di setiap level [belum efisien]
    for v in V:
        e = G.edges(v)
        e = [v2 for v1,v2 in e if v2 not in Vtemp]
        if e:
            Levels.append(e)
            Vtemp = Vtemp + e
    # Mulai membangun Spanning Tree-nya
    BFS = buildGraph(V)
    for vertices in Levels:
        for v in vertices:
            e = G.edges(v) # Semua edges yang adjacent ke node v
            for v1, v2 in e:
                BFS.add_edge(v1,v2)
                if len(nx.cycle_basis(BFS,root))>0:
                    BFS.remove_edge(v1,v2)
     
Algoritmanya simple: pertama-tama cari tau dulu ada nodes apa saja di setiap level. Kemudian tambahkan edges ke BFS sesuai dengan level tersebut. Informasinya di simpan dalam variable "Levels", jadi Levels adalah "list of lists" (i.e. Levels = [['a'], ['b','c','g'], ... dst]). Variable "Vtemp" digunakan supaya kita tidak traverse ke level di atasnya. 

That's it!.... Bagian kedua program ini mirip dengan kasus Greedy kemarin. Menambahkan edge ke BFS selama tidak menimbulkan cycle. O iya, ada satu yang baru, yaitu perintah "G.edges(v)" yang akan menghasilkan (v,v2) untuk semua v2 yang adjacent/terhubung ke v. Atau dengan kata lain memberikan informasi nodes mana saja yang terhubung dengan node v.

3. Solusi DFS:

    VDFS = V[:] # a copy of V by values
    DFS = nx.Graph() # empty graph
    v = VDFS[0]; del VDFS[0]
    stack = [root] # untuk backtrack

    while VDFS: # VDFS not empty
        DFS.add_node(v)
        e = G.edges(v)
        nextNode = [v2 for v1,v2 in e if v2 not in DFS.nodes()]
        if nextNode: # Not Empty
            nextNode.sort() # meyakinkan urutannya sesuai urutan node (abjad)
            DFS.add_node(nextNode[0])
            DFS.add_edge(v,nextNode[0])
            v = nextNode[0]
            stack.append(v)
            del VDFS[VDFS.index(v)]
        else: #Backtrack
            v = stack[-1]; del stack[-1]

Bedanya dengan BFS, di DFS ini kita butuh suatu variabel untuk melakukan "BackTrack". Variabel yang saya gunakan di code ini adalah "stack". Saya gunakan variabel VDFS sebagai stopper, bahwa kita sudah men-traverse seluruh node di graph. Hati-hati ... kita tidak bisa menggunakan perintah berikut di python "VDFS=V" karena Python melakukan copy by reference (pointer) dan bukan by values (baca disini). Backtrack dilakukan di baris terakhir dengan menggunakan elemen terakhir dari variabel stack. Di dunia pemrograman biasa disebut sebagai "pop" operation. Sedangkan perintah "stack.append(v)" biasa disebut sebagai operasi "push". 

4. Plot Graph solusinya:

    drawGraph(G, file="GraphAwal.png", labels = True, edge_Label=False, gType = 'spring')
    drawGraph(BFS, file="BFS.png", labels = True, edge_Label=False, gType = 'spring')
    drawGraph(DFS, file="DFS.png", labels = True, edge_Label=False, gType = 'spring')

Graphnya selain di plot, langsung di save ke disk (dalam bentuk PNG)... 😊 ... biar handy. Ini hasilnya:
Graph Awal, BFS, & DFS. Silahkan di cek apakah hasil tersebut isomorfis dengan solusi di atas.
That's it ... mudah kan? ... 😁 ... Kalau di search di Google banyak solusi dari BFS dan DFS ini menggunakan fungsi rekursif. Agan bisa latihan dengan mencari solusi rekursifnya. O iya, hati-hati juga banyak algoritma BFS dan DFS di internet hanya sekedar untuk traversal saja, tapi belum ke spanning tree-nya. Anyway ... semakin banyak baca insya Allah akan semakin puyeng... eh salah, maksud saya semakin jelas ... 😄 ... 

Post selanjutnya kita coba masalah umum lain di Graph, that's it for now. Have a nice weekend Guys ... Cheers...

Depok, 07 Jan 2018

</TES>®

Bebek Gila ….

Hari ini drop banget, flu berat, tapi harus ngajar 4 SKS. Selepas ngajar-pas jam makan siang, tapi kok kayaknya males banget Makan Siang sendirian, jadilah sampe jam pulang kantor jam 16:00 belum makan siang. Hari itu hujan deras 2x, aneh juga sih karena hujan kedua turun ketika mentari cukup terik. Begitu hujan mereda sedikit saya putuskan untuk nekat pulang sambil coba cari makan di sepanjang jalan pulang.

Memang Sudah lama  saya ingin mencoba sebuah warung sederhana kaki 5 bebek goreng yg setiap hari saya lewati ketika PP ke kantor. Eye Catchy sekali promonya “Bebek Gila Lunak, sambal Mantab”…. siapa juga coba yg tidak tertarik membaca kalimat itu… Saat mendekati warung tsb pas banget tiba2 hujan mulai deras lagi. Jadilah “terpaksa” dan “kebetulan” saya makan di warung tersebut sambil berteduh.

   Warungnya di pinggir jalan, untuk ukuran warung kaki 5, ia bahkan dibawah rata-rata. Saya sapa pemilik warung “Sudah siap pak“, “oh iya iya…” jawab si pemilik warung dengan agak ragu-ragu, seorang lelaki separuh baya berkaca mata dan berkaus putih agak lusuh. Tak membutuhkan waktu lama untuk saya mengetahui bahwa ia sebenarnya belum 100% siap. sambil memasang tabung gas, membereskan piring-piring, dll. Tiba-tiba datang seorang anak muda dgn jaket lusuh dan wajah dingin. “50rb pak!!!…“, ucap sang pemuda dengan keangkuhannya. Seiring dgn penolakan-penolakan si pemilik warung yg memang baru buka sehingga blm punya uang, sang pemuda terus memaksa hingga akhirnya dikuraslah laci uang sang pemilik warung yang isinya hanya selembar lima ribuan dan beberapa uang ribuan.
    Penasaran dgn siapa pemuda kurang ajar itu saya tanyakan kepada pemilik warung. Ternyata ia adalah “Bank Keliling” duh kasihan sekali si Bapak, sudah sepi warungnya [biasanya juga kulihat mmg seringnya sepi], baru buka, dah ditagih lagi…ampun dah [dalam hatiku bergumam]. Baru saja mau mempersiapkan hidangan tiba2 datang bapak-bapak lain yg ternyata “Bank keliling #2″…. ya Tuhhaaaannnn… Bapak ini teh hebat bgt ya’ …besar bgt cobaan hidupnya.
    Baru mau goreng dada bebek pesananku anaknya dtg minta makan, maka digoreng barenglah hidangan anak itu dan pesananku, ternyata anaknya makan sepotong leher bebek. lumayanlah,..pikirku dlm hati. Anaknya bisa makan dengan sedikit protein walaupun seadanya. Hidanganpun mulai disuguhkan, sang Pemilik menyendokkan nasi, lalu menyuguhkannya kepadaku. Nampak nasinya bukan dari beras pulen, sepertinya cuma dikasih air agak banyak biar tidak terlalu terlihat “pera”nya. Dari teksturnyapun sepertinya bukan nasi baru atau kalau orang Jawa bilang “nget-ngetan” … :-| Minuman teh yg diberikan juga tidak se-enak teh umumnya di warung kaki 5. .. HHmmm,,,… :-(
    Namun Ku tersenyum ke Sang Bapak :) kututupi kekecewaanku. Tak lama berselang, akhirnya sang “Dada Bebek” selesai digoreng, karena sudah lapar sedari tadi, kumulai menyantap hidangan itu sesegera mungkin walaupun masih agak panas. baru saja mulai makan … @#%^&*()&^%$##$%^&*!!!… bebeknya emang gila,… gila asinnya…terus sambelnya mmg mantab, mantab buanget pedesnya ampun dah……
    Alhamdulilah saat itu saya Flu berat, dan paginya karena dah ga tahan mulai mengkonsumsi antibiotik. Akibatnya lidah tidak terlalu peka, bahkan agak “ba’al/kebal” terhadap rasa. Ku santap hidangan itu dengan senyuman dan semangat agar sang bapak pemilik warung bebek senang. Saat menyantap karena hujan terus turun dgn lebat, jalanan didekat warung itupun mulai tergenang air cukup tinggi. Satu, dua kulihat Pajero Sport, Terios, dan Odessy  melintas dengan tenang dan kencangnya melewati pinggir warung bebek itu, tanpa memikirkan cipratannya dapat mengenai warung. “Duh, ternyata orang kalau sudah nyaman jadi tidak peka lagi ya, pikirku dalam hati“.
    Tak lama Alhamdulillah hidangan itu habis tanpa sisa. Sang bapak nampak senang dan tersenyum puas melihat piring yang bersih itu. Ku tatap wajah sang bapak dalam-dalam… Walaupun tersenyum namun dia tidak dapat menutupi guratan-guratan kesedihan cobaan berat hidup diwajahnya, dan itu tidak luput dari pengamatanku.
    Aku iri dengan kekuatan serta kesabaran hatimu Pak, semoga nanti bebek bapak makin enak dan laris. Didepan warung bapak kelak akan dibangun fakultas paling megah di Provinsi Banten. Di situ juga direncanakan akan dibangun rumah sakit Islam paling besar se-Asia tenggara. Warung bapak akan ramai….Semoga Bapak bisa bertahan sampai saat itu dan hidup bapak berubah menjadi lebih baik.Jika bapak terus bersabar, saya yakin anak Bapak kelak juga akan sukses… [Aamiin].
    Semoga setiap tindak-tanduk dalam keseharian kita senantiasa “terjaga” dalam kebaikan dan kesabaran… Amin.
[TES®, Kamis 050810, 17:30 baru sampe rumah dari makan bebek :D]
# Flu ternyata ada berkahnya juga, bebeknya bisa habis disantap :p
## Sayangnya sekarang [Oktober 2012], tukangnya sudah tdk ada, … mudah”an bukan karena bangkrut, tapi dah punya toko di mall atau buka restaurant dimanaaa gitu  …. aamiin …