#react_native — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #react_native, aggregated by home.social.
-
Красное не мёржим: как мы внедрили e2e тесты в разработку
Можно ли сделать e2e тесты мощным инструментом раннего отлова багов, не потопив при этом CI и не всем не разругавшись? Рассказываю, через что пришлось пройти, чтобы релизы были спокойные, пайплайны — зеленые, разработчики — довольные. Как мы это внедряли, сколько сопротивления получили и что из этого выжило спустя четыре месяца.
https://habr.com/ru/articles/1070260/
#shiftleft #тестирование #quality_gates #react_native #e2e #e2e_тестирование #e2eтесты #qa_automation #qa
-
Красное не мёржим: как мы внедрили e2e тесты в разработку
Можно ли сделать e2e тесты мощным инструментом раннего отлова багов, не потопив при этом CI и не всем не разругавшись? Рассказываю, через что пришлось пройти, чтобы релизы были спокойные, пайплайны — зеленые, разработчики — довольные. Как мы это внедряли, сколько сопротивления получили и что из этого выжило спустя четыре месяца.
https://habr.com/ru/articles/1070260/
#shiftleft #тестирование #quality_gates #react_native #e2e #e2e_тестирование #e2eтесты #qa_automation #qa
-
Красное не мёржим: как мы внедрили e2e тесты в разработку
Можно ли сделать e2e тесты мощным инструментом раннего отлова багов, не потопив при этом CI и не всем не разругавшись? Рассказываю, через что пришлось пройти, чтобы релизы были спокойные, пайплайны — зеленые, разработчики — довольные. Как мы это внедряли, сколько сопротивления получили и что из этого выжило спустя четыре месяца.
https://habr.com/ru/articles/1070260/
#shiftleft #тестирование #quality_gates #react_native #e2e #e2e_тестирование #e2eтесты #qa_automation #qa
-
Делаем модуль на C++ для приложения React Native
Я не планировал переписывать приложение React Native на C++ . Большая часть приложения прекрасно работала на TypeScript: экраны, формы, валидация, навигация, логика продукта — все это находилось именно там, где нужно. Проблема была более узкой и специфичной: нам нужно было, чтобы один фрагмент логики работал с производительностью, близкой к нативной, оставался общим для Android и iOS и при этом был доступен из JavaScript через обычный типизированный API. Поначалу все звучало слишком просто. Написать интерфейс на TypeScript, позволить Codegen генерировать контракты, перенести основную логику на C++, зарегистрировать модуль на обеих платформах и использовать его из React Native как любой другой модуль. Спойлер: да, это работает. Чистый модуль Turbo Native на C++ действительно может дать вам одну реализацию для Android и iOS, типизированную границу через Codegen, меньшие накладные расходы, чем у старого Bridge, и удобный способ повторного использования существующего кода на C или C++ внутри приложения React Native. Спойлер номер два: код на C++ — это не самая сложная часть. Самое сложное начинается вокруг: CMake, NDK, Xcode, Objective-C++, время жизни среды выполнения JSI, регистрация модулей, границы потоков, владение памятью, обработка ошибок, сборки Expo, сторонние библиотеки и вопрос, который никто не хочет задавать слишком поздно — действительно ли этот модуль должен быть нативным? В этой статье я подробно расскажу о создании C++ Turbo Native модуля для React Native: где этот подход полезен, где он добавляет скрытые затраты на поддержку, чем отличается регистрация для Android и iOS, почему важна обертка TypeScript и почему сам TurboModule должен оставаться «тонким».
https://habr.com/ru/articles/1064564/
#React_Native #C++ #TurboModules #JSI #TypeScript #Codegen #Android_NDK #CMake #Xcode
-
Делаем модуль на C++ для приложения React Native
Я не планировал переписывать приложение React Native на C++ . Большая часть приложения прекрасно работала на TypeScript: экраны, формы, валидация, навигация, логика продукта — все это находилось именно там, где нужно. Проблема была более узкой и специфичной: нам нужно было, чтобы один фрагмент логики работал с производительностью, близкой к нативной, оставался общим для Android и iOS и при этом был доступен из JavaScript через обычный типизированный API. Поначалу все звучало слишком просто. Написать интерфейс на TypeScript, позволить Codegen генерировать контракты, перенести основную логику на C++, зарегистрировать модуль на обеих платформах и использовать его из React Native как любой другой модуль. Спойлер: да, это работает. Чистый модуль Turbo Native на C++ действительно может дать вам одну реализацию для Android и iOS, типизированную границу через Codegen, меньшие накладные расходы, чем у старого Bridge, и удобный способ повторного использования существующего кода на C или C++ внутри приложения React Native. Спойлер номер два: код на C++ — это не самая сложная часть. Самое сложное начинается вокруг: CMake, NDK, Xcode, Objective-C++, время жизни среды выполнения JSI, регистрация модулей, границы потоков, владение памятью, обработка ошибок, сборки Expo, сторонние библиотеки и вопрос, который никто не хочет задавать слишком поздно — действительно ли этот модуль должен быть нативным? В этой статье я подробно расскажу о создании C++ Turbo Native модуля для React Native: где этот подход полезен, где он добавляет скрытые затраты на поддержку, чем отличается регистрация для Android и iOS, почему важна обертка TypeScript и почему сам TurboModule должен оставаться «тонким».
https://habr.com/ru/articles/1064564/
#React_Native #C++ #TurboModules #JSI #TypeScript #Codegen #Android_NDK #CMake #Xcode
-
Делаем модуль на C++ для приложения React Native
Я не планировал переписывать приложение React Native на C++ . Большая часть приложения прекрасно работала на TypeScript: экраны, формы, валидация, навигация, логика продукта — все это находилось именно там, где нужно. Проблема была более узкой и специфичной: нам нужно было, чтобы один фрагмент логики работал с производительностью, близкой к нативной, оставался общим для Android и iOS и при этом был доступен из JavaScript через обычный типизированный API. Поначалу все звучало слишком просто. Написать интерфейс на TypeScript, позволить Codegen генерировать контракты, перенести основную логику на C++, зарегистрировать модуль на обеих платформах и использовать его из React Native как любой другой модуль. Спойлер: да, это работает. Чистый модуль Turbo Native на C++ действительно может дать вам одну реализацию для Android и iOS, типизированную границу через Codegen, меньшие накладные расходы, чем у старого Bridge, и удобный способ повторного использования существующего кода на C или C++ внутри приложения React Native. Спойлер номер два: код на C++ — это не самая сложная часть. Самое сложное начинается вокруг: CMake, NDK, Xcode, Objective-C++, время жизни среды выполнения JSI, регистрация модулей, границы потоков, владение памятью, обработка ошибок, сборки Expo, сторонние библиотеки и вопрос, который никто не хочет задавать слишком поздно — действительно ли этот модуль должен быть нативным? В этой статье я подробно расскажу о создании C++ Turbo Native модуля для React Native: где этот подход полезен, где он добавляет скрытые затраты на поддержку, чем отличается регистрация для Android и iOS, почему важна обертка TypeScript и почему сам TurboModule должен оставаться «тонким».
https://habr.com/ru/articles/1064564/
#React_Native #C++ #TurboModules #JSI #TypeScript #Codegen #Android_NDK #CMake #Xcode
-
Яндекс.Карты в Expo в 2026: поддерживаемый нативный SDK
Если вы делаете приложение на React Native / Expo и вам нужны Яндекс.Карты , вы наверняка столкнулись с проблемой: у Яндекса есть официальный SDK для Android, iOS и Flutter — но не для React Native . Годами пробел закрывало сообщество, но в 2026-м ситуация невесёлая:
https://habr.com/ru/articles/1063014/
#react_native #expo #yandex_mapkit #yandex_map #яндекс_карты #mapkit #typescript
-
Яндекс.Карты в Expo в 2026: поддерживаемый нативный SDK
Если вы делаете приложение на React Native / Expo и вам нужны Яндекс.Карты , вы наверняка столкнулись с проблемой: у Яндекса есть официальный SDK для Android, iOS и Flutter — но не для React Native . Годами пробел закрывало сообщество, но в 2026-м ситуация невесёлая:
https://habr.com/ru/articles/1063014/
#react_native #expo #yandex_mapkit #yandex_map #яндекс_карты #mapkit #typescript
-
Яндекс.Карты в Expo в 2026: поддерживаемый нативный SDK
Если вы делаете приложение на React Native / Expo и вам нужны Яндекс.Карты , вы наверняка столкнулись с проблемой: у Яндекса есть официальный SDK для Android, iOS и Flutter — но не для React Native . Годами пробел закрывало сообщество, но в 2026-м ситуация невесёлая:
https://habr.com/ru/articles/1063014/
#react_native #expo #yandex_mapkit #yandex_map #яндекс_карты #mapkit #typescript
-
Почему ваше React Native приложение падает при установке и как один метод в MainApplication это исправляет
Твое React Native приложение стабильно падает при первом запуске, а в логах только каша и отчаяние? Забудь про JS-инициализацию и гонку потоков — спускаем нативные SDK в Application.onCreate() через рефлексию, чтобы победить краши раз и навсегда. В новой статье разбираем универсальный подход для Яндекс.Карт, Firebase и других библиотек, который сэкономит тебе часы отладки. Заходи, будет интересно…
-
Почему ваше React Native приложение падает при установке и как один метод в MainApplication это исправляет
Твое React Native приложение стабильно падает при первом запуске, а в логах только каша и отчаяние? Забудь про JS-инициализацию и гонку потоков — спускаем нативные SDK в Application.onCreate() через рефлексию, чтобы победить краши раз и навсегда. В новой статье разбираем универсальный подход для Яндекс.Карт, Firebase и других библиотек, который сэкономит тебе часы отладки. Заходи, будет интересно…
-
Почему ваше React Native приложение падает при установке и как один метод в MainApplication это исправляет
Твое React Native приложение стабильно падает при первом запуске, а в логах только каша и отчаяние? Забудь про JS-инициализацию и гонку потоков — спускаем нативные SDK в Application.onCreate() через рефлексию, чтобы победить краши раз и навсегда. В новой статье разбираем универсальный подход для Яндекс.Карт, Firebase и других библиотек, который сэкономит тебе часы отладки. Заходи, будет интересно…
-
Покой как фича: анти-шагомер на Expo, который ругает за активность
Я сделал анти-шагомер на Expo и React Native: приложение, которое считает шаги моральным ущербом, награждает за неподвижность и отправляет токсичные локальные пуши. Внутри шутки внезапно оказались Android step counter, background tasks, Zustand, локальные уведомления, state machine для чек-апа и несколько production-граблей, о которых лучше узнать до публикации в стор. Мне лень, но интересно
https://habr.com/ru/articles/1048094/
#React_Native #Expo #Android #TypeScript #шагомер #Pedometer #TYPE_STEP_COUNTER #background_tasks #локальные_уведомления #Zustand
-
Покой как фича: анти-шагомер на Expo, который ругает за активность
Я сделал анти-шагомер на Expo и React Native: приложение, которое считает шаги моральным ущербом, награждает за неподвижность и отправляет токсичные локальные пуши. Внутри шутки внезапно оказались Android step counter, background tasks, Zustand, локальные уведомления, state machine для чек-апа и несколько production-граблей, о которых лучше узнать до публикации в стор. Мне лень, но интересно
https://habr.com/ru/articles/1048094/
#React_Native #Expo #Android #TypeScript #шагомер #Pedometer #TYPE_STEP_COUNTER #background_tasks #локальные_уведомления #Zustand
-
Покой как фича: анти-шагомер на Expo, который ругает за активность
Я сделал анти-шагомер на Expo и React Native: приложение, которое считает шаги моральным ущербом, награждает за неподвижность и отправляет токсичные локальные пуши. Внутри шутки внезапно оказались Android step counter, background tasks, Zustand, локальные уведомления, state machine для чек-апа и несколько production-граблей, о которых лучше узнать до публикации в стор. Мне лень, но интересно
https://habr.com/ru/articles/1048094/
#React_Native #Expo #Android #TypeScript #шагомер #Pedometer #TYPE_STEP_COUNTER #background_tasks #локальные_уведомления #Zustand
-
Как я завёл нормальный голос в детское приложение, не разорившись и не заставив никого лезть в настройки
Я в одиночку делаю детское приложение, где дети учат английский через рисование: рисуют слова, а оно распознаёт рисунок и отвечает голосом. В MVP голос был системный — бесплатный, но звучит как робот из нулевых, пока сам не зайдёшь в настройки и не докачаешь нормальный. Я сделал модалку с инструкцией. Угадайте, сколько людей ей воспользовались. Короче, примерно никто. Значит, хороший голос должен достаться всем сразу, без единого телодвижения юзера. И при этом дёшево — причём не только по деньгам. Рассказываю, как я завёл озвучку через ElevenLabs так, что в проде она почти ничего не стоит, работает офлайн и отвечает мгновенно. Ключ оказался в одном наблюдении: всё, что приложение когда-либо скажет, известно заранее. А ещё — почему, когда ты соло и кодишь в паре с агентом, главные проверки в пайплайне работают за ту команду, которой у тебя нет. Как это устроено
https://habr.com/ru/articles/1047888/
#TTS #ElevenLabs #React_Native #Expo #Cloudflare_Workers #детские_приложения #ONNX #TDD #AIразработка #Claude_Code
-
Как я завёл нормальный голос в детское приложение, не разорившись и не заставив никого лезть в настройки
Я в одиночку делаю детское приложение, где дети учат английский через рисование: рисуют слова, а оно распознаёт рисунок и отвечает голосом. В MVP голос был системный — бесплатный, но звучит как робот из нулевых, пока сам не зайдёшь в настройки и не докачаешь нормальный. Я сделал модалку с инструкцией. Угадайте, сколько людей ей воспользовались. Короче, примерно никто. Значит, хороший голос должен достаться всем сразу, без единого телодвижения юзера. И при этом дёшево — причём не только по деньгам. Рассказываю, как я завёл озвучку через ElevenLabs так, что в проде она почти ничего не стоит, работает офлайн и отвечает мгновенно. Ключ оказался в одном наблюдении: всё, что приложение когда-либо скажет, известно заранее. А ещё — почему, когда ты соло и кодишь в паре с агентом, главные проверки в пайплайне работают за ту команду, которой у тебя нет. Как это устроено
https://habr.com/ru/articles/1047888/
#TTS #ElevenLabs #React_Native #Expo #Cloudflare_Workers #детские_приложения #ONNX #TDD #AIразработка #Claude_Code
-
Как я завёл нормальный голос в детское приложение, не разорившись и не заставив никого лезть в настройки
Я в одиночку делаю детское приложение, где дети учат английский через рисование: рисуют слова, а оно распознаёт рисунок и отвечает голосом. В MVP голос был системный — бесплатный, но звучит как робот из нулевых, пока сам не зайдёшь в настройки и не докачаешь нормальный. Я сделал модалку с инструкцией. Угадайте, сколько людей ей воспользовались. Короче, примерно никто. Значит, хороший голос должен достаться всем сразу, без единого телодвижения юзера. И при этом дёшево — причём не только по деньгам. Рассказываю, как я завёл озвучку через ElevenLabs так, что в проде она почти ничего не стоит, работает офлайн и отвечает мгновенно. Ключ оказался в одном наблюдении: всё, что приложение когда-либо скажет, известно заранее. А ещё — почему, когда ты соло и кодишь в паре с агентом, главные проверки в пайплайне работают за ту команду, которой у тебя нет. Как это устроено
https://habr.com/ru/articles/1047888/
#TTS #ElevenLabs #React_Native #Expo #Cloudflare_Workers #детские_приложения #ONNX #TDD #AIразработка #Claude_Code
-
GamFree: как я в одиночку сделал приложение против лудомании — без бэкенда, аккаунтов и подписок
Привет, Хабр. Это история о том, как я делал ставки 7 лет, потом бросил, а потом написал приложение, которое помогло бы мне бросить раньше. Расскажу и про продуктовые решения, и про техническую часть: React Native + Expo, полностью офлайн-архитектура без бэкенда, шесть языков, и как сейчас выглядит публикация в Google Play для нового индивидуального аккаунта разработчика.
https://habr.com/ru/articles/1045402/
#react_native #expo #google_play #мобильная_разработка #лудомания #зависимость #petпроект #солоразработка
-
GamFree: как я в одиночку сделал приложение против лудомании — без бэкенда, аккаунтов и подписок
Привет, Хабр. Это история о том, как я делал ставки 7 лет, потом бросил, а потом написал приложение, которое помогло бы мне бросить раньше. Расскажу и про продуктовые решения, и про техническую часть: React Native + Expo, полностью офлайн-архитектура без бэкенда, шесть языков, и как сейчас выглядит публикация в Google Play для нового индивидуального аккаунта разработчика.
https://habr.com/ru/articles/1045402/
#react_native #expo #google_play #мобильная_разработка #лудомания #зависимость #petпроект #солоразработка
-
GamFree: как я в одиночку сделал приложение против лудомании — без бэкенда, аккаунтов и подписок
Привет, Хабр. Это история о том, как я делал ставки 7 лет, потом бросил, а потом написал приложение, которое помогло бы мне бросить раньше. Расскажу и про продуктовые решения, и про техническую часть: React Native + Expo, полностью офлайн-архитектура без бэкенда, шесть языков, и как сейчас выглядит публикация в Google Play для нового индивидуального аккаунта разработчика.
https://habr.com/ru/articles/1045402/
#react_native #expo #google_play #мобильная_разработка #лудомания #зависимость #petпроект #солоразработка
-
Я засунул таск-трекер, голосования с кворумом и AI, следящего за экранами сотрудников, в один мессенджер
Звучит как мем про стартап, который пытается быть всем сразу. Я сам так думал примерно до середины разработки. Но в итоге мы это собрали, выкатили в App Store и Google Play, и теперь команды реально ведут в этом проекты. Расскажу, как оно устроено внутри, что было тупо, что неожиданно сработало, и где я до сих пор не уверен, что мы поступили правильно. Сразу оговорюсь: это не «убийца Jira» и не «убийца Slack». Это попытка убрать одну конкретную боль, на которую я смотрел несколько лет.
https://habr.com/ru/articles/1040886/
#ONEMIX #корпоративный_мессенджер #тасктрекер #управление_проектами #OTIF #голосование #иерархия_задач #AIдиректор #сквозное_шифрование #React_Native
-
Я засунул таск-трекер, голосования с кворумом и AI, следящего за экранами сотрудников, в один мессенджер
Звучит как мем про стартап, который пытается быть всем сразу. Я сам так думал примерно до середины разработки. Но в итоге мы это собрали, выкатили в App Store и Google Play, и теперь команды реально ведут в этом проекты. Расскажу, как оно устроено внутри, что было тупо, что неожиданно сработало, и где я до сих пор не уверен, что мы поступили правильно. Сразу оговорюсь: это не «убийца Jira» и не «убийца Slack». Это попытка убрать одну конкретную боль, на которую я смотрел несколько лет.
https://habr.com/ru/articles/1040886/
#ONEMIX #корпоративный_мессенджер #тасктрекер #управление_проектами #OTIF #голосование #иерархия_задач #AIдиректор #сквозное_шифрование #React_Native
-
Я засунул таск-трекер, голосования с кворумом и AI, следящего за экранами сотрудников, в один мессенджер
Звучит как мем про стартап, который пытается быть всем сразу. Я сам так думал примерно до середины разработки. Но в итоге мы это собрали, выкатили в App Store и Google Play, и теперь команды реально ведут в этом проекты. Расскажу, как оно устроено внутри, что было тупо, что неожиданно сработало, и где я до сих пор не уверен, что мы поступили правильно. Сразу оговорюсь: это не «убийца Jira» и не «убийца Slack». Это попытка убрать одну конкретную боль, на которую я смотрел несколько лет.
https://habr.com/ru/articles/1040886/
#ONEMIX #корпоративный_мессенджер #тасктрекер #управление_проектами #OTIF #голосование #иерархия_задач #AIдиректор #сквозное_шифрование #React_Native
-
AGENTS.md создавали, чтобы помогать агентам. Я использую его, чтобы их вычислять
Вместе с растущей AI-индустрией приходят и её побочки. Я мейнтейнер библиотеки react-native-tdlib и довольно быстро заметил: все больше PR выглядят как чистый вывод агента. Сначала я честно реагировал — писал в каждый такой PR вопросы: тестировали ли вы это, что именно меняет ваш код, зачем вот эта строчка. В какой-то момент понял, что трачу время на переписку с людьми, которые сами не знают, что написали. Первая мысль была — написать большой README или CONTRIBUTING и прямым текстом сказать: «сгенерированный код не принимаю». Но тут же упёрся в вопрос: а как доказать, что код сгенерирован? Аргумент «чую, тут пахнет Claude Code» — так себе позиция для публичного спора в комментариях к PR. Решение оказалось довольно простым — AGENTS.md . Он конечно не доказывает, что PR сгенерирован, но отлично ловит самые очевидные автоматические PR, где автор, кажется, вообще не участвовал в процессе.
https://habr.com/ru/articles/1038786/
#AGENTSmd #AIагенты #open_source #pull_request #спам #React_Native #GitHub_Actions #code_review #мейнтейнер #Claude_Code
-
AGENTS.md создавали, чтобы помогать агентам. Я использую его, чтобы их вычислять
Вместе с растущей AI-индустрией приходят и её побочки. Я мейнтейнер библиотеки react-native-tdlib и довольно быстро заметил: все больше PR выглядят как чистый вывод агента. Сначала я честно реагировал — писал в каждый такой PR вопросы: тестировали ли вы это, что именно меняет ваш код, зачем вот эта строчка. В какой-то момент понял, что трачу время на переписку с людьми, которые сами не знают, что написали. Первая мысль была — написать большой README или CONTRIBUTING и прямым текстом сказать: «сгенерированный код не принимаю». Но тут же упёрся в вопрос: а как доказать, что код сгенерирован? Аргумент «чую, тут пахнет Claude Code» — так себе позиция для публичного спора в комментариях к PR. Решение оказалось довольно простым — AGENTS.md . Он конечно не доказывает, что PR сгенерирован, но отлично ловит самые очевидные автоматические PR, где автор, кажется, вообще не участвовал в процессе.
https://habr.com/ru/articles/1038786/
#AGENTSmd #AIагенты #open_source #pull_request #спам #React_Native #GitHub_Actions #code_review #мейнтейнер #Claude_Code
-
AGENTS.md создавали, чтобы помогать агентам. Я использую его, чтобы их вычислять
Вместе с растущей AI-индустрией приходят и её побочки. Я мейнтейнер библиотеки react-native-tdlib и довольно быстро заметил: все больше PR выглядят как чистый вывод агента. Сначала я честно реагировал — писал в каждый такой PR вопросы: тестировали ли вы это, что именно меняет ваш код, зачем вот эта строчка. В какой-то момент понял, что трачу время на переписку с людьми, которые сами не знают, что написали. Первая мысль была — написать большой README или CONTRIBUTING и прямым текстом сказать: «сгенерированный код не принимаю». Но тут же упёрся в вопрос: а как доказать, что код сгенерирован? Аргумент «чую, тут пахнет Claude Code» — так себе позиция для публичного спора в комментариях к PR. Решение оказалось довольно простым — AGENTS.md . Он конечно не доказывает, что PR сгенерирован, но отлично ловит самые очевидные автоматические PR, где автор, кажется, вообще не участвовал в процессе.
https://habr.com/ru/articles/1038786/
#AGENTSmd #AIагенты #open_source #pull_request #спам #React_Native #GitHub_Actions #code_review #мейнтейнер #Claude_Code
-
От боли к npm install: TDLib для React-Native, или как я делал проект, а получилась библиотека
Пришла мне как-то идея сделать мобильное приложение на базе Telegram. Полез в npm и сразу нашёл react-native-telegram , но это оказалась обёртка над Bot API и тут я понял, что будет весело. У Telegram с инструментами для разработчиков в целом нормально — Bot API, MTProto, TDLib. Только под RN ничего нет и вряд ли когда-то будет, насколько я знаю уже есть популярные Telegram-клиенты на React-Native, но видимо они не стали упаковывать это в библиотеку и делиться опытом с народом. Кто пробовал запилить свой клиент Telegram на RN, тот знает, что без хороших навыков нативной разработки особо ничего не получится. В какой-то момент я устал мучиться с patch-package и кучей натива внутри RN проекта, поэтому решил, что пора это упаковать в либу. Через два года и одиннадцать релизов она оказалась в официальной документации TDLib .
https://habr.com/ru/articles/1038380/
#react_native #telegram #tdlib #разработка_мобильных_приложений #ios #android #open_source #typescript #npm #библиотека
-
От боли к npm install: TDLib для React-Native, или как я делал проект, а получилась библиотека
Пришла мне как-то идея сделать мобильное приложение на базе Telegram. Полез в npm и сразу нашёл react-native-telegram , но это оказалась обёртка над Bot API и тут я понял, что будет весело. У Telegram с инструментами для разработчиков в целом нормально — Bot API, MTProto, TDLib. Только под RN ничего нет и вряд ли когда-то будет, насколько я знаю уже есть популярные Telegram-клиенты на React-Native, но видимо они не стали упаковывать это в библиотеку и делиться опытом с народом. Кто пробовал запилить свой клиент Telegram на RN, тот знает, что без хороших навыков нативной разработки особо ничего не получится. В какой-то момент я устал мучиться с patch-package и кучей натива внутри RN проекта, поэтому решил, что пора это упаковать в либу. Через два года и одиннадцать релизов она оказалась в официальной документации TDLib .
https://habr.com/ru/articles/1038380/
#react_native #telegram #tdlib #разработка_мобильных_приложений #ios #android #open_source #typescript #npm #библиотека
-
От боли к npm install: TDLib для React-Native, или как я делал проект, а получилась библиотека
Пришла мне как-то идея сделать мобильное приложение на базе Telegram. Полез в npm и сразу нашёл react-native-telegram , но это оказалась обёртка над Bot API и тут я понял, что будет весело. У Telegram с инструментами для разработчиков в целом нормально — Bot API, MTProto, TDLib. Только под RN ничего нет и вряд ли когда-то будет, насколько я знаю уже есть популярные Telegram-клиенты на React-Native, но видимо они не стали упаковывать это в библиотеку и делиться опытом с народом. Кто пробовал запилить свой клиент Telegram на RN, тот знает, что без хороших навыков нативной разработки особо ничего не получится. В какой-то момент я устал мучиться с patch-package и кучей натива внутри RN проекта, поэтому решил, что пора это упаковать в либу. Через два года и одиннадцать релизов она оказалась в официальной документации TDLib .
https://habr.com/ru/articles/1038380/
#react_native #telegram #tdlib #разработка_мобильных_приложений #ios #android #open_source #typescript #npm #библиотека
-
Push-уведомления в мессенджере: production-грабли которых нет в туториалах
Это девятая статья про инженерные решения в ONEMIX. Тема узкая, push-уведомления. Но я её давно хотел разобрать, потому что туториалов в интернете много, а production-граблей в них почти нет. Если коротко, туториал по push выглядит так. Регистрируешь токен через Notifications.getExpoPushTokenAsync() . Отправляешь на бэкенд. Когда приходит пуш — addNotificationResponseReceivedListener ловит тап, навигируешь в нужный экран. Всё. В реальном мессенджере таких туториалов недостаточно. Появляется десяток узких проблем. Пуш приходит когда юзер уже в этом чате. Пуш приходит когда приложение убито системой. Navigation после открытия из пуша добавляет дублирующийся экран в стек. На iOS звонки идут через отдельный канал VoIP который требует совершенно другой инфраструктуры. Эти грабли я и разберу.
https://habr.com/ru/articles/1035992/
#react_native #push_notifications #expo #fcm #apns #callkit #voip #мессенджер #мобильная_разработка #deep_linking
-
Push-уведомления в мессенджере: production-грабли которых нет в туториалах
Это девятая статья про инженерные решения в ONEMIX. Тема узкая, push-уведомления. Но я её давно хотел разобрать, потому что туториалов в интернете много, а production-граблей в них почти нет. Если коротко, туториал по push выглядит так. Регистрируешь токен через Notifications.getExpoPushTokenAsync() . Отправляешь на бэкенд. Когда приходит пуш — addNotificationResponseReceivedListener ловит тап, навигируешь в нужный экран. Всё. В реальном мессенджере таких туториалов недостаточно. Появляется десяток узких проблем. Пуш приходит когда юзер уже в этом чате. Пуш приходит когда приложение убито системой. Navigation после открытия из пуша добавляет дублирующийся экран в стек. На iOS звонки идут через отдельный канал VoIP который требует совершенно другой инфраструктуры. Эти грабли я и разберу.
https://habr.com/ru/articles/1035992/
#react_native #push_notifications #expo #fcm #apns #callkit #voip #мессенджер #мобильная_разработка #deep_linking
-
Push-уведомления в мессенджере: production-грабли которых нет в туториалах
Это девятая статья про инженерные решения в ONEMIX. Тема узкая, push-уведомления. Но я её давно хотел разобрать, потому что туториалов в интернете много, а production-граблей в них почти нет. Если коротко, туториал по push выглядит так. Регистрируешь токен через Notifications.getExpoPushTokenAsync() . Отправляешь на бэкенд. Когда приходит пуш — addNotificationResponseReceivedListener ловит тап, навигируешь в нужный экран. Всё. В реальном мессенджере таких туториалов недостаточно. Появляется десяток узких проблем. Пуш приходит когда юзер уже в этом чате. Пуш приходит когда приложение убито системой. Navigation после открытия из пуша добавляет дублирующийся экран в стек. На iOS звонки идут через отдельный канал VoIP который требует совершенно другой инфраструктуры. Эти грабли я и разберу.
https://habr.com/ru/articles/1035992/
#react_native #push_notifications #expo #fcm #apns #callkit #voip #мессенджер #мобильная_разработка #deep_linking
-
Outbox-паттерн для мобильного мессенджера: как Telegram не теряет сообщения и почему ваш код их теряет
Это седьмая статья про инженерные решения в ONEMIX. Тема узкая, но болезненная для каждого кто делал мобильное приложение с отправкой сообщений или файлов. Сценарий с которого всё началось у меня. Пользователь в чате выбирает большое видео, нажимает отправить. Видео начинает грузиться. Пользователь нетерпеливый, прокручивает вверх посмотреть переписку, потом переходит в другой чат, потом возвращается. Что должен он увидеть? В Telegram он увидит свой видео-бабл с прогрессбаром, как и оставил. В большинстве самописных мессенджеров он увидит пустой чат без своего сообщения , потому что upload жил в state экрана, а экран размонтировался. XHR продолжал работать в фоне, файл загрузился на сервер, но результат пришёл в null, потому что setter уже не существует. Сообщение фактически отправлено, но пользователь об этом не знает. Это боль которая лечится не "правильным useState", а отдельным архитектурным слоем . Этот слой называется outbox. В этой статье разберу свою реализацию из ONEMIX, это 820 строк TypeScript которые делают то что в Telegram кажется естественным.
https://habr.com/ru/articles/1034690/
#react_native #мессенджер #optimistic_update #outbox #мобильная_разработка #архитектура #telegram #асинхронность #обработка_ошибок #retry
-
Outbox-паттерн для мобильного мессенджера: как Telegram не теряет сообщения и почему ваш код их теряет
Это седьмая статья про инженерные решения в ONEMIX. Тема узкая, но болезненная для каждого кто делал мобильное приложение с отправкой сообщений или файлов. Сценарий с которого всё началось у меня. Пользователь в чате выбирает большое видео, нажимает отправить. Видео начинает грузиться. Пользователь нетерпеливый, прокручивает вверх посмотреть переписку, потом переходит в другой чат, потом возвращается. Что должен он увидеть? В Telegram он увидит свой видео-бабл с прогрессбаром, как и оставил. В большинстве самописных мессенджеров он увидит пустой чат без своего сообщения , потому что upload жил в state экрана, а экран размонтировался. XHR продолжал работать в фоне, файл загрузился на сервер, но результат пришёл в null, потому что setter уже не существует. Сообщение фактически отправлено, но пользователь об этом не знает. Это боль которая лечится не "правильным useState", а отдельным архитектурным слоем . Этот слой называется outbox. В этой статье разберу свою реализацию из ONEMIX, это 820 строк TypeScript которые делают то что в Telegram кажется естественным.
https://habr.com/ru/articles/1034690/
#react_native #мессенджер #optimistic_update #outbox #мобильная_разработка #архитектура #telegram #асинхронность #обработка_ошибок #retry
-
Outbox-паттерн для мобильного мессенджера: как Telegram не теряет сообщения и почему ваш код их теряет
Это седьмая статья про инженерные решения в ONEMIX. Тема узкая, но болезненная для каждого кто делал мобильное приложение с отправкой сообщений или файлов. Сценарий с которого всё началось у меня. Пользователь в чате выбирает большое видео, нажимает отправить. Видео начинает грузиться. Пользователь нетерпеливый, прокручивает вверх посмотреть переписку, потом переходит в другой чат, потом возвращается. Что должен он увидеть? В Telegram он увидит свой видео-бабл с прогрессбаром, как и оставил. В большинстве самописных мессенджеров он увидит пустой чат без своего сообщения , потому что upload жил в state экрана, а экран размонтировался. XHR продолжал работать в фоне, файл загрузился на сервер, но результат пришёл в null, потому что setter уже не существует. Сообщение фактически отправлено, но пользователь об этом не знает. Это боль которая лечится не "правильным useState", а отдельным архитектурным слоем . Этот слой называется outbox. В этой статье разберу свою реализацию из ONEMIX, это 820 строк TypeScript которые делают то что в Telegram кажется естественным.
https://habr.com/ru/articles/1034690/
#react_native #мессенджер #optimistic_update #outbox #мобильная_разработка #архитектура #telegram #асинхронность #обработка_ошибок #retry
-
Как я сделал групповые звонки в React Native мессенджере: WebRTC, CallKit и грабли production'а
Это третья статья из серии про инженерные решения в ONEMIX — моём мессенджере на React Native. В первой я разбирал трёхуровневый кэш сообщений, во второй — реализацию Double Ratchet E2E. Сегодня — про звонки. Звонки в мессенджере — это та функция, которая работает либо отлично, либо никак. Пользователь привык что WhatsApp/Telegram звонят мгновенно, показывают входящие на заблокированном экране, переживают переключения Wi-Fi/LTE, и работают из фона. Если твоя реализация делает хоть что-то из этого хуже — пользователь это сразу заметит и переключится на "нормальный" мессенджер. Я потратил несколько месяцев на то чтобы довести звонки в ONEMIX до production-уровня. В процессе пришлось изучить WebRTC изнутри, разобраться с iOS CallKit и VoIP push notifications, и собрать десяток граблей которые в туториалах не упоминают. В этой статье — как это устроено, какие решения оказались критичными, и что бы я сделал по-другому. Сразу оговорка. Я не использую готовые SDK типа Agora, Twilio, 100ms. У них отличное качество и поддержка, но они не дают полного контроля над процессом — а для мессенджера контроль критичен. Когда звонок не проходит, пользователь винит приложение, а не "SDK от третьей стороны". Плюс готовые SDK стоят денег, которые на раннем этапе продукта лучше направить в другие места.
https://habr.com/ru/articles/1033930/
#webrtc #react_native #livekit #callkit #voip_push_notifications #trickle_ice #мобильная_разработка #звонки #мессенджер
-
Как я сделал групповые звонки в React Native мессенджере: WebRTC, CallKit и грабли production'а
Это третья статья из серии про инженерные решения в ONEMIX — моём мессенджере на React Native. В первой я разбирал трёхуровневый кэш сообщений, во второй — реализацию Double Ratchet E2E. Сегодня — про звонки. Звонки в мессенджере — это та функция, которая работает либо отлично, либо никак. Пользователь привык что WhatsApp/Telegram звонят мгновенно, показывают входящие на заблокированном экране, переживают переключения Wi-Fi/LTE, и работают из фона. Если твоя реализация делает хоть что-то из этого хуже — пользователь это сразу заметит и переключится на "нормальный" мессенджер. Я потратил несколько месяцев на то чтобы довести звонки в ONEMIX до production-уровня. В процессе пришлось изучить WebRTC изнутри, разобраться с iOS CallKit и VoIP push notifications, и собрать десяток граблей которые в туториалах не упоминают. В этой статье — как это устроено, какие решения оказались критичными, и что бы я сделал по-другому. Сразу оговорка. Я не использую готовые SDK типа Agora, Twilio, 100ms. У них отличное качество и поддержка, но они не дают полного контроля над процессом — а для мессенджера контроль критичен. Когда звонок не проходит, пользователь винит приложение, а не "SDK от третьей стороны". Плюс готовые SDK стоят денег, которые на раннем этапе продукта лучше направить в другие места.
https://habr.com/ru/articles/1033930/
#webrtc #react_native #livekit #callkit #voip_push_notifications #trickle_ice #мобильная_разработка #звонки #мессенджер
-
Как я сделал групповые звонки в React Native мессенджере: WebRTC, CallKit и грабли production'а
Это третья статья из серии про инженерные решения в ONEMIX — моём мессенджере на React Native. В первой я разбирал трёхуровневый кэш сообщений, во второй — реализацию Double Ratchet E2E. Сегодня — про звонки. Звонки в мессенджере — это та функция, которая работает либо отлично, либо никак. Пользователь привык что WhatsApp/Telegram звонят мгновенно, показывают входящие на заблокированном экране, переживают переключения Wi-Fi/LTE, и работают из фона. Если твоя реализация делает хоть что-то из этого хуже — пользователь это сразу заметит и переключится на "нормальный" мессенджер. Я потратил несколько месяцев на то чтобы довести звонки в ONEMIX до production-уровня. В процессе пришлось изучить WebRTC изнутри, разобраться с iOS CallKit и VoIP push notifications, и собрать десяток граблей которые в туториалах не упоминают. В этой статье — как это устроено, какие решения оказались критичными, и что бы я сделал по-другому. Сразу оговорка. Я не использую готовые SDK типа Agora, Twilio, 100ms. У них отличное качество и поддержка, но они не дают полного контроля над процессом — а для мессенджера контроль критичен. Когда звонок не проходит, пользователь винит приложение, а не "SDK от третьей стороны". Плюс готовые SDK стоят денег, которые на раннем этапе продукта лучше направить в другие места.
https://habr.com/ru/articles/1033930/
#webrtc #react_native #livekit #callkit #voip_push_notifications #trickle_ice #мобильная_разработка #звонки #мессенджер
-
Я реализовал Double Ratchet в React Native мессенджере. Разбор протокола и кода
В прошлой статье про трёхуровневый кэш сообщений я уже упоминал, что делаю мессенджер ONEMIX на React Native. Базовое E2E у меня было простое: ECDH P-256 для обмена ключами при первом контакте, AES-GCM для шифрования каждого сообщения общим секретом. Это работает, но имеет одну проблему: общий секрет один на всю переписку . Если у одной из сторон скомпрометируют приватный ключ — все сообщения за всё время превращаются в открытый текст. Это называется отсутствием Perfect Forward Secrecy (PFS). И это значит, что человек, к которому в руки попадёт твой телефон через год, может прочитать переписку из прошлого года. WhatsApp, Signal, и серьёзные части Telegram давно используют другую схему — Double Ratchet — которая ключи переизбретает заново на каждом сообщении. Так делают потому, что любой ключ компрометируется в один момент времени, и компрометация не должна давать доступа ни к прошлому, ни к будущему. Я реализовал Double Ratchet с нуля для ONEMIX. В этой статье разберу:
https://habr.com/ru/articles/1033830/
#double_ratchet #signal_protocol #e2e #endtoend_encryption #react_native #криптография #мессенджер #ecdh #hkdf #web_crypto_api
-
Я реализовал Double Ratchet в React Native мессенджере. Разбор протокола и кода
В прошлой статье про трёхуровневый кэш сообщений я уже упоминал, что делаю мессенджер ONEMIX на React Native. Базовое E2E у меня было простое: ECDH P-256 для обмена ключами при первом контакте, AES-GCM для шифрования каждого сообщения общим секретом. Это работает, но имеет одну проблему: общий секрет один на всю переписку . Если у одной из сторон скомпрометируют приватный ключ — все сообщения за всё время превращаются в открытый текст. Это называется отсутствием Perfect Forward Secrecy (PFS). И это значит, что человек, к которому в руки попадёт твой телефон через год, может прочитать переписку из прошлого года. WhatsApp, Signal, и серьёзные части Telegram давно используют другую схему — Double Ratchet — которая ключи переизбретает заново на каждом сообщении. Так делают потому, что любой ключ компрометируется в один момент времени, и компрометация не должна давать доступа ни к прошлому, ни к будущему. Я реализовал Double Ratchet с нуля для ONEMIX. В этой статье разберу:
https://habr.com/ru/articles/1033830/
#double_ratchet #signal_protocol #e2e #endtoend_encryption #react_native #криптография #мессенджер #ecdh #hkdf #web_crypto_api
-
Я реализовал Double Ratchet в React Native мессенджере. Разбор протокола и кода
В прошлой статье про трёхуровневый кэш сообщений я уже упоминал, что делаю мессенджер ONEMIX на React Native. Базовое E2E у меня было простое: ECDH P-256 для обмена ключами при первом контакте, AES-GCM для шифрования каждого сообщения общим секретом. Это работает, но имеет одну проблему: общий секрет один на всю переписку . Если у одной из сторон скомпрометируют приватный ключ — все сообщения за всё время превращаются в открытый текст. Это называется отсутствием Perfect Forward Secrecy (PFS). И это значит, что человек, к которому в руки попадёт твой телефон через год, может прочитать переписку из прошлого года. WhatsApp, Signal, и серьёзные части Telegram давно используют другую схему — Double Ratchet — которая ключи переизбретает заново на каждом сообщении. Так делают потому, что любой ключ компрометируется в один момент времени, и компрометация не должна давать доступа ни к прошлому, ни к будущему. Я реализовал Double Ratchet с нуля для ONEMIX. В этой статье разберу:
https://habr.com/ru/articles/1033830/
#double_ratchet #signal_protocol #e2e #endtoend_encryption #react_native #криптография #мессенджер #ecdh #hkdf #web_crypto_api
-
Как я сделал трёхуровневый кэш сообщений в мессенджере на React Native — и что узнал по дороге
Я делаю мессенджер ONEMIX на React Native. К моменту, когда я начал писать этот пост, в нём уже больше десятка экранов, групповые WebRTC-звонки через LiveKit, E2E на Double Ratchet + Sealed Sender, push-нотификации с cold-start навигацией и десктоп-версия на Electron. Но самым важным куском, который определяет ощущение от приложения, оказался не звук и не видео. А то, насколько быстро открывается чат. Если вы хоть раз делали список сообщений на React Native, вы знаете эту боль: открыл чат — пустой экран на 200–800 мс, потом подгрузка, потом скачок при докрутке наверх. В Telegram такого не бывает: открыл — мгновенно увидел последние сообщения, прокрутил наверх — никаких пустот, история идёт сплошной лентой. Я разбирался с этим несколько месяцев. В итоге пришёл к трёхуровневой архитектуре кэша, которую и хочу разобрать. Это не теория — это код, который сейчас работает в продакшне. Покажу как реализовано, какие были тупики и какие решения оказались критичными.
https://habr.com/ru/articles/1033502/
#react_native #sqlite #кэширование #expo #мессенджер #drizzle_orm #мобильная_разработка #производительность #архитектура #telegram
-
Как я сделал трёхуровневый кэш сообщений в мессенджере на React Native — и что узнал по дороге
Я делаю мессенджер ONEMIX на React Native. К моменту, когда я начал писать этот пост, в нём уже больше десятка экранов, групповые WebRTC-звонки через LiveKit, E2E на Double Ratchet + Sealed Sender, push-нотификации с cold-start навигацией и десктоп-версия на Electron. Но самым важным куском, который определяет ощущение от приложения, оказался не звук и не видео. А то, насколько быстро открывается чат. Если вы хоть раз делали список сообщений на React Native, вы знаете эту боль: открыл чат — пустой экран на 200–800 мс, потом подгрузка, потом скачок при докрутке наверх. В Telegram такого не бывает: открыл — мгновенно увидел последние сообщения, прокрутил наверх — никаких пустот, история идёт сплошной лентой. Я разбирался с этим несколько месяцев. В итоге пришёл к трёхуровневой архитектуре кэша, которую и хочу разобрать. Это не теория — это код, который сейчас работает в продакшне. Покажу как реализовано, какие были тупики и какие решения оказались критичными.
https://habr.com/ru/articles/1033502/
#react_native #sqlite #кэширование #expo #мессенджер #drizzle_orm #мобильная_разработка #производительность #архитектура #telegram
-
Как я сделал трёхуровневый кэш сообщений в мессенджере на React Native — и что узнал по дороге
Я делаю мессенджер ONEMIX на React Native. К моменту, когда я начал писать этот пост, в нём уже больше десятка экранов, групповые WebRTC-звонки через LiveKit, E2E на Double Ratchet + Sealed Sender, push-нотификации с cold-start навигацией и десктоп-версия на Electron. Но самым важным куском, который определяет ощущение от приложения, оказался не звук и не видео. А то, насколько быстро открывается чат. Если вы хоть раз делали список сообщений на React Native, вы знаете эту боль: открыл чат — пустой экран на 200–800 мс, потом подгрузка, потом скачок при докрутке наверх. В Telegram такого не бывает: открыл — мгновенно увидел последние сообщения, прокрутил наверх — никаких пустот, история идёт сплошной лентой. Я разбирался с этим несколько месяцев. В итоге пришёл к трёхуровневой архитектуре кэша, которую и хочу разобрать. Это не теория — это код, который сейчас работает в продакшне. Покажу как реализовано, какие были тупики и какие решения оказались критичными.
https://habr.com/ru/articles/1033502/
#react_native #sqlite #кэширование #expo #мессенджер #drizzle_orm #мобильная_разработка #производительность #архитектура #telegram
-
Хроники Облачного княжества: как я приручал монолит‑дракона
Часть 1. Когда я шёл в DevOps, я думал, что буду приручать серверы. Оказалось — людей, процессы и древнего дракона по имени Легаси. Я пришёл в Башню релизов ровно в девять ноль‑ноль — как человек, который ещё верит в расписание. Башня стояла на холме, укрытая облаками и корпоративными ценностями. Над входом висел герб: три кольца, перечёркнутые молнией, и девиз, вырезанный на граните так, чтобы его невозможно было отрефакторить: «Не деплой в пятницу». Внутри меня встретила девушка в мантии, похожей на худи с капюшоном, и сказала:
https://habr.com/ru/articles/1022326/
#React_Native #стартап #мобильное_приложение #поиск_команды #хакатоны #нетворкинг #frontend
-
Хроники Облачного княжества: как я приручал монолит‑дракона
Часть 1. Когда я шёл в DevOps, я думал, что буду приручать серверы. Оказалось — людей, процессы и древнего дракона по имени Легаси. Я пришёл в Башню релизов ровно в девять ноль‑ноль — как человек, который ещё верит в расписание. Башня стояла на холме, укрытая облаками и корпоративными ценностями. Над входом висел герб: три кольца, перечёркнутые молнией, и девиз, вырезанный на граните так, чтобы его невозможно было отрефакторить: «Не деплой в пятницу». Внутри меня встретила девушка в мантии, похожей на худи с капюшоном, и сказала:
https://habr.com/ru/articles/1022326/
#React_Native #стартап #мобильное_приложение #поиск_команды #хакатоны #нетворкинг #frontend
-
Хроники Облачного княжества: как я приручал монолит‑дракона
Часть 1. Когда я шёл в DevOps, я думал, что буду приручать серверы. Оказалось — людей, процессы и древнего дракона по имени Легаси. Я пришёл в Башню релизов ровно в девять ноль‑ноль — как человек, который ещё верит в расписание. Башня стояла на холме, укрытая облаками и корпоративными ценностями. Над входом висел герб: три кольца, перечёркнутые молнией, и девиз, вырезанный на граните так, чтобы его невозможно было отрефакторить: «Не деплой в пятницу». Внутри меня встретила девушка в мантии, похожей на худи с капюшоном, и сказала:
https://habr.com/ru/articles/1022326/
#React_Native #стартап #мобильное_приложение #поиск_команды #хакатоны #нетворкинг #frontend
-
[Перевод] Ключ от всех дверей: как я взломал все электросамокаты одного производителя
Несколько лет назад я решил купить электросамокат, чтобы ездить на работу. Я уже какое-то время пользовался прокатом самокатов, но устал от необходимости «охоты» на них или отсутствия их рядом с домом, когда мне нужно было ехать в офис. Мой выбор остановился на Äike T. Не потому, что он оказался лучше других самокатов: на самом деле, его цена была даже выше других, и в этом ценовом сегменте рынка явно имелись скутеры с более высокими параметрами. Однако я выбрал Äike, потому что его производили в моей стране, а мне нравится по возможности поддерживать местные компании. Äike («молния» на эстонском) был спроектирован и изготавливался в Эстонии, прямо в Таллине. Насколько я могу судить, разработчики использовали не так много стандартных компонентов. Конструкция была разработана с нуля, модуль IoT и аккумуляторные блоки тоже производили локально, и так далее. Нельзя сказать, что это однозначно лучше, ведь при этом усложняется обслуживание самоката, но сам продукт мне показался амбициозным. Ещё одной причиной покупки стало то, что у производителя была сестринская компания Tuul («ветер» на эстонском), занимавшаяся прокатом электросамокатов. Это тоже были скутеры Äike, и из всех конкурентов мне больше всего нравились Tuul/Äike, поэтому я по возможности пользовался их прокатом. В прошлом году компания Äike обанкротилась . В будущем это не предвещало ничего хорошего: станет всё сложнее находить запчасти, ведь они были нестандартными. Но возникли у меня и более актуальные опасения, связанные с возможностью пользоваться самокатом. У него нет ручной функции включения/отключения. Для включения и выключения, открывания аккумуляторного отсека, переключения в режим транспорта и так далее необходимо было приложение.
https://habr.com/ru/companies/ruvds/articles/1012440/
#internet_of_things #iot #электросамокаты #react_native #ruvds_перевод
-
[Перевод] Ключ от всех дверей: как я взломал все электросамокаты одного производителя
Несколько лет назад я решил купить электросамокат, чтобы ездить на работу. Я уже какое-то время пользовался прокатом самокатов, но устал от необходимости «охоты» на них или отсутствия их рядом с домом, когда мне нужно было ехать в офис. Мой выбор остановился на Äike T. Не потому, что он оказался лучше других самокатов: на самом деле, его цена была даже выше других, и в этом ценовом сегменте рынка явно имелись скутеры с более высокими параметрами. Однако я выбрал Äike, потому что его производили в моей стране, а мне нравится по возможности поддерживать местные компании. Äike («молния» на эстонском) был спроектирован и изготавливался в Эстонии, прямо в Таллине. Насколько я могу судить, разработчики использовали не так много стандартных компонентов. Конструкция была разработана с нуля, модуль IoT и аккумуляторные блоки тоже производили локально, и так далее. Нельзя сказать, что это однозначно лучше, ведь при этом усложняется обслуживание самоката, но сам продукт мне показался амбициозным. Ещё одной причиной покупки стало то, что у производителя была сестринская компания Tuul («ветер» на эстонском), занимавшаяся прокатом электросамокатов. Это тоже были скутеры Äike, и из всех конкурентов мне больше всего нравились Tuul/Äike, поэтому я по возможности пользовался их прокатом. В прошлом году компания Äike обанкротилась . В будущем это не предвещало ничего хорошего: станет всё сложнее находить запчасти, ведь они были нестандартными. Но возникли у меня и более актуальные опасения, связанные с возможностью пользоваться самокатом. У него нет ручной функции включения/отключения. Для включения и выключения, открывания аккумуляторного отсека, переключения в режим транспорта и так далее необходимо было приложение.
https://habr.com/ru/companies/ruvds/articles/1012440/
#internet_of_things #iot #электросамокаты #react_native #ruvds_перевод
-
[Перевод] Ключ от всех дверей: как я взломал все электросамокаты одного производителя
Несколько лет назад я решил купить электросамокат, чтобы ездить на работу. Я уже какое-то время пользовался прокатом самокатов, но устал от необходимости «охоты» на них или отсутствия их рядом с домом, когда мне нужно было ехать в офис. Мой выбор остановился на Äike T. Не потому, что он оказался лучше других самокатов: на самом деле, его цена была даже выше других, и в этом ценовом сегменте рынка явно имелись скутеры с более высокими параметрами. Однако я выбрал Äike, потому что его производили в моей стране, а мне нравится по возможности поддерживать местные компании. Äike («молния» на эстонском) был спроектирован и изготавливался в Эстонии, прямо в Таллине. Насколько я могу судить, разработчики использовали не так много стандартных компонентов. Конструкция была разработана с нуля, модуль IoT и аккумуляторные блоки тоже производили локально, и так далее. Нельзя сказать, что это однозначно лучше, ведь при этом усложняется обслуживание самоката, но сам продукт мне показался амбициозным. Ещё одной причиной покупки стало то, что у производителя была сестринская компания Tuul («ветер» на эстонском), занимавшаяся прокатом электросамокатов. Это тоже были скутеры Äike, и из всех конкурентов мне больше всего нравились Tuul/Äike, поэтому я по возможности пользовался их прокатом. В прошлом году компания Äike обанкротилась . В будущем это не предвещало ничего хорошего: станет всё сложнее находить запчасти, ведь они были нестандартными. Но возникли у меня и более актуальные опасения, связанные с возможностью пользоваться самокатом. У него нет ручной функции включения/отключения. Для включения и выключения, открывания аккумуляторного отсека, переключения в режим транспорта и так далее необходимо было приложение.
https://habr.com/ru/companies/ruvds/articles/1012440/
#internet_of_things #iot #электросамокаты #react_native #ruvds_перевод
-
Как мы написали React Native библиотеку для Яндекс Карт за два дня с Claude
Сначала коротко о том, зачем нам это было нужно. Мы в основном пилим решения для фудтеха, а для мобилок используем React Native (почему, рассказывали тут ). В одном из таких проектов (российская сеть ресторанов по франшизе) нам нужно было прикрутить Яндекс Карты. Изначально хотели взять либу react-native-yamap (респект тем, кто ее делал) — но как выяснилось, она работает только на старой архитектуре RN. После обновления до 0.76 версии, где Fabric стала использоваться по умолчанию, приложения на iOS начали падать: карта не рендерится, события не доходят до JS, приложение крашится при взаимодействии с картой и вот это вот всё. И судя по открытым тикетам, мы не одни, кто столкнулся с этой проблемой. Полезли искать, написал ли кто-то уже библиотеку под новую архитектуру — но либо таких людей нет, либо ни с кем не делятся. Спойлер: мы пока тоже не будем, ещё обкатываем либу на своих проектах — но уже сейчас хотим рассказать, как собрали новый пакет с помощью Claude Code за два дня.
https://habr.com/ru/articles/1004576/
#React_Native #Яндекс_Карты #Fabric #TurboModules #Codegen #Claude #iOS #Android #нативные_модули #новая_архитектура
-
Как мы написали React Native библиотеку для Яндекс Карт за два дня с Claude
Сначала коротко о том, зачем нам это было нужно. Мы в основном пилим решения для фудтеха, а для мобилок используем React Native (почему, рассказывали тут ). В одном из таких проектов (российская сеть ресторанов по франшизе) нам нужно было прикрутить Яндекс Карты. Изначально хотели взять либу react-native-yamap (респект тем, кто ее делал) — но как выяснилось, она работает только на старой архитектуре RN. После обновления до 0.76 версии, где Fabric стала использоваться по умолчанию, приложения на iOS начали падать: карта не рендерится, события не доходят до JS, приложение крашится при взаимодействии с картой и вот это вот всё. И судя по открытым тикетам, мы не одни, кто столкнулся с этой проблемой. Полезли искать, написал ли кто-то уже библиотеку под новую архитектуру — но либо таких людей нет, либо ни с кем не делятся. Спойлер: мы пока тоже не будем, ещё обкатываем либу на своих проектах — но уже сейчас хотим рассказать, как собрали новый пакет с помощью Claude Code за два дня.
https://habr.com/ru/articles/1004576/
#React_Native #Яндекс_Карты #Fabric #TurboModules #Codegen #Claude #iOS #Android #нативные_модули #новая_архитектура
-
Как мы написали React Native библиотеку для Яндекс Карт за два дня с Claude
Сначала коротко о том, зачем нам это было нужно. Мы в основном пилим решения для фудтеха, а для мобилок используем React Native (почему, рассказывали тут ). В одном из таких проектов (российская сеть ресторанов по франшизе) нам нужно было прикрутить Яндекс Карты. Изначально хотели взять либу react-native-yamap (респект тем, кто ее делал) — но как выяснилось, она работает только на старой архитектуре RN. После обновления до 0.76 версии, где Fabric стала использоваться по умолчанию, приложения на iOS начали падать: карта не рендерится, события не доходят до JS, приложение крашится при взаимодействии с картой и вот это вот всё. И судя по открытым тикетам, мы не одни, кто столкнулся с этой проблемой. Полезли искать, написал ли кто-то уже библиотеку под новую архитектуру — но либо таких людей нет, либо ни с кем не делятся. Спойлер: мы пока тоже не будем, ещё обкатываем либу на своих проектах — но уже сейчас хотим рассказать, как собрали новый пакет с помощью Claude Code за два дня.
https://habr.com/ru/articles/1004576/
#React_Native #Яндекс_Карты #Fabric #TurboModules #Codegen #Claude #iOS #Android #нативные_модули #новая_архитектура
-
Выставить приложение в плей маркет и быть заблокированным через месяц
Мы хотели запустить приложение в нише 18+ всего за неделю. Звучало как идеальный план, но на деле это вылилось в три года работы и вечный бан в Google Play. В статье я расскажу, как мы пытались обмануть систему, набивали шишки с React Native и в итоге заменили отдел маркетинга на скрипты в n8n. Это история о том, как потерять аккаунт разработчика, но все-таки построить прибыльный продукт
https://habr.com/ru/articles/993448/
#react #expo #react_native #мобильная_разработка #приложения_на_ios #приложения_на_андройд #дизайн_приложений #аналитика_приложений
-
Выставить приложение в плей маркет и быть заблокированным через месяц
Мы хотели запустить приложение в нише 18+ всего за неделю. Звучало как идеальный план, но на деле это вылилось в три года работы и вечный бан в Google Play. В статье я расскажу, как мы пытались обмануть систему, набивали шишки с React Native и в итоге заменили отдел маркетинга на скрипты в n8n. Это история о том, как потерять аккаунт разработчика, но все-таки построить прибыльный продукт
https://habr.com/ru/articles/993448/
#react #expo #react_native #мобильная_разработка #приложения_на_ios #приложения_на_андройд #дизайн_приложений #аналитика_приложений
-
Выставить приложение в плей маркет и быть заблокированным через месяц
Мы хотели запустить приложение в нише 18+ всего за неделю. Звучало как идеальный план, но на деле это вылилось в три года работы и вечный бан в Google Play. В статье я расскажу, как мы пытались обмануть систему, набивали шишки с React Native и в итоге заменили отдел маркетинга на скрипты в n8n. Это история о том, как потерять аккаунт разработчика, но все-таки построить прибыльный продукт
https://habr.com/ru/articles/993448/
#react #expo #react_native #мобильная_разработка #приложения_на_ios #приложения_на_андройд #дизайн_приложений #аналитика_приложений
-
React Native. Часть 2: Bare Workflow, Expo, стили и платформенные особенности
В первой части мы разобрали эволюцию архитектуры React Native. Теперь перейдем к практическим вопросам: как организован процесс разработки и какие платформенные особенности встретятся в работе. Процесс разработки Выбор между классическим подходом и Expo – одно из первых архитектурных решений в проекте. Разберем оба варианта. Bare React Native Процесс требует настройки окружения (Xcode для iOS, Android Studio для Android). В упрощенном виде процесс запуска приложения для разработки выглядит следующим образом:
https://habr.com/ru/articles/990818/
#React_Native #Expo #EAS #Стилизация #Мобильная_разработка #Bare
-
React Native. Часть 2: Bare Workflow, Expo, стили и платформенные особенности
В первой части мы разобрали эволюцию архитектуры React Native. Теперь перейдем к практическим вопросам: как организован процесс разработки и какие платформенные особенности встретятся в работе. Процесс разработки Выбор между классическим подходом и Expo – одно из первых архитектурных решений в проекте. Разберем оба варианта. Bare React Native Процесс требует настройки окружения (Xcode для iOS, Android Studio для Android). В упрощенном виде процесс запуска приложения для разработки выглядит следующим образом:
https://habr.com/ru/articles/990818/
#React_Native #Expo #EAS #Стилизация #Мобильная_разработка #Bare
-
React Native. Часть 2: Bare Workflow, Expo, стили и платформенные особенности
В первой части мы разобрали эволюцию архитектуры React Native. Теперь перейдем к практическим вопросам: как организован процесс разработки и какие платформенные особенности встретятся в работе. Процесс разработки Выбор между классическим подходом и Expo – одно из первых архитектурных решений в проекте. Разберем оба варианта. Bare React Native Процесс требует настройки окружения (Xcode для iOS, Android Studio для Android). В упрощенном виде процесс запуска приложения для разработки выглядит следующим образом:
https://habr.com/ru/articles/990818/
#React_Native #Expo #EAS #Стилизация #Мобильная_разработка #Bare