Как стать автором
Обновить
5
0
Роман Мингазетдинов @newbalancem5

Flutter Developer

Отправить сообщение

Большая статья о переезде на остров Пенанг, Малайзия. Часть 1

Время на прочтение6 мин
Количество просмотров12K

2019-й год я встретил, работая в отделе визуализации медицинских данных в медицинской госкомпании. На тот момент я имел небольшой опыт работы непосредственно разработчиком на C++ (около 1,5 лет) и заполненный на английском языке профиль в LinkedIn. Я придерживаюсь мнения, что нужно и стоит иметь опубликованное резюме и периодически проходить собеседования, чтобы быть в курсе, что происходит на рынке и что и как спрашивают на собеседованиях.

Где-то с января 2019-го года я стал получать сообщения в LI с предложениями пообщаться. Было достаточно много сообщений от разных рекрутинговых и не только компаний, которые, как я понял, набивают периодически собственные базы и поэтому обзванивают людей. Но среди предложений были и достаточно интересные в локациях от Москвы и Финляндии до Германии и юга Франции. Правда, ни одно предложение не дошло на тот момент до предложения о работе.

Жизнь продолжалась, работа тоже, надвигалось лето с длинным запланированным отпуском. За неделю до отпуска мне пришло сообщение с предложением о собеседовании от HR компании Люксофт. Времени перед отпуском не было, поэтому сообщение было злостно проигнорировано (спойлер: всегда отвечайте HR!, они хорошие!). Но перед самым отпуском жена говорит: «А чего это ты не ответил? Напиши им, что уезжаешь в отпуск и сможешь говорить после него». Так я и сделал, но в ответ мне сказали, что позиция достаточно срочная и если у меня вдруг есть возможность, то были бы рады пообщаться раньше. Ну хорошо, давайте. Договорились о первом собеседовании.

Читать далее
Всего голосов 28: ↑24 и ↓4+20
Комментарии19

Хватит организовывать код по типу файлов

Время на прочтение4 мин
Количество просмотров40K

Какой самый популярный стиль организации кода вы встречали в корпоративных кодовых базах? Лично я чаще всего видел решение, подразумевающее группировку всех файлов по их типу. Таким образом, к примеру, в системе MVC все контроллеры, все сервисы, все репозитории, все POJO и так далее находятся вместе. Давайте назовем такое решение "стековым" стилем организации кода.

Читать далее
Всего голосов 63: ↑54 и ↓9+45
Комментарии115

Реализация архитектуры Redux на MobX. Часть 1: «Проблемные места Redux»

Время на прочтение11 мин
Количество просмотров11K

Эта часть статьи будет об осмыслении составляющих Redux. Так ли они необходимы, что является их аналогом. Также будет предложена более удобная альтернатива хука useReducer.

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

В этой части статьи я хочу показать, что:

— редьюсеры - это аналог обычных чистых функции для получения нового состояния.

селекторы - это аналоги обычных функций с мемоизацией, которые возвращают данные.

— dispatch + action + action creators - это аналог обычных вызовов функций, и разбиение на dispatch, action, action creators является зачастую ненужным и используются не к месту.

Читать далее
Всего голосов 11: ↑11 и ↓0+11
Комментарии30

CRDT, RON и Сети Данных

Время на прочтение6 мин
Количество просмотров6.6K

Эта статья о следующем эволюционном шаге в развитии систем обработки данных. Тема амбициозная, поэтому расскажу сначала немного о себе. Вот уже больше 10 лет я работаю над проектами в области CRDT и синхронизации данных. За это время успел поработать на университеты, стартапы YCombinator и известные международные компании. Мой проект последние три года – Replicated Object Notation, новый формат представления данных, сочетающий возможности объектной нотации (как JSON или YAML), сетевого протокола и оплога/бинлога. Вы могли слышать про другие проекты, работающие в том же направлении, например, Datanet, Automerge и другие. Также вы могли читать Local-first software, это наиболее полный манифест данного направления Computer Science. Авторы - замечательный коллектив Ink&Switch, включая широко нам известного по "Книге с Кабанчиком" М.Клеппманна. Или вы, возможно, слушали мои выступления по этой теме на различных конференциях.

Идеи этой статьи перекликаются с тем, что пишет последние годы Pat Helland: Immutability Changes Everything и др. Они смежны с проектами IPFS и DAT, к которым я имею отношение.

Итак. Классические БД выстроены на линейном логе операций (WAL). От этого лога выстроены транзакции, от него же выстроена репликация master-slave. Теория репликации с линейным логом написана ещё в начале 1980-х с участием небезызвестного Л. Лампорта. В классических legacy системах с одной большой центральной базой данных всё это работает хорошо. Так работают Oracle, Postresql, MySQL, DB2 и прочие классические SQL БД. Так работают и многие key-value БД, например, LevelDB/RocksDB.

Но линеаризация не масштабируется. Когда система становится распределённой, всё это начинает ломаться. Образно говоря, линейная система – это что-то вроде греческой фаланги. Нужно, чтобы все шли ровно, а для этого хорошо, чтобы земля была везде ровной. Так получается не всегда: где-то электричество отключили, а где-то сеть медленная. Хотя в системе Google Spanner и было показано, что с достаточно большим бюджетом землю можно сделать ровной абсолютно везде, мы всё же отметим, что Google тоже бывает отключается целиком по совершенно смешным причинам.

Читать далее
Всего голосов 24: ↑22 и ↓2+20
Комментарии8

Алгоритм обучения многослойной нейронной сети методом обратного распространения ошибки (Backpropagation)

Время на прочтение19 мин
Количество просмотров294K
Тема нейронных сетей была уже ни раз освещена на хабре, однако сегодня я бы хотел познакомить читателей с алгоритмом обучения многослойной нейронной сети методом обратного распространения ошибки и привести реализацию данного метода.
Читать дальше →
Всего голосов 34: ↑22 и ↓12+10
Комментарии29

Зоны в Dart: операция на открытом сердце для окружения

Время на прочтение13 мин
Количество просмотров5.3K

Привет! Меня зовут Дима, я frontend-разработчик в компании Wrike. Клиентскую часть проекта мы пишем на Dart, однако работать с асинхронными операциями нам приходится не меньше, чем на других технологиях. Зоны — один из удобных инструментов, который Dart для этого предоставляет. Но в Dart-сообществе редко можно встретить о нем полезную информацию, поэтому я решил разобраться и рассказать об этом мощном инструменте подробнее.


Читать дальше →
Всего голосов 14: ↑13 и ↓1+12
Комментарии2

10 лучших расширений Chrome для дизайнеров

Время на прочтение3 мин
Количество просмотров26K

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

Всего голосов 12: ↑6 и ↓60
Комментарии8

Как работает Flutter

Время на прочтение18 мин
Количество просмотров59K


Как Flutter работает на самом деле?


Что такое Widgets, Elements, BuildContext, RenderOject, Bindings?..


Сложность: Новичок


Вступление


В прошлом году (прим: в 2018), когда я начал свое путешествие в сказочный мир Flutter, в Интернете было очень мало информации по сравнению с тем, что есть сегодня. Сейчас, несмотря на то, что уже написано много материалов, лишь небольшая их часть рассказывает о том, как на самом деле работает Flutter.


Что же такое Widgets (виджеты), Elements (элементы), BuildContext? Почему Flutter быстрый? Почему иногда он работает не так, как ожидается? Что такое деревья и зачем они нужны?


В 95% случаев при написании приложения вы будете иметь дело только с виджетами, чтобы что-то отображать на экране или взаимодействовать с ним. Но неужели вы никогда не задумывались, как вся эта магия работает внутри? Как система узнает, когда обновить экран и какие части должны быть обновлены?


Содержание:


Читать дальше →
Всего голосов 14: ↑13 и ↓1+12
Комментарии6

Кодогенерация в Dart. Часть 2. Аннотации, source_gen и build_runner

Время на прочтение7 мин
Количество просмотров9K

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


Читать дальше →
Всего голосов 6: ↑6 и ↓0+6
Комментарии0

Flutter. Keys! Для чего они?

Время на прочтение9 мин
Количество просмотров40K


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


Данная статья адаптирована из следующего видео. Если вы предпочитаете слушать / смотреть, а не читать, то видео предоставит вам тот же материал.

Читать дальше →
Всего голосов 9: ↑9 и ↓0+9
Комментарии3

[По докам] Flutter. Часть 4. Для веб-разработчиков

Время на прочтение9 мин
Количество просмотров11K
Начинаем новую неделю с очередной интерпретации официальной документации Flutter в формате «вопрос-ответ». 4-я часть освещает в сравнительном стиле Flutter для веб-разработчиков. Она целиком посвящена вёрстке и вышла не такой объёмной, как предыдущие. Традиционно рекомендую всем интересующимся Flutter веб-разработчикам заглянуть под кат, чтобы понять, стоит ли пробовать этот фреймворк и сколько усилий это займёт.


Читать дальше →
Всего голосов 27: ↑27 и ↓0+27
Комментарии17

Основы Dart Streams

Время на прочтение8 мин
Количество просмотров46K

Это вторая часть моей серии по поводу Flutter Architecture:



Потоки являются основным строительным блоком RxVMS, их понимание является абсолютно необходимым условием для работы с этой библиотекой, так что мы подробнее остановимся на них в этом посте.


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


Пусть течет


Я читаю множество комментов, что дескать потоки, и особенно Rx, слишком сложны для понимания и, как следствие, для использования.


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

Читать дальше →
Всего голосов 5: ↑5 и ↓0+5
Комментарии6

RxDart: магические трансформации потоков

Время на прочтение13 мин
Количество просмотров24K

Добро пожаловать — это третья часть моей серии статей об архитектуре Flutter.



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


RxDart — это реализация концепции Rx для языка Dart, за что следует сказать спасибо Frank Pepermans и Brian Egan. Если ранее вы использовали Rx в других языках, то наверняка заметите разницу в именовании ряда функций, но это вряд ли вызовет у вас затруднения.


Код для тестирования находится здесь.


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

Читать дальше →
Всего голосов 6: ↑6 и ↓0+6
Комментарии2

Flutter — новый взгляд на кроссплатформенную разработку

Время на прочтение8 мин
Количество просмотров68K

В августе 2018 года Flutter стал самой запрашиваемой кроссплатформенной технологией на Stack Overflow.


image


В нашем блоге Артем Зайцев и Евгений Сатуров из студии Surf, сертифицированного агентства Google, расскажут, почему и как так получилось:


Кроссплатформенные решения давно привлекают желающих быстро и незатратно запустить MVP-продукт одновременно под несколько платформ. Причина проста — единая кодовая база. Ее легче поддерживать: артефакты централизованы, нет дублирования логики и правок одних и тех же багов под каждую из платформ. Да и людей для ее поддержки и создания требуется меньше — нет необходимости содержать двух нативных разработчиков.

Читать дальше →
Всего голосов 47: ↑42 и ↓5+37
Комментарии53

UICollectionViewLayout для пиццы из разных половинок

Время на прочтение15 мин
Количество просмотров18K

Чтобы сделать пиццу из половинок мы использовали два UICollectionViewLayout. Рассказываю о том, как мы написали такой лейаут для iOS, с чем столкнулись и от чего отказались.


Всего голосов 42: ↑37 и ↓5+32
Комментарии17

Информация

В рейтинге
Не участвует
Откуда
Казань, Татарстан, Россия
Дата рождения
Зарегистрирован
Активность