Senin, 30 September 2013

Message Box

Message box yang dikenal di android terbagi dua jenis:

 Toats
Adalah message/pesan yang muncul dalam waktu sebentar dan kemudian hilang tanpa mempunyai user interaction dengan pengguna, biasa ini merupakan fokus dari activity yang active.

 Alert
Adalah Dialog box atau message yang mempunyai user interaction dengan user, biasa terdiri dari 3 bagian yaitu :
 setMassage() berisi tulisan pesan/message
 setTitle() / setIcon(), konfigurasi title / icon dari dialog box
 setPositiveButton(), setNeutralButton(), setNegativeButton(), berisi posisi serta metode click-nya

berikut adalah penerapannya, buatlah project android dengan ketentuan :

Project Name     : Messagebox
Build Target        : Android 4.2.2
Aplication name  : messagebox
Package name   : com.immobulus.messagebox
Activity                : messagebox
Min SDK             : 9

main.xml










messagebox.java






























Perhatikan, bahwa untuk menampilkan message box kita memerlukan libraries berikut




Aplikasi dijalankan akan menghasilkan seperti gambar berikut:

Keterangan gambar
Gambar sebelah kiri adalah apabila di-click button yang bertuliskan Messagebox/alert sementara gambar sebelah kanan apabila di-cllick button Message Toast.




Sumber: PEMROGRAMAN APLIKASI MOBILE SMARTPHONE DAN TABLET PC BERBASIS ANDROID. oleh : Nazruddin Safaat H

TypeFace

TypeFace yang dalam android ditulis dengan typeFace untuk mendefinisikan jenis huruf yang Anda mau tampilkan, tentunya jenis huruf di android tidak sebanyak jenis huruf seperti di operating sistem seperti windows/linux. Berikut typeFace yang tersedia di android.

1. typeFace=”sans”
2. typeFace=”serif”
3. typeFace=”monospace”
4. typeFace cuntom (untuk font yang kita include source file tff-nya)

Program di bawah ini adalah conctoh penerapan jenis typeFace di atas. Buatlah project android
dengan ketentuan seperti berikut:

Project Name      : typeFace
Build Target         : Android 4.2.2
Aplication name   : typeFace
Package name    : com.immobulus.inputtype
Activity                 : typeFace
Min SDK              : 9

main.xml
































typeface.java














Penjelasan costum huruf, didefinisikan tulisan yang akan kita berikan fontFace custom adalah berikut ini:









Di mana isi dari variabel custom akan dijadikan huruf mistral, pastikan huruf mistral sudah ada di folder asset/fonts seperti view project di bawah ini.

Kemudian coding java yang untuk memanggil dan menjadikan font mistral adalah sebagai berikut:

tentu coding tersebut membutuhkan libraries yang diwakili dengan perintah

Tampilan program typeFace tersebut adalah sebagai berikut:






BAHASA PEMROGRAMAN PROLOG (Goal Inside)

PREDICATES
                    tes
GOAL
                    makewindow(1,4,8,"OPERASI MATEMATIKA",5,5,15,70).
                    write("JENDELA SATU"), nl,
                    makewindow(2,7,2,"JENDELA KEDUA",8,10,8,40),
                    tes.
CLAUSES
                    tes :-
                              X=2+6,
                              write(X), nl,
                              X=3+5,
                              write(X), nl.



Setelah di Run tampilannya akan seperti ini 



**Klih disini untuk  Lihat kode warna

Sistem Operasi Pada Linux dan Windows

Sistem Operasi Linux dan Windows

PIPELINING

Efisiensi sebuah komputer dinilai beerdasarkan kecepatan perangkat keras dan fasilitas-fasilitas perangkat lunak. Penilaian ini disebut sebagai throughput, didefinisikan sebagai jumlah pemrosesan yang dapat dikerjakan dalam suatu interval waktu tertentu.Salah satu teknik yang mendorong peningkatan suatu sistem throughput yang cukup hebat disebut sebagai pemrosesan pipeline.Konsep pemrosesan pipeline dalam suatu komputer mirip dengan suatu baris perakitan dalam suatu pabrik industri.
contoh, sutu proses pembuatan mobil. Ketika sebuah mobil dibuat, mobil tersebut berpindah sepanjang ban berjalan dengan berurutan, melewati beberapa stasiun. Pada setiap stasiun, dikerjakan sebagian proses konstruksi pada mobil itu, kemudian berpindah lagi ke stasiun berikutnya. Perpindahan mobil itu dari satu stasiun ke stasiun lainnya, memungkinkan beberapa mobil berada pada baris perakitan pada waktu yang bersamaan, masing-masing pada stasiun yang terpisah.Dengan demikian, hal ini mengakibatkan kita menghasilkan mobil dari baris perakitan satu persatu secara berurutan.Tanpa teknik baris perakitan seperti ini, pengerjaan suatu mobil tidak dapat dimulai sampai mobil yang sebelumnya benar-benar selesai.
Pemrosesan pipeline dalam suatu komputer diperoleh dengan membagi suatu fungsi yang akan dijalankan menjadi beberapa subfungsi yang lebih kecil dan merancang perangkat keras yang terpisah, disebut sebagai tingkatan (stage), untuk setiap subfungsi. Stage-stage itu kemudian dihubungkan bersama-sama dan membentuk sebuah pipeline tunggal (atau pipe) untuk menjalankan fungsi asli tersebut.
1. Sejajarkan mantissa-mantissa yang ada
2. tambahkan mantissa-mantissa tersebut
3. Normalisasikan hasilnya
Keuntungan proses penambahan secara pipeline ini adalah bahwa dua input yang baru dapat dimulai melalui pipa tersebut segera sesudah dua input sebelumnya melewati stage 2. Hal ini berarti bahwa jumlah penambahan akan tersedia dengan kecepatan yang sama dengan kecapatan input. Secara sistematis sekumpulan angka floating-point akan bergerak melalui penambah (adder) pipeline yang sederhana pada saat pasangan pertama angka-angka itu dihasilkan oleh stage 3 maka pasangan kedua telah disejajarkan dan ditambahkan dan hanya perlu dinormalisir pada stage 3. Dengan menggunakan pipeline, jumlah selisih waktu antara hasil pertama dan kedua merupakan jumlah waktu yang diperlukan untuk menormalisir sebuah angka.Tanpa suatu pipeline, waktu antara hasil-hasil tersebut merupakan waktu kumulatif yang diperlukan untuk semua ketiga subfungsi tersebut.
Sinkronisasi Pada Pipeline
Pada semua baris perakitan industri, efisiensi suatu pipeline dapat berkurang jauh akibat suatu bottleneck. Suatu bottleneck terjadi sewaktu pemrosesan pada suatu stasiun, atau stage, menghabiskan waktu lebih lama daripada stage lainnya. Karena itu, idealnya, kita menginginkan agar setiap stage dalam suatu pipe menghabiskan jumlah waktu proses yang sama. Meskipun kita dapat memisahkan suatu fungsi menjadi beberapa subfungsi dengan waktu proses yang relatif sama, perbedaan logika dari stiap stage akan menyukarkan kita untuk menghasilkan waktu proses yang sama pada setiap stage. Untuk menyamakan waktu yang diperlukan pada setiap stage maka stage-stage tersebut harus disinkronisasikan. Hal ini bisa dilakukan dengan menyisipkan kunci-kunci (latch) sederhana (register cepat), antara stage-stage tersebut.latch, masing-masing pada bagian pipe paling awal dan satu lagi pada bagian paling akhir untuk memaksa input yang sinkron dan memastikan output yang sinkron.
Waktu yang diperlukan untuk lewat dari suatu latch melalui stage ke latch berikutnya disebut sebagaipenangguhan clock (clock delay) dan diperlihatkan pada gambar dibawah ini. Karena hanya ada satu keseragaman penangguhan clock untuk seluruh pipeline maka latch disinkronkan sesuai dengan waktu proses  maksimum pada masing-masing stage individual dalam pipeline tersebut. Bahkan jika hanya ada satu stage tersebut yang mempunyai waktu proses terpanjang maka penangguhan clock di-set sebesar waktu proses yang paling lama. Dengan demikian, suatu prinsip perancangan yang berhubungan dengan efisiensi adlaah dengan membagi fungsi yang sedang di-pipeline menjadi subfungsi yang memiliki implementasi perangkat keras dengan waktu proses yang relatif sama.
Klasifikasi Pipeline
Pipeline dapat dikelompokkan menrut fungsi dan konfigurasinya. Secara fungsional, mereka diklasifikasikan menjadi tiga kelompok pokok yaitu: pipelineing aritmatika, instruksi dan prosesor. Pipeline menurut konfigurasi dan strtegi kendalinya: unifungsi atau multifungsi; statis atau dinamis; skalar atau vektor.
Klasifikasi Berdasarkan Fungsi
Pipelining aritmatika. Proses segmentasi dari ALU dari sistem yang muncul dalam kategori ini. Suatu contoh daari fungsi pipeline aritmatika diberikan dalam bagian contoh pipeline multifungsi.
Pipelining instruksi.Dalam suatu komputer nonpipeline, CPU bekerja melalui suatu siklus yang berkesinambungan dari fetch-decode-eksekusi untuk semua instruksinya. Proses fetch suatu instruksi tidak akan dimulai sampai eksekusi instruksi sebelumnya selesai. Untuk mem-pipeline fungsi ini, instruksi-instruksi yang berdampingan di fetch dari memori ketika instruksi yang sebelumnya di-decode dan dijalankan. Proses pipelining instruksi, disebut juga instruction lihat-ke-muka (look-ahead), mem-fetch instruksi secara berurutan. Dengan demikian, jika suatu instruksi menyebabkan percabganan keluar dari urutan itu maka pipe akan dikosongkan dari seluruh instruksi yang telah di-fetch sebelumnya dan instruksi percabangan (branched-to instruction) tersebut di-fetch. Pipelining prosesor. Sewaktu stage dari suatu pipeline merupakan prosesor aktual dan latch-latch saling berbagi memori antara prosesor-prosesor tersebut maka pipeline itu disebut sebagai pipeline prosesor.
Klasifikasi Berdasarkan Konfigurasi
unifungsiversus multifungsi. Kemampuan suatu pipeline menjalankan hanya satu jenis pokok operasi disebut sebagai pipeline unifungsi. Misalnya, perkalian floating-point mensyaratkan pipeline agar juga menjalankan operasi yang sama pada setiap kelompok input. Jika pipeline dapat menjalankan fungsi-fungsi yang berbeda maka disebut sebagai pipeline multifungsi.Fungsi-fungsi yang berbeda itu bisa dijalankan baik pada waktu yang bersamaan ataupun berbeda, dengan menghubungkan subkelompok-subkelompok stage yang berbeda dalam pipeline. Pipeline disusun seperlunya sesuai dengan nilai input kendali tambahan
Statis versus dinamis. Ketika instruksi-instruksi yang berjenis sama akan dijalankan secara bersamaan waktunya maka digunakan pipeline statis. Pipeline ini dapat berupa pipeline fungsional maupun multifungsional tetapi mungkin mengasumsikan hanya satu konfigurasi fungsional pada suatu waktu. Suatu pipeline multifungsional statis dapat bekerja paling baik jika fungsi yang akan dijalankan tidak sering berubah. Antara perubahan, pipeline terlihat sebagai pipeline unifungsi dan mengulangi operasi yang sama berulang-ulang. Sebelum mengganti fungsi tersebut, kelompok input terakhir dari fungsi sebelumnya harus benar-benar telah melewati pipeline dan proses ini disebut sebagai mengairi pipa (draining the pipe). Kemudian pipeline dikonfigurasikan untuk fungsi yang baru dan input yang baru boleh masuk ke dalam pipe.
Dengan pipeline dinamis, beberapa konfigurasi fungsional dapat muncul sekaligus.Hal ini berarti harus digunakan pipeline multifungsional.Dalam kasus ini, konfigurasi pipeline berubah-ubah secara konstan, tergantung pada data mana untuk fungsi yang aman pada stage yang mana untuk setiap penangguhan clock.Pipeline dinamis memerlukan kendali yang sangat kompleks dan mekanisme perangkai untuk mengkonfigurasikan pipe bagi input-input tertentu.Untuk alasan ini, pipelining aktual tidak berada di bawah kendali programer melainkan dibangun di dalam arsitektur mesin tersebut. Jika suatu pipeline dalam sebuah sistem perlu mengubah fungsinya secara berkala maka harga implementasi pipeline dinamis melebihi pertimbangan harga dari waktu mengatur (idle time) yang dihasilkan dari proses draining pipeline statis secara terus menerus.
Skalar versus vektor.Suatu pipeline skalar memproses serangkaian operasi skalar pada operand skalar (yang  berhubungan dengan masing-masing angka bukannya vektor) seperti ditunjukkan oleh program. Salah satu contoh berupa operasi ADD dalam loop FOR. Pipeline vektor dirancang untuk memproses instruksi vektor dengan menggunakan operand vektor. Komputer yang mempunyai instruksi-instruksi vektor disebut sebagai proses vektor.
Reduced Instruction Set Computers (RISC)
Seperti pada komponen perangkat keras komputer yang telah berevolusi bertahun-tahun, demikian juga perancangan bagi bahasa yang digunakan untuk memprogram komputer.Bahasa pemrograman tingkat tinggi saat ini berkemampuan sangat tinggi dan sangat rumit dibandingkan dengan FORTRAN, bahasa tingkat tinggi pertama (HLL atau high-level language).Sehubungan dengan evolusi ini, para arsitek komputer telah mencoba untuk merancang komputer yang memberikan suatu operasi dan instruksi yang jauh lebih tinggi tingkatnya pada perangkat keras untuk berhubungan lebih dekat dengan bahasa-bahasa yang membentuk HLL. Contoh dari hal ini adalah instruksi perangkat keras CASE dalam sebuah program Pascal. Hal ini akan lebih mempermudah pekerjaan penulis kompiler dan memberikan kode yang sangat efisien karena CASE sudah terbentuk dalam perangkat keras. Namun kerugian dari strategi ini adalah peningkatan ukuran dan kerumitan kumpulan instruksi pernagkat keras, yang menyebabkan peningkatan waktu perancangan, peningkatan kesalahan perancangan dan penerapan perangkat keras yang tidak konsisten (Patterson & Sequin, 1981).
perncangan komputer tradisional seperti yang telah dijelaskan disebut sebgai complex instruction set computer (CISC). Pendekatan lainnya adalah dengan perancangan reduced instruction set computer (RISC). Sistem RISC menawarkan kumpulan instruksi yang sangat kecil dan sederhana dimana instruksi-instruksi tersebut pada umumnya akan dijalankan dalam satu siklus, sejumlah besar register umum (general-purpose) dan pelaksanaan pipelined. Selain peningkatan perancangan perangkat keras, peneliti RISC juga berpendapat bahwa kumpulan instruksi yang lebih kecil akan lebih mudah dieksploitasi oleh penulis kompiler. Untuk kumpulan instruksi yang rumit, kompiler harus menemukan kasus-kasus yang sesuai dengan bentuk tertentu secara tepat.Sebagai tambahan; optimalisasi kode yang dihasilkan lebih sederhana dengan tidak adanya instruksi yang rumit. Pemilikan sejumlah besar register akan mengurangi kebutuhan pengaksesan memori dan dengan demikian akan meningkatkan kecepatan eksekusi program. Register-register ini, secara logika dikelompokkan ke dalam kumpulan yang disebut sebagai window, terutama digunakan selama dalam pemanggilan dan pengembalian prosedur.
cara terbaik untuk mendukung HLL harus selalu dicari. Namun demikian, kita tahu bahwa para peneliti masalah ini telah membantu memfokuskan perhatian kita pada beberapa masalah penting dalam arsitektur komputer. Yang akan muncul adalah suatu arsitektur yang merupakan kombinasi keduanya, dengan menggunakan hal-hal terbaik dari kedua arsitektur tersebut.
Penjadwalan dan Pencegahan Adanya Tubrukan
Inisiasi dari suatu tabel reservasi berhubungan dengan permulaan suatu evaluasi (tugas) fungsi tunggal yang akan mengikuti path yang dinamai oleh tabel. Jika suatu inisiasi dibuat maka pengendali pipeline (pipeline controller) harus mencadangkan stage pada pipeline yang tepat bagi data inisiasi tersebut dengan waktu yang relatif ditentukan oleh tabel reservasi. Jika data dari dua inisiasi yang berbeda akan masuk ke dalam stage yang sama pada waktu yang sama maka akan terjadi tubrukan (collision). Karena suatu stage tidak dapat menghitung dua hasil yang berbeda secara bersamaan waktunya maka tubrukan dapat dicegah oleh pengendali pipeline.
Kita akan menghadirkan suatu metode untuk menentukan algoritma penjadwalan (scheduling algorithm) yang efisien yang dapat diimplementasikan oleh pengendali pipeline untuk mencegah adanya tubrukan-tubrukan.
Jumlah unit waktu antara dua inisiasi dalam suatu pipeline disebut sebagai latensi (latency).Serangkaian latensi di antara inisiasi yang berdampingan disebut sebagai rangkain latensi (latency sequence).Jika rangkaian latensi menggulangi dirinya sendiri, hal ini disebut sebagai siklus latensi (latency cycle).Dalam pipeline linier yang statis tanpa hubungan feedback atau feedforward. Hal ini berarti bahwa inisiasi yang baru (selama masih ada input) dimulai setiap penangguhan clock.
Penyisipan Penangguhan (Delay) untuk Through yang Optimal
Jumlah stage dalam sebuah pipeline tidak mempengaruhi throughput pipeline tersebut kecuali waktu startup awal. Jika pipeline itu merupakan suatu pipeline linier dasar dan inputnya berlanjut, maka setelah startup awal, hasil throughputakan dihasilkan satu per satu setiap penangguhan clock, tidak peduli dengan jumlah stage-nya. Secara umum, kita dapat menggambarkan kemungkinan throughput suatu pipeline yang maksimum (setelah startup sebagai kebalikan dari waktu latensi rata-rata yang minimum).
Pada beberapa kasus, kita dapat menurunkan MAL dengan penambahan stage-stage penangguhan tak-terhitung (noncompute delay) pada pipeline itu. Meski pun hal ini meningkatkan jumlah stage dalam pipeline tersebut naman throughput aktualnya menjadi lebih baik.
Pemrosesan Pipeline
Konsep pemrosesan pipeline dapat digunakan dalam sebuah komputer untuk memperbaiki throughput sistem tersebut dalam berbagai variasi cara. Tiga jenis pokok pipelining adalah pipelining aritmatika, instruksi, dan prosesor.Peningkatan throughput sistem dengan satu atau lebih jenis pipelining ini tergantung pada fungsi dan harga pipelining. Harga pipelining termasuk tambahan perangkat keras yang diperlukan untuk mekanisme latch dan kendali, serta waktu yang tidak produktif bagi pengisian pipeline dan memaksa latensi untuk menghindari adanya tubrukan.
Pipeline dapat dikategorikan ke dalam basis unifungsional atau multifungsional, statis atau dinamis, dan skalar atau vektor. Dalam pengimplementasian dan penjadwalannya, pipeline bervariasi dari yang sangat sederhana sampai yang sangat kompleks.
Pemrosesan pipeline dalam suatu komputer diperoleh dengan membagi suatu fungsi yang akan dijalankan menjadi beberapa subfungsi yang lebih kecil dan merancang perangkat keras yang terpisah, disebut sebagai tingkatan (stage), untuk setiap subfungsi. Stage-stage itu kemudian dihubungkan bersama-sama dan membentuk sebuah pipeline tunggal (atau pipe) untuk menjalankan fungsi asli tersebut.
Image
Pada gambar diatas dapat dibagi menjadi tiga subfungsi terpisah berikut ini:
  1. Sejajarkan mantissa-mantissa yang ada
  2. tambahkan mantissa-mantissa tersebut
  3. Normalisasikan hasilnya
Jika kita merancang sebuah stage perangkat keras untuk setiap subfungsi ini, kita dapat menyusun fungsi tersebut sebagai suatu pipeline tiga-stage seperti diperlihatkan gambar berikut

Keuntungan proses penambahan secara pipeline ini adalah bahwa dua input yang baru dapat dimulai melalui pipa tersebut segera sesudah dua input sebelumnya melewati stage 2. Hal ini berarti bahwa jumlah penambahan akan tersedia dengan kecepatan yang sama dengan kecapatan input. Gambar dibawah memperlihatkan secara sistematis bagaimana sekumpulan angka floating-point akan bergerak melalui penambah (adder) pipeline yang sederhana pada gambar 2 diatas pada saat pasangan pertama angka-angka itu dihasilkan oleh stage 3 [bagian (d) pada gambar 3 dibawah] maka pasangan kedua telah disejajarkan dan ditambahkan dan hanya perlu dinormalisir pada stage 3 [bagian (e) pada gambar 3 dibawah]. Dengan menggunakan pipeline, jumlah selisih waktu antara hasil pertama dan kedua merupakan jumlah waktu yang diperlukan untuk menormalisir sebuah angka. Tanpa suatu pipeline, waktu antara hasil-hasil tersebut merupakan waktu kumulatif yang diperlukan untuk semua ketiga subfungsi tersebut.

Kita mendefinisikan suatukomputer pipelinesebagai suatu komputer dengan komponen perangkat keras pipeline. Definisi ini mencakup kebanyakan komputer dewasa ini. Namun, mereka berbeda pada tingkatan pipelining mereka.


Sumber bacaan: Soeparlan, Soepono. Pengantar Organisasi Sistem Komputer. Penerbit Gunadarma

Minggu, 29 September 2013

InputType



InputType adalah untuk mengontrol inputan terhadap widget sehingga inputan sesuai dengan struktur yang diharapkan. Pada android terdiri dari beberapa clausses inputan yaitu:

 Text (default inputan)
 Number
 Phone
 Datetime
 Date
 Time


Berikut akan kita terapkan inputType dalam contoh aplikasi android di bawah ini. Buatlah project android dengan ketentuan seperti berikut:

Project Name        : InputType
Build Target           : Android 4.2.2
Aplication name     : inputtype
Package name      : com.immobulus.inputtype
Activity                   : inputtype
Min SDK                : 9

main.xml


































Pada coding xml di atas dapat kita lihat beberapa inputType sebagai berikut:
1. Email: tidak memiliki inputtype artinya isiannya bebas.
2. Nama: inputType “text/textEmailAddress” berarti memiliki inputan yang berupa text.
3. Umur: inputType “number/numberSigned/numberDecimal” berarti inputannya hanya
berupa angka.
4. Tanggal Lahir: inpuType “date” berarti harus berupa format tanggal seperti 09-02-1992.
5. Alamat: inputType “text/textMultiLine/textAutoCorrect” berarti inputannya berupa text

dengan mengizinkan lebih dari satu baris.

inputtype.Java










Running aplikasi tersebut dan perhatikan konsistensi inputannya apakah sesuai dengan formula yang kita rancang, salah satu bentuk inputan pada aplikasi di atas adalah seperti berikut:

Ubah main.xml di atas untuk dapat melakukan ScrollView sehingga prosedur penginputan lebih bagus.





Sumber: PEMROGRAMAN APLIKASI MOBILE SMARTPHONE DAN TABLET PC BERBASIS ANDROID. oleh : Nazruddin Safaat H

BAHASA PEMROGRAMAN PROLOG (Silsilah Keluarga 1)

/*Contoh Program silsilah keluarga (ayah, kakek, saudara)*/


DOMAINS
            nama = symbol

PREDICATES
            ayah (nama,nama)
            kakek (nama,nama)
            saudara(nama,nama)

CLAUSES
         /* Fakta */
         ayah(hendra,pranoto).
         ayah(hendra,kristianto).
         ayah(pranoto,bardan).
         ayah(pranoto,deni).
         ayah(kristianto,harahap).
         ayah(kristianto,sutarno).
         ayah(deno,tony).
         ayah(deni,tono).
         ayah(sutarno,martin).
         ayah(sutarno,indra).

         /* Aturan */
         kakek(Kakek,Cucu) :-
                        ayah(Ayah,Cucu), ayah(Kakek,Ayah).
        
         saudara(Sdr1,Sdr2) :-
                        ayah(Ayah,Sdr1), ayah(Ayah,Sdr2),
                        Sdr1<>Sdr2.


Untuk menanyakan ayah
Goal: ayah(hendra,pranoto) <enter>
Yes
Goal: ayah(hendra,deni) <enter>
No
Goal: ayah(pranoto,deni) <enter>
Yes




Untuk mengetahui siapa ayah dan siapa anak
Goal: ayah(Ayah,Anak) <enter>
Ayah=hendra, Anak=pranoto
Ayah=hendra, Anak=kristanto
Ayah=pranoto, Anak=bardan
Ayah=pranoto, Anak=deni
Ayah=kristanto, Anak=harahap
Ayah=kristanto, Anak=sutarno
Ayah=deni, Anak=tony
Ayah=deny, Anak=tono
Ayah=sutarno, Anak=martin
Ayah=sutarno, Anak=hendra
10 Solutions




Untuk menanyakan kakek