Pull to refresh
38
0
Maxim Firsov @FirsofMaxim

Mobile developer, Golang backend developer

Send message

Meshtastic – оперативно-тактический радиочат без сотовой связи и интернета. Часть 1. Знакомство

Reading time9 min
Views102K

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

Meshtastic — это проект, который позволяет построить свою частную радиосеть с очень большим временем автономной работы, используя недорогие радио модули LoRa и экономичные микроконтроллеры серии ESP32.

Радиомодем связаны с вашим смартфоном по сети Bluetooth. Для некоторых сценариев использования смартфон вообще не требуется.

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

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

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

Спаси себя сам и вокруг спасутся многие

Android 12. Splash Screen API. Делаем анимированный экран загрузки

Reading time7 min
Views31K

Android 12. Splash Screen API. Делаем анимированный экран загрузки (кручение). Боли и подводные камни, с которыми я столкнулся при реализации нового сплеш-скрина для Android 12.

Читать далее

Почему ваши ежедневные стендапы не работают и как это исправить

Reading time12 min
Views27K

Перевод статьи Лукаса Ф. Косты "Why your daily stand-ups don't work and how to fix them" с некоторыми размышлениями переводчика (выделены курсивом).

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

Читать далее

Яндекс выпускает DivKit — фреймворк для server-driven UI с открытым кодом

Reading time12 min
Views58K
Привет! Сегодня Яндекс выкладывает в опенсорс DivKit — фреймворк для отрисовки интерфейсов из ответа сервера. Серверная вёрстка поможет ускорить разработку: наладить отправку апдейтов от сервера разным версиям приложения, создать прототип или просто написать интерфейс один раз для нескольких платформ.


Фреймворк включает в себя несколько библиотек: клиентскую часть по отрисовке интерфейсов для Android, iOS и веба, а также DSL для формирования ответа сервера на Kotlin, TypeScript и Python. Исходный код опубликован на Гитхабе под лицензией Apache 2.0.

Сейчас DivKit используется в приложении Яндекс, Алисе, Едадиле, Маркете, ТВ и других приложениях. В этом посте я постараюсь вспомнить историю фреймворка, затем мы напишем с его помощью небольшой просмотрщик ленты Хабра, а в конце я покажу ещё несколько простых примеров интеграции.
Читать дальше →

Через какую хитро закрученную схему вы получаете авиабилет

Reading time10 min
Views30K

Так в Сирене выглядит бронирование по маршруту Москва (Внуково) — Краснодар и обратно

Внешне продажа билетов выглядела очень просто: сначала у авиакомпаний были бумажные журналы, в которых можно было отмечать, какие места на какой рейс заняты. Кассир авиакассы говорил диспетчеру, куда хочет полететь пассажир, а тот в свою очередь звонил в авиакомпанию, где отмечали, что место продано. Пассажиру давали в руки билет. На самом деле всё чуть сложнее: например, нужно было сопоставить номер бланка билета (купон) с местом, а значит где-то достать бланки и получить диапазон номеров для конкретной авиакассы.

Учёт билетов в тетрадке всё ещё ведётся в некоторых авиакомпаниях (последний раз такое мы видели буквально в прошлом году в Латинской Америке). В СССР же он вёлся до 1972 года, когда появилась первая сеть из авиакасс в четырёх сотнях городов, соединённых с центральным компьютером. Женщину вынули, автомат поставили. Там, где компьютеров не было, диспетчер связывался с ближайшим центром, где компьютер был.

Эти прекрасные романтические времена, когда Аэрофлот фактически повлиял на изобретение советских сетевых протоколов — первая Сирена работала на аналоге UDP с 97% доставкой. Прогресс советских баз данных и прочих технологий, которые сейчас воспринимаются как антураж Фаллаута, — через несколько витков эволюции превратился в связку из нескольких систем, которые, собственно, и выписывают вам билет.

Сейчас расскажу про эту архитектуру.
Читать дальше →

Тестирование безопасности мобильного приложения: стандартные кейсы при регрессе

Reading time7 min
Views8.7K

image


Привет! Я Линар Юнусов, тестировщик из мобильной команды СберМаркета. При создании списка проверок мы попросили помощи у команды информационной безопасности, отдельная благодарность Дмитрию Терёшину за проведённую встречу с подробным разбором всех кейсов. Его интересную статью по работе утилиты CheckKarlMarx можно увидеть здесь.


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


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

Читать дальше →

Как мы ускоряли сборку Android-приложения из двух миллионов строк кода

Reading time18 min
Views18K

Всем привет! Наверняка каждый Android-разработчик хоть раз сталкивался с проблемой скорости сборки своего проекта. После нехороших слов в адрес кодогенерации, покупок более мощного железа, многочисленных попыток распилить проект на небольшие параллельно собираемые модули и прохождений всех стадий торга мы продолжаем искать решение этой проблемы. К счастью, за годы развития и в Gradle, и Android Gradle Plugin (AGP) появилось много полезных штук для ускорения сборки, о которых я расскажу дальше.


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


Я расскажу на примере мобильного Яндекс Браузера. У нас было ~150 Gradle-модулей, ~2 млн LoC на Java/Kotlin, десяток Gradle-плагинов, тысячи строк кода в buildSrc и лёгкая дрожь от вопроса, сколько ещё может переварить билд-система. Не скажу, что это всё было категорически необходимо, но к написанным строчкам кода надо проявлять уважение.

Читать дальше →

Клубничная чудо-коробка 2.0. Часть вторая

Reading time15 min
Views31K

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

Читать далее

Возможна ли работа с bluetooth в Android без местоположения?

Reading time7 min
Views13K

Разработчики Вы там совсем обнаглели ? Зачем Вам мое местоположение ?

Типовой отзыв для андроид приложения, работающего с блютуз устройством.

Статья построена в виде спора с воображаемым пользователем. Для андроид разработчиков рассмотрены как классические способы, так и рекомендумые альтернативы.

Читать далее

Зачем тимлиду актерское мастерство?

Reading time12 min
Views6.4K

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

На прошлогоднем TeamLead Conf Анастасия Абрашитова, руководитель службы экосистемы репозитория Яндекса и автор канала Записки из горящего дома, показала этюд про уточку в конце выступления. Просто для иллюстрации, как актерское мастерство может изменить вас: вы преодолеете стеснительность, слегка раскрепоститесь и прокачаете новые навыки коммуникации. Давайте посмотрим, в чем секрет влияния актерского мастерства для тимлидов.

Читать далее

Как c помощью Аналитики набрать миллионы подписчиков на Youtube

Reading time7 min
Views20K

«Никто ничего не знает»  - знаменитая цитата Уильяма Голдмана, сказанная в 80х. Имелась ввиду неспособность Голивудских продюсеров предугадывать успех или провал фильма в прокате. Сам Голдман - дважды обладатель Оскара и один из самых великих сценаристов в истории кинематографа. Короче, ему можно верить. 

С тех пор прошло 40 лет. Появился интернет. В Интернете появилось видео. Однако, в отличие от фильма в кинотеатрах, успех ролика в интернете можно предугадать с большой вероятностью. 

Особенно, успех ролика на Ютуб. 

Почти каждый автор YouTube канала знает, что такое YouTube Аналитика. Но многие не умеют ей пользоваться. Или не хотят. 

Читать далее

Многомодульный BDSM: как связать Gradle модули и как с ними общаться после этого?

Level of difficultyHard
Reading time15 min
Views6.9K

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

Читать далее

Можно ли в российских облаках реализовать архитектурные схемы, стандартные для западных провайдеров

Reading time5 min
Views8.9K


Исторически так сложилось, что AWS стал промышленным стандартом на рынке облачных услуг, как с точки зрения набора предоставляемых услуг и решений, так и с точки зрения поддержки, комьюнити, готовых библиотек для использования, провайдеров для работы с подходом IaaC. Но ввиду изменившейся геополитической ситуации, а также других различных факторов (например, 152 ФЗ), зарубежные решения становятся всё менее доступными. Так что необходимо искать альтернативы на российском внутреннем рынке.

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

Дисклеймер №1
Данная статья не является рекламой. Все совпадения с реальностью — всего лишь совпадения с реальностью. А все несовпадения с реальностью — всего лишь несовпадения с реальностью.

Дисклеймер №2
Читать дальше →

Многомодульный BDSM: стоит ли внедрять Gradle модули и какие типы модулей бывают?

Level of difficultyMedium
Reading time17 min
Views11K

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

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

Надеюсь, к концу статьи вы станете на чуточку ближе к ответам на вопросы: «Каким образом вообще можно внедрить многомодульность в свой проект?», «Какие типы модулей есть?» и «Нужна ли многомодульность в моём проекте?»

Читать далее

Память в браузерах и в Node.js: ограничения, утечки и нестандартные оптимизации

Reading time32 min
Views48K

Интро: почему я написал эту статью


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



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


Разрабатывая проект на JavaScript (TypeScript, ClojureScript или каком-то другом языке, транслируемом в JavaScript), мы привыкли создавать объекты, массивы, строки и вообще писать код, как будто память бесконечна. Это не так. Я расскажу о видах проблем с памятью, о том, какие ограничения мы часто забываем и как их можно преодолеть. В ответ браузеры и пользователи скажут вам спасибо.


Читать дальше →

Очень быстро понимаем Android Build Flavors

Reading time4 min
Views23K

Build Flavors — технология, позволяющая собирать несколько вариантов приложения с общей кодовой базой и общими ресурсами.

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

Читать далее

Как и зачем собирать Android приложение в docker контейнере

Reading time5 min
Views19K

Добрый день, уважаемые читатели.

Я - Владимир, меня зовут девопс. Говорят, что девопс - это болезнь и я это вам сегодня докажу.

Ответа на вопрос "зачем?" вы тут не найдете, это кликбейт, я и сам не знаю. Все происходящее мотивируется девизом "бекоз ай кен".

Если без шуток, то можно прогонять процесс сборки, создавать изолированные тест-кейсы, прогонять через автотесты, SonarQube и прочие SAST-ы

Итак. Дано. Один безумный девопс, один несчастный андроид-разработчик, собирающий апк локально. Ситуация, увы, распространенная.

Под катом описание Dockerfile с подробностями и нюансами.

Процесс создания Dockerfile

10 ситуаций выбора, которые стоят перед тимлидом

Reading time7 min
Views5.5K


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

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

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

Но и это не всё. Гораздо более широкая ситуация — выбор senior-тимлида — даже не в этом, а в причинах задержек. Конкретно — что именно привело к тому, что нужно полностью полагаться на другую команду, и можно ли этим как-то управлять.
Читать дальше →

Эволюция Server-Driven UI: динамические поля, хэндлеры и многошаг

Reading time8 min
Views32K

Server-Driven UI (SDUI) — это подход для динамичного и гибкого пользовательского интерфейса, когда сервер посредством API сообщает приложению, какие компоненты и с каким контентом отображать. Он довольно популярен, и мы его тоже используем на многих экранах — помогает быстро выпускать фичи в продакшн. 

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

Читать далее

Водопровод в современной квартире

Reading time11 min
Views102K

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

Читать далее

Information

Rating
1,972-nd
Location
Снежинск (Челябинская обл.), Челябинская обл., Россия
Date of birth
Registered
Activity