Bagaimana Anda mengatasi kesalahan yang sangat aneh yang membuat Anda bingung selama lebih dari 10 jam? [Tutup]


29

Anda tahu mereka, kesalahan-kesalahan yang TIDAK masuk akal. Di mana sepertinya GREMLIN hanya melompat jauh ke dalam chip Anda dan mengacaukan sesuatu. Apakah Anda berjalan-jalan, menulis barang, menelepon paman?


3
Deskripsi Anda mungkin benar - Booting ulang dan coba lagi!
NoChance

5
mempostingnya di stackoverflow tentu saja :)
William

5
Mengapa Anda memutuskan ambang 10 jam? Itu terlalu lama - jika Anda tidak memiliki ide bagus tentang apa yang menyebabkan perilaku tak terduga dalam satu atau dua jam, Anda dalam masalah.
Vektor

5
"Ketika keadaan menjadi sulit, yang sulit tidur dan membiarkan alam bawah sadar bekerja di atasnya." - anon
Michael Easter

2
1. Dapatkan seseorang untuk membantu. Dua orang adalah suatu keharusan. 2. Persempit menggunakan terlalu banyak laporan debug. Ada file di mana setiap baris didahului oleh makro debug untuk menunjukkan dengan tepat satu yang segfault.
SF.

Jawaban:


9

Untuk masalah yang benar-benar mengerikan itu, strategi saya biasanya berjalan sebagai berikut.

  • Eksperimen dan google. Terus berusaha memecahkan masalah. Sebagian besar waktu ini menyelesaikan masalah dalam satu jam atau kurang.

  • Jadi itu tidak berhasil. Istirahat. Minum kopi, bicara tentang sesuatu yang tidak berhubungan dengan seorang rekan. Singkirkan masalah itu dari pikiran Anda. Ketika Anda melihat masalah 5 atau 10 menit kemudian Anda melihatnya dari sudut pandang yang sedikit berbeda. Sebagian besar waktu ini berhasil.

  • Dalam hal ini tidak. Jadi habiskan 10 - 30 menit untuk melihatnya. Kemudian teleponlah seorang kolega. Tetapi sebelum Anda melakukannya, buat beberapa catatan; Anda ingin menunjukkan masalahnya, mereproduksinya, kemudian mendaftar hal-hal yang telah Anda coba, dan yang paling penting buktikan bahwa Anda telah mencobanya. Jadi lakukan dry run dulu. Tetapkan beberapa tanda buku dalam kode, tutup semua dokumen terbuka yang berlebihan, dll. Dengan cara ini Anda dapat menyelesaikan sendiri masalah tersebut, atau saat Anda menunjukkan masalah, Anda tidak akan membuang-buang waktu.

  • Mintalah kolega Anda untuk membuat Anda membuktikan semua asumsi Anda. apakah setter itu benar-benar dipanggil? Apakah metode itu benar-benar mengembalikan apa yang Anda klaim itu? Anda berpikir objek itu bukan nol - tunjukkan pada mereka itu bukan nol.

  • Seringkali, menunjukkan masalah akan membuat Anda menyadari bahwa Anda belum mencoba semua kemungkinan atau kolega Anda akan melihat kesalahan Anda.

  • Jika itu tidak berhasil, saatnya untuk serius. Dokumentasikan dengan tepat apa yang Anda coba lakukan, apa yang telah Anda coba, dan mengapa itu tidak berhasil. Email ini ke semua kolega Anda. Posting di SO. Pada titik ini dokumen harus menjadi pertanyaan SO yang sempurna.

  • Sambil Anda menunggu tanggapan, google google google. Coba setiap permutasi dari pertanyaan yang Anda miliki. Buka banyak tab. Anda mungkin tidak akan mendapatkan jawaban pada titik ini, tetapi Anda sedang mencari ide, kemungkinan, berbagai cara untuk mendekati masalah.

  • Lakukan sesuatu yang lain, jika Anda telah menghabiskan 5 jam pada masalah, waktunya untuk meninggalkannya untuk hari lain. Mungkin Anda akan mendapat respons yang bermanfaat. Mungkin ketika Anda menyerang masalah keesokan harinya itu akan menjadi jelas.

  • Jika tidak ada yang berhasil, saatnya mencari solusi yang berbeda. Mungkin Anda bisa menggunakan metode yang berbeda, teknologi yang berbeda. Mungkin Anda harus mempertimbangkan untuk meninggalkan fitur untuk saat ini. Apakah Anda menagih klien per jam? Apakah Anda bekerja untuk perusahaan di aplikasi internal? Anda perlu menyampaikan ini kepada pemilik dan memberi tahu mereka "lihat, saya sudah menghabiskan waktu x jam untuk hal ini dan tidak membuat kemajuan, apakah manfaat biaya sepadan?". Anda tidak ingin pergi ke bos Anda dan memberi tahu mereka bahwa Anda menghabiskan 16 jam untuk masalah hanya bagi mereka untuk berbalik dan berkata, itu tidak penting, lewati saja untuk rilis ini. Anda perlu mengetahuinya lebih awal.

  • Dan jika itu tidak berhasil? Nah, satu-satunya pilihan Anda adalah tetap berusaha mengatasi masalah atau mencari keahlian industri. Tanya pakar teknologi di twitter. Email penyedia teknologi Anda.


79

Berhenti. Tidak, bukan pekerjaanmu! Bangun dan pulang. Anda selesai untuk hari atau akhir pekan. 19 kali dari 20 saat Anda kembali ke masalah berikutnya, solusinya akan muncul dengan sendirinya dalam waktu satu jam.


17
Anda juga bisa mencoba karet menghindarinya. en.wikipedia.org/wiki/Rubber_duck_debugging
Dave Nay

2
19 dari 20, ya. Yang terburuk tidak pernah diselesaikan, hanya berhasil. Tidak ada lingkungan pengujian yang pernah menunjukkannya, hanya lingkungan produksi penuh yang beroperasi - kami bahkan tidak dapat mereproduksinya setelah jam.
Loren Pechtel

3
Melepaskan diri dari sesuatu yang menjengkelkan Anda bisa sangat sulit - tetapi saya telah menemukan selama bertahun-tahun bahwa selalu hal terbaik untuk dilakukan. Pikiran bawah sadar dapat mengatasi masalah saat Anda makan, tidur, selamat tinggal, menonton TV ... dan hari berikutnya (atau lusa) segalanya menjadi lebih baik. Satu kata peringatan: kumpulkan informasi sebelum Anda pergi ... Berjalan pergi tidak sama dengan mengabaikannya dan berpura-pura tidak ada di sana. Anda masih butuh kerja keras!
quick_now

1
Saya tidak tahu sekitar satu jam. Saya biasanya memecahkan sebagian besar masalah di kamar mandi ketika saya bangun di pagi hari. Yang paling sering kedua adalah ketika saya hampir tertidur di malam hari dan akhirnya membiarkan diri saya berhenti memikirkannya.
SoylentGray

3
Ada NOVA Science yang menakjubkan SEKARANG yang diselenggarakan oleh Neil deGrasse Tyson yang berbicara tentang ilmu tidur. Di dalamnya dibahas fenomena membenturkan kepala Anda pada masalah selama berjam-jam, akan tidur, dan bangun dan menyelesaikannya segera. Ketika kita tidur, otak kita mengubah peristiwa hari kita berulang-ulang, menganalisisnya dari berbagai sudut. Apa yang ditinggalkannya adalah jalur saraf baru yang benar-benar dapat membantu kita melihat masalah dengan cara yang sepenuhnya baru secara tidak sadar, dan kemudian benar-benar menyelesaikan masalah. Cukup mengagumkan.
Byrne Reese

44

Sebelum sepuluh jam berlalu, saya akan mendapat bantuan.

  1. Jelaskan masalahnya kepada orang lain, orang lain, bahkan bebek karet Anda .
  2. Minta orang lain untuk melihat kodenya, atau melangkah melaluinya.
  3. Isolasikan itu. Hapus banyak barang, lalu bawa kembali sedikit demi sedikit hingga masalah muncul kembali.
  4. Tidurlah!

12
+1 untuk menghapus semuanya sampai masalah hilang.
Jonah

4
Anda harus melakukan salah satu dari hal-hal itu sebelum 1 jam berlalu. Semakin Anda menatap semakin kecil kemungkinan Anda untuk mencapai pencerahan Anda. Saya biasanya memecahkan masalah hanya dengan membicarakannya dengan seseorang.
Ben

Spot on. Seringkali saya mencari tahu masalahnya, (atau mendekati itu) dengan terlebih dahulu menjelaskan masalahnya. Seringkali ini terjadi saat menulis deskripsi masalah untuk pertanyaan StackOverflow. Yang juga membutuhkan pengurangan (isolasi) dan kemudian gagal itu, masa tunggu di mana Anda menjauh dari masalah dan membiarkan jawaban SO datang bergulung.
sholsinger

17

Satu kata,, timeboxtentukan waktu terbatas untuk mengerjakan sesuatu, dan jika itu tidak diselesaikan, beralihlah ke sesuatu yang lain dan kembalilah keesokan harinya dengan perspektif yang segar.

Itu dan satu set mata lain, selalu bernilai lebih dari waktu kapan pun Anda bisa membuang waktu untuk menatap sesuatu.

Saya tidak akan pernah menghabiskan lebih dari 45 menit hingga satu jam untuk mencoba menyelesaikan sesuatu dalam satu kesempatan, itu melanggar hukum pengembalian yang semakin berkurang.


Terima Kasih Banyak - Saya membaca artikel kotak waktu di wikipedia, sangat berguna.
Adel

7

Jelaskan masalahnya kepada orang lain.

Dengan menjelaskan masalahnya kepada orang lain, Anda harus mengklarifikasi: ini sering memungkinkan Anda melihat solusinya.

(Salah satu majalah komputer profesional Inggris pernah mengusulkan penjualan potongan karton seukuran seorang programmer senior yang khusus untuk tujuan ini.)

Saya menemukan masalah tidur (kadang-kadang selama beberapa hari) juga dapat membantu.


1
"Orang lain" tidak harus manusia. Terkadang saya menjelaskan hal-hal kepada kucing, dan aha! Saya menemukan masalahnya.
DarenW

Saya benar-benar harus membeli kucing juga. Saya akan melatihnya untuk menggaruk kepala saya atas permintaan.
Adel

Seseorang benar-benar harus membuat potongan karton seukuran Jon Skeet.
Don Roby

5

Saya punya rencana tiga langkah:

  1. Dapatkan kopi atau minuman lezat lainnya.
  2. Kerjakan sesuatu yang lain untuk sisa hari itu.
  3. "Telepon teman" dan corat-coret di papan tulis.

Setiap tahap merupakan peningkatan jika langkah sebelumnya gagal. Hampir selalu ada hal lain yang produktif yang dapat saya kerjakan pada tahap 2.


Saran yang bagus! Jadi, "Telepon teman" dikutip karena seharusnya dibatasi hingga 60 detik, seperti pada Millionaire, kan? Saya suka ide papan tulis juga.
Adel

1
Saya menemukan papan tulis benar-benar membantu memikirkannya secara metodis. Kutipan itu karena sering teman di kantor yang sama jadi sebenarnya menelepon akan aneh. Tapi itu terasa seperti garis hidup dari acara tv.
Flexo

4

Tidurlah di atasnya

Kalau tidak, hubungi seseorang di dekat Anda dan minta dia melihat kode dengan cepat.

Seringkali kesalahan yang akan memakan waktu lama untuk Anda temukan (karena kode Anda) ditemukan dengan sangat mudah oleh orang lain


3

Anda bisa melihat apakah bangun, berjalan mondar-mandir, dan memikirkan masalah membantu Anda menemukan solusi. Apakah Anda benar-benar berdiri atau mondar-mandir, coba menjauh dari komputer sambil berpikir.


3

Saya biasanya melakukan salah satu dari ketiganya:

  1. Berjalan-jalan / bersepeda ... beberapa yang membuat Anda jauh dari komputer.
  2. Main dengan anjing atau kucing saya
  3. Jika Anda memiliki hobi, kerjakan itu sebentar.

Salah satu dari ketiganya melakukan pekerjaan yang baik untuk mengalihkan perhatian dari situasi yang dihadapi. Saya menemukan gangguan, biarkan otak bawah sadar saya mengunyah sesuatu untuk sementara waktu. Setelah sekitar satu jam dari ini, bam, ada solusinya :-).


3

Bangun test Harness untuk menargetkan Cacat yang tepat dan Isolasikan itu

Terus hilangkan kode yang bagus .. sambil mereplikasi kerusakan. Sampai Anda menargetkan potongan kode yang tepat membuat kesalahan. Kemudian lacak kodenya.

Bacaan yang disarankan: Programmer Pragmatis Secara Khusus Bab 10: Pelacak peluru


semua ini baik dan baik tetapi perlu diakui bahwa bug telah dan dapat direproduksi. Bagaimana jika 19 jam yang dihabiskan sejauh ini hanya untuk itu ... berusaha menemukan cara untuk mereproduksi masalah dengan cara deterministik dan sistematis ... lalu bagaimana? Bagi saya ITULAH inti dari pertanyaan di sini!
Newtopian

Programmer Pragmatik luar biasa
Adel

2

Semua saran ini luar biasa. Namun, saya cukup sering menggunakan teknik yang tidak saya lihat disebutkan. Buat daftar untuk mengatur pemikiran Anda tentang masalah tersebut. Jika saya memiliki masalah yang sangat lengket, saya biasanya menulis beberapa daftar seperti: Fakta, Asumsi, Pertanyaan, Gejala, dll. Saya menemukan bahwa seringkali dalam proses mengatur hal-hal dengan cara ini saya menemukan asumsi yang tidak saya sadari ( yang sering berubah menjadi salah), pertanyaan yang tidak saya sadari perlu ditanyakan, permutasi lain yang dapat saya periksa, dll.


2

Edit:

Jawaban singkatnya:

T: Bagaimana Anda menangani kesalahan yang sangat aneh yang membuat Anda bingung selama lebih dari 10 jam?

A: Pastikan itu tidak pernah terjadi: pahami desain Anda, ketahui kode Anda, pelajari cara menggunakan debugger Anda.


Penjelasan:

"Di mana sepertinya gremlin hanya melompat jauh ke dalam keripikmu dan mengacaukan sesuatu"

Ini seharusnya tidak pernah terjadi. Jika ini kode Anda, Anda harus memiliki ide yang sangat bagus tentang apa yang menyebabkan kesalahan sebelum Anda berusaha memperbaikinya.

Lebih jauh lagi, ketika Anda menulis kode Anda, Anda harus sudah tahu di mana dan mengapa itu kemungkinan gagal.

Setelah mengatakan itu - meminta rekan kerja, memposting di SO, menelusuri kembali dan memutar kembali langkah Anda dan mengambil istirahat - semua saran yang disebutkan di atas akan membantu.

Hal lain, adalah Anda harus tahu alat Anda - alat debugging Anda. Mencatat pesan di titik-titik yang dicurigai dalam kode Anda, memeriksa tumpukan panggilan Anda dengan hati-hati, menggunakan breakpoints bersyarat dan jam tangan, dll. Keterampilan debugging bukan tambahan - mereka adalah bagian dari pemrograman.


Mampu menelusuri kembali langkah seseorang sangat penting. Terima kasih!
Adel

> Mampu menelusuri kembali langkah seseorang sangat penting. Perangkat lunak SourceControl adalah kunci untuk dapat mengembalikan / menelusuri kembali. Jadilah ANAL tentang hal itu dan jika Anda bisa, atur pengaturan Anda untuk memaksa Anda meninggalkan komentar setelah checkin.
Vektor

3
Sayangnya, tidak peduli seberapa baik Anda mengenal kode, terkadang masalahnya adalah interaksi dengan kode (sumber tertutup) orang lain.
Nate CK

2
+1 @Nate CK- sangat benar. Jenis bug terburuk terjadi ketika Anda mendapatkan semacam omong kosong kembali dari layanan web yang Anda andalkan. Saya memiliki vendor Saas beberapa waktu lalu yang secara halus mengubah beberapa fungsi tanpa peringatan di layanan web mereka. Saya harus menjelaskan kepada pengembang cara memperbaiki bug sendiri melalui telepon saat ia menjelaskan kepada saya seperti apa bentuk kodenya.
Morgan Herlocker

1
Untuk menentukan apa? Bahwa ada masalah dalam kode pihak ke-3? Bagian itu relatif mudah. Bagian yang sulit adalah mencari tahu kondisi apa yang memicu itu, dan bagaimana cara mengatasinya, ketika Anda tidak memiliki sumber, vendor tidak responsif, dan mungkin itu tidak terjadi pada sistem pengujian Anda. Jika Anda berpikir mengetahui kode Anda akan menyelesaikan semua itu untuk Anda, saya sarankan mungkin Anda tidak pernah harus menanganinya.
Nate CK

1

Saya memiliki masalah yang sama, memori yang jelas rusak di Objective-C, yang saya perjuangkan selama berjam-jam. Tetapi kemudian saya dan rekan-rekan saya hanya berjalan-jalan untuk makan siang, dan saya menjelaskan masalahnya (dan satu hal yang berkaitan dengan deserialisasi objek dalam metode init-nya), dan pada dasarnya menjelaskan seluruh masalah kepada diri saya sendiri.

(detail techy: pada dasarnya, saya menginisialisasi dan mengembalikan suatu objek ke sesuatu yang lain daripada diri sendiri, jadi ada dua allocs, tetapi hanya satu objek kembali. Memori bergeser dan menjadi gila, crash, dan debugger tidak benar-benar tahu apa yang harus dilakukan dengan itu juga).


1
"Saya menginisialisasi dan mengembalikan objek ke sesuatu yang lain selain diri sendiri" - bug seperti itu SULIT! Anda dapat melihatnya lebih dari 100 kali dan tidak menangkapnya. Tapi tidak bisakah Anda melihat dua alokasi dengan menelusuri debugger?
Vektor

1

masukkan deskripsi gambar di sini

Mandi.

Setiap Rodney McKay fans?

Namun, dengan serius, jika ada satu kesamaan di antara semua jawaban ini, Anda perlu istirahat dan melakukan sesuatu yang lain .

Saya suka menganggapnya sebagai menurunkan masalah ke alam bawah sadar Anda. Bahkan jika kita tidak sadar, pikiran kita (tampaknya) terus bekerja pada masalah, bahkan ketika kita sedang melakukan sesuatu yang lain, seperti mandi .


Ide bagus .... sekarang saya hanya perlu meminta bos untuk meletakkan setengah lusin bak hujan di kantor.
Dave Nay

Andai saja pasukan legiun bilik masing-masing punya ruangan seperti itu.
Adel

1

Langkah demi langkah langkah demi langkah, turun ke perakitan. Siapa yang memanggil apa, break-point pada akses memori. Itu biasanya menangkap bug dengan sangat cepat.

Jika tidak, berjalan-jalanlah.


1

Kombinasi dari semua ini:

  • Jauhi itu untuk sementara waktu sehingga bisa duduk di atas kompor Anda. Tidur, istirahat, makan, jalan-jalan, terserah.

  • Periksalah masalahnya lebih lanjut, apa lagi yang salah, gejala apa yang bisa Anda temukan?

  • Cari tahu masalahnya, lihat apa yang bisa Anda temukan. Ingatlah untuk mencoba kata kunci yang berbeda

  • Coba sesuatu yang berbeda . Bekerja di sekitar. Teknik debugging yang berbeda. Seorang validator. Komputer yang berbeda.

  • Bicaralah dengan seseorang . Sekalipun mereka tidak dapat membantu, atau bahkan bukan seorang programmer, terkadang berbicara akan memicu ide bola lampu

  • Mengulang kembali! Jika sesuai, coba nyalakan kembali komputer Anda, server, dll. Jika tidak ada yang lain, Anda dapat menggunakan waktu untuk berpikir.

  • Tanyakan StackOverflow! Kami di sini untuk membantu


1

Saya benar-benar tidak menyukai jawaban yang paling banyak dipilih, karena meskipun kadang-kadang berhasil, kadang-kadang Anda hanya perlu mencari tahu di hari yang sama, jadi yang saya sarankan, dalam urutan ini, adalah:

  1. Konfirmasikan bahwa itu tidak hanya terjadi pada Anda. Ini dapat menghemat banyak waktu. Mungkin Anda menghapus komponen yang diperlukan, atau membuat perubahan di lingkungan Anda, dan pengecualian sedang ditelan di suatu tempat dalam kode Anda. Jika itu hanya terjadi pada Anda, saya akan menggunakan alat perbandingan lingkungan. Baru-baru ini saya membaca tentang perangkat lunak yang disebut Envy, yang memungkinkan Anda melakukan hal itu, meskipun bukan freeware, harganya 10 USD.

  2. Terjadi pada semua orang? Baik, sekarang lakukan Lihat Riwayat pada kode dan verifikasi untuk perubahan terbaru yang mungkin menyebabkan kesalahan, baik secara langsung maupun tidak langsung.

  3. Tidak ada perubahan terbaru? Jika itu adalah kesalahan yang sangat spesifik (pengecualian), 'stackoverflow it'. Sekarang itu tidak terdengar lebih baik daripada 'google it' tapi saya merasa senang untuk mengatakan saya pertama kali mencari stackoverflow untuk penelitian pemrograman daripada google. Jika ini masalah yang sangat diketahui, sangat mungkin Anda akan menemukan solusinya di sini. Jika tidak, maka posting pertanyaan di situs pertukaran stackex terkait. Anda mungkin mendapatkan jawaban yang sangat cepat, atau bahkan jika tidak, pertanyaan Anda akan ada di luar sana saat Anda melakukan penelitian lebih lanjut. Itu manfaatnya.

  4. Jika Anda tidak menemukan jawaban online atau itu bukan kesalahan umum, maka berjalanlah melalui kode langkah demi langkah, memeriksa apakah hasil yang diperoleh dari setiap langkah masuk akal untuk hasil yang Anda harapkan. Pergi mulai untuk menyelesaikan pada setiap metode, dan dari bawah ke atas pada solusi berjenjang. (yaitu jika Anda memecahkan masalah kinerja, mulailah dengan kode yang mengambil catatan. Tidak masuk akal untuk memulai di UI jika Anda dapat menentukan dengan cepat jika langkah pertama adalah masalahnya).

  5. Jika setelah melalui kode beberapa kali Anda masih belum menemukan apa yang salah, hubungi seseorang untuk membicarakannya. Seperti yang sudah disebutkan seseorang, membicarakannya dengan keras bisa menyalakan bola lampu. Ditambah pemrograman pasangan sangat berguna.

  6. Pada titik ini, jika memungkinkan, berjalanlah untuk beberapa waktu atau untuk hari itu. Saya membaca tweet yang sangat benar kemarin yang mengatakan "Saya pergi tidur sambil berpikir 'bagaimana sih' dan bangun berpikir 'tapi tentu saja'". Benar sekali.

  7. Jika Anda masih belum memiliki jawaban, saya berani mengatakan Anda dapat mencoba refactoring menjadi tugas / metode / fungsi yang lebih kecil. Henry Ford mengatakan sesuatu seperti 'Tidak ada tugas yang begitu rumit yang tidak dapat diselesaikan dengan memecahnya menjadi tugas yang lebih kecil'. Pada titik ini, jika solusinya terlalu rumit dan Anda belum menemukan sendiri atau dengan bantuan orang lain, perbaiki kode menjadi tugas yang lebih kecil. Bahkan jika Anda tidak akhirnya melakukannya, itu dapat membantu Anda menemukan alasannya.

  8. Tambahkan instrumentasi ke kode Anda.

  9. Tweet tentang itu ??


1

Anda harus mundur. Moto saya adalah 'jika masalahnya terlalu sulit maka Anda memecahkan masalah yang salah'. Apa asumsi Anda? tidak percaya apapun.

Akibat wajarnya adalah 'semakin aneh masalahnya, semakin aneh solusinya'. Kekuatan komputer adalah logikanya sehingga Anda tidak bisa menang dengan logika. Anda punya otak dan harus memikirkannya.

Di zaman modern ada begitu banyak hal lain yang berinteraksi pada sistem - firewall, AV, Antispyware, pembaruan otomatis terjadi setiap malam - Anda harus berurusan dengan target yang bergerak.


Begitu benar bahwa 'semakin aneh masalahnya, semakin aneh solusinya'
Adel

-1

Google itu. Stackoverflow itu. Posting di forum. Pada dasarnya jika Anda tidak bisa menyelesaikannya sendirian, minta orang untuk membantu.


-1
  1. Tuliskan masalahnya.
  2. Berpikir keras.
  3. Terapkan solusinya.

Ringkas, sangat bagus!
Adel

1
Sebenarnya tidak. Berpikir terlalu keras di jalur yang sama hanyalah hal terburuk yang bisa Anda lakukan. 'Tantang, sebutkan, tinjau kembali, dan uji setiap asumsi Anda, secara sistematis' adalah solusinya di sini; orang-orang mendiskusikan berbagai taktik untuk mencapai hal itu.
smci
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.