qr-swastika-avoider v0.1.0 — Menghindari Pola Swastika yang Muncul Secara Tidak Sengaja pada Kode QR
(crates.io)- Ini adalah crate Rust yang mendeteksi pola swastika yang dapat muncul secara kebetulan pada kode QR, dan secara opsional menghasilkan kode QR tanpa pola tersebut
- Merender semua 8 pola mask dalam standar QR untuk menyaring kandidat tanpa pola, lalu memilih mask dengan penalti ISO/IEC 18004 terendah
- Dengan mengecualikan modul finder, timing, alignment, format, dan version dari pemeriksaan serta mempertimbangkan kontras sekeliling, alat ini menghindari salah mengira elemen fungsional atau bentuk yang tidak terlihat sebagai pola target
- Detektor bawaan tidak memiliki dependensi eksternal dan melarang kode
unsafe, serta mendukung berbagai pustaka QR dan representasiVec<Vec<bool>> - Cakupan deteksi dibatasi pada bentuk kait silang 5×5 dan 7×7 yang sejajar sumbu, dalam kedua arah dan dua polaritas warna; bentuk 45 derajat, diagonal, dan rotasi sewenang-wenang tidak didukung
Alasan perlu menghindari pola yang muncul tidak sengaja
- qr-swastika-avoider mendeteksi dan menghindari pola swastika yang bisa muncul secara acak pada kode QR
- Kode QR memilih salah satu dari 8 pola mask yang saling dapat dipertukarkan berdasarkan skor keterbacaan terbaik, tetapi tidak memeriksa simbol yang dapat menimbulkan ketidaknyamanan
- Pola yang kecil dan tipis sulit tersaring dalam proses evaluasi standar QR, sehingga dapat tersisa secara kebetulan pada kode akhir
Deteksi yang mempertimbangkan elemen fungsional dan kontras
- Detektor bawaan tidak memiliki dependensi eksternal dan menerapkan
#![forbid(unsafe_code)] - Melalui trait kecil
QrModulesyang terdiri dari dua metode, berbagai format representasi QR dapat diperiksa - Modul finder, timing, alignment, format, dan version dikecualikan dari target deteksi agar sudut finder tidak keliru dikenali sebagai swastika
- Pola yang tertanam dalam modul dengan warna sama sehingga tidak benar-benar terlihat diabaikan berdasarkan kontras sekeliling, dan ambang ini dapat disesuaikan
- Kode QR yang sudah ada dapat diperiksa dengan
contains_swastika, lalu jika pola ditemukan dapat dibuat ulang atau pengguna diberi peringatan
Representasi QR dan pustaka yang didukung
- Melalui fitur Cargo, adaptor berikut disediakan
qrcodegen:QrModulesuntukqrcodegen::QrCodeqrcode:QrModulesuntukqrcode::QrCodefast_qr:QrModulesuntukfast_qr::QRCode
- Matriks modul mentah
Vec<Vec<bool>>juga didukung tanpa adaptor terpisah, dantrueberarti modul gelap
Menghasilkan kode QR tanpa pola
encode_safedalam fiturgeneratemenerima konten dan tingkat koreksi kesalahan lalu mengembalikan kode QR yang dapat dipindai tanpa pola tersebut; jika tidak dapat dibuat, fungsi ini mengembalikan error yang eksplisit- Dalam proses pembuatan, semua 8 mask dirender lalu hanya kandidat tanpa pola target yang dipertahankan
- Di antara kandidat yang tersisa, mask dengan penalti ISO/IEC 18004 terendah dikembalikan agar optimisasi keterbacaan standar tetap terjaga
- Dengan
matrix()Anda dapat mengambil matriks modul, dan denganmask()Anda dapat memeriksa mask yang dipilih
Susunan fitur Cargo
- Fitur bawaan hanya mencakup detektor tanpa dependensi
- Fitur
qrcodegen,qrcode, danfast_qrmenambahkan adaptor untuk masing-masing pustaka - Fitur
generatemenambahkanqrcodegensebagai dependensi dan menyediakanencode_safe
Cakupan deteksi dan lisensi
- Di antara bentuk kait silang klasik yang sejajar sumbu, alat ini mendeteksi ukuran 5×5 dan 7×7, kedua arah, serta dua polaritas warna terang dan gelap dalam toleransi kecil
- Bentuk 45 derajat atau diagonal, serta bentuk yang diputar pada sudut sewenang-wenang, tidak termasuk dalam cakupan deteksi
- Didistribusikan di bawah MIT License
1 komentar
Opini di Lobste.rs
Membingungkan bahwa proyek ini menghindari simbol manji religius tetapi justru tidak menghindari swastika yang digunakan Nazi. Simbol Nazi berbentuk rotasi 45 derajat, tetapi proyek ini secara eksplisit menyatakan bahwa “motif 45 derajat/diagonal dan rotasi arbitrer berada di luar cakupan”
Gambar yang kebetulan muncul di QR code beresolusi rendah, sehingga justru bentuk yang tidak diputar lebih mungkin dikenali jelas sebagai manji ketimbang sekadar pola piksel acak. Masuk akal untuk fokus pada hal itu
Lalu ada pernyataan bahwa “modul finder, timing, alignment, format, dan version dikecualikan agar sudut finder tidak salah dikenali sebagai manji”, tetapi ketika seseorang melihat simbol yang mengganggu di QR code, reaksinya tidak akan berubah tergantung apakah piksel itu data atau pola timing. Sudut finder itu sendiri hanya kotak biasa; saya juga tidak paham mengapa harus dikecualikan dari analisis, dan makin ditelusuri makin terasa tidak konsisten, sampai curiga ini hasil buatan AI seadanya
Menyedihkan bahwa proyek seperti ini ada. Saya bahkan tidak pernah terpikir bahwa simbol yang mengganggu bisa kebetulan muncul di dalam QR code
Saya mencoba menghitung langsung untuk pertanyaan “seberapa sering sih saat membuat QR code sederhana tiba-tiba muncul simbol Nazi raksasa secara acak?”. QR code tidak sepenuhnya acak, tetapi itu diabaikan di sini
Jika manji 5×5 dan 7×7 dilihat secara independen, masing-masing punya dua arah kiri-kanan, dua polaritas, serta bentuk normal dan terbalik, jadi total ada 8 pola. Total seluruh pola adalah 2^25=33 juta untuk 5×5 dan 2^49=562 triliun untuk 7×7, sehingga peluang mengandung manji masing-masing 2.38e-7 dan 1.42e-14. Di dalam QR code ada 289 area 5×5 dan 225 area 7×7, jadi total peluang setidaknya satu manji muncul dalam bentuk QR code acak adalah sekitar 0,00006, yaitu 1 dari 14.500. Ukuran 9×9 ke atas juga bisa dihitung, tetapi karena probabilitas kombinasi piksel tertentu terlalu rendah, dampaknya tidak berarti pada hasil. Sayangnya, setelah melihat source code-nya, proyek ini tampaknya dibuat dengan vibe coding, tetapi perhitungannya saya lakukan sendiri secara manual
Untuk proyek yang sespesifik ini, saya penasaran apakah ada latar belakang cerita atau lelucon tertentu
Namun, melihat bagaimana AI yang cacat digunakan dalam situasi seperti perceptual hash Microsoft photoDNA yang gagal menangani kisi thumbnail CSAM yang memenuhi data latih, sampai menangguhkan akun pengguna Discord hanya dengan screenshot spreadsheet dan kisi pembuatan Minecraft, alat penghindar pola berisiko yang lebih umum justru terlihat cukup menarik
Daripada mengulang masalah lama dengan cara baru, kita seharusnya menyelesaikan masalah nyata. Ada terlalu banyak orang yang terlalu sensitif sehingga akan menganggap proyek seperti ini menarik
Meski tujuannya untuk menghindari manji dalam pola data, saya penasaran apakah menampilkan pola itu di halaman web itu sendiri bisa menjadi ilegal di Jerman
Menurut putusan Mahkamah Federal Jerman tersebut, swastika yang dicoret diperbolehkan, dan yang lain pun tampaknya kecil kemungkinan menimbulkan masalah karena hanya ditampilkan sebagai contoh pola yang akan difilter oleh kode
https://en.wikipedia.org/wiki/Strafgesetzbuch_section_86a