web-dev-qa-db-ja.com

Android UserManager.isUserAGoat()の正しい使用例

Android 4.2 で導入された新しいAPIを見ていました。 UserManager クラスを見ながら、私は次のような方法に遭遇しました。

public boolean isUserAGoat()

この電話をかけるユーザーがテレポーテーションの対象であるかどうかを判断するために使用されます。

この呼び出しを行っているユーザーがヤギであるかどうかを返します。

どのようにそしていつこれを使うべきですか?

3376
Ovidiu Latcu

それらのsourceから、API 21で変更されるまでfalseを返すために使用されていたメソッド。

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 * @return whether the user making this call is a goat 
 */
public boolean isUserAGoat() {
    return false;
}

このメソッドは開発者としては実際には役に立ちません。誰かがイースターエッグかもしれないと以前に述べました。

API 21では、パッケージcom.coffeestainstudios.goatsimulatorを持つインストール済みアプリがあるかどうかをチェックするように実装が変更されました

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 *
 * <p>As of {@link Android.os.Build.VERSION_CODES#Lollipop}, this method can
 * now automatically identify goats using advanced goat recognition technology.</p>
 *
 * @return Returns true if the user making this call is a goat.
 */
public boolean isUserAGoat() {
    return mContext.getPackageManager()
            .isPackageAvailable("com.coffeestainstudios.goatsimulator");
}

これが sourcechange です。

1623
meh

これが「正式な」ユースケースであるかどうかはわかりませんが、次のコードはJavaで警告を出します(returnステートメントと混在するとコンパイルエラーがさらに発生し、コードに到達できなくなります)。

while (1 == 2) { // Note that "if" is treated differently
    System.out.println("Unreachable code");
}

しかしこれは合法です:

while (isUserAGoat()) {
    System.out.println("Unreachable but determined at runtime, not at compile time");
}

だから私は自分自身がコードブロックをダミーアウトする最も早い方法のためにばかげたユーティリティメソッドを書いて、それからデバッグを完了する際にそれへの全ての呼び出しを見つけることをしばしば見つける。

_ jls _if (false)がデバッグフラグのサポートを壊すという具体的な理由、すなわち基本的にこのユースケース(h/t @auselen)のために "到達不可能なコード"を引き起こさないことを指摘します。 (static final boolean DEBUG = false;など).

私はwhileifに置き換え、より曖昧な使用例を作り出しました。 I believe Eclipseのように、この振る舞いであなたのIDEを立ち上げることができますが、この編集は4年後になるので、私はEclipse環境で遊ぶことができません。

945
djechlin

これは、Googleの内部の冗談のようです。 Google Chromeのタスクマネージャにも掲載されています。何人かのエンジニアがそれをおかしいと感じる以外に、それは目的がありません。あなたがそうするならば、それはそれ自身で目的です。

  1. Chromeで、[タスクマネージャ]を開きます。 Shift+Esc
  2. 右クリックしてGoats Teleported列を追加します。
  3. ワンダー。

あまりにも多くのテレポートされたヤギ についての巨大なChromiumバグレポートさえあります。

chrome

次のChromium ソースコードスニペット は、 HN コメントから盗まれたものです。

int TaskManagerModel::GetGoatsTeleported(int index) const {
  int seed = goat_salt_ * (index + 1);
  return (seed >> 16) & 255;
}
733
user479870

@djechlin answer (良い答え!)を補完するために、この関数呼び出しはalsoをダミーコードとして使用することもできます。特定の反復または特定の再帰呼び出しで停止する場合、IDEにブレークポイントを保持します。次に例を示します。

enter image description here

IDEに警告として表示されるダミー変数宣言の代わりにisUserAGoat()を使用できます。Eclipseの特定のケースでは、ブレークポイントマークが詰まり、有効化/無効化が困難になります。それ。メソッドが規則として使用される場合、すべての呼び出しは、後でスクリプトによってフィルタリングされる可能性があります(おそらく、コミットフェーズ中に?)。

enter image description here

Googleの人はEclipseのヘビーユーザーです(彼らは自分のプロジェクトのいくつかをEclipseプラグインとして提供します:Android SDK、GAEなど)。 )。

276
higuaro

Androidの各バージョンには、面白い名前付きメソッド/ constant/whateverがあります。 

私が今までに見た唯一の実用的な使用法は Google I/O コンテストのためのラストコールで、各リリースごとに競技者がAPI diffレポートを読むかどうかを確認するために特定のバージョンのものを尋ねました。コンテストにはプログラミング上の問題もありましたが、一般的に、応募数をチェックしやすい妥当な量にするために最初に自動的に採点される可能性があるいくつかのトリビアです。

130
Lance Nanek

音声認識の分野では、ユーザーは山羊に分けられます。 

例えば、ここで89ページ -

羊は音声認識が非常にうまく機能している人であり、山羊はそれが非常にうまく機能していない人です。音声認識機能だけが、それらを分離しているものを知っています。人々は誰の声が容易に認識され、誰の声が認識されないのかを予測することはできません。最良の方針は、あらゆる種類の環境であらゆる種類の音声を処理できるようにインターフェースを設計することです。

おそらく、ヤギのニーズに合わせて音声認識エンジンを構成できるように、将来的にはAndroidユーザーをヤギとしてマークすることを計画しています。 ;-)

119
rainer198

グーグルはヤギやヤギをベースにした イースターエッグ を好む。 以前のStack Overflowの投稿もありました 。 

これまでの記事で述べたように、それはChromeのタスクマネージャ内にも存在します( 2009年に初めて登場しました ):

<message name="IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN" desc="The goats teleported column">
    Goats Teleported
</message>

そして、2010年初頭にWindows、Linux、Mac版のChromeで )。 "Goats Teleported"の数は実際には ランダム :です。

 int TaskManagerModel::GetGoatsTeleported(int index) const {
     int seed = goat_salt_ * (index + 1);
     return (seed >> 16) & 255;
 }

ヤギへの他のグーグルの言及は以下を含みます:

ヤギとグーグルの最も早い相関関係は、私が言うことができる限り、オリジナルの「ヤギとの刈り取り」ブログ記事に属しています。

それは単にイースターエッグであり、falseを返すことを除いて、実世界では使用されていないと安全に想定することができます。

113
rickyduck

API 21(最初のAndroid 5.0/Lollipop SDK) 、これは、 Goat Simulator appがインストールされているかどうかを検出します。

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 *
 * <p>As of {@link Android.os.Build.VERSION_CODES#Lollipop}, this method can
 * now automatically identify goats using advanced goat recognition technology.</p>
 *
 * @return Returns true if the user making this call is a goat.
 */
public boolean isUserAGoat() {
    return mContext.getPackageManager()
            .isPackageAvailable("com.coffeestainstudios.goatsimulator");
}

これにより、 djechlinの示唆 警告のないif (false)としてそれを使用することは潜在的に悲惨な戦略であることが明らかになります。以前はすべてのデバイスに対してfalseを返していましたが、一見ランダムな値を返します。これがコードの奥深くに埋め込まれている場合、新しいバグの原因を突き止めるのにlongtime)かかります。

結論:メソッドの実装を制御せずにAPIドキュメントに記載されている以外の目的で使用することにした場合、問題が発生しています。

109
Mark Whitaker

MonkeyRunnerツール が使用されている場合にtrueを返す同様の呼び出しisUserAMonkey()があります。 SDKの説明は、これと同じくらい好奇心is盛です。

public static boolean isUserAMonkey(){}     

ユーザーインターフェースが現在サルに干渉されている場合、trueを返します。

ここ はソースです。

私はこれがヤギのある名前の新しい SDK ツールを見越して追加され、実際にの存在をテストするために機能することを期待していますそのツール。

同様の質問ActivityManagerの奇妙な関数:isUserAMonkeyも参照してください。これはどういう意味ですか、その使用法は何ですか?

103
KDEx

enter image description here

地球の最も遠い山には、私たち人間と同じように、現在電話を使用できるように見える高度な種のヤギがいます。

漏れた映像: youtu.be/YJwZMUn7GdQ

enter image description here

技術の進歩の最前線にとどまるために、グーグルはこれを発見し、彼らに支援を提供することを決定したにちがいない。

59
Sergio Carneiro

面白いイースターエッグ。
Ubuntu版のChromeでは、タスクマネージャ(shift+esc)、右クリックであなたはイタリア語版では "Capre Teletrasportate"(Teleported Goats)であることをSFの列を追加することができます。

それについての面白い理論は ここ です。

35
j.c

以下のソースコードを見てください。 

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 *
 * <p>As of {@link Android.os.Build.VERSION_CODES#Lollipop}, this method can
 * now automatically identify goats using advanced goat recognition technology.</p>
 *
 * @return Returns true if the user making this call is a goat.
 */
public boolean isUserAGoat() {
    return mContext.getPackageManager()
            .isPackageAvailable("com.coffeestainstudios.goatsimulator");
}
1
Koustuv Ganguly

これは冗談ではない どうやらそれは Goat Simulator - by Coffee Stain Studiosによる のアプリケーションチェッカーです

もしあなたがGoat Simulatorをインストールしていれば、それはあなたのGoatです。あなたがそれをインストールしていなければ、あなたはやぎではありません。

私はそれが開発者のうちの1人による個人的な実験、おそらく共通の興味を持っている人々を見つけるための社会的な実験であることを想像します。

0
Zillinium