Senin, 25 Desember 2023

Meningkatkan Kemampuan Google Docs Dengan Menggunakan Google Apps Script

Pengenalan Google Apps Script


Google Docs adalah aplikasi web yang berfungsi untuk mengolah kata (fungsinya mirip Microsoft Word). Google Docs cocok digunakan untuk membuat dokumen yang memiliki struktur baku seperti laporan, skripsi, makalah dan lain-lain.


Dengan fitur yang cukup lengkap (hampir menyamai Microsoft Word), ternyata Google Docs masih dapat kita tingkatkan kemampuannya agar lebih keren dengan menggunakan Google Apps Script.


Google Apps Script adalah platform (sarana/wadah/tempat) yang berfungsi untuk meningkatkan fungsionalitas (kemampuan) aplikasi web miliki google (google docs, google sheets, dan lain-lain) dengan menggunakan bahasa pemrograman. Bahasa pemrograman yang digunakan dalam Google Apps Script adalah JavaScript.


Untuk menggunakan Google Apps Script dalam Google Docs caranya sangat mudah, yaitu sebagai berikut:

  1. buka file Google Docs yang ingin dipasangi Google Apps Script;
  2. arahkan kursor ke bagian kiri atas (kita bisa melihat terdapat banyak menu yang tersedia, diantaranya yaitu: File, Edit, View, Insert, Format, Tools, Extensions dan Help).
  3. klik menu ekstensions (jika menggunakan pengaturan bahasa Inggris) atau ekestensi (jika menggunakan pengaturan bahasa Indonesia);
  4. kemudian, klik Apps Script (istilah Google Apps Script atau Apps Script pada pembahasan ini merujuk pada hal yang sama).
  5. setelah diklik, maka akan muncul layar Apps Script yang sudah siap digunakan.

Penulisan Kode di Apps Script

Dalam layar Apps Script, terdapat kode awal yang muncul yaitu sebagai berikut:
function myFunction() {
}

Hapus semua kode awal yang ada, karena kode awal tersebut hanya template saja. Selanjutnya, Ketik kode berikut ini:
functioncoverMakalah() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  body.insertParagraph(0, "JUDUL SKRIPSI YANG DIBUAT UNTUK MEMENUHI SYARAT KELULUSAN S1")
      .setHeading(DocumentApp.ParagraphHeading.HEADING1);
}

Pengenal Function dan Camel Case

Penjelasan Kode Apps Script:
function coverMakalah() {

Sebagaimana kita ketahui, bahwa Apps Script ini menggunakan bahasa pemrograman JavaScript. Dalam bahasa pemrograman JavaScript, function adalah blok kode (rangkaian kode) yang berisi kumpulan baris kode yang dijalankan dalam satu kesatuan.

Saat ini, kita sedang membuat function dengan nama coverMakalah. Untuk penamaan suatu function sebenarnya bisa bebas (dengan beberapa persyaratan), tetapi untuk saat ini kita akan menggunakan nama tersebut untuk function yang kita buat.

Perhatikan nama function tersebut, dalam JavaScript terdapat konvensi (kesepakatan bersama) terkait penamaan function, yaitu dengan menggunakan Camel Case. Camel Case adalah gaya penamaan tanpa menggunakan spasi, yang mana huruf setiap awal kata menggunakan huruf kapital kecuali huruf pada kata pertama. Contoh: coverMakalah, daftarIsi atau daftarPustaka  

Selanjutnya, perhatikan juga setiap function wajib diikuti dengan tanda kurung buka dan kurung tutup. Setelah tanda kurung buka dan kurung tutup, maka kita ketik tanda kurung kurawal buka untuk mulai menuliskan kode pada function yang sedang kita buat.

Pengenal Variabel dan Indentasi

Penjelasan Kode Apps Script:
  var doc = DocumentApp.getActiveDocument();

Bila kita perhatikan, penulisan var doc sedikit masuk kedalam (seperti ada spasi) jika dibandingkan dengan penulisan kata function yang sebelumnya kita tulis. Spasi tersebut bernama indentasi. 

Indentasi adalah posisi penulisan yang sedikit masuk kedalam. Pada saat ini, Apps Script secara otomatis memberikan indentasi untuk menandakan bahwa kode yang sedang dibuat merupakan bagian dari blok kode function. Dengan adanya indentasi ini, kita dapat mengetahui bahwa kode yang sedang kita ketik merupakan satu kesatuan bagian dari function.

Dalam JavaScript, kode var merupakan kata kunci yang berfungsi untuk membuat variabel. Apa yang dimaksud dengan variabel? Variabel adalah wadah (tempat) untuk menyimpan suatu data. 

Saat ini, kita sedang membuat sebuah variabel bernama doc. Variabel ini digunakan untuk menampung data berupa referensi file Google Docs yang sedang aktif saat ini. Hal ini bisa terlihat jelas dari kode yang diinput setelah tanda sama dengan, yaitu:
DocumentApp.getActiveDocument();

Pengenalan Method

Penjelasan Kode Apps Script:
DocumentApp.getActiveDocument();

Kode tersebut berisi perintah untuk memberitahu Apps Script bahwa dokumen yang akan kita gunakan (akan kita ubah isinya) adalah file dokumen Google Docs yang saat ini sedang dibuka.

Penjelasan Kode Apps Script:
  var body = doc.getBody();

Setelah menentukan file dokumen mana yang akan kita gunakan, selanjutnya kita akan menentukan bagian mana yang akan kita ubah isinya. Dalam Google Docs, sebenarnya suatu dokumen terdiri dari beberapa bagian (struktur) diantaranya, yaitu header, body dan footer.

Saat ini, kita akan mengubah isi dari body. Untuk melakukan hal tersebut, maka kita buat variabel untuk menampung data yang berisi referensi bagian dokumen yang akan diubah (bagian yang akan diubah body).

Untuk penamaan variabel sebenarnya bebas, tapi direkomendasikan untuk membuat nama variabel yang representatif menggambarkan data yang ditampungnya, oleh sebab itu nama variabel yang dibuat bernama body. Untuk membuat variabel bernama body dalam Apps script, maka kita ketik kode: var body

Sebelumnya, kita telah membuat variabel doc untuk menampung data referensi file Google Docs yang akan kita ubah. Oleh sebab itu, sekarang akan kita gunakan data dalam variabel tersebut diikuti dengan method, yaitu .getBody() untuk memberitahu bahwa bagian dokumen yang akan kita ubah adalah bagian body.

Method adalah aksi yang dapat diterapkan pada objek. Dalam Apps Script, terdapat ratusan method yang dapat diterapkan pada objek, sehingga objek dapat kita ubah secara leluasa.

Saat ini, variabel doc merupakan objek yang akan kita terapkan method .getBody() untuk memberitahu bahwa bagian dokumen yang akan kita ubah adalah bagian body.

Pengenalan Parameter

Penjelasan Kode Apps Script:
  body.insertParagraph(0, "JUDUL SKRIPSI YANG DIBUAT UNTUK MEMENUHI SYARAT KELULUSAN S1")

Kita telah membuat variabel body untuk menyimpan data mengenai bagian yang akan kita ubah (bagian yang kita ubah adalah bagian body dari dokumen Google Docs). Selanjutnya, kita gunakan variabel tersebut diikuti dengan method .insertParagraph untuk menyisipkan paragraf pada dokumen tersebut.

Method .insertParagraph memiliki dua parameter. Parameter pertama menunjukan indeks posisi baris dan parameter yang kedua menunjukkan teks yang akan ditulis sebagai paragraf. Pada kode tersebut, kita memasukkan angka 0 yang artinya baris ke-1 untuk mengisi parameter pertama.

Dalam bahasa pemrograman, nilai indeks 0 menunjukan urutan ke-1. Oleh sebab itu, nilai indeks 1 = urutan ke-2, nilai indeks 2 = urutan ke-3 dan seterusnya.

Selanjutnya, untuk parameter kedua kita isi dengan "JUDUL SKRIPSI YANG DIBUAT UNTUK MEMENUHI SYARAT KELULUSAN S1" Perhatikan, bahwa parameter kedua diapit dengan tanda petik.

Dalam bahasa pemrograman, data berbentuk string (data berbentuk teks harus diapit dengan tanda petik). Hal tersebut bertujuan untuk membedakan antara data berbentuk number (dapat digunakan untuk operasi matematika) dengan string (tidak dapat digunakan untuk operasi matematika). 

Jika kita menulis "1" (dengan tanda petik) meskipun data berbentuk angka, tetapi akan dianggap sebagai teks (sehingga tidak dapat digunakan untuk operasi matematika).

Penjelasan Kode Apps Script:
      .setHeading(DocumentApp.ParagraphHeading.HEADING1);

Sebenarnya method .setHeading adalah sambungan dari method .insertParagraph dan bisa langsung disambung penulisannya. Namun, jika dipaksakan kode akan terpotong dan kurang enak dilihat, sehingga untuk memudahkan membaca kode, maka sambungan kode disimpan dibawah.

Dengan menggunakan method .setHeading maka paragraf yang dibuat akan menerapkan gaya tulisan heading1 (Judul dokumen).

Untuk mengakhiri blok kode function yang sebelumnya diawali kurung kurawal buka, maka kita ketik kurung kurawal tutup diakhir blok kode. 

Menjalankan Kode Apps Script

Setelah kita berhasil menulis kode tersebut, klik simpan (Save project) dan kita akan coba jalankan kode yang telah dibuat dengan menekan tombol jalankan (run)

Perlu menjadi catatan, bahwa semua kode yang kita ketik, telah kita ketahui kegunaannya, sehingga dipastikan aman tanpa adanya potensi virus dan lain-lain yang membahayakan. 

Oleh sebab itu, ketika kita akan menjalankan kode yang telah kita buat, apabila Apps Script meminta izin, maka dapat kita izinkan serta mengabaikan peringatan yang ada (karena kita telah mengetahui seluruh arti kode-kode yang telah kita ketik) dengan menekan Review Permission kemudian pilih akun google yang berisi file Google Docs dan Apps Script yang akan dijalankan.

Jika muncul tulisan Google hasn't verified this app kita dapat mengabaikannya, karena kode yang akan kita jalankan sudah kita verifikasi dulu secara manual oleh kita sendiri.

Klik tombol advanced dan klik Goto Nama File Google Docs yang kita miliki (unsafe). Selanjutnya, klik Allow. Setelah kita memberikan akses Apps Script untuk menjalankan kode yang telah dibuat, maka kode akan berjalan sesuai dengan perintah-perintah yang kita ketik dalam kode tersebut.

Selamat, kita telah berhasil menjalankan kode pertama dengan menggunakan Google Apps Script. Perjalanan kita untuk meningkatkan kemampuan Google Docs dengan menggunakan Google Apps Script masih panjang, namun jangan menyerah, mari terus belajar.

Baca selengkapnya »

Senin, 17 Juli 2023

Dasar-Dasar Jaringan Komputer

Mengenal Perbedaan Bit dan Byte


Apakah Anda mengetahui ternyata data-data yang tersimpan dalam komputer, perintah-perintah yang diproses oleh komputer dan data-data yang ditransmisikan (dikirim dan diterima) melalui jaringan komputer, sebenarnya hanya sekumpulan angka 0 dan angka 1? Memang sulit dipercaya tapi itulah kenyataannya.


Dalam bidang komputer, angka 0 dan angka 1 disebut sebagai bilangan biner (dalam bahasa Inggris disebut binary digit). Binary digit adalah bilangan yang hanya terdiri dari dua kemungkinan angka saja, yaitu angka 0 dan angka 1. 


Setiap Binary digit (disingkat bit) hanya dapat menampung satu angka saja dari dua kemungkinan angka, yaitu angka 0 saja atau angka 1 saja. Dalam prakteknya, setiap perintah yang kita input kedalam komputer, perintah tersebut akan dikelompokkan menjadi kode. 1 kelompok kode terdiri dari 8 bit.


Ketika kita menekan huruf A pada keyboard, maka keyboard akan mengirimkan kode kedalam CPU komputer, yaitu 01000001 (abaikan dulu darimana kode ini berasal). Perhatikan, kode tersebut terdiri dari 8 bit. Mengapa 8 bit? Alasannya, karena dalam kode tersebut terdapat delapan digit kombinasi angka 0 dan angka 1. Sekarang mulai pahamkan?


Dalam bidang komputer, 1 kelompok kode yang terdiri dari 8 bit disebut byte (lihat perbedaan penulisannya). Oleh sebab itu, maka dapat kita katakan bahwa 8 bit = 1 byte atau sebaliknya, yaitu 1 byte = 8 bit. Berdasarkan pengetahuan tersebut, maka dapat kita katakan juga bahwa 16 bit = 2 byte, 24 bit = 3 byte dan seterusnya. Dalam bahasa Indonesia byte diterjemahkan menjadi bita (byte = bita).


Terdapat bermacam-macam kode yang digunakan oleh manusia untuk mengirimkan perintah kedalam kode yang dimengerti oleh komputer. Salah satu kode yang digunakan mengacu pada American Standard Code for Information Interchange (ASCII).


Media Transmisi Data


Setelah data diubah menjadi kelompok-kelompok kode bit, maka kode-kode tersebut diubah menjadi sinyal untuk ditransmisikan melalui jaringan komputer dengan bantuan media transmisi data. Media transmisi data bisa menggunakan kabel atau tanpa kabel (wireless).

Media transmisi data berbentuk kabel, misalnya kabel coaxial, kabel UTP (Unshielded Twisted Pair) dan kabel fiber optik. Media transmisi data berbentuk wireless misalnya infra merah dan gelombang radio.

Media transmisi data tersebut mengirimkan dan menerima data dalam bentuk yang berbeda-beda tergantung media (sarana) yang digunakan:
  1. kabel coaxial dan kabel UTP mentransmisikan data dalam bentuk sinyal elektrik;
  2. kabel fiber optik mentransmisikan data dalam bentuk sinyal cahaya;
  3. wireless mentransmisikan data dalam bentuk sinyal infra merah atau gelombang radio melalui udara. 

Mengenal Perbedaan Bandwidth dan Throughput
Pernahkah Anda menerima brosur iklan, dari suatu perusahaan penyedia jasa internet (Internet Service Provider) yang menawarkan kecepatan internet sampai 100 Mbps? Apakah arti dari 100 Mbps tersebut? Ketika suatu perusahaan penyedia jasa internet menyebutkan kecepatan 100 Mbps (Mega bit per second), hal tersebut mengacu pada bandwidth.

Bandwidth adalah kecepatan maksimum yang dapat dicapai untuk melakukan transmisi data dalam waktu satu detik. Artinya, jika suatu perusahaan penyedia jasa internet menawarkan kecepatan 100 Mbps, maka kecepatan maksimum transmisi data yang dapat dicapai, yaitu 100 Mega bit per detik.

Perlu diketahui bahwa:
1 mega bit = 1.000.000 bit
100 mega bit = 100.000.000 bit (seratus juta bit)
Artinya, kecepatan maksimum dalam waktu satu detik, mampu mentransmisikan data sebanyak 100.000.000 kombinasi angka 0 dan angka 1. Perlu diperhatikan, bahwa kecepatan internet biasanya menggunakan satuan bit, bukan Byte (8 bit).

Apakah Anda memperhatikan, bahwa kami beberapa kali menebalkan (bold) kata kecepatan maksimum? Didunia ini sulit sekali untuk mencapai kesempurnaan. Begitu pula dalam hal kecepatan internet.

Jika bandwidth adalah kecepatan maksimum, maka throughput adalah kecepatan sebenarnya yang dicapai untuk melakukan transmisi data dalam waktu satu detik pada kondisi tertentu

Ada beberapa kondisi yang mempengaruhi throughput, misalnya spesifikasi laptop yang kita gunakan (internetnya kencang, tapi laptopnya lemot), topologi jaringan, tipe data yang ditransfer dan banyaknya pengguna dalam jaringan tersebut.

Sekarang kita sudah paham, intinya bandwidth adalah kecepatan maksimum, sedangkan throughput adalah kecepatan sebenarnya yang terjadi pada kondisi tertentu.

Baca selengkapnya »

Selasa, 20 Juni 2023

Profil dan Sejarah Kecamatan Cililin (Update 23-06-2023)

Profil Kecamatan Cililin


Kecamatan Cililin adalah salah satu kecamatan yang terdapat di Wilayah Kabupaten Bandung Barat. Berdasarkan aspek kewilayahan, Kecamatan Cililin terdiri dari 11 (sebelas) desa, yaitu sebagai berikut:

1. Desa Cililin;

2. Desa Karangtanjung;

3. Desa Batulayang;

4. Desa Budiharja;

5. Desa Mukapayung;

6. Desa Rancapanggung;

7. Desa Bongas;

8. Desa Karanganyar;

9. Desa Nanggerang;

10. Desa Karyamukti;

11. Desa Kidangpananjung.


Selanjutnya, Kecamatan Cililin terdiri dari 44 (empat puluh empat) dusun, 138 (seratus tiga puluh delapan) RW dan 581 (lima ratus delapan puluh satu) RT. Adapun rincian jumlah dusun, RW dan RT di Wilayah Kecamatan Cililin, yaitu sebagai berikut:

NO NAMA DESA DUSUN    RW      RT  
1 Cililin 4 13 53
2 Karangtanjung 4 10 45
3 Batulayang 4 18 47
4 Budiharja 4 10 44
5 Mukapayung 4 20 86
6 Rancapanggung 4 13 75
7 Bongas 4 17 63
8 Karanganyar 4 10 48
9 Nanggerang 4 12 48
10 Karyamukti 4 8 35
11 Kidangpananjung 4 7 37
Total 44 138 581

Sumber: Profil Kecamatan Cililin Tahun 2023


Berdasarkan aspek geografis, Wilayah Kecamatan Cililin pada umumnya terdiri dari dataran tinggi dengan kondisi wilayah yang berbukit-bukit dan dikelilingi pegunungan.


Wilayah Kecamatan Cililin berada pada ketinggian 600 s.d. 800 meter diatas permukaan laut dengan curah hujan rata-rata mencapai 700-800 mm/tahun. Luas Wilayah Kecamatan Cililin, yaitu sekitar 77,78 Km2. Untuk melihat secara lebih jelas aspek geografis wilayah Kecamatan Cililin, berikut ini kami sampaikan Peta Kecamatan Cililin: (download Peta Kecamatan Cililin).


Wilayah Kecamatan Cililin berbatasan dengan desa atau kecamatan lain di wilayah Kabupaten Bandung dan Kabupaten Bandung Barat yang rinciannya, yaitu sebagai berikut:

  • Utara : Desa Mekarmukti Kecamatan Cihampelas Kabupaten Bandung Barat.
  • Timur : Desa Singajaya Kecamatan Cihampelas Kabupaten Bandung Barat.
  • Selatan : Kecamatan Ciwidey Kabupaten Bandung.
  • Barat : Kecamatan Cipongkor Kabupaten Bandung Barat.


Aspek Pemerintahan


Untuk meningkatkan koordinasi penyelenggaraan pemerintahan, pelayanan publik, serta pemberdayaan masyarakat dan desa, maka ditingkat wilayah kecamatan dibentuk perangkat daerah yang dinamakan kantor kecamatan.


Kantor Kecamatan Cililin adalah perangkat daerah yang memiliki tugas untuk melaksanakan urusan pemerintahan di Wilayah Kecamatan Cililin. Dalam melaksanakan urusan pemerintahannya, Kantor Kecamatan Cililin memiliki visi dan misi, yaitu sebagai berikut.


Visi dan Misi Kantor Kecamatan Cililin

Visi adalah tujuan (cita-cita) yang ingin dicapai, sedangkan misi adalah langkah-langkah yang dilakukan untuk mewujudkan tujuan tersebut. Visi Kantor Kecamatan Cililin, yaitu menjadikan kecamatan dan desa sebagai pusat pelayanan dan memberdayakan masyarakat dengan memanfaatkan potensi wilayah.


Adapun Misi Kantor Kecamatan Cililin, yaitu sebagai berikut:

  1. Meningkatkan Sumber daya aparatur kecamatan.
  2. Melaksanakan pelimpahan sebagian kewenangan Bupati kepada Camat.
  3. Memberikan pelayanan prima kepada masyarakat.
  4. Meningkatkan pemberdayaan masyarakat.
  5. Meningkatkan pemberdayaan aparatur pemerintahan desa.

Alamat Kantor Kecamatan Cililin, yaitu: Jl. Raya Cililin No.1 Desa Cililin Kecamatan Cililin Kabupaten Bandung Barat.

Struktur Organisasi Kantor Kecamatan Cililin

Perangkat daerah di Kabupaten Bandung Barat telah beberapa kali mengalami perubahan struktur organisasi. Nomenklatur (tata susunan) struktur organisasi kecamatan terbaru (termasuk Kantor Kecamatan Cililin), yaitu berdasarkan Peraturan Bupati Bandung Barat Nomor 27 Tahun 2023 tentang tugas, fungsi dan rincian tugas kecamatan.

Berdasarkan ketentuan tersebut, pelaksanaan urusan pemerintahan di Kantor Kecamatan Cililin dilakukan oleh Camat dengan dibantu oleh para perangkat kecamatan yang terdiri dari Sekretaris Camat, Para Kepala Seksi, Para Kepala Sub Bagian dan Para Staf.

Terdapat empat seksi dan dua sub bagian yang ada di Kantor Kecamatan Cililin, yaitu sebagai berikut:
  1. Seksi Pemerintahan dan Pelayanan Publik;
  2. Seksi Pemberdayaan Masyarakat dan Desa;
  3. Seksi Pembinaan dan Pengawasan Pemerintahan Desa;
  4. Seksi Ketenteraman dan Ketertiban Umum;
  5. Sub Bagian Kepegawaian dan Umum
  6. Sub Bagian Perencanaan dan Keuangan.

Sejarah Kecamatan Cililin

Berdasarkan dari sejarah wilayah, pada tahun 2003 Kecamatan Cililin mengalami pemekaran wilayah dengan terbitnya Peraturan Daerah Kabupaten Bandung Nomor 7 Tahun 2003 tentang Pembentukan Kecamatan Cangkuang dan Kecamatan Cihampelas. 


Dengan adanya pemekaran wilayah ini, maka Wilayah Kecamatan Cililin yang semula terdiri dari 21 desa menjadi 11 desa. Terdapat 10 desa yang tidak lagi menjadi bagian Wilayah Kecamatan Cililin. 10 Desa tersebut, saat ini termasuk kedalam Wilayah Kecamatan Cihampelas. 10 desa tersebut, yaitu sebagai berikut:

  1. Desa Cihampelas
  2. Desa Cipatik
  3. Desa Pataruman
  4. Desa Citapen
  5. Desa Mekarmukti
  6. Desa Mekarjaya
  7. Desa Tanjungjaya
  8. Desa Tanjungwangi
  9. Desa Situwangi
  10. Desa Singajaya

Selanjutnya berdasarkan sejarah pemimpinnya, Kecamatan Cililin dipimpin oleh Camat yang diantaranya yaitu sebagai berikut:
  1. Sukmara (Tahun 1971 s.d. Tahun 1975)
  2. Nanang Subarna, Bc.Hk (Tahun 1975 s.d. Tahun 1978)
  3. Dargawan (Tahun 1978 s.d. Tahun 1982)
  4. Entang Sukandar, BA (Tahun 1982 s.d. 1985)
  5. Asep, BA (Tahun 1985 s.d. Tahun 1993)
  6. Drs. H. Herman Muchayar (Tahun 1993 s.d. 1996)
  7. Drs. H. Moch Ruslani (Tahun 1996 s.d. Tahun 2001)
  8. Drs. H. Erik Juriara, M.Si (Tahun 2001 s.d. Tahun 2003)
  9. Maskur, S.IP (Tahun 2003 s.d. Tahun 2006)
  10. Dadan Sumarwan, S.Sos (Tahun 2006 s.d. Tahun 2007)
  11. Endang Rachmat, SH (Tahun 2007 s.d. Tahun 2009)
  12. Usep Supriatna, S.Sos (20 Februari 2009 s.d. 17 Oktober 2011)
  13. Muhamad Yudi, S.Sos (18 Oktober 2011 s.d. 9 September 2013)
  14. Drs. Asep Sehabudin (10 September 2013 s.d. 11 Agustus 2014)
  15. A. Zaini Dahlan, S.Pd M.Pd (12 Agustus 2014 s.d. 30 Juni 2017)
  16. Drs. Denni Kurniawan (Plt Camat Cililin, 1 Juli 2017 s.d. 31 Juli 2017)
  17. Drs. H. Endang Hadiat, MM (1 Agustus 2017 s.d. 30 Oktober 2020).
  18. H. Ii Setiapermana, S.Sos (Plt. Camat Cililin, 1 November 2020 s.d. 2 Februari 2021).         
  19. Opa Mustopa, SH (3 Februari 2021 s.d. sekarang).

Demikian profil dan sejarah Kecamatan Cililin yang dapat kami sampaikan, semoga bermanfaat.

    Baca selengkapnya »