java - حالات الاستخدام السليم لالروبوت UserManager.isUserAGoat ()؟


كنت أبحث في واجهات برمجة التطبيقات الجديدة التي أدخلت في الروبوت 4.2 . أثناء النظر في فئة UserManager جئت عبر الطريقة التالية:

 public boolean isUserAGoat()

تستخدم لتحديد ما إذا كان المستخدم الذي يجري هذه المكالمة خاضعا لعمليات النقل عن بعد.

لعرض ما إذا كان المستخدم الذي أجرى هذه المكالمة هو الماعز.

كيف ومتى ينبغي استخدام هذا؟




Answers


من مصدرها ، الطريقة المستخدمة للعودة false حتى تم تغييرها في أبي 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;
}

يبدو أن هذه الطريقة ليس لها استخدام حقيقي بالنسبة لنا كمطورين. وقد ذكر شخص ما في وقت سابق أنه قد يكون بيضة عيد الفصح .

في أبي 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");
}

هنا هو الرابط المصدر




لا أعرف إذا كان هذا هو "حالة الاستخدام الرسمية ولكن ما يلي ينتج تحذيرا في جافا (التي يمكن أن تنتج المزيد من الأخطاء تجميع إذا مختلطة مع بيانات return ، مما يؤدي إلى رمز لا يمكن الوصول إليها):

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

ولكن هذا أمر قانوني:

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

لذلك غالبا ما أجد نفسي كتابة طريقة فائدة سخيفة لأسرع طريقة لدمية من كتلة التعليمات البرمجية، ثم في استكمال التصحيح تجد جميع المكالمات لذلك، لذلك شريطة أن لا يغير تنفيذ هذا يمكن استخدامها لذلك.

يشير جلس إلى if (false) لا يؤدي إلى "رمز لا يمكن الوصول إليه" لسبب محدد أن هذا من شأنه كسر الدعم للأعلام التصحيح أي أساسا هذه الحالة استخدام (h / tauselen). ( static final boolean DEBUG = false; على سبيل المثال). أنا استبدال while if ، إنتاج حالة استخدام أكثر غموضا. أعتقد أنك يمكن أن تصل رحلة إيد الخاص بك، مثل الكسوف، مع هذا السلوك، ولكن هذا التعديل هو 4 سنوات في المستقبل وليس لدي بيئة الكسوف للعب مع.




يبدو أن هذه مزحة داخلية في غوغل. كما أنها تظهر في مدير مهام غوغل كروم. ليس له أي غرض، بخلاف بعض المهندسين يجدونه مسليا. وهو هدف في حد ذاته، إذا كنت سوف.

  1. في كروم، افتح إدارة المهام باستخدام شيفت + إيسك .
  2. انقر بزر الماوس الأيمن لإضافة عمود Goats Teleported .
  3. يتساءل.

حتى أن هناك تقرير علة كروميوم ضخمة حول الكثير من الماعز تيليبورتيد .

تم سرقة مقتطف شفرة مصدر كروميوم التالي من تعليقات هن .

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



واستكمال إجابة دجكلين ( إجابة جيدة بالمناسبة!)، يمكن استخدام استدعاء الدالة أيضا كشفرة وهمية لعقد نقطة توقف في إيد عندما تريد إيقافها في بعض التكرار المحدد أو مكالمة عودية معينة، على سبيل المثال:

يمكن استخدام isUserAGoat() بدلا من إعلان متغير وهمية التي سيتم عرضها في إيد كتحذير، وفي حالة إكليبس معينة، سوف تسد علامة نقطة التوقف، مما يجعل من الصعب تمكين / تعطيله. إذا تم استخدام الطريقة كاتفاقية، يمكن تصفية جميع الاستدعاءات في وقت لاحق من قبل بعض السيناريو (أثناء مرحلة الالتزام ربما؟).

جوجل الرجال هم الكسوف الثقيلة المستخدمين (أنها توفر العديد من مشاريعها كما إكليبس الإضافات: الروبوت سك، غاي، الخ)، وبالتالي فإن الرد على دجكلين وهذا الجواب التكميلي جعل الكثير من المعنى (على الأقل بالنسبة لي).




هناك طريقة اسمه مضحك / ثابت / أيا كان في كل إصدار من الروبوت.

وكان الاستخدام العملي الوحيد الذي رأيته من أي وقت مضى في الدعوة الأخيرة لمسابقة I / O غوغل حيث سألوا ما كان لنسخة معينة، لمعرفة ما إذا كان المتسابقين قراءة تقرير أبي ديف لكل إصدار. كان للمسابقة مشاكل البرمجة أيضا، ولكن عموما بعض التوافه التي يمكن أن تدرج تلقائيا أولا للحصول على عدد من الطلبات إلى كميات معقولة من شأنها أن تكون أسهل للتحقق.




جوجل تروق جدي للماعز والماعز بيض عيد الفصح . كان هناك حتى المشاركات السابقة المكدس تجاوز حول هذا الموضوع .

كما ذكر في الوظائف السابقة، فإنه موجود أيضا داخل إدارة المهام كروم ( ظهرت لأول مرة في البرية في عام 2009 ):

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

ثم في إصدارات ويندوز و لينوكس و ماك من كروم أوائل 2010 ). عدد "الماعز تيليبورتيد" هو في الواقع عشوائي :

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

تتضمن مراجع غوغل الأخرى للماعز ما يلي:

أقرب ارتباط من الماعز و غوغل ينتمي في الأصل "القص مع الماعز" آخر بلوق، بقدر ما أستطيع أن أقول.

يمكننا أن نفترض بأمان أنها مجرد بيضة عيد الفصح وليس لديها استخدام العالم الحقيقي، باستثناء العودة false .




في الانضباط التعرف على الكلام، وتنقسم المستخدمين إلى الماعز والأغنام .

على سبيل المثال هنا في الصفحة 89 .

الأغنام هم الناس الذين التعرف على الكلام يعمل بشكل استثنائي بشكل جيد، والماعز هم الناس الذين يعمل بشكل سيء للغاية. فقط التعرف على الصوت يعرف ما يفصل بينهما. فالناس لا يستطيعون التنبؤ بصوتهم الذي سيعترف به بسهولة ولن يكون له. أفضل سياسة هي تصميم واجهة بحيث يمكن التعامل مع جميع أنواع الأصوات في جميع أنواع البيئات

ربما، فمن المخطط للاحتفال مستخدمي أندرويد كما الماعز في المستقبل لتكون قادرة على تكوين محرك التعرف على الكلام لاحتياجات الماعز. ؛-)




اعتبارا من أبي 21 (أول الروبوت 5.0 / المصاصة سك) ، وهذا يكتشف ما إذا كان يتم تثبيت التطبيق محاكي الماعز :

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

وهذا من شأنه أن يوضح أن اقتراح دجكلين باستخدامه كخيار تحريري if (false) هو استراتيجية كارثية محتملة. ما عاد سابقا false لكل جهاز الآن إرجاع قيمة تبدو عشوائية: إذا كان هذا دفن عميق بما فيه الكفاية في التعليمات البرمجية الخاصة بك قد يستغرق وقتا طويلا لمعرفة أين تأتي البق الجديدة الخاصة بك من.

خلاصة القول: إذا كنت لا تتحكم في تنفيذ أسلوب وتقرر استخدامه لأغراض غير المذكورة في وثائق واجهة برمجة التطبيقات، فأنت تتجه إلى مشكلة.




هناك دعوة مماثلة، isUserAMonkey() ، التي ترجع صحيح إذا كان يتم استخدام الأداة مونكيرونر . تفسير سك هو مجرد فضول مثل هذا واحد.

public static boolean isUserAMonkey(){}     

لعرض true إذا كان أحد القرود يعترض حاليا على واجهة المستخدم.

هنا هو المصدر.

وأتوقع أن أضيف هذا تحسبا لأداة سك جديدة اسمه شيء مع الماعز وسوف تكون في الواقع وظيفية لاختبار وجود تلك الأداة.

انظر أيضا سؤال مماثل، وظيفة غريبة في أكتيفيتيماناجر: إيسوسرامونكي. ماذا يعني هذا، ما هو استخدامه؟ .




في الجبال النائية من هذا الكوكب، يكمن الأنواع المتقدمة من الماعز التي يبدو أنها قادرة حاليا على استخدام الهواتف، تماما مثلنا البشر!

لقطات مسربة: youtu.be/YJwZMUn7GdQ

كان يجب على غوغل اكتشاف ذلك وقرر تقديم الدعم لهم، في محاولة للبقاء في خط المواجهة للتقدم التكنولوجي.




بيض عيد الفصح مضحك.
في إصدار أوبونتو من كروم، في إدارة المهام ( شيفت + إيسك )، مع النقر بزر الماوس الأيمن يمكنك إضافة عمود الخيال العلمي التي في النسخة الإيطالية هو "كابري تيليتسبورتيت" (الماعز تيليبورتيد).

نظرية مضحكة حول هذا الموضوع هنا .