- Dalam proses ketika manusia membaca dan menyampaikan ID, seperti laporan bug, memasukkan kode diskon, atau melacak pengiriman, ambiguitas visual seperti
O/0danI/l/1/7mudah berujung pada kesalahan input - Kebingungan makin besar bergantung pada font dan tulisan tangan, dan kombinasi yang batas pembedanya menjadi kabur seperti
5/S,2/Z,8/B,6/G,9/q/gmuncul berulang - Untuk ID yang ditangani langsung oleh manusia, seperti dukungan pelanggan, ID error, dan ID produk, memilih himpunan karakter yang mudah dibaca lebih penting bagi kualitas penggunaan nyata daripada sekadar memakai himpunan karakter besar
- Jika membedakan huruf besar-kecil, ID 5 karakter dapat menghasilkan
418,195,493kombinasi, tetapi jika tidak membedakannya jumlahnya turun menjadi5,153,632, sehingga diperlukan kompromi antara panjang dan keamanan - ID yang membedakan huruf besar-kecil mudah dibuat lebih pendek, tetapi sebagian sistem atau protokol pihak ketiga dapat bekerja secara case-insensitive, sehingga bisa menimbulkan masalah pada tahap integrasi
Kebingungan karakter pada ID yang dibaca manusia
- Saat ID ditulis atau disampaikan dalam interaksi sistem seperti laporan bug, input kode diskon, dan pelacakan pengiriman, kebingungan karakter yang sebenarnya bisa dihindari dapat merusak pengalaman pengguna
- Kombinasi karakter ambigu secara visual yang umum adalah sebagai berikut
O/0: pada angka 0 tanpa garis miring atau titik, hurufOdan angka0bisa terlihat miripI/l/1/7: huruf besarI, huruf kecill, angka1, dan angka7sulit dibedakan di berbagai materi cetak dan tulisan tangan5/S,2/Z,8/B,6/G,9/q/g: dapat tertukar pada font tertentu, font bergaya, dan tulisan tangan
- Contoh string
9qg6G8B2Z5SIl170Odigunakan sebagai pembanding pada berbagai font sistem seperti Arial, Helvetica, Courier, Times, Verdana, Georgia, Tahoma, Impact, dan Comic Sans - Beberapa kombinasi seperti
Idanldapat terus terlihat ambigu di banyak font, dan ada juga kombinasi seperti9qgyang makin membingungkan saat ditulis tangan langsung -
-
Jenis ID yang masalahnya menjadi sangat besar
- Kode diskon yang dipertukarkan dalam dukungan pelanggan
- Kode pelacakan yang digunakan dalam pengiriman atau logistik
- ID error yang diperlukan untuk mereproduksi masalah dan menangani pertanyaan
- ID produk yang digunakan untuk identifikasi produk
-
Kompromi antara pembedaan huruf besar-kecil dan himpunan karakter
- Apakah ID memperlakukan
abcdanABCsebagai nilai yang sama harus diputuskan bersama saat menetapkan aturan pembuatannya - Jika membedakan huruf besar-kecil sambil mengecualikan karakter yang secara visual ambigu, karakter yang dapat dipilih berjumlah 53
- Jika tidak membedakan huruf besar-kecil, karakter yang dapat dipilih berkurang menjadi 22
- Jumlah kombinasi yang mungkin menurut panjang ID adalah sebagai berikut
- 5 karakter, membedakan huruf besar-kecil:
53^5 = 418,195,493 - 5 karakter, tidak membedakan huruf besar-kecil:
22^5 = 5,153,632 - 8 karakter, membedakan huruf besar-kecil:
53^8 = 62,259,690,411,361 - 8 karakter, tidak membedakan huruf besar-kecil:
22^8 = 54,875,873,536
- 5 karakter, membedakan huruf besar-kecil:
- Pada akhirnya, pilihannya adalah keseimbangan antara ID yang pendek tetapi lebih mungkin membingungkan dan ID yang panjang tetapi mudah dibaca
- Jika memakai huruf besar dan kecil sekaligus, suatu saat Anda bisa menemui perilaku tak terduga pada sistem atau protokol pihak ketiga yang tidak membedakan huruf besar-kecil
- Sebuah sistem komersial memungkinkan pengguna memilih
iDdanidsebagai ID yang berbeda, tetapi saat mencari ID yang tidak ada, sistem melakukan pencocokan case-insensitive sehingga mengembalikan data yang salah - Untuk bug tersebut, jawabannya adalah bahwa perilaku itu dibuat demi “kenyamanan”
- Sebuah sistem komersial memungkinkan pengguna memilih
Mungkin perlu menghindari kombinasi, bukan hanya satu karakter
- Ada juga kasus ketika kombinasi karakter itu sendiri terlihat seperti karakter lain
rndapat terlihat sepertimvvdapat terlihat sepertiw
- Jika mengecualikan banyak karakter hanya karena alasan ini, himpunan karakter yang dapat dipilih bisa menjadi terlalu kecil, sehingga pendekatan yang lebih realistis adalah hanya menghindari kombinasi tertentu pada tahap pembuatan
- Dalam situasi ketika ID disampaikan secara lisan, kemiripan bunyi juga dapat dipertimbangkan
- Misalnya,
bdanpbisa terdengar mirip saat diucapkan
- Misalnya,
Pendekatan yang sudah ada dan patut dirujuk
- Base32 dari Crockford mendekode karakter ambigu sebagai nilai yang sama dan juga mempertimbangkan masalah ungkapan cabul yang tidak disengaja
- Open Location Code menggunakan himpunan karakter
23456789CFGHJMPQRVWX- Himpunan karakter ini dipilih untuk menghindari karakter yang secara visual ambigu dan juga menghindari ejaan kata dalam bahasa umum
- Namun, himpunan ini tetap mencakup
6danG, serta9danQ
3 komentar
Ini juga terlihat bagus: https://stackoverflow.com/a/58098360/8556340
Bahkan pengucapannya pun ikut dipertimbangkan, benar-benar menakjubkan.
Komentar Hacker News
Di tempat kerja, kami pernah mengirimkan nomor seri pada jutaan perangkat tanpa mengecualikan karakter atau angka yang membingungkan sama sekali, sehingga pelanggan sangat kesulitan membacanya dengan benar
Kami sampai harus membuat skrip regex yang menghasilkan semua kemungkinan kombinasi salah ketik berdasarkan nilai yang diucapkan pelanggan dan hanya menampilkan yang cocok dengan database pabrik, lalu membandingkan informasi lain seperti tanggal untuk menebak nomor seri yang sebenarnya
Yang lebih ironis, beberapa digit tidak pernah berubah sama sekali, dan ada posisi tertentu yang hanya perlu memakai 0, 1, 2 untuk membedakan pabrik, jadi dari awal sebenarnya tidak perlu seluruh himpunan karakter. Seolah-olah mereka yakin akan membuat 8 kuadriliun unit
Misalnya, jika produk diberi nomor berurutan seperti 1, 2, 3, total penjualan bisa diperkirakan cukup mudah hanya dari sampel kecil. Kadang ini juga membantu mencegah penyalahgunaan refund dengan membuat nomor seri yang valid sulit ditebak
Tentu, meski ada kekhawatiran seperti itu, tetap bisa sekaligus menghindari karakter yang sulit dibaca. Malah jika ini berarti seseorang benar-benar memikirkan skema penomorannya, mereka seharusnya lebih sadar akan masalah ini. Kenyataannya, besar kemungkinan seseorang cuma berpikir sekitar 30 detik lalu berkata, “kalau digitnya sebanyak ini pasti tidak akan habis, selesai”
Nomor seri perangkat tampaknya hanya memakai konsonan dan angka
Encoding seharusnya disesuaikan dengan pengguna. Base32, khususnya Crockford dan RFC 4648, bagus untuk representasi singkat dan punya alfabet yang tidak ambigu beserta alasannya
Tapi jika pengguna harus mengucapkannya, representasi daftar kata seperti s/key RFC 1751, misalnya “TIDE ITCH SLOW REIN RULE MOT”, mungkin lebih baik
Jangan membuat daftar kata sendiri. Idiom, homofon, dialek, dan jebakan tersembunyi lainnya tidak ada habisnya. Jangan sampai tanpa sengaja membuat bencana besar seperti “wet clam butterfly”
RFC 1751 [0] tempat contoh ini berasal tidak mengasumsikan encoding untuk penyampaian lisan, melainkan bertujuan agar pengguna lebih mudah “membaca, mengingat, dan memasukkan”
Untuk penyampaian lisan antaraprofesional, pilihan yang masuk akal adalah memakai 26 huruf kapital saja dan mengandalkan alfabet fonetik NATO. Namun masalah menerima kode dalam lingkungan lisan yang bising dari pengguna yang tidak terlatih masih belum terselesaikan
[0] https://datatracker.ietf.org/doc/html/rfc1751
Dari bagian yang mengatakan, “harus menggunakan keyed message digest algorithm MD5, dan itu cukup kuat,” saja sudah mengundang tawa
Sampai kalimat “kebanyakan orang sulit membaca, mengingat, dan memasukkan ini” masih bagus, lalu berlanjut ke “kata-kata bahasa Inggris jauh lebih mudah diingat dan dimasukkan orang”. Masalahnya, kebanyakan orang tidak bisa bahasa Inggris. Saya sempat berpikir, bukankah daftar katanya tinggal diganti saja, tapi lalu tertulis bahwa “demi interoperabilitas, tidak diinginkan memiliki kamus terpisah per bahasa”
Ujung-ujungnya logikanya seperti seluruh dunia sudah belajar 26 huruf alfabet Inggris, jadi menambah beberapa kata pun tidak masalah. Padahal di dalam
char Wp[2048][4] = […]yang ada bukan kata umum yang cocok untuk pemula, melainkan hal-hal seperti “WAD, BESS, MERT...”. Bahkan ada juga “ORR? AGEE EGAN HAAS!!”, “GAUL FLAM! DRAB!”Cerita ini mengingatkan saya pada kejadian lama. Saat sedang sakit, untuk mengalihkan pikiran dari rasa tidak enak badan saya membuat modul mainan untuk aritmetika basis arbitrer, dan karena gampang saya unggah ke CPAN
Modul itu adalah https://metacpan.org/pod/Math::Fleximal
Dari hal-hal kecil yang pernah saya buat, saya pikir yang ini pasti tidak akan pernah mendapat permintaan dukungan, tapi ternyata ada. Soalnya saya menyertakan contoh mengubah heksadesimal menjadi kode alfanumerik, dan seseorang mendapat ide cemerlang untuk memakainya apa adanya guna mengubah angka panjang menjadi kode yang lebih mudah dibaca
Modulnya bekerja dengan baik, tapi fakta bahwa ini masuk ke production di suatu tempat terasa cukup absurd
Tulisan itu menekankan agar menghindari karakter yang sulit dibedakan bahkan dalam tulisan tangan, tetapi tabel contohnya memasukkan angka 7. Saya tak terhitung berapa kali mengalami sulit membedakan 7 milik seseorang dengan 1
Membuat garis silang pada 7 memang membantu, tetapi banyak orang tidak menulisnya begitu, jadi kadang sulit yakin itu 7 atau 1 berserif
Keduanya kadang hampir tak bisa dibedakan. Kita bisa memakai alfabet standar NATO/penerbangan (Alpha, Bravo, Charlie, Delta...), tetapi kecuali basis pelanggan sangat dibatasi ketat, itu tidak banyak membantu. Kombinasi seperti ini juga sebaiknya dihindari
Meski string ID jadi sedikit lebih panjang, jauh lebih baik memaksimalkan kemudahan membaca, mengucapkan, dan mendengar karakter, dan ini menghemat jauh lebih banyak waktu serta kekesalan
Saya penasaran gaya tulisan tangan seperti apa yang membuat 1 mirip 7. Garis horizontal atas pada 7 rasanya sudah cukup untuk membedakannya
Jika memakai huruf besar dan kecil sekaligus, cepat atau lambat Anda kemungkinan akan terkena sistem atau protokol pihak ketiga yang tidak membedakan huruf besar-kecil
Saya pernah melihat sistem komersial yang membiarkan pengguna memilih ID peka huruf besar-kecil sehingga
iDdaniddianggap berbeda, tetapi saat mencari ID yang tidak ada, sistem itu melakukan pencocokan tanpa membedakan huruf besar-kecil dan mengembalikan data yang salahKetika bug ini dilaporkan, jawabannya adalah bahwa itu “fitur untuk kenyamanan”
Saat memasukkan nomor seri DLC di Nintendo Switch, tombol untuk karakter ambigu dinonaktifkan di keyboard layar, dan menurut saya itu pengalaman pengguna yang cukup bagus.
Artinya nomor seri tersebut sejak awal dibuat tanpa karakter ambigu. Saya tidak yakin apakah UX ini tertanam di sistem operasi, atau hanya ada di game yang sedang saya mainkan, Mario + Rabbids Sparks of Hope
Pengelola kata sandi open source KeepassXC menggunakan warna agar kata sandi lebih mudah dibaca. Caranya adalah memakai warna berbeda untuk tiap jenis karakter seperti huruf besar, huruf kecil, angka, dan simbol.
Ini ide yang sangat sederhana, tetapi sangat membantu terutama untuk kata sandi acak, bahkan jika sudah memakai font dengan keterbacaan tinggi
Sulit dipahami mengapa perangkat lunak yang berfokus pada kata sandi membiarkan karakter dirender dengan font ambigu tanpa pembedaan warna sama sekali
Saat memasukkan kata sandi panjang lewat antarmuka seperti remote TV lalu sadar bahwa
l1|Itertukar itu sangat menjengkelkan, jadi saya mengecualikannya sendiriTulisan ini enak dibaca karena membahas masalah yang sering saya temui sehari-hari.
Setiap kali menulis kode cadangan autentikasi dua faktor di kertas, saya selalu cemas saat melewati karakter seperti
o/0,v/u,5/S. Karena itu saya sengaja menuliskannya dengan sedikit modifikasi agar tampak berbeda.Bagian tentang “kemiripan bunyi” mengingatkan saya saat memilih kata sandi Wi-Fi. Saya ingin sesuatu yang tidak ambigu meski dibagikan dalam satu kalimat, bisa dieja bahkan oleh anak kelas 3 SD, dan berupa kata umum yang memiliki beberapa konsonan, lalu akhirnya memilih “vacation”
5/S,0/O,8/Bbisa teratasi. Pasangan yang benar-benar bermasalah sebenarnya berbeda-beda tergantung tulisan tangan masing-masing.Jika masih benar-benar tidak yakin, saya juga menambahkan alfabet NATO/penerbangan [1]. Misalnya kalau ada
U, saya mulai dariUlalu menulisUniformsecara diagonal.Hanya perlu sedikit disiplin. Saya sudah melakukannya lebih dari 10 tahun, dan belum pernah sekalipun kehilangan kode 2FA.
[1] Silakan kirim perdebatan remeh tentang perbedaan sebenarnya antara kode NATO dan penerbangan ke
/dev/nullOtak jadi bottleneck-nya
Saya suka percakapan seperti ini. Mungkin ini bukan topik yang paling mutakhir atau mendebarkan, tetapi cukup bermakna dan kuat dalam membuat hidup manusia maupun mesin lebih mudah.
Ini juga termasuk ranah praktik terbaik yang justru tidak disadari siapa pun saat dilakukan dengan baik. Sangat disayangkan bahwa perhatian dan ketulusan pada detail sering dianggap “sudah semestinya begitu” sehingga tidak mendapat pujian khusus
Kalau mau menunjukkan kesalahan di artikelnya, pada
9qg6G8B2Z5SIl170O (ariel), nama font-nya bukan Ariel melainkan Arial. Putri duyung tidak ada di siniDi Linux, kebanyakan baris terlihat sama
https://github.com/gajus/gajus-com/blob/main/src/blogPosts/2...
Typo-nya sudah saya perbaiki