TensorFlow JS untuk Deteksi Wajah (Tutorial Part 1)

Menyenangkan rasanya ketika membuat sebuah aplikasi berbasis Machine Learning bukan suatu hal yang mustahil lagi bagi web developer. Berkat TensorFlow.js yang merupakan salah satu framework open source berbasis pada TensorFlow, kini belajar machine learning menjadi sesuatu yang sangat mudah. Bahkan bisa dibilang hanya membutuhkan beberapa baris code saja.
Terdapat face-api.js yang bekerja di atas tensorflow.js yang telah mengimplementasikan Algoritma CNNs (Convolutional Neural Networks), untuk memecahkan permsalahan seperti Pendeteksian wajah, pengenalan wajah, Face Lanmark dan sebagainya.
Ok supaya tidak Panjang lebar mari kita langsung persiapkan segala sesuatunya.

  1. Pastikan telah terinstall xampp, atau package webserver favorit kita di laptop yang akan digunakan
  2. Buat folder baru dengan nama face-detection di htdoc
  3. Download Tensorflow.rar
  4. Extract kedalam folder face-detection
  5. Buat file index.html
  6. Isikan pada tag <head>….</head>
    TensorFlow JS untuk Deteksi Wajah (Tutorial Part 1) 1
  7. Pada bagian body tambahkan element video dan canvas.
    TensorFlow JS untuk Deteksi Wajah (Tutorial Part 1) 2
  8. Buat file script.js di folder dist sehingga kurang lebih tampilan isi file akan menjadi seperti gambar di bawah.
    TensorFlow JS untuk Deteksi Wajah (Tutorial Part 1) 3
  9. Dalam file script.js tambahkan deklarasi sebuah variable yang mengarah ke elemen video dan canvas
    TensorFlow JS untuk Deteksi Wajah (Tutorial Part 1) 4
  10. Panggil seluruh model yang dibutuhkan dengan menggunakan perintah promise. Pada kesempatan kali ini kita akan menggunakan pendeteksian wajah,kondisi mood, dan pendeteksian landamark pada wajah.
    TensorFlow JS untuk Deteksi Wajah (Tutorial Part 1) 5
  11. Tambahkan perintah untuk memulai penggunaan webcam dengan menambahkan fungsi startWbcam.
    TensorFlow JS untuk Deteksi Wajah (Tutorial Part 1) 6
  12. Sampai langkah ini maka ketika kita jalankan di browser makan akan keluar popup permintaan izin untuk menggunakan webcam atau camera. Pastikan tekan tombol Allow untuk memberikan izin kepada browser untuk menggunakan webcam/ camera. Jika proses berjalan lancar maka seharusnya webcam sudah menampilkan gambar dan berfungsi dengan baik. Jika terjadi kesalahan atau gambar tidak muncul berarti terdapat kesalahan ketik pada kode program. Untuk melihat kode program yang error bisa dilakukan inspect element pada browser.
    TensorFlow JS untuk Deteksi Wajah (Tutorial Part 1) 7
  13. Tambahkan fungsi listener yang akan otomatis dijalankan ketika webcam/ camera telah berhasil diakses yang otomatis akan menjalankan function renderVideo()
    TensorFlow JS untuk Deteksi Wajah (Tutorial Part 1) 8
  14. Tambahkan sintax untuk mulai melakukan pengenalan wajah. Dalam fungsi renderVideo(). Akan dilakukan perulangan secara terus menerus, supaya proses pendeteksian wajah akan selalu dilakukan selama camera berjalan.
    TensorFlow JS untuk Deteksi Wajah (Tutorial Part 1) 9
  15. Jika berjalan lancar maka setiap ada orang yang lewat didepan kamera akan terdeteksi wajahnya.

 

Selamat Mencoba!

Source code tutorial ini dapat diunduh di sini

Sedangkan untuk lanjutan tutorial ini bisa dibaca di TensorFlow JS untuk Deteksi Wajah (Tutorial part 2)

 

 

Agile: Project Management yang Fokus ke Pengguna

 

Dalam artikel scrum kita telah sedikit membahas tentang agile project management di mana scrum merupakan framework dari agile yang populer digunakan selain kanban.  Dalam artikel tersebut kami lebih memfokuskan membahas ritual-ritual yang dijalani saat kita menggunakan scrum tapi justru kurang memberi pengertian tentang apa agile itu sendiri. Oleh karena itu, kami berharap dalam artikel ini kami berharap kami memberikan gambaran umum tentang agile kepada semua kalangan termasuk yang belum memiliki pengalaman dalam software development sekalipun.

 

Apa Itu Agile?

Agile adalah metodologi dalam pengembangan software dengan proses-proses kecil yang berulang-ulang atau yang sering disebut dengan iterasi. Berbeda dengan metodologi waterfall di mana kita memiliki alur linear awal hingga akhir yang tak bisa dipotong atau diubah di tengah proses. Prinsip dari agile sendiri adalah fleksibel terhadap perubahan.

 

Agile: Project Management yang Fokus ke Pengguna 10

 

Agile sendiri lahir dari perusahaan Jepang Toyota pada tahun 70’an di mana pada tahun tersebut produksi mobil menerapkan sistem waterfall. Jadi memang agile sebenarnya tidak murni milik perusahaan yang bergerak di bidang software development saja. Sebelum Toyota menerapkan metode yang disebut Toyota Production System pada dekade tersebut, mereka merekrut W. Edwards Deming untuk melatih ratusan managernya. W. Edwards Deming merupakan seorang engineer yang menyempurnakan metode siklus Plan-Do-Study-Act (PDSA).

 

Agile Manifesto

We are uncovering better ways of developing software by doing it and helping others do it.

Through this work we have come to value:

Individuals and interactions over processes and tools

Working software over comprehensive documentation

Customer collaboration over contract negotiation

Responding to change over following a plan

 

Agile memiliki manifesto seperti yang tertulis di atas. Metode agile mengedepankan individu dan interaksi dibanding proses dan alat, software yang terus dikerjakan dibandingkan dokumentasi yang komprehensif, kolaborasi dengan pelanggan dibandingkan negosiasi kontrak, serta peka terhadap perubahan dibanding selalu mengikuti rencana. Walaupun begitu, metode ini tidak serta-merta meninggalkan semua yang berada di sebelah kanan dari manifesto. Akan tetapi jika dihadapkan pada kondisi harus memilih satu di antara dua, maka yang dipilih adalah yang sebelah kiri.

 

Contoh Penerapan Agile

Agile memang lebih mudah diterapkan pada proyek pengembangan software karena pada dasarnya sebuah produk software atau aplikasi merupakan kumpulan dari beberapa fitur-fitur kecil yang digabungkan jadi satu.  Itulah mengapa metode ini populer di kalangan start-up digital. Akan tetapi seperti yang sudah dibahas sebelumnya, agile justru lahir dari produsen mobil di mana pengguna melihat produk mobil secara keseluruhan. Untuk itu, kami akan memberikan contoh penerapan agile dalam pengembangan mobil karena mobil lebih familiar untuk semua kalangan.

Katakanlah kita ingin membuat sebuah mobil. Pada metode waterfall kita membuat list tentang apa yang dibutuhkan oleh pengguna dari mobil tersebut mulai dari jenis mobil,  kapasitas penumpang, tenaga mesin, sistem transmisi, sistem pengendalian, dan sebagainya. Lalu kita akan mendesain mobil secara keseluruhan mulai dari chasis, body, mesin, hingga interior. Setelah keseluruhan desain diselesaikan mungkin kita akan meminta persetujuan dari klien yang memesan mobil tersebut dan kemudian memproduksi bagian-bagiannya satu persatu.

Proses perakitan pun dimulai, kita merangkai bagian-bagian tersebut hingga menjadi sebuah unit mobil. Kita kembali mengkonsultasikan produk tersebut ke klien. Di tahap inilah sering muncul permasalahan klasik metode waterfall. Di saat klien kurang puas dengan katakanlah satu bagian saja, misalnya bagian suspensi. Kita harus membongkar atau bahkan mendesain ulang keseluruhan mobil termasuk rangka dan bodi.

Di dalam metode Agile dengan menggunakan contoh yang sama, setelah membuat daftar tentang apa yang dibutuhkan target pengguna dari sebuah mobil saatnya memilah fitur tersebut untuk diprioritaskan semisal suspensi yang nyaman pada urutan pertama. Maka kita akan memfokuskan pada desain rangka dan damper (shock absorber) dan memproduksi part tersebut. Lalu kita akan meminta klien untuk mengetes-nya walaupun kita belum membuat mesin ataupun body-nya. Bahkan jika perlu, kita bisa memasang bodi atau mesin dari produk yang sudah pernah dibuat sebelumnya baik oleh kita sendiri atau produsen lain agar mobil bisa berjalan terlebih dahulu selama pengetesan. Jika ada ketidakpuasan dari klien, kita tidak usah repot-repot membongkar desain dari keseluruhan mobil. Setelah mendapat persetujuan dari klien, maka kita akan fokus untuk menyediakan fitur selanjutnya. Proses ini berjalan berulang-ulang hingga semua kebutuhan pengguna atas sebuah mobil tercukupi. Jika profesi Anda berkecimpung dalam pengembangan software atau aplikasi tentu Anda sudah mendapatkan gambaran singkat contoh agile dan waterfall dalam proyek yang Anda jalankan.

***

Jadi pada intinya, perbedaan metode agile dan waterfall terletak pada proses di mana agile lebih melibatkan klien / kustomer dalam  menyempurnakan bagian-bagian kecil dari sebuah produk. Sesuai dengan manifesto agile yang sudah kami sebutkan sebelumnya, produk yang diciptakan melalui metode ini cenderung akan lebih bisa menyesuaikan dengan perubahan-perubahan yang disebabkan oleh tren maupun inovasi baru. Memang penerapan metode ini tidak semudah teorinya. Perusahaan sekelas Toyota saja butuh waktu dan effort yang lebih untuk menerapkan metode agile ini dengan melatih karyawannya di level perencana maupun pelaksana.

Jika Anda ingin menguasai penerapan agile sesuai dengan PMBOK 6, Anda dapat mengikuti class of the month dengan materi “Agile Practice Guide in PMBOK 6” oleh Inixindo Jogja.

 

#ComDay – Pengenalan Wajah dengan TensorFlow untuk Presensi Online

#ComDay – Pengenalan Wajah dengan TensorFlow untuk Presensi Online

#ComDay - Pengenalan Wajah dengan TensorFlow untuk Presensi Online 11

Perkembangan teknologi dalam mengidentifikasi ID seseorang terus berkembang dari waktu ke waktu mulai dari penggunaan kartu, sidik jari, retina scan, hingga yang populer beberapa tahun belakangan ini yaitu pengenalan wajah. Teknologi ini sempat ramai dibicarakan saat Apple mengganti teknologi pengenalan sidik jari dengan Face ID yang menggunakan pengenalan wajah untuk membuka kunci layar pada iPhone X.

Sebenarnya teknologi pengenalan wajah tidak hanya dapat digunakan sebagai pembuka kunci smartphone saja tapi juga bisa digunakan untuk keperluan lain karena pengenalan wajah hanya membutuhkan kamera yang sekarang sudah menjadi komponen wajib di smartphone atau laptop. Salah satu penggunaan pengenalan wajah ini adalah untuk keperluan presensi dan telah dipakai oleh Baidu yang menggantikan kartu ID dengan pengenalan wajah untuk memberikan karyawan mereka akses masuk ke kantor. Apalagi dengan menjamurnya remote working, teknologi pengenalan wajah tentunya akan memberikan solusi terhadap permasalahan presensi karena dapat dilakukan secara online.

Jika Anda berpikir teknologi pengenalan wajah ini terlalu rumit untuk diaplikasikan karena menggunakan metode deep learning yang dari namanya sudah terdengar rumit, Anda dapat menggunakan TensorFlow. TensorFlow merupakan library perangkat lunak open source dan gratis yang dapat digunakan untuk mengembangkan pengenalan wajah. TensorFlow menyediakan beberapa model dan dataset deep learning yang dapat Anda gunakan dalam mengembangkan presensi online dengan pengenalan wajah.

Jika ingin mengenal TensorFlow lebih dalam lagi Anda dapat mengikuti Comday dengan tema “Pengenalan Wajah dengan TensorFlow untuk Presensi Online” yang akan diadakan Inixindo Jogja tanggal 20 Juni 2019. Comday ini akan mengulas tentang cara mengembangkan deep learning network untuk jaringan pengenalan wajah menggunakan TensorFlow

***

Baca juga tutorial TensorFlow bagian pertama dan bagian kedua

 

Biaya

Free (tempat terbatas)

DATE AND TIME

Kamis, 20 Juni 2019
14.00 WIB – Selesai

LOCATION

Eduparx – Inixindo Jogja
Jalan Kenari No 69 Yogyakarta
View Maps

This form does not exist

Pendaftaran ditutup karena kapasitas telah terpenuhi

Mengenal MU-MIMO Pada Teknologi Wireless

Jika membicarakan teknologi jaringan wireless terutama Wi-Fi pada level pengguna pasti ada di antara kita yang menjadi pendukung fanatik atau pun penolak die hard. Mendukung atau menolak biasanya tergantung dari device dan kebutuhan. Orang serba simpel, tak mau ribet, dan kelihatan keapple-applean tentu banyak yang cinta mati dengan Wi-Fi dan merasa jijik dengan konektor RJ45. Sebaliknya orang yang suka nonton video streaming 4K dan para gamer tentu saja tak bisa hidup tanpa kabel ethernet.

Seperti yang kita ketahui bahwa Wi-Fi yang biasa kita pakai di coffee shop, perpustakaan, dan tempat umum memiliki beberapa kelebihan dan kekurangan. Kelebihannya sudah jelas yaitu pengguna tak perlu terjerat oleh kabel yang membatasi ruang gerak bahkan hanya untuk sekedar menggeser laptop. Sedangkan untuk kelemahan, kualitas koneksi Wi-Fi tentu saja kalah dengan kabel ethernet biasa apalagi jika jumlah pengguna dalam satu router cukup banyak. Tapi sekarang para fans wi-fi tak perlu berkecil hati lagi karena hadirnya teknologi baru pada wireless network yang disebut MU-MIMO

 

Apa itu MU-MIMO?

MU-MIMO adalah singkatan dari Multi User, Multiple input, Multiple Output. Walaupun singkatannya imut dan menggemaskan, MU-MIMO ini memiliki kemampuan lebih yang signifikan bila dibandingkan dengan generasi sebelumnya yaitu SU-MIMO (Single User, Multiple input, Multiple Output) yang mulai kita jumpai pada protokol 802.11n di sekitar tahun 2007. Pada MU-MIMO sendiri protokol yang digunakan adalah 802.11ac tapi tidak semua chipset Wi-Fi yang mendukung protokol 802.11ac juga mendukung fitur MU-MIMO.

Tidak seperti SU-MIMO yang hanya memiliki satu jalur untuk beberapa pun jumlah penggunanya, MU-MIMO menggunakan beberapa jalur terpisah untuk dapat digunakan oleh beberapa user. Jumlah jalur ini tergantung dari angka pada spesifikasi router atau access point. Router 2×2 memiliki 2 jalur yang berarti 2 user/device dapat mengirimkan request dan mendapatkan response secara bersamaan. Sistem yang sama juga berlaku untuk access point 3×3, dan 4×4.

 

Mengenal MU-MIMO Pada Teknologi Wireless 12

 

Bagaimana Cara MU-MIMO bekerja?

Seperti yang disebutkan sebelumnya, MU-MIMO membuat router atau access point bisa berkomunikasi dengan beberapa perangkat/pengguna dalam satuan waktu dengan beberapa jalur yang berbeda. Jika dianalogikan, MU-MIMO seperti memiliki beberapa kasir dalam sebuah supermarket yang dapat memecah antrian orang belanja. Secara umum jalur-jalur yang dimiliki ini terpisah secara spasial, jadi user yang berada di sebelah utara access point memiliki jalur yang berbeda dengan yang ada di selatan, barat, atau timur access point.

Keuntungan penggunaan MU-MIMO ini tidak hanya didapatkan dari perangkat yang telah mendukung MU-MIMO saja tapi juga pengguna yang perangkatnya belum mendukung MU-MIMO. Hal ini disebabkan karena jika banyak pengguna yang mendukung MU-MIMO dalam antrian tersebut otomatis jumlah antrian akan berkurang karena pengguna MU-MIMO tersebut terlayani dengan cepat. Selain masalah kecepatan, masalah keamanan bisa dijadikan alasan untuk menggunakan MU-MIMO karena sinyal yang dikirim atau diterima oleh access point MU-MIMO terenkripsi.

 

Keterbatasan MU-MIMO

Bagaimana sudah tertarik untuk membeli access point MU-MIMO? Jangan terburu-buru dulu! Selain kelebihan MU-MIMO yang sudah kami sebutkan di atas, MU-MIMO memiliki beberapa keterbatasan yang dapat membuat kita harus berpikir dua kali sebelum membeli access point MU-MIMO yang harganya tentu saja di atas access point biasa.

Keterbatasan MU-MIMO:

  • MU-MIMO mengharuskan router dan perangkat client harus mendukung teknologi ini. Jadi jika perangkat pengguna banyak yang belum mendukung MU-MIMO, membeli access point MU-MIMO adalah sesuatu yang sia-sia.
  • Performa MU-MIMO hanya terasa jika banyak pengguna yang terhubung
  • Pembagian jalur MU-MIMO spasial membuat kita tidak bisa berpindah pindah memutari router dan kemungkinan router akan memindahkan user tersebut ke jalur SU-MIMO
  • MU-MIMO tidak meningkatkan kecepatan upstream, jadi untuk pengguna yang membutuhkan upstream tinggi seperti mengupload konten video tidak seberapa merasakan perbedaan antara MU-MIMO dan dan Wi-Fi biasa.

 

***

 

Walaupun MU-MIMO punya banyak keterbatasan, pengembangan di teknologi jaringan masih belum berhenti untuk berusaha memecahkan masalah keterbatasan tersebut dan saat artikel ini dipublikasikan sudah banyak perangkat laptop atau pun smartphone yang sudah mendukung MU-MIMO.

Source Code Audit dengan SAST Tools (Tutorial)

Aplikasi yang berkualitas dimulai dari source code atau kode sumber yang berkualitas pula. Bila kode sumber yang dihasilkan oleh pemrogram (programmer) masih terdapat kesalahan atau bug, tidak mengikuti standar pemrograman yang baik atau masih menyisakan berbagai lubang keamanan, maka akan memberikan dampak yang negatif bagi jalannya aplikasi pada saat digunakan. Para peretas (hacker) akan mampu melakukan eksploitasi terhadap berbagai kerentanan yang terdapat di aplikasi tersebut sehingga dapat menyebabkan kerugian yang besar bagi perusahaan atau organisasi.

Untuk meminimalisir kerentanan yang bisa terdapat dalam aplikasi, maka perlu dilakukan pengujian atau audit terhadap aplikasi tersebut. Ada 2 (dua) pendekatan dalam melakukan pengujian atau audit terhadap aplikasi, yaitu Static Application Security Testing (SAST) dan Dynamic Application Security Testing (DAST).

SAST, juga dikenal sebagai white box testing, dapat menemukan berbagai kerentanan dan lubang keamanan dalam kode sumber aplikasi secara lebih awal dalam siklus hidup pengembangan aplikasi. Ini juga memastikan kesesuaian dengan pedoman dan standar pemrograman tanpa perlu melakukan eksekusi aplikasinya. SAST hanya murni melakukan analisis terhadap kode sumber untuk menemukan berbagai bug, ketidaksesuaian pemrograman dengan standar serta lubang keamanan yang masih terdapat dalam aplikasi.

DAST, juga dikenal sebagai black box testing, dapat menemukan berbagai kerentanan dan kelemahan keamanan dalam aplikasi yang sedang berjalan. DAST menggunakan teknik injeksi kesalahan pada aplikasi, seperti melakukan input data berbahaya ke aplikasi, untuk mengidentifikasi kerentanan keamanan umum seperti injeksi SQL (SQL injection) dan skrip lintas situs (cross-site scripting). DAST juga dapat menunjukkan masalah runtime yang tidak dapat diidentifikasi dengan SAST, misalnya masalah otentikasi dan konfigurasi server serta kerentanan yang hanya terlihat ketika pengguna melakukan login dan memasukkan data.

Salah satu alat bantu atau tool SAST yang dapat digunakan oleh seorang auditor saat melakukan pemeriksaan terhadap kode sumber dengan bahasa pemrograman Java adalah FindBugs. FindBugs merupakan suatu aplikasi gratis berbasis Open Source berlisensi LGPL atau Lesser GNU Public License yang menggunakan teknik analisis statis terhadap kode sumber Java untuk menemukan berbagai kesalahan pemrograman, lubang keamanan, serta ketidaksesuaian terhadap standar pemrograman yang baik dan benar. Situs web untuk FindBugs ada di http://findbugs.sourceforge.net/

Seorang pemrogram biasanya menggunakan tool IDE (Integrated Development Environment) saat mengembangkan aplikasi. Sebagai contoh untuk pengembangan aplikasi Java, pemrogram dapat menggunakan Eclipse atau NetBeans IDE yang memiliki berbagai fitur sehingga memudahkan dan mempercepat kerja pemrograman. Telah terdapat plugin FindBugs baik untuk Eclipse maupun NetBeans IDE sehingga fitur FindBugs dapat diintegrasikan dengan kedua tool IDE tersebut untuk melakukan teknik SAST terhadap kode sumber Java.

Berikut adalah cara menggunakan FindBugs dengan NetBeans IDE versi 8.2 yang telah terintegrasi. Pertama, pastikan telah membuat atau membuka project Java di NetBeans IDE serta telah membuka file yang berisikan kode sumber Java. Selanjutnya, untuk menjalankan FindBugs yang telah terintegrasi di NetBeans IDE sehingga dapat melakukan audit kode sumber Java tersebut, pilihlah menu Source dan kemudian Inspect seperti berikut:

Source Code Audit dengan SAST Tools (Tutorial) 13

 

Pada dialog Inspect yang muncul, pilih FindBugs di bagian combo box Configuration untuk menjalankan FindBugs sebagai berikut:

Source Code Audit dengan SAST Tools (Tutorial) 14

 

Bila belum pernah menjalankan FindBugs di NetBeans IDE sebelumnya, maka perlu melakukan instalasi terlebih dahulu. Pastikan sudah terkoneksi ke Internet sebelum klik pada tombol Install karena NetBeans IDE akan secara otomatis melakukan download dan instalasi plugin FindBugs sehingga terintegrasi dengan NetBeans IDE:

Source Code Audit dengan SAST Tools (Tutorial) 15

 

Setelah klik tombol Install maka akan muncul dialog untuk instalasi plugin FindBugs. Klik pada tombol Next hingga selesai, dan bila muncul License Agreement maka pilihlah “I accept” sebelum melanjutkan instalasi. Download plugin FindBugs akan dimulai secara otomatis setelah menyetujui License Agreement. Setelah download selesai maka akan muncul dialog konfirmasi untuk instalasi plugin FindBugs. Klik pada tombol Continue untuk melanjutkan instalasi hingga selesai, dan terakhir klik pada tombol Finish untuk mengakhiri instalasi FindBugs di NetBeans IDE. Akhirnya untuk menjalankan FindBugs, klik pada tombol Inspect sehingga muncul daftar temuan (bila ada) dari hasil teknik SAST seperti contoh berikut:

Source Code Audit dengan SAST Tools (Tutorial) 16

 

Panel Inspector pada bagian bawah menampilkan daftar temuan berbagai bug, ketidaksesuaian standar pemrograman dan lubang keamanan yang terdapat pada kode sumber. Bila melakukan double-click pada suatu temuan, maka NetBeans IDE akan langsung menunjukkan baris kode sumber yang bermasalah beserta penjelasan tentang masalah tersebut. Sebagai contoh, berikut adalah temuan adanya kerentanan cross-site scripting pada kode sumbernya:

Source Code Audit dengan SAST Tools (Tutorial) 17

 

Sayangnya aplikasi FindBugs memang hanya bisa digunakan untuk kode sumber dengan bahasa pemrograman Java saja, namun ada juga berbagai tool SAST lain yang dapat mendukung berbagai bahasa pemrograman. Salah satunya adalah SonarQube yang mampu menerapkan SAST terhadap kode sumber dari 25 lebih bahasa pemrograman seperti PHP, JavaScript, Kotlin, Swift, C#, Python dan ABAP.

Dengan demikian, seorang auditor akan mampu melakukan audit terhadap kode sumber secara cepat dan efektif melalui penggunaan teknik dan aplikasi alat bantu SAST seperti FindBugs dan SonarQube. Harapan auditor adalah bahwa daftar temuan yang didapatkannya tersebut akan dijadikan sebagai masukan bagi pemrogram agar melakukan tindakan korektif untuk memperbaiki serta meningkatkan kualitas dari kode sumber yang dibuat olehnya sehingga aplikasi menjadi lebih aman, handal, dan berkualitas.

Selamat belajar dan mencoba!

 

 

Konten tutorial ini ditulis oleh:

Andrian The