- Alasan pengujian otomatis gagal hanya pada 00:30 adalah karena
man -w ikut mencetak string stderr yang tak terduga: gimme gimme gimme
- String ini adalah easter egg di
man; muncul ketika dijalankan tanpa halaman manual, atau saat menggunakan -w, jika waktu lokal menunjukkan 00:30
- Frasa tersebut berasal dari “Gimme! Gimme! Gimme! (A Man After Midnight)” milik ABBA, dan lelucon di tweet tahun 2011 kemudian masuk ke kode
man-db
man -w mencetak manpath dan kode keluarnya juga 0, sehingga bisa dipakai untuk otomasi, tetapi easter egg ini dapat merusak parsing output
man-db pertama-tama memperbaikinya agar tidak terpicu pada man -w, lalu kemudian memutuskan untuk menghapus easter egg sepenuhnya di man-db 2.8.0
Pengujian yang gagal hanya pada 00:30
- Pengujian otomatis berjalan normal hampir sepanjang waktu, tetapi gagal hanya ketika dijalankan pada 00:30
- Penyebab langsungnya adalah adanya string tak terduga yang ditambahkan ke
stderr
gimme gimme gimme
- Perintah yang digunakan dalam pengujian adalah
man -w, untuk mendapatkan manpath saat ini
Easter egg yang ada di man
- String bermasalah tersebut adalah easter egg yang ada di perintah
man
- Syarat pemicunya adalah sebagai berikut
- Menjalankan
man tanpa menentukan halaman manual
- Atau menjalankan
man -w
- Waktu lokal adalah 00:30
- Jika syarat terpenuhi,
gimme gimme gimme dicetak ke stderr
# date +%T -s "00:30:00"
00:30:00
# man -w
gimme gimme gimme
/usr/local/share/man:/usr/share/man:/usr/man
- Bahkan dalam kasus ini, kode keluar tetap 0
Perilaku yang semula diharapkan
- Output normal
man -w seharusnya hanya mengembalikan jalur pencarian halaman manual
# man -w
/usr/local/share/man:/usr/share/man:/usr/man
# echo $?
0
- Jika
man dijalankan tanpa halaman, perilaku yang diharapkan adalah menanyakan halaman manual apa yang diinginkan dan mengembalikan kode keluar 1
# man
What manual page do you want?
# echo $?
1
- Karena
man -w mencetak jalur pencarian, perintah ini dapat dipakai sebagai komponen untuk memeriksa instalasi halaman manual atau dalam otomasi pengujian
Kode dan cakupan distribusi
- String tersebut ditemukan di RHEL, OpenSUSE, Fedora, Debian, dan lainnya, sehingga bukan perilaku khusus distribusi tertentu
- Keberadaannya dapat diperiksa dengan melakukan
grep string tersebut pada biner
- Output muncul dari kode
src/man.c di man-db
time_t now = time (NULL);
struct tm *localnow = localtime (&now);
if (localnow &&
localnow->tm_hour == 0 && localnow->tm_min == 30)
fprintf (stderr, "gimme gimme gimme\n");
String dari lagu ABBA dan tweet
gimme gimme gimme adalah string yang berasal dari “Gimme! Gimme! Gimme! (A Man After Midnight)” milik ABBA
- Dalam tweet tahun 2011, Marnanel Thurman mengusulkan sebagai lelucon bahwa jika
man dijalankan pada 00:01, ia seharusnya mencetak gimme gimme gimme
- Pemelihara
man memasukkan usulan itu ke kode sungguhan
- Commit awal terpicu pada 00:01, lalu dalam komentar ditambahkan bahwa kemudian waktunya diubah menjadi 00:30 bersama pesan commit “half past twelve”
Perbaikan dan penghapusan
- Colin Watson, pemelihara
man-db, pertama-tama memperbaikinya lewat commit 84bde8 agar easter egg ini tidak terpicu pada man -w
- Setelah itu, Colin Watson menerapkan commit penghapusan untuk menghapus easter egg sepenuhnya
- Easter egg yang dihapus itu dijadwalkan hilang pada man-db 2.8.0 yang saat itu akan datang
- Pemelihara menilai bahwa easter egg tersebut memang membuat sebagian orang tertawa, tetapi mengganggu sebagian lainnya, dan enam tahun sudah cukup lama
3 komentar
Kalau mau memasukkan Easter egg seperti ini, ada baiknya juga memeriksa sekali apakah standard input/output adalah TTY. Jika itu skrip shell, bisa diverifikasi dengan
[[ -t 1]].manditerjemahkan menjadi “pria”, ya wkwkOpini Hacker News
Dulu, sebelum telemedicine sepopuler sekarang, saya membuat aplikasi web telemedicine, dengan fitur pasien mengisi kuesioner online lalu dokter melihat jawabannya.
Saat melakukan onboarding berbagai spesialisasi, ada logika yang cukup kuat untuk mengontrol apakah pertanyaan ditampilkan secara kondisional. Ketika mengerjakan fitur untuk klinik psikiatri baru, ada pertanyaan yang seharusnya muncul tapi tidak muncul, jadi saat debugging saya menaruh banyak teks debug yang konyol dan agak kesal di samping pertanyaan.
Saya pikir masalahnya sudah diperbaiki dan semuanya sudah dibersihkan, tetapi ternyata masih ada satu teks I SEE YOU!!! dalam huruf merah besar yang muncul pada kombinasi jawaban tertentu, dan itu ditemukan oleh seorang pasien yang sedang mengisi kuesioner penilaian paranoia untuk klinik psikiatri yang baru dibuka.
Setelah itu saya mulai memakai penanda debug seperti
aaaatau111.Seingat saya itu terjadi setelah insiden WD yang legendaris, ketika dalam kode pengujian “western digital” diubah menjadi “woodly doodly” lalu tanpa sengaja ter-deploy.
Saat pengembangan, fitur itu hanya rusak dalam kondisi yang sangat spesifik dan tampak seperti kondisi aneh yang hanya berlaku di lingkungan pengembangan lokal, jadi saya memasukkan pesan error seperti “watch and amaze while the application eats itself!”. Kalimat itu terinspirasi dari error yang pernah saya lihat di game Discworld untuk PlayStation.
Namun begitu naik ke produksi, kondisi yang memicu error itu ternyata tidak sespesifik yang saya kira, dan dukungan pelanggan lumpuh karena ratusan orang menelepon, mengira uang mereka hilang. Pengguna fitur ini adalah petaruh besar yang memasang taruhan bernilai tinggi, jadi manajemen sama sekali tidak senang.
Untungnya saya tidak dipecat dan masalahnya cepat diperbaiki, tetapi rasanya seperti pisau sudah dekat sekali dengan leher. Di salah satu pekerjaan pertama saya hampir 20 tahun lalu, minggu itu saya benar-benar mendapat pelajaran berharga.
# MULTIPASS!https://github.com/workarea-commerce/workarea/blob/master/co...
Konteksnya begini: The 5th Element adalah film keren, nama anjing kakak perempuan saya adalah Leeloo Dallas Multipass dan dia anjing favorit saya, serta sayalah developer pertama yang membuat fitur query pencarian
ProductMultipass.Saya juga jadi tahu bahwa komentar yang lucu bisa membuat developer lain lebih menyukai produk.
Mudah dicari dengan
grepsebelum commit, dan kalaupun masuk ke lingkungan produksi, setidaknya bukan string yang benar-benar tidak jelas identitasnya.Untungnya isinya tidak terlalu memalukan, dan sekarang sebagai pemeriksaan terakhir sebelum commit dan push, saya selalu melihat
git difflalu mencariprintatau keluaran serupa dalam bahasa yang dipakai.Waktu SMA, seorang teman punya kebiasaan memberi judul yang tidak pantas pada draf tugas. Saat kami saling mengoreksi memang lucu, tetapi akhirnya ia pernah lupa mengembalikan judulnya. Di kelas bahasa Inggris, ketika guru berkeliling mengumpulkan tugas, teman saya melihat kertasnya sendiri lalu tiba-tiba lari keluar dengan alasan ke toilet, pergi ke lab komputer, dan mencetak ulang salinan tanpa umpatan 24 poin di bagian paling atas. Saya hampir mati tertawa.
Kalau perangkat lunaknya gratis dan maintainer-nya tidak dibayar, menurut saya beberapa easter egg adalah harga kecil yang wajar.
Memang Colin dibayar, tetapi bukan terutama untuk memelihara
man.Di sebuah perusahaan tempat saya dulu bekerja, ada developer yang pernah memasukkan kalimat dalam syarat dan ketentuan bahwa pengguna menyerahkan jiwa mereka kepada perusahaan. Tujuannya untuk melihat apakah eksekutif atau tim legal benar-benar memeriksa syarat dan ketentuan seperti yang dijanjikan; ternyata tidak, dan banyak jiwa berhasil ditangkap.
Coding harus menyenangkan, dan menulis kode juga harus menyenangkan. Menurut saya orang-orang ini melakukannya dengan baik.
Gagasan bahwa open source harus dingin dan serius itu muncul karena didorong perusahaan. Kalau saya membuat program bersama teman, saya mungkin akan menyelipkan easter egg di sana-sini untuk mengingatkan bahwa ada manusia di sisi lain.
Orang yang menemuinya akan menginjaknya secara tidak sengaja seperti penulis asli, dan pipeline continuous integration penulis asli jadi rusak. Menurut saya easter egg bukan alat yang bagus untuk mengingatkan bahwa “ada manusia di sisi lain”.
Setidaknya begitu di luar perangkat lunak hiburan.
Apalagi jika hal yang dikerjakan dikelilingi prosedur birokratis. Favorit pribadi saya adalah Rick Roll yang saya sembunyikan di dalam source code aplikasi pemerintah yang saya perbaiki sebagai konsultan beberapa tahun lalu. Hanya developer yang mengerjakan subsistem yang sangat spesifik yang bisa menemukannya, tetapi jika ditemukan, dari konteksnya akan jelas mengapa itu ada di sana.
Ini menambah satu alasan lagi mengapa sulit memercayai perangkat lunak yang mengintegrasikan berbagai bagian dengan proses rekayasa yang berbeda-beda ke dalam aplikasi keselamatan jiwa atau misi-kritis.
Sekarang sudah tidak ada lagi.
Developer
man-db, Colin Watson, menilai itu sudah cukup lucu dan ceritanya juga tidak akan terlupakan, lalu menghapus easter egg itu sepenuhnya.https://git.savannah.gnu.org/cgit/man-db.git/commit/?id=b225...
Isinya mengatakan bahwa easter egg seperti ini seharusnya dibiarkan, karena pada akhirnya hal-hal seperti inilah yang membedakan manusia dan mesin.
Artikel terkait:
Why does man print “gimme gimme gimme” at 00:30? (2017) - https://news.ycombinator.com/item?id=27994194 - Juli 2021, 211 komentar
Why does man print “gimme gimme gimme” at 00:30? - https://news.ycombinator.com/item?id=15747313 - November 2017, 159 komentar
Why does man print “gimme gimme gimme” at 00:30? - https://news.ycombinator.com/item?id=15746972 - November 2017, 1 komentar
Why does man print “gimme gimme gimme” at 00:30? - https://news.ycombinator.com/item?id=15742221 - November 2017, 1 komentar
Idenya menarik, tapi tidak boleh dimasukkan ke alur eksekusi normal. Itu merugikan pengguna
Seperti yang dikatakan penulis artikel asli, akan lebih baik kalau bentuknya
man -abbaNamun karena kesalahan, ini juga aktif ketika halaman man ditentukan dengan flag
--pathalih-alih nama halaman$ man --abba --format=json["gimme", "gimme", "gimme"]Update ini merusak workflow saya
manlewat tengah malamSaat menyingkirkan sistem telepon lama, saya memasang FreePBX di perusahaan
Karena ekstensi tidak terlalu banyak, kami memakai 1xx, 2xx, 3xx sebagai ekstensi berdasarkan jenisnya dan masih banyak nomor tersisa. Lalu saya memasukkan easter egg kecil: kalau ada yang menelepon ekstensi 666, sistem akan memutar tawa menyeramkan Vincent Price di bagian akhir Thriller-nya Michael Jackson
Satu atau dua tahun kemudian, pada suatu pagi buta, seorang rekan mengirim pesan bahwa sepertinya telepon kami diretas, dan katanya ke mana pun dia menelepon selalu terdengar suara menyeramkan. Setelah dicek, ternyata ada sesuatu yang salah sehingga semua panggilan dialihkan ke ekstensi yang terakhir ditambahkan, yaitu 666
Tentu saja orang-orang tidak menganggap easter egg itu lucu, dan mereka merasa tersinggung oleh suara tawanya
Saya penasaran apakah ada hipotesis kenapa ada pengujian yang memanggil
mantanpa argumenApakah tujuannya hanya memastikan
manterpasang? Kalaupun begitu, rasanya orang akan menguji perintah dengan cara yang biasa dipakai--pathBagian ini kemudian diperbaiki, dan setelah itu seluruh easter egg juga dihapus
man -wmanmenghasilkan output yang diharapkanUntuk menentukan apakah
manberakhir dengan benar, menurut saya cukup percaya pada exit codeMenilai dari panjang
stderrselalu rapuh