Cara mudah belajar pemrograman komputer

Minggu, 27 Mei 2018

Cara membuat aplikasi android tanpa coding dalam 5 menit.

Halo sobat programmer.
Kembali jumpa dengan programmer goblog. Kali ini programmer goblog gak akan share tentang coding dan yang berhubungan dengan pemrograman jalur jlimet, tapi kali ini programmer goblog bakal share sedikit pengetahuan tentang gimana sih cara buat aplikasi android dengan gampang tanpa harus bisa pemrograman, as a matter of fact asal kamu bisa click sana click sini, dalam lima menit kamu udah bisa buat aplikasi android yang siap di upload ke google play store. Dan sekalian cara integrasi admob sehingga kamu bisa menghasilkan uang dari google adsense atau dalam hal ini google admob.

Okay, so gimana sih cara buat aplikasi android yang gampang itu?
Kali ini kita akan memanfaatkan layanan gratis dari sebuah website yang menyediakan layanan pembuatan aplikasi android untuk news agregator yaitu appyet.



Oke, langsung aja klik link diatas dan daftar kalau belum punya akun.
Oke kalau sudah silahkan login.

Dibagian kanan atas silahkan klik create app.


Selanjutnya isi data aplikasi yang akan dibuat, seperti nama aplikasi dan package namenya.


Selanjutya klik Create App.

Nah pada halaman berikutnya yaitu pada tab General, kamu bisa upload icon untuk aplikasi kamu.
Disarankan untuk menggunakan gambar dengan format jpg/png dengan resolusi 512x512px.



Jika sudah silahkan klik save changes.

Selanjutnya klik pada tab module untuk menambahkan modul sumber artikel yang akan ditampilkan pada aplikasi kita.
Nah, untuk konten nya, kita memerlukan RSS url dari web yang akan kita ambil content nya.
Dalam contoh ini kita akan coba membajak website dari ResepKoki.id

Nah untuk mengambil RSS url nya, kita perlu mengunjungi website tersebut. Kemudian klik kanan pada halaman website tersebut dan pilih view page source.


Selanjutnya pada halaman source code, carilah link yang bertuliskan rss atau feed

Pada contoh website ini kita mendapatkan URL RSS-nya yaitu https://resepkoki.id/feed/
Silahkan copy url tersebut.

Kemudian kembali pada website appyet.
Pada tab modules tadi, silahkan scroll kebawah hingga pada bagian new module.
Dan klik new Feed (Rss/Atom).

Pada halaman berikutnya yaitu create module, silahkan input nama modulnya.


Kemudian klik save.
Maka kita akan dibawa ke halaman berikutnya untuk menempatkan URL Rss yang kita copy tadi.
Silahkan paste url rss pada kolom paling atas.


Kemudian klik save.
Nah sudah jadi satu module. Klik pade back to modul pada bagian kanan atas.

Kamu bisa menambahkan beberapa website lain jika kamu suka, atau cukup dengan satu website saja tidak masalah.

Jika sudah selesai menambahkan modul modul yang diinginkan, silahkan selanjutnya kita beralih ke menu selanjutnya, disini kita akan loncat ke menu Monetize untuk menempatkan kode iklan admob.

Selanjutnya pada tab monetize, pilih Admob pada bagian ad type.
dan masukkan kode Admob Banner dan Admob Interstitial pada kolom yang telah disediakan.

Selanjutnya silahkan klik Save Changes.


Nah sampai di tahap ini plikasi sudah selesai dibuat.
Untuk mendownload file APK nya silahkan klik pada tab "Build"

Pada halaman build, silahkan klik submit to build.





Tunggu beberapa saat dan refresh halaman tersebut.
Jika proses build telah selesai, maka akan muncul link download file apk Aplikasi kita, silahkan download file apk tersebut.


Nah, jika sudah ter download, maka kamu langsung bisa install aplikasi tersebut ke Hp android sobat programmer. Untuk ambil screenschot atau cuma sekedar mencoba aplikasinya.

file apk yang di download tadi bisa langsung kita upload ke google play store melalui google play developer console sobat programmer semua.

Gimana, gampang kan cara buat aplikasi android nya, tapa ngoding, cuma 5 menit sudah bisa buat aplikasi android sendiri.

Meski di tulisan ini programmer goblog mengambil kontent dari website orang lain, bukan berarti programmer goblog menyarankan untuk mengikuti hal tersebut, ini hanya sebagai contoh, untuk di dunia nyata sobat bisa memakai website sendiri, atau bisa ambil RSS URL blog punya programmer goblog ini, kalau ini URL nya di ambil gak masalah.. :D

So, sampai disini tulisan programmer goblog kali ini tentang aplikasi android, selanjutnya silahkan sobat kreasikan sendiri.

"Lebih baik hidup terasingkan daripada menyerah pada kemunafikan.."
Stay calm and keep coding.

Selasa, 16 Mei 2017

Buat handphone temen kamu Tewas Dengan Trik ini



Halo sobat programmer GoBlog, kesibukan ngoding jadi sering lupa update tulisan untuk sekedar menyapa kawan-kawan programmer.
Lewat tulisan kali ini programmerGoBlog mau ngasih sedikit mainan nih, ngerjain handphone temen kita dengan membanjiri wa/line atau apalah apalah dengan ribuan pesan yang kita kirim otomatis dari komputer kita.
Yuk, tanpa banyak pembukaan.
Trik sepele ini bisa kita gunakan baik di sistem operasi windows ataupun linux.

Okeeeh..
yuk, bagi yang miara OS Linux kita bakal memanfaatkan Linux ShellScript (bash script)

tapi sebelumnya kita perlu install satu software dulu, yuk ctrl+alt+t a.k.a open terminal.

masuk sebagai super user, install xdotool
Serah mau pake paket manajer apa,
apt-get install xdotool
buat yang pake debian/ubuntu/lmint dll turunan debian
sudah itu buka gedit, atau text editor apapun lah yang penting text editor, asal jangan pake mikocok word aja.
---------------

#!/bin/bash

for (( i = 0; i < 1000; i++ )); do
 WID=`xdotool search --name "line" | head -1`
 xdotool windowactivate $WID
 sleep 1
 xdotool type ":)" 
 xdotool key Return
done


---------------
simpen dengan nama basing.sh
eh iya, ini cuma bekerja di line versi desktop yah, atau line untuk google app (ya iya lah, kan jalanin nya dari komputer)
ngerti lah maksud dari baris per baris kode skrip itu, tapi bagi yang perlu penjelasan nih dijelasin.
baris pertama setelah /bin/bash
adalah baris untuk memulai perulangan for dari 1 = 1000
baris dibawahnya, menggunakan xdotool untuk nyari jendela aplikasi yang punya titel "line" kalo pake wa versi desktop, ganti aja dengan nama browsernya, misal "chrome" atau ganti aja "WhatsApp"
nah setelah window dengan titel itu ditemuin, masukin deh ke variable WID
habis itu di baris berikutnya aktifin atau buat window itu aktif.
baris dibawahnya, untuk ngasih jeda satu detik sebelum lanjut ke perintah di baris berikutnya.
baris berikutnya nyuruh si xdotool ini untuk ngetik smiley
baris dibawahnya untuk nyuruh xdotool mencet tombol "ENTER" buat ngirim smileynya.
nah smiley yang diketik dan dikirim ini sebanyak kondisi for loop yaitu dalam contoh script diatas 1000 kali..

sekarang kalo udah disimpen, tarik lagi terminalnya, kita ganti permission untuk basing.sh biar executeable..
diterminal di lokasi yang sama dengan tempat kita nyimpen file tadi, ketik
sudo chmod 777 basing.sh
dengan super user tentunya..
Nah sekarang buka deh line versi desktop atau wa versi web dan klik nama temen yang mau di bom pake chat ngawur kita ini.

abis itu balik ke terminal dan jalanin scriptnya,
caranya? ah sok gak tau..
./basing.sh
di terminal ketik aja begitu..







==================================================================

Sekarang buat yang gak pake linux nih, buat yang peke wedus mau wedus 7 wedus 8 wedus 10 serah dah..
kali ini untuk windows kita akan memanfaatkan windows shellscript dibantu dengan javascript..
yuk, buka aja notepad atau text editor mana aja deh yang disuka.
ketik kode berikut.



var oShell = WScript.CreateObject("WScript.Shell");
WScript.sleep(3000);
for(i=0;i<1000;i++){
  oShell.sendKeys(":{)}");
  oShell.sendKeys('{ENTER}');
  WScript.sleep(1000);
 }


Simpan dengan nama basing.js
gausah dijelasin yak, kurang lebih sama dah sama penjelasan diatas..

baris keempat apaan yak? itu sama aja bentuk smiley.. :)
cuma karena karakter tutup kurung nya harus di masukin dalem {} ini makanya jadi begitu bentuknya.
ininya ngono lah, hasil akhirnya jadi emot senyum..

cara makenya gimana?
sama, buka aja line desktop atau wa versi web, abis itu pilih deh temen yang mau di chat.
klik dua kali file basing.js yang barusan kita simpen dan langsung aktifin atau buka jendela/aplikasi line atau wa versi web nya, dan tempatin kursor ditempat kita ngetik pesen. tunggu 3 detik dan keliatan hasilnya..

baiklah, selamat bersenang senang yak, awas bisa meledak hengpon kawan nya, atau malah kita di blok.. :D



Selasa, 30 Agustus 2016

Rute dengan banyak tujuan dengan google map api

Menanggapi pertanyaan di komentar pada postingan ini.
Mengenai bagaimana menentukan rute untuk tujuan lebih dari satu titik pada google map api.

Berikut script nya.


<!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>'],
         ['Rumah Sakit Advent',-5.392718, 105.261890,3,'<h4>Rumah Sakit Advent</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'; // Titik Start
    var end = '-5.3745833,105.2425024'; //Titik Akhir

    //================Tambahan dari tutorial sebelumnya==========================
    var daftartujuan = ["-5.358725,105.233413", "-5.364505,105.243442", "-5.3745833,105.2425024","-5.392718, 105.261890"];
    var jalur = [];
    for (var i = 0; i < daftartujuan.length; i++) {
        var address = daftartujuan[i];
        if (address !== "") {
            jalur.push({
                location: address,
                stopover: true
            });
        }
    }
    //===========================================

    var request = {
      origin:start,
      destination:end,
      //============Uni juga tambahan untuk jalur=======

           waypoints: jalur,
            optimizeWaypoints: false, //true untuk membiarkan google menentukan jalur terpendek. false untuk jalur berdasarkan uturan yang kita tentukan

      //===================
      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>

Semoga bermanfaat.

Apakah Mungkin untuk menerapkan algoritma tertentu pada proses pencarian rute pada google map api

bagaimana membuat pencarian rute terpendek menggunakan dijkstra? dengan titik awal di tandai dan titik tujuan di combo box. kalo bisa di post ke blog ya mas, terima kasih sebelumnya. :)

Halo sobat programmer, kembali lagi dengan coretan dari programmer goBlog.
Tulisan kali ini menanggapi email dari salah satu pembaca blog programmerGoBlog yang menanyakan perihal penerapan algoritma dijkstra dalam penentuan rute terpendek pada google map api v2.

Sejauh pengetahuan programmerGoBlog, untuk menggunakan google map api kita hanya bisa menggunakan apa yang sudah disediakan oleh google map, termasuk algoritma yang digunakan adalah algoritma milik google itu sendiri. Yang mana kita tidak bisa merubah atau memilih algoritma mana yang akan kita gunakan dalam penentuan jarak antar dua lokasi pada google map.
Karena pada dasarnya ketika kita menggunakan api, kita hanya meminta rute dari titik A ke titik B, dan yang menentukan rute terpendek adalah google map sendiri tanpa kita bisa ikut campur tangan terhadap algoritma yang mereka gunakan.

Sebagai tambahan pengetahuan, saya rasa google tidak menggunakan algoritma dijkstra untuk menentukan rute --atau setidaknya bukan dijkstra asli alias sudah hasil modifikasi mereka (red: google map). Programmer goBlog berasumsi demikian dikarenakan algoritma dijkstra itu sendiri terlalu simpel untuk diterapkan pada skala ini. Dalam kasus algoritma penentuan rute pada google map, penulis meyakini bahwa algoritma yang digunakan adalah A* yaitu sebuah algoritma yang banyak diterapkan untuk pencarian jalur dan graph traversal.

Jadi saya yakin sobat sudah bisa menyimpulkan dari penjelasan diatas bahwa kita tidak mungkin menerapkan algoritma tertentu ketika menggunakan google map api untuk menentukan rute, sebab google telah menentukan algoritma mereka sendiri dan kita tinggal menerima hasil dari algoritma tersebut dan menampilkan rute di peta google.

Demikian coretan singkat dari programmer goBlog kali ini, semoga bisa menjawab pertanyaan dari sobat semua yang mungkin memiliki pertanyaan yang sama atau mirip dengan ini.

Terimakasih telah berkunjung ke gubuk programmer GoBlog.

Senin, 09 Mei 2016

Koneksi database MySQL dengan CodeIgniter (CI)

Kali ini kita akan melanjutkan Tutorial Codeigniter, pada tulisan ini kita akan membahas Koneksi database MySQL dengan CodeIgniter (CI).
Pada tutorial sebelumnya kita telah belajar bagaimana cara instalasi codeigniter.
Sebelum kita menlanjutkan tentang menhubungkan codeigniter dengan MySQL kita akan mengenal terlebih dahulu konsep MVC (Model-View-Control) yang diusung oleh codeigniter.
Oke apa itu MVC? terlepas dari pengertian MVC secara resmi, MVC menurut programmer GoBlog adalah sebuah konsep untuk pengorganisasian/pengelompokan file-file berdasarkan fungsi dan kegunaanya. Seperti konsep MVC pada codeigniter yaitu memisahkan fungsi Pengolahan data (Model), fungsi kontrol alur data oleh Controller, dan fungsi untuk menampilkan data oleh View. Meskipun fleksibilitas dari codeigniter memungkinkan kita untuk tidak mengikuti konsep MVC ini, namun agar kita lebih mudah dalam pengorganisasian file ada baiknya kita mengikuti juga konsep MVC ini. Mengapa saya katakan kita bebas untuk memilih tidak mengikuti konsep MVC ini? karena kita bisa meletakkann fungsi view di controller, kita bisa meletakkan fungsi model juga pada controller.
Namun pada tulisan ini kita akan mencoba mengadopsi konsep MVC ini. Tidak perlu pusing, yang perlu kita pahami adalah, semua yang berhubungan dengan tampilan ada di View, semua yang berhubungan dengan pengolahan data maupun database kita serahkan pada model, dan controller kita gunakan untuk menggabungkan data yang diperoleh dari model dengan view.

Oke kita lanjut ke praktek.
Pada tulisan ini penulis mengasumsikan bahwa anda sudah tahu cara instalasi codeinginer, jika belum silahakan baca tutorial programmer goblog sebelumnya tentang cara instalasi codeiniter disini.

kita mulai dengan membuat database dengan nama 'website' dan buat satu table didalamnya dengan nama 'artikel'

-----------------------------SQL QUERY-------------------------------------------
create database website;
use website;
create table artikel(
 id_artikel int not null auto_increment primary key,
 judul_artikel text not null,
 isi_artikel text
);

------------------------------End of Query-----------------------------------------


sintak sql diatas akan membuat database dan tabel serta field untuk tabel tersebut, untuk tutorial sederhana ini kita hanya akan menggunakan id_artikel, judul dan isi artikel.

untuk melakukan koneksi database terlebih dahulu kita harus melakukan pengaturan koneksi databse di file application/config/database.php


selanjutnya kita buat contoller terlebih dahulu.
buat file php dengan nama Controllersaya.php dan simpan didalam folder application/controller/



Karena Codeigniter juga menganut konsep pemrograman berorientasi object atau OOP maka kita membuat sebuah class Controllersaya yang merupakan turunan (extends) dari class CI_Controller.

selanjutnya didalam file controller kita tadi (didalam class) kita buat function untuk mengambil semua data di tabel artikel.


public function artikel(){
   $this->load->model('modelsaya'); // Baris ini akan me-load file modelsaya.php
   $data['dataartikel'] = $this->modelsaya->ambildataartikel();
   /*
    Baris diatas akan mengambil data dari function ambildataartikel dan memasukkanya kedalam array data dengan key 'datartikel'
   **/

   $this->load->view('viewsemuaartikel',$data); // bari ini akan memanggil file viewsemuaartikel.php dan mengirim data $data;
  }


selanjutnya buat file model yang akan bertugas mengolah data (menjalankan query untuk mengambil data dari database)
pertama buat file php dengan nama Modelsaya.php dan simpan di application/model

dan file modelsaya.php yang baru kita buat ini adalah turunan dari class CI_Model.
kemudian buat function yang akan menangani query mengambil semua data dari table artikel.



selanjutnya pada file controllersaya.php tepatnya didalam function artikel kita akan memanggil fuction ambildataartikel di file Modelsaya.php

selanjutnya kita akan membuat file view yang akan menangani/menampilkan data.
pertama buat file viewsemuaartikel.php dan simpan di application/views



baiklah mari kita cek dengan membuka browser dan akses url http://localhost/mysite/index.php/nama_controller/nama_function
contoh: http://localhost/mysite/index.php/controllersaya/artikel



apa yang muncul? halaman kosong? yups, sebab database kita masih kosong.
mari kita coba isi beberapa baris kedalam database kita.


------------------------------------------------SQL Query-----------------------------------------------------
use website;
insert into artikel (judul_artikel,isi_artikel) values ('Judul Artikel 1', '<p> ini isi artikel 1</p>');
insert into artikel (judul_artikel,isi_artikel) values ('Judul Artikel 2', '<p> ini isi artikel 2</p>');
insert into artikel (judul_artikel,isi_artikel) values ('Judul Artikel 3', '<p> ini isi artikel 3</p>');
insert into artikel (judul_artikel,isi_artikel) values ('Judul Artikel 4', '<p> ini isi artikel 4</p>');
insert into artikel (judul_artikel,isi_artikel) values ('Judul Artikel 5', '<p> ini isi artikel 5</p>');

-------------------------------------------------End Of SQL Query ---------------------------------------------


refresh halaman web kita tadi.
nah muncul kan daftar artikelnya.



pada contoh diatas kita menggunakan fasilitas db->get('table_name') punya si codeigniter, namun codeigniter bukan framework yang kaku sehingga kita harus menggunakan fasilitas serta aturan milik CI, kita juga bisa menggunakan custom query untuk mengambil data dari database.
Contoh penggunaan custom query ini akan kita terapkan di langkah selanjutnya yaitu menampilkan 1 artikel dari kumpulan artikel halaman pertama tadi.

Pertama buka controller 'Controllersaya.php' yang kita buat sebelumnya, tambah lagi satu function dibawah function artikel.

kita beri nama satuartikel.

-----------------------------------------function satuartikel-------------------------------------------------------
public function satuartikel($idartikel='')
  {
   $this->load->model('modelsaya');
   $data['dataartikel'] = $this->modelsaya->ambilsatuartikel($idartikel);
   /*
    Baris diatas akan mengambil data dari function ambilsatuartikel (pada file Modelsaya.php) dan memasukkanya kedalam array data dengan key 'datartikel'
   **/
   $this->load->view('viewsatuartikel',$data); // bari ini akan memanggil file viewsatuartikel.php dan mengirim data $data;

  }

----------------------------------------end of script satuartikel-----------------------------------------------------


selanjutnya buka file Modelsaya.php dan tambahkan function ambilsatuartikel()

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

public function ambilsatuartikel($idartikel='')
  {
   $this->load->database();
   $hasilQuery = $this->db->query("SELECT * FROM artikel where id_artikel=$idartikel");
   /** Perhatikan perbedaan baris ini dengan yang ada di function ambildataartikel diatas. */

   return $hasilQuery->result();

  }

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


terakhir buat file viewsatuartikel.php dan simpan di folder application/view
untuk menghemat waktu, isinya copas dari file view sebelumnya juga boleh.

dan untk mencoba mengakses satu artikel di browser kita maka ikuti format URI berikut.
http://localhost/mysite/index.php/nama_controller/nama_function/argumen_function
jadi dalam contoh kita, maka urlnya adalah http://localhost/mysite/index.php/controllersaya/satuartikel/1

http://localhost/mysite/index.php/  : adalah url website
controllersaya : adalah nama controller nya
satuartikel  : adalah function didalam controller yang ingin kita panggil
1 : adalah variable atau nilai yang akan kita kirim kedalam function tersebut, dalam hal ini adalah idartikel.

silahkan dicoba ganti angka di belakang sesuai dengan idartikel yang akan diakses.

demikian catatan singkat si programmerGoBlog kali ini.
apabila ada pertanyaan kritik saran silahkan tinggalkan jejak di kolom komentar..

Popular Posts

Recent Posts

Unordered List

Pages

Kunjungan

Diberdayakan oleh Blogger.