Дайджест интересных материалов для мобильного разработчика #272 (24 сентября— 30сентября)

В новом дайджесте 10 лет первому Android-смартфону, правильная анимация, Flutter и React Native, самые эффективные рекламные сети для приложений, заработки iOS и Android. Добро пожаловать!

Полное руководство по правильному использованию анимации в UX

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

10 лет Android: вспомнить всё

Десять лет назад, 23 сентября 2008-го, состоялся релиз Android 1.0 и был представлен самый первый андроидфон HTC Dream. Сейчас Android — ОС с самой большой пользовательской базой в мире, а тогда всё это выглядело проектом, который легко может провалиться.

Дайджест доступен и в виде рассылки. Подписаться вы можете тут.

iOS

(+12) Обход SSL Pinning в iOS-приложении
(+11) Автоматизируем сборку iOS приложений с помощью Fastlane
(+10) История одного вью-контроллера, который хотел показываться красиво
В TestFlight упростили работу с тестерами
Apple и Salesforce объединяют возможности устройств и CRM
image Создание чата в реальном времени с Scaledrone
image Marzipan: портирование iOS-приложений на Mac
image Создаем UI в iOS-приложении программно
image История одного реджекта в App Store
image InputBarAccessoryView: простая настраиваемая панель ввода с автодополнением
image BulletinBoard: контекстная карточка внизу экрана
image SubtleVolume: регулятор громкости

Android

(+23) Flutter для Android-разработчиков. Как создавать UI для Activity, используя Flutter
(+10) Реализация BottomAppBar. Часть 3: Поведения для Android
(+8) Машинка на Arduino, управляемая Android-устройством по Bluetooth
image Android Dev Подкаст. Выпуск 75. Новости об осенних релизах, либах и девфестах
image Простое добавление Nested Recycler View
image Пишем эмулятор NES для Android – оптимизация
image Вышла Android Studio 3.2
image Стабильный релиз AndroidX
image 7 новых инструментов и плагинов для Android-разработчиков и дизайнеров
image Новая навигация в приложениях Android
image Android Studio: MVVM и один источник правды
image Оптимизация векторных изображений в Android
image MaterialDrawerKt: теперь с AndroidX

Разработка

(+41) Тест Android vs iOS: два полюса силы
(+41) С обеих сторон баррикад: про найм разработчиков мобильных приложений
(+32) Карты из шестиугольников в Unity: части 1-3
(+27) Как мы отлаживаем в браузере самописный ECS на игровом сервере
(+24) Топ-10 докладов Mobius 2018 Piter
(+10) Управление состоянием в приложениях на Flutter
(+10) В топку MVPs, внедряем MVPr (минимальный жизнеспособный прототип)
(+9) Место, где живет звук
(+9) Геймдизайн в жизнь. Экономика игры (Часть I)
(+8) Распознавание экомаркировок с использованием Azure Custom Vision из мобильного приложения
(+6) Дизайн-процесс, исследования и поиск работы
Scorocode получил инвестиции “Сколково”
Snapchat сделал визуальный поиск товаров в Amazon
Mail.Ru Cloud Solutions запустила облачные СУБД
image UX case study: маркетплейс Carousell
image Топ-5 трендов в дополненной реальности 2019
image Как получить венчурное финансирование для прототипа мобильного приложения
image Как Riot Games справляется с долгом данных
image Как сделать непрошеный редизайн, который понравится людям
image Стать дизайнером, ориентированным на данные
image Лучшие советы для создания качественного приложения на React Native
image 50+ структур данных и алгоритмов в интервью программиста
image Инструменты для разработки на Apache Cordova
image Пишем микротекст: большое влияние маленьких слов

Аналитика, маркетинг и монетизация

(+10) Как геймификация улучшает пользовательский опыт
Как обойтись без онбординга
Performance Index VII от AppsFlyer: рейтинг самых успешных рекламных сетей
Продажи со смартфонов в России выросли на 79%
Какая платформа принесет вам больше денег — iOS или Android?
image Почему McDonalds и Starbucks ставят все на мобильные приложения
image Как сделать успешное мобильное приложение: пошаговое руководство

AI, Устройства, IoT

(+65) Как машинное обучение помогло мне понять некоторые аспекты раннего развития детей
(+60) Губозакаточная машинка для этикеток — разворачиваем цилиндрическое искажение программно
(+52) Как поступить на PhD программу по машинному обучению
(+34) Мобильный сторож на Raspberry pi (h.264)
(+18) Программное обеспечение для умного дома #2
(+9) AI, практический курс. Глубокое обучение для генерации музыки
(+6) Искусственный интеллект в реальном мире
IBM Watson будет помогать фермерам
image Как сделать свой компьютер для глубинного обучения в 10 раз дешевле AWS
image Топ-10 фреймворков для машинного обучения

< Предыдущий дайджест. Если у вас есть другие интересные материалы или вы нашли ошибку — пришлите, пожалуйста, в почту.


ссылка на оригинал статьи https://habr.com/post/424901/

Что послушать про аудиотехнику: 15 подкастов

Подкасты — один из наших любимых форматов, и с ростом популярности платформ с голосовым управлением и помощников вроде Алисы он начинает возвращать к себе внимание аудитории.

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


Фото Sascha Kohlmann / CC

Звук

[iTunes] [Веб-версия]

Это — русскоязычный подкаст о звуке, High End и Hi-Fi-оборудовании, виниле и аудиоформатах. Он выходит с 2013 года. На сегодняшний день записано 43 выпуска. В этой передаче эксперты простыми словами объясняют технические особенности аудиосистем и обсуждают неоднозначные вопросы из мира технологий, знакомят слушателей с новыми разработками и историей брендов.

На Хабре есть текстовые транскрипты наиболее интересных выпусков подкаста. Они отсортированы по темам, что поможет быстро сориентироваться и составить свое представление о «Звуке».


AmateurLogic.TV

[iTunes] [Веб-версия]

Подкаст создан звукоинженером Джорджем Томасом (George Thomas) и разработчиком Томми Мартином (Tommy Martin). Шоу посвящено радиотехнологиям и выходит несколько раз в месяц.

Первый выпуск программы состоялся 13 лет назад, вскоре после урагана «Катрина», и был посвящён аварийным источникам питания. Ведущие затрагивают широкий диапазон тем — от звуковых артефактов до Raspberry Pi.


Beginner audiophile

[iTunes] [Веб-версия]

Как подсказывает название, основная аудитория этого подкаста — начинающие меломаны. Ведущие рассказывают о бюджетной аудиотехнике и дают рекомендации по выбору оборудования. В одном из недавних выпусков обсуждались новинки выставки CanJam Show, которая специализируется на портативном аудио. За полтора года существования вышло 27 выпусков. Судя по рейтингу в iTunes и положительным отзывам на реддите, популярность подкаста будет только расти.


What Hi-Fi?

[iTunes] [SoundCloud]

Журнал об аудио и видео What Hi-Fi? выходит с 1976 года. Одноименный подкаст — это дочерний проект знаменитого издания. Проект сравнительно молодой, первый выпуск появился только в мае этого года. Ведущие уже успели обсудить новинки в сфере Hi-Fi и особенности «умной» колонки от Apple, а также сделать обзор нескольких наушников.


Darko.Audio

[iTunes] [SoundCloud]

Обзор новостей мира аудио и доступного Hi-Fi-оборудования для тех, кто «стремится к лучшему качеству звука и любит думать». Эфирное время в основном занимает обсуждение аудиотехники и музыкальных форматов. Сами ведущие считают лучшим выпуск, посвящённый методам стриминга музыкального контента и соответствующим сервисам.


The Tone Control

[iTunes] [Веб-версия]

Этот подкаст существует благодаря звукорежиссеру Джастину Ньютону (Justin Newton) и гитаристу Дереку Хайдеману (Derek Heidemann). Ведущие рассказывают о гитарах, новом и винтажном оборудовании, звукозаписи и написании музыки. Подкаст поможет не только ближе познакомиться с характеристиками и возможностями усилителей и гитарных педалей, но и сориентироваться в выборе инструмента. «Космические» гитары Gibson и банкротство компании, гибрид Телекастера и Джазмастера Fender Meteora — вот примеры обсуждаемых тем. Ведущие регулярно делают обзоры гитар и сопутствующей техники. Подкаст выходит два раза в неделю.


AES

[iTunes] [Веб-версия]

Американская организация AES (Audio Engineering Society) с 1948 года разрабатывает, пересматривает и публикует стандарты для аудио и смежных отраслей. Также она выпускает полноценный научный журнал. Подкаст служит приложением к этому журналу. В каждом выпуске кратко (около 7 минут) рассказывается о темах нового номера.


Фото florantevaldez / PD

The Occasional Podcast

[iTunes] [Player.fm]

Подкаст редактора изданий Part-Time Audiophile и The Occasional Magazine. Большинство выпусков названы в честь приглашённых гостей. Среди них — звукорежиссеры, инженеры и дизайнеры.

В последних сериях обсуждаются секреты успеха на рынке аудио и современные тренды в дизайне наушников. Пятый выпуск шоу был записан непосредственно в офисе легендарных Manley Labs. Один из основателей компании провёл ведущих по фабрике, обсудил с ними нюансы разработки усилителей и рассказал про то, как организует свой рабочий процесс.


AV Rant

[iTunes] [Веб-версия]

Этот подкаст похож на развлекательную утреннюю радиопередачу. Тем не менее, в каждом выпуске можно найти что-то полезное. Ведущие и их гости дают советы по выбору компонентов домашнего кинотеатра, проекторов, сабвуферов и другого оборудования.

Подкаст ведут бывший рецензент Audioholics Том Эндри (Tom Andry) и Роб (Rob H.) — специалист по профессиональному AV-оборудованию. В основном выпуски построены в формате «вопрос-ответ». Слушатели задают вопросы о домашних аудиосистемах и спрашивают, на что обратить внимание при покупке техники. В описании каждого выпуска на сайте шоу есть тайм-коды.

Еженедельные эпизоды длятся около двух часов.


AVForums

[Player.fm] [Веб-версия]

Подкаст известного в индустрии интернет-сообщества, посвящённого аудио- и видеоэлектронике. Ведущие рассказывают об особенностях домашних кинотеатров и звуковом оборудовании. Как следует из названия, подкаст не ограничивается разговорами об аудио. В одном из последних эпизодов был обзор блокбастера «Миссия невыполнима: Последствия».

Отдельное внимание уделяется тестированию. За время существования подкаста ведущие проверили качество работы наушников JBL, усилителей Arcam, проекторов BenQ и другой аудиотехники. Кроме этого, в некоторых выпусках встречаются интересные подборки, например лучших OLED-телевизоров. Каждый выпуск длится около 90 минут.


Avexcel

[iTunes] [Веб-версия]

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


Ohms Law

[iTunes] [Веб-версия]

Этот подкаст можно отнести к категории научно-популярных.

Сооснователь PS Audio Пол Макгован (Paul McGowan) рассказывает об аудиоустройствах, звуке, музыке и ее воспроизведении. В подкасте он делится своим более чем 40-летним опытом работы на рынке звукового оборудования. Его компания производила все — от компонентов виниловых аудиосистем до современной Hi-End-аппаратуры.

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


Head-Fi

[iTunes] [Player.fm]

Подкаст одноимённого интернет-сообщества, посвящённого персональному и портативному аудио. За время существования подкаста — с 2007 по 2016 — было выпущено более 80 эпизодов.

Одним из первых гостей программы стал известный реставратор аналоговых записей Стив Хоффман (Steve Hoffman). Помимо интервью, ведущие делятся новостями индустрии и обозревают аудиотехнику. Например, один из выпусков посвящен устройству внутриканальных мониторов.


Home Theater Geeks

[iTunes] [Player.fm]

Ведущий подкаста — профессиональный музыкант и редактор портала AVS Forum Скотт Уилкинсон (Scott Wilkinson). Он беседует с лидерами в области домашних кинотеатров и звукового оборудования. Гостем одного из последних выпусков стал специалист по портативному звуку Тилл Хертсенс (Tyll Hertsens), который ответил на вопросы слушателей про выбор наушников.

Хоть передача и перестала выходить, все 373 эпизода все еще доступны в формате подкаста.


SoundGuys Podcast

[iTunes] [Веб-версия]

Научно-популярный подкаст одноимённого интернет-издания, посвященного наушникам и динамикам. Ведущие с юмором обсуждают самые разнообразные аспекты аудио.

Вам расскажут про историю формата MP3, особенности прослушивания музыки на смартфоне и влияние музыки на наши потребительские привычки. Каждый эпизод длится около 20 минут.


Мы в Telegram — о звуке и аудиогаджетах в микроформате:

Как зазвучали Звездные войны
С чего начать выбор домашней акустики?


О чем еще мы пишем на Хабре:


ссылка на оригинал статьи https://habr.com/post/424899/

Умелец создал WiFi-модуль для Macintosh SE/30, модели 1989 года

Многие гики занимаются модификацией устаревших или и вовсе почти античных устройств, которые когда-то были популярными, но ушли в небытие из-за стремительности технического прогресса. Одним из таких устройств стала система от Apple, Macintosh SE/30. Некоторые его называют лучшим компьютером из когда-либо созданных корпорацией.

И действительно, возможности системы (о них немного ниже) поражали воображение современников. Так, 30 лет назад этот компьютер поддерживал объем оперативной памяти в 128 МБ. Из-за своих возможностей система настолько полюбилась пользователям, что многие ее поклонники не забрасывали морально и физически устаревший компьютер, а продолжали работать с ним. Правда, большинство современных рабочих задач с его помощь решать нельзя, но зато можно экспериментировать с железом.

Умельцы расширяли возможности системы при помощи различных ухищрений, а сейчас к Macintosh SE/30 добавили WiFi. Сделано это не при помощи «малинки», а посредством созданного бриджа Ethernet-tо-WiFi. После подключения модуля к Danaport Ethernet удалось «научить» старый компьютер видеть беспроводные сети новейшего времени.

Собственно, добавление WiF к старому ПК не является чем-то жутко новым — раньше такое уже делали, хотя и при помощи Raspberry. Сейчас ситуация отличает — мастер разработал практически нативный WiFi модуль, который без проблем работает в среде старой операционной системы на машине, которой исполнилось 30 лет.

Естественно, для того, чтобы WiFi появился, нужен соответствующий драйвер и софт. Пользователь с ником [ants] смог написать и то, и другое (GitHub).

Проблема с карточкой Vonets WiFi в том, что ее нужно настраивать из браузера. Но поскольку современные браузеры на старых «маках» не работают, приходится искать выход. В текущем случае было разработано расширение, которое проводит автонастройку карты Vonets. Принцип работы расширения похож на принцип работы модулей, которые отвечают за настройку WiFi в современных «маках», причем даже в панели инструментов появляется иконка беспроводной сети.

Конечно, сам проект сделан просто для фана, ведь какие новые функции и возможности может добавить беспроводная сеть в компьютере 30-летней давности? Практически, никаких. Возможно, некоторые страницы сможет открывать iCab, но даже стартовая страница Google будет открываться чрезвычайно медленно. Более того, HTTPS работать не будет, так же, как и Javascript.

Так что открывать получится лишь самые простые страницы, возможно, те, которые разработаны для воссоздания атмосферы интернета 90-х. Пример такой странички можно найти здесь.

Что касается Macintosh SE/30, то это персональный компьютер, который был разработан компанией Apple Computer Inc и продавался с 1989 года по 1991. Это самая быстрая модель в ряду оригинальных черно-белых «Макинтошей». У этой модели был черно-белый монитор, а также поддержка сторонних ускорителей, сетевых карт и дисплейных адаптеров.

Официально он поддерживал 32 МБ ОЗУ, но объем памяти можно было довести до 128 МБ. На то время это было очень много. В системе устанавливались 40 или 80 ГБ жесткие диски. Кроме того, в этом «Макинтоше» был дисковод для 1,44 флоппи-диска, причем это была первая модель с поддержкой гибких дисков такого типа.

Название модели было выбрано не случайно. Дело в том, что компания использовала букву «х» в качестве признака наличия процессора 68030. Но после того, как Macintosh SE был обновлен, и частью его конфигурации стал именно такой процессор, то модель называлась бы «Macintosh SE/X», что для того времени достаточно вызывающе (да и сейчас многие компании не стали бы называть свои устройства таким образом). Поэтому было решено выбрать название «SE/30».

Модель выпускалась вплоть до 1991 года, после чего ее заменили Macintosh Classic II. Кстати, это была менее удачная модель, поскольку при практически аналогичной конфигурации она была на 40% медленнее своего «предка» из-за 16-битной системы. Поддерживалось всего 10 МБ ОЗУ, отсутствовал порт расширения.


ссылка на оригинал статьи https://habr.com/post/424893/

О чем молчат Лиды: начало карьеры разработчика. принципы. или как стать Middl’ом

Привет! Программирование – это непростой предмет, а индустриальная разработка программного обеспечения – очень сложный. В нашей ИТ индустрии не так уж редко можно услышать вопросы от младших коллег из серии «как мне развиваться?», «что нужно делать, чтобы стать профессионалом высокого уровня и как можно быстрее?», «что делать, если развиваться не получается, а интересных проектов нет?», «что должен знать миддл?». Если у вас от 0 до 3-х лет опыта в ИТ, вы начинающий специалист (или только собираетесь им стать) и ставите перед собой подобные цели профессионального и карьерного роста, ищете правильные пути, как этих целей достичь – этот пост для вас, добро пожаловаться под кат. Возможно, он также будет интересен тимлидам и менеджерам, в общем, всем, кто занимается обучением и развитием специалистов.

Для начала, позвольте представиться. Меня зовут Анатолий и если опустить должности и ранги, то прежде всего я Разработчик, потому что в широком смысле слова всю свою карьеру занимался разработкой, исследованиями и управлением разработчиками. Мой опыт в индустрии 10+ лет. Он достаточно разнообразен и простирается от финансовых систем и веб сайтов, до продуктов, алгоритмов и систем машинного обучения. Основное, однако, как мне кажется, состоит в том, что я сам был на месте целевых читателей этой статьи и впоследствии начал заниматься в разных аспектах развитием молодых программистов. На текущий момент через меня прошло уже в общей сложности более 2-х десятков junior developers и стажеров. Поэтому, считаю, что мне есть о чем рассказывать. Большое количество материалов по обсуждаемому вопросу, которые можно встретить, посвящены либо чисто техническим темам, либо, к примеру, почти слепому следованию Scrum’у. (типа — «если не знаешь что делать, попробуй работать по scrum’у и все будет зашибись» 🙂 ) Как бы не казалось из реалий и статистик отдельных команд и специалистов, это далеко не все вещи, составляющие практику и культуру разработки ПО. Поэтому, думая о чем писать, я решил, что не буду повторять эти сведения, а лучше постараюсь сфокуссироваться на темах, про которые не так много пишут или говорят. Поехали!

Да, в качестве дисклеймера, хотелось бы сказать, что описанное есть мое личное мнение, подтвержденное опытом и теоретическими знаниями, которые на этом опыте были проверены. Оно может не соответствовать той реальности, в которой вы окажетесь, поэтому позвольте дать вам сразу первый совет статьи: прежде всего, в любых сложных ситуациях стоит проанализировать её конструкцию, до того, как применять какие-то известные вам практики и паттерны вида «если, то». Детали очень важны. Вот теперь — поехали! 🙂

1. Широкая vs Узкая специализация

Часто люди, которые только хотят научиться программировать задаются вопросом, какую технологию выбрать для изучения, да и вообще, на каком ЯП, грубо говоря, «лучше писать код». Люди, которые устраиваются на свою первую работу думают о том, будет ли их текущая технология перспективна и востребована через пару-тройку лет и далее. (некоторые — совсем не думают, но это чаще всего не есть хорошо) «Лучше» и «перспективнее» здесь — это весьма субъективные понятия, определяемые на уровне ощущений и возможной пользы для дальнейшей карьеры. Достаточно быстро новичкам в ИТ может стать ясно, что многие проекты делаются на достаточно большом количестве технологий, а всего знать-то и невозможно. Так нужно ли гнаться за всеми зайцами?

К примеру, на первом году работы я получил ценное замечание от своего тимлида о том, что необходимо сфокусироваться на какой-то одной области, потому что специалист либо в чем-то специалист, либо, грубо говоря, не специалист ни в чем. Чтобы знать что-то на достаточно высоком уровне, необходимо заниматься этим постоянно и глубоко вникать в детали — чистая правда и трудно с этим поспорить. И действительно, практика это подтверждает: большинство известных мне специалистов (кто может таковыми считаться) — это узкие специалисты. Некоторые из них просто блестяще знают свой Предмет и поэтому решают в рамках него задачи небывалой крутизны. На этом месте можно было бы сказать «ОК, значит, принцип верен — все сходится», если бы не несколько НО. Дело в том, что спектр проектов, где будут востребованы такие узкие специалисты существенно уже, чем, понятно, у специалистов более широкого профиля. Не раз мне встречались проекты, участие в которых было бы просто невозможным без наличия широких познаний в нескольких технологиях сразу. Люди, которые этими знаниями обладали, открывали для себя новые, порой недоступные двери. А участие в отличном, уникальном проекте — это очень серьезное и полезное карьерное испытание, способное принести вам много ценного опыта и прочих бенефитов. Второе НО состоит в том, что мир технологий постоянно меняется и строго ограничив себя знанием одной-двух технологий или ЯП, можно естественным образом начать терять конкурентное преимущество и стать менее востребованным специалистом.

Итого, коротко можно сказать так: не бойтесь пробовать технологии, которые вам нравятся! Возможно, вы не станете экспертом в 3-х языках программирования сразу, или в 5-ти фрейморках, но знание их основ и внутреннего устройства — это серьезное конкурентное преимущество, если при прочих равных вы попадете на вакансию, где требуется сильное знание 1 технологии и базовое нескольких других. Главное здесь — мера и ограничение. Важно четко определить приоритеты, на изучение какой технологии вы тратите основное время, на изучение каких — оставшееся.

2. Функциональная область

От специализации в языках программирования и технологиях разработки мы плавно переходим к следующей важной вещи — функциональной области. Привести пример легко из жизни: как у врачей есть стоматологи, а есть кардиологи, так и среди разработчиков бывает специализация, и речь здесь вовсе не только о вышеупомянутых технологиях или языках программирования. Разработчики специализируются на разном: кто-то занимается интерфейсами пользователя, кто-то процессит данные на кластерах, кто-то распознает изображения, а кто-то пишет логику для игрового бота. Примеров уйма.
Возможно, в первые 2 года работы или даже больше вас и не будет беспокоить вопрос специализации, поскольку вход в проекты и технологии, на которые вы попадете, будет занимать существенное время, и этот вопрос просто не будет актуальным естественным образом. Однако, начиная с определенного момента, вы почувствуете легкость в решении все более и более сложных задач в какой-то области, и результат будет определяться во многом уже не степенью того, как детально, к примеру, вы знаете стандартную библиотеку того ЯП, с которыми вы работаете, или как виртуозно вы владеете продвинутым синтаксисом этого ЯП, а вашим опытом в конкретной функциональной области. Компьютерная графика, компьютерная лингвистика, финансовое программирование — все это конкретные области, на изучение и обретение практического опыта в которых уходят месяцы и годы. Если вы ставите перед собой цель стать спецом высокого уровня, найдите ту область, которая вам по-настоящему нравится. И если она вам действительно нравится — развивайтесь и работайте в ней с удовольствием, и все получится!

3. Наставники и самостоятельное обучение

Не существует двух полностью одинаковых проектов. Не существует одинаковых команд. Порой и не существует единственно правильного решения, будь то глобальное решение об архитектуре большой части системы или локальное решение о способе хранения файлов в репозитории. Перед начинающим специалистов встает много вопросов и сомнений. Вопросов, на которые в силу отсутствия опыта может так сразу и не найтись ответа. Вы получили готовый код и он совсем не работает, хотя у других коллег все нормально; процедура установки сервиса в 1 случае из 6 завершается с ошибкой – и хоть убейся, но непонятно, почему; вы не можете настроить сетевую часть сервиса, хотя делаете все по инструкции и перечитали ее уже 7 раз. Такие ситуации у разработчиков, тестировщиков и админов возникают постоянно. Степень сложности проблем может варьироваться от уровня «наверное, нужно копать куда-то туда» до «куда копать — совсем не понятно». Первый совет, который хорошо знают и дают опытные специалисты (и, наверняка, вы его уже от них слышали) состоит в том, что вам необходимо научиться как можно более самостоятельно разбираться в проблемах, когда вы в них вязните. Как правило для этого необходимо концентрироваться на причинно-следственной связи и научиться формулировать правильные вопросы о проблеме. В первую очередь — к самому себе, во-вторую очередь — к Гуглу. Оно ведь не просто так «все не работает», даже если вы в этом уверены, попробуйте вернуться «к началу», чтобы найти реальную причину проблемы. И, скорее всего, вы не один такой с подобной проблемой, просто погуглите и убедитесь в этом. Далее, следующий простой совет: только после того, как вы сделали несколько неудачных попыток и провели анализ проблемы самостоятельно, потратив существенное время (как правило, измеряется в часах, иногда – в днях) – обратитесь к старшим коллегам. Так вы не потратите их ценное время на решение ерундового вопроса, который бы вы и сами легко могли решить, применив большую усидчивость. Тем самым вы продемонстрируете, что у вас выработался правильный подход к решению проблем. Многие проблемы, кажущиеся на первый взгляд сложными и непонятными, решаются гуглением в прямом смысле за 5 минут.

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

Итого: ищите работу, где есть люди знающие Предмет и заинтересованные в том, чтобы и вы стали знать его лучше! Это позволит в достаточно короткие сроки существенно повысить уровень вашей экспертизы. Избегайте места, где совсем не готовы делиться знаниями. 4 года работы в таком месте будут равны двум (и меньше) в другом.

4. Нет серебрянной пули

Работа в ИТ индустрии — это постоянный диалог, спор, иногда — борьба мнений, а иногда и война принципов. Поверьте мне, вы встретите немало людей, которые будут убеждать вас в том, что они и только они обладают наиболее правильным решением или мнением, подкрепляя или не подкрепляя его фактами. Порой это чувство будет распирать и вас самих!
Возможно или невозможно сделать задачу в обозначенный срок? Что лучше: технология А или технология Б для задачи В? По какой методологии стоит разрабатывать проект и организовать процесс работы? Достаточно ли хорош написанный код и уже пора остановиться его полировать или же ему все еще требуется рефакторинг? Закладывать ли возможность расширения системы с самого начала, даже если расширения не ожидается, а вы не видите со своего уровня junior developer’a всей картины? Как правильно оценивать качество изделия и какая роль в этом процессе у разработчиков? И еще десяток-другой различных подобных вопросов.

Под частую, на эти и многие другие вопросы невозможно дать однозначного решения в конкретной ситуации. Хотелось бы его иметь, но иногда его просто не видно объективно, потому что уровень неопределенности на проекте может быть достаточно высок. Это в каком-то смысле идет в разрез одной негласной культуре, широко принятой в программировании: постоянный поиск и предложение лучших решений с помощью более совершенных технологий. Мы постоянно инстинктивно заставляем себя принимать решения на основе неполных данных.

И вот здесь программирование в своем микромире и разработка ИТ проектов уже в больших масштабах перестают быть сколько угодно точными дисциплинами и начинают быть искусством. Искусство строится на принципах и подходах, оно определяется ими.

Завершая очередной проект или более менее массивную задачу оглянитесь назад и проведите анализ: какие принципы помогли этой задаче или этому проекту прийти к успеху (или наоборот – зафейлиться)? Было ли здесь дело в том, какой язык программирования был выбран и в том, как он чудесно подошел, или, может быть, уровень взаимодействия с вашим заказчиком или партнером был настолько хорош, что вы могли заниматься самой задачей большую часть времени, не тратя время на издержки коммуникаций? Постоянно анализируйте, ищите новые принципы и советуйтесь с наставниками, как эти принципы разглядеть и определить.

5. О больших и маленьких компаниях, об ИТ и не ИТ

Многие молодые специалисты хотят работать в компаниях, про которые они слышали, продуктами или изделиями которых они пользовались. В каких-нибудь Эпплах, Гуглах или Майкрософтах (недавно появился неплохой термин — «Гуяндбук») или их русских аналогах (уж на сколько это возможно). Начинать карьеру в большой компании — это очень, очень ценный опыт. (Особенно это понимаешь на 11-ый год этого самого опыта :)) Увидеть, как работает большая компания изнутри, и как в ней организованы процессы — поверьте, это того стоит. Наверное, мне сложно представить что-то лучшее, чем набор из крупной ИТ компании и толкового коллектива на старте карьеры. Однако, всегда есть свои НО.
Первое НО состоит в том, что «крупная ИТ компания» достаточно сильно отличается от просто «крупной компании» (особенно, в российских реалиях). Если у вас есть выбор, пойти в маленькую или среднюю ИТ компанию или пойти в крупную не ИТ компанию (например банк или еще какую-нибудь финансовую или торговую компанию), вы должны понимать возможные последствия. А последствия в наихудшем случае будут следующими: если ИТ компания закроется или вы захотите из нее уйти — вы уходите со знаниями и принципами. Если же вы захотите уйти не из ИТ компании в ИТ компанию, то по ряду причин это будет сделать сложнее. Это может быть и отсутствие нужного и релевантного опыта, и специфичность проектов и придирчивость рекрутеров и нанимающих коллег к вашим прошлым местам работы (вспомните фирму Pearson Hardman из известного сериала, которая нанимала только из Гарварда. Такие истории нередки и в реальности. Типа «нанимаем только из продуктовых компаний», итд). В компаниях, где ИТ не является основным видом бизнеса, все в прямом смысле крутится вокруг этого бизнеса. Результат очень важен, процесс его достижения — гораздо менее важен. Но именно правильный процесс закладывает правильные принципы, которые затем помогут вам принимать решения и производить что-то очень качественное и сложное на выходе в достаточно непростых проектах. Если производить что-то качественное и полезное – это и есть ваша цель, учитывайте это.

6. Продуктовые и аутсорсинговые компании

Одна из моих самых любимых тем, поскольку я работал и в первых, и во-вторых. Продолжая тему придирчивости, в индустрии существует определенное мнение, что работать в продуктовых ИТ компаниях не только более престижно, но и денежно, а к этому еще и прилагается набор самых интересных проектов, которые только можно сыскать. Работа же в аутсорсе на проектах под заказ, по мнению некоторых специалистов — это классом ниже. Правда это или нет?
Отвечу: Нет. Не все так просто.

Основной плюс продуктовых компаний состоит в том, что человек, приходя туда, фактически имеет возможность выбирать проект/продукт или сферу деятельности, со всеми вытекающими из этого следствиями (например, возможность работать над воистину уникальными и сложными задачами). Одно из главных следствий: вы будете разрабатывать ВАШ продукт, делая его лучше, каждый день. Не всегда это будет идти просто и так, как вам хочется, но это Ваш продукт. Вы во многом влияете на его успех, по крайней мере на своем уровне.

В аутсорсинговых же компаниях сотрудник как правило не имеет такого выбора, и более того, периодически вынужден сидеть из-за этого в определенном смысле на иголках. Интеграторы и аутсорсеры занимаются теми проектами, за которые платят деньги здесь и сейчас. Не все такие проекты будут интересны определенному классу программистов. Для сотрудника аутсорсинговой компании всегда есть риск оказаться на абсолютно не интересном и стагнирующем проекте, при этом, подчастую, единственным способом сменить проект будет увольнение из компании.
Основной же минус продуктовых компаний — это большие объемы legacy кода и меньший фокус на процессах разработки (с большим фокусом на прямоту рук и извилины), при более высоких технических рисках. Второй неслабый минус — неуспех одного проекта может поставить крест на всей компании. Ознакомьтесь со статистикой закрытых стартапов за последние 5 лет и убедитесь в этом. Это далеко не все плюсы и минусы, но остальное, боюсь, лежит далеко за рамками этой статьй.

7. Качество vs количество

Вернемся к непростому предмету программирования. Крайне важно на начальном этапе карьеры уяснить важный принцип: корректность кода всегда должна быть превыше всего. С другой стороны, любое программное обеспечение создается с ошибками. То, на сколько принципиальными они оказались, вполне может повлиять на дальнейшую судьбу проекта или продукта. Так или иначе, коммерческое программирование – это бизнес и без прибыли он не может существовать. Вам обязательно и не раз встретятся ситуации, когда качеством кода (а иногда и самого функционала) жертвуют, чтобы быстрее выпустить релиз. Иногда, это значительно демотивирует команду, особенно, если мотивы таких решений не объясняются. Возможно, это будет во многом демотивировать и вас. Мне известны проекты, на которых сроки постоянно горели, а релизы постоянно выкатывались с потерей во внутреннем (код) или внешнем(функционал) качестве. На них люди работали по выходным от недель до нескольких месяцев. Что происходило дальше? В худшем случае для компании – убытки. В худшем случае для сотрудников – потеря здоровья. Поэтому, оказавшись в ситуации, где постоянно жертвуют качеством стоит оценивать 2 вещи: а) длительность этого б) последствия( а они могут быть положительными и отрицательными). С другой стороны бывают и другие примеры: быстрый релиз системы мог быть не очень качественным, но был очень своевременным. Система была далеко не идеальной, но основной базовый функционал в ней добротно работал. В итоге, ее недостатки были исправлены в течение следующих двух релизов, а пользователи системы были в таком восторге, что в проект были вложены вдвое больше ресурсы, работали над ним уже без перегораний и был сделан очень богатый и крутой функционал, который принес бизнесу большую пользу. С точки зрения конечной цели – это успех.

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

8. Программы делаются для людей

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

О чем это все, спросите вы? Сформулирую просто: будьте пользователем своего же продукта, ставьте себя на его место пользователя, начните думать как он, и, возможно, вы найдете способ, как сделать продукт лучше, уже как разработчик.

9. Об интерфейсах

БольшАя (возможно, и бОльшая) часть программистов, разрабатывающих логику и backend считает задачи по программированию интерфейса пользователя недостаточно интересными. Это де факто считается непрестижным (хотя, если взять Web последних времен, то в этом принципе были и положительные изменения). Якобы для этого и программировать-то уметь не надо. Что там, формочки клепать? Раз, раз и готово. Так или иначе, в этом есть определенное рациональное зерно. Разработка библиотек алгоритмов и разработка интерфейсов, конечно — это разные виды деятельности. Но интерфейс — это лицо приложения. Не имея этого Лица в достаточно хорошем качестве, счастье пользователя будет получить непросто. У меня для вас еще более интересные новости: этим не только не хотят заниматься, но и мало кто действительно хорошо умеет, на самом деле. Потому что непосредственно программированием проблема не ограничивается. Достаточное количество людей умеют в той или иной степени кодировать интерфейсы по макетам, не так много занимаются этим на постоянной профессиональной основе. Гораздо меньше людей могут объяснить, почему интерфейс или сценарий использования А им кажется более удачным, чем сценарий Б. Уже совсем мало людей умеют спроектировать качественный интерфейс с нуля и сценарии его использования. Таким образом, хорошие новости: если вы обнаружили у себя способности понимать, какой интерфейс лучше, а то и предлагать удачные UX/UI решения — вы можете стать очень конкурентным специалистом, откроете для себя новую интересную область задач, хотя, в определенном случае, вам придется отойти немного от непосредственно самого программирования.

10. О смене места работы

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

Первая причина, связанная с деньгами, весьма распространена. Канонический пример устроен так: джуну приходит оффер с ЗП в 1.5-2 раза выше. Такой коэффициент, понятное дело, на старте карьеры возможен, и он кажется просто огромным повышением, тяжело будет устоять перед таким предложением. Именно здесь может скрываться основная ошибка. Люди переходят на новое место работы, которое они тоже через 1-2 года с высокой вероятностью покинут, скорее всего уже и не из-за финансовых вопросов. Итого — у вас уже 4 года опыта, а много ли вы сделали законченных проектов или хотя бы крупных релизов? Почему именно на старте карьеры это может быть не самым лучшим решением вполне понятно: человек не научившись хорошо делать задачи А переключается на то, чтобы делать задачи B. Будь то другой проект, другая предметная область или технология. Переключение, как хорошо известно из программирования, содержит накладные расходы. Однако, не всегда такое переключение негативно. Пожалуй, основной позитив, который здесь может вас ждать — это возможность участия в более крутом проекте с более крутой командой, попав в которую, ваш профессиональный рост будет идти гораздо быстрее. Вы должны ощущать, что переходите с заметным отрывом, тогда, скорее всего, не ошибетесь.

Итого: перед тем как сменить работу в первые 1-3 года, подумайте над реальными причинами, которые вас побуждают это сделать. Снова повторимся: интенсивное изучение технологий и повышение skills в первые 3 года опыта — это задача номер 1. Завершенные задачи и проекты, качественно — задача номер 2. Финансовый рост — номер 3. Если вы ставите финансы первым номером, то, возможно, в будущем с удивлением для себя обнаружите, что за 4 года в индустрии вы научились только решать задачи из строго ограниченного круга на вашем проекте и не знаете и половину того, что вам может потребоваться при устройстве в другую компанию, где бы вы хотели работать.

Заключение

Начало карьеры — это то время, когда стоит работать над своими техническими скиллами и научиться темпу работы, который достаточен для проектной работы в реальных условиях. Это время, когда необходимо развивать самодисциплину. За него можно понять для себя, чем Вам больше всего нравится заниматься, а чем — совсем не нравится. За него также можно совершить большое количество ошибок и немалое количество побед. И первое и второе, при правильном разборе полетов и произведении правильных выводов на данном этапе карьеры является Победой, важно выработать именно такое отношение и не сдаваться! В конце концов, к четвертому году опыта вы подойдете при лучшем исходе: а) с хорошим набором hard skills б) c реальным проектным опытом в) с пониманием многих проблем и решений. Это отличное подспорье, чтобы развиваться дальше!

P.S. Автор будет рад критике и отзывам на статью в комментариях и лс. Особенно, если вам понравилась статья и ее тематика, то напишите, о каких связанных с ней темах вы бы еще хотели почитать в следующих статьях.


ссылка на оригинал статьи https://habr.com/post/424887/

Написать Telegram клиента — легко

Чем отличается Telegram от других популярных мессенджеров? Он — открытый!
Другие мессенджеры тоже имеют API, но почему-то именно телеграм известен как наиболее открытый из самых популярных?

Начнем с того, что у Telegram действительно полностью открытый клиентский
код. К сожалению, мы не видим комиты каждый день прямо на GitHub, но у нас есть код под открытой лицензией. Архитектура Telegram подразумевает, что и Bot и API имеет практически такие же методы — https://core.telegram.org/methods.

На самом деле, Telegram представляет не просто чат-мессенджер, а социальную платформу, доступ к которой открыт для разного рода приложений. Они могут предоставлять дополнительные фишки пользователям, взамен используя готовую сеть пользователей и сервера для доставки сообщений. Звучит настолько привлекательно, что нам захотелось попробовать написать своего «клиента» для Телеграм.

Суть приложения

В основном мы занимаемся картами и навигацией, поэтому мы сразу смотрели что-нибудь связанные с геолокацией. Мне очень понравилось, что в Telegram, раньше всех остальных приложений, появился удобный способ делится местоположением в реальном времени (https://telegram.org/blog/live-locations) и я достаточно часто этим пользуюсь: помочь сориентироваться другу, показать дорогу и самое главное ответить на главный вопрос «Когда ты будешь?». В принципе, этого хватает большинству людей, но как всегда есть сценарии, когда простых возможностей не хватает. Например, это может быть группа более 10 человек, с разными устройствами (некоторые устройства возможно не являются телефонами) и разными людьми. Этим людям было бы удобно обмениваться сообщениями в группе, а также видеть перемещения друг друга на карте.

Во главу угла, мы поставили создать дополнительную ценность для Telegram, а не пытаться использовать его не по назначению. Мы не хотели, чтобы люди у которых нет специального клиента Телеграм, видели в чате месиво сообщений или что-то невразумительное. У людей с «улучшенным» клиентом, появляются же дополнительные возможности, например:

  1. Более тонкое управление временем при отправки локации в реальном времени в чат
  2. Просмотр местоположения контактов на карте
  3. Подключение к чату маячковых устройств, через внешний API (Bot).

Как мы это делали

К счастью, весь код, который мы пишем — Open-Source, поэтому я сразу могу дать ссылку на его реализацию — Реализация Bot и Реализация Telegram Client на Kotlin.

Bot — основы

По реализации Bot существует достаточно много документации и примеров, но все же хочется пройтись и рассказать про некоторые подводные камни. Для начала, мы писали серверную часть
на Java и выбрали библиотеку org.telegram:telegrambots. Так как наш сервер — это обычный SpringBoot, то инициализация крайне простая:

   // Gradle implementation "org.telegram:telegrambots:3.6"    TelegramBotsApi telegramBotsApi = new TelegramBotsApi();    telegramBotsApi.registerBot(new TelegramLongPollingBot() {...});

Основная особенность передачи location, что его надо часто обновлять, и боту необходимо редактировать уже отправленные сообщения. Если бы не было такой возможности, то Bot бы просто заспамил чат и это, конечно, был бы Epic Fail. Слава богу, Telegram предоставляет права боту редактировать сообщения на протяжении 24 часов (минимум, возможно и дольше).

Передать сообщение можно многими способами. Есть тип Plain Text, Venue, Location, Game, Contact, Invoice и т.д. Казалось, что для нашей задачи отлично подходит Location, но вскрылась неприятная особенность. Location можно передать только с одного устройства для одного аккаунта или бота одновременно! Представьте у вас 2 телефона и с двух телефонов вы отправили свой Location в один чат, так вот на сервере случится ошибка и 1 Location Sharing просто остановится.
Казалось бы, это явно неральный случай, но представьте, у вас много китайских маячков, которые умеют отправлять Location по заданному URL, но они не умеют отправлять прямо в Telegram. Вы пишите Bot, который забирает с сервера и пушит в телеграм. Вот тут и вылазит, то что Bot не сможет отправить больше одного сообщения маячка с типом Location. Получается, это отлично подходит для единоразовой отправки, но не подходит для Live Location.

Решение простое — отправлять текстовые сообщения, а клиент будет парсить текст и показывать локации на карте. К сожалению в стандартном клиенте Telegram будут видны только текстовые сообщения, но там можно вставить ссылку, чтобы открыть карту.

Bot — Подводные камни

К сожалению, Bot пришлось переписывать аж 2.5 раза. Основная проблема неправильный дизайн коммуникации.

  1. Почему-то вначале казалось хорошей идеей, если бот будет полноценным участником чата и отправлять сообщения. Но, это плохо и с точки зрения Privacy переписки и с точки зрения взаимодействия с ботом. Правильное решение, использовать Inline bots. Таким образом, гарантируется, что бот не видит ничего кроме своего Location и его можно использовать в любом чате. По-человечески говоря, некультурно тащить своего бота в какой-то общий чат, а нужно пообщаться с ботом 1 на 1 и настроить его, а дальше он сможет отправлять нужные сообщение в любой выбранный чат.
  2. В Telegram Message API есть исторически 2 типа взаимодействия: кнопки под текстом ( (inline buttons)[https://core.telegram.org/bots/2-0-intro#switch-to-inline-buttons] ) и ответы боту напрямую текстом. В общем, ответы с ботом безнадежно устарели. Кнопки немного сложнее с точки зрения реализации, но это полностью окупается удобством использования и именно их надо использовать для всего нетекстового ввода.
  3. В качестве примера бота можно посмотреть популярный @vote_bot (или наш @osmand_bot).

Telegram Client

Найти примеры готовых telegram client, кроме основного, нам не удалось, но достаточно простая структура tdlib помогла нам создать базовый клиент буквально за пару дней.

Настройка Gradle:

task downloadTdLibzip {     doLast {         ant.get(src: 'https://core.telegram.org/tdlib/tdlib.zip', dest: 'tdlib.zip', skipexisting: 'true')         ant.unzip(src: 'tdlib.zip', dest: 'tdlib/')     } }  task copyNativeLibs(type: Copy) {     dependsOn downloadTdLibzip     from "tdlib/libtd/src/main/libs"     into "libs" }  task copyJavaSources(type: Copy) {     dependsOn downloadTdLibzip     from "tdlib/libtd/src/main/java/org/drinkless/td"     into "src/org/drinkless/td" } dependencies {     implementation fileTree(dir: 'libs', include: ['*.jar']) }

Практически все внутренности Телеграмма написаны на С++ и с точки зрения Android виден только класс API на 1.5 Мб прокси методов TdApi.java. Путем сопоставления документации ботов и названия методов, можно достаточно просто сориентироваться куда двигаться.

Инициализация клиента с global handler:

fun init(): Boolean {     return if (libraryLoaded) {         // create client         client = Client.create(UpdatesHandler(), null, null)         true     } else {         false     } }

Запрос фото пользователя:

private fun requestUserPhoto(user: TdApi.User) {     val remotePhoto = user.profilePhoto?.small?.remote     if (remotePhoto != null && remotePhoto.id.isNotEmpty()) {         downloadUserFilesMap[remotePhoto.id] = user         client!!.send(TdApi.GetRemoteFile(remotePhoto.id, null)) { obj ->             when (obj.constructor) {                 TdApi.Error.CONSTRUCTOR -> {                     val error = obj as TdApi.Error                     val code = error.code                     if (code != IGNORED_ERROR_CODE) {                         listener?.onTelegramError(code, error.message)                     }                 }                 TdApi.File.CONSTRUCTOR -> {                     val file = obj as TdApi.File                     client!!.send(TdApi.DownloadFile(file.id, 10), defaultHandler)                 }                 else -> listener?.onTelegramError(-1, "Receive wrong response from TDLib: $obj")             }         }     } }

Telegram Client — подводные камни

  1. Регистрация/Login и Logout. При регистрации необходимо учесть разные сценарии: когда код доступа присылается SMS или в другой телеграм клиент, двухфакторную авторизацию и т.п. Самая большая сложность — это тестирование. Любая авторизация более 3-х раз вела к блокировке аккаунта на 24 часа, поэтому тестировать Logout было особенно весело. Несмотря на то, что регистрация нужна всего лишь один раз, наверное это самая сложная часть интеграции.
  2. Определить как и в каком порядке вычитывать сообщения. Любой клиент имеет доступ ко всем сообщениям во всех чатах, но вычитывать их надо последовательно. В нашем случае 99% сообщений нужно отбрасывать. Сначала мы почему-то сделали чтение всех сообщений за последние 3 дня при логине, но в дальнейшем это только вызвало проблемы и при рестарте у нас пропадали сообщения. Поэтому сейчас мы читаем только новые сообщения, а для тех сообщений, что нам нужны сохраняем id во внутренней БД.

Что получилось

Наверное, зная все подводные камни можно было бы все сделать в разы быстрее, но получилось где-то 1-2 месяца на трех человек. Финальное приложение можно найти в Google Play.

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

Буду рад ответить на ваши вопросы.


ссылка на оригинал статьи https://habr.com/post/424245/