5 điểm bởi GN⁺ 2025-06-17 | 2 bình luận | Chia sẻ qua WhatsApp
  • Trong Android public API có ẩn chứa những phương thức và hằng số mang tính hài hước
  • Tiêu biểu là các phương thức như isUserAMonkey()isUserAGoat(), vừa có mục đích sử dụng thực tế vừa chứa yếu tố đùa vui
  • DISALLOW_FUN, Log.wtf() v.v. là những API chính thức có phần mô tả đùa vui hoặc hành vi thú vị
  • Cách đặt tên đầy sáng tạo hay các màn parody (ví dụ: TWEET_TRANSACTION, GRAVITY_DEATH_STAR_I) thường xuyên xuất hiện trong tài liệu chính thức hoặc trong mã nguồn
  • Những yếu tố này mang lại niềm vui và những khám phá nho nhỏ cho lập trình viên

Những trò đùa và yếu tố hài hước trong Android public API

Android open API có bao gồm nhiều trò đùa dí dỏm và easter egg dành cho lập trình viên, đi kèm với chức năng thực tế

ActivityManager.isUserAMonkey()

  • Đây là phương thức dùng để xác định liệu công cụ dành cho lập trình viên UI Exerciser Monkey có đang chạy hay không
  • Nó được thiết kế để có thể hạn chế một số hành vi nhất định trong môi trường stress test ứng dụng bằng cách mô phỏng đầu vào ngẫu nhiên trên UI
  • Khi monkey đang sử dụng ứng dụng thay cho người dùng thực, nó được đưa vào nhằm hạn chế các chức năng quan trọng như gọi điện khẩn cấp
  • Được thêm vào public API từ Android 2.2(Froyo, API 8)
  • Có bối cảnh triển khai xuất phát từ việc giải quyết các sự cố ngoài ý muốn trong giai đoạn đầu phát triển Android

UserManager.isUserAGoat()

  • Tài liệu chính thức nói rằng nó dùng để kiểm tra người dùng có phải là đối tượng dịch chuyển tức thời hay không, nhưng đó chỉ là trò đùa
  • Ban đầu nó luôn trả về false, nhưng sau khi Goat Simulator ra mắt, nó được đổi để trả về true nếu trò chơi đó đã được cài đặt
  • Từ Android 11(API 30) trở lên, vì mục đích bảo vệ quyền riêng tư, giá trị này bị cố định luôn là false
  • Từng có logic phát hiện ứng dụng Goat Simulator, nhưng đã được sửa để tránh rò rỉ thông tin do thay đổi trong chính sách truy cập danh sách ứng dụng
  • Lấy cảm hứng từ easter egg trong Google Chrome Task Manager

UserManager.DISALLOW_FUN

  • Đây là chính sách cấm vui vẻ được thêm vào từ Android 6 Marshmallow(API 23)
  • Tài liệu chính thức mô tả rằng có thể dùng nó để ngăn người dùng cảm thấy niềm vui hay sự thích thú
  • Trên thực tế, đây là chính sách để chủ sở hữu thiết bị chặn một số chức năng của người dùng
  • Một số ứng dụng hoặc chính hệ thống có thể phát hiện chính sách này để tắt các tính năng “vui nhộn” như easter egg
  • Có thể được dùng trong các cơ sở giáo dục để vô hiệu hóa các tính năng gây xao nhãng

Chronometer.isTheFinalCountdown()

  • Phương thức isTheFinalCountdown được thêm vào trong Android 8 Oreo(API 26)
  • Khi được gọi, nó sẽ tự động mở video YouTube “The Final Countdown” của Europe
  • Không có tính hữu dụng trực tiếp nào, rõ ràng chỉ là một trò đùa/tham chiếu
  • Điều này được thể hiện rất rõ qua câu lệnh Intent trong mã
  • Nó mang lại một thú vui nho nhỏ cho lập trình viên

PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND

  • Đây là hằng số thể hiện thiết bị có hỗ trợ đa chạm hay không, được thêm từ Android 2.3 Gingerbread(API 8)
  • Tên gọi này là một màn parody theo jazz hands (động tác biểu diễn âm nhạc)
  • Nó mang nghĩa thiết bị có thể nhận đồng thời tối đa năm ngón tay

Log.wtf()

  • Đây là viết tắt của What a Terrible Failure, dùng để ghi log cho những tình huống tuyệt đối không được phép xảy ra
  • Nó được phân loại là log nghiêm trọng ở mức assertion
  • Đây là một trong những API đùa vui nổi tiếng nhất trong giới lập trình viên

AdapterViewFlipper.fyiWillBeAdvancedByHostKThx()

  • Được thêm vào trong Android 3.0 Honeycomb(API 11)
  • Với cách đặt tên không chính thức và vui nhộn, nó được gọi khi view được host điều khiển tiến trình
  • Có thể suy đoán rằng tên gọi này xuất phát từ một ý tưởng hài hước trong lúc đặt tên
  • Nó thể hiện một cách dí dỏm vấn đề cố hữu trong khoa học máy tính là sự khó nhằn của việc đặt tên

IBinder.TWEET_TRANSACTION

  • Đây là kiểu transaction được đưa vào từ Android 3.2 Honeycomb(API 13)
  • Cái tên gợi ý gửi tweet, nhưng thực tế nó không làm gì cả, còn giới hạn độ dài thông điệp(130 ký tự) là tham chiếu đến chính sách cũ của Twitter
  • Bản thân tên gọi đã là một màn parody hoàn chỉnh

IBinder.LIKE_TRANSACTION

  • Đây là LIKE transaction được thêm trong Android 4.0.3 ICS(API 15)
  • Nó dùng để gửi tín hiệu rằng bên gọi thích ứng dụng, nhưng không có ghi nhận hay bộ đếm thực tế nào
  • Có cả phần mô tả đùa rằng nó giúp nâng cao lòng tự trọng của ứng dụng

SensorManager.SENSOR_TRICORDER

  • Đây là hằng số được đặt tên theo Tricorder trong Star Trek
  • Nó đã tồn tại từ thời Android 1.0, nhưng sau đó bị đánh dấu deprecated
  • Tricorder là một thiết bị khoa học viễn tưởng không tồn tại ngoài đời, tạo nên chút tiếng cười cho lập trình viên

SensorManager.GRAVITY_*

  • Trong SensorManager có nhiều hằng số chứa giá trị trọng lực của các thiên thể khác nhau như Mặt Trời, Sao Diêm Vương v.v.
  • Trong số đó, GRAVITY_DEATH_STAR_I (Death Star trong Star Wars), GRAVITY_THE_ISLAND (hòn đảo trong phim LOST) là những trò đùa
  • Một số hằng số mang ý nghĩa parody nhiều hơn là tính hữu dụng thực tế

<blink> thẻ

  • Trong hệ thống layout view của Android có một thẻ ẩn là <blink>
  • Nó khiến view con nhấp nháy giống như thẻ <blink> cũ của HTML
  • Tài liệu chính thức không giải thích gì về nó, nhưng nó được thêm vào trong commit năm 2011 và vẫn còn tồn tại trong AOSP đến nay
  • Việc nó có được dùng thực sự hay không vẫn còn là đề tài tranh cãi

Kết luận

Khắp Android API chính thức, các trò đùa, parody và yếu tố kiểu easter egg đã được cài cắm một cách có chủ đích
Những yếu tố này mang đến niềm vui nho nhỏ cùng cảm giác khám phá cho lập trình viên, đồng thời cho thấy phần nào văn hóa cộng đồng và sự dí dỏm của Android

2 bình luận

 
GN⁺ 2025-06-17
Ý kiến trên Hacker News
  • Ở FB trong nhiều năm, có một thông lệ là gắn hậu tố như _DO_NOT_USE_OR_YOU_WILL_BE_FIRED cho những token nguy hiểm hoặc đã bị loại bỏ. Ai cũng hiểu đây là trò đùa, nhưng sau đại dịch, khi tỷ lệ nhân sự mới tăng cao và việc onboarding từ xa không đầy đủ, cũng xuất hiện những phàn nàn rằng các trò đùa nội bộ như vậy gây ra cảm giác sợ hãi hoặc bất an. Điều này chỉ là câu chuyện trong phạm vi trải nghiệm của riêng tôi

    • Tôi vẫn nhớ đã thấy thú vị từ lâu với những cái tên vui nhộn nhưng dài quá mức như __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED của React. Nhưng tiếc là gần đây kiểu “hài hước” như vậy đang dần biến mất PR liên quan

    • Hồi trước ở Google, ở đâu đó trong network stack có một khối mã khổng lồ rất khó hiểu và cũng rất khó sửa, mà nó cứ ngày một phình to ra. Nhóm của chúng tôi đổi tên đoạn mã đó thành "[Foo]Sorcery". Nhờ cái tên vừa đáng sợ vừa kỳ quặc ấy mà không ai còn muốn thêm gì mới vào đó nữa, và thỉnh thoảng lại có người dọn bớt rồi xóa đi một phần. Tôi nghĩ cách đặt tên vui như vậy đã phát huy hiệu quả

  • Trong mã nguồn Android, hàm dí dỏm tôi thích nhất là android.os.Handler.runWithScissors(), nhưng tiếc là nó không nằm trong public API liên kết mã nguồn

    • Tôi vẫn bật cười vì trong chú thích của hàm có câu: “@hide phương thức này có khả năng bị lạm dụng nên tốt hơn là không đưa vào API, và nếu thêm vào thì có lẽ phải đổi sang một cái tên bớt vui hơn như runUnsafe()”

    • Hơi tiếc là hàm này không có trong bài gốc. Đây là một trong những hàm tôi thích nhất

  • Ví dụ hiện ra ngay trong đầu về X11 là có một biến toàn cục tên "party_like_its_1989" liên kết mã, còn changelog của phần mở rộng DRI2 thì đầy những cụm như "Awesomeness!", "True excellence", "Enlightenment attained" liên kết changelog

  • Trong BeOS (và Haiku) có các hàm "is_computer_on()" và "is_computer_on_fire()", mà phần mô tả thì xuất sắc không kém liên kết tham khảo

    • Trong Delphi có một ngoại lệ tên là 'EProgrammerNotFound', và tài liệu chính thức của nó cũng mang kiểu hài hước rất khô khan nhưng nghiêm túc liên kết tài liệu

    • Dĩ nhiên tôi hiểu các tên gọi như vậy được tạo ra để gây cười, nhưng với máy tính hiện đại có quản lý điện năng nâng cao thì những trạng thái kiểu này lại khá phổ biến. Hệ điều hành đương nhiên phải xử lý được cả việc đánh thức từ chế độ ngủ sâu hay tình huống nhiệt độ bo mạch chủ lên tới 200 độ

    • Tôi nghĩ is_computer_on_fire() sẽ còn vui hơn nếu được dùng như một trigger bất đồng bộ dựa trên sự kiện

    • Cho ai tò mò thì đây là liên kết tới mã nguồn liên quan liên kết mã

  • Tôi thích việc cảm giác hài hước như thế này vẫn hiện diện trong codebase của các tập đoàn lớn. Khi chỉ dùng API thì không nhận ra, nhưng lúc đọc trực tiếp mã nguồn, những easter egg như vậy thỉnh thoảng xuất hiện khiến người ta thực sự cảm nhận được rằng mã này là do con người viết ra. Phần mềm ngày nay quá lạnh lẽo, nên chính sự tương phản đó lại tạo ra cảm giác ấm áp. Thành thật mà nói, tôi mong có nhiều thứ như vậy hơn

    • Tương tự như vậy, tôi thấy ấn tượng ở chỗ nó nhắc ta nhớ rằng ở khắp nơi trong code hay API mình dùng đều có dấu vết của con người thật
  • Nếu muốn tự mình thử những thứ như isUserAGoat hay isUserAMonkey trên Android, tôi đã làm và đăng một ứng dụng nhỏ cung cấp các chức năng đó liên kết ứng dụng. Sau này tôi còn muốn thêm nhiều easter egg khác nữa

    • Có lẽ thêm cả tính năng kiểm tra chính sách DISALLOW_FUN cũng sẽ khá vui. Tôi đã thử tìm mã liên quan trên GitHub, nhưng phần lớn chỉ dùng trong ứng dụng Settings của hệ thống để ẩn easter egg phiên bản. Có khi tôi sẽ là bên thứ ba đầu tiên thực sự dùng tính năng này

    • Nhưng trên Android 15 thì ứng dụng không cài được. Sẽ tốt hơn nếu bạn cập nhật ứng dụng vì Google yêu cầu phải khớp minimum compileSdk

  • Trình quản lý tác vụ của Chrome từng có một cột ẩn hiển thị "số con dê mà tiến trình trình duyệt đã dịch chuyển tức thời". Giờ tính năng đó đã biến mất, nhưng vẫn có thể xem trong ảnh chụp màn hình cũ. Ngày trước từng có tới 234 cột, giờ chỉ còn 16 nên cũng hơi tiếc

  • Tôi nhớ thời mà các sản phẩm công nghệ đầy ắp easter egg. Bây giờ mọi thứ đều trở nên quá doanh nghiệp hóa nên cảm giác như văn hóa đó đã biến mất

  • Tôi muốn biến việc trả lời trong thread này thành một câu hỏi bắt buộc khi phỏng vấn. Kể cả khi phỏng vấn tôi cũng vậy. Đúng là một khoảnh khắc kiểu “trên đời có hai loại người”

    • Tại sao? Tôi thấy những trò đùa mà Googler cài vào API chỉ vui ở mức mấy câu đùa kiểu bố kể trong bữa tối Giáng sinh thôi
  • Ý là trong tài liệu kỹ thuật có sự hài hước và các trò đùa, điều mà nhiều người thường nhìn theo hướng tiêu cực, nhưng cá nhân tôi lại rất thích tài liệu có chút hài hước. Tôi từng viết về chuyện này trong bài liên quan

 
roxie 2025-10-14

Cách viết ‘yuumer’ là do AI dịch à....? run run run