5 points par GN⁺ 2025-06-17 | 2 commentaires | Partager sur WhatsApp
  • L’API publique d’Android cache des méthodes et constantes humoristiques
  • Parmi les plus connues, des méthodes comme isUserAMonkey() et isUserAGoat() mêlent usage réel et clin d’œil humoristique
  • DISALLOW_FUN, Log.wtf() et d’autres incluent dans l’API officielle des descriptions facétieuses ou des comportements amusants
  • Des noms inventifs ou des parodies (par ex. TWEET_TRANSACTION, GRAVITY_DEATH_STAR_I) apparaissent fréquemment dans la documentation officielle ou dans le code
  • Ces éléments offrent aux développeurs un peu de plaisir et de petites découvertes

Les blagues et éléments humoristiques dans l’API publique d’Android

L’API ouverte d’Android contient, en plus de ses fonctions réelles, divers traits d’esprit, blagues et easter eggs destinés aux développeurs.

ActivityManager.isUserAMonkey()

  • Méthode permettant de détecter si l’outil de développement UI Exerciser Monkey est en cours d’exécution
  • Elle a été conçue pour permettre de limiter certains comportements dans un environnement de test de charge où l’UI simule des entrées aléatoires
  • Elle a été introduite pour restreindre certaines fonctions importantes (par ex. les appels d’urgence) lorsque c’est un monkey, et non un véritable utilisateur, qui manipule l’application
  • Ajoutée à l’API publique avec Android 2.2 (Froyo, API 8)
  • Son implémentation remonte aux débuts d’Android pour résoudre de vrais problèmes survenus par accident

UserManager.isUserAGoat()

  • La documentation officielle indique en plaisantant qu’elle sert à vérifier si l’utilisateur peut être téléporté
  • Au départ, elle renvoyait toujours false, puis a été modifiée après la sortie de Goat Simulator pour renvoyer true si le jeu était installé
  • À partir d’Android 11 (API 30), elle renvoie toujours false pour des raisons de protection de la vie privée
  • Il existait une logique de détection de l’application Goat Simulator, mais elle a été modifiée afin d’éviter les fuites d’information avec l’évolution des règles d’accès à la liste des applications
  • Elle s’inspire d’un easter egg du gestionnaire des tâches de Google Chrome

UserManager.DISALLOW_FUN

  • Politique de restriction du fun ajoutée dans Android 6 Marshmallow (API 23)
  • La documentation officielle explique avec humour qu’elle peut empêcher l’utilisateur de ressentir de la joie ou du plaisir
  • En pratique, il s’agit d’une politique permettant au propriétaire de l’appareil de bloquer certaines fonctions utilisateur
  • Certaines applications ou le système lui-même peuvent détecter cette politique pour désactiver des fonctions “amusantes”, comme des easter eggs
  • Elle peut être utilisée dans des établissements scolaires pour désactiver des fonctions distrayantes

Chronometer.isTheFinalCountdown()

  • La méthode isTheFinalCountdown a été ajoutée dans Android 8 Oreo (API 26)
  • Lorsqu’elle est appelée, elle lance automatiquement la vidéo YouTube de “The Final Countdown” du groupe Europe
  • Elle n’a pas d’utilité pratique directe et constitue clairement une blague ou une référence
  • Cela apparaît explicitement dans le code via une instruction Intent
  • Elle apporte un petit moment ludique aux développeurs

PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND

  • Constante indiquant la prise en charge du multitouch ajoutée dans Android 2.3 Gingerbread (API 8)
  • Son nom est une parodie de jazz hands (geste de performance musicale)
  • Elle correspond à la reconnaissance simultanée de jusqu’à cinq doigts

Log.wtf()

  • Acronyme de What a Terrible Failure, utilisé pour journaliser une situation qui ne devrait jamais se produire
  • Classé comme log très grave, de niveau assertion
  • C’est l’une des API humoristiques les plus connues chez les développeurs

AdapterViewFlipper.fyiWillBeAdvancedByHostKThx()

  • Ajoutée dans Android 3.0 Honeycomb (API 11)
  • Son nom officieux et joyeusement absurde est utilisé lorsque la vue est avancée par l’hôte
  • Il semble provenir d’un élan comique au moment du nommage
  • C’est une manière spirituelle d’illustrer l’un des problèmes chroniques de l’informatique : la difficulté de nommer correctement les choses

IBinder.TWEET_TRANSACTION

  • Type de transaction introduit dans Android 3.2 Honeycomb (API 13)
  • Il suggère l’envoi d’un tweet, mais en pratique ne fait rien, et sa limite de 130 caractères renvoie à une ancienne règle de Twitter
  • Le nom lui-même est une pure parodie

IBinder.LIKE_TRANSACTION

  • Transaction LIKE ajoutée dans Android 4.0.3 ICS (API 15)
  • Elle sert à signaler que l’appelant apprécie l’application, sans qu’aucun enregistrement ni compteur réel n’existe
  • Une description humoristique explique qu’elle aide à remonter l’estime de soi de l’application

SensorManager.SENSOR_TRICORDER

  • Constante dont le nom vient du Tricorder de Star Trek
  • Présente depuis Android 1.0, puis marquée comme obsolète
  • Le Tricorder est un appareil de science-fiction inexistant, ce qui amuse les développeurs

SensorManager.GRAVITY_*

  • SensorManager contient plusieurs constantes de gravité pour différents corps célestes (le Soleil, Pluton, etc.)
  • Parmi elles, GRAVITY_DEATH_STAR_I (l’Étoile de la mort de Star Wars) et GRAVITY_THE_ISLAND (l’île de la série LOST) sont des blagues
  • Certaines ont davantage une valeur parodique qu’un véritable usage pratique

<blink> balise

  • Le système de layout de vues d’Android contient une balise cachée <blink>
  • Elle fait clignoter les vues enfants comme l’ancien <blink> du HTML
  • Elle n’est pas documentée officiellement, mais a été ajoutée dans un commit de 2011 et reste présente dans l’AOSP
  • Son utilisation réelle fait débat

Conclusion

Dans toute l’API officielle d’Android, on trouve volontairement des blagues, des parodies et des éléments façon easter egg
Ces détails offrent aux développeurs de petites joies et le plaisir de la découverte, tout en donnant un aperçu de la culture communautaire et de la bonne humeur qui entourent Android.

2 commentaires

 
GN⁺ 2025-06-17
Avis sur Hacker News
  • Chez FB, pendant plusieurs années, il y avait la convention d’ajouter un suffixe comme _DO_NOT_USE_OR_YOU_WILL_BE_FIRED aux tokens dangereux ou déjà obsolètes. Tout le monde connaissait cette blague, mais après la pandémie, avec une proportion plus élevée de nouvelles recrues et un onboarding à distance insuffisant, certaines plaintes sont apparues disant que ce genre de blagues internes provoquait de la peur ou de l’incertitude. Cela dit, je ne parle que de ce que j’ai personnellement observé

    • Je me souviens avoir toujours trouvé amusants les noms joyeux et excessivement longs comme __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED dans React. Mais malheureusement, ce type d’« humour » disparaît peu à peu ces derniers temps PR associée

    • Autrefois chez Google, il y avait quelque part dans la stack réseau un énorme bloc de code difficile à comprendre et encore plus difficile à modifier, qui ne cessait de grossir. Notre équipe l’a rebaptisé « [Foo]Sorcery ». Comme ce nom était à la fois un peu effrayant et étrange, plus personne n’essayait d’y ajouter quoi que ce soit, et de temps en temps quelqu’un en profitait pour nettoyer et supprimer une partie du code. Je pense que ce naming amusant a vraiment eu un effet

  • Dans le code source d’Android, la fonction maligne que je préfère est android.os.Handler.runWithScissors(), mais malheureusement elle ne fait pas partie de l’API publique lien vers le code source

    • Le commentaire de cette fonction contient la phrase « @hide This method is prone to abuse and should probably not be in the API. If we ever do add it, we should probably give it a more reasonable name, like runUnsafe() » et ça m’a bien fait rire

    • Je suis un peu déçu que cette fonction ne figure pas dans l’article. C’est l’une de mes préférées

  • L’exemple qui me vient immédiatement à l’esprit pour X11, c’est la variable globale party_like_its_1989 lien vers le code, et le changelog de l’extension DRI2 est rempli d’expressions comme « Awesomeness! », « True excellence » et « Enlightenment attained » lien vers le changelog

  • Dans BeOS (et Haiku), il existe des fonctions is_computer_on() et is_computer_on_fire(), avec une description absolument excellente lien de référence

    • Dans Delphi, il existe aussi une exception EProgrammerNotFound, et la documentation officielle a un humour très sec et très sérieux lien vers la doc

    • Bien sûr, je comprends que ce type de naming ait été fait pour être drôle, mais sur les ordinateurs modernes avec gestion avancée de l’alimentation, ce genre d’état est en réalité assez courant. Un système d’exploitation doit naturellement gérer aussi bien un réveil depuis un mode de veille profonde qu’une carte mère à 200 degrés

    • is_computer_on_fire() aurait été encore plus drôle comme déclencheur asynchrone basé sur des événements

    • Pour les curieux, voici aussi le lien vers le code source correspondant lien vers le code

  • J’aime le fait que ce sens de l’humour survive encore dans les codebases des grandes entreprises. Quand on n’utilise que l’API, on ne le voit pas, mais en lisant directement le code source, ces petits easter eggs qu’on croise parfois donnent vraiment le sentiment qu’un humain a écrit ce code. Les logiciels d’aujourd’hui sont si froids que c’est justement ce contraste qui leur donne un peu de chaleur. Franchement, j’aimerais qu’il y en ait davantage

    • De façon similaire, je trouve marquant que cela rappelle qu’il y a de vraies personnes derrière le code ou les API que j’utilise
  • Si vous voulez tester vous-même des choses comme isUserAGoat ou isUserAMonkey sur Android, j’ai mis en ligne une petite app qui propose ce genre de fonctions lien vers l’app. J’aimerais y ajouter encore plus d’easter eggs plus tard

    • Ajouter aussi quelque chose comme un contrôle de politique DISALLOW_FUN pourrait être assez amusant. J’ai cherché le code correspondant sur GitHub, mais en général il n’est utilisé que pour masquer l’easter egg de version dans l’app système Settings. Je serai peut-être le premier développeur tiers à en faire un usage réel

    • Par contre, l’app ne s’installe pas sur Android 15. Ce serait bien de la mettre à jour, puisque Google impose désormais de respecter un minimum compileSdk

  • Le gestionnaire des tâches de Chrome avait autrefois une colonne cachée qui affichait « le nombre de chèvres téléportées par le processus du navigateur ». Cette fonctionnalité a disparu aujourd’hui, mais on peut la voir sur une ancienne capture d’écran. Il y avait autrefois jusqu’à 234 colonnes, contre seulement 16 aujourd’hui, et c’est un peu dommage

  • L’époque où les produits tech débordaient d’easter eggs me manque. J’ai l’impression que cette culture a disparu à mesure que tout s’est corporatisé

  • J’aimerais faire de la réponse à ce fil une question obligatoire en entretien. Moi aussi, quand on m’interviewe. C’est vraiment un moment « il y a deux sortes de personnes dans le monde »

    • Pourquoi ? À mes yeux, les blagues qu’un Googler glisse dans une API ont à peu près le niveau d’humour d’une blague de papa au dîner de Noël
  • Donc oui, il est question d’humour et de blagues dans la documentation technique. C’est souvent vu négativement, mais moi j’adore quand la documentation contient de l’humour. J’en ai déjà parlé ici

 
roxie 2025-10-14

Le terme « humour » a été traduit par une IA...? 😨😨