[java] Android UserManager.isUserAGoat ()에 대한 적절한 사용 사례?

Android 4.2에 도입 된 새로운 API를보고있었습니다 . UserManager수업을 보면서 나는 다음과 같은 방법을 발견했습니다.

public boolean isUserAGoat()

이 통화를하는 사용자가 순간 이동을 받는지 여부를 결정하는 데 사용됩니다.

이 전화를 건 사용자가 염소인지 여부를 반환합니다.

언제 어떻게 사용해야합니까?



답변

그들의에서 소스 , 방법은 반환하는 데 사용 false이 API 21에서 변경 될 때까지.

/**
 * 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");
}

여기 소스변경 사항있습니다 .


답변

이것이 “공식적인”유스 케이스인지는 모르겠지만 다음은 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");
}

그래서 종종 코드 블록을 더미하는 가장 빠른 방법으로 바보 같은 유틸리티 메소드를 작성하고 디버깅을 완료 할 때 모든 호출을 찾습니다. 구현이 변경되지 않는 한 이것을 사용할 수 있습니다.

JLSif (false) 는 디버그 플래그에 대한 지원을 중단하는 특정한 이유, 즉 기본적으로이 유스 케이스 (h / t @auselen)에 도달 할 수없는 코드를 트리거하지 않는다고 지적합니다 . (예 static final boolean DEBUG = false;를 들어).

나는 대체 while를 위해 if더 애매한 유스 케이스를 생산. 나는 생각 이 행동, 이클립스처럼, 당신의 IDE를 여행 할 수 있지만 편집은 미래에 사년, 그리고 내가 함께 플레이 할 수있는 Eclipse 환경이 없습니다.


답변

이것은 Google의 내부 농담으로 보입니다. Chrome 작업 관리자에도 포함되어 있습니다. 재미를 찾는 일부 엔지니어 외에는 다른 목적이 없습니다. 당신이 원한다면 그것은 그 자체로 목적입니다.

  1. Chrome에서 Shift+로 작업 관리자를 엽니 다 Esc.
  2. 마우스 오른쪽 버튼을 클릭하여 Goats Teleported열 을 추가하십시오 .
  3. 궁금하다.

순간 이동 염소너무 많다는 거대한 크롬 버그 보고서 있습니다.

크롬

다음 Chromium 소스 코드 스 니펫HN 주석 에서 도난되었습니다 .

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


답변

@djechlin의 보완 대답 (! 그런데 좋은 답변을),이 함수를 호출 할 수있다 또한 일부 특정 반복 또는 예를 들어 특정 재귀 호출에 중지 할 때 IDE에 브레이크 포인트를 잡고 더미 코드로 사용 :

여기에 이미지 설명을 입력하십시오

isUserAGoat()IDE에서 경고로 표시되는 더미 변수 선언 대신 사용할 수 있으며 Eclipse의 경우 중단 점 표시를 막아 활성화 / 비활성화하기가 어렵습니다. 메소드가 규칙으로 사용되는 경우, 모든 호출은 나중에 일부 스크립트에 의해 필터링 될 수 있습니다 (커밋 단계 동안?).

여기에 이미지 설명을 입력하십시오

Google 직원은 Eclipse 사용자가 많기 때문에 (이 프로젝트는 Android 플러그인, GAE 등 Eclipse 플러그인으로 여러 프로젝트를 제공합니다) @djechlin 답변 과이 보완 답변은 (적어도 나에게는) 많은 의미가 있습니다.


답변

각 버전의 Android에는 재미있는 이름의 메소드 / 일정한 / 무엇이 있습니다.

내가 본 유일한 실용 사례는 마지막 버전의 Google I / O 콘테스트에서 특정 버전에 대한 것이 무엇인지 물어보고 참가자가 각 릴리스에 대한 API 차이 보고서를 읽었는지 확인하는 것입니다. 이 콘테스트에는 프로그래밍 문제도 있었지만 일반적으로 몇 가지 퀴즈는 자동으로 먼저 등급을 매겨 확인하기 쉬운 합리적인 금액으로 제출 횟수를 줄였습니다.


답변

음성 인식의 분야에서 사용자는 염소 으로 나뉩니다 .

예를 들어 여기 89 페이지에 있습니다 .

양은 음성 인식이 매우 잘 작동하는 사람들이고 염소는 매우 잘 작동하지 않는 사람들입니다. 음성 인식기 만 구분할 수 있습니다. 사람들은 누구의 목소리가 쉽게 인식되고 누구의 음성이 인식되지 않을지를 예측할 수 없습니다. 가장 좋은 정책은 모든 종류의 환경에서 모든 종류의 음성을 처리 할 수 ​​있도록 인터페이스를 디자인하는 것입니다.

아마도 염소의 요구에 맞게 음성 인식 엔진을 구성 할 수 있도록 향후 Android 사용자를 염소로 표시 할 계획입니다. 😉


답변

구글은 염소와 염소 기반 부활절 달걀을 진지하게 좋아합니다 . 심지어이 있었다 그것에 대해 이전 스택 오버플로 게시물 .

이전 게시물에서 언급했듯이 Chrome 작업 관리자에도 있습니다 ( 2009 년에 처음 등장했습니다 ).

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

그런 다음 Windows, Linux 및 Mac 버전의 Chrome 초기 2010 ). “염소 순간 이동”의 숫자는 실제로 무작위입니다 :

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

염소에 대한 다른 Google 참조는 다음과 같습니다.

염소와 Google의 초기 상관 관계는 내가 알 수있는 한 원래 “염소로 잔디 깎기”블로그 게시물에 속합니다.

우리는 이스터 에그 일 뿐이며을 반환하는 것 외에는 실제 사용이 없다고 가정 할 수 있습니다 false.