Las bromas y el humor ocultos en la API oficial de Android
(voxelmanip.se)- En la API pública de Android hay métodos y constantes humorísticos escondidos
- Entre los más representativos, métodos como isUserAMonkey() e isUserAGoat() incluyen elementos de broma junto con su uso real
- DISALLOW_FUN, Log.wtf() y otros incorporan descripciones en tono de broma o comportamientos divertidos dentro de la API oficial
- En la documentación oficial o en el código aparecen con frecuencia nombres ingeniosos o parodias (por ejemplo, TWEET_TRANSACTION, GRAVITY_DEATH_STAR_I)
- Estos elementos cumplen el papel de darles a los desarrolladores diversión y pequeños descubrimientos
Bromas y elementos de humor dentro de la API pública de Android
La API abierta de Android incluye, junto con funcionalidades reales, varios chistes ingeniosos y elementos tipo easter egg para desarrolladores.
ActivityManager.isUserAMonkey()
- Es un método para determinar si está en ejecución la herramienta de desarrollo UI Exerciser Monkey
- Fue diseñado para permitir restringir ciertos comportamientos en entornos de prueba de estrés donde se simulan entradas aleatorias sobre la UI
- Se introdujo con el objetivo de limitar funciones importantes (por ejemplo, hacer llamadas de emergencia) cuando quien usa la app es un monkey en lugar de un usuario real
- Se agregó a la API pública en Android 2.2 (Froyo, API 8)
- Tiene su origen en una implementación hecha al inicio del desarrollo de Android para resolver problemas accidentales reales
UserManager.isUserAGoat()
- La documentación oficial indica en tono de broma que sirve para comprobar si el usuario es un objetivo de teletransportación
- Al principio siempre devolvía false, pero tras el lanzamiento de Goat Simulator, se cambió para que devolviera true si ese juego estaba instalado
- A partir de Android 11 (API 30), quedó fijado para que siempre devuelva false por motivos de privacidad
- Existía una lógica para detectar la app Goat Simulator, pero se modificó para evitar filtraciones de información debido a los cambios en las políticas de acceso a la lista de apps
- Está inspirado en un easter egg del Task Manager de Google Chrome
UserManager.DISALLOW_FUN
- Es una política de restricción de diversión agregada en Android 6 Marshmallow (API 23)
- La documentación oficial lo describe como una forma de impedir que el usuario sienta alegría o diversión
- En la práctica, se usa como una política con la que el propietario del dispositivo puede bloquear algunas funciones del usuario
- Algunas apps o el propio sistema pueden detectar esta política para desactivar funciones “divertidas”, como easter eggs
- Puede utilizarse en instituciones educativas, por ejemplo, para desactivar funciones que distraigan
Chronometer.isTheFinalCountdown()
- En Android 8 Oreo (API 26) se agregó el método isTheFinalCountdown
- Al invocarlo, abre automáticamente el video de YouTube de “The Final Countdown” de Europe
- No tiene utilidad práctica directa y es claramente una broma o referencia
- Esto queda explícito en la instrucción Intent dentro del código
- Ofrece un pequeño momento lúdico para los desarrolladores
PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND
- Es una constante de compatibilidad con multitouch agregada en Android 2.3 Gingerbread (API 8)
- Su nombre parodia las Jazz hands (gesto de performance musical)
- Significa compatibilidad con reconocimiento simultáneo de hasta cinco dedos
Log.wtf()
- Es la abreviatura de What a Terrible Failure y se usa para registrar situaciones que nunca deberían ocurrir
- Está clasificado como un log grave de nivel similar a una aserción
- Es una de las APIs humorísticas más conocidas entre desarrolladores
AdapterViewFlipper.fyiWillBeAdvancedByHostKThx()
- Se agregó en Android 3.0 Honeycomb (API 11)
- Tiene un nombre informal y juguetón, y se invoca cuando la vista será avanzada por el host
- Se presume que surgió de una idea cómica durante el proceso de nombrado real
- Expresa con ingenio lo difícil que es uno de los problemas crónicos de la informática: poner nombres
IBinder.TWEET_TRANSACTION
- Es un tipo de transacción introducido en Android 3.2 Honeycomb (API 13)
- Sugiere enviar un tuit, pero en realidad no hace nada, y su límite de 130 caracteres hace referencia a una política antigua de Twitter
- El nombre en sí es completamente una parodia
IBinder.LIKE_TRANSACTION
- Es una transacción LIKE agregada en Android 4.0.3 ICS (API 15)
- Sirve para enviar una señal de que al llamador le gusta la app, pero no registra ni cuenta nada en realidad
- Existe una explicación en tono de broma de que ayuda a subirle la autoestima a la app
SensorManager.SENSOR_TRICORDER
- Es una constante cuyo nombre proviene del Tricorder de Star Trek
- Existe desde Android 1.0, pero después fue marcada como deprecated
- El Tricorder es un dispositivo de ciencia ficción que no existe en la realidad, y provoca una sonrisa entre desarrolladores
SensorManager.GRAVITY_*
- Dentro de SensorManager hay constantes con valores de gravedad de varios cuerpos celestes (el Sol, Plutón, etc.)
- Entre ellas, GRAVITY_DEATH_STAR_I (la Estrella de la Muerte de Star Wars) y GRAVITY_THE_ISLAND (la isla de la serie LOST) son bromas
- Algunas tienen más sentido como parodia que como utilidad real
<blink> etiqueta
- En el sistema de layouts de vistas de Android existe una etiqueta oculta llamada <blink>
- Hace que las vistas hijas parpadeen como el antiguo
<blink>de HTML - No tiene explicación en la documentación oficial, pero fue agregada en un commit de 2011 y todavía permanece en AOSP
- Su uso real sigue siendo motivo de debate
Conclusión
En varias partes de la API oficial de Android se insertaron deliberadamente bromas, parodias y elementos tipo easter egg
Estos elementos les dan a los desarrolladores pequeños momentos de diversión y el placer de descubrir detalles curiosos, y muestran un poco de la cultura comunitaria y el espíritu juguetón de Android
2 comentarios
Opiniones de Hacker News
En FB, durante varios años, había la costumbre de ponerles sufijos como
_DO_NOT_USE_OR_YOU_WILL_BE_FIREDa tokens peligrosos o ya obsoletos. Todo el mundo entendía la broma, pero después de la pandemia, cuando aumentó la proporción de personal nuevo y faltó onboarding remoto, también surgieron quejas de que este tipo de chistes internos generaban miedo o incertidumbre. Esto solo aplica dentro del alcance de lo que yo vivíRecuerdo que desde hace tiempo me parecían divertidos nombres alegres y excesivamente largos como
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIREDde React. Pero por desgracia, últimamente este tipo de “humor” está desapareciendo poco a poco PR relacionadaAntes, en Google, había en alguna parte del stack de red un enorme bloque de código difícil de entender y también de modificar, y no dejaba de crecer. Nuestro equipo le cambió el nombre a "[Foo]Sorcery". Gracias a ese nombre medio inquietante y extraño, nadie quiso volver a agregarle nada nuevo, y de vez en cuando alguien ordenaba una parte y la eliminaba. Creo que ese nombre gracioso sí funcionó
La función ingeniosa de Android que más me gusta en el código fuente es
android.os.Handler.runWithScissors(), pero por desgracia no está incluida en la API pública enlace al código fuenteTodavía me da risa que en el comentario de esa función diga: “@hide Es mejor no poner este método en la API porque se presta al mal uso, y si se agrega, quizá habría que cambiarle el nombre a algo menos divertido como runUnsafe()”
Me da un poco de pena que esa función no aparezca en el cuerpo del artículo. Es una de mis favoritas
El ejemplo más inmediato que se me viene a la mente sobre X11 es una variable global llamada "party_like_its_1989" enlace al código, y el changelog de la extensión DRI2 está lleno de expresiones como "Awesomeness!", "True excellence" y "Enlightenment attained" enlace al changelog
En BeOS (y Haiku) existen funciones llamadas "is_computer_on()" e "is_computer_on_fire()", y la explicación es excelente enlace de referencia
En Delphi existe una excepción llamada
EProgrammerNotFound, y la documentación oficial también tiene un humor muy seco y serio enlace a la documentaciónClaro, entiendo que estos nombres se hicieron para causar gracia, pero en las computadoras modernas con administración avanzada de energía, estos estados son bastante comunes. El sistema operativo tiene que manejar como algo normal tanto el despertar desde un modo de ahorro profundo como una placa madre a 200 grados
Creo que
is_computer_on_fire()habría sido aún más divertido si se usara como un trigger asíncrono basado en eventosPara quien tenga curiosidad, también está el enlace al código relacionado enlace al código
Me gusta que este sentido del humor siga vivo en los codebases de grandes empresas. Si solo usas la API no lo notas, pero cuando lees directamente el código fuente, estos easter eggs que aparecen de vez en cuando realmente te hacen sentir que el código lo escribió una persona. El software de hoy es demasiado frío, y justamente ese contraste me transmite calidez. Honestamente, ojalá hubiera más de esto
Si quieren probar directamente cosas como isUserAGoat o isUserAMonkey en Android, hice y publiqué una app pequeña que ofrece esa función enlace a la app. Más adelante me gustaría agregar todavía más easter eggs
También estaría bastante divertido incluir funciones como la verificación de la política DISALLOW_FUN. Busqué el código relacionado en GitHub, pero casi siempre se usa solo para ocultar el easter egg de versión en la app del sistema Settings. Tal vez yo termine siendo el primer tercero en usar esta función de verdad
Pero en Android 15 la app no se instala. Estaría bien que la actualizaras, porque Google exige que el minimum compileSdk coincida obligatoriamente
En algún momento, el administrador de tareas de Chrome tenía una columna oculta que mostraba la “cantidad de cabras teletransportadas por el proceso del navegador”. Esa función ya desapareció, pero se puede ver en una captura vieja. Antes había nada menos que 234 columnas y ahora se redujo a 16, así que da un poco de pena
Extraño la época en que los productos tech estaban llenos de easter eggs. Siento que, con todo cada vez más corporativo, esa cultura se fue perdiendo
Me gustaría volver obligatoria la respuesta a este hilo como pregunta esencial en entrevistas. Incluyéndome a mí cuando me entrevisten. De verdad es uno de esos momentos de “hay dos tipos de personas en el mundo”
O sea, que hay humor y chistes en la documentación técnica. Aunque mucha gente suele verlo negativamente, a mí me encanta que la documentación tenga humor. Ya escribí sobre eso en un texto relacionado
¿La expresión ‘yuumer’ fue traducida por IA...? temblor