Thursday, March 30, 2006

Searching for "Finding Clique" material

About two days, I have search for some materials that can support me for finding clique based on the activities and relationship between users from email inbox and sent box.
Here is some links that I hope can help to give me undernstanding about finding clique algorithm from a graph:

The Algorihtm Design Manual
http://www2.toki.or.id/book/AlgDesignManual/BOOK/BOOK/BOOK.HTM

Clique (a short description from Wikipedia)
http://en.wikipedia.org/wiki/Clique_(graph_theory)

An Algorithm for Finding a Maximum Clique in a Graph
http://citeseer.ifi.unizh.ch/wood97algorithm.html

Finding a maxium clique in an arbitrary graph
http://citeseer.ifi.unizh.ch/context/30329/0

The idea of this work is based on EMT Research from University of Columbia. This research is very great for determine viral propagation based on user behaviour. You can visit and take a look for more detail at http://www1.cs.columbia.edu/ids/emt/.

Tuesday, March 28, 2006

Router Installation for RedHat 9

This is about my little experience when I was setup our faculty's computer as router with RedHat 9 (Linux 2.4.20-8/gcc 3.2.2). This work was done at March 2004. Why I want to write this old thing at here? I want to make a little documention about my 'old' experience so I can always read it again and remember what I have done. :D

The specification of the computer is Intel Pentium 4 2,6 GHz, RAM 1 GByte, HD 40 GByte. Here are some services that already run well on our faculty:
  • as router that connected between two networks, ie. engineering faculty network (192.168.3.0/24) and university network (192.168.1.0/24)
  • as firewall (I use iptables and masquerading). I was configured this computer to deny all of ICMP requests from outside 192.168.3.0

  • as file sharing with Samba

  • as many services provider MySQL, PostgreSQL, FTP, Apache, etc.



Here are the wins server and wins proxy configuration. With this configuration, from 192.168.3.0/24 network can explore all of microsoft file sharing services in 192.168.1.0/24 network.
  • in the /etc/samba/smb.conf file, at global section I have configured like this:
[global]
workgroup = teknik
server string = samba teknikrh9 server
hosts allow = 192.168.1. 192.168.3. 127.
printcap name = /etc/printcap
load printers = yes
printing = cups
log file = /var/log/samba/%m.log
max log size = 1000
lanman auth = no
netbios name = teknikrh9
encrypt passwords = yes
unix password sync = Yes
passwd program = /usr/bin/passwd %u
socket options = IPTOS_LOWDELAY TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
interfaces = 192.168.1.37/24 192.168.3.1/24
local master = no
security = user
syslog only = no
syslog = 0
name resolve order = lmhosts host wins bcast
time server = yes
os level = 34
wins support = yes
guest account = nobody
invalid users = root
username map = /etc/samba/smbusers
dns proxy = no
preserve case = yes
short preserve case = yes

The important parameter is 'wins support' that enable SAMBA can ack as WINS SERVER. We have tested that configuration in our network. Here are some steps that we have tried:
  1. create a file and save as as lmhost and place it at windows or WINNT directory. Here are the sample:
    192.168.3.1 teknikrh9
    192.168.1.224 xxxxxx (<- nama komputer yang akan diakses)
  2. then right click My Network Place icon at desktop, choose Properties menu
  3. right click Local Area Connection icon and choose Properties menu
  4. click Internet Protocol (TCP/IP) item and then click Properties button
  5. windows will show you a TCP/IP Properties dialog. Click Advanced... button
  6. click WINS tab, then click Add button to add WINS server
  7. enter the IP address of computer router (RH9), ie. 192.168.3.1 or 192.168.1.37
  8. then click Add button
  9. please ensure that "Enable LMHOSTS lookup" checkbox is active
  10. click "Import LMHOSTS" button
  11. choose the lmhost file from windows or WINNT directory
  12. please check for "Enable NetBIOS over TCP/IP" checkbox
  13. then click OK button, OK button, OK button... :D
  14. try to search a computer that you have write it at lmhost file

For Firewall setting, here are some configuration (iptable rules) that I have implemented :
  • /etc/sysctl.conf
    change the value of parameter below with 1
    net.ipv4.ip_forward = 1

  • Add some iptables command at /etc/init.d/network file :
    # ini untuk mendefinisikan masquerading forwading dari internet ke 192.168.1.0/24
    iptables -A POSTROUTING -j MASQUERADE -t nat -s 192.168.3.0/24 -o eth0

    # khusus untuk port 20 (FTP control) di definisikan untuk diterima
    iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT

    iptables -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT

    # modul kernel ini dipanggil untuk menangani forwarding dari port data FTP
    /sbin/insmod ip_conntrack_ftp
    /sbin/insmod ip_nat_ftp

Monday, March 27, 2006

Hasil sementara email mining

Satu minggu saya off dari menulis blog ini, karena lagi di Bandung. Selama seminggu tersebut, saya akhirnya dapat merangkum beberapa hasil pekerjaan yang dapat saya selesaikan. Berikut beberapa catatan tentang penelitian tentang Email Mining saya:

  1. Untuk 'pembersihan' email yang sudah dilakukan:
    • menerapkan stop word list
    • menerapkan stemming baik indonesia maupun inggris
    • membuang header dari suatu original message
    • body html dikonversi ke text dengan menggunakan links
    • membuang attachment dari MAILER-DAEMON, karena terlalu besar tidak sesuai dengan main bodynya
    • membuang signature
    • membuang bagian yang dibuat oleh PGP

  2. untuk ekstraksi informasi yang sudah diterapkan:
    • mengambil informasi URI, baik URL maupun email
    • mengambil informasi tanggal dan jam
    • mengambil informasi nomor telepon

  3. untuk feature selection, saya menggunakan stop word list dan stemming, baik untuk bahasa inggris maupun bahasa indonesia

  4. untuk searching, sudah diterapkan dengan menerapkan algoritma ranking dimana akan dihitung berdasar bobot (TF/IDF) dari masing-masing kata yang sesuai dengan yang dicari.

  5. sudah dicoba untuk menerapkan modul Mail::Thread untuk dapat melihat keterkaitan antar email berdasar referensinya (References, In-Reply-to, message-id)

  6. menstrukturkan informasi header email selengkap mungkin:
    • mencatat field From (name dan email addrs), Subject, message-id, body, id bahasa
    • mencatat informasi header yang menyangkut mailing list
    • mencatat header received
    • menyimpan attachment
Perubahan pada modul yang tersedia:
Pada modul Mail::Thread (/usr/lib/perl5/site_perl/5.8.5/Mail/Thread.pm) ada penambahan baris perintah agar dapat tetap running, yaitu pada fungsi _msgid()

sub _msgid {
my ($class, $msg) = @_;
my $id= $msg->isa("Mail::Message") ? $msg->messageId :
$class->_get_hdr($msg, "Message-ID");
$id = $class->_get_hdr($msg, "X-UIDL") if (!$id); ## <-- tambahan die "attempt to thread message with no id" unless $id; chomp $id; $id =~ s/^<([^>]+)>.*/$1/; # We expect this not to have <>s
return $id;
}

Saturday, March 18, 2006

Instalasi Mail::Miner

Hari ini saya tidak banyak melakukan percobaan, karena tugas di kantor lagi banyak juga. Tapi akhirnya saya berhasil install modul Mail::Miner yang merupakan class dalam perl untuk dapat menambang data-data tertentu dari kumpulan suatu email.
Ada modul penting yang dapat saya pelajari untuk hari berikutnya, yaitu modul Date::PeriodeParser dan Mail::Miner::Recogniser yang dapat mencari informasi tentang address, date, dan phone. Sepertinya saya harus modifikasi beberapa modul pengenalan dari Mail::Miner tersebut untuk dapat mengenal informasi yang sama namun dalam bahasa Indonesia.

Demikian aktifitas saya hari ini.

Friday, March 17, 2006

Pemakaian modul Mail::Thread

Hari ini saya mencoba menggunakan module Mail::Thread sebagai salah satu proses ekstraksi informasi terhadap kumpulan email untuk dapat menunjukkan rentetan dan hubungan antara satu email dengan email lain sehingga dapat diketahui mana parent dan mana childnya.

Yang menjadi kesulitan pada saat penerapan modul ini adalah pembuatan array yang berisi referensi objek yang diturunkan dari Email::Abstract, padahal untuk program saya menggunakan modul Mail::MboxParser yang menghasilkan referensi objek Mail::MboxParser::Mail dan objek ini tidak diturunkan dari Email::Abstract.
Setelah mencari-cari, akhirnya ada artikel yang sangat membantu saya, yaitu The Evolution of Perl Email Handling yang ditulis oleh Simon Cozens.
Dari tulisan tersebut, kita dapat menggunakan class Mail::Internet yang juga turunan dari class Email::Abstract dengan perintah berikut :

my $obj = Mail::Internet->new( [ split /\n/, $msg->as_string ] );

dimana $msg merupakan objek sebuah email dari class Mail::MboxParser::Mail, yang dapat diperoleh dengan memanggil method $mb->next_message, dimana $mb merupakan objek dari class Mail::MboxParser:

$mb = Mail::MboxParser->new($mymailbox,
decode => 'ALL',
newline => 'AUTO',
parseropts => $parseropts);

Dari setiap objek Mail::Internet, kita tampung dalam sebuah array:

@mails = (@mails, $obj);

Yang mungkin akan jadi masalah adalah, pembentukan array tersebut jelas akan memakan ruang penyimpanan utama (memori) yang cukup besar. Saya belum menguji untuk jumlah email yang sampai jutaan, namun saya harap cara ini dapat ditangani oleh lingkungan Perl, walaupun mungkin lambat.

Dengan mengikuti contoh dari dokumentasi Mail::Thread, saya tinggal menerapkan program berikut (untuk sekedar debugging) :

my $threader = new Mail::Thread (@mails);
$threader->thread;
dump_em($_,0) for $threader->rootset;

...

sub dump_em {
my ($self, $level) = @_;
print ' \\-> ' x $level;
if ($self->message) {
print $self->message->head->get("Subject") , "\n";
} else {
print "[ Message $self not available ]\n";
}
dump_em($self->child, $level+1) if $self->child;
dump_em($self->next, $level) if $self->next;
}


Demikian hasil percobaan saya hari ini.

Makasih.

Thursday, March 16, 2006

Perkenalan

Salam kenal,


Nama lengkap saya adalah Budi Susanto, yang juga seorang laki-laki tulen terlahir tanggal 11 Mei 1973 di sebuah kota kecil di Jawa Tengah, tepatnya kota Blora. Kota Blora jarang dikenal orang, kecuali Cepu, sebagai salah satu kecamatannya yang menurut Pertamina sebagai penghasil minyak. Sebagai seorang anak sulung, seperti tradisi-tradisi jawa terdahulu, beban keluarga adalah menjadi tanggung jawab saya. Untuk itu, setelah lulus SMA, dimulailah perjalan hidup yang menuntut lebih dewasa. Dari titik inilah, tahun 1991, saya memberanikan diri untuk pergi ke Jogjakarta untuk menggali ilmu lebih lanjut di salah satu perguruan tinggi swasta.

Modal yang saya miliki hanyalah tekad. Walaupun dengan program pengencangan ikat pinggang yang luar biasa ketat, saya berhasil lulus dengan sukses tahun 1997. Wah cukup lama juga masa belajarnya. Harap maklum, saya harus sambil bekerja untuk tetap dapat bertahan sekolah dan hidup :). Awal tahun 1998, saya berhasil mendapat pekerjaan tetap sebagai pengajar di Universitas Kristen Duta Wacana (UKDW), salah satu perguruan tinggi swasta di Jogjakarta juga, hingga akhirnya pertengahan tahun 2004 yang lalu, saya dapat kuliah kembali di Institut Teknologi Bandung, dalam rangka menempuh program Magister Teknologi Informasi.
Saat ini (sampai Maret 2006), saya masih harus menyelesaikan tesis saya dibawah bimbingan pak Budi Rahardjo dengan topik "Email classification: a study of email (data) mining". Semoga Mei 2006 ini dapat selesai.

Demikian kisah saya :) Info ini masih perlu diperbaharui lagi...

Salam,



Budi Susanto