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


  1. mikaakim
    14.05.2019 07:57

    Сочувствую вашей ситуации


  1. jackes
    14.05.2019 08:45
    +1

    Я тот самый разработчик, который публично обратился к команде Telegram. Принимал участие в первом этапе конкурса. И тоже был очень сильно разочарован качеством судейства. Настолько сильно, что аж не поленился составить упомянутое сравнение. Судейство, на мой взгляд, было крайне небрежным. И не только по отношению к моему приложению. Среди приложений, занявших 3-е место, были те, что не уступали победителю. На втором этапе, организаторы вроде-бы приняли определенные меры чтобы сделать судейство более объективным, но не знаю, получилось-ли… Не принимал участие во втором этапе. Ответов на свои вопросы от команды Telegram я тоже не получил (да и не особо надеялся).


    1. Sasd97
      14.05.2019 18:24

      Сочувствую вашей ситуации, но телеграмм не единственный в своем роде, такая же штука произошла с Vk Challenge — тоже бил сильно разочарован.


  1. ivlevAstef
    14.05.2019 10:02
    -1

    Я тоже принимал участие причём в двух этапах.
    То что было сделано во втором этапе — публичный поиск багов не улучшил ситуацию, а ухудшил. Сам телеграмм не проверял приложения почти все время, а вся проверка по итогу свелась к 5 минутному запуску приложения. Оценка осталась также субъективной (особенно в плане скорости работы), и никак не учитывала те баги которые нашли другие участники — например приложение с многочисленными крашами попало на 3 место.

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


  1. QtRoS
    14.05.2019 10:15
    +3

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


    1. Felin Автор
      14.05.2019 11:30
      -1

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


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


  1. allswell
    14.05.2019 10:48
    +4

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

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

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

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

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


    1. Felin Автор
      14.05.2019 11:46

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


  1. uncle_doc
    14.05.2019 11:20
    +2

    Похожие «скандалы» еще были со времен конкурса на мессенжер для вконтакта, ничего удивительного


  1. Viacheslav01
    14.05.2019 12:14

    А исходники в открытом доступе есть?


    1. varton86
      15.05.2019 07:16

      Под iOS уже есть на github


      1. Viacheslav01
        15.05.2019 08:40

        Мне интересно посмотреть именно на Андройд с opengl


  1. Finesse
    14.05.2019 14:38
    +1

    График без осей и шкал — не график, а просто картинка. Отрисовка текста — это не тривиальная задача с точки зрения высокой производительности.


  1. nikit_ozz
    14.05.2019 17:18
    +1

    Автор упустил один момент: вместе с макетами была гифка и подпись «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. Сам участвовал, ничего не занял, но в моем случае все объективно)


    1. Felin Автор
      14.05.2019 17:24

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


  1. ratijas
    14.05.2019 18:08

    Текст статьи слишком эмоциональный, и не соответствует публицистическому стилю.


  1. Enfriz
    14.05.2019 19:12

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

    Но в любом случае тут хотя бы что-то смотрели и что-то оценивали, это уже прогресс.


  1. deNULL
    14.05.2019 19:26
    +1

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

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

    Рассыпанные по тексту смайлики, капс, «смешные» картинки и видео намекают, что он написан в основном на эмоциях от неудачи. Я могу посочувствовать, проигрывать неприятно, но подобный стиль мешает серьёзно воспринимать вашу критику судейства.


  1. Error1024
    14.05.2019 23:07

    По мне так даже 1 критерия достаточно, для того чтобы не пропустить во второй тур: отсутствие какого либо сглаживания на графиках. Ну серьезно, 2019 год, и отвратительные зазубренные линии.
    Ну и фатальный недостаток еще: компонент должен интегрироваться в нативный UI, OpenGL контекст, с костюмными кнопками совершенно не к месту.


  1. Afganec
    15.05.2019 10:04

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

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

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


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


    1. Felin Автор
      15.05.2019 11:30

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


      1. Afganec
        15.05.2019 11:32

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


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


        1. Felin Автор
          16.05.2019 00:20

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


    1. varton86
      15.05.2019 15:15

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