Как стать автором
Обновить

Мой путь к первой open source библиотеке

Первоочередной целью этой статьи была реклама моей первой open source библиотеки, но в процессе написания получилась хорошая история моего пути к ней. Я расскажу про безответственных open source разработчиков, болях при реализации API от Google и напоследок поделюсь своей реализацией их API.


Немного о себе: с 17 лет я работал Backend разработчиком в компании “Биллинговые системы” — бывшей дочке Сбербанка. Спустя некоторое время решил перейти в Android разработку и уже целый год занимаюсь ей, на данный момент мне 19.

К чему это я? У меня нет достаточного технического бэкграунда, чтобы осуждать дизайн api от google, но при этом я не свалился с дерева и могу высказать к нему некоторое недовольство и предложить свой дизайн на базе их.

Передо мной стояла задача написания приложения для беспрерывного сканирования QR и штрих-кодов, отправки данных на сервер и отображения ответа. Основная проблема была в сканировании. На момент постановки задачи было всего 2 варианта — библиотеки с zxing scanning или Google Vision API. Вместе с командой решили использовать вариант от Google. Их сравнение можно прочитать в статье на Medium.



Первое, что я начал делать — искать хорошие реализации от других разработчиков, чтобы минимизировать затраты на разработку. Но чем дальше я искал, тем хуже мне становилась. Самая популярная библиотека по запросу “google vision api barcode scanning” имеет у своей камеры 1 FPS, крашится и имеет значительные баги. Другие реализации были еще хуже. Я столкнулся с полной безответственностью разработчиков при публикации своих решений в open source. Ладно бы это были просто проекты на гитхабе, но ведь они пишут под это документацию, добавляют заголовок “Apache Common Licence” и больше никогда не выпускают обновления.

Стало ясно, что API нужно реализовать самому. И тут я наткнулся на то, что для этого нужно реализовать миллионы ненужных и непонятных тебе колбэков, а напоследок сесть на шпагат и скрутить сальто. Такой API ненормален. Когда я беру чей-то API, чью-то библиотеку (то бишь готовые решения, не SDK), я хочу думать как можно меньше и просто решать свою задачу. Когда меня заставляют выполнять акробатические трюки при такой, казалось бы, простой задаче как сканирование штрих-кодов, мне становится не по себе, руки так и хотят перестать писать код.

Так или иначе мне пришлось научиться садиться на шпагат, и… результат мне очень нравится! (чего не скажешь о процессе) Я решил, что полученное произведение — это отличное подспорье для своей библиотеки. После этого я бороздил Github в поисках хороших open source проектов. Больше всего мне понравились проекты @yegor256, поэтому оформлял README по образу и подобию его проектов.

Чтобы воспользоваться моей библиотекой, достаточно выполнить простую инструкцию в соответствующем Github проекте.

Если вкратце, то все, что вам нужно для использования библиотеки, это:

  1. Добавить к вашему макету View ScannableCamera (c дополнительными необязательными настройками)
  2. Переопределить один callback onScanned()
  3. По желанию:

    • Добавить Overlay (с тонкой настройкой)
    • Использовать extension методы на проверку наличия определенного типа штрих-кода в списке
      barcodesList.hasBarcodeType(type)
      непосредственная проверка типа штрих-кода и его формата:
      barcode.isQr()
      barcode.isEan13()
      barcode.isWiFi()
      barcode.isCalendarEvent()
      etc

В ближайших релизах:

  • Фокусирование камеры по тапу
  • Возможность программно сделать скриншот
  • Зуминг
  • Возможность создания штрих-кодов
  • Реализация Camera2 или CameraX

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

Напоследок


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

А сталкивались ли вы с некрасивыми API? Как вы пришли к своему первому проекту с открытым с исходным кодом?
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.