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


    Забегая вперед, хотелось бы обратить внимание на сумбурную ситуацию с победителем первого этапа конкурса. Победитель забрал 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-шечку можно отсюда

    Поделиться публикацией

    Комментарии 24

      0
      Сочувствую вашей ситуации
        +21
        Я тот самый разработчик, который публично обратился к команде Telegram. Принимал участие в первом этапе конкурса. И тоже был очень сильно разочарован качеством судейства. Настолько сильно, что аж не поленился составить упомянутое сравнение. Судейство, на мой взгляд, было крайне небрежным. И не только по отношению к моему приложению. Среди приложений, занявших 3-е место, были те, что не уступали победителю. На втором этапе, организаторы вроде-бы приняли определенные меры чтобы сделать судейство более объективным, но не знаю, получилось-ли… Не принимал участие во втором этапе. Ответов на свои вопросы от команды Telegram я тоже не получил (да и не особо надеялся).
          0
          Сочувствую вашей ситуации, но телеграмм не единственный в своем роде, такая же штука произошла с Vk Challenge — тоже бил сильно разочарован.
          +1
          Я тоже принимал участие причём в двух этапах.
          То что было сделано во втором этапе — публичный поиск багов не улучшил ситуацию, а ухудшил. Сам телеграмм не проверял приложения почти все время, а вся проверка по итогу свелась к 5 минутному запуску приложения. Оценка осталась также субъективной (особенно в плане скорости работы), и никак не учитывала те баги которые нашли другие участники — например приложение с многочисленными крашами попало на 3 место.

          Но в прочем — это их конкурс и они вправе делать что захотят.
            +18

            Автор, я искренне не хочу Вас расстраивать, но вот как выглядит ситуация со стороны — Вы прочитали условия конкурса, поняли их по-своему, определенным образом расставили приоритеты (на скорость и производительность) и в итоге гневно расстроились, что приоритеты были поставлены неверно. Разве в анонсе конкурса было написано что-то про FPS? Про 1000 и 1000000 точек? Это все было додумано… Вольные формулировки имеют место быть, но правильным было бы задать все уточняющие вопросы на берегу, а не свято верить в свою интерпретацию. По факту объективно получилось вообще не как на скриншоте, какие-то цветные квадраты; я даже не сразу понял, что они соответствуют кнопкам из требований. В конце концов подумайте о маркетинге, а-ля новостной пост "у нас победил Х с таким приложением" — не поймут же.
            Более того, реализация на NDK кмк не то, что хотели увидеть организаторы, иначе в таком случае можно было бы с тем же Qt поиграться, там контролы есть, которые в OpenGL рендерятся, всяко симпатичнее получилось бы.
            И последнее — конкурс штука такая, прежде чем участвовать, нужно понимать, что он может принести разочарование судейством, особенно субъективным. Это скорее относится к участникам, которых вы упоминали в статье. Опять же мое мнение — да, их прожевал сам конкурс, а Вас все же собственная уверенность в своей интерпретации.

              –2

              Позвольте с вами не согласиться :) Ниже приведу скрин условий первого этапа конкурса:


              Требования к юзабилити и гую появились уже потом, во втором этапе. Но нужно понимать, как появился второй этап. Если вкратце, то он плавно вытекал из первого этапа и основывался на результатах работы первого этапа конкурса

              +7
              Вы, извините, поныть пришли? Хоть бы какие-то технические детали показали вашего решения, почему именно оно должно было «порвать всех производительностью».

              Однако, с основным посылом согласен, некоторые участники первого этапа заслуживали большего, но ваше приложение из ряда вон выходящее. Оно вообще кое-как работает и выглядит ужасно.

              Задача-то — порвать всех производительностью, имея консистентное приложение, близкое к макету — конечно, это сложнее, чем накидать такой UI, как у вас.

              Вы выбрали лишь один критерий из нескольких перечисленных, а на все остальное забили, а теперь обижаетесь

              Однако, использовать Java UI и рендерить в overlay области OpenGL графику будет накладно, тут как минимум дадут просадку переключения контекстов. А мы ведь хотим порвать всех высокой производительностью. Так что Java UI отпадает, делаем ставку на performance, а на дизайн забиваем.
                –4

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

                +3
                Похожие «скандалы» еще были со времен конкурса на мессенжер для вконтакта, ничего удивительного
                  0
                  А исходники в открытом доступе есть?
                    0
                    Под iOS уже есть на github
                      0
                      Мне интересно посмотреть именно на Андройд с opengl
                    +6
                    График без осей и шкал — не график, а просто картинка. Отрисовка текста — это не тривиальная задача с точки зрения высокой производительности.
                      +4
                      Автор упустил один момент: вместе с макетами была гифка и подпись «This is a demo of how the chart app should work. It's made for JS, but the animations should be like this on all platforms». Понятно, что should != must, но кроме анимаций там и делать нечего. В чате то и дело все обсуждали реализацию этих самых анимаций и скидывали свои варианты. Даже если автор сразу не понял, что их надо бы сделать (а с ними и нетривиальные оси координат), то уж из тысяч сообщений, валившихся в чат можно было понять, что делают остальные и как минимум подвергнуть критике свою точку зрения. P.S. Сам участвовал, ничего не занял, но в моем случае все объективно)
                        –2

                        Да, была. Моя анимация графиков не соответствует той что на гифке, это правда.
                        Мой посыл как раз состоит в том, что бы показать, как правильно должна была делаться оценка приложений. Недочеты есть у всех. Мой случай самый маргинальный, дизайна нет от слова "совсем". Но зато все рендериться на хардваре.
                        Поэтому нужна была рейтинговая оценка приложений, через выставление баллов за все плюсы и минусы, которые есть в реализации приложения конкретного участника

                        0
                        Текст статьи слишком эмоциональный, и не соответствует публицистическому стилю.
                          +1
                          После того, как Telegram несколько лет назад громко объявил о крутом конкурсе для разработчиков ботов с фондом $1млн, а потом так и не подвёл бОльшую часть итогов и не выплатил обещанных сумм, я даже не знаю, что люди ожидали от нового конкурса.

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

                            Нет, это был не конкурс дизайнеров, задачи создать дизайн не стояло, была задача его реализовать. Более точно — создать работающий компонент в соответствии с макетами. То, что у вас на скринах показано, никак на это претендовать не может.

                            Рассыпанные по тексту смайлики, капс, «смешные» картинки и видео намекают, что он написан в основном на эмоциях от неудачи. Я могу посочувствовать, проигрывать неприятно, но подобный стиль мешает серьёзно воспринимать вашу критику судейства.
                              +2
                              По мне так даже 1 критерия достаточно, для того чтобы не пропустить во второй тур: отсутствие какого либо сглаживания на графиках. Ну серьезно, 2019 год, и отвратительные зазубренные линии.
                              Ну и фатальный недостаток еще: компонент должен интегрироваться в нативный UI, OpenGL контекст, с костюмными кнопками совершенно не к месту.
                                +3
                                Кхм…. Нигде не видно, что бы графики находились на одной общей «простыне» и скролились. Вместо этого мы видим отдельно нарисованные графики на одном экране. Тут возможно два варианта:

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

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


                                Позвольте с вами не согласиться. В описании первого этапа есть конкретный абзац с требованием.
                                image
                                  0

                                  Да, именно :)
                                  Но это условия первого этапа. А где такие же условия во втором этапе?
                                  И что такое "one screen? Трактовать это можно двояко. Для нивелирования "недопониманий" и существуют скетчи. А что у нас нарисовано на скетчах?

                                    0
                                    Требования к юзабилити и гую появились уже потом, во втором этапе. Но нужно понимать, как появился второй этап. Если вкратце, то он плавно вытекал из первого этапа и основывался на результатах работы первого этапа конкурса


                                    Но ведь вы сами пишите, что второй этап есть продолжение первого.
                                      0

                                      Имею ввиду то, что в первом этапе было выставлено сумбурное требование "one screen" рядом со скетчами, на которых и намека нету на сплошную "простыню" с группой графиков. Более того, условиями первого этапа было: скорость, производительность, размер приложения. Заметьте, ни слова о строгом соответствии дизайну. По этой причине, Телеграм по итогам первого этапа выпилил килотонну приложений которые не рисовали графики на одной, общей простыне. Были участники, которые все сделали по букве дизайна в первом этапе, но пролетели мимо, потому что не вытянули по производительности. И после, сделав оптимизацию своего кода уже во втором этапе, попали в топ 5. Но, были участники, которые сделали полную ставку на производительность изначально. Мое приложение самое маргинальное в этом плане, в нем сделано сознательное пренебрежение ко всему в пользу скорости. Однако доработать свое приложение во втором этапе, к новым требованиям "соответствие дизайну", как это некоторые сделали по отношению к производительности, в моем случае не представлялось возможным. Банально — объективно не хватало времени. Поэтому я продолжил действовать в том же направлении, которое было принято еще в первом этапе, просто для галочки, особо не надеясь выграть. Я понимал что мои шансы выиграть хоть что-то во втором этапе — 1 к 10. К слову, думать о написании этой статьи я еще начал до того как закончился второй этап конкурса :)
                                      Веселый троллинг по делу — неплохое развлечение

                                    0
                                    А чартов было 5 в итоге )) Кроме того, в 5 чарте было 4 графика, что могло означать, что все-таки нужно показывать на одном экране их, а не все 5 чартов (chart == график).

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                  Самое читаемое