Первоочередной целью этой статьи была реклама моей первой 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 проекте.
Если вкратце, то все, что вам нужно для использования библиотеки, это:
В ближайших релизах:
Я постарался сделать так, что другие разработчики меньше думали при имплементации работы с камерой и больше концентрировались на решении своих задач.
Я рассчитываю на содействие со стороны комьюнити и внесение вклада в библиотеку.
Не воспринимайте все мои негативные высказывания в штыки. Я не хочу сказать, что вам не следует думать при разработке. Я, как и вы, получаю огромный кайф при решении инженерных задач, но при этом хотел бы, чтобы некоторые моменты стали чуточку проще.
А сталкивались ли вы с некрасивыми 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 проекте.
Если вкратце, то все, что вам нужно для использования библиотеки, это:
- Добавить к вашему макету View ScannableCamera (c дополнительными необязательными настройками)
- Переопределить один callback onScanned()
- По желанию:
- Добавить Overlay (с тонкой настройкой)
- Использовать extension методы на проверку наличия определенного типа штрих-кода в списке
непосредственная проверка типа штрих-кода и его формата:barcodesList.hasBarcodeType(type)
barcode.isQr()
barcode.isEan13()
barcode.isWiFi()
etcbarcode.isCalendarEvent()
В ближайших релизах:
- Фокусирование камеры по тапу
- Возможность программно сделать скриншот
- Зуминг
- Возможность создания штрих-кодов
- Реализация Camera2 или CameraX
Я постарался сделать так, что другие разработчики меньше думали при имплементации работы с камерой и больше концентрировались на решении своих задач.
Я рассчитываю на содействие со стороны комьюнити и внесение вклада в библиотеку.
Напоследок
Не воспринимайте все мои негативные высказывания в штыки. Я не хочу сказать, что вам не следует думать при разработке. Я, как и вы, получаю огромный кайф при решении инженерных задач, но при этом хотел бы, чтобы некоторые моменты стали чуточку проще.
А сталкивались ли вы с некрасивыми API? Как вы пришли к своему первому проекту с открытым с исходным кодом?