Giter VIP home page Giter VIP logo

team's Introduction

RAMBLER&Co iOS Team Playbook

Мы - iOS команда группы компаний RAMBLER&Co. Мы постоянно выкладываем в open-source некоторые из внутренних проектов и наработок. Их вы можете найти в наших репозиториях Rambler Digital Solutions или в комьюнити StrongSelf.

Что такое playbook?

Термин playbook пришел из американского футбола, где он означал "книга, содержащая стратегию и тактические приемы игры команды". В случае же IT-компании, он значит "описание ценностей, бизнес-процессов, стандартов, процедур, правил, используемых в компании".

Этот проект предназначен для прозрачного ведения наших текущих внепроектных задач, описания процессов, принципов и используемых инструментов.

Важно отметить, что это не статичный документ. Playbook может меняться со временем - не стесняйтесь присылать свои pull request'ы.

Куда смотреть дальше

  • Наша команда

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

  • Наши процессы

    То, как мы работаем: описание подходов к разработке, CI, CD, стека библиотек и инструментов, различные чек-листы.

  • Трекер задач

    Используется для ведения всей внепроектной активности команды: R&D, участие в конференциях, обсуждение процессов разработки.

Благодарности

Спасибо за идею Artsy.

team's People

Contributors

akkrat avatar antyshev avatar aporohov avatar atom-wintermute avatar beniamiiin avatar brain89 avatar cognitivedisson avatar complexityclass avatar devalloy avatar etolstoy avatar idva avatar khomtima avatar kmordan avatar kollapze avatar mcrakhman avatar mgolovko avatar novixon avatar pihta avatar rinarish avatar sapozhnik avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

team's Issues

Рассказать о том, как в LiveJournal устроена работа с лентами контента

Тема организации лент с разными типами контента актуальна для многих наших приложений: Почты, Чемпионата, Афиши, да и многих других. В LiveJournal мы используем довольно интересное и легкорасширяемое решение. По результатам прошлого доклада Вадима, да и вообще, было несколько просьб раскрыть эту тему и рассказать о ней подробнее.

Короче, команда ЖЖ (@CognitiveDisson @juyka @constZinovyev ), поделитесь на одной из встреч знаниями об архитектурном устройстве наших лент, его плюсах и минусах.

Доработать и вынести в pod полноэкранную галерею

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

Научиться автоматически обновлять release notes и скриншоты в сторе с помощью fastlane

На конфе MobileOptimized в Минске, которую я недавно посетил, один парень делал доклад про fastlane. И там он упомянул, что тулза deliver, входящая в fastlane, умеет автоматизировать процесс обновления метаданных в сторе. Больше всего интересуют скриншоты и release notes. Стоит покопать в этом направлении и прикрутить эту возможность нам.

Слайды презентации можно найти тут: https://speakerdeck.com/chipp/fastlane-beta-ili-pochiemu-ia-stal-pit-bol-shie-kofie

Автодоки для SDK

У нас написано уже несколько SDK, и вопрос с генерацией документации становится всё более актуальным.
Расскажу какие системы для создание документации существуют. Чем они хороши. Какую мы выбрали. Зачем нужна сгенерированная документация, и где её можно использовать.
И расскажу, как у нас настроена генерация доков через jenkins + fastlane.

Доклад про iOS Security

Есть идея рассказать про безопасность, пока в голове такие направления докладов:

  1. Общая информация про iOS security, sandboxing/keychain/touch id... (примерно по этому документу https://www.apple.com/business/docs/iOS_Security_Guide.pdf)
  2. Небольшой обзор по pentesting или reverse engineering iOS приложений.
  3. Доклад про Jailbreak и что с ним можно делать.

Что из этого могло бы быть интересно? Добавляйте свои предложения в комменты.

Актуализировать описания наших вакансий

Пора бы обновить описания наших вакансий. Вбрасывайте ваши предложения.

Текущие варианты

iOS разработчик

Задачи:

  • Разработка iOS/watchOS приложений для ресурсов Афиша, Рамблер, Чемпионат, Газета.ru, Lenta.ru, Мотор, Ferra.ru и других;

Требования:

  • Знание Objective-C, iOS SDK, Xcode, iOS Guidelines;
  • Знание принципов ООП и шаблонов проектирования;
  • Технический английский;
  • Желателен опыт разработки клиент-серверных приложений на основе JSON и XML;
  • Желателен опыт применения: Swift, TDD, VIPER, SOLID, CI.

Что мы предлагаем:

  • Много интересных новых проектов и возможность применять самые инновационные технологии;
  • Оформление и льготы в соответствии с ТК РФ;
  • Медицинская страховка (ДМС) и скидки на фитнес в нескольких сетевых клубах;
  • Удобный офис на станции метро Тульская;
  • Бесплатный транспорт от офиса до станции метро;
  • Гибкий график работы;
  • Молодой, дружный коллектив профессионалов, чай-кофе-баранки и отличная атмосфера для свободного творчества в офисе.

Ведущий iOS разработчик

Задачи:

  • Разработка и проектирование iOS/watchOS приложений для ресурсов Афиша, Рамблер, Чемпионат, Газета.ru, Lenta.ru, Мотор, Ferra.ru и других;
  • Проведение code review;
  • Проектирование архитектуры;
  • Выступление на конференциях;
  • R&D;
  • Управление группой разработчиков.

Требования:

  • Знание Objective-C, iOS SDK, Xcode, iOS Guidelines;
  • Желательно знание других языков программирования – Ruby, Python;
  • Понимание принципов ООП, шаблонов проектирования, классических алгоритмов и структур данных;
  • Опыт разработки клиент-серверных приложений на основе протоколов JSON и XML;
  • Умение проектировать архитектуру сложных приложений;
  • Опыт управления командой разработчиков;
  • Технический английский;
  • Обязателен опыт применения: Unit Testing, VIPER, SOA, SOLID.
  • Желателен опыт применения: Jenkins, Fastlane.

Что мы предлагаем:

  • Много интересных новых проектов и возможность применять самые инновационные технологии;
  • Оформление и льготы в соответствии с ТК РФ;
  • Медицинская страховка (ДМС) и скидки на фитнес в нескольких сетевых клубах;
  • Удобный офис на станции метро Тульская;
  • Бесплатный транспорт от офиса до станции метро;
  • Гибкий график работы;
  • Молодой, дружный коллектив профессионалов, чай-кофе-печенки и отличная атмосфера для свободного творчества в офисе

Тайм менеджмент для самых маленьких

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

Хаотичный набор тезисов:

  • Тайм менеджмент - зачем он нужен
  • Кратко о GTD
  • Кратко об Agile Results
  • Инструменты: Omnifocus, Evernote

Обновить гайдлайны

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

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

Провести рассказ для дизайнеров по новым фичам iOS10

Предварительно договорились на 30 июня 18:00 в Лектории.

Распределение тем:

  • 228, 213 - 3d touch + расширения - Саша
  • 216 - анимации и переходы - Ира
  • 230 - CallKit - Саша
  • 225 - Siri - Вадим
  • 214 - Safari расширения - Андрей
  • 240 - Proactive suggestions - Саша
  • 222, 233, 236 - Apps Adaptive, new layout - Стас
  • 223 - search api - Андрей
  • Про часы - Ваня
  • 204, 225 - imessage и стикеры - Миша Р
  • 509 - speach kit - Стас
  • 707, 708 - нотификации - Макс
  • 724 - wide color + pdf - Миша Г

Рассказ об устройстве и особенностях Typhoon

Планирую выступить с докладом о Typhoon, подготовленным к MobiusConf.

Полное содержание доклада

Typhoon - очень мощный инструмент в руках разработчика. Помимо своей основной роли - реализации всех видов Dependency Injection (property, constructor, method), он также выступает в роли декларативного языка архитектуры приложения. Для того, чтобы полностью проанализировать взаимосвязи между всеми элементами и понять особенности их жизненного цикла, достаточно посмотреть на слой TyphoonAssembly. Именно эта особенность как всех IoC контейнеров, так и Typhoon в частности, остается за пределами внимания обычных разработчиков. Цель моего выступления - показать разработчикам, зачем в их приложении нужен дополнительный слой Assembly, чтобы каждый мог осознанно принять решение, встраивать ему Typhoon или нет. Определяющим моментом в этом вопросе должны выступать не детали синтаксиса и особенности внутреннего устройства библиотеки, а структурные вопросы. Лучший способ их раскрыть - показать слушателям методы работы с Typhoon во время разработки абстрактного приложения. Я планирую затронуть следующие возможности фреймворка:

  • Базовые способы инжекции зависимостей,
  • Автоинъекция,
  • Инъекция зависимостей в storyboard, xib, реюзабельные ячейки,
  • Работа с runtime-параметрами,
  • Работа с конфигурационными файлами,
  • Прозрачная декорация создаваемых объектов,
  • Написание интеграционных тестов с TyphoonPatcher,
  • Написание тестов на TyphoonAssembly.

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

Может ли быть нам полезен Application Coordinator?

Андрей Панов из Avito на разных конференциях рассказывает о концепции Application Coordinator'a. Эта штука, в которой централизуется процесс переходов между модулями приложения. Она позволяет уйти от того, что модулям необходимо знать друг о друге: они сообщают о желании перейти на другой модуль и передать в него данные этому самому координатору, а тот уже знает на какой экран и как надо переходить.

Вброс на подумать: может ли такая концепция пригодиться нам в VIPER для каких-нибудь случаев?

Слайды тут: https://speakerdeck.com/andreypanov/introducing-application-coordinators

Код тут: https://github.com/AndreyPanov/ApplicationCoordinator

Flux, Redux, ReSwift

Интересно было бы послушать рассказ о ReSwift, Redux, Flux

Как мы делали ЖЖ

8 октября выступаю на TK Conf с докладом на тему "Как мы делали ЖЖ".

Я бы соврал, если бы сказал, что работа над новым приложением LiveJournal для iOS проходила абсолютно гладко - такого просто не бывает. Несколько используемых API, часть из которых дорабатывалась в процессе, непростой дизайн, необычные продуктовые решения, сложная политика кэширования - все это делало проект не просто сложным, а и очень интересным с точки зрения разработки.

В своем выступлении я хочу рассказать несколько историй о том, как налаженные процессы разработки и применение принятых в iOS команде Rambler&Co архитектурных подходов помогли нам в каких-то случаях пережить столкновение с граблями, а в каких-то - и вовсе не наступать на них. Я затрону такие темы, как code review и его роль в поддержании концептуальной целостности проекта, continuous delivery, организацию гибкого сетевого слоя, unidirectional data flow, и, конечно же, VIPER.

И небольшой спойлер: мы все-таки его выпустили, и оно крутое!

Тесты и swift

Есть желание рассмотреть следующие аспекты

  • Почему OCMock (OCMockito и т.д.) не подходят для Swift-проектов.
  • Как писать чистые тесты на Swift, какие нужно соблюдать правила проектирования классов.
  • Как писать полезные моки на Swift.
  • Как ускорить написание тестов, какие доступны библиотеки.

Рассказ про Universal links

На WWDC 15 Apple представил новый подход к deep linking под названием Universal links. Рассказ про опыт внедрения Universal links на Афише.

Основные тезисы:

  1. Что это и зачем придумали
  2. Схема работы
  3. Как настроить у себя в проекте
  4. Особенности реализации
  5. Возникшие проблемы на Афише и как их решали

Исследовать возможность использования Danger в наших процессах

Danger - очень крутая тулза для атоматизации кучи разных проверок при мердже веток. Есть сильное ощущение, что он может помочь и нам - нужно детальнее исследовать вопрос, проверить наличие работающей интеграции с GitLab и определить список интересных нам фич.

Deeplinking and Web to App traffic.

Всем привет!

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

Branch является международным лидером в этой области, SDK которого интегрирован в такие приложения как Twitter, Pinterest, Airbnb, Swarm и другие. Мы собрали очень много граблей и поэтому с удовольствием делимся опытом:)

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

Тезисы

Краткий обзор о том, что такое диплинки и deffered deeplink.
Кейсы перемещения пользователей Web -> App.
Case studies от крупных приложений.
Идеи использования диплинков на примере приложений Rambler.

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

Проблема code-style

Есть проблема разных стилей на одном проекте. Хочется, чтобы была специальная тулза, которая автоматически приводила к одному стилю. Да, в xcode есть что-то для этого, но оно довольно слабенькое.

Поресерчил: есть плагин ClangFormat. Там можно забить свой конфиг и применять к своему проекту.
Плагин: https://github.com/travisjeffery/ClangFormat-Xcode
Поиграться с параметрами: http://clangformat.com/

Он довольно мощный, предлагаю создать общий конфиг, при помощи которого можно было бы причесать все проекты под один стиль.

Чистые тесты

Появилось желание выступить на одной из будущих конференций с темой под рабочим названием "Чистые тесты".

Описание

Последние полтора года на каждой из наших встреч мы рассказываем о том, почему продуманная и чистая архитектура мобильных приложений - это нужно и важно. За попытками спроектировать серебряную пулю мы очень часто забываем - или просто не уделяем достаточно внимания менее заметной части нашего кода - тестам.
Я не буду рассказывать о том, зачем нужны unit-тесты. Обещаю не показывать схему этапов TDD и не разыгрывать сценки red-green-refactor. В рамках этого доклада примем за факт то, что тесты нужны и мы их пишем.
Я хочу рассказать о том, почему не стоит обделять вниманием unit-тесты, как подходить к их проектированию и осуществлять постепенный рефакторинг. Выступление, как обычно, подкреплено зарядом личной боли и опыта от поддержки базы в 3.000 unit-тестов на одном проекте и 1.000 на другом.

Тезисы

Выступление на Rambler.iOS: Об электронной коммерции

Планируется рассказать об электронной коммерции в целом и о ее применении в мобильной мире в частности.

Предварительно, доклад состоит из двух частей: общей, о теории электронной коммерции и интернет-эквайринга, и частной, о проведении платежей с помощью iOS-устройства.

Докладчики: @Brain89 и @GooKellas.
Описание доклада от @GooKellas:

В своем докладе я расскажу, что такое электронная коммерция и интернет-эквайринг в частности, а также почему это актуально. Будут рассмотрены основные участники и этапы обработки платежной транзакции, выполненной с помощью банковской карты в сети. Также коснемся вопросов защиты от мошенничества с данными банковских карт при помощи технологии 3-D Secure и узнаем, зачем проходить сертификацию PCI DSS. В конце поговорим про возможность осуществления оплаты банковскими картами в мобильных приложениях.
Доклад рассчитан на новичков, которые только начинают знакомиться с электронными платежами.

Выступление планируется на Rambler.iOS 7

Разработать универсальный компонент+API для показа меню разработчика

В большинстве наших приложений требуется отображать меню разработчика. Сейчас проблема везде решается по-разному: кто-то зашивается на флажки, изменяемые в зависимости от release-схемы, кто-то просит сервер вместе с профилем возвращать права пользователя. Нужно разработать единое решение, которое будет решать следующие задачи:

  • Доступ к меню должны получать строго определенные устройства/пользователи.
  • Меню должно быть доступно во всех типах сборок - дебажных, тестовых, релизных.
  • Должен быть исключен человеческий фактор (все помнят историю с Рамблер.Почтой).
  • Встраиваться должно легко и просто.

Дополнительные хотелки:

  • Система прав доступа - тестировщики и бизнес должны видеть разный функционал.
  • Предустановленные возможности: отправка событий в аналитику, креш приложения.
  • Интеграция с FLEX.

Вариант решения, которы по-быстрому накидали:

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

Implement ObjectIndexer component

11 месяцев назад @CognitiveDisson в своей статье про CoreSpotlight пообещал, что в скором времени мы выпустим компонент, архитектуру которого он обрисовал. Потом Вадик перешел на ЖЖ, времени стало в разы меньше - и вот недавно мы об этом снова вспомнили.

Сейчас я встраиваю интеграцию с CoreSpotlight в Рамблер.Конференции. После этого мы посмотрим на получившуюся систему и я вынесу ее в отдельный компонент.

Доработать форму аттестации

Мне на днях скинули форму аттестации нашего тестировщика. В ней все сделано неплохо: по каждому пункту можно проставить рейтинг от 1 до 5, под каждым пунктом или группой пунктов можно оставить комментарии. Надо бы нашу форму оценки подтянуть.

Ссылка (только не отсылайте результат): http://goo.gl/forms/ol066GJnbgrEnuYt1

Вынести в pod TableViewAnimator

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

Запросы тем для еженедельных докладов

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

Вопросы, задаваемые на собеседованиях

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

Так вот, давайте обсудим, какие темы помимо упомянутых стоит затрагивать.

Рассказ о применении составных операций в SOA-проекте

В последних спринтах на проекте "Рамблер/Почта" я занимался, в том числе, улучшением сетевого слоя приложения. Для этого был выбран подход "Compound operations" или "Составные операции", предложенный Apple на WWDC (Advanced NSOperations) и развитый ребятами из проекта Livejournal.

На основе их опыта и собственного видения я создал компонент для удобной интеграции данного подхода в проект. В своём рассказе я затрону как тему конкретной реализации компонента (архитектурной и технической части), так и тему внедрения компонента в реальный проект (на примере Рамблер/Почты или Рамблер/Конференций).

Доклад запланирован на 17 июня.

Вынести в pod Ponsomizer

О компоненте Ponsomizer из Чемпионата мы рассказывали уже два раза. Его уже используют за пределами проекта, поэтому его неплохо бы тоже вынести отдельно.

Рассказ о тренинге для спикеров

21-22 числа проходил тренинг для спикеров. Впечатления о самого тренинга более чем хорошее, степень полезности - средняя. Готов сделать краткий пересказ с основными моментами.

Обновляем список материала для ознакомления

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

Список составлялся нами с @Hastewave на скорую руку, и его явно можно сильно профильтровать и дополнить. Ваши предложения - в комментарии.

SOA

Многие разработчики любят спорить о преимуществах и недостатках того или иного подхода к реализации верхнего слоя мобильного приложения - MVC, MVVM, VIPER. При этом зачастую уделяется недостаточно времени продумыванию логики работы с данными. Роли компонентов для получения и обновления моделей получаются непродуманными, появляется дублирование кода, сильная связность, размытая ответственность. Как следствие, усложняется понимание и последующее расширение данного слоя.

Я хочу рассказать про подход, который давно используется в server-side разработке, но позже был адаптирован к реалиям мобильных приложений. Service Oriented Architecture задает строгий каркас в части обработки данных, фиксируя ответственность компонентов. Такой подход оказывается крайне полезным как в части поддержки и рефакторинга, так и при последующем расширении приложения.

  • Роль сервисного слоя в мобильном приложении
  • Контракты объектов сервисного слоя
  • Пример SOA для простого приложения
  • Преимущества и недостатки SOA

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.