Wildtype

Wildtype

Ageng Mufti SH  //  Biological science student, naturalist "in the making", primatology, evolutionary anthropology, behavioral ecology, birdwatching, GIS, and programming enthusiast.

May 21 / 11:27am

Sirko si Anjing dan Serigala Temannya

Saya sedang mencari-cari cerita sejarah traktor dari Ukraina ketika malah menemukan cerita dongeng ini[1]. Begini ceritanya: Sirko adalah anjing yang setia, sangat patuh dan sayang pada tuannya yang sangat baik. Seiring bertambahnya usia, kemampuan Sirko semakin menurun. Banyak kesalahan yang dilakukannya sampai suatu hari Sirko diusir tuannya. Di hutan, Sirko yang sedih bertemu dengan serigala, lalu berteman. Serigala itu lalu membantu Sirko agar bisa kembali diterima mantan Tuannya. Ketika mantan tuan (dan puan) Sirko sedang meladang, serigala menculik anak bayinya. Sirko tiba-tiba muncul, berpura-pura mengejar, berkelahi, kemudian menyelamatkan bayi tuannya. Tuannya senang dan menerima kembali Sirko sebagai anjingnya.

Suatu hari saat musim dingin, keluarga pemilik sirko mengadakan pesta pernikahan. Ada banyak makanan, daging dan vodka. Sirko teringat pada temannya sang serigala. Pada saat musim dingin, tentu makanan susah dicari. Sirko lalu mengajak temannya itu untuk menyelinap ke pesta, dibawah meja. Sirko mengambilkan temannya makanan, dan tentu saja minuman vodka. Serigala bukan manusia, walau hidup di Ukraina, tak biasa minum vodka. Baru sedikit minum, serigala itu sudah mabuk dan ingin bernyanyi. Sirko membujuk temannya agar diam dengan lebih banyak makanan, dan vodka. Akhirnya serigala itu benar-benar mabuk lepas kendali, dan mulai “bernyanyi”. Semua orang takut, histeris dan kaget. Sirko lalu berpura-pura mengejar temannya, temannya pergi dan terhindar dari amukan manusia.

Homo homini lupus, manusia adalah serigala bagi sesamanya, kata orang-orang, dipopulerkan oleh Thomas Hobbes dalam Leviathan[2]. Hobbes bilang, manusia secara alami hidup sendiri dalam kebebasannya, ketika lebih dari satu manusia memiliki kebutuhan yang sama dan tidak bisa membagi, manusia lalu saling menjadi musuh. Secara alami manusia hidup dalam keadaan perang, "such a war as is of every man against every man".

Sirko dan temannya membuktikan bahwa Hobbes salah. Sirko setia menghamba pada tuannya sehingga tidak mampu hidup bebas. Serigala membantu sirko agar diterima kembali oleh tuannya. Sirko tidak lupa terimakasih dan memberi makanan pada serigala. Franz de waal juga tidak setuju dengan pendapat Hobbes itu. Katanya: "Pepatah itu gagal bertindak adil terhadap jenis anjing, yang merupakan hewan yang paling suka berteman dan bekerja sama di planet ini"[3].

Seorang senior di sekolah pernah mengomentari kaos saya yang bergambar serigala. Kenapa harus serigala, kenapa yang dijadikan panutan pramuka indonesia adalah serigala (impeesa)? Serigala adalah hewan yang hidup berkelompok, saling bekerja sama. Kenapa bukan Ajag yang spesies lokal? Itu soal lain-lain, yang jelas ajag, serigala, hyena, dingo, atau hewan keluarga anjing lainnya memang hidup berkelompok dan selalu bekerja sama.

Mungkin memang seharusnya manusia seperti keluarga anjing, yang suka berteman dan bekerja sama. Atau mungkin yang dimaksud Hobbes (dan orang-orang lain) dengan "manusia adalah serigala bagi sesamanya" adalah interaksi serigala-manusia, bukan interaksi serigala-serigala yang dimaksud oleh Franz de waal.. Interaksi serigala - manusia adalah saling menakuti, seperti dalam cerita sirko dimana orang-orang takut pada serigala yang sebenarnya hanya "ikut makan minum vodka dan bernyanyi".

 

  1. Saya ceritakan kembali dari http://www.ripiu.com/article/read/sirko.
  2. Franz de waal, Primat dan Filsuf, Merunut Asal Usul Kesadaran Moral (Yogyakrta: Kanisius, 2011), Bagian I halaman 24.

 

Filed under  //  Anjing   Canidae   Frans de Waal   Serigala   Thomas Hobbes  
May 13 / 9:16am

Implementasi Formula Haversin dalam R

Di GPS yang saya pakai, saya lebih senang melihat koordinat posisi dalam format easting & northing UTM. Karena satuan posisinya dalam meter, lebih mudah membayangkan jarak & posisi antar titik. Sayangnya, file gpx yang menyimpan data tracklog & waypoint itu mencatat posisi selalu dalam format derajat lintang dan bujur. Untuk mendapatkan jarak 2 titik yang diketahui koordinat lintang bujurnya, bisa menggunakan formula haversin.

Asal usul rumusnya, tidak perlu dibahas, disini saya mengimplementasikan dalam bahasa R. Rumus haversin tadi membutuhkan posisi sudut dalam radian, karena posisi lintang bujur itu dalam derajat, maka harus dikonversi dulu. Saya tidak berhasil menemukan fungsi built-in apa dalam R yang bisa menkonversi derajat menjadi radian, tidak sedang ada internet juga, jadi saya buat sendiri saja seperti ini:

rad <- function(deg) 2*pi*(deg/360)

Hasil perhitungannya dalam kilometer. Radius yang saya gunakan adalah radius bumi di ekuator menurut WGS84. Kalau ingin hasilnya dalam satuan meter, radius bumi tinggal diubah dalam satuan meter (6378137 meter). Jadi implementasinya seperti ini:

Sebagai contoh, saya mengukur jarak antara kota Bandung dengan lokasi bekas sarang babi yang saya temukan di lokasi TA saya, langsung saja skrinshutnya seperti di bawah ini (kalau gambarnya gak muncul, yowis nasib). Yang atas dalam kilometer(default), yang bawahnya dalam meter.


skrinsut

Silahkan dicaci & dikoreksi kalau ada kesalahan.

 

Filed under  //  Formula Haversine   R   gps  
May 10 / 8:27am

xkcd: Ten Thousand

Media_httpimgsxkcdcom_joitb

Saya jadi ingat pertanyaan saya ke kakak saya entah berapa tahun lalu, kenapa sih mentoring & taklim yang dibahas itu-itu terus? Karena banyak yang belum tahu, setiap hari selalu ada orang yang baru tahu.. Tuan Randall Munro ini punya ide yang keren juga untuk menyambut "orang yang baru tau".

May 10 / 7:12am

Skumbeg [L|X|K]ubuntu

Ini postingan marah-marah saja. Saya gak ngerti, kenapa ubuntu dan turunannya itu selalu sok tau dalam proses instalasi. Kemarin saya menginstall Lubuntu, saya memilih satu partisi tidak terpakai untuk dihapus dan diinstall lubuntu itu disana. Tanpa pertanyaan apapun, secara sepihak format filesistem ditentukan,ext4, tanpa menanyakan berapa ukuran partisi yang diinginkan, tiba-tiba saja sistem instalasi membuat satu partisi ext4 untuk root dan partisi swap berukuran 512mb. Lalu secara sepihak sistem instalasi mengubah jam bios, lalu menginstall grub. Tanpa menanyakan apapun, tanpa peringatan. Tiba-tiba saja beres, suruh reboot. Bah.

Selama ini saya menggunakan Slackware. Tidak pernah menemui masalah. Kalau saya ingin atau butuh mengkonfigurasi, akan ada pertanyaan apakah saya akan melakukan ini, melakukan itu, dll. Saat instalasi misalnya, akan ada opsi bootloader apa yang akan diinstall, bagaimana isi file konfigurasinya, apakah ada opsi khusus, apakah akan menambah sistem operasi lain, dan apakah akan menginstall bootloader saat itu juga. Saya lebih cocok dengan cara ini.

Filed under  //  protes   lubuntu  
May 5 / 8:08pm

Bagaimana terouskan.py Meload File Tulisan?

TL;DR Pisahkan dengan split('\n\n'), ubah string yaml menjadi dictionary dengan yaml.load, parse format markdown dengan markdown.markdown.

Saya membuat script python untuk mengirim tulisan ke posterous melalui posterous api. Script ini akan membaca file yang berisi data tulisan (judul, waktu, tag) dalam format yaml dan isi tulisan dalam format markdown. Format file tulisan seperti ini:

Title: Judul Tulisan
Date: 06/05/2012
Tags: percobaan, tag2, tag3

Isi postingan disini, format pake markdown

Antara metadata (Title, Date, dll) dan isi tulisan, dipisahkan dengan fungsi split.

>>> metadata, isiTulisan = isiFile.split('\n\n',1)

Metadata tadi formatnya yaml, diubah menjadi dictionary dengan fungsi dari modul yaml.

>>> metadata = yaml.load(metadata)
>>> metadata
{'Date': '06/05/2012', 'Title': 'Judul Tulisan', 'Tags': 'percobaan, tag2, tag3'}

Konten tulisan diubah dari format markdown menjadi HTML dengan modul markdown.

>>> isiTulisan = markdown.markdown(isiTulisan)

Script lengkap dari perintah-perintah di atas tadi jadi seperti ini:

import yaml
import markdown

isiFile = open(namafile,'r').read()
metadata,isiTulisan = isiFile.split('\n\n',1)
metadata = yaml.load(metadata)
isiTulisan = markdown.markdown(isiTulisan)

Isi script terouskan.py yang lengkap nanti saya publish kalau sudah rapi saja. Hehehe. Silakan dicaci, terutama style koding saya.

Filed under  //  markdown   python   terouskan.py   yaml  
Mar 14 / 3:52pm

Wow, dibeli twitter, terus apa nih posterous?

Yah, seperti diberitakan di semua tempat, posterous diakuisisi oleh twitter. Saya sih sebagai user (yang nggak aktif-aktif amat) cuma mikir, semoga nasibnya nggak kaya delicious, yang dibeli sama yahoo terus entah gimana nasibnya, tau-tau aja username saya udah gak ada.

May 14 / 7:17am

Project Euler Problem 34, Factorion

Pendahuluannya 145, digitnya 1,4,5. Nah 1!+4!+5! = 1+24+120 = 145. Rumusan masalahnya, Berapa jumlah semua bilangan yang nilainya sama dengan jumlah faktorial digitnya, seperti 145 itu?

Sebenernya ini apa ya sebutannya? Brute force juga lah. Karena digit itu antara 0 sampai 9, jadi kira-kira maksimum bilangannya kurang dari 9 faktorial, 362880. Pembuktiannya, nggak ngerti saya. Itu sebenernya ngasal aja, hehe, kebetulan bener.

Jadi stepnya dari 362880 sampai 1, dihitung tiap bilangan apakah sama dengan jumlah faktorial digitnya. Tentu, sebelumnya dibikin dulu nilai faktorial dari 0 sampai 9. Sebenernya agak mubazir juga cara ini, karena hanya 2 angka saja, 145 tadi, dan angka sekitar 40ribuan (hitunglah sendiri, biar seru). Angka 1 dan 2 tidak masuk hitungan, karena bukan hasil penjumlahan faktorial digit.

Belakangan saya baru tau, bilangan-bilangan ini disebut Factorion.

May 14 / 6:49am

Project Euler Problem 29

Problem 29 ini, lagi-lagi bisa selesai dengan jurus asal-paksa, tentu saja dengan bantuan ular Python. Pertanyaannya, ada berapa nilai ab yang berbeda untuk 2<=a<=100 dan 2<=b<=100? Kemungkinan terbesar cuma 99*99 atau 9801 biji, sedikit itu. Tapi ya jumlahnya nggak sebanyak itu, karena misalnya saja 2^4 sama 4^2 kan ya..

Step yang saya kerjakan:

  1. Buat list kosong, list ini untuk menyimpan hasil hitungan ab.
  2. Hitung ab untuk a 2 sampai 100, masing-masing b dari 2 sampai 100 juga.
  3. Tiap hasil ab tadi, dicek apakah sudah ada di dalam list, kalau belum, masukkan ke dalam list.
  4. Setelah beres, hitung jumlah anggota list.
  5. Beres.
May 14 / 6:33am

Project Euler Problem 53

Problem ini ternyata bisa diselesaikan pake jurus brutal alias bruteforce. Inti persoalannya, mencari jumlah nCr yang nilainya lebih besar dari sejuta untuk 1<=n<=100. Yah kita tau kalau nCr itu maksudnya kombinasi r elemen dari set yang jumlahnya n. Di soalnya juga ada rumus carinya. Karena n antara 1 sampai 100 dan r lebih kecil samadengan 100, jadi cuma ada 10000 kemungkinan kombinasi. Pake python, sedikit itu. Python juga bisa menghitung angka besar tanpa perlu kode aneh-aneh, jadi, ya itu tadi, bisa diselesaikan dengan bruteforce.

Cara saya, bikin dulu list faktorial 1 sampai 100. Pake cara apa itu namanya, dynamic programming mungkin, gak ngertilah. Tinggal dikali-kali saja listnya, jadi. Step berikutnya, iterasi n 1 sampai 100, iterasi r 1 sampai n, hitung nCr. Tiap nilainya lebih dari 1000000, dihitung. Beres.

Ah, kebanyakan bikin laporan, jadi aneh gini nulis blog.