Егор Толстой рассказывает о том, как он справился с проблемами постраничной загрузки данных в мобильном клиенте для одного абстрактного известного блог-сервиса.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
Очередной скучный доклад про логгированиеPython Meetup
Стас Рудаков, компания СООО "Гейм Стрим"/Wargaming.net
Значение логов очень часто недооценивается, а зря. Доклад с оживленным диспутом со всеми участниками митапа, чтобы разобраться: как, куда и зачем писать логи. Помимо этого затронут вопрос, как из логов выжать больше информации.
Двойное освобождение ресурсов. Недостижимый код. Некорректные операции сдвига. Неправильная работа с типами. Опечатки и copy-paste. Проблемы безопасности. Путаница с приоритетом операций.
Pod is an evolution of Perl 5's POD markup. Compared to POD, Perl 6's Pod is much more
uniform, somewhat more compact, and considerably more expressive.
Established in 2005 specification has undergone several revisions and is currently stable.The specification is written in Perl 6 Pod and is a good means of testing implementations.
There are several implementations in Perl 5 and Perl 6.
I'll talk about the differences from Perl 5 POD, key features and how I use Perl 6 Pod.
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Badoo Development
Мы уже около 3-х лет используем HandlerSocket в нашей инфраструктуре сайта badoo.com. За это время мы накопили опыт решения характерных для Handlersocket проблем, появляющихся при использовании.
Несколько команд внутри Баду активно используют HS для решения разноплановых задач мобильных и настольных приложений Баду. Где-то мы используем HS как замену Memcached, где-то как простой поисковый механизм, где-то как хранилище типа ключ-значение. Наш HS-кластер содержит более 30 серверов, обрабатывая порядка 8000 запросов/сек.
Спикер также предоставляет написанный им код библиотеки-клиента для Handlersocket на PHP.
Про что доклад:
• что это вообще такое;
• чем является HS и чем не является;
• внутреннее устройство и работа HS;
• протокол;
• примеры использования в Баду, с цифрами и графиками;
• особенности: шардирование, Percona Server, постоянные соединения (бенефиты, проблемы и их решения), tips & tricks;
• полезные сслыки, ответы на FAQ.
Доклад рассчитан на highload-разработчиков, работающих с реляционными БД.
В своем докладе Денис Батвинкин кратко рассказал об истории LLVM и его внутренней архитектуре.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
Rambler.iOS #9: Анализируй это! (Сергей Крапивенский).
Доклад посвящён наиболее популярным статическим анализаторам кода для iOS: как ими пользоваться, какие проблемы они решают, как внедрить их в привычный цикл разработки, как писать для них свои правила. Также рассмотрен опыт интеграции статического анализа и CI.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
Очередной скучный доклад про логгированиеPython Meetup
Стас Рудаков, компания СООО "Гейм Стрим"/Wargaming.net
Значение логов очень часто недооценивается, а зря. Доклад с оживленным диспутом со всеми участниками митапа, чтобы разобраться: как, куда и зачем писать логи. Помимо этого затронут вопрос, как из логов выжать больше информации.
Двойное освобождение ресурсов. Недостижимый код. Некорректные операции сдвига. Неправильная работа с типами. Опечатки и copy-paste. Проблемы безопасности. Путаница с приоритетом операций.
Pod is an evolution of Perl 5's POD markup. Compared to POD, Perl 6's Pod is much more
uniform, somewhat more compact, and considerably more expressive.
Established in 2005 specification has undergone several revisions and is currently stable.The specification is written in Perl 6 Pod and is a good means of testing implementations.
There are several implementations in Perl 5 and Perl 6.
I'll talk about the differences from Perl 5 POD, key features and how I use Perl 6 Pod.
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Badoo Development
Мы уже около 3-х лет используем HandlerSocket в нашей инфраструктуре сайта badoo.com. За это время мы накопили опыт решения характерных для Handlersocket проблем, появляющихся при использовании.
Несколько команд внутри Баду активно используют HS для решения разноплановых задач мобильных и настольных приложений Баду. Где-то мы используем HS как замену Memcached, где-то как простой поисковый механизм, где-то как хранилище типа ключ-значение. Наш HS-кластер содержит более 30 серверов, обрабатывая порядка 8000 запросов/сек.
Спикер также предоставляет написанный им код библиотеки-клиента для Handlersocket на PHP.
Про что доклад:
• что это вообще такое;
• чем является HS и чем не является;
• внутреннее устройство и работа HS;
• протокол;
• примеры использования в Баду, с цифрами и графиками;
• особенности: шардирование, Percona Server, постоянные соединения (бенефиты, проблемы и их решения), tips & tricks;
• полезные сслыки, ответы на FAQ.
Доклад рассчитан на highload-разработчиков, работающих с реляционными БД.
В своем докладе Денис Батвинкин кратко рассказал об истории LLVM и его внутренней архитектуре.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
Rambler.iOS #9: Анализируй это! (Сергей Крапивенский).
Доклад посвящён наиболее популярным статическим анализаторам кода для iOS: как ими пользоваться, какие проблемы они решают, как внедрить их в привычный цикл разработки, как писать для них свои правила. Также рассмотрен опыт интеграции статического анализа и CI.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift?RAMBLER&Co
Rambler.iOS #9: Нужны ли бэкенд-разработчики, когда есть Swift? (Самвел Меджлумян)
Любой iOS-команде в повседневной практике требуется тот или иной вспомогательный инструментарий, оптимизирующий рутинные процессы. В рамках доклада рассмотрен Swift как инструмент для реализации этих задач, проведено сравнение имеющихся фреймворков между собой, а наиболее подходящий для указанных задач рассмотрен в сравнении с популярными серверными платформами.
Также затронуты вопросы микросервисной архитектуры, проблемы и best practices в бэкенд-разработке.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
Rambler.iOS #9: Life with out of memory (Денис Батвинкин).
Out of memory error – ошибка, о которой не стоит забывать. В докладе Денис разбирает, что такое out of memory error и почему стоит уделить этой проблеме больше внимания. Отдельное внимание уделено причинам OOM и инструментам, которые помогут ее отследить. Также на примере iOS-приложения "Livejournal" рассмотрена практика борьба с этой ошибкой.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
Бениамин Саркисян рассказал про устройство и принципы работы статического анализатора кода OCLint, а также показал, как можно написать свои собственные правила для него.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
Екатерина Тришина рассмотрела плюсы и минусы различных видов диаграмм на примере кейса проектирования сложного блока функционала в проекте Афиша.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
Артур Протько рассказал о различных технологиях семейства App Thinning: bitcode, slicing, on-demand resources. Помимо теории приводятся практические примеры и статистика, полученная в проекте Рамблер/почта.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
This document provides an overview of Dip, a dependency injection framework for Swift. It discusses key Dip concepts like dependency containers, component registration, and resolution. Key points include:
1. Modules are represented as dependency containers that manage their own components.
2. All components are registered in their containers with their dependencies.
3. The dependency graph is resolved by obtaining fully-initialized components from their containers.
Михаил Головко рассказал о принципах устройства и основных возможностях YapDatabase.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
Последние полтора года на каждой из наших встреч мы рассказываем о том, почему продуманная и чистая архитектура мобильных приложений — это нужно и важно. За попытками спроектировать серебряную пулю мы очень часто забываем — или просто не уделяем достаточно внимания менее заметной части нашего кода — тестам.
Егор Толстой расскажет о том, почему не стоит обделять вниманием unit-тесты, как подходить к их проектированию и осуществлять постепенный рефакторинг. Выступление, как обычно, подкреплено зарядом личной боли и опыта от поддержки базы в 3.000 unit-тестов на одном проекте и 1.000 на другом.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
Многие разработчики любят спорить о празных подходах к реализации верхнего слоя мобильного приложения — MVC, MVVM, VIPER. При этом зачастую уделяется недостаточно времени продумыванию логики работы с данными. Как следствие, усложняется понимание и последующее расширение данного слоя.
Стас Цыганов расскажет про подход, который давно используется в server-side разработке, но позже был адаптирован к реалиям мобильных приложений. Service Oriented Architecture задает строгий каркас в части обработки данных, фиксируя ответственность компонентов. Такой подход оказывается крайне полезным как в части поддержки и рефакторинга, так и при последующем расширении приложения.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
Rambler.iOS #8: Make your app extensible with JavaScriptCoreRAMBLER&Co
This document discusses using JavaScriptCore to extend the functionality of apps. It provides an example of using JavaScriptCore to evaluate JavaScript code and access the results. It also outlines how JavaScriptCore maps JavaScript types to Objective-C and Swift types. The document describes how JavaScriptCore creates a virtual machine and handles single-threaded execution. It then shows how to export Swift classes to JavaScript using a protocol. Finally, it lists some ways apps like Paw could leverage JavaScriptCore, such as for code generators, importers, and dynamic values.
Rambler.iOS #8: Как не стать жертвой бэкендеровRAMBLER&Co
Клиент-серверное взаимодействие лежит в основе большинства мобильных приложений. Язык общения между клиентом и сервером всегда закреплён определённым контрактом. Однако валидация этого контракта незаслуженно остаётся в стороне. Отсюда и большинство проблем на клиенте — некорректное отображение, неконсистентность данных и падения.
Как избежать этих проблем и повысить уровень crash-free ваших приложений, добавив предварительную валидацию, расскажет Ирина Дягилева.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
RDSDataSource: iOS Reverse Engineering for inexperiencedRAMBLER&Co
Валерий Попов рассказывает о том, как организован процесс реверс-инжиниринга iOS приложений.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
RDSDataSource: Автогенерация документации для SDKRAMBLER&Co
Помимо различных приложений в нашей команде разрабатывается несколько SDK, и вопрос с генерацией документации становится всё более актуальным. Михаил рассказал какие системы для создание документации существуют, чем они хороши и какую из них мы выбрали для своих нужд. Кроме этого освещаются вопросы исползования такой документации и ее автоматического деплоя через Jenkins и fastlane.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
Михаил Рахманов рассказывает о паттерне Promise и его использовании в iOS разработке.
Краткие тезисы:
- Что такое promises?
- Использование promises в iOS разработке (существующие библиотеки и подходы)
- Реализация promises библиотекой PromiseKit (основные методы, цепочки promises, обработка ошибок)
- Какие задачи можно решить с помощью promises, а какие - нельзя
- Использование promises на примере приложения: драм-машины с возможностью сохранять аудио-дорожки
- Подведение итогов: преимущества и недостатки.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
2. DISCLAIMER
ВЫСТУПЛЕНИЕ ОСНОВАНО НА ЛИЧНОМ
СТРАДАНИЯХ ОПЫТЕ.
ДОКЛАД СОДЕРЖИТ ДЕТАЛЬНОЕ ОПИСАНИЕ
ОТВРАТИТЕЛЬНЫХ КОСТЫЛЕЙ
И ПОЭТОМУ НЕ РЕКОМЕНДУЕТСЯ К ПРОСМОТРУ
НИКОМУ.
61. for (ShortPost *post in snapshot) {
if (![cachedPosts containsObject:post]) {
[self downloadPost:post];
}
}
for (Post *post in cachedPosts) {
if (![snapshot containsObject:post]) {
[self deletePost:post];
}
}