17 September 2015

Instalasi Dan Konfigurasi Nginx Web Server, PHP, MYSQL, Web Application Firewall Naxsi Dan Web Testing Damn Vulnerable Web App Pada Sistem Operasi Linux Mint (Ubuntu)

Sebagai Developer yang namanya teknologi baru harus dicoba terus, walaupun hasilnya belum tentu memuaskan. Namun kali ini Saya sudah memperhitungkannya lebih dulu, apakah pantas untuk dicoba. Kebetulan Saya lagi penasaran dengan web server NGINX, karena selama ini dipasaran menggunakan Apache. Karena penasaran tersebut, sekalian deh Saya mau integrasikan dengan Web Application Firewall (WAF) dengan nama NAXSI, sekalian coba-coba keamanan WAF dan juga kekuatan Web Servernya :D.

Baiklah, Saya mau jelaskan dulu beberapa nama aplikasi yang akan kita gunakan pada tutorial kali ini:

  1.  NGINX, Web Server
  2. NAXSI
  3. Damn Vulnerable Web App (DVWA)
  4. PHP, Intrepreter Programming untuk dapat menggunakan DVWA
  5. MYSQL, Database Server untuk dapat menggunakan DVWA
Sebelum melakukan instalasi adapun yang perlu diketahui bahwa proses instalasi berada pada lingkungan Linux Mint, dan kemungkinan semua sintax/command yang ada pada saat instalasi akan mirip pada distro lain misalnya Linux Ubuntu. Proses instalasi akan banyak bermain pada terminal/console dan jangan lupa untuk mengaktifkan layanan Internet. So.... mari kita mulai :)



  1. Instalasi paket NGINX dan NAXSI
    Command:
    sudo apt-get install nginx-naxsi python-twisted python-mysqldb nginx-naxsi-ui

    Tunggu hingga proses instalasi selesai... dan bila instalasi sudah selesai, lakukan perngubahan konfigurasi terhadap beberapa file dibawah ini.

    • /etc/nginx/nginx.conf
      Untuk mengubah file, silahkan ketikkan perintah/command berikut:
      sudo nano /etc/nginx/nginx.conf

      Lalu silahkan copy paste isi context berikut (atau lihat perubahannya saja):
      user www-data;
      worker_processes 1;
      pid /run/nginx.pid;
      
      events {
       worker_connections 768;
       # multi_accept on;
      }
      
      http {
      
       ##
       # Basic Settings
       ##
      
       sendfile on;
       tcp_nopush on;
       tcp_nodelay on;
       keepalive_timeout 65;
       types_hash_max_size 2048;
       # server_tokens off;
      
       # server_names_hash_bucket_size 64;
       # server_name_in_redirect off;
      
       include /etc/nginx/mime.types;
       default_type application/octet-stream;
      
       ##
       # Logging Settings
       ##
      
       access_log /var/log/nginx/access.log;
       error_log /var/log/nginx/error.log;
      
       ##
       # Gzip Settings
       ##
      
       gzip on;
       gzip_disable "msie6";
      
       # gzip_vary on;
       # gzip_proxied any;
       # gzip_comp_level 6;
       # gzip_buffers 16 8k;
       # gzip_http_version 1.1;
       # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
      
       ##
       # nginx-naxsi config
       ##
       # Uncomment it if you installed nginx-naxsi
       ##
      
       include /etc/nginx/naxsi_core.rules;
      
       ##
       # nginx-passenger config
       ##
       # Uncomment it if you installed nginx-passenger
       ##
       
       #passenger_root /usr;
       #passenger_ruby /usr/bin/ruby;
      
       ##
       # Virtual Host Configs
       ##
      
       include /etc/nginx/conf.d/*.conf;
       include /etc/nginx/sites-enabled/*;
      }
      
      
      #mail {
      # # See sample authentication script at:
      # # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
      # 
      # # auth_http localhost/auth.php;
      # # pop3_capabilities "TOP" "USER";
      # # imap_capabilities "IMAP4rev1" "UIDPLUS";
      # 
      # server {
      #  listen     localhost:110;
      #  protocol   pop3;
      #  proxy      on;
      # }
      # 
      # server {
      #  listen     localhost:143;
      #  protocol   imap;
      #  proxy      on;
      # }
      #}
      

      Lalu jangan lupa disimpan. :)
    • /etc/nginx/sites-available/default
      Sama dengan perintah sebelumnya, "sudo nano nama_file", silahkan ubah juga context nya.
      # You may add here your
      # server {
      # ...
      # }
      # statements for each of your virtual hosts to this file
      
      ##
      # You should look at the following URL's in order to grasp a solid understanding
      # of Nginx configuration files in order to fully unleash the power of Nginx.
      # http://wiki.nginx.org/Pitfalls
      # http://wiki.nginx.org/QuickStart
      # http://wiki.nginx.org/Configuration
      #
      # Generally, you will want to move this file somewhere, and start with a clean
      # file but keep this around for reference. Or just disable in sites-enabled.
      #
      # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
      ##
      
      server {
       listen 80 default_server;
       listen [::]:80 default_server ipv6only=on;
      
       root /usr/share/nginx/html;
       index index.php index.html index.htm;
      
       # Make site accessible from http://localhost/
       server_name localhost;
      
       location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        # Uncomment to enable naxsi on this location
        include /etc/nginx/naxsi.rules;
       }
      
       # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
       location /RequestDenied {
       # proxy_pass http://127.0.0.1:8080;
        return 418;    
       }
      
       error_page 418 /418.php;
      
       # redirect server error pages to the static page /50x.html
       #
       #error_page 500 502 503 504 /50x.html;
       #location = /50x.html {
       # root /usr/share/nginx/html;
       #}
      
       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
       #
       location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
       # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
       #
       # # With php5-cgi alone:
       # fastcgi_pass 127.0.0.1:9000;
       # # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
       # include fastcgi.conf;
       }
      
       # deny access to .htaccess files, if Apache's document root
       # concurs with nginx's one
       #
       #location ~ /\.ht {
       # deny all;
       #}
      }
      
      
      # another virtual host using mix of IP-, name-, and port-based configuration
      #
      #server {
      # listen 8000;
      # listen somename:8080;
      # server_name somename alias another.alias;
      # root html;
      # index index.html index.htm;
      #
      # location / {
      #  try_files $uri $uri/ =404;
      # }
      #}
      
      
      # HTTPS server
      #
      #server {
      # listen 443;
      # server_name localhost;
      #
      # root html;
      # index index.html index.htm;
      #
      # ssl on;
      # ssl_certificate cert.pem;
      # ssl_certificate_key cert.key;
      #
      # ssl_session_timeout 5m;
      #
      # ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
      # ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
      # ssl_prefer_server_ciphers on;
      #
      # location / {
      #  try_files $uri $uri/ =404;
      # }
      #}
      
    • /etc/nginx/naxsi.rules
      # Sample rules file for default vhost.
      
      #LearningMode;
      SecRulesEnabled;
      #SecRulesDisabled;
      DeniedUrl "/RequestDenied";
      
      ## check rules
      CheckRule "$SQL >= 8" BLOCK;
      CheckRule "$RFI >= 8" BLOCK;
      CheckRule "$TRAVERSAL >= 4" BLOCK;
      CheckRule "$EVADE >= 4" BLOCK;
      CheckRule "$XSS >= 8" BLOCK;
      
    • /usr/share/nginx/html/418.php
      <HTML>
      <BODY>
      <CENTER>
      <h1 style="color: red; margin-top: 30px;">BLOCKED BY NAXSI</h1>
      <p>Reguest url : <?php echo $_SERVER['HTTP_REFERER']; ?></p>
      <p>Queries : <?php echo $_SERVER['HTTP_ORIG_ARGS']; ?></p>
      <p>
      <b>Naxsi Blocked Information</b>
      <pre>
      <?php
              $naxsi_sigs = explode('&', $_SERVER['HTTP_NAXSI_SIG']);
              foreach($naxsi_sigs as $naxsi_sig)
              {
                      echo $naxsi_sig . "\r\n";
              }
      ?>
      </pre>
      </p>
      </CENTER>
      </BODY>
      </HTML>
      
  2.  INSTALL PHP
    Command:
    sudo apt-get install php5 php5-fpm php5-mysql

    Tunggu hingga proses selesai...

    Jika selesai, lalu lanjutkan dengan melakukan konfigurasi file /etc/php5/fpm/php.ini.
    Cari baris yang terdapat code ; cgi.fix_pathinfo=1
    Seperti gambar berikut:

    Lalu ganti menjadi : cgi.fix_pathinfo=0
    Ingat tanda kutip (;) sebelum code harus dihapus! Lalu jangan lupa disimpan.
    Silahkan restart php dengan command:
    sudo service php5-fpm restart
    

    Lalu kita akan mencoba memeriksa apakah file PHP sudah bisa dijalankan pada webserver nginx, maka itu kita akan membuat file contohnya. Maka itu ketik baris berikut dan simpan di /usr/share/nginx/html/phpinfo.php.
    
    
    Coba buka browser, dan masukkan alamat:
    http://localhost
    Maka seharusnya akan tampak sebagai berikut:


    Lalu coba kita jalankan file PHP yang sudah kita buat tadi, dengan alamat:
    http://localhost/phpinfo.php
    Maka sudah seharusnya tampilannya mirip seperti dibawah ini:


  3. INSTALL MYSQL
    Command:
    sudo apt-get install mysql-server mysql-client
    

    Akan tampak seperti berikut pada saat proses instalasi:


    Pada saat instalasi sedang berjalan, kita akan diminta untuk memasukkan password untuk login sebagai user “root”. Silahkan masukkan password sesuai keinginan. Dalam contoh ini kita masukkan passwordnya adalah “salamdamai” (tanpa tanda kutip).


    Setelah itu, kita diminta mengulangi password yang sudah kita input tadi.


    Tunggu hingga selesai, hingga akhir instalasi akan tampak seperti berikut:


    Mari kita test login ke mysql.
    Command:
    mysql –u root –p
    setelah perintah di atas, maka mysql akan meminta kita untuk memasukkan password.

    Jika password login ke mysql tidak salah, maka akan tampak seperti berikut.

    Sementara ini ketik “quit”, dan enter untuk mengakhiri MySQL, karena kita belum memerlukannya.
  4. INSTALL DVWA (WEB VURN TESTING)
    Command:
    cd /usr/share/nginx/html
    sudo wget https://github.com/RandomStorm/DVWA/archive/v1.0.8.zip
    

    Lanjutkan lagi command berikut:
    sudo unzip v1.0.8.zip
    sudo mv DVWA-1.0.8/ dvwa/
    cd dvwa/config/
    sudo nano config.inc.php
    

    lalu ganti potongan baris code PHP menjadi seperti berikut ini:
    $_DVWA[ 'db_database' ] = 'dvwa';
    $_DVWA[ 'db_user' ] = 'root';
    $_DVWA[ 'db_password' ] = 'salamdamai';
    

    Setelah itu ketik lagi command untuk masuk ke MySQL (lihat kembali perintahnya di atas). Lalu ketik perintah ini pada mysql.
    create database dvwa;
    

    Sehingga tampak hasil sebegai berikut:


    Lalu ketik “quit” untuk keluar. Selanjutnya akses alamat berikut ini pada browser:
    http://localhost/dvwa/setup.php


    Lalu tekan tombol “Create / Reset Database”. Sehingga tampak hasilnya sebagai berikut:


    Terakhir sebelum testing, restart nginx dengan command:
    sudo service nginx restart
    
  5. TESTING
    Buka browser dan akses ke alamat berikut:
    http://localhost/dvwa/
    Kita akan diminta login terlebih dahulu, masukkan user: admin dan password: password.


    Test 1 : Command Execution
    Masukan teks berikut pada input yang tersedia.
    eval('unlink("index.php");')



    Dan hasil setelah diproses...

    Kamu bisa melihat hasil dari blocking script di atas, terdapat hasil dengan parameter sebagai berikut yang Saya berikan keterangan juga:
    ip=127.0.0.1 <=== Alamat IP yang diserang
    server=localhost <=== Alamat host yang diserang
    url=/dvwa/vulberbilities/exec/ <=== URL yang diserang
    learning=0 <=== status configurasi naxsi.rules untuk variable learning
    total_processed=28 <=== jumlah akses yang diproses
    total_blocked=14 <=== jumlah akses yang diblokir
    zone0=BODY <=== tipe zona, dalam hal ini adalah BODY karena tipe pengiriman data adalah POST
    id0=1001 <== kode atau id serangan yang terdapat pada konfiguras naxsi
    var_name0=ip <=== variable yang digunakan attacker untuk melakukan serangan


    Test 2: SQL Injection
    Masukan teks berikut pada input yang tersedia.
    1' = '1'='1



    Lalu tekan submit. Hasilnya adalah seperti berikut:



    Test 3: XSS
    Masukan teks sesuai yang tampak pada gambar berikut.


    Lalu tekan tombol “Sign Guestbook”. Apa yang terjadi? Tadaaaaaaa!
Huhfffff... selanjutnya??? no.. no.. no.. biarlah kalian-kalian yang membaca tutorial ini yang melanjutkan dan bereksperimen sendiri yachhh!?, Supaya tertantang, hehehhehe... oke deh, sekian dulu untuk tutorial kali ini. Salam damai, Tongam Meyer R. Tampubolon :)

26 August 2015

Cara Mengganti Username Pada Windows 7


Pagi yang cerah secerah hatiku, dikantor baru, meja baru, kursi baru, ATK serba baru... trus... trus... eitss, ada yang terlewatkan, tentunya sebagai Developer senjata yang paling penting dari semua-semua yang baru-baru tersebut adalah Komputer!!!.


Untuk senjata penting Saya yang satu ini, Saya diperlengkapi dengan salah satu komputer laptop dengan spek core i7, memory 16G dan Windows 7 professional, seperti tampak sebagai berikut:




Gambar. Spesifikasi Laptop

Cukup lama juga Saya menantikan laptop ini, sehingga hampir seminggu Saya bengang bengong hanya menatap meja sambil menggambar gambar di kertas bekas biar gag stress walau terlihat stress :(

Ketika laptop sudah Saya terima, selanjutnya Saya mulai install software-software yang Saya butuhkan terutama untuk bidang yang Saya geluti yaitu programming. Setelah instalasi selesai, hampir seminggu Saya nikmati laptop ini, hingga pada akhirnya semangat Saya terhenti ketika melihat tampilan aplikasi Taskmanager seperti ini:

Gambar. Windows Task Manager Dengan Username Yang Salah

Ini jelas bukan kesalahan aplikasinya, ini jelas terjadi kesalahan pengetikan nama Saya pada saat instalasi windowsnya.... arggrrgghhhhh!!! pengen marah rasanya kepada orang IT support yang menginstall laptop Saya ini, tapi apa daya, sebagai orang baru, haruslah pintar-pintar beradaptasi.

Sebagai orang Batak, nama adalah suatu hal yang berharga. Makanya nama-nama orang Batak dibuat sekeren mungkin, bahkan ke bule-bulean. Jadi, kalau sampai salah membuat nama, rasanya kesal sekali, walaupun ini hanya akan tampak di komputer.

Dengan demikian, Saya mulai mencari solusi. Untuk mengganti username, sepertinya susah sekali pada waktu itu, karena kita tidak bisa langsung mengganti username dari control panel "User Account", karena yang akan diganti adalah nama lengkap usernya. Sedangkan jika ingin mengganti username, kebanyakan tutorial akan mengarahkan Saya agar membuat account baru lalu mengarahkan account tersebut agar menggunakan folder pada account dengan username yang salah (maklum setiap user memiliki folder virtual sendiri-sendiri). Cukup sulit, karena Saya juga takut jika apa yang Saya install akan terjadi corrupt jika nantinya harus mengakali dengan cara demikian.

Setelah cari sana sini, akhirnya ketemu juga. Ternyata di windows 7 yang Saya gunakan telah ada tools yang mampu mengubah username yang salah tersebut. Tanpa basa basi mari Saya tunjukkan cara untuk mengaksesnya:



  1. Pertama, kita harus login dengan level sebagai Administrator
  2. Buka Start Menu
  3. Pada kotak search programs and files, Ketik "netplwiz", lalu enter
  4. Maka akan tampak sebagai berikut:


  5. Pilih salah satu user, lalu tombol "Properties" akan aktif, tekan tombol tersebut, sehingga akan tampak sebagai berikut:

  6. Nah selanjutnya tinggal mengganti kotak input yang tersedia sesuai keinginan. Saya mengganti username dengan "Meyer", dan yang lainnya juga sekalian :D

  7. Terakhir tinggal tekan tombol "Ok". Lalu restart komputer.
  8. Setelah windows dibuka kembali dan..... taaaaadaaaaaaaaaa!! akhirnya hasilnya sesuai yang Saya inginkan :D hip hip horeeeeeeee!!!

 Gambar. Windows Task Manager Dengan Username Yang Diinginkan


Oke deh, sekian dulu postingan Saya kali ini. Sekalian mumpung bulan agustus, mau mengucapkan "HUT RI ke 70" semoga pemerintah dan rakyat semakin dewasa menghadapi perbedaan, Bhinneka Tunggal Ika :D Merdeka!!! Salam Damai... 

05 August 2015

Pohon Keputusan Menggunakan Metode C4.5 (Implementasi dengan PHP)

Beberapa hari ini, Saya sedang tertarik dengan salah satu proses data mining, salah satunya adalah membuat pohon keputusan. Salah satu metode yang Saya gunakan untuk membuat aplikasi pohon keputusan adalah metode C4.5. Yang Saya pahami dari metode ini adalah, dimana dengan metode ini kita akan mencari entropy lalu dilanjutkan dengan mencari gain, split info, gain ratio, dsb.

Entropy merupakan pengukuran ketidakpastian rata-rata sekumpulan data untuk mendapatkan suatu hasil dari data baru. Bingung? Yah, Saya juga bingung, namun kalau kamu seorang statistik pastinya mengerti, Saya hanya seorang developer yang mengimplemntasikan rumus-rumus yang diberikan, jadi untuk penjabaran lebih jelasnya silahkan baca-baca referensi dari buku atau Internet. Oleh karena kita langsung saja melihat rumusan yang digunakan untuk mencari entropy yaitu:

Entropy(X) = - (n1/n x log2(n1/n)) + - (n2/n x log2(n2/n)) + - (n3/n x log2(n3/n)) + ... dan seterusnya

X = nama himpunannya
n1... n3 = Merupakan banyaknya suatu kelompok tertentu dari suatu himpunan
n = total himpunan seluruh kelompok

Misalkan ada data (himpunan) dengan nama Programmer sebagai berikut:

Programmer

VB.NET = 3 Orang
C# = 5 Orang
Java = 7 Orang
C++ = 1 Orang
PHP = 20 Orang

Total = 36 Orang

Maka Entropy(Programmer) adalah

- (3/36 x log2(3/36)) + - (5/36 x log2(5/36)) + - (7/36 x log2(7/36)) + - (1/36 x log2(1/36)) + - (20/36 x log2(20/36)) = 1.7684


Implementasi Code PHP:

 private function entropy($values)
 {
  $e = 0;

  $sum = array_sum($values);
  foreach ($values as $value)
  {
   if ($value > 0)
   {
    $e += - ((($value / $sum) * log($value / $sum, 2)));
   }
  }

  return $e;
 }

Dimana $values adalah nilai n1, n2, n3, dst dalam bentuk array, jika dalam contoh di atas, maka cara eksekusinya adalah "echo entropy(array(3, 5, 7, 1, 20));"

Gain merupakan ??? (Ada yang bisa mengartikannya? :D)

Langsung ke contoh saja, hampir mirip dengan data sebelumnya, hanya saja dispesifikasikan lagi:

Programmer

VB.NET = 3 Orang, Dimana Levelnya ada 1 = Senior dan 2 = Junior
 C# = 5 Orang, Dimana Levelnya Ada 2 = Senior dan 3 = Junior
Java = 7 Orang, Dimana Levelnya Ada 5 = Senior dan 2 = Junior
C++ = 1 Orang, Dimana Levelnya Ada 1 = Senior dan 0 = Junior
PHP = 20 Orang, Dimana Levelnya Ada 5 = Senior dan 15 = Junior

Sebelumnya, kita harus mencari entropy semua himpunan, namun kita harus menentukan acuan dari entropy semuanya, apakah kategory  VB.NET, C# dsbnya, atau Levelnya yang dibagi atas Senior atau Junior?

Pada contoh ini, kita memilih Levelnya. Dengan demikian Entropy(Semua) adalah:

Jumlah dengan level senior seluruhnya = 14 Orang
Jumlah dengan level junior seluruhnya = 22 Orang
Total = 36 Orang

Maka Entropy(Semua):

 - (14/36 x log2(14/36)) + - (22/36 x log2(22/36)) = 0.96407


Setelah mendapatkan entropy semua, maka gainnya adalah:

Entropy(Semua) - ((sub n1 / n * entropy(x1)) + (sub n2 / n * entropy(x2)) + (sub n3 / n * entropy(x3)) + .... dst...

Dimana,

sub n1, sub n2, sub n3.... dst = sub total dari suatu kelompok data dalam suatu himpunan
n = total seluruh himpunan data
entropy(x1), entropy(x2), entropy(x3)... dst = nilai sub entropy dari kelompok data

Bingung? mari langsung liat saja implementasi data tersebut.

Misalkan:

X1 = Kelompok VB.NET
entropy(X1) = - (1/3 x log2(1/2)) + - (2/3 x log2(2/3)) = 0.91829
SUB N1 = 1 + 2 = 3

X2 = C#
entropy(X2) = - (2/5 x log2(2/5)) + - (3/5 x log2(3/5)) = 0.97095
SUB N2 = 2 + 3 = 5

X3 = Java
entropy(X3) = - (5/7 x log2(5/7)) + - (2/7 x log2(2/7)) = 0.86312
SUB N1 = 5 + 2 = 7

X4 = C++
entropy(X4) = - (1/1 x log2(5/7)) = 0
SUB N1 = 1 + 0 = 1

X5 = PHP
entropy(X5) = - (5/20 x log2(5/20)) + - (15/20 x log2(15/20)) = 0.81127
SUB N1 = 5 + 15 = 20

 Dengan demikian gain dapat dihitung yaitu:

 0.96407 - ( (3 / 36 * 0.91829) + (5/36 * 0.97095) + (7/36 * 0.86312) + (1/36 * 0) + (20/36 * 0.81127) ) = 0.09593

 Implementasi kode untuk PHP:

 private function gain($entropy_all, $values)
 {
  $total_records = 0;
  foreach ($values as $sub_values)
  {
   $total_records += array_sum($sub_values);
  }

  $gain = 0;
  foreach ($values as $sub_values)
  {
   $sub_total_value = array_sum($sub_values);
   $gain += ($sub_total_value / $total_records * $this->entropy($sub_values));
  }
  $gain = $entropy_all - $gain;

  return $gain;
 }


Dimana $entropy_all adalah E(Semua)
Sedangkan $values adalah nilai array untuk setiap kelompok. Jika diimplementasikan adalah sebagai berikut "echo $this->gain(0.96407, array(array(1, 2), array(2, 3), array(5, 7), array(1, 0), array(5, 15) ));"


Hmmm... karena rumusan penting pada metode ini sudah cukup mewakili didalam proses pengerjaan pohon keputusan dengan metode C4.5, maka artikel ini Saya batasi sampai disini dulu. Masih ada beberapa rumusan-rumusan yang belum dijelaskan namun kamu bisa baca jurnal-jurnal skripsi maupun buku-buku panduan lainnya sebagai PR buat kamu ;)

Akhirnya, Saya mau tunjukkan hasil implementasi beberapa kode PHP di atas menjadi aplikasi full, dimana data sampling nya diambil dari buku dengan judul "DATA MINING" karangan Eko Prasetyo (Halaman 68).






Dan hasilnya tampak sebagai berikut.


Gambar Data



Gambar Hasil Pencarian Akar


Gambar Hasil Akhir "Pohon Keputusan"


Gambar Konversi Hasil Pohon Keputusan Kedalam Bentuk PHP (Otomatis)

Saya juga telah membuat aplikasi versi web, agar kawan-kawan dapat menguji data uji kawan-kawan. Silahkan akses pada link di bawah ini:

http://tongameyerogatman.com/algoritm_c45/index

Jika diantara teman-teman ada yang tertarik untuk konsultasi, silahkan menghubungi Saya. Salam manis, dan salam damai ;)
Tongam Meyer R. Tampubolon


06 April 2015

Memulai dengan Android Studio, Membuat Program "Hello World" di Android

Mungkin sebagian dari anda sudah mengenal Android. Android merupakan sistem operasi yang sangat terkenal dan banyak digunakan pada perangkat smart phone.

Sebagian dari anda pasti sudah banyak yang menggunakan aplikasi-aplikasi yang tersedia untuk dijalankan di android. Misalkan saja permainan (game), dimana pada situs resmi tempat mengunduh (download) yaitu Google Play Store berjuta permainan dengan berbagai ragam dapat diunduh secara gratis! Inilah membuat begitu menariknya android. Selain itu, Google sebagai pemegang hak atas sistem operasi ini, memberikan feedback kepada pembuat aplikasi-aplikasi android tersebut, berupa bayaran yang diberikan untuk setiap aplikasi yang telah menjadi perhatian dan digunakan banyak orang, sehingga banyak developer-developer aplikasi android berlomba-lomba menciptakan atau mengembangkan berbagai bentuk aplikasi.

Nah, mungkin anda sekarang mulai berfikir, yang dulunya merupakan seorang pemakai aplikasi tertentu dan yang asyik menggunakan game pada android, kini anda penasaran, bagaimana sebenarnya aplikasi-aplikasi itu dibuat? Anda pasti senang jika punya aplikasi android sendir bukan?

Baiklah, kali ini Saya mengajak anda untuk membuat salah satu aplikasi sederhana dan paling umum untuk dibuat oleh para pemula, yaitu aplikasi "HELLO WORLD". Namun, sebelum membuatnya, kamu harus mengunduh terlebih dahulu software pengembangan aplikasi android yaitu "Android Studio" disini , baca petunjuk yang ada sebelum mengunduh paket instalasinya.

Setelah kamu berhasil mengunduh atau menginstall aplikasi tersebut pada komputer kamu, maka saatnya kita mulai membuat aplikasi android dengan mengikuti langkah-langkah berikut:

1. Buka Android Studio, akan tampak splash screen Android Studio saat pertama sekali dibuka.



2. Setelah itu, anda akan diarahkan kepada form browsing file project yang sedang berjalan, atau memilih membuat project baru, seperti tampak pada gambar berikut ini.


Namun, untuk menyamakan tujuan kita, maka kita akan membuat project baru terlebih dahulu. Untuk itu silahkan pilih "Start a new Android Studio project".

3. Dengan membuat project baru, maka selanjutnya anda diminta untuk memberikan nilai konfigurasi, silahkan isi nilainya sebagai berikut:

Application Name : HelloWorld
Company Domain : tongam.com
Project Location : < Browse dan tentukan folder dimana lokasi project akan disimpan >


Lanjutkan dengan menekan tombol "Next"

4. Selanjutnya kita akan dihadapkan pada form yang meminta kita untuk menentukan kemanakah tujutan utama aplikasi kita diterapkan. Karena target kita pada smartphone, maka kita pilih saja "Phone and Tablet". Lalu, tentukan juga minimum SDK-nya, kita bersama-sama gunakan "API10: Android 2.3.3 (Gingerbread)", alasan menggunakan SDK ini, karena sudah cukup memadai untuk membuat aplikasi sekedar menampilkan teks "HELLO WORLD", hehehehe. Yang perlu diingat, semakin tinggi SDK yang digunakan, maka semakin tinggi pula spesifikasi smartphone yang sanggup menginstall aplikasi yang dibuat.



Lanjutkan dengan menekan tombol "Next"

5. Pada form selanjutnya, akan meminta anda untuk memilih salah satu layout "Activity". Activity merupakan bagian kontrol utama pada aplikasi android yang berinteraksi dengan user secara langsung.Untuk contoh kali ini, kita memilih "Blank Activity".


Lanjutkan dengan menekan tombol "Next"

6. Sebelum akhir dari konfigurasi, anda akan diminta untuk memberi nama pada activity yang kamu buat. Silahkan isi sesuai dengan data berikut:

Activity Name : MainActivity
Keterangan : (nama class suatu activity, yang berfungsi sebagai controller)
Layout Name : activity_main
Keterangan : (nama layout yang digunakan oleh activity tertentu, yang berfungsi sebagai view yang berinteraksi langsung dengan user)
Title : Hello World
 Keterangan : Judul Aplikasi
Menu Resource Name : menu_main
 Keterangan : Nama file resource untuk menu (berformat XML)



7. Lanjutkan dengan menekan tombol "Finish, dan tunggu hingga project anda selesai dibuat dan tampak seperti gambar berikut.





 *NOTE: Tampilan Android Studio Saya mungkin berbeda dengan anda, Saya memilih theme berwarna hitam abu-abu yang dapat kamu ganti sesuai selera

Baiklah, tahap awal pemanasan sudah kita lakukan, selanjutnya kita mulai ketahap lebih serius, dimana kita akan mulai melakukan perubahan pada isi project yang telah kita buat. Namun sebelum itu, ada baiknya kita terlebih dahulu mengetahui file structure dari project android yang ada pada Android Studio.

Pada sisi sebelah kiri, kamu akan melihat urutan folder-folder atau file-file yang dimulai dengan folder "app" hingga turunan-turunannya seperti representasi berikut:


  • app
    • manifest
      • AndroidManifest.xml
    •  java
      • com.tongam.helloworld
        • MainActivity.java
    •  res
      • drawable
      • layout
        • activity_main.xml
      • menu
      • values
  • Gradle Scripts 

File-file yang sengaja Saya tulis tebal (bold) merupakan file-file penting.

AndroidManifest.xml merupakan file yang berisi konfigurasi aplikasi android.
MainActivity.java  merupakan file yang berisi kode java yang merupakan class suatu activity (controller).
activity_main.xml  merupakan file yang berisi kode xml yang merupakan kode untuk layout user interface (view)

Saya tidak akan membahas lebih dalam struktur file-file tersebut, karena keterbatasan waktu, namun anda dapat konsultasi dengan Saya jika memang ada yang kurang dimengerti.

Oke, kita lanjut lagi. Sekarang kita akan mulai mendesain tampilan aplikasi kita terlebeih dahulu. Silahkan klik file activity_main.xml, maka akan tampak tampilan kurang lebih sebagai berikut (mungkin akan sedikit berbeda dengan apa yang anda lihat).







Pada gambar di atas, ada beberapa bagian penting yang telah Saya tandai yaitu:


  1. Tab Design : Merupakan pilihan mode design, jika anda sudah cukup familiar dengan XML dan mengerti struktur code untuk design tampilan aplikasi di android, maka anda boleh memilih mode "Text". Namun karena tutorial kali ini adalah untuk pemula, maka kita sebaiknya memilih tab "Design".
  2. Layout : Merupakan bagian dasar dari suatu tampilan. Jika kamu punya rumah dan tanaman-tanaman disekitarnya, maka tanah merupakan layout-nya. Bentuk-bentuk layout ada berbagai macam misalkan linear layout (horizontal/vertical), relative layout, dan lain-lain. Pada tutorial ini kita sudah diberikan secara default yaitu relative layout.
  3. Widget : Seperti yang Saya jelaskan tentang layout, di dalam sebidang tanah, anda pasti menaruh berbagai bunga, kendaraan, hingga rumah. Nah, selain tanah yang merupakan dasar suatu benda itu disebut widget. Maka itu posisi widget selalu akan bergantung pada layout. Pada contoh kali ini, silahkan drag and drop widget "Large Text" tepat di tengah layout. 
  4. Property : Kendaraan, rumah, atau benda-benda lainnya yang kita sebut widget pastilah memiliki properti atau atribut, misalkan motor dengan properti warna (color) merah, kapasitas bensin 7 liter, dan sebagainya. Sebelumnya kita telah menambahkan widget "Large Text", klik / seleksi widget tersebut lalu lihat pada bagian property, silahkan cari property dengan nama "id" seperti tampak pada gambar berikut:

    Pada gambar dapat kita lihat nilai property "id" adalah "textView". Anda dapat mengganti nilainya sesuai keinginan, namun akan berpengaruh pada saat memasukkan code program nantinya. Untuk itu, saat ini kita tidak perlu mengganti nilai propertynya.
Tahap design tampilan sudah selesai, bagaimana? mudah bukan? Mungkin bagi anda yang sudah terbiasa dengan editor pemrograman Visual Basic classic ataupun .NET cara design nya adalah hampir sama hanya saja pada android kita harus menentukan jenis layout yang digunakan.

Setelah tahap design selesai, selanjutnya kita memasuki tahap yang sangat sulit yaitu pemrograman. Pemrograman Saya akui memang sulit, karena menyangkut rumusan-rumusan matematika yang kalau tidak tepat maka aplikasi yang dirancang akan dibilang gagal! Tapi anda tidak perlu kuatir, pada tutorial dasar ini, kita tidak memerlukan rumusan matematika, jadi contoh code berikut akan menunjukkan bagaimana antara view yaitu tampilan design yang telah dibuat, dapat di kontrol oleh program yaitu code yang kita buat (controller).

Silahkan buka file "MainActivity.java", Oops! anda lupa filenya dimana? jangan panik, silahkan ulangi lagi baca dari atas. Secara default isi code file tersebut adalah sebagai berikut:


package com.tongam.helloword;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

Pada code di atas, terdapat class java "MainActivity" dengan beberapa baris program didalamnya. Anda tidak perlu membaca semuanya, itu adalah hasil generate oleh Android Studio, yang terpenting untuk diperhatikan adalah baris code yang merupakan method (procedure) dengan nama "onCreate", dimana method ini akan selalu dijalankan pertama sekali pada saat activity dijalankan. Nah, pada contoh program kita, karena activitynya cuma satu, maka saat pertama sekali dijalankan maka activity inilah yang akan dijalankan, dan otomatis method ini juga ini yang pertama sekali dijalankan. Bingung? baiklah, langsung saja kita praktekkan. Silahkan tambahkan atau ganti beberapa baris code hingga method tersebut tampak sebagai berikut:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView textView = (TextView) findViewById(R.id.textView);
        textView.setText("HELLO WORLD, SALAM TONGAM!");
    }

 Perhatikan tulisan yang tebal, berikut penjelasannya:

  1. setContentView(R.layout.activity_main); // untuk menentukan file design mana yang digunakan pada activity (controller) yang berjalan. Disini yang digunakan adalah R.layout.activity_main yang merupakan file "activity_main.xml"
  2.  TextView textView = (TextView) findViewById(R.id.textView); // sebelumnya pada saat men-design telah menambahkan widget "Large Text", agar program mengenal widget tersebut, maka pada program harus dibuat code untuk menemukan widget tersebut pada design yang sudah ditentukan. Dengan perintah "findViewById" aplikasi diperintahkan untuk mencari widget dengan property "id" tertentu, pada contoh ini yaitu "R.id.textView"
  3. textView.setText("HELLO WORLD, SALAM TONGAM!"); // perintah ini akan menset widget yang tertentu dengan teks tertentu. Silahkan ganti "HELLO WORLD, SALAM TONGAM!" dengan teks kesukaanmu.
Akhirnya selesai seluruhnya, mulai dari design hingga pemrograman atau coding-nya. Untuk melihat hasil akhirnya silahkan tekan secara bersamaan "SHIFT+F10" untuk menjalankan emulator android. Jika baru pertama sekali menjalankan emulator, maka akan tampak sebagai berikut:

Pilih pilihan "Launch emulator", pada "Android virtual device" silahkan pilih "Avd-Default". Lalu tekan tombol "OK". Tunggu beberapa saat, mungkin juga cukup lama karena emulator ini akan membuat komputer kamu menjalankan perangkat yang seakan-akan adalah smartphone. Jika anda berhasil, maka anda akan melihat tampilan kira-kira seperti yang ditunjukkan pada gambar berikut:



Dengan munculnya output tersebut di atas, maka dengan demikian berakhir pula tutorial kali ini. Pesan Saya, jangan telalu baku untuk mengikut tutorial tersebut, karena setiap saat aplikasi akan berubah dan tidak ada yang mengikat, apalagi di dunia berbasis teknologi. Jadi research di media online lain juga perlu dilakukan, jadi tetap semangat dan berusaha keras!

Sekian dan terima kasih, salam damai, kiranya Tuhan senantiasa melindungi.


"Tongam Meyer R. Tampubolon, S. Kom."