Je regardais les nouvelles API introduites dans Android 4.2 . En regardant la UserManager
classe, je suis tombé sur la méthode suivante:
public boolean isUserAGoat()
Utilisé pour déterminer si l'utilisateur effectuant cet appel est soumis à des téléportations.
Renvoie si l'utilisateur effectuant cet appel est une chèvre.
Comment et quand doit-il être utilisé?
java
android
usermanager
Ovidiu Latcu
la source
la source
Réponses:
De leur source , la méthode utilisée pour revenir
false
jusqu'à ce qu'elle soit modifiée dans l'API 21.Il semble que la méthode ne nous soit pas vraiment utile en tant que développeurs. Quelqu'un a déjà déclaré qu'il pourrait s'agir d'un œuf de Pâques .
Dans l'API 21, l'implémentation a été modifiée pour vérifier s'il existe une application installée avec le package
com.coffeestainstudios.goatsimulator
Voici la source et le changement .
la source
false
pour toujours.Je ne sais pas si c'était "le" cas d'utilisation officiel, mais ce qui suit génère un avertissement en Java (qui peut en outre produire des erreurs de compilation s'il est mélangé à des
return
instructions, conduisant à du code inaccessible):Cependant, c'est légal:
Je me retrouve donc souvent à écrire une méthode d'utilité idiote pour le moyen le plus rapide de simuler un bloc de code, puis à terminer le débogage, trouver tous les appels, donc à condition que l'implémentation ne change pas, cela peut être utilisé pour cela.
JLS souligne
if (false)
qu'il ne déclenche pas de "code inaccessible" pour la raison spécifique que cela interromprait la prise en charge des indicateurs de débogage, c'est-à-dire, fondamentalement, ce cas d'utilisation (h / t @auselen). (static final boolean DEBUG = false;
par exemple).J'ai remplacé
while
pourif
, produisant un cas d'utilisation plus obscur. Je crois que vous pouvez déclencher votre IDE, comme Eclipse, avec ce comportement, mais cette modification est dans 4 ans et je n'ai pas d'environnement Eclipse pour jouer.la source
else
bloc suivant , etc.isUserAGoat()
renvoie vrai si un utilisateur a une application spécifique installée. Bonne chance pour diagnostiquer que lorsque votre code commence soudainement à se comporter bizarrement sur des appareils "aléatoires"!Cela semble être une blague à l'intérieur de Google. Il figure également dans le gestionnaire de tâches de Google Chrome. Cela n'a aucun but, à part certains ingénieurs qui le trouvent amusant. C'est un but en soi, si vous voulez.
Goats Teleported
colonne.Il y a même un énorme rapport de bug sur Chrome concernant trop de chèvres téléportées .
L' extrait de code source Chromium suivant est volé dans les commentaires HN .
la source
En complément de la réponse @djechlin (bonne réponse d'ailleurs!), Cet appel de fonction peut également être utilisé comme code factice pour contenir un point d'arrêt dans un IDE lorsque vous souhaitez vous arrêter dans une itération spécifique ou un appel récursif particulier, par exemple:
isUserAGoat()
pourrait être utilisé à la place d'une déclaration de variable factice qui sera affichée dans l'EDI comme un avertissement et, dans le cas particulier d'Eclipse, obstruera la marque de point d'arrêt, ce qui rend difficile l'activation / la désactivation. Si la méthode est utilisée comme convention, toutes les invocations pourraient être filtrées ultérieurement par un script (pendant la phase de validation peut-être?).Les gars de Google sont de gros utilisateurs d'Eclipse (ils fournissent plusieurs de leurs projets en tant que plugins Eclipse: Android SDK, GAE, etc.), donc la réponse @djechlin et cette réponse complémentaire ont beaucoup de sens (du moins pour moi).
la source
;
? Je veux dire, les chèvres sont clairement meilleures, mais il existe déjà un moyen facile de contourner celaIl y a une drôle de méthode nommée / constante / peu importe dans chaque version d'Android.
La seule utilisation pratique que j'ai jamais vue était dans le dernier appel pour le concours d' E / S Google où ils ont demandé de quoi il s'agissait pour une version particulière, pour voir si les candidats lisaient le rapport de diff API pour chaque version. Le concours avait aussi des problèmes de programmation, mais généralement quelques anecdotes qui pouvaient être notées automatiquement en premier pour réduire le nombre de soumissions à des montants raisonnables qui seraient plus faciles à vérifier.
la source
Dans la discipline de la reconnaissance vocale, les utilisateurs sont divisés en chèvres et moutons .
Par exemple, ici à la page 89 :
Peut-être, il est prévu de marquer les utilisateurs d'Android comme des chèvres à l'avenir pour pouvoir configurer le moteur de reconnaissance vocale pour les besoins des chèvres. ;-)
la source
Google aime beaucoup les chèvres et les œufs de Pâques à base de chèvre . Il y a même eu des articles précédents sur Stack Overflow à ce sujet .
Comme cela a été mentionné dans les articles précédents, il existe également dans le gestionnaire de tâches Chrome ( il est apparu pour la première fois dans la nature en 2009 ):
Et puis dans les versions Windows, Linux et Mac de Chrome début 2010 ). Le nombre de "chèvres téléportées" est en effet aléatoire :
Les autres références Google aux chèvres comprennent:
Pour autant que je sache, la première corrélation entre les chèvres et Google appartient au blog original "Tondre avec des chèvres".
Nous pouvons supposer en toute sécurité que ce n'est qu'un œuf de Pâques et qu'il n'a pas d'utilisation réelle, sauf pour le retour
false
.la source
À partir d'API 21 (le premier SDK Android 5.0 / Lollipop) , cela détecte si l' application Goat Simulator est installée:
Cela devrait indiquer clairement que la suggestion de Djechlin de l'utiliser comme un avertissement
if (false)
est une stratégie potentiellement désastreuse. Ce qui était précédemment retournéfalse
pour chaque appareil renvoie maintenant une valeur apparemment aléatoire: si cela a été enfoui suffisamment profondément dans votre code, cela pourrait prendre beaucoup de temps pour comprendre d'où viennent vos nouveaux bogues.Conclusion: si vous ne contrôlez pas la mise en œuvre d'une méthode et décidez de l'utiliser à des fins autres que celles indiquées dans la documentation de l'API, vous vous dirigez vers des ennuis.
la source
if(false)
en production? Viens ici. Si c'est à cela que ressemble votre code, ce changement d'implémentation est le moindre de vos problèmes.Il existe un appel similaire ,,
isUserAMonkey()
qui renvoie true si l' outil MonkeyRunner est utilisé. L'explication du SDK est tout aussi curieuse que celle-ci.Voici la source.
J'espère que cela a été ajouté en prévision d'un nouvel outil SDK nommé quelque chose avec une chèvre et sera en fait fonctionnel pour tester la présence de cet outil.
Voir également une question similaire, Fonction étrange dans ActivityManager: isUserAMonkey. Qu'est-ce que cela signifie, quelle est son utilisation? .
la source
ActivityManager
de signaler si elle a été invoquée par l'monkey
outil de test de stress ui, mais je ne l'ai jamais confirmé.Oeuf de Pâques drôle.
Dans la version Ubuntu de Chrome, dans le Gestionnaire des tâches ( shift+ esc), avec un clic droit, vous pouvez ajouter une colonne de science-fiction qui dans la version italienne est "Capre Teletrasportate" (Chèvres téléportées).
Une théorie amusante à ce sujet est ici .
la source
Ce n'est pas une blague intérieure
Apparemment, ce n'est qu'un vérificateur d'application pour Goat Simulator - par Coffee Stain Studios
Si vous avez installé Goat Simulator, vous êtes une chèvre. Si vous ne l'avez pas installé, vous n'êtes pas une chèvre.
J'imagine que c'était plutôt une expérience personnelle par l'un des développeurs, le plus susceptible de trouver des personnes ayant un intérêt commun.
la source