Принимаем участие в недавнем Telegram Contest, пишем крутое OpenGL ES приложение и выигрываем ничего

yej4nzl_3ff2bslafaeyzo7i_98.jpeg

Забегая вперед, хотелось бы обратить внимание на сумбурную ситуацию с победителем первого этапа конкурса. Победитель забрал 50К американских президентов. НО, был как минимум, еще один разработчик, который написал идентичное приложение и не был никак вознагражден. Он даже последнего места не занял. Этот разработчик публично, через свой сайт — https://tgcontest.braychuk.com/, обратился к команде Telegram с вопросами. Если кто-нибудь, что-нибудь знает об этом, напишите пожалуйста в комментариях.

Итак, приступим.

Как вы знаете, недавно, Telegram разослал всем своим пользователям прямое сообщение о том, что он собирается провести соревнование по программированию.

«Как круто», — подумал я.
Ну-ка, почитаем условия Android конкурса:

И что мы там видим, — «Главным критерием является скорость и производительность». Отлично! Не это ли любят многие программисты, задачи оптимизации? Я просто их обожаю. Итак, решение участвовать в конкурсе принято, осталось определиться с подходом к реализации. Ясно одно, нужно подойти к решению проблемы производительности основательно и фундаментально. Так, чтобы порвать если не всех, то хотя бы большинство. Поскольку еще одним критерием конкурса, меньшим конечно по рангу чем производительность, было соблюдение дизайна UI, то нам, скорее всего, нужно крутиться вокруг Java UI, использовать стандартные контролы, которые фигурируют в дизайнерском скетче. Однако, использовать Java UI и рендерить в overlay области OpenGL графику будет накладно, тут как минимум дадут просадку переключения контекстов. А мы ведь хотим порвать всех высокой производительностью. Так что Java UI отпадает, делаем ставку на performance, а на дизайн забиваем. Пускай им дизайнеры занимаются, мы — гордые программисты :). Решение очевидно — использовать полноэкранный OpenGL, vertex shader, а весь код написать на NDK / C++. Т.е. нам всего-то нужно написать графический движок / рендер, который обычно пишут для мобильных игр, для того что бы просто нарисовать графики Telegram.
Да, я знаю, я ненормальный :)

Есть один большой минус у данного подхода — нам нужно будет написать все UI элементы и прописать интерактивность для них, что съест большой кусок времени. Поэтому остановимся на самой простой UI реализации: пишем простые UI интерактивные виджеты, которые способны определять нажатие на самих себя и делать это в динамике (при перемещении по экрану, в realtime).
Получилось примерно следующее:

Собственно, все вышеизложенное было реализовано в двух недельный срок, в свободное от офисной работы время, с бессонными ночами, разумеется.
Что делает Telegram? Полностью выпиливает мое приложение из конкурса с формулировкой, — «Несоответствие дизайну, отображение графиков на одном экране».

ШТА?

Наверное, я изначально ошибся конкурсом :) Получается, это НЕ КОНКУРС РАЗРАБОТЧИКОВ, которые могут показать уровень своих компетенций через реализацию высокопроизводительных приложений / алгоритмов, а скорее КОНКУРС ДИЗАЙНЕРОВ? Или это максимум конкурс UI девелоперов, которые способны пользоваться стандартными средствами UI-проектирования, а так же попрогать в canvas на этом же UI?

Ладно, фиг с ним, с дизайном. Не спорю, несоответствие есть :). А что там насчёт формулировки, — «отображение графиков на одном экране»? А вот это уже интересно.
Если посмотреть в условия конкурса, то мы не увидим там подобных требований от слова «совсем». Так, не может быть. Значит я где-то ошибся. Telegram строго следует своим дизайнерским скетчам и строго блюдёт их. Значит это требование «визуально» должно быть отображено в этих же скетчах.
Смотрим на скетчи:

Кхм…. Нигде не видно, что бы графики находились на одной общей «простыне» и скролились. Вместо этого мы видим отдельно нарисованные графики на одном экране. Тут возможно два варианта:


  1. Все графики действительно находятся на одной, общей простыне и скролятся, но просто это визуально не показали на скетчах и всего на-всего не прописали явно в условиях соревнования
  2. Графики каким-то образом переключаются. Каким образом не указано, а значит это «умолчание» и соответственно отдано на откуп разработчику. Он может реализовать это по своему усмотрению

В общем, команда Telegram, научитесь писать ТЗ, это вам еще пригодится ;). Серьезно.


Оценка производительности

Из вышеизложенного следует — мое приложение не дожило до оценки производительности. Но все же. Как Телега оценивает производительность?
Это выглядит так, — «Мы протестировали ваше приложение на СТАРЫХ девайсах и оно работает менее плавно в сравнении с остальными».

ШТА?

Telegram, где цифры? Сводные таблицы тестов, сравнение с другими приложениями на основе объективных данных выраженных в числовом эквиваленте?
Это должно было выглядеть так:


  1. Мы взяли ваше приложение, запустили его на 1000 исходных точек нашего графика, потом на 10 000, далее на 100 000 и на 1 000 000, получили вот такие цифры FPS
  2. За достигнутую производительность ваше приложение получило плюс столько-то баллов
  3. За несоответствие дизайну и важной для нас хрени ваше приложение получило минус столько-то баллов
  4. В итоге, суммарно, ваше приложение набрало N баллов
  5. И в результате, ваше приложение K-ое в таблице общих результатов

Данный подход в оценке чего-либо — само собой разумеющееся для любого профессионала. Наверное, Telegram так же оценивает качество своих алгоритмов аудио связи? На слух? Не удивительно тогда почему оно до сих пор оставляет желать лучшего. Мои американские коллеги, в подобных случаях любят говорить, — «It«s pain in ass». Тем не менее, справедливо будет отметить, я был гораздо лучшего мнения о команде Telegram в целом.


Оценка стабильности приложений

И финалочка.
Как же Телега оценивает стабильность приложений? Ведь по этому критерию Телега выпилила целую ТОННУ приложений из конкурса. На минуточку, обращу ваше внимание, что критерий стабильности в условии конкурса «Stage 2» не значится от слова «совсем».

Но тем не менее. Выпиливают они приложения с шаблонной формулировкой, — «Мы запустили ваше приложение на нескольких девайсах. На девайсе K и M оно крашнулось»

Стесняюсь спросить, —, а где список линейки девайсов, на которых вы собрались тестировать конкурсные приложения? Этот список должен был быть публичным, что бы все участники соревнования знали о нем заранее. Иначе кто даст гарантию, что если одно приложение из 10 крашнулось на одном девайсе из 5, то оно менее стабильно работает чем все оставшиеся приложения, которые не «упали»? А что если я возьму эти 9 приложений и запущу их на других 5 девайсах, на которых они будут крашиться все, а то одно нет? Как вам такой кейс? Как в таком случае Telegram будет оценивать стабильность всех 10 приложений?
Таким образом, тут допущена классическая ОШИБКА ВЫЖИВШЕГО.
Аплодируем Telegram, занавес….


Заключение патологоанатома

Таким образом заключаем, что данный конкурс — это финансово-продуктовая пирамида, Наедалово —


И к сожалению, eсть много участников конкурса, которые также не понимают, как и почему они заняли то или иное место, либо не заняли его вовсе. Конечно, жалко потраченного времени и сил. Но все сожаления были бы нивелированы, если бы конкурс был открытым и прозрачным.

Спасибо за внимание!

P.S.
Скачать apk-шечку можно отсюда

© Habrahabr.ru