Run Level Ubuntu

Run Level Ubuntu
This tutorial will be as short and sweet (hopefully) as the one on Changing Graphical Login to Text Based. Those who are using Linux regularly would have definitely come across the system runlevels and all the cryptic looking boot-up messages associated with different runlevel. Here's a short description of RunLevels from Linux Man Pages.


      A  runlevel is a software configuration of the system which allows only
      a selected group of processes to exist.  The processes spawned by  init
      for each of these runlevels are defined in the /etc/inittab file.  Init
      can be in one of eight runlevels: 0-6 and S  or  s.  The  runlevel  is
      changed  by having a privileged user run telinit, which sends appropri-
      ate signals to init, telling it which runlevel to change to.

      Runlevels 0, 1, and 6 are reserved. Runlevel 0 is used to halt the sys-
      tem, runlevel 6 is used to reboot the system, and runlevel 1 is used to
      get the system down into single user mode. Runlevel  S  is  not  really
      meant  to  be used directly, but more for the scripts that are executed
      when entering runlevel 1. For more information on this,  see  the  man-
      pages for shutdown(8) and inittab(5).

      Runlevels  7-9  are  also  valid, though not really documented. This is
      because "traditional" Unix variants don't use  them.  In  case  you're
      curious,  runlevels  S and s are in fact the same.  Internally they are
      aliases for the same runlevel.

RunLevels, thus, are a method of grouping up certain system processes so that they are able to run and peacefully coexist together (probably chipping in for a common goal). So how do you go about finding WHICH process is running in WHAT runlevel ? Of course, you can go for one of the new runlevel/process viewing utilities found in the System Tools folder under the X-Windows Start Menu. But that again, is a slow and cumbersome process - as the real power of using linux can be achieved only through the command line console. So we're going to do it the poweruser way, and believe me, it's NOT at all as scary as it sounds. In fact, this time I found out - it's not scary AT ALL and far more simpler than any of the other system configuration tasks of linux. So without further delay, lets get down and do it Hands-On :P

We are going to use this utility named chkconfig - as you can guess, it expands to Check Configuration. But it doesn't just checks your system configuration - but is able to modify it to a certain extent too. The linux man pages describe it as:


      chkconfig  -  updates  and queries runlevel information for system ser-

      chkconfig --list [name]
      chkconfig --add name
      chkconfig --del name
      chkconfig name
      chkconfig name

Chkconfig - in contrast to the other linux commands doesn't boast a huge list of options and parameters to work with. We'll start of with it's simplest form, using it to get a list of the processes that the system starts during bootup and the runlevels associated with them. In the console, just go ahead and type:
shell> chkconfig --list

The output you get is somewhat in the following format:


radvd          0:off  1:off  2:off  3:off  4:off  5:off  6:off
irqbalance    0:off  1:off  2:off  3:on    4:on    5:on    6:off
mysql          0:off  1:off  2:off  3:on    4:on    5:on    6:off
syslog          0:off  1:off  2:on    3:on    4:on    5:on    6:off
httpd            0:off  1:off  2:off  3:on    4:on    5:on    6:off
network        0:off  1:off  2:on    3:on    4:on    5:on    6:off
sendmail      0:off  1:off  2:off  3:off  4:off  5:off  6:off
psacct          0:off  1:off  2:off  3:on    4:off  5:off  6:off
irda              0:off  1:off  2:off  3:off  4:off  5:off  6:off
pcmcia        0:off  1:off  2:off  3:off  4:off  5:off  6:off
isdn              0:off  1:off  2:off  3:off  4:off  5:off  6:off
dhcpd          0:off  1:off  2:off  3:off  4:off  5:off  6:off
vsftpd          0:off  1:off  2:off  3:on    4:on    5:on    6:off
mailman        0:off  1:off  2:off  3:off  4:off  5:off  6:off

See you if can spot a couple of the more common processes like the Apache Server (httpd), FTP Server (vsftpd), Dynamic Host Configuration Protocol Server (dhcpd) etc... You'll notice most of them have 0 through 6, i.e. Seven runlevels associated with them - and most of these processes except syslog - the System Log Generator, doesn't start running before runlevel 3. In fact runlevel 0, 1 & 2 take place right at the beginning of the system booting stage - and very few processes are needed to operate here except for the Core System/Kernel Processes. Those are the ones that load first and then allow you to run services of your choice.

So how do we set a process to run at specific runlevels ? Once again, we take a little help of our friend "chkconfig". But first, lets pick a process from the above list. Notice the THIRD process from top in the list - it's mysql - the MySQL Server Process. It's set to run at runlevels 3, 4 & 5 - as shown by the 3:on 4:on 5:on statement. Just for the heck of it, I'm going to disable it altogether and stop it from running at any of the levels. Here's what you do:
shell> chkconfig --level 345 mysql off

I don't think I need to explain much. The "--level 345 mysql off" tells chkconfig to modify the entries for MySQL on those specific runlevels (3, 4 & 5) and set all of them to OFF. As you can see, the affected runlevels are put side-by-side together to form a number and passed to chkconfig. Similarly, if you wanted it to run only on Level 2 & 4 and be OFF on all the rest, you'd execute the command above first and then follow it up by:
shell> chkconfig --level 24 mysql on

Feel free to try your own combination of runlevels to suit your needs. Right, lets use chkconfig once more and cross-check the results.. So we run, chkconfig --list once again, and this time the result should be somewhat like:


mysql          0:off  1:off  2:on    3:off    4:on    5:off    6:off

We're done for today.. But we missed out on one very important fact - What is the necessity of changing the runlevels for different system processes ? Well, that is a topic that cannot be covered in the span of one tutorial - so we'll come back to it pretty soon, maybe in a series of short tutorials.

All the best :P

Block Facebook diLayer7 & schedule

Block Facebook diLayer7 & schedule

Artikel berikut berisi informasi bagaimana memblok akses Facebook dengan layer7 Winbox. Mengapa layer7? Admin jaringan kami sebelumnya pernah menerapkan blok akses Facebook dengan cara drop by content pada Firewall. Hasilnya memang berhasil diblok, namun beberapa website (seperti forum cpanel dan website lain yang mengandung konten Facebook) ikut terblok. Setelah dicoba menerapkan rule blok akses Facebook dengan layer7, hasilnya sesuai dengan harapan. Akses ke Facebook berhasil terblok, namun tidak ikut berimbas website lain.

Pertama buat Buat rgxp di layer 7, yaitu sebagai berikut : (facebook)
contoh yang lain (twitter) (youtube)
^.+(youtube|tube|mivo).*$ (streaming)
^.*get.+\.(asf|mov|wmv|mpg|mpeg|mkv|avi|flv|wav|rm|mp3|mp4|ram |rmvb|dat|daa|iso|nrg|bin|vcd|mp2|3gp|mpe|qt|raw|wma|0[0-9][0-9]).*$ (content)
^.+(game|poker|viwawa).*$ (game)
^.+(*$ (
^.+(porn|xxx|sex).*$ (porn)
^.+(facebook|twitter).*$ (social)
add name=facebook
Kedua, membuat rule di firewall filter. Dalam hal ini saya ingin memblokir situs Facebook yang menggunakan port HTTP (80), sehingga selain port tersebut masih diijinkan. Tujuannya agar pengguna masih dapat menerima update status facebook melalui email. Untuk mensettingnya ketikkan perintah berikut:
add chain=forward  layer7-protocol=Facebook dst-address-list=staff action=drop comment=”Blockir Akses Facebook”
Cara dibawah digunakan jika langsung block dari filter rule tapi kelemahannya jika ada content facebok akan langsung di blok. Perbedaannya jika menggunakan layer 7 karena layer 7 berada pada layer yang paling atas jadi semua alamat dari facebook akan terblock.
/add chain=forward action=drop protocol=tcp src-address= dst-port=80 content=”facebook” comment=”Blockir Akses Facebook”
Ketiga, supaya waktu yang berjalan di router sesuai dengan waktu lokasi setempat, maka kita perlu mengatur agar clock di MikroTik mengacu pada NTP Server. Jika kita memiliki NTP Server sendiri, maka kita tinggal mengarahkan MikroTik ke NTP Server tersebut, namun jika kita tidak memiliki NTP Server, maka tidak perlu khawatir karena banyak NTP Server di luar yang bisa kita gunakan sebagai acuan. Beberapa diantaranya adalah NTP Server milik LIPI (Lembaga Ilmu Pengetahuan Indonesia) dengan URL: ( dan NTP Pool Project dengan salah satu URLnya: ( Untuk mensettingnya di MikroTik, ketikkan perintah berikut :
/system ntp client set primary-ntp= secondary-ntp= \ mode=unicast enabled=yes;
Keempat, membuat script untuk mengaktifkan firewall tersebut selama jam kerja dan mematikannya pada jam istirahat dan diluar jam kerja. Disini saya membuat 3 script, yaitu script untuk mengaktifkan  (enable) firewall, script untuk mematikan (disable) firewall serta script untuk dieksekusi pada hari libur (Sabtu-Minggu) dan hari kerja. Berikut ini scriptnya :
Script untuk mematikan (disable) firewall
/system script add name=”fb-allow” policy=read,write,policy,test,sniff source={/ip firewall filter set [/ip firewall filter find content="facebook"] disabled=yes}
Script untuk mengaktifkan (enable) firewall :
/system script add name=”fb-deny” policy=read,write,policy,test,sniff source={/ip firewall filter set [/ip firewall filter find content="facebook"] disabled=no}
Script untuk disable firewall di hari libur dan enable di hari kerja :
/system script add name=”fb-holiday” policy=write,read,policy,test,sniff source={:if ([/system scheduler get [/system scheduler find on-event="fb-deny"] disabled] = true) do [/system scheduler set [/system scheduler find on-event="fb-deny"] disabled=no] else [/system scheduler set [/system scheduler find on-event="fb-deny"] disabled=yes]}
Kelima, membuat schedule untuk menentukan kapan firewall tersebut akan diaktifkan atau dinon-aktifkan. Disini saya membuat 6 scheduler berdasarkan jam kerja dan hari kerja, yaitu jam 08:00, jam 12:00, jam 13:00, jam 17:00, hari sabtu-minggu, dan hari senin. Berikut ini scriptnya :
Schedule untuk mengaktifkan (enable) firewall pada jam kerja (08:00) :
/system scheduler add name=”fb-08:00″ start-date=jan/01/1970 start-time=08:00:00 interval=1d on-event=”fb-deny”
Schedule untuk mematikan (disable) firewall pada jam istirahat (12:00) :
/system scheduler add name=”fb-12:00″ start-date=jan/01/1970 start-time=12:00:00 interval=1d on-event=”fb-allow”
Schedule untuk mengaktifkan kembali (enable) firewall pada jam kerja (13:00) :
/system scheduler add name=”fb-13:00″ start-date=jan/01/1970 start-time=13:00:00 interval=1d on-event=”fb-deny”
Schedule untuk mematikan (disable) firewall di luar jam kerja ke atas ( > 17:00) :
/system scheduler add name=”fb-17:00″ start-date=jan/01/1970 start-time=17:00:00 interval=1d on-event=”fb-allow”
Schedule untuk mematikan (disable) firewall di hari libur (Sabtu-Minggu) :
/system scheduler add name=”fb-sabtu-minggu” start-date=aug/01/2009 start-time=00:00:00 interval=7d on-event=”fb-holiday”
Schedule untuk mengaktifkan kembali (enable) firewall di hari kerja (Senin) :
/system scheduler add name=”fb-senin” start-date=aug/03/2009 start-time=00:00:00 interval=7d on-event=”fb-holiday”
selamat mencoba

Postfix - Email Add On Terminal

Postfix - Email Add On Terminal
  1. Open the Terminal.
  2. Type "sudo useradd -m -s /bin/bash NAME" (without quotes). Replace "NAME" with the name of the user you want to create
  3. Type "sudo passwd NAME" using the same details as you just created. This user will now be added as a recipient in the "@localhost" address.

Tips Lupa Password Mikrotik


Lupa Password Mikrotik bukan masalah lagi, sekarang sudah ada caranya tanpa harus install ulang, tapi mungkin menurut saya tidak semudah pada linux, kalo lupa password root/ admin-nya.

Cara 1 

Langkah – langkahnya seperti dibawah :
Boot menggunakan Live-CD, mount disk yang digunakan untuk mikrotik dan siapkan juga flasdik untuk menyimpan file yang dibutuhkan.
#mount /dev/hda1 /mnt
#mount /dev/sdb1 /media
#cp  /mnt/nova/store/ /media/    ( untuk mikrotik versi terbaru )
#cp  /mnt/rw/store/ /media/       ( untuk mikrotik versi Lama )

setelah file-nya tercopy selanjutnya ada aplikasi khusus yang digunakan untuk membaca isi file user.dat tapi harus pada os linux yang core / based-nya Debian, sebelum menginstall aplikasi yang dibutuhkan terlebih dahulu ada aplikasi pendukung yang harus tersedia pada os linux-nya.
#apt-get install libssl-dev
#cd /usr/local/src/
#tar -xvjf mtpass-0.5.tar.bz2

setelah di extract ada yang perlu ditambahkan pada file mtpass.cpp sebelum di compile, tamba #include lalu simpan kembali
#nano mtpass-0.5/mtpass.cpp

compile mtpass, dan outputnya mtpass :
#g++ -lssl -lcrypto mtpass.cpp -o mtpass
#chmod +x mtpass

mount flashdisk dan jalankan mtpass :
#mount /dev/sdb1 /media
#./mtpass /media/user.dat
dan hasilnya :

Cara 2

Silakan kunjungi situs password recovery mikrotik di: wkwkk :) lebih mudah cara 2 yo toh xixixi ^_^ .
Reff :

Create Delphi App : Export Import Excel Data

Create Delphi App : Export Import Excel Data
Tidak menyalahkan programmer kenapa udah ada program koq masih pakainya excel-excel juga. Memang harus diakui software besutan microsoft ini menjadi pioner dibidang SOftware yang dikhususkan untuk perkantoran.Sehingga meskipun nayak pesaing dalam dunia software serupa Microsoft Excel mempunyai daya tarik tersendiri bagi peminatnya.
Seiring perkembangan, software yang mungkin sudah terpakai lancar memerlukan pendukung (support) untuk supplay data untuk berbagai keperluan. Aplikasi dianggap bagus bila pengguna merasa nyaman dan fleksibel dalam mengolah data. Data2 dalam berkas perkantoran sering kali berupa file extensi XLS atau XLSX yang notabene merupakan hasil keluaran dari Microsoft Excel.

Dengan begitu aplikasi yang ingin kita ciptakan baiknya support dengan aplikasi basic dalam perkantoran. Export dan Import data dari atu ke Excel merupakan Tool yang menarik untuk ditambahkan dalam software yang ingin dibangun. Kadang data harus terlihat terbuka dan bisa diedit tanpa harus terkoneksi dengan database yang biasanya terpusat.(Tidak Semua Bos Paham Dengan Aplikasi Yang Rumit)

Cara kerja Aplikasi terangkum dalam urutan dibawah :

Procedure kerja untuk export data seperti dibawah :
  • XLApp := CreateOleObject(’Excel.Application’); –>command to call excel
  • XlBook:=XLApp.WorkBooks.Add; –>command to add workbook in excel
  • XlSheet := XlBook.worksheets.add; –> command to add worksheet in workbook
  • Go to the first record on table
  • create loop
  • write data on cell worksheet until end of file or last record

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComObj, Grids, StdCtrls, ExtCtrls, DBCtrls, DBGrids, DB,

Mendefinisikan fungsi dalam delphi, (supaya bisa dipanggil dari posisi mana saja atau ketika Unit yang mengandung fungsi ini dipakai dalam unit lain fungsi Export ini bisa dipanggil secara bersama-sama)

    function exportab(tab: TADOQuery; SFile: string): Boolean;

TADOQuery : Sumber data yang ingin kita export datanya.

Berikut fungsi untuk export data dari Query yang sebelumnya sudah terdefinisi SQL yang akan mengambil data dari record yang diinginkan.
function TFrmUtama.exportab(tab: TADOQuery; SFile: string): Boolean;
    xlCellTypeLastCell = $0000000B;
    XLApp, XlSheet,XlBook: OLEVariant;
    x, r: Integer;

    Result := False;
    XLApp := CreateOleObject('Excel.Application');
        XlSheet := XlBook.worksheets.add;

    while not tab.Eof do
    for r := 1 to tab.FieldCount do
        if tab.Fields[r-1].DataType=ftString then


  for r := 1 to tab.FieldCount do
      XlSheet.Cells.Item[1, r].Value:=tab.Fields[r-1].FieldName;
      XlSheet.cells[1, r].Interior.ColorIndex := 39;



 Memanggil Fungsi :
procedure TFrmUtama.toolExportDataClick(Sender: TObject);
  DmData.QDataANak.Open; //
membuka koneksi & mengambil data
  exportab(DmData.QDataAnak,'export at'+ FormatDateTime(' dddd dd mmmm yyyy hh mm ss', Now )+'.xlsx');
 Hasil dari fungsi diatas, akan disimpankankan File dengan format XLSX, dan diperlihatkan preview dari data yang berhasil dipindahkan dalam excel.


Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComObj, Grids, StdCtrls, ExtCtrls, DBCtrls, DBGrids, DB,

TForm1 = class(TForm)
Button1: TButton;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Table1: TTable;
Table1Sandibank: TStringField;
Table1NamaBank: TStringField;
Table1SandiKBI: TStringField;
procedure Button1Click(Sender: TObject);
function import(tab: Ttable; SFile: string): Boolean;
{ Private declarations }
{ Public declarations }
Form1: TForm1;
{$R *.dfm}
function TForm1.import(tab: Ttable; SFile: string): Boolean;
xlCellTypeLastCell = $0000000B;
XLApp, Sheet: OLEVariant;
x, y, r: Integer;
Result := False;
XLApp := CreateOleObject('Excel.Application');
XLApp.Visible := False;
XLApp.Workbooks.Open(SFile); //open file
Sheet := XLApp.Workbooks[ExtractFileName(SFile)].WorkSheets[1];
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
x := XLApp.ActiveCell.Row;
y := XLApp.ActiveCell.Column;
x := 2; //number of row in excel start import
for r := 1 to y do
tab.Fields[r-1].AsString:= XLApp.Cells.Item[x, r].Value;
r:=1; // don’t remove this value, to keep value columns
Inc(x, 1);
until XLApp.Cells.Item[x, r].Value=”;
if not VarIsEmpty(XLApp) then
XLAPP := Unassigned;
Sheet := Unassigned;
Result := True;

procedure TForm1.Button1Click(Sender: TObject);

if import(table1,ExtractFilePath(Application.ExeName)+ '.xls') then
ShowMessage(ExtractFilePath(Application.ExeName)+ '.xls has been imported!’);

Berikut akan saya berikan kode untuk Eksport dan import data dengan Delphi:

Ekport tabel ke Excel

Tambahkan uses ComObj di unit anda, kemudian
buat tabel didatabase anda misalnya namanya tabel1 dengan fieldnya masing-masing diberi nama field “a” dan field “b”.
Aktifkan dataset anda, terserah anda pakai koneksi apa(kalau saya kebiasaan pakai dbexpress. Kemudian ketik perintah berikut:

procedure TForm1.Button1Click(Sender: TObject);
var v:Variant;
with sqlclientdataset1 do begin


while not sqlclientdataset1.Eof do begin
on e:exception do begin

V:=null adalah untuk mengantisipasi seumpama di komputer anda tidak ada aplikasi excel.

Import dari tabel ke excel.

Untuk import dari excel ke tabel database perintahnya sangat mudah. Berikut akan saya berikan contohnya(jangan lupa uses ke Comobj juga dulu).

Tambahkan komponen opendialog di project anda, kemudian ketik perintah berikut ini:

procedure TForm1.Button2Click(Sender: TObject);
var v:Variant;
if opendialog1.Execute then

while vartostr(v.cells.range['a'+inttostr(i)])<>'' do
sqlconnection1.ExecuteDirect('insert into tabel1(a,b) values('+
quotedstr(vartostr(v.cells.range['a'+inttostr(i)])) +
quotedstr(vartostr(v.cells.range['b'+inttostr(i)])) + ')');
with sqlclientdataset1 do begin
on e:exception do begin
raise exception.Create(e.message);

Sumber :

Enable-Disable Akses Hotspot via Daloradius

Software : freeRadius, Daloradius, MySQL (dalam kasus ini digabung dengan mikrotik untuk Authentication Jaringan)

Inspirasinya : pengen buat user yang bisa login dengan syarat tertentu, sehingga aplikasi kita harus membuat perubahan di tabel default dari daloradius yang akan dibaca oleh freeRadius.

Studi kasusnya : Membuat user yang terdaftar pada tabel radcheck tidak diizinkan login bila syarat2 dari administratif tidak terpenuhi. dengan ketentuan ada aplikasi Administrasi(bukan bawaan dari Dalo, bisa dibuat dari Delphi, VB, Java, etc) yang memenejemen dari syarat2 tersebut.

Aplikasi Administrasi tersebut akan mengecek user yang terdaftar dalam tabel radcheck, sehingga aplikasi bisa menggunakan ID = username untuk penentuan user mana-mana yang bisa akses jaringan.

Methode : Setelah diperiksa Daloradius sudah menyediakan fungsi tersebut, sehingga tinggal memaksimalkan sesuai dengan aplikasi yang pengen dibuat. Penyesuaian yang dimaksud dalam tabel radiusergroup, dalam tabel tersebut Daloradius menempatkan user mana saja yang akan dapat aturan khusus, seperti halnya reject (menolak koneksi jaringan dari user).

Praktek :
1. Akses Daloradius | Management

2. Fokuskan pada Tombol Enable User dan Disable User

3. Untuk Disable user tertentu, dalam contoh user dengan username = 2200403, cukup klik Disable User

4. User tersebut akan dimasukan dalam tabel radiusergroup dengan groupname daloRADIUS-Disabled-Users.

daloRADIUS-Disabled-Users : Group user yang reject

5.  Untuk mengizinkan kembali user tersebut bisa langsung Delete dalam tabel tersebut. Kalo dari Daloradius bisa dilakukan lewat tombol yang Enable User.

6. Selesai

Proses ini lancar jika dan hanya jika semua aplikasi yang dibutuhkan sudah berjalan lancar sebelumnya.

squrrel Could not move/copy file. File not attached

squrrel Could not move/copy file. File not attached
I found this error on squrrel web mail when attaching a file.

This is a PHP problem of temporary upload directory.

1. Go to the file php.ini
(you may find the file using command "locate php.ini") in ubuntu I found it at "/etc/php5/apache2/"

2 Open and search the file for word "upload"
(I used the command at terminal "nano /etc/php5/apache2/php.ini" | to search press "ctrl+w" | type "upload" | press enter.)

3 Uncomment the line "upload_tmp_dir" (remove semicolon ";" in front of line)

4 edit the line to show as "upload_tmp_dir = /tmp" (just type)

5 Save and exit ("ctrl+x" | press Y | press enter )

6 Make /tmp as writeable by apache or every one ("chmod 777 /tmp")

7 restart apache or whole machine.(/etc/init.d/apache2 restart)

Try attaching a file - should work :)

Ref :

Stemming Bahasa Indonesia dengan Algoritma Nazief dan Andriani

Stemming Bahasa Indonesia dengan Algoritma Nazief dan Andriani

Stemming merupakan bagian yang tidak terpisahkan dalam Information Retrieval (IR). Tidak banyak algoritma yang dikhususkan untuk stemming bahasa Indonesia dengan berbagai keterbatasan didalamnya. Algoritma Porter salah satunya, Algoritma ini membutuhkan waktu yang lebih singkat dibandingkan dengan stemming menggunakan Algoritma Nazief & Adriani, namun proses stemming menggunakan Algoritma Porter memiliki prosentase keakuratan (presisi) lebih kecil dibandingkan dengan stemming menggunakan Algoritma Nazief & Adriani. Algoritma Nazief & Adriani sebagai algoritma stemming untuk teks berbahasa Indonesia yang memiliki kemampuan prosentase keakuratan (presisi) lebih baik dari algoritma lainnya. Algoritma ini sangat dibutuhkan dan menentukan dalam proses IR dalam dokumen Indonesia.
Stemming adalah salah satu cara yang digunakan untuk meningkatkan performa IR dengan cara mentransformasi kata-kata dalam sebuah dokumen teks ke bentuk kata dasarnya. Algoritma stemming untuk bahasa yang satu berbeda dengan algoritma stemming untuk bahasa lainnya. Sebagai contoh bahasa Inggris memiliki morfologi yang berbeda dengan bahasa Indonesia sehingga algoritma stemming untuk kedua bahasa tersebut juga berbeda. Proses stemming pada teks berbahasa Indonesia lebih rumit/kompleks karena terdapat variasi imbuhan yang harus dibuang untuk mendapatkan root word(kata dasar) dari sebuah kata.. Pada umumnya kata dasar pada bahasa Indonesia terdiri dari kombinasi:
Prefiks 1 + Prefiks 2 + Kata dasar + Sufiks 3 + Sufiks 2 + Sufiks 1
Sehingga dapat digambarkan menggunakan flowchar sebagai berikut:
Algoritma Nazief & Adriani yang dibuat oleh Bobby Nazief dan Mirna Adriani ini memiliki tahap-tahap sebagai berikut:
  1. Pertama cari kata yang akan diistem dalam kamus kata dasar. Jika ditemukan maka diasumsikan kata adalah root word. Maka algoritma berhenti.
  2. Inflection Suffixes (“-lah”, “-kah”, “-ku”, “-mu”, atau “-nya”) dibuang. Jika berupa particles (“-lah”, “-kah”, “-tah” atau “-pun”) maka langkah ini diulangi lagi untuk menghapus Possesive Pronouns (“-ku”, “-mu”, atau “-nya”), jika ada.
  3. Hapus Derivation Suffixes (“-i”, “-an” atau “-kan”). Jika kata ditemukan di kamus, maka algoritma berhenti. Jika tidak maka ke langkah 3a
    1. Jika “-an” telah dihapus dan huruf terakhir dari kata tersebut adalah “-k”, maka “-k” juga ikut dihapus. Jika kata tersebut ditemukan dalam kamus maka algoritma berhenti. Jika tidak ditemukan maka lakukan langkah 3b.
    2. Akhiran yang dihapus (“-i”, “-an” atau “-kan”) dikembalikan, lanjut ke langkah 4.
  4. Hapus Derivation Prefix. Jika pada langkah 3 ada sufiks yang dihapus maka pergi ke langkah 4a, jika tidak pergi ke langkah 4b.
    1. Periksa tabel kombinasi awalan-akhiran yang tidak diijinkan. Jika ditemukan maka algoritma berhenti, jika tidak
    2. pergi ke langkah 4b.
    3. For i = 1 to 3, tentukan tipe awalan kemudian hapus awalan. Jika root word belum juga ditemukan lakukan langkah 5, jika sudah maka algoritma berhenti. Catatan: jika awalan kedua sama dengan awalan pertama algoritma berhenti.
  5. Melakukan Recoding.
  6. Jika semua langkah telah selesai tetapi tidak juga berhasil maka kata awal diasumsikan sebagai root word. Proses selesai.
Tipe awalan ditentukan melalui langkah-langkah berikut:
  1. Jika awalannya adalah: “di-”, “ke-”, atau “se-” maka tipe awalannya secara berturut-turut adalah “di-”, “ke-”, atau “se-”.
  2. Jika awalannya adalah “te-”, “me-”, “be-”, atau “pe-” maka dibutuhkan sebuah proses tambahan untuk menentukan tipe awalannya.
  3. Jika dua karakter pertama bukan “di-”, “ke-”, “se-”, “te-”, “be-”, “me-”, atau “pe-” maka berhenti.
  4. Jika tipe awalan adalah “none” maka berhenti. Jika tipe awalan adalah bukan “none” maka awalan dapat dilihat pada Tabel 2. Hapus awalan jika ditemukan.
Tabel 1. Kombinasi Awalan Akhiran Yang Tidak Diijinkan
Awalan Akhiran yang tidak diizinkan
be- -i
di- -an
ke- -i, -kan
me- -an
se- -i, -kan
Tabel 2. Cara Menentukan Tipe Awalan Untuk awalan “te-”
Following Characters Tipe Awalan
Set 1 Set 2 Set 3 Set 4
“-r-“ “-r-“ - - none
- - ter-luluh
“-r-“ not (vowel or “-r-”) “-er-“ vowel ter
“-r-“ not (vowel or “-r-”) “-er-“ not vowel ter-
“-r-“ not (vowel or “-r-”) not “-er-“ - ter
not (vowel or “-r-”) “-er-“ vowel - none
not (vowel or “-r-”) “-er-“ not vowel - te
Tabel 3. Jenis Awalan Berdasarkan Tipe Awalannya
Tipe Awalan Awalan yang harus dihapus
di- di-
ke- ke-
se- se-
te- te-
ter- ter-
ter-luluh ter
Untuk mengatasi keterbatasan pada algoritma di atas, maka ditambahkan aturan-aturan dibawah ini:
1. Aturan untuk reduplikasi.
  1. Jika kedua kata yang dihubungkan oleh kata penghubung adalah kata yang sama maka root word adalah bentuk tunggalnya, contoh : “buku-buku” root word-nya adalah “buku”.
  2. Kata lain, misalnya “bolak-balik”, “berbalas-balasan, dan ”seolah-olah”. Untuk mendapatkan root word-nya, kedua kata diartikan secara terpisah. Jika keduanya memiliki root word yang sama maka diubah menjadi bentuk tunggal, contoh: kata “berbalas-balasan”, “berbalas” dan “balasan” memiliki root word yang sama yaitu “balas”, maka root word “berbalas-balasan” adalah “balas”. Sebaliknya, pada kata “bolak-balik”, “bolak” dan “balik” memiliki root word yang berbeda, maka root word-nya adalah “bolak-balik”.
2. Tambahan bentuk awalan dan akhiran serta aturannya.
  1. Untuk tipe awalan “mem-“, kata yang diawali dengan awalan “memp-” memiliki tipe awalan “mem-”.
  1. Tipe awalan “meng-“, kata yang diawali dengan awalan “mengk-” memiliki tipe awalan “meng-”.
Berikut contoh-contoh aturan yang terdapat pada awalan sebagai pembentuk kata dasar.
1. Awalan SE-
Se + semua konsonan dan vokal tetap tidak berubah
Contoh :
  • Se + bungkus   = sebungkus
  • Se + nasib   = senasib
  • Se + arah    = searah
  • Se + ekor    = seekor
2. Awalan ME-
Me + vokal (a,i,u,e,o) menjadi sengau “meng”
Contoh :
  • Me + inap = menginap
  • Me + asuh = mengasuh
  • Me + ubah = mengubah
  • Me + ekor  = mengekor
  • Me + oplos = mengoplos
Me + konsonan b menjadi “mem”
Contoh :
  • Me + beri = member
  • Me + besuk = membesuk
Me + konsonan c menjadi “men”
Contoh :
  • Me + cinta  = mencinta
  • Me + cuci  = mencuci
Me + konsonan d menjadi “men”
Contoh :
  • Me + didik  = mendidik
  • Me + dengkur = mendengkur
Me + konsonan g dan h menjadi “meng”
Contoh :
  • Me + gosok  = menggosok
  • Me + hukum  = menghukum
Me + konsonan j menjadi “men”
Contoh :
  • Me + jepit = menjepit
  • Me + jemput = menjemput
Me + konsonan k menjadi “meng” (luluh)
Contoh :
  • Me + kukus = mengukus
  • Me + kupas  = mengupas
Me + konsonan p menjadi “mem” (luluh)
Contoh :
  • Me + pesona = mempesona
  • Me + pukul = memukul
Me + konsonan s menjadi “meny” (luluh)
Contoh :
  • Me + sapu = menyapu
  • Me + satu = menyatu
Me + konsonan t menjadi “men” (luluh)
Contoh :
  • Me + tanama = menanam
  • Me + tukar  = menukar
Me + konsonan (l,m,n,r,w) menjadi tetap “me”
Contoh :
  • Me + lempar = melempar
  • Me + masak = memasak
  • Me + naik  = menaik
  • Me + rawat = merawat
  • Me + warna = mewarna
3. Awalan KE-
Ke + semua konsonan dan vokal tetap tidak berubah
Contoh :
  • Ke + bawa = kebawa
  • Ke + atas = keatas
4. Awalan PE-
Pe + konsonan (h,g,k) dan vokal menjadi “per”
Contoh :
  • Pe + hitung + an = perhitungan
  • Pe + gelar + an = pergelaran
  • Pe + kantor +   = perkantoran
Pe + konsonan “t” menjadi “pen” (luluh)
Contoh :
  • Pe + tukar  = penukar
  • Pe + tikam = penikam
Pe + konsonan (j,d,c,z) menjadi “pen”
Contoh :
  • Pe + jahit = penjahit
  • Pe + didik = pendidik
  • Pe + cuci = pencuci
  • Pe + zina = penzina
Pe + konsonan (b,f,v) menjadi “pem”
Contoh :
  • Pe + beri = pemberi
  • Pe + bunuh = pembunuh
Pe + konsonan “p” menjadi “pem” (luluh)
Contoh :
  • Pe + pikir  = pemikir
  • Pe + potong  = pemotong
Pe + konsonan “s” menjadi “peny” (luluh)
Contoh :
  • Pe + siram  = penyiram
  • Pe + sabar = penyabar
Pe + konsonan (l,m,n,r,w,y) tetap tidak berubah
Contoh :
  • Pe + lamar = pelamar
  • Pe + makan = pemakan
  • Pe + nanti = penanti
    • Pe + wangi = pewangi
Penerapannya dapat dilihat pada penggalan source code berikut:



$teksAsli = $_POST['katadasar'];
//echo $teksAsli;
$length = strlen($teksAsli);
//echo $length;
$pattern = ‘[A-Za-z]‘;
$kata = ”;
$kata = $teksAsli;
$stemming = NAZIEF($kata);//Memasukkan kata ke fungsi Algoritma Nazief
echo $stemming.’
$kata = ”;
Untuk algoritma Nazief dan Andriannya sebagai berikut:
require_once(‘koneksi.php’);//Koneksi ke database
// fungsi-fungsi
DP + DP + root word + DS + PP + P
function cekKamus($kata){
// cari di database
$sql = “SELECT * from tb_katadasar where katadasar =’$kata’ LIMIT 1″;
//echo $sql.’
$result = pg_query($sql) or die(pg_error());
return true; // True jika ada
return false; // jika tidak ada FALSE
function Del_Inflection_Suffixes($kata){
$kataAsal = $kata;
if(eregi(‘([km]u|nya|[kl]ah|pun)$’,$kata)){ // Cek Inflection Suffixes
$__kata = eregi_replace(‘([km]u|nya|[kl]ah|pun)$’,”,$kata);
return $__kata;
return $kataAsal;
// Cek Prefix Disallowed Sufixes (Kombinasi Awalan dan Akhiran yang tidak diizinkan)
function Cek_Prefix_Disallowed_Sufixes($kata){
if(eregi(‘^(be)[[:alpha:]]+(i)$’,$kata)){ // be- dan -i
return true;
if(eregi(‘^(se)[[:alpha:]]+(i|kan)$’,$kata)){ // se- dan -i,-kan
return true;
return false;
// Hapus Derivation Suffixes (“-i”, “-an” atau “-kan”)
function Del_Derivation_Suffixes($kata){
$kataAsal = $kata;
if(eregi(‘(i|an)$’,$kata)){ // Cek Suffixes
$__kata = eregi_replace(‘(i|an)$’,”,$kata);
if(cekKamus($__kata)){ // Cek Kamus
return $__kata;
/*– Jika Tidak ditemukan di kamus –*/
return $kataAsal;
// Hapus Derivation Prefix (“di-”, “ke-”, “se-”, “te-”, “be-”, “me-”, atau “pe-”)
function Del_Derivation_Prefix($kata){
$kataAsal = $kata;
/* —— Tentukan Tipe Awalan ————*/
if(eregi(‘^(di|[ks]e)’,$kata)){ // Jika di-,ke-,se-
$__kata = eregi_replace(‘^(di|[ks]e)’,”,$kata);
return $__kata; // Jika ada balik
$__kata__ = Del_Derivation_Suffixes($__kata);
return $__kata__;
/*————end “diper-”, ———————————————*/
$__kata = eregi_replace(‘^(diper)’,”,$kata);
return $__kata; // Jika ada balik
/*————end “diper-”, ———————————————*/
if(eregi(‘^([tmbp]e)’,$kata)){ //Jika awalannya adalah “te-”, “me-”, “be-”, atau “pe-”
/* — Cek Ada Tidaknya Prefik/Awalan (“di-”, “ke-”, “se-”, “te-”, “be-”, “me-”, atau “pe-”) ——*/
if(eregi(‘^(di|[kstbmp]e)’,$kata) == FALSE){
return $kataAsal;
return $kataAsal;
function NAZIEF($kata){
$kataAsal = $kata;
/* 1. Cek Kata di Kamus jika Ada SELESAI */
if(cekKamus($kata)){ // Cek Kamus
return $kata; // Jika Ada kembalikan
/* 2. Buang Infection suffixes (\-lah”, \-kah”, \-ku”, \-mu”, atau \-nya”) */
$kata = Del_Inflection_Suffixes($kata);
/* 3. Buang Derivation suffix (\-i” or \-an”) */
$kata = Del_Derivation_Suffixes($kata);
/* 4. Buang Derivation prefix */
$kata = Del_Derivation_Prefix($kata);
return $kata;
Pada proses stemming menggunakan Algoritma Nazief & Adriani, kamus yang digunakan sangat mempengaruhi hasil stemming. Semakin lengkap kamus yang digunakan maka semakin akurat pula hasil stemming.
Sumber: Agusta, L.2009. Perbandingan Algoritma Stemming Porter Dengan Algoritma Nazief dan Adriani Untuk Stemming Dokumen Teks Bahasa Indonesia. Konferensi Nasional Sistem dan Informatika 2009. . Diakses 10 Juli 2010.

Membuat Aplikasi Android

Membuat Aplikasi Android
Android sebagai “pemain” baru dalam dunia smartphone kini sudah berkembang demikian cepat. Hingga saat ini sudah memasuki versi Android 2.3. Hal ini tidak terlepas dari peran geeks yang memanfaatkan OS ini untuk dikembangkan lebih lanjut karena sifatnya yang open source. Jika pada artikel sebelumnya kita telah membahas bagaimana instalasi Android emulator pada desktop, serta instalasi aplikasi yang sudah ada untuk Android, sekarang kita akan mencoba membuat sebuah aplikasi Map sederhana menggunakan Android emulator.

Aplikasi Map sederhana ini akan kita sambungkan dengan Google Map, jadi jangan lupa koneksi internet ya..

1. Pembuatan Project Baru

Mari kita mulai dengan membuat project baru ketentuan sebagai berikut,
  1. Klik File > New lalu pilih Android Project
  2. Klik Next lalu isikan field-field yang tersedia dengan ketentua sebagai beriktu
  • Project Name : Nama Project yang akan kita buat.
Project Name : My First Map
  • Built Target : Target aplikasi yang akan digunakan untuk menjalankan aplikasi.
Built Target : Kita pilih Google APIs dengan Platform 1.6
  • Application Name : Nama aplikasi yang akan dibuat.
Application Name : My First Map
  • Package Name : Nama paket yang mengacu pada standar penamaan aplikasi java.
Package Name : biz.multimediacenter.myfirstmap
  • Create Activity : Nama aktiviti.
Create Activity : MyFirstMap
  • Min SDK Version : Versi dari Android SDK yang digunakan.
Min SDK Version : 4

2. Pembuatan AVD

  1. Klik Window > Android SDK and AVD Manager
  2. Klik New
  3. Isikan field-field yang tersedia dengan ketentuan sebagai berikut,
  • Name : Nama AVD
Name : AVDapi
  • Target : Target untuk menjalankan aplikasi
Target : Google APIs(Google Inc.)-API Level 4
  • SD Card Size : Kapasitas memori yang akan digunakan
SD Card Size : 100 MB
  • Skin : Jenis layar
Skin : Default (HVGA)
  • Hardware : Perangkat keras yang dibutuhkan
Hardware : Abstracted LCD density

3. Key API

  1. Cari lokasi folder key-nya, biasanya terletak pada C:\Document and Settings\\.android\debug.keystore
  2. Copy file debug.keystore ke sebuah lokasi yang mudah dijangkau, misalkan di folder data di drive D.
  3. Cara membuka debug.keystore dapat melalui DOS dengan melalui Start > Run > CMD
  4. Kemudian cari dimana kita menempatkan JDK\bin kita, misal pada C:\Program Files\jdk 1.6.0_16\bin
  5. Setelah berada pada lokasi yang benar maka perintah yang kita gunakan adalah : keytool –list –alias androiddebugkey –keystore D:\data\debug.keystore –storepass android –keypass android
  6. Setelah itu masuk ke masuk ke alamat untuk mendaftarkan key Certificate fingerprint kita.
  7. Masukkan key Certificate fingerprint pada My Certicate’s MD5 fingerprint :
  8. Setelah itu kita akan mendapatkan API Key Google Map

4. Koneksi Google Map

Dalam pembuatan aplikasi peta sederhana ini, kita menggunakan fasilitas Google Map yang dikembangkan oleh Google Inc. Jadi untuk dapat menggunakannya maka di dalam pembuatannya kita sisipkan perintah yang akan menghubungkan aplikasi kita dengan Google Map. Dalam hal ini kita tambahkan
  2. android:apikey=””
sehingga pada file main.xml akan menjadi seperti di bawah ini,

< android:id=”@+id/map”
android:clickable=”true” />

android:layout_alignParentLeft=”true” >

Sedangkan untuk koneksi dengan internet, kita haru menambahkan permission dan library pada file AndroidManifest.xml, yaitu:
  2. Pada elemen , tambahkan elemen dengan android:name= ””, sebagai tanda untuk menggunakan Android API
Sehingga file AndroidManifest.xml secara menjadi seperti ini:



5. Fasilitas Zoom

Fasilitas zoom sangat diperlukan pada aplikasi peta digital untuk mengetahui lebih detail tempat yang ingin dilihat. Di dalam Android, kita bisa mengontrol secara langsung level zoom melalui method setzoom() pada getMapController(). Nilai ini menggunakan angka integer, diamana 1 (satu) akan memperlihatkan peta dunia secara keseluruhan, dan 21 (dua puluh satu) adalah level terdekat yang bisa kita dapatkan.
Setiap  level merupakan kelipatan dari efektif resolusi layer, level 1 (satu) sama dengan 256 pixel, sedangkan level 21 (dua puluh satu) sama dengan 268,435,456 pixel. Layar handphone tentu tidak sebesar itu, sehingga menggunakan level 16 (enam belas) untuk melihat peta seukuran beberapa blok pada sebuah lokasi.
Untuk membuat aplikasi memiliki zoom level, kita membutuhkan beberapa hal:
  1. Kita menentukan tempat untuk menempatkan kontrol zoom, dan kita bisa mengesetnya hanya terhlihat ketika kita membutuhkan. Misal kita tempatkan overlay di atas peta, pada pojok kiri bawah layar. Kita menggunakan LinearLayout atau kontainer sederhana untuk kontol zoom layout kita.
  2. Pada Activity method onCreate(), kita bisa mendapatkan kontrol zoom kontainer melalui findViewById().
  3. Tambahkan hasil dari map.getZoomControl() pada kontainer.
Sebagai contoh, ini baris kode dari method onCreate(), yang dimaksud sebelumnya:

ViewGroup zom=(ViewGroup) findViewById (;

Kemudian kita dapat memanggil kontrol zoom agar terlihat dengan memanggil displayZoomControl() pada mapView kita, atau bisa juga secara otomatis terlhiat ketika penggunanya menyentuh layar.
Biasanya kita akan butuh untuk mengontrol peta, selain level zoom, misal lokasi pengguna pada aplikasi semacam where I am, atau lokasi-lokasi tertentu yang kita inginkan, ini akan memerlukan GeoPoint sebagai parameter lokasi tersebut. GeoPoint sebagai parameter lokasi tersebut. GeoPoint merupakan titik alamat dari lokasi, yaitu Latitude dan Longtitude, yang direpresentasikan ke dala deretan angka integer. Dan untuk mengubah posisi map kita bisa memanggil setCenter() pada mapController.

6. GeoPoint

Untuk mendapatkan GeoPoint salah satunya bisa melihat pada Google Maps. Misalkan kita menujut ke Indonesia. Dan disini kita akan mengambil GeoPoint untuk kota Depok dengan titik Universitas Gunadarma. Klik kanan, lalu pilih What’s here?
Sehingga pada jendela sebelah kiri akan muncul angka GeoPoint dari titik tersebut, atau pada field searching. Untuk Universitas Gunadarma kita mendapatkan GeoPoint dengan deretan angka integer, -6.36806,106.833029

7. Rugged Terrain

Seperti juga Google Maps pada komputer yang bisa memperlihatkan image peta terrain dari satellite, Android map juga bisa melakukan hal seperti itu.
Dengan menggunakan method toggleSatellite() pada MapView, kita bisa melihat peta perspektif dari satellite yaitu terrain. Kita bisa membuat triggernya dari menu ataupun dari keypad. Contoh penggunaan keypad yaitu dengan mengeset untuk berpindah mode peta terrain dari satellite pada keypad S, dan untuk menampilkan zoom kontrol pada keypad
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_S) {
else if (keyCode == KeyEvent.KEYCODE_Z) {

8. Push Pin

Ketika kita menggunakan Google Maps, kita mungkin pernah menggunakan atau melihat sesuatu di atas peta, seperti “push-pins” yang menandakan suatu tempat. Dimana sebenarnya push pin tersebut terpisah dari peta, dia memiliki layer sendiri, diatas layer peta. Android map juga menyediakan fasilitas layering inim sehingga kita bisa menandai peta dengan push pin sesuai yang diinginkan.
Setiap overlay yang ingin kita tambahkan pada peta, harus diimplementasikan sebagai subkelas dari Ovelay. Terdapat sebuah subkelas ItemizedOverlay ketika kita ingin melihat semacam push pin atau sejenisnya dan ItemizedOverlay memudahkan proses itu.
Untuk menetapkan kelas overlay pada peta, kita bisa memanggil getOverlays() pada MapView kita, dan gunakan add() sebagai instance dari Overlay:
marker.setBounds(0,0, marker.getIntrinsicWidth(),marker.getIntrinsicHeight());
map.getOverlays().add(new SitesOverlay(marker));

9. Touch Screen

Subkelas Overlay juga mengimplementasikan method onTap(), yang akan menangani sentuhan pada layar seperti pada Google Maps, mengklik pada push pin akan mentriger sebuah balon pop up informasi mengenai lokasi. Dengan onTap(), kita dapat melakukan hal yang sama pada Android.
protected boolean onTap(int i) {
Android memiliki built-in overlay untuk menghandle dua skenario keadaan:
  1. Menunjukkan dimana kita pada peta, berdasarkan GPS atau lokasi lain yang disediakan
  2. Menunjukkan titik dimana kita ditetapkan, berdasarkan pada built-in sensor kompas apabila tersedia.
Yang harus kita lakukan adalah membuat instance dari MyLocationOverlay(), tambahkan pada daftar MapViews dari overlay, dan mengeset pada enable atau disable fitur ini pada waktu yang ditentukan. Dinama waktu ini didasarkan pada umur penggunaan batttery, tidak perlu meng-update lokasi atau arah ketika activity di pause, untuk itu direkomendasikan kita meng-enable fitur ini dengan onResume() dan disable dengan onPause().
Disini kita memberikan penanda (marker) pada titik-titik GeoPoint yang kita masukkan koordinatnya ke dalam peta kita. Yaitu dengan membuat objek gambar kecil, dengan menggunakan formatpng, dan kita manamakannya marker.png. untuk membuatnya bisa menggunakan pengolah gambar yang kita kuasai, dengan ukuran 22×23 pixel kemudian copy ke folder res/drawable-mdpi/marker.png

10. Tampilan

  • Tampilan Satelit

  • Tampilan Peta

Sumber :

Membuat Aplikasi Google Map Kita Sendiri di Android

Membuat Aplikasi Google Map Kita Sendiri di Android
Sebenarnya tutorial ini sudah ada di situs android sendiri, namun saya ingin menerjemahkan untuk yang kurang mengerti akan hal ini. Jika kita sudah mendownload eclipse dan android sdk, kita bisa memulai untuk mencoba membuat aplikasi ini :)
Pertama, buka Eclipse kita.
Eclipse Galileo
Eclipse Galileo
Selanjutnya kita buat sebuah Project baru dengan menekan menu File->New->Android Project.
Android Project
Android Project
Setelah itu kita masukkan nama project : GoogleMapKu, Di sini saya menyimpan pada D:/Project. Centang Google Api v7, karena saya di sini menggunakan Eclair, karena tidak memiliki sdk yang lebih baru. :P Sesuaikan dengan gambar di bawah ini.
New Android Project
New Android Project
Maka tampilan di package explorer akan jadi seperti ini.
Package Explorer
Package Explorer
Jika kita buka folder-folder yang ada di dalam project tersebut, maka kita dapat menemukan banyak fungsi, diantaranya :
  • src, digunakan untuk source code aplikasi kita.
  • gen, merupakan folder berisi class yang di-generate langsung oleh eclipse, tidak perlu kita sentuh. merupakan sebuah pointer untuk resource gambar atau file lain pada project eclipse.
  • assets, folder yang satu ini saya tidak pernah menggunakan, mungkin ada yang pernah menggunakannya ? X)
  • res, merupakan folder sumber segala sesuatu yang berhubungan dengan file yang ditampilkan pada interface aplikasi.
  • AndroidManifest.xml, digunakan sebagai deklarasi aplikasi kita, berisi permission untuk mengakses seperti sms, internet, gps, dan lainnya.
Tree View
Tree View
Sekarang kita tes aplikasi kita, namun sebelum itu kita perlu membuat emulatornya terlebih dahulu. Tekan menu Window -> Andoroid SDK and AVD Manager, maka akan muncul dialog seperti berikut :
Android SDK and ADV Manager
Android SDK and ADV Manager
Jika kita belum membuat sebuah emulator, maka kita buat terlebih dahulu dengan mengklik tombok new. Isikan seperti gambar di bawah ini. Lalu tekan Create AVD.
Setelah itu lakukan start emulator. Pastikan centang launch from snapshot, hal ini agar ketika kita meng-close emulator, saat kita nyalakan kembali, tidak perlu me-reboot dari awal lagi.
Launch Emulator
Launch Emulator
Proses ini agak menunggu lama, jika sudah sampai ke screen utama emulator, jalankan aplikasi kita dengan menekan tombol Run, kemudian pilih Android Application.
Run As
Run As
Jika berhasil, kita dapati hasil seperti berikut ini :
Hasil Emulator
Hasil Emulator
Nah, jika sampai di sini kita berhasil, maka kita berhasil. :D Sekarang kita mulai melakukan coding terhadap google mapnya. Karena google map api membutuhkan key, terlebih dahulu kita generate key yang kita punyai. Di sini saya menggunakan Windows 7 dan username saya ifebfeb, jadi lokasi debug.keystore berada pada :
buka terminal / cmd.exe, change directory dengan mengetikkan cd “Program Files\Java\jdk1.6.0_21\bin”, setelah itu ketikkan : keytool -list -alias androiddebugkey -keystore C:\Users\ifebfeb\.android\debug.keystore -storepass android -keypass android. Untuk lebih jelasnya lihat pada gambar :
Setelah kita generate key kita buka web di sini, maka kita copy-kan ke textbox yang ada. Jangan lupa untuk mencentang checkbox “I have read and agree with the terms and conditions
Oke, jika sudah kita dapatkan API key kita sendiri, sekarang saatnya menuju ke pemrograman. Buka file main.xml pada folder /res/layout. Isikan dengan xml berikut, jangan lupa menyertakan API key-nya. API key tidak boleh sama antara saya dengan Anda, jadi harus benar-benar meng-generate API key-nya. :)
1xml version="1.0" encoding="utf-8"?>
4    android:id="@+id/mapview"
5    android:layout_width="fill_parent"
6    android:layout_height="fill_parent"
7    android:clickable="true"
8    android:apiKey="0UoFJyNCg8Upozd2cspAO3ks-rd_ziS5azfpYbA"
Jika sudah, sekarang kita buka yang berada pada folder /src/com.iddev.googlemap, Ganti menjadi seperti ini :
01package com.iddev.googlemap;
08import android.os.Bundle;
09import android.view.Window;
11public class MainActivity extends MapActivity {
12    public MapView mapView;
14    /** Called when the activity is first created. */
15    @Override
16    public void onCreate(Bundle savedInstanceState) {
17        super.onCreate(savedInstanceState);
19        requestWindowFeature(Window.FEATURE_NO_TITLE);
20        setContentView(R.layout.main);
22        mapView = (MapView) findViewById(;
23        mapView.setBuiltInZoomControls(true);
25        // set posisi tengah dari map
26        MapController mapController = mapView.getController();
27        mapController.setCenter(new GeoPoint(-7298115, 112739451));
28        mapController.setZoom(12);
29    }
31    @Override
32    protected boolean isRouteDisplayed() {
33        return false;
34    }
Kemudian ubah file AndroidManifest.xml menjadi seperti ini :
01xml version="1.0" encoding="utf-8"?>
02<manifest xmlns:android=""
03      package="com.iddev.googlemap"
04      android:versionCode="1"
05      android:versionName="1.0">
08    <application android:icon="@drawable/icon" android:label="@string/app_name">
09        <activity android:name=".MainActivity"
10                  android:label="@string/app_name"
11                  android:theme="@android:style/Theme.NoTitleBar">
12            <intent-filter>
13                <action android:name="android.intent.action.MAIN" />
14                <category android:name="android.intent.category.LAUNCHER" />
15            intent-filter>
16        activity>
17        <uses-library android:name="" />
18    application>
19    <uses-permission android:name="android.permission.INTERNET" />
Sekarang Jalankan aplikasi, dan.. Voila!! Aplikasi Google Map buatan kita sudah jadi. Nantikan Part Selanjutnya ;)
Hasil Akhir
Hasil Akhir
Referensi Asli :