Pull to refresh
11
9.8
Юрий Петров @mrDevGo

Flutter Tech Lead

Send message

Установка обратного VPN: нет ничего проще

Level of difficultyEasy
Reading time5 min
Views33K


Сейчас многие граждане РФ, которые находятся за границей, испытывают проблемы с доступом к некоторым российским ресурсам. По каким-то причинам несколько десятков российских сайтов запрещают доступ с IP-адресов за пределами РФ.

К счастью, эту проблему довольно легко решить, если поднять свой сервер внутри РФ и перенаправить трафик через него. Это так называемый «обратный VPN».

В принципе, его можно организовать на любом компьютере на территории РФ, который постоянно находится в онлайне и подключён к местному провайдеру. Как вариант, заказать услугу VPS за полтора доллара — и поднять систему на внешнем хостинге. И всё, считайте, что вы виртуально переехали обратно в РФ.
Читать дальше →
Total votes 52: ↑47 and ↓5+42
Comments60

Ускорение инференса LLM

Level of difficultyMedium
Reading time13 min
Views7.2K

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

Меня зовут Роман Горб, я старший ML-разработчик в команде YandexGPT. Тема инференса LLM заинтересовала меня, потому что я занимался R&D в квантовании сеток для CV-задач. Сегодня я расскажу, как безболезненно увеличить скорость инференса. Сперва разберёмся, зачем это нужно, а потом рассмотрим разные методы ускорения и фреймворки, которые могут в этом помочь.

Ускоряемся
Total votes 31: ↑30.5 and ↓0.5+30
Comments9

Надежный обход блокировок в 2024: протоколы, клиенты и настройка сервера от простого к сложному

Level of difficultyMedium
Reading time45 min
Views144K

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

Вы, наверняка, помните отличный цикл статей на Хабре в прошлом году от пользователя MiraclePtr, который рассказывал о разных методах блокировок, о разных методах обхода блокировок, о разных клиентах и серверах для обходов блокировок, и о разных способах их настройки (раз, два, три, четыре, пять, шесть, семь, восемь, десять, десять, и вроде были еще другие), и можете спросить, а зачем еще одна? Есть две основные причины для этого.

Читать далее
Total votes 506: ↑498 and ↓8+490
Comments351

Шаг за шагом: Как интегрировать ChatGPT для ревью пулл-реквестов на GitHub с помощью GitHub Actions

Level of difficultyEasy
Reading time2 min
Views10K

В статье я поделюсь, как интегрировать ChatGPT для ревью пулл-реквестов на GitHub без покупок иностранных номеров, карт и различных ВПНов, используя, GitHub Actions

Читать далее
Total votes 19: ↑17 and ↓2+15
Comments24

Инструкция: как быстро настроить GitLab CI/CD на Flutter-проекте

Reading time12 min
Views6.7K

Привет! Я Александр Омельяненко, Flutter-разработчик в AGIMA. Недавно мне понадобилось быстро настроить CI/CD на Flutter-проекте. Те несколько руководств, что я нашел в интернете по этой теме, были либо с нерабочими примерами, либо запутанные и просто плохого качества. Но всё же какое-то представление я получил. Плюс задал вопросы коллегам. Набивая шишки по пути, я-таки настроил CI/CD на своем проекте. Но мне тогда очень пригодилась бы четкая инструкция. Поэтому я решил написать ее сам по горячим следам. Сегодня делюсь ею с вами и надеюсь, эта инструкция облегчит жизнь тем, кто настраивает CI/CD на Flutter-проекте прямо сейчас.

Читать далее
Total votes 9: ↑9 and ↓0+9
Comments13

Что не так с «Авророй» — российской мобильной OC

Level of difficultyEasy
Reading time11 min
Views62K

Мы в KODE занимаемся мобильной разработкой и следим за развитием отечественного рынка. ОС «Аврора» появилась на наших глазах. Мы долго не понимали, успешна она или нет, и если да — почему до сих непопулярна. В статье собрали полную картину по открытым источникам, распутали причинно-следственные связи и предположили, какие решения помогут ОС достичь целей, ради которых её создали.

Читать далее
Total votes 69: ↑61 and ↓8+53
Comments185

Разрушители легенд: Как на самом деле магазины проверяют приложения на уязвимости

Reading time22 min
Views7.5K

Всем привет! Снова с вами Юрий Шабалин. Уже много лет я занимаюсь безопасностью мобильных приложений и в своих исследованиях доношу важность этого направления для бизнеса.

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

Давайте посмотрим!

Читать далее
Total votes 19: ↑18 and ↓1+17
Comments15

Защита кода приложения Android. Когда хотели как лучше, а вышло не очень

Reading time4 min
Views6.3K

В статье расскажу пару случаев из практики анализа защиты приложений Android. Имена и место событий изменены. Любые совпадения — случайность

Читать далее
Total votes 28: ↑25 and ↓3+22
Comments7

Как подключиться к Flutter приложению в режиме нативного debug на ОС Аврора

Level of difficultyHard
Reading time4 min
Views2.5K

Привет, Хабр! Меня зовут Юрий Петров, я Flutter Team Lead в Friflex и автор ютуб-канала «Юрий Петров | Всё об IT». Мы разрабатываем мобильные приложения для бизнеса и специализируемся на Flutter. А также мы делаем  свой вклад в развитие экосистемы Аврора + Flutter. В этой статье хочу рассказать про то, как можно подключиться к нативной части ОС Авроры для тестирования нативной части Flutter-приложения.

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments2

10 тяжёлых истин о работе программиста, про которые никто не предупреждает

Level of difficultyEasy
Reading time10 min
Views67K

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

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

Всё это приятные бонусы, но никто не говорит им, что на самом деле им придётся делать на этой работе.

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

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

Читать далее
Total votes 185: ↑170 and ↓15+155
Comments417

Почему вам стоит отказаться от использования timestamp в PostgreSQL

Reading time10 min
Views62K

Не секрет, что работа с часовыми поясами — боль, и многие разработчики объяснимо стараются ее избегать. Тем более что в каждом языке программирования / СУБД работа с часовыми поясами реализована по-разному.

Среди тех, кто работает с PostgreSQL, есть очень распространенное заблуждение про типы данных timestamp (который также именуется timestamp without time zone) и timestamptz (или timestamp with time zone). Вкратце его можно сформулировать так:

Мне не нужен тип timestamp with time zone, т.к. у меня все находится в одном часовом поясе — и сервер, и клиенты.

В статье я постараюсь объяснить, почему даже в таком довольно простом сценарии можно запросто напороться на проблемы. А в более сложных (которые на самом деле чаще встречаются на практике, чем может показаться) баги при использовании timestamp практически гарантированы.

Читать далее
Total votes 96: ↑93 and ↓3+90
Comments136

«Разгоняем» HashSet, HashMap и циклы на примере Dart

Level of difficultyMedium
Reading time11 min
Views4.3K

Если вы занимались профилированием своего приложения, то, глядя на CPU Flame Chart, вероятно, испытывали смесь досады и азарта, глядя на особо «жирный» метод. Досады – что ваша программа всё ещё не идеальна по скорости. Азарт – от того, что вы можете докопаться до причины проблемы и отжать для процессора ещё немного свободного времени на более полезные вычисления. По крайней мере, я регулярно становлюсь жертвой обоих этих чувств, чему данная статья и обязана своим появлением.

Мой кейс – это попытка выжать из игрового движка Flame больше скорости и возможностей, чем он может «из коробки». Гейм-разработка имеет свои особенности по сравнению с «парсингом большого json» или устранением подлагивания при разовом проигрывании анимации, как минимум потому что здесь потенциально объёмные вычисления производятся абсолютно на каждом кадре. Так что, наверное, мой опыт не сильно будет перекликаться с теми проблемами, которые встречает большинство Flutter-разработчиков.

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

Читать далее
Total votes 5: ↑5 and ↓0+5
Comments10

Flutter Yandex Mapkit: как внедрить основные инструменты Яндекс Карт в проект на Flutter. Часть 2

Level of difficultyMedium
Reading time26 min
Views4.2K

Привет! Меня зовут Анна Ахлёстова, я Flutter-разработчик в Friflex. В первой части статьи мы подробно разобрали, как использовать некоторые инструменты Yandex Mapkit в проекте на Flutter. Мы научились отображать объекты точками на карте, обрабатывать нажатия на них, а также настраивать кластеризацию маркеров при масштабировании карты.

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

Читать далее
Total votes 3: ↑3 and ↓0+3
Comments1

Flutter Yandex Mapkit: как внедрить основные инструменты Яндекс Карт в проект на Flutter. Часть 1

Level of difficultyMedium
Reading time16 min
Views5K

Привет! Меня зовут Анна Ахлёстова, я Flutter-разработчик в Friflex. Мы разрабатываем мобильные приложения для бизнеса и специализируемся на Flutter. В статье я расскажу о том, как мы решаем основные задачи бизнеса с использованием возможностей Яндекс Карт на Flutter.

Читать далее
Total votes 2: ↑2 and ↓0+2
Comments13

Проектирование архитектуры для микросервисов с использованием gRPC

Level of difficultyEasy
Reading time9 min
Views17K

Привет, Хабр!

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

gRPC – высокопроизводительный и мощный инструмент для построения микросервисных систем.

Читать далее
Total votes 15: ↑11 and ↓4+7
Comments10

Как быстро интегрировать Систему быстрых платежей (СБП) в приложение на Flutter

Level of difficultyMedium
Reading time7 min
Views7.1K

Всем привет! Меня зовут Мурат Насиров, я Flutter-разработчик в Friflex. Мы разрабатываем мобильные приложения и специализируемся на решениях для ритейла. На одном из наших проектов мне пришлось столкнуться с внедрением кнопки оплаты через Систему Быстрых Платежей (СБП). В этой статье я хочу поделиться своим опытом и наработками в быстрой интеграции нативных компонентов SDK СБП в кроссплатформенное приложение на Flutter.

Читать далее
Total votes 12: ↑12 and ↓0+12
Comments2

Преобразование инфиксной нотации в постфиксную

Reading time6 min
Views27K
Что такое инфиксная нотация и постфиксная можно узнать если внимательно почитать в Википедии. Так же есть статья на Хабре.

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

Ну что, вперед.

Для лучшего понимания и запоминания, будем использовать аббревиатуры:

  1. STACK — стек это тип данных, представляющий собой список элементов, организованных по принципу LIFO (последним пришёл — первым вышел). Более детальное изучение здесь
  2. QUEUE — очередь это тип данных, представляющий собой список элементов, организованных по принципу FIFO (первый пришёл — первым вышел). Более детальное изучение здесь
  3. PUSH — проталкивание, при проталкивании добавляется новый элемент, в вершину стека, то есть текущий элемент становиться вершиной стека (последним элементом). Детально изучить можно здесь
  4. POP — выгружает элемент который, является вершиной стека. Вершиной становится последний элемент в стеке. Более детально можно почитать здесь.
  5. TOP — вершина стека, то-есть последний его элемент
Читать дальше →
Total votes 12: ↑9 and ↓3+6
Comments9

Event Bus: пишем шину событий во Flutter-приложении

Level of difficultyMedium
Reading time6 min
Views5.4K

Привет, Хабр! Меня зовут Юрий Петров, я Flutter Team Lead в Friflex. Как и многие коллеги, я пришел во Flutter из мира Android. Конечно, есть практики, которые мы использовали при разработке нативных приложений для Android и которые мы тянем за собой в кроссплатформенную разработку. В статье хочу вам рассказать про чудесный инструмент Event Bus. При переводе на русский этот термин дословно означает «шина событий».

Читать далее
Total votes 6: ↑4 and ↓2+2
Comments9

Организация аутентификации по СМС по примеру Telegram/Viber/WhatsApp

Reading time6 min
Views31K

Представим, что перед вами стоит задача организовать аутентификацию пользователя (в мобильном приложении, в первую очередь) так, как это сделано в Telegram/Viber/WhatsApp. А именно реализовать в API возможность осуществить следующие шаги:


  • Пользователь вводит свой номер телефона и ему на телефон приходит СМС с кодом.
  • Пользователь вводит код из СМС и приложение его аутентифицирует и авторизует.
  • Пользователь открывает приложение повторно, и он уже аутентифицирован и авторизован.

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


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


Мы поговорим о тех изменениях, которые следует проделать в API, о том, как реализовать одноразовые пароли на сервере, как обеспечить безопасность (в т.ч. защиту от перебора) и в какую сторону смотреть при реализации это функциональности на мобильном клиенте.

Читать дальше →
Total votes 12: ↑8 and ↓4+4
Comments25

Использование шейдеров во Flutter. Часть 2

Level of difficultyMedium
Reading time10 min
Views2.9K

Всем привет! На связи Юрий Петров, Flutter Team Lead в Friflex. В предыдущей статье мы познакомились с работой шейдеров во Flutter, а также рассмотрели, как написать свой собственный шейдер на языке GLSL. В этой части разберемся, как импортировать готовые шейдеры и управлять ими из Flutter.

Читать далее
Total votes 14: ↑14 and ↓0+14
Comments2

Information

Rating
474-th
Location
Краснодар, Краснодарский край, Россия
Works in
Registered
Activity

Specialization

Backend Developer, Mobile Application Developer
Lead
Docker
Nginx
Dart
Flutter
Kotlin
Android development
iOS development
Client-server applications