Росбанк и Middleware: новое приложение на старом бэкенде
В 2019 году Росбанк решил разработать новое мобильное приложение для клиентов. Делать с нуля два нативных приложения — под iOS и Android — было слишком долго и дорого, поэтому выбор пала кроссплатформенную разработку на фреймворке Flutter.
Старый бэкенд разрабатывали еще в начале нулевых. Он нормально взаимодействовал со старым приложением, но совершенно не хотел работать с новой архитектурой. Итак, разрабатывать новое приложение на старом бэкенде возможности нет — пострадает производительность приложения. Разрабатывать новый бэкенд с нуля — работы на несколько лет.
Поэтому разработчики создали middleware-сервер: прослойку, которая связывает новое мобильное приложение со старым и новым бэкендом. Это позволило переписывать модули старой автоматизированной банковской системы (АБС) постепенно, без влияния на работу мобильного клиента.
Схема работы middleware. Прежний бэкенд был написан в начале нулевых на Burlap. Новое мобильное приложение работает с JSON
Middleware-сервер выступает как переводчик с языков бэкендов на язык мобильного приложения, а также нормализует данные — приводит их к нужному формату.
Иронично
Искал статьи по Flutter (фреймворк для кроссплатформенной разработки приложений, если кому интересно), нашел неплохой материал. Из комментариев ткнул на аватар автора и попал на эту страницу. Плашка про неделю фронтенда прям в тему
Недельный геймдев: #8 — 7 марта, 2021
В этом выпуске: Flutter 2 добавили поддержку десктопа и веба, вышел бесплатный упаковщик UV для Blender и обновился Zen UV, в GameMaker добавили поддержку PS5 и Xbox X, Promethean AI Tools запущены в бете, Visual Studio Code теперь нативно работает на Маках с M1, новые патчи от AMD для Unreal Engine 4.26.
Режиссёр «Легенды о волках» рассказал про использование Blender в проекте, креативный директор Maquette поделился историей про маленький, но большой мир их головоломки, вышел туториал по созданию преломление льда с помощью Shader Graph и URP в Unity, художник поделился интересным концептом, совмещающим в себе Warcraft и Doom — DoomCraft.
Обновления/релизы/новости
В Flutter 2 добавили поддержку десктопа и веба
Новая версия является огромным шагом вперед, поскольку добавит поддержку веб-приложений, а также бета-фичу для поддержки Windows, Mac и Linux.
Это обновление может заинтересовать и разработчиков игр. В настоящее время существует, как минимум, два основных движка для 2D-игр: Flame Engine и Sprite Widget.
Вышел бесплатный упаковщик UV для Blender
Плагин автоматически упорядочивает UV islands 3D-модели, чтобы минимизировать бесполезное пространство, уменьшая общий размер файлов для наборов текстурных карт. Проект на Гитхабе.
Zen UV для Blender получил обновление

Сергей Тяпкин представил новую версию инструмента для Blender для удобной работы с развёртками.
В GameMaker добавили поддержку PS5 и Xbox X
Вышла бета-версия 2.3.2, которая добавляет поддержку новых консолей. Это первый релиз с момента, как Opera приобрела YoYo Games.
Promethean AI Tools запущены в бете
Команда Promethean AI поделилась видео о своём наборе инструментов на базе искусственного интеллекта и объявила о выходе публичной версии.
Visual Studio Code теперь нативно работает на Маках с M1
Microsoft выпустила новую версию редактора, которая нативно работает на компьютерах Apple Silicon Mac: MacBook Air, MacBook Pro и Mac mini с чипами Apple M1.
Новые патчи от AMD для Unreal Engine 4.26
Бесплатное обновление добавляет новый модификатор кривых для анимации для восстановления синхронизации, набор инструментов 2D-фигур с ускорением на GPU для работы с анимированной графикой, а также возможность добавлять в закладки вьюхи сложных графов.
GPUopen поздравили девушек с 8 марта и поделились интервью с Лу Крамер
Она начинает новую серию периодических обзоров, где различные люди будут освещать интересные технические вопросы, выходящие за рамки обычных рубрик.
Интересные статьи/видео
Использование Blender для «Легенды о волках»: 2D не умерло, оно просто преобразилось
Эймин МакНамара, режиссёр анимационного фильма, поделился некоторыми аспектами работы над проектом в блоге Blender.
Маленький, но большой мир Maquette
Креативный директор Хэнфорд Лемур и художник по окружению Майк Джейсони из Graceful Decay рассказали о разработке их новой головоломки.
Можно почитать перевод статьи на DTF от Bourbon.
Преломление льда с помощью Shader Graph и URP в Unity
Это 14 статья в серии про работу с URP в Unity. В этот раз про шейдинг льда, используя приблизительное значение для преломления льда, контролируемое текстурами и затенением Френеля.
Разное
Песочница на основе физики и вокселей

Технология работает почти исключительно на вашей видеокарте.
Что, если взять стиль и визуал Warcraft и применить их к Doom?
Генератор потока в браузере

Можно использовать свою текстуру и рисовать поверх неё.
Sonantic использует ИИ для передачи эмоций в автоматизированную речь для прототипов игр
ИИ может придать словам истинную эмоциональную глубину, передавая сложные человеческие эмоции от страха и печали до радости и удивления. Технология демонстрирует новые возможности звуковой инженерии для игровых и киностудий, достигая высшей точки в гиперреалистичных, эмоционально выразительных и контролируемых искусственных голосах.
Если хотите поддержать выход дайджеста и других материалов, сделать это можно одним из способов.
Flutter и расизм там, где его нет
Решила написать маленькое приложение лично для себя. Попробовала сменить стандартную тему примера на черный - не вышло. Странно. Зеленый, голубой, желтый - работает. А белый? Опять ошибка.
Идём в документацию:
Как с нуля написать приложение? С чего начать новичку? Flutter / Программирование
Пол года назад я сама искала такую статью и теперь я очень хочу посоветовать себе в прошлом с чего можно начать.
1. Выбрать тему приложения
Не нужно долгих мук выбора, просто начните делать то, что вам пригодилось бы. Лучше что-то простое. Нужно понимать, что мы пока не стремимся быть Биллом Гейтсом. Это наше первое приложение, наш первый шаг.
Я уже как лет 7-8 болею спортом, потому идеей моего первого приложения было — база тренировок для поддержания себя в тонусе, с упражнениями для спины, рук, попы, ну и в целом, чтобы не скучно было.
2. На каком языке писать?
Я перепробовала несколько разных языков и разных SDK, мой выбор пал на Flutter и, собственно, язык на котором он обслуживается — dart, потому что:
- Dart — легкий в изучении язык. Вам не составит труда ознакомиться с ним, в интернете полно информации и уроков. Скорость выполнения операций на нем сравнима с Objective-C, Swift, Kotlin, Java, а с последним у них очень много общего.
- Flutter может компилировать и под Android, и под iOS. (Еще может в Fuchsia, но нам оно пока вряд ли нужно).
- Удобство в работе с виджетами, гибкость и простота в использовании.
Виджеты бывают двух типов: StatefulWidget и StatelessWidget.
Грубо говоря, те, которым можно задать initState() (начальное состояние) и те, кому нет.
Пример создания StatelessWidget:
<img src="https://sun9-38.userapi.com/c858324/v858324946/103c19/HqpUZa...">
Код лучше смотреть на gitHab, ссылка тут https://github.com/optimisticdigit/catalogo/issues/4
В данном виджете мы создаем колонну Column, элементы которой размещаются по центру (mainAxisAlignment: MainAxisAlignment.center), внутри которой лежат два контейнера.
В первом контейнере текст 'Hello, World!' синего цвета, с подчеркиванием линией в стиле dottet.
Во втором синяя кнопка 'Touch me' с закругленными углами и белыми буквами.
Выглядит это так:
<img src="https://sun9-62.userapi.com/c858324/v858324364/103df2/ewCL9t...">Больше примеров можно посмотреть в этом приложении https://play.google.com/store/apps/details?id=io.github.x_we...
3. Несколько советов
У Flutter достаточно объемная библиотека package. Не бойтесь их юзать. Например, я за несколько минут до отправки приложения в стор вспомнила, что у меня не работает отправка фидбека. За секунды я нашла package flutter_email_sender, прописала его в pubspec.yaml и набросала код, писать который обычно помогают в Example. Ссылка.
Смотря туториалы, настороженно относитесь к объему кода. Если задача простая. Часто то, что расписывают на три страницы правильнее решить парой строчек кода. Если вы понимаете, что решение слишком сложное, поищите другой путь. Хороший код — короткий код.
В моем приложении есть возможность посмотреть насколько вы были активны на этой неделе и я долго не могла понять как привязываться к датам и как заставить его работать. Оказалось все достаточно легко, даю вам ссылку на то, как работать с датами во Flutter. https://dev.to/graphicbeacon/top-7-date-methods-you-should-k...
4. В заключение
Flutter – это отличный новый инструмент, на который переходят многие специалисты и который настолько прост, что поможет и нам новичкам добиться желаемых целей.
Мой рабочий процесс строился по схеме: я не знаю как это делать — значит я учусь/ищу примеры/спрашиваю в тематических группах.
Если я все равно не понимаю, как это работает — я убираю эту возможность из своего проекта.
Часто решение приходит в голову позже.
Если оно не пришло, делайте то, что можете. Это ваш первый проект, пусть он выйдет таким, каким выйдет.
Всему свое время.
То, что у меня получилось после отсеивания всего мною неподъемного, можно посмотреть тут.
https://play.google.com/store/apps/details?id=com.fitzie.spo...
Начальное знание dart: 0.
Срок написания этого приложения: 5 месяцев.
Персонал: 1 человек (я).
Буду очень благодарна вам за обратную связь и за поддержку меня, как начинающего кодописателя. Надеюсь, я тоже помогла вам информацией. Хорошего всем дня.
Новый клиент знакомого сервиса
Сначала я радовался Apple Music, потом пользовался по привычке — и в какой-то момент он меня начал раздражать. Нормальный человек воспользовался бы другим сервисом или просто смирился, но я — программист. Так на свет родилась идея написать свой клиент для Apple Music, в результате появился Meows.app.
Вступление
Самое главное ожидание от Apple Music — это возможность послушать новую музыку, хорошую новую музыку. Эту самую новую музыку я искал и в рекомендациях, и в топовых плейлистах и просил друзей расшарить мне что-нибудь новенькое.
Главные проблемы и задачи на старте работы
Три основных плейлиста рекомендаций — «Новая музыка», «Мои любимые треки», «Чилаут-микс» — обновляются один раз в неделю в разные дни, причём музыка там чаще всего была не очень для меня.
Логика подсказывала мне, что для улучшения рекомендаций мне надо активнее «лайкать» (Love) и «дизлайкать» (Dislike) песни, но Apple сделала это действие совсем не простым, а ещё я постоянно вынужден слушать песни, которые дизлайкнул. Показывать статус песни (Love, Dislike) Apple тоже не стремится.
С рекомендациями не повезло, но ведь есть ещё популярные плейлисты, скажете вы и будете отчасти правы, но есть два момента:
Эти плейлисты не так просто найти.
Российский топ — это очень своеобразный для меня список песен, а сменить страну Apple не позволяет.
В Apple Music сложно искать новую музыку.
На компьютере спасала возможность запустить скрипт пролистывания Dislike-песен, но поиску новых это не помогало, да и кнопки рейтинга запрятаны так же далеко.
Мотивация
Это далеко не первый проект, который я начал делать с пламенем в глазах, но один из немногих доведённых до релиза. Если честно — аж второй! Чтобы повысить шансы на успех, я поставил перед собой цель, вызов, челлендж — создать ИТ-продукт с помощью ежедневной работы: я каждый день делаю что-то «полезное» и пишу о проделанном.
Сразу я писал в Telegram, затем перешёл на Medium — 18 января 2019 года был написан первый отчёт (https://medium.com/it-challenge/19-01-2019-%D0%B4%D0%B5%D0%B...) , 19 января я купил доменное имя Meows.app, публичное бета-тестирование запустил 15 февраля. И 26 июля 2019 года я наконец-то опубликовал первую релизную версию приложения.
Техническая часть
Я вообще ни разу не мобильный разработчик, но так получилось, что примерно в это же время был релиз Flutter и я уже три-четыре месяца ковырял «Hello world» на нём, технология мне нравилась, так что писать новый плеер для Apple Music решил на Flutter.
Технические детали проекта:
- Код на GitLab.
- Kubernetes-кластер.
- Оркестрация: Rancher 2.
- Бэк: .Net Core.
- Фронт: Angular Universal (восьмой версии).
- База: MongoDB в кластере replicaset.
- Мобильный клиент: Flutter (сейчас только iOS).
Самые долгие технические проблемы были с переходом на Kubernetes для серверов и выбором State Management (управление состоянием) для Flutter — выбор пал на BLoC (https://github.com/felangel/bloc) . Для ускорения работы с кодом я написал плагин для VsCode (https://marketplace.visualstudio.com/items?itemName=gornivv....), который теперь экономит мне (и, надеюсь, не только мне) много времени и сил, хотя процесс развития кода стандартного шаблона страницы приложения идёт постоянно.
Самое главное и достаточно сложное — это очертить для себя рамки минимальной версии приложения. Поиск золотой середины между стабильностью, функциональностью и временем — кошмар! Постоянно хочется добавить новых возможностей, приходится буквально бить себя по рукам и вовремя останавливаться — и договариваться, что это будет сделано в рамках обновления уже после релиза.
Бесконечный список уступок самому себе. Для борьбы с откладыванием запуска мне хорошо помогает привлечение пользователей — отдаёшь на тестирование, тебе приходят отзывы, предложения, баги, и просыпается жажда — побыстрее выпустить релиз!
Результаты
У меня ещё много идей, но уже сейчас я горжусь результатом работы и пользуюсь Meows.app постоянно. Несмотря на то, что большая часть кода написана мной, огромный вклад в приложение, генерацию идей, переводы, разработку сайта, тестирование и работу с UI/UX — всё это заслуга моей любимой жены — так что наша команда состоит из двух человек!
Чуть не забыл. Ещё я задолбал всех своих друзей: у кого есть iPhone — просил установить бета-версию, а у кого нет — показывал на своём и просил дать обратную связь по работе в приложении. А если серьёзно — они очень помогли, особенно люди не из ИТ, благодаря им приложение стало гораздо дружелюбнее к людям.
Apple Music не отдаёт все плейлисты, даже через API, но я смог вытащить более восьми тысяч уникальных плейлистов, думаю, в скором времени их будет ещё больше. На основе этого списка построен первый экран приложения «Все плейлисты», по ним есть поиск и очень-очень классная кнопка Dice — игральные кости или рандом, она выбирает случайный плейлист из отфильтрованных, в выбранном плейлисте можно ещё раз нажать кнопку Dice для повторного испытания своей удачи.
Ищем рок и включаем рандом!
В Apple Music есть рекомендации, но они разбиты на категории и представлены горизонтальной прокруткой — что не очень удобно для быстрого просмотра. Нет возможности прослушать все рекомендации единым списком воспроизведения.
Рекомендации в Apple Music
Именно поэтому в Meows.app есть плейлист «Все рекомендации» и сделан более «обозримый» вариант просмотра плейлистов. Мой плейлист «Все рекомендации» сегодня состоял из 1929 песен.
Рекомендации на одном экране
Кнопки Love и Dislike спрятаны от пользователя, и почти никто их не нажимает или делает это очень редко, так как это совсем неудобно. Соответственно, Apple Music делает рекомендации в основном на основе прослушивания песен — это «подкидывание монетки для решения интегрального уравнения», и результаты оставляют желать лучшего.
Чтобы дать Apple Music больше информации о предпочтениях пользователя, кнопки Love и Dislike вынесены мной на экран проигрывания песни, и теперь Apple гораздо чаще рекомендует мне хорошие песни.
Я даже не догадывался, насколько много плейлистов в Apple Music.
Песни, отмеченные Dislike, будут автоматически исключены из списка воспроизведения — меня это очень спасает в русском «Хиты сегодня», а на основе Love Apple Music обучает свои нейронные сети предлагать вам более приятные для вас треки.
В приложении Meows.app можно выбрать страну для получения песен из плейлистов, собранных для каждой страны отдельно. Большинство таких плейлистов, находится в разделе «Популярные плейлисты». В плейлистах США — много рэпа, японские удивляют иероглифами, а чаще всего я включаю Филиппины.
Популярные плейлисты разных стран
Когда всё надоело и хочу просто приятную музыку — я включаю любимые песни. К сожалению, Apple не отдаёт списки песен пользователя, поэтому чем больше вы пользуетесь Meows.app — тем больше песен с рейтингом мы узнаем.
Любимые и нелюбимые песни
Рейтинги песен в Apple Music — очень интересная тема. Рейтинг песни привязан к SongId, но одна и та же песня может иметь десятки SongId и, соответственно, различных рейтингов, поэтому буквально перед релизом мне пришлось переписать всю работу с рейтингами, теперь песни и рейтинги привязаны к ISRC.
Например, при получении всех рекомендаций бывает около 2000 уникальных песен, на которые приходится около 5000–6000 SongId, по которым необходимо получить рейтинги (ограничение на запрос в 100 id), провести анализ результатов и установить или удалить рейтинги (если на одну песню (ISRC) есть Love и Dislike).
Кстати, нужно ли делать импорт или экспорт данных пользователя? Возможно Spotify, Last.fm или другие сервисы принимают или отдают списки песен?
Попробуйте Meows.app — найдите новую классную музыку для себя и напишите в комментарии своё мнение и идеи.
https://apps.apple.com/ru/app/id1447818958
Спасибо, что дочитали!
P.S. баги и предложения на @gorniv (например, https://t.me/gorniv) или на почту gornivv@gmail.com