Как стать автором
Обновить
70.29
Surf
Создаём веб- и мобильные приложения
Сначала показывать

Формальные грамматики на службе мобильного клиента

Время на прочтение 11 мин
Количество просмотров 2.6K
В повседневной жизни мы пользуемся готовыми интерпретаторами и компиляторами — и редко кому придёт в голову написать их самостоятельно. Во-первых, это же сложно, во-вторых — зачем.

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

Сегодня на примере перевода масок из одного в формата в другой познакомимся с основами построения интерпретаторов и посмотрим, как использовать формальные грамматики, абстрактное синтаксическое дерево, правила перевода — в том числе для того, чтобы решать задачи бизнеса.


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

Тестирование Flutter-приложений: инструменты, преимущества, проблемы

Время на прочтение 10 мин
Количество просмотров 8.6K
Привет! Меня зовут Мария Лещинская, я QA-специалист в Surf. Наша компания разрабатывает нативные приложения с 2011 года, а с 2018-го мы занимаемся ещё и разработкой под Flutter.

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


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

CRI-O как замена Docker в качестве исполняемой среды для Kubernetes: настройка на CentOS 8

Время на прочтение 7 мин
Количество просмотров 14K
Привет! Меня зовут Сергей, я DevOps в Surf. DevOps-отдел в Surf ставит своей задачей не только налаживание взаимодействия между специалистами и интеграцию рабочих процессов, но и активные исследования и внедрение актуальных технологий как в собственную инфраструктуру, так и в инфраструктуру заказчика.

Ниже я немного расскажу об изменениях в технологическом стеке для контейнеров, с которыми мы встретились при изучении дистрибутива CentOS 8 и о том, что такое CRI-O и как быстро настроить с его помощью исполняемую среду для Kubernetes.


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

Сервис на языке Dart: каркас серверного приложения

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


Подготовка


В прошлый раз мы закончили на том, что разместили статическую веб страницу-заглушку, разработанную с использованием Flutter для web. Страница отображает прогресс разработки нашего сервиса, однако данные о датах начала разработки и релиза пришлось захардкодить в приложении. Таким образом мы лишились возможности изменить сведения на странице. Пришло время разработать приложение — сервер данных. Схема всех приложений сервиса — в статье «Сервис на языке Dart: введение, инфраструктура бэкэнд».

В этой статье мы напишем приложение с использованием фреймворка Aqueduct, оценим его производительность и потребление ресурсов в разных режимах, напишем инструментарий для компиляции в нативное приложение для Windows и Linux, разберемся с миграциями схемы базы данных для доменных классов приложения и даже опубликуем наш инструментальный docker образ в публичный регистр DockerHub.


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

Анонс Flutter 1.20

Время на прочтение 11 мин
Количество просмотров 7.9K
Повышенная производительность, автозаполнение, новый виджет и многое другое!

Всем привет, я Евгений Сатуров из Surf. Представляю перевод официальной статьи про последний апдейт Flutter 1.20 с моими комментариями. Фреймворк с каждым новым релизом становится всё более отполированным, и сегодня мы рассмотрим, что принес нам stable-канал в конце лета.


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

Сервис на языке Dart: flutter web-страница

Время на прочтение 6 мин
Количество просмотров 15K
Оглавление
  1. 1. Введение
  2. 2. Backend
  3. 2.1. Инфраструктура.
  4. 2.2. Доменное имя. SSL
  5. 2.3. Серверное приложение на Дарт
  6. ...
  7. 3. Web
  8. 3.1. FlutterWeb страница (мы находимся здесь)
  9. ...
  10. 4. Mobile
  11. ...


Подготовка


В прошлый раз мы закончили на том, что наш веб-сервер получил доменное имя и научился устанавливать безопасное соединение с клиентом. Однако нам пока совсем нечего показать нашему будущему пользователю. Хотя мы уже можем поделиться идеей стартапа и сообщить дату релиза MVP. Для такой задачи подойдёт информационная web-страница. Напишем её на Dart с использованием фреймворка FlutterWeb (здесь рассказываем, почему Flutter использует именно Dart). Все наши клиентские приложения сервиса станут расширением именно этой страницы. Постараемся вести разработку максимально адаптивно и структурировано, чтобы развитие и сборки под нужные платформы (web-android-iOS) стали просто рутиной.


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

RecyclerView.ItemDecoration: используем по максимуму

Время на прочтение 10 мин
Количество просмотров 35K
Привет, дорогой читатель Хабра. Меня зовут Олег Жило, последние 4 года я Android-разработчик в Surf. За это время я поучаствовал в разного рода крутых проектах, но и с легаси-кодом поработать довелось.

У этих проектов есть как минимум одна общая деталь: везде при разработке приложения использовался список с элементами. Например, список контактов телефонной книги или список настроек вашего профиля.

В наших проектах для списков используется RecyclerView. Я не буду рассказывать, как писать Adapter для RecyclerView или как правильно обновлять данные в списке. В своей статье расскажу о другом важном и часто игнорируемом компоненте — RecyclerView.ItemDecoration, покажу как его применить при вёрстке списка и на что он способен.


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

Flutter. RenderObject — замеряй и властвуй

Время на прочтение 9 мин
Количество просмотров 10K
Всем привет, меня зовут Дмитрий Андриянов. Я Flutter-разработчик в Surf. Чтобы построить эффективный и производительный UI достаточно основной библиотеки Flutter. Но бывают случаи, когда нужно реализовывать специфичные кейсы и тогда придётся копать в глубь.


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

Сервис на языке Dart: доменное имя, SSL

Время на прочтение 6 мин
Количество просмотров 4.1K
Оглавление
  1. 1. Введение
  2. 2. Backend
  3. 2.1. Инфраструктура.
  4. 2.2. Доменное имя. SSL (мы находимся здесь)
  5. 2.3. Серверное приложение на Дарт.
  6. ...
  7. 3. Web
  8. 3.1. Заглушка “Under construction”
  9. ...
  10. 4. Mobile
  11. ...


disclaimer (по комментариям к предыдущей статье)
  • Эта статья не является в полной мере самостоятельной и является продолжением серии Сервис на языке Дарт. Начало здесь.
  • Предмет данной статьи только то, что вынесено в заголовок: доменное имя и шифрование соединения.
  • Облаков, оркестрации, масштабирования, K8s, AWS, GKE здесь нет. Автору известно, что данный подход не является современным и модным. Более того, автор признаёт, что общается в окружении «ретроградов», многие из которых вообще считают неприемлемым передачу критических данных и сервисов за пределы контролируемого периметра.
  • Автор не может отказаться от использования Дарт на сервере в пользу других языков и технологий, поскольку сама концепция данной серии статей заключается в реализации работоспособного сервиса на языке Дарт для всех уровней приложения: сервера, веб и мобильных клиентов.
  • Список подлежащих рассмотрению в ходе реализации приложений вопросов выбран автором по собственному усмотрению. Список может быть расширен читателем соответствующим комментарием к этой или последующим статьям. Предлагайте, попробуем сделать.
  • Список вопросов
    • Декомпозиция приложения на компоненты и слои
    • Dependency injection (кодогенерация boilerplate)
    • Генерация нативного серверного приложения
    • ORM. Генерация схемы и миграций для БД.
    • oAuth2 + JWT авторизация. Изолированный сервер авторизации.
    • Deeplinks (Universal links/ App links). Бесшовная интеграция web/app
    • Маршрутизация в приложениях
    • Взаимодействие реального времени (websockets)
    • Адаптивная верстка flutter



Доменное имя


В прошлый раз мы закончили на том, что в докер контейнере запустили веб-сервер NGINX, раздающий статический файл index.html. В этот раз мы расширим функциональность веб-сервера, добавив шифрование данных и принудительную переадресацию с http на https.


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

Сервис на языке Dart: введение, инфраструктура бэкэнд

Время на прочтение 8 мин
Количество просмотров 20K
Оглавление
1. Введение
2. Backend
2.1. Инфраструктура.
2.2. Доменное имя. SSL.
2.3. Серверное приложение на Dart.

3. Web
3.1. Заглушка «Under construction»

4. Mobile


Введение


Меня, Flutter-разработчика, знакомые часто спрашивают: «Что же такое язык Dart?». Качают головой со словами: «А вот Петя серьёзные транспорты на Java пишет, а в Яндексе вообще плюсы в проде...». Ну что ж, пожалуй, действительно, Dart далёк от практик «фабрик для создания фабрик» из Java. Однако если стоит задача реализовать клиентские приложения сразу для нескольких платформ, не утонув в потоке задач по синхронизации разработчиков разных целевых ОС; создать целостный UI, узнаваемый, но специфичный для Android, iOS и веб и в целом уложиться в адекватные бюджет и сроки, — здесь Flutter не имеет конкурентов. И эти вопросы стоят вдвойне если у вас… стартап.

Итак, легенда: некий стартап решил создать новый сервис… ну, например, для
обмена списками покупок
Такая себе идея для стартапа, я знаю, но если я выпущу ещё один ToDo лист в этот мир, мне будет стыдно :)
между пользователями сервиса. Цель стартапа — выпустить MVP за три месяца на трех платформах (плюс четвертая — сервер, конечно).

10 лет назад я бы сказал, что этот кейс не имеет решения и постарался бы держаться от него подальше, 3 года назад решением мог стать стек ReactNative/React/NodeJs, в 2020 году для этого есть Dart. Добро пожаловать в атмосферу разработки альфа версии сервиса, я постараюсь наглядно пройти и объяснить весь процесс разработки. Код всех приложений будет выложен в паблик. Комментарии, включая набросы и холивары, приветствуются. Спросить автора «по существу» или просто посоветоваться можно в Telegram канале нашего отдела.


Читать дальше →
Всего голосов 26: ↑22 и ↓4 +18
Комментарии 28

Почему я ушёл с React Native и перешёл во Flutter: Часть 1

Время на прочтение 8 мин
Количество просмотров 23K
Много полезного про Flutter — в телеграм-канале Surf Flutter Team. Публикуем кейсы, лучшие практики, новости и вакансии Surf, а также проводим прямые эфиры. Присоединяйтесь!


Всем привет. Меня зовут Дмитрий Андриянов. Два года писал на React Native, сейчас я разработчик в Surf и уже полтора года пишу на Flutter. Когда я только решил серьёзно взяться за Flutter, я бы очень хотел найти статью от разработчика, который перешёл с React Native на Flutter и узнать его мнение. Теперь этот разработчик — я.

Скорее-всего вы видели такие отзывы о React Native и как компании отказываются от него. Я поделюсь своим личным мнением со стороны одного разработчика, а не компании.

Эта статья для тех, кто:


  • Не знаком с кросс-платформой и хочет понять основную разницу между технологиями.
  • Пишет на React Native и хочет узнать, что он выиграет при переходе на Flutter.
  • Не писал на React Native, а только на Flutter.

Ниже расскажу почему в своё время я выбрал React Native, поделюсь причинами ухода во Flutter и приведу основные различия между React Native и Flutter, которые, на мой взгляд, наиболее важны. Со времени ухода с React Native прошло много времени — что-то изменилось и исправлено. Я постарался это учесть, но что-то мог упустить из виду.


Читать дальше →
Всего голосов 23: ↑22 и ↓1 +21
Комментарии 101

Model-Widget-WidgetModel, или какой архитектурой пользуется Flutter-команда в Surf

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

Привет, меня зовут Артём. Я руководитель Flutter-разработки в Surf и со-ведущий FlutterDev подкаста.


Flutter-отделу в Surf уже больше года. За это время мы сделали несколько проектов: от маленьких служебных, до полноценных е-коммерс и банкинга. Как минимум, многие из вас уже могли видеть приложение аптеки «Ригла». В статье я расскажу про недавно вышедший пакет mwwm — архитектуру, на которой построены все наши проекты.


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

Как смотреть WWDC 2020, если ты не разработчик

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

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


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


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

Android и 3D камера. Распознавание лиц с защитой от Fraud

Время на прочтение 11 мин
Количество просмотров 5.9K
Привет! Меня зовут Владимир Шальков, я Android-разработчик в Surf.

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


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

Flutter Dev Podcast с CTO Meduza Борисом Горячевым: главное про приложение Meduzа и медиа-разработку

Время на прочтение 8 мин
Количество просмотров 3K
Не каждый день выпадает шанс обсудить проект на Flutter с более 100 тысяч DAU в приложении. Новое приложение Meduza — как раз такой проект. На текущий момент — это самое популярное и обсуждаемое Flutter-приложение в российских сторах. Мы пригласили Бориса Горячева на Flutter Dev Podcast, чтобы выяснить почему команда решила уйти с натива на кроссплатформу и выбрала Flutter. Ниже мы собрали самое интересное: попытки подружить web с нативом, первый опыт кроссплатформы, особенности медиа-разработки, играх со шрифтами и сложностях работы с WebView / Backend Driven UI.


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

Организация Flavors во Flutter

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

Для чего нужны Flavors


Представьте ситуацию: есть приложение с аналитикой. Есть команда разработки, тестировщики и конечные пользователи. И те, и те пользуются одной версией приложения. Допустим мы хотим проанализировать насколько пользователям интересна фича А. Что в этом случае мы делаем? Идём в аналитику и смотрим сколько было использований данной фичи (например, переходов на экран).


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


Здесь можно заменить слово аналитика на любое другое: пуш-нотификации, креш-репортинг и т.д.


И в этой ситуации нас спасает разделение приложения на две версии отличающиеся минимально, например Bundle ID(package-name). Разработчики и тестеры используют только специальную dev версию, а пользователи продовую.


Больше кейсов команды Surf >>

Это как раз и есть одна из задач flavor’ов. Здесь будет использоваться именно flavor, так как именно это название используется Flutter'ом. Люди, которые знакомы с Android-разработкой, думаю сразу узнали этот механизм.


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

Flutter. Весеннее обновление 2020

Время на прочтение 7 мин
Количество просмотров 5.5K
Привет! Меня зовут Евгений Сатуров, я Flutter-разработчик Surf и основатель Flutter Dev Podcast.
Ниже перевод статьи Tim Sneath и Patrick Sosinski с моими комментариями.

Полмиллиона разработчиков, 50 тысяч приложений, взрывной рост и обновлённый релизный цикл.

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


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

Backend-Driven UI с помощью виджетов

Время на прочтение 10 мин
Количество просмотров 5.6K
Рассмотрим особенности данного подхода и нашу реализацию с помощью виджетов, их концепцию, преимущества и отличия от других вью в Android.


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

Проблемы доставки фич в больших проектах

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

Любому продукту, который в данный момент находится в сторе, грозят релизы. Наш проект не является исключением. Мы работаем по методологии scrum, разработка делится на спринты, обычно спринты не привязаны ко времени, а делятся на временные отрезки, зависящие от скоупа спринта. По итогам спринта обычно проводится релиз приложения в стор, который включает в себя новые фичи и некоторый багфикс.


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


  • Итерационная разработка. Выпуск готовых и согласованных фич.
  • Разное время приемки фич. Каждая фича имеет разный приоритет со стороны заказчика, что определенно влияет на сроки релиза даже уже готовых фич.
  • Критические баги и SLA. При обнаружении реальных проблем на продовых сборках необходимо в кратчайшие сроки исправить баг и выкатить обновление.

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


image

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

Как работать из дома. Чек-лист удаленщика

Время на прочтение 10 мин
Количество просмотров 16K
В интернете огромное количество заметок на тему удаленной работы, с лаконичным обзором минусов, плюсов и известными советами, как вытащить себя из рутины, начиная с «Первым делом снимите пижаму». В блоге Surf мы уже затрагивали эту тему в статье моей коллеги, которая поделилась своим опытом, но с ростом количества удаленных сотрудников (и моим переходом на «удаленку» после 20-летнего опыта работы в офисе), я решила изучить вопрос глубже: читала зарубежные блоги про удаленную работу и пробовала разные идеи. Здесь поделюсь своим опытом, методами сохранения и повышения мотивации. А в конце статьи я приготовила небольшую памятку сотруднику home office.

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


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

Информация

Сайт
surf.ru
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия