Error 404 when using GitHub when I reload the page

Error 404 when using GITHUB when I reload the page by Andrea Lopez BravoAndrea Lopez Bravo (Stack Overflow)
I am making an E-commerce website with react and I upload the website to Github pages the deployment works ok, but when I click the Nav buttons to go to different parts of the webpage and reload th…

This question was originally asked on StackOverflow. View original question

I am making an E-commerce website with react and I upload the website to Github pages the deployment works ok, but when I click the Nav buttons to go to different parts of the webpage and reload the page, an error 404 appears:

Failed to load resource: the server responded with a status of 404 ()

In the local host it works totally fine. Should I need to deploy my website as a new project again? I have always upload the websites the same way and I did not have this problem. I actualized my google browser, can there can be a compatibility problem? Thanks a lot!

Note: I assume that you are using create-react-app with JSX and react-router-dom like this:

<BrowserRouter> <Routes> <Route exact path="/" element={<HomePage />} /> <Route path="cart" element={<CartPage />} /> <Route path="settings" element={<SettingsPage />} /> </Routes> </BrowserRouter>
Code language: JavaScript (javascript)

Well, HTTP routing in GitHub Pages works differently than using the npm start command in your local machine. And fortunately, the developers behind create-react-app have already explained the technical reasons behind this:

If you use routers that use the HTML5 pushState history API under the hood (for example, React Router with browserHistory), many static file servers will fail. For example, if you used React Router with a route for /todos/42, the development server will respond to localhost:3000/todos/42 properly, but an Express serving a production build as above will not.

This is because when there is a fresh page load for a /todos/42, the server looks for the file build/todos/42 and does not find it. The server needs to be configured to respond to a request to /todos/42 by serving index.html.

And yes, GitHub Pages also counts as a static file server, and expects that those routes are available as individual static files (e.g. build/cart.html for the /cartroute), and the goal here is to trick GitHub Pages to serve index.html instead for all of these routes. However, it is currently notpossible to fix this issue on the GitHub Pages’ side, e.g. by applying the .htaccessconfiguration file (since GitHub Pages doesn’t use Apache Web Server) or going to the repository settings on GitHub.

So, what can be done here? The above code snippet uses <BrowserRouter>, which is known to be incompatible for hosting with GitHub Pages. And good news, many recommend to replace the <BrowserRouter> into <HashRouter>,which should work in practically all static file servers (see technical reasons here). There’s a dedicated FreeCodeCamp article on how to set up <HashRouter> for your React project and publishing it into GitHub Pages.


Note: Once you have replaced it with <HashRouter>, you will need to take care of existing hardcoded paths in HTML/JSX tags as <HashRouter> uses good-old HTML anchor/ID tags (e.g. #menu). That means <a href="/cart"> in your React app must be replaced with <a href="#/cart"> (Note the additional hash/# character there) or else it will again return a 404.

Balasan Twitter #1455738207417470980

Karena begini nih, kalian pernah ga dapet info lowongan kerja sebagai software developer di PeduliLindungi gitu… atau di Mabes Polri? Dinas Lingkungan Hidup DKI Jakarta? Pemerintah Kabupaten Cisarua?

Karena mereka sendiri belum punya expertise dalam ngembangin aplikasi, website, sistem dll. ujung-ujungnya mereka nyari vendor dari software house by tender, dan mereka biasanya nyari kandidat tender yang murah tapi ga ngeliat kualitas dari software yang dikembangin…

Bagi mereka itu sering jadi solusi yang paling cepat. “Yang penting kelar”, katanya. Tapi sebagai software house kita ga mungkin ngembangin aplikasinya lebih lanjut kalau ga ada kontrak lagi. Bener kan?

Nih misalnya pemkot Semarang yang punya banyak aplikasi…

Atau ada sebuah Software House yang bikin banyak aplikasi untuk para Polda, tapi setelah saya klik linknya semua aplikasinya udah dihapus dari Google Play Store.

Ilmu Matematika Diskrit dapat diimplementasikan dalam bidang apa saja?

Kotakode.com | Komunitas Developer Indonesia by @fey_ @fey_ (kotakode.com)

Artikel ini merupakan jawaban saya terhadap salah satu pertanyaan pada situs Kotakode.com, sebuah forum dan komunitas para developer di Indonesia. Lihat pertanyaan asli

Saya membeli buku Matematika Diskrit dan terdapat materi yang didalamnya meliputi:

1. Logika
2. Himpunan
3. Matriks, relasi, dan fungsi
4. Induksi Matematik
5. Algoritma dan Bilangan Bulat
6. Kombinatorial dan Peluang Diskrit
7. Aljabar Boolean
8. Graf
9. Pohon
10. Kompleksitas Algoritma

Namun saya kurang mengerti dalam pengimplementasian-nya, Mohon penjelasannya 🙏

Matematika Diskrit adalah salah satu ilmu yang sebenarnya cukup berguna di dunia pemrograman, namun sayangnya banyak pengajar (termasuk dosen) menjelaskan ilmu ini dengan konvensi dan cara yang terlihat kurang relevan dengan dunia pemrograman saat ini, misalnya penggunaan simbol A ∪ B daripada A && B dan ¬S daripada !S.

Tujuan untuk belajar soal Logika dan Aljabar Boolean ini sebenarnya cukup jelas: agar kamu dapat memahami cara menggunakan perintah IF-ELSE dan operator Boolean secara baik dan benar. Di sini saya bakal kasih contoh sebuah function untuk mengecek apakah bilangan a, b, dan c berurutan dari yang terkecil hinga teratas:

// Bahasa C #include <stdio.h> int main(){ int a = 3, b = 4, c = 9; // Perhatikan penggalan berikut ini if (a <= b && b <= c){ puts("Berurutan!"); } else { puts("TIDAK berurutan!"); } return 0; }
Code language: C++ (cpp)

Pertanyaannya di sini adalah, apa yang harus diubah sehingga perintah puts("Berurutan!")lah yang ditaruh di dalam bagian else dan sebaliknya. Dari materi Logika inilah kita mengetahui bahwa negasi dari A ∩ B (A dan B), yakni ¬(A ∩ B), sebenarnya sama dengan (¬A) ∪ (¬B) (tidak A atau tidak B). Sehingga, penggalan IF-ELSE tersebut dapat ditulis ulang sebagai:

if (!(a <= b) || !(b <= c)){ puts("TIDAK berurutan!"); } else { puts("Berurutan!"); }
Code language: C++ (cpp)

Dan karena penggalan !(a <= b) sebenarnya sama saja dengan a > b atau b < a, maka hal tersebut dapat dipersingkat lagi menjadi:

if (a > b || b > c){ puts("TIDAK berurutan!"); } else { puts("Berurutan!"); }
Code language: C++ (cpp)

Kemudian, materi Pohon, Graph, dan Matriks juga sangat berguna untuk memahami berbagai jenis struktur data yang sering dipakai dalam dunia pemrograman sehari-hari. Jika kamu berminat untuk mengolah gambar menggunakan pustaka/library OpenCV, kamu nantinya akan sering bermain-main dengan transformasi Matriks yang mungkin kamu sudah kenal saat duduk di bangku SMA atau bahkan SD.

Sedangkan, Pohon (khususnya Pohon Biner / Binary Tree) merupakan salah satu topik yang paling sering ditanya saat kamu melamar pekerjaan di dunia software engineer. Mengapa? Karena struktur data tersebut kini masih berguna untuk melakukan pengurutan/penyortiran dan pencarian kumpulan data yang jauh lebih efisien daripada menggunakan deretan Array maupun Linked List.

Kalau kamu berminat dalam dunia keamanan siber (Cyber Security), kamu mau tidak mau harus memahami tentang Graph karena melalui Graph, kamu bisa memetakan relasi antara sebuah informasi dengan informasi lainnya untuk membantu kamu melancarkan proyek investigasi kamu. Oh iya, fitur navigasi dalam aplikasi peta seperti Google Maps juga tidak dapat dibuat secara efisien tanpa pemahaman soal Graph yang lebih kompleks dan mendalam.

Saya sebenarnya belum bisa menjawab hubungan antara semua bab yang kamu sebutkan dengan dunia pemrograman sehari-hari. Tetapi, ada beberapa hal lagi yang cukup penting: Himpunan bakal sangat berguna bagi kamu baik dalam dunia pemrograman berbasis objek (OOP) serta Database, karena nantinya kamu harus mencari hubungan-hubungan antar sebuah objek dengan objek lain, sebuah tabel/entity di dalam database dengan tabel/entity lain, dan hubungan antara himpunan data dengan himpunan data lain.

Dan tentunya, Kombinatorial, Peluang Diskrit, dan Kompleksitas Algoritma cukup penting juga untuk dipahami. Karena sebagai pemrogram/programmer yang baik kita tentunya tidak hanya membuat algoritma yang tepat, tetapi juga efisien baik dalam penggunaan memori maupun waktu. Dengan memahami ketiga hal tersebut, kamu dapat menentukan apakah algoritma yang kamu buat terasa berlebihan dalam menggunakan perintah-perintah pada komputer.

Demikian jawaban saya. Terima kasih.

Menambahkan array baru pada object array

Kotakode.com | Komunitas Developer Indonesia by lawlieth (kotakode.com)

Artikel ini merupakan jawaban saya terhadap salah satu pertanyaan pada situs Kotakode.com, sebuah forum dan komunitas para developer di Indonesia. Lihat pertanyaan asli

Pertanyaan

Saya punya list data berdasarkan tahun, dimana list data tersebut dicek apakah list data tersebut setiap tahun ada datanya atau tidak… jika list data tersebut tidak ada data.nya, maka tambahkan object baru… ini codingannya saya :

$data = [ [ 'hak' => '12', 'tambahan' => '6', 'sisa' => '12', 'tahun' => '2019' ], [ 'hak' => '12', 'tambahan' => '6', 'sisa' => '12', 'tahun' => '2021' ] ]; $tahun = [ '2019', '2020', '2021' ]; for($i=0;$i<count($tahun);$i++){ $tahun == $tahun[$i]; $filterData = array_filter($data, function($entry) { global $tahun; return $entry['tahun'] == $tahun; } ); $newdata = [ 'hak' => '12', 'tambahan' => '0', 'sisa' => '0', 'tahun' => $tahun ]; if(count($filterData)==0){ $data = array_push($newdata); } } return $data;
Code language: PHP (php)

Hasil yang diinginkan seperti ini:

[ { hak: '12', tambahan: '6', sisa: '12', tahun: '2019' }, { hak: '12', tambahan: '0', sisa: '0', tahun: '2020' }, { hak: '12', tambahan: '6', sisa: '12', tahun: '2021' } ]
Code language: JSON / JSON with Comments (json)

Tetapi setelah saya jalankan codinganya, muncul error seperti ini : array_filter() expects parameter 1 to be array, null given


Jawaban

Halo, kalau saya lihat kamu salah menggunakan array_push():

$data = array_push($newdata);
Code language: PHP (php)

cara yang benar untuk memakainya adalah

array_push($data, $newdata);
Code language: PHP (php)

karena fungsi array_push() akan mengembalikan return value berupa jumlah isi di dalam array yang sudah dimerge, bukan array yang sudah digabungkan tersebut. Makanya muncul error itu.

Poll: Apakah kita perlu buat HaveIBeenPwned.com versi Nomor Induk Kependudukan (NIK)?

Situs HaveIBeenPwned.com (dibaca “have I been owned”, artinya “apakah (akun) saya dipakai orang lain?”) ini sering dipakai untuk mencari informasi apakah alamat surel (email) dan kata sandi (password) Anda pernah bocor dari situs, aplikasi, atau sistem tertentu.

Saya masih ingat dengan kasus bocornya data pengguna Bukalapak dan Tokopedia beberapa tahun lalu yang sempat buat masyarakat panik, dan untungnya tim pengembang di balik situs ini berhasil mengekstrak data pengguna (alamat surel/email, nomor telepon) yang bocor ke dalam situs tersebut, sehingga para korban dapat mengecek apakah akun mereka juga telah dibocorkan.

Nah, kalau bahas soal NIK (Nomor Induk Kependudukan), sebenernya sering bocor juga sih. Mulai dari laman pencarian Daftar Pemilih Tetap (DPT) Pemilihan Umum yang kerap telanjur dimasukkan ke dalam Google Search dan mesin pencari lainnya, bahkan adanya grup-grup investasi palsu di Telegram yang buka-bukaan data NIK dan nomor rekening masyarakat.

Lanjutan kasus grup HQSahamIDX palsu

Nah, kemarin temen gw pr0xy sempat kasih tahu soal grup HQSahamIDX palsu yang terciduk itu. Dan jujur aja gw prihatin sama admin grup palsu tersebut yang membagi-bagikan Nomor Induk Kependudukan secara gratis, tis, tis!!! Eh beneran lho! NIK mereka asli dan bahkan bisa diverifikasi di dalam aplikasi PeduliLindungi. Kalau seandainya nomor teleponnya juga ga disensor sama adminnya, siapa tahu saya juga bisa download sertifikat vaksinnya secara sekaligus!

Oke, di bagian kiri gambar tersebut adalah screenshot dari aplikasi Telegram. Karena grup ini adalah grup publik, saya juga bisa mengakses postingan yang sama di luar aplikasi Telegram dengan menyalin tautan pesan publik (“Copy Message Link”) dan mengaksesnya di peramban (web browser) dengan mudah. Saya tidak tau kenapa preview dari chat tersebut tidak bisa dimasukkan ke dalam Internet Archive Wayback Machine, tapi intinya kita masih bisa ekstrak isi pesannya.

Oh iya, karena grup ini publik dan malah meng-encourage (menyemangati) untuk masukkin member sebanyak-banyaknya, seseorang bisa saja membuat sebuah aplikasi client Telegram baru yang menyusup ke dalam grup itu dan mengekstrak semua data pribadi yang dibagikan di dalam chat tersebut. Oh iya, data pribadi yang dimasukkin itu juga bisa berasal dari korban penipuan, lho!

Karena itu jujur aja saya mau nanya nih, menurut kalian perlu tidak untuk buat semacam situs HaveIBeenPwned, tapi lebih ke arah kebocoran Nomor Induk Kependudukan alias nomor KTP? Kalau kalian mau jawab sekarang ini formnya ya.

Emang NIKnya aman dimasukkin di situ? Apa nanti ga diciduk pemerintah karena nyimpan segitu banyak NIK yang bocor?

Nah, itu dia masalahnya. Kita harus ngebuktiin bahwa:

  1. NIK yang masuk di websitenya aman, dan
  2. Kita bisa ngebuktiin bahwa NIK yang masuk aman, dan
  3. Semua ini bisa dibuktikan tanpa campur tangan pemerintah/kementerian/dinas terkait (independen), termasuk kepolisian dan lembaga-lembaga terkait (BIN, BSSN, dan sebagainya)

Website HaveIBeenPwned.com ini bersifat closed-source, artinya tidak semua data di dalam situsnya itu dapat diakses dan diunduh oleh publik meskipun dengan alasan yang baik. Jika kita melakukan hal yang sama terhadap NIK, kita mungkin bisa tepar ngurusin masalah perizinan pemerintah dan kepatuhan terhadap rancangan UU PDP nanti. Saat ini peraturan pemerintah tentang perlindungan data pribadi ini hanya baru di level peraturan menteri (Kominfo), sedangkan UU yang sesungguhnya masih “digoreng” di Senayan.

Nah karena itu, saya sendiri merekomendasikan beberapa hal berikut ini:

  • Kita langsung open source dan open data, jadi siapapun (pemerintah, masyarakat) bisa mengunduh database kebocoran NIKnya secara mudah
  • Setiap pengguna harus dapat mengaksesnya (melakukan pencarian NIK bocor setelah datanya diunduh) secara luring (offline), sehingga NIK yang dicari sulit diambil melalui lalu lintas jaringan komputer (misal: dibandingkan dengan mengetik NIK mereka di dalam sebuah website)
  • TIDAK ADA NIK DI DATA-NYA! Oke, mungkin ini bersifat aneh, tetapi data yang kita simpan ini hanya terbatas terhadap:
    1. Digit ketiga dan keempat dalam NIK, yang menandakan kode kota menurut data dari Kemendagri dan Badan Pusat Statistik (BPS) di mana NIK tersebut pertama kali didaftarkan,
    2. Tanggal lahir korban, yang sangat mudah diekstrak dari NIK,
    3. Jenis kelamin korban sesuai KTP, karena memengaruhi format penulisan NIK tersebut dan untuk meningkatkan tingkat entropy terhadap proses pencarian identitas korban yang terenkripsi, serta
    4. Nama korban dalam format Nama Depan + Inisial, misalnya Julia ADS. Kecuali dengan nama sebutan tertentu seperti Muhammad Ramadhan JH dan Ni Putu Dela BRF.
  • Nilai tingkat entropy dari poin 1-3 di atas adalah 30 (jumlah kota dan kabupaten dalam sebuah provinsi, estimasi diambil dari Jawa Barat) * 366 (hari dalam setahun, termasuk kabisat) * 100 (kombinasi akhiran tahun ’00 hingga ’99) * 2 (jenis kelamin). Artinya, seorang peretas data membutuhkan lebih dari 2 juta kali pencarian untuk dapat melakukan brute-force untuk melihat semua daftar identitas yang bocor.
  • Dan seandainya jika semua data yang terenkripsi di sini berhasil diretas, sang peretas masih belum dapat mengetahui lokasi korban tanpa kode provinsi (2 digit awal pada NIK). Berarti jika mereka menemukan seseorang bernama Muhammad Ramadhan JH dengan tanggal lahir 23 Januari 1999 dan kode kab/kota 73, dia bisa saja berdomisili di kota Jakarta Pusat (dengan NIK 3173xx230199xxxx), Pematang Siantar (1273xx230199xxxx), Pagar Alam (1673xx230199xxxx), Salatiga (3373xx230199xxxx), dan sebagainya.

Kita juga butuh dua tim lagi: GRC dan legal, dan targetnya sih agar sistem yang kita buat ini lulus audit independen dan juga memiliki website resmi yang terdaftar sebagai penyelenggara sistem elektronik (PSE) resmi, meskipun bersifat open-source dan datanya juga dapat diakses secara luring/offline. Jadi, ujung-ujungnya, proyek ini bisa dapat kepercayaan baik dari para pakar keamanan hingga pemerintah itu sendiri.

Nah jadi balik lagi nih, menurut kalian apakah kita perlu buat situs semacam ini?


Update 9 September 2021

Ada yang tanya ke kita apakah ada kasus di mana sebuah kode kota/kabupaten hanya dimiliki oleh 1 provinsi saja, sehingga seseorang dapat langsung menebak provinsi dan kab/kota korban berasal. Untuk membuktikannya, saya membuat program Python3 sebagai berikut:

#!/usr/bin/python3 import requests import json stat = {} i = 1 while i < 10: j = 1 while j < 10: r = requests.get("https://sig-dev.bps.go.id/restDropDown/getwilayah/level/kabupaten/parent/" + str(i) + str(j)) js = r.json() if len(js) == 0: break for e in js: kode = int(e["kode"]) % 100 if kode not in stat: stat[kode] = { "total": 0, "prov": [] } stat[kode]["total"] += 1 stat[kode]["prov"].append((int(e["kode"]) - kode) / 100) j += 1 i += 1 print(json.dumps(stat))
Code language: JavaScript (javascript)
{"1": {"total": 33, "prov": [11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 21.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 51.0, 52.0, 53.0, 61.0, 62.0, 63.0, 64.0, 65.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 81.0, 82.0, 91.0]}, "2": {"total": 32, "prov": [11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 21.0, 32.0, 33.0, 34.0, 35.0, 36.0, 51.0, 52.0, 53.0, 61.0, 62.0, 63.0, 64.0, 65.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 81.0, 82.0, 91.0]}, "3": {"total": 32, "prov": [11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 21.0, 32.0, 33.0, 34.0, 35.0, 36.0, 51.0, 52.0, 53.0, 61.0, 62.0, 63.0, 64.0, 65.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 81.0, 82.0, 91.0]}, "4": {"total": 32, "prov": [11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 21.0, 32.0, 33.0, 34.0, 35.0, 36.0, 51.0, 52.0, 53.0, 61.0, 62.0, 63.0, 64.0, 65.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 81.0, 82.0, 91.0]}, "5": {"total": 29, "prov": [11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 21.0, 32.0, 33.0, 35.0, 51.0, 52.0, 53.0, 61.0, 62.0, 63.0, 64.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 81.0, 82.0, 91.0]}, "6": {"total": 26, "prov": [11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 32.0, 33.0, 35.0, 51.0, 52.0, 53.0, 61.0, 62.0, 63.0, 71.0, 72.0, 73.0, 74.0, 76.0, 81.0, 82.0, 91.0]}, "7": {"total": 24, "prov": [11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 32.0, 33.0, 35.0, 51.0, 52.0, 53.0, 61.0, 62.0, 63.0, 71.0, 72.0, 73.0, 74.0, 81.0, 82.0, 91.0]}, "8": {"total": 24, "prov": [11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 32.0, 33.0, 35.0, 51.0, 52.0, 53.0, 61.0, 62.0, 63.0, 71.0, 72.0, 73.0, 74.0, 81.0, 82.0, 91.0]}, "9": {"total": 22, "prov": [11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 32.0, 33.0, 35.0, 53.0, 61.0, 62.0, 63.0, 64.0, 71.0, 72.0, 73.0, 74.0, 81.0, 91.0]}, "10": {"total": 18, "prov": [11.0, 12.0, 13.0, 14.0, 16.0, 18.0, 32.0, 33.0, 35.0, 53.0, 61.0, 62.0, 63.0, 71.0, 72.0, 73.0, 74.0, 91.0]}, "11": {"total": 18, "prov": [11.0, 12.0, 13.0, 16.0, 18.0, 32.0, 33.0, 35.0, 53.0, 61.0, 62.0, 63.0, 64.0, 71.0, 72.0, 73.0, 74.0, 91.0]}, "12": {"total": 15, "prov": [11.0, 12.0, 13.0, 16.0, 18.0, 32.0, 33.0, 35.0, 53.0, 61.0, 62.0, 72.0, 73.0, 74.0, 91.0]}, "13": {"total": 11, "prov": [11.0, 12.0, 16.0, 18.0, 32.0, 33.0, 35.0, 53.0, 62.0, 73.0, 74.0]}, "14": {"total": 8, "prov": [11.0, 12.0, 32.0, 33.0, 35.0, 53.0, 73.0, 74.0]}, "15": {"total": 8, "prov": [11.0, 12.0, 32.0, 33.0, 35.0, 53.0, 73.0, 74.0]}, "16": {"total": 7, "prov": [11.0, 12.0, 32.0, 33.0, 35.0, 53.0, 73.0]}, "17": {"total": 7, "prov": [11.0, 12.0, 32.0, 33.0, 35.0, 53.0, 73.0]}, "18": {"total": 7, "prov": [11.0, 12.0, 32.0, 33.0, 35.0, 53.0, 73.0]}, "71": {"total": 32, "prov": [11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 21.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 51.0, 52.0, 53.0, 61.0, 62.0, 63.0, 64.0, 65.0, 71.0, 72.0, 73.0, 74.0, 75.0, 81.0, 82.0, 91.0]}, "72": {"total": 21, "prov": [11.0, 12.0, 13.0, 15.0, 16.0, 18.0, 21.0, 31.0, 32.0, 33.0, 35.0, 36.0, 52.0, 61.0, 63.0, 64.0, 71.0, 73.0, 74.0, 81.0, 82.0]}, "73": {"total": 12, "prov": [11.0, 12.0, 13.0, 14.0, 16.0, 31.0, 32.0, 33.0, 35.0, 36.0, 71.0, 73.0]}, "74": {"total": 11, "prov": [11.0, 12.0, 13.0, 16.0, 31.0, 32.0, 33.0, 35.0, 36.0, 64.0, 71.0]}, "75": {"total": 7, "prov": [11.0, 12.0, 13.0, 31.0, 32.0, 33.0, 35.0]}, "19": {"total": 4, "prov": [12.0, 33.0, 35.0, 53.0]}, "20": {"total": 4, "prov": [12.0, 33.0, 35.0, 53.0]}, "21": {"total": 4, "prov": [12.0, 33.0, 35.0, 53.0]}, "22": {"total": 4, "prov": [12.0, 33.0, 35.0, 73.0]}, "23": {"total": 3, "prov": [12.0, 33.0, 35.0]}, "24": {"total": 3, "prov": [12.0, 33.0, 35.0]}, "25": {"total": 4, "prov": [12.0, 33.0, 35.0, 73.0]}, "76": {"total": 5, "prov": [12.0, 13.0, 32.0, 33.0, 35.0]}, "77": {"total": 4, "prov": [12.0, 13.0, 32.0, 35.0]}, "78": {"total": 3, "prov": [12.0, 32.0, 35.0]}, "79": {"total": 2, "prov": [32.0, 35.0]}, "26": {"total": 3, "prov": [33.0, 35.0, 73.0]}, "27": {"total": 2, "prov": [33.0, 35.0]}, "28": {"total": 2, "prov": [33.0, 35.0]}, "29": {"total": 2, "prov": [33.0, 35.0]}}
Code language: JSON / JSON with Comments (json)

Kalau kita mapping distribusi datanya,

  • poros x bawah: kode kab (01 – 69)
  • poros x atas: kode kota (71 – 99)
  • poros y: jumlah provinsi yang memiliki kode tersebut (1 – 34)

Berdasarkan data di atas, kita menemukan bahwa kasus terburuk (worst case) dari kasus yang disampaikan bahwa kode kab/kota orang tersebut hanya tersedia di 2 provinsi, dan berdasarkan analisis tersebut kedua provinsi ini adalah provinsi Jawa Barat dan Jawa Timur. Kedua provinsi ini sangat luas dan berjauhan (disekat oleh provinsi Jawa Tengah dan Daerah Istimewa Yogyakarta), sehingga kota/kabupaten korban masih sulit dilacak secara fisik, meskipun secara data kab/kota misterius tersebut dapat berada entah di Jawa Barat atau Jawa Timur.

Q&A: Sebutkan contoh dari application layer dalam OSI Model yang anda gunakan dalam kehidupan sehari-hari!

Sebenarnya, hampir semua aplikasi yang kita pakai hari-hari ini merupakan bagian dari application layer, setidaknya menurut OSI model. Anda sering menggunakan aplikasi pesan instan, dan aplikasi-aplikasi tersebut sering menggunakan protokol HTTP(S) untuk mengecek dan mengirimkan pesan-pesan baru. Adapun aplikasi email yang menggunakan HTTPS untuk melakukan autentikasi OAuth2 (biasanya untuk Yahoo! Mail, Gmail, Office 365, dan Outlook.com), menggunakan IMAP atau POP untuk menerima pesan, serta SMTP untuk mengirim surat baru.

Jika kedua aplikasi ini masuk ke dalam application layer yang dimaksud, apalagi aplikasi video conference yang menggunakan protokol-protokol lainnya seperti QUIC (misal: di dalam aplikasi Google Duo) dan WebRTC, aplikasi ojek online yang ujung-ujungnya bergantung terhadap HTTPS, serta aplikasi SMS yang menggunakan salah satu jenis protokol Point-to-Point yang diadopsi untuk jaringan GSM dan CDMA. Dan ternyata, sebuah aplikasi media sosial yang menggunakan HTTPS dan RTMP pun juga tergolong ke dalam application layer, karena menurut definisi OSI sendiri application layer merupakan lapis terdekat jaringan komputer terhadap para end-user.

Published
Categorized as Q&A

Q&A: Apa itu SMTP? dan bagaimana cara protokol SMTP bekerja?

SMTP (Simple Mail Transfer Protocol) merupakan sebuah protokol yang ditujukan untuk mengirim surat elektronik (email). Namun, protokol ini hanya ditujukan untuk mengirim pesan sesama client/perangkat pengirim dan server email saja; untuk melihat daftar email yang diterima sebuah client/perangkat perlu untuk menggunakan protokol POP (Post Office Protocol), IMAP (Internet Mail Access Protocol), atau mengakses situs HTTP/HTTPS yang dimiliki/dioperasikan oleh server email tersebut.

Sebelum sang client (alias User-Agent/UA) dapat mengirim surat melalui SMTP, client tersebut harus menghubungi dan mengecek apakah server email asal (sender Mail Transfer Agent/MTA) aktif dan bersedia untuk mengirim email. Jika server/MTA tersebut membalas permintaan sang client/UA dengan status “220 Ready for Mail”, maka client tersebut sudah dipastikan dapat mengirim email selama permintaan-permintaan client berikutnya tidak terganggu akibat masalah dalam jaringan yang menghubungkan sang client/UA dengan server/MTA.

Kemudian, client tersebut akan mengirimkan perintah EHLO kepada server email pengirim. Dalam kasus ini saya menggunakan perintah EHLO daripada HELO untuk menggunakan fitur-fitur yang ada di dalam protokol Extended SMTP, termasuk fitur autentikasi yang sering digunakan dalam banyak aplikasi dan layanan email saat ini. Jika server tersebut meminta sang client untuk menyebutkan data credentials (misal: alamat email dan password, atau token OAuth2) di dalam respons 250 dari server (misal: “250 AUTH LOGIN PLAIN DIGEST-MD5”), maka sang client akan mengirimkan data-data yang diminta dan server tersebut akan memverifikasinya.

Oke, anggap saja bahwa proses autentikasi tersebut telah usai. Client tersebut akan mulai untuk memasukkan data-data berikut (secara berurutan):

1. Alamat pengirim email, menggunakan perintah MAIL FROM
2. Alamat penerima email, menggunakan perintah RCPT TO
3. Isi pesannya, baik head (misal: metadata) dan body, menggunakan perintah DATA

Jika pesan tersebut sudah siap dikirim dari server, maka sang server akan memberikan kode status 250 kepada sang client. Server pengirim tersebut akan menjadwalkan pengiriman surat tersebut kepada server penerima (kecuali sang client memutuskan untuk mengirim perintah RSET sebelum surat tersebut dikirim dari server), dan jika server dan/atau alamat penerima tersebut tidak ditemukan, maka server pengirim tersebut berhak untuk memberitahu sang client bahwa pengiriman surat tersebut gagal, biasanya melalui email khusus dari program “mailer daemon” yang dijalankan oleh server pengirim tersebut.

Protokol SMTP juga dapat digunakan untuk memverifikasi jika alamat yang dituju ada, dengan menggunakan perintah VRFY, dan mengecek apakah koneksi server tersebut masih aktif dengan menggunakan perintah NOOP. Terakhir, jika client tersebut ingin memutuskan hubungan terhadap server pengirim, maka client tersebut dapat mengirimkan perintah QUIT untuk melakukannya.

Referensi

  1. https://www.samlogic.net/articles/smtp-commands-reference.htm
  2. https://www.ionos.com/digitalguide/e-mail/technical-matters/smtp-auth/
Published
Categorized as Q&A

Q&A: Jelaskan fungsi dan cara kerja ARP dan ICMP

ARP (Address Resolution Protocol)

ARP merupakan sebuah protokol link-layer yang berfungsi untuk mencari alamat fisik (bagian) perangkat komputer yang terhubung dengan sebuah jaringan (seperti Network Interface Card dan Wireless NIC) berupa alamat MAC berdasarkan alamat IP yang disetel atau diterima perangkat tersebut (misal: melalui DHCP). Dalam protokol IPv6 protokol ini digantikan dengan Neighbor Discovery Protocol (NDP). Namun, hal ini tidak berarti bahwa ARP hanya dapat digunakan di dalam jaringan protokol IPv4 saja.

Pencarian alamat MAC melalui ARP ini dapat dilakukan dengan mengirim sebuah paket request kepada broadcast address global 255.255.255.255 atau broadcast address jaringan tersebut. Jika ada sebuah perangkat yang memang memiliki alamat IP yang dicari, maka perangkat tersebut akan mengirimkan paket reply yang berisi informasi alamat MAC yang dicari.

Perangkat-perangkat komputer juga sering meng-cache hasil pencarian alamat MAC melalui ARP ini untuk beberapa waktu, sehingga mereka dapat menghemat waktu yang diperlukan untuk mencari alamat MAC kembali saat mengirim paket dengan alamat IP yang sama dengan paket-paket sebelumnya.

ICMP (Internet Control Message Protocol)

ICMP berfungsi sebagai protokol pendukung jaringan komputer yang berfungsi untuk mengirim informasi operasional atau kendala pada jaringan-jaringan Internet. Meskipun nama ICMP sendiri berasal dari kata Internet, ICMP ini masih dapat digunakan di dalam jaringan lokal (LAN) tanpa adanya hubungan ke WAN atau Internet.

Beberapa contoh informasi yang dikirimkan melalui ICMP adalah pesan-pesan error yang sering kita temukan seperti Destination host unreachableDestination port unreachableDestination network unknown, dan bahkan PING (Echo reply). Karena itu, protokol ini sering digunakan di dalam program ping, traceroute, dan program-program diagnostik jaringan lainnya untuk mengecek kendala-kendala dalam sebuah jaringan komputer.

Seluruh paket informasi yang diberikan melalui ICMP dilakukan secara sukarela. Jika misalnya perangkat A berhasil mengirim data ke perangkat B melalui router C, router tersebut tidak harus mengirim pesan ICMP kepada perangkat A yang mengirimnya. Bahkan, ICMP sendiri tidak memerlukan koneksi TCP/IP atau UDP untuk mengirim informasi tersebut, sehingga protokol ini masuk ke dalam kategori Internet-layer dalam daftar protokol yang sering digunakan untuk berkomunikasi di dalam Internet.

Published
Categorized as Q&A

Q&A: Apa yang anda ketahui mengenai Intranet dan Extranet serta berikan contohnya!

Intranet

Intranet merupakan sebuah jaringan komputer yang hanya dikhususkan untuk kepentingan internal, misalnya untuk kepentingan pribadi, organisasi, atau perusahaan, sehingga akses dari dan terhadap jaringan tersebut dibatasi dengan alasan-alasan keamanan. Berikut ini adalah contoh kasus nyata di mana Intranet dapat digunakan dalam kehidupan sehari-hari.

Saya memiliki sebuah perangkat Raspberry Pi yang terhubung dengan sebuah printer dan jaringan Wi-Fi, di mana perangkat tersebut dapat memungkinkan saya untuk mencetak dokumen langsung dari laptop dan ponsel saya tanpa menghubungkannya ke dalam printer tersebut (melalui CUPS, Bonjour/Avahi, SMB, dan AirPrint). Saya tidak mau orang lain yang berada di luar jaringan Wi-Fi saya dapat mengaksesnya dan menggunakannya, karena hal tersebut dapat memboroskan penggunaan kertas HVS, tinta printer, serta listrik di rumah saya. Karena itu, saya memutuskan untuk mengatur Firewall untuk memblokir akses masuk dari perangkat komputer yang berada di luar jaringan Wi-Fi saya terhadap perangkat Raspberry Pi tersebut. Karena itu perangkat Raspberry Pi dan perangkat lainnya yang terhubung secara langsung dengan Wi-Fi saya masuk di dalam sebuah jaringan Intranet.

Kemudian, Anda secara tidak sadar juga menggunakan Intranet saat Anda hendak melakukan screen sharing ke sebuah Smart TV berbasis Apple AirPlay dan Google Chromecast. Koneksi screen sharing berbasis Miracast tidak tergolong sebagai koneksi Intranet karena Miracast menggunakan koneksi Wi-Fi Direct yang bersifat Personal Area Network / PAN. Anda pastinya tidak mau jika seseorang dari jarigan luar melakukan koneksi screen sharing tanpa seizin Anda. Karena itu, perangkat router Anda secara otomatis memblokir akses ke LAN dari WAN, sehingga Smart TV Anda secara otomatis berada di dalam Intranet milik Anda.

Extranet

Sedangkan, Extranet merupakan sebuah jaringan komputer yang secara khusus dirancang agar dapat diakses oleh pengguna di luar jaringan tersebut (misal: WAN) dengan batasan dan syarat tertentu. Sebuah perangkat Extranet dapat dipasang di dalam jaringan Intranet yang sudah ada untuk membuka akses bagi sebagian pengguna WAN/Internet untuk mengunjungi dan menggunakan sistem/aplikasi dan informasi di dalamnya.

Jarigan Extranet saat ini sudah sering digunakan di dalam remote working khususnya dalam masa pandemi seperti ini, di mana banyak perusahaan memasang perangkat server VPN (Virtual Private Network) yang dapat memudahkan para pekerja untuk mengakses informasi yang berada di Intranet perusahaan tanpa harus berada di dalam kantor. Perangkat server VPN inilah yang berfungsi membuka akses Intranet menjadi Extranet bagi perusahaan tersebut.

Selain itu, Anda sebagai Binusian mungkin sudah mengenal beberapa situs intranet yang hanya dapat diakses di dalam perangkat-perangkat komputer yang terpasang di dalam sistem jaringan komputer di dalam kampus-kampus BINUS. Meskipun bukan merupakan server VPN, situs ini masih dapat dikategorikan sebagai salah satu jaringan Extranet karena mahasiswa Binus lainnya masih dapat mengakses sistem tersebut tanpa harus menggunakan salah satu perangkat komputer di dalam lingkungan kampus.

Published
Categorized as Q&A

Who owns Android?

Note: This was posted as an answer on Quora.


Android was originally founded by Andy Rubin in 2003 under the company name Android, Inc. It is correct that he previously worked for Apple and Microsoft, however he quit Apple, Inc. at about 15 years before the original iPhone was launched.

At 2005, Google finished their acquisition of Android, Inc. Hence, Google becomes the author of Android.

Two years after the acquisition of Android, Google launched the Open Handset Alliance (OHA), which lists companies, especially mobile device manufacturers, which ships some of their devices with Google’s Android OS (with Google Play Services). This leads to the fact that Android is not just owned by Google, but also all members of the Open Handset Alliance (including Samsung, Lenovo, Sony and other companies who makes Android devices).

As the core parts of Android are open sourced, anyone may obtain these parts freely as regulated by the license. As a result, many variants of Android are also made available, which lead to creation of custom ROMs and inspires Google to create the “Be Together, Not the Same” motto of Android.

Outside of Google and the Open Handset Alliance, there are also some companies and communities responsible for developing custom Android ROMs, which includes:

  • Amazon: not an OHA member, while responsible in making the OS for Amazon Fire devices which are also based on Android.
  • BlackBerry: joined as an OHA member, while they were responsible in porting the Android runtime for QNX and BlackBerry 10.
  • Jide Technologies: responsible for Remix OS, which ports and modifies Android OS for usage in PCs.
  • LineageOS: the community revival of the popular CyanogenMod custom ROMs.
  • OpenMobile WorldWide: responsible in providing Android services and OpenMobile ACL Android runtime for Samsung’s Tizen (and probably BlackBerry’s QNX and BlackBerry 10 as well).

In conclusion, Android can actually be owned by anyone. You could grab the Android Open Source Project source code and do something with it. I feel that your question is incomplete though, as someone could own an Android OS the same way as owning a copy of Windows. Hopefully, this answer makes you understand about the diversity of Android OS, even though Google is currently the largest owner of Android.