Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"IT Event
Последние несколько лет в индустрии активно развивается WebRTC — технология, которая позволяет делать голосовые и видеозвонки прямо из браузеров. Но мало кто знает, что эта же технология может быть использована в нативных мобильных приложениях и основанных на них SDK. В своем докладе я хочу рассказать про опыт заворачивания существующих Android и iOS SDK в React Native:
— Как поддерживать несколько разных архитектур
— Как работать с нативными виджетами, такими как «вывод видео»
— Синхронизация event loop между C-реализацией и — JavaScript движком React Native
— Планы на будущее: React Native WebRTC
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"IT Event
Последние несколько лет в индустрии активно развивается WebRTC — технология, которая позволяет делать голосовые и видеозвонки прямо из браузеров. Но мало кто знает, что эта же технология может быть использована в нативных мобильных приложениях и основанных на них SDK. В своем докладе я хочу рассказать про опыт заворачивания существующих Android и iOS SDK в React Native:
— Как поддерживать несколько разных архитектур
— Как работать с нативными виджетами, такими как «вывод видео»
— Синхронизация event loop между C-реализацией и — JavaScript движком React Native
— Планы на будущее: React Native WebRTC
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019corehard_by
Мир изменился. То, что работало раньше, не то чтобы перестало работать, но стало недостаточным. Парное программирование, обзоры кода, юнит-тесты по-прежнему важны и необходимы, но они уже не могут обеспечить должного уровня качества и надёжности С++ проектов. Многие проекты выросли в сотни раз. Рост происходил постепенно, и еще не все поняли, что произошло. Любой большой старый проект состоит из разнородных слоёв (геологических отложений) и, самое главное, уже никто не знает, как это всё работает. Пришло время инструментов и методологий, помогающих сохранять качество и целостность кода: DevSecOps, статический анализ, динамический анализ, платформы измерения качества.
Андрей Карпов, Приватные байки от разработчиков анализатора кодаSergey Platonov
Доклад о редких нестандартных расширениях языка С++, про которые никто не знает, но которые надо поддерживать в анализаторе кода.
О магии Visual C++ с файлом stdafx.h, когда проект компилируется, хотя не должен. О том как зародился viva64 (предшественник PVS-Studio) для поиска 64-битных проблем. Как и почему исчез анализ кода, который одно время существовал в компиляторе Intel C++.
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionNikita Lipsky
Говоря о Java, мы подразумеваем как минимум две вещи: JVM (виртуальную Java-машину) и Java-байткод, который исполняется на этой машине.
Внутреннее устройство JVM непростое, но очень важно понимать, из каких частей она состоит, какая часть за что отвечает и как это все вместе работает хотя бы в самых общих чертах. Эти знания помогут вам в понимании того, как работает ваша программа и как можно улучшить ее работу.
В этом докладе мы не будем лезть в кишки какой-то конкретной реализации JVM, однако мы покажем где у JVM кишки расположены, а также где находятся и для чего служат ее печень, сердце, почки, мозг и другие органы.
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...corehard_by
В докладе обсуждаются способы улучшения времени сборки C++ проектов, опыт полученный в ходе ускорения сборки клиента и тулов World Of Tanks. Также описывается эффект, который они оказывают на организацию кодобазы (как позитивный, так и негативный) и затраты, которые необходимы для поддержки этих решений, т.к. не все они бесплатны. Методики, описываемые в докладе: ускорение линковки (Incremental Linking, Fastlink), ускорение компиляции(Include what you use, использование precompiled headers).
Доклад на конференциях JPoint 2016, JBreak 2016
Abstract: В Java SE 8 были добавлены лямбда-выражения, дефолтные методы, типовые аннотации, компактные профили и т.п., что привело к изменениям в спецификации Java SE платформы.
В этом докладе мы рассмотрим, как новые возможности, добавленные в Java 8, были реализованы в Excelsior JET JVM, полностью написанной с нуля, совершенно непохожей на Oracle HotSpot, но при этом совместимой со спецификацией Java SE.
В итоге, слушатель освежит в памяти, что появилось в Java 8, как это повлияло на спецификацию JVM, во что превращаются лямбда-выражения в Java байт-коде, как их можно статически оптимизировать, а также получит некоторое представление о внутреннем устройстве еще одной JVM.
Aterdux Entertainment: Собственный движок как способ экономной и эффективной...DevGAMM Conference
От примитивных «Японских Кроссвордов» в 1998 до хардкорных «Легенд Эйзенвальда» в 2014.
Как был выбран путь использования собственных движков, сколько их было создано, через какие стадии и сложности разработки пришлось пройти, какие выгоды были получены и каким именно решениям они обязаны. Максимальная скорость ближе к процессору, гибкость к внезапным изменениям, кроссплатформа, собственные скрипты и утилиты для контента — когда всё свое, родное, работает только на благо разработки.
Java SE 8 has brought lambdas, default methods, type annotations, compact profiles, etc. As a result, the Java SE platform specification was changed to reflect new features.
The session shows how the new Java 8 features have been implemented in Excelsior JET JVM, written from scratch, very different from the Oracle HotSpot JVM, but compatible with the Java SE specification.
As a result, an attendee will refresh his/her memory regarding new Java 8 features, will learn how they affected the JVM specification, how the lambda expressions are translated into Java bytecode and how they can be optimized at the JVM level.
В Java 9 с неизбежностью появятся модули. Кого-то это мало волнует, кого-то пугает, кто-то искренне недоумевает: зачем, ведь у нас уже больше 15 лет есть OSGi, который решает ровно те же проблемы, что и модули? Здесь мы попробуем разобраться, какие проблемы пытается решить OSGi, как он их решает и решает ли в действительности. Затем посмотрим, какие проблемы, которые пытается решить OSGi, Jigsaw совсем не решает и почему, а также какие проблемы решает и как. Ну и в конце, какие проблемы Jigsaw при этом привносит в экосистему Java и что с этим делать.
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)Ontico
HighLoad++ 2017
Зал «Пекин+Шанхай», 7 ноября, 13:00
Тезисы:
http://www.highload.ru/2017/abstracts/2907.html
Конкуренция в банковском сегменте усиливается с каждым годом, повышаются ставки и цели по прибыли компаний. При прочих равных выигрывает тот, кто может быстрее разрабатывать продукты и мгновенно реагировать на потребности рынка. Банки рассматривают DevOps-трансформацию как средство, которое позволит им кардинально повысить финансовую эффективность, качество финансовых продуктов и поможет услышать и быстро реагировать на клиента.
...
The practical story telling how Devops changed the culture of quality in the Bank. Recently Devops became mainstream topic. But only few people have a deep understanding how to apply it to the process of software quality assurance. Some believe that the Devops kills manual testing.
I will talk about changes it makes to the role of QA engineers themself. The discussion main point is NOT about tools or technologies. It’s NOT about the “silver bullet” for your problems with the quality of products.
Instead, I will show you an integrated approach which we used for quality assurance. It allowed us to significantly reduce the cost of finding and fixing defects. This approach has also accelerated the development and delivery value to our customers and made the whole process more transparent and predictable.
Статический анализ кода: борьба с удорожанием ошибокAndrey Karpov
Нет смысла говорить, что "надо писать код без ошибок". Ошибки были, есть и будут. Все хорошо понимают, что ошибки следует исправлять. Люди забывают, что ошибка должна быть исправлена с минимальными временными и денежными затратами!
SECON'2016. Александр Шитиков, Кузнецов Максим, Кроссплатформенная разработка...SECON
- Гибридные приложения; - Известные технологии: Xamarin, RoboVM, Dropbox djinni; - Java как мост между платформами и языками; - Варианты разработки с использованием Java Native Interface.
Индустрия меняется прямо на глазах. Технология, еще вчера проходившая по категории "модно, но не нужно", сегодня используется даже бомжами, а завтра выбрасывается на свалку. Что учить, куда смотреть, какие книги читать? Я попробую рассказать свой взгляд на серверное программирование сейчас, в 2016 году.
Как не подавиться большим старым проектом. Юрий Минаев ➠ CoreHard Autumn 2019corehard_by
Мир изменился. То, что работало раньше, не то чтобы перестало работать, но стало недостаточным. Парное программирование, обзоры кода, юнит-тесты по-прежнему важны и необходимы, но они уже не могут обеспечить должного уровня качества и надёжности С++ проектов. Многие проекты выросли в сотни раз. Рост происходил постепенно, и еще не все поняли, что произошло. Любой большой старый проект состоит из разнородных слоёв (геологических отложений) и, самое главное, уже никто не знает, как это всё работает. Пришло время инструментов и методологий, помогающих сохранять качество и целостность кода: DevSecOps, статический анализ, динамический анализ, платформы измерения качества.
Андрей Карпов, Приватные байки от разработчиков анализатора кодаSergey Platonov
Доклад о редких нестандартных расширениях языка С++, про которые никто не знает, но которые надо поддерживать в анализаторе кода.
О магии Visual C++ с файлом stdafx.h, когда проект компилируется, хотя не должен. О том как зародился viva64 (предшественник PVS-Studio) для поиска 64-битных проблем. Как и почему исчез анализ кода, который одно время существовал в компиляторе Intel C++.
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionNikita Lipsky
Говоря о Java, мы подразумеваем как минимум две вещи: JVM (виртуальную Java-машину) и Java-байткод, который исполняется на этой машине.
Внутреннее устройство JVM непростое, но очень важно понимать, из каких частей она состоит, какая часть за что отвечает и как это все вместе работает хотя бы в самых общих чертах. Эти знания помогут вам в понимании того, как работает ваша программа и как можно улучшить ее работу.
В этом докладе мы не будем лезть в кишки какой-то конкретной реализации JVM, однако мы покажем где у JVM кишки расположены, а также где находятся и для чего служат ее печень, сердце, почки, мозг и другие органы.
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...corehard_by
В докладе обсуждаются способы улучшения времени сборки C++ проектов, опыт полученный в ходе ускорения сборки клиента и тулов World Of Tanks. Также описывается эффект, который они оказывают на организацию кодобазы (как позитивный, так и негативный) и затраты, которые необходимы для поддержки этих решений, т.к. не все они бесплатны. Методики, описываемые в докладе: ускорение линковки (Incremental Linking, Fastlink), ускорение компиляции(Include what you use, использование precompiled headers).
Доклад на конференциях JPoint 2016, JBreak 2016
Abstract: В Java SE 8 были добавлены лямбда-выражения, дефолтные методы, типовые аннотации, компактные профили и т.п., что привело к изменениям в спецификации Java SE платформы.
В этом докладе мы рассмотрим, как новые возможности, добавленные в Java 8, были реализованы в Excelsior JET JVM, полностью написанной с нуля, совершенно непохожей на Oracle HotSpot, но при этом совместимой со спецификацией Java SE.
В итоге, слушатель освежит в памяти, что появилось в Java 8, как это повлияло на спецификацию JVM, во что превращаются лямбда-выражения в Java байт-коде, как их можно статически оптимизировать, а также получит некоторое представление о внутреннем устройстве еще одной JVM.
Aterdux Entertainment: Собственный движок как способ экономной и эффективной...DevGAMM Conference
От примитивных «Японских Кроссвордов» в 1998 до хардкорных «Легенд Эйзенвальда» в 2014.
Как был выбран путь использования собственных движков, сколько их было создано, через какие стадии и сложности разработки пришлось пройти, какие выгоды были получены и каким именно решениям они обязаны. Максимальная скорость ближе к процессору, гибкость к внезапным изменениям, кроссплатформа, собственные скрипты и утилиты для контента — когда всё свое, родное, работает только на благо разработки.
Java SE 8 has brought lambdas, default methods, type annotations, compact profiles, etc. As a result, the Java SE platform specification was changed to reflect new features.
The session shows how the new Java 8 features have been implemented in Excelsior JET JVM, written from scratch, very different from the Oracle HotSpot JVM, but compatible with the Java SE specification.
As a result, an attendee will refresh his/her memory regarding new Java 8 features, will learn how they affected the JVM specification, how the lambda expressions are translated into Java bytecode and how they can be optimized at the JVM level.
В Java 9 с неизбежностью появятся модули. Кого-то это мало волнует, кого-то пугает, кто-то искренне недоумевает: зачем, ведь у нас уже больше 15 лет есть OSGi, который решает ровно те же проблемы, что и модули? Здесь мы попробуем разобраться, какие проблемы пытается решить OSGi, как он их решает и решает ли в действительности. Затем посмотрим, какие проблемы, которые пытается решить OSGi, Jigsaw совсем не решает и почему, а также какие проблемы решает и как. Ну и в конце, какие проблемы Jigsaw при этом привносит в экосистему Java и что с этим делать.
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)Ontico
HighLoad++ 2017
Зал «Пекин+Шанхай», 7 ноября, 13:00
Тезисы:
http://www.highload.ru/2017/abstracts/2907.html
Конкуренция в банковском сегменте усиливается с каждым годом, повышаются ставки и цели по прибыли компаний. При прочих равных выигрывает тот, кто может быстрее разрабатывать продукты и мгновенно реагировать на потребности рынка. Банки рассматривают DevOps-трансформацию как средство, которое позволит им кардинально повысить финансовую эффективность, качество финансовых продуктов и поможет услышать и быстро реагировать на клиента.
...
The practical story telling how Devops changed the culture of quality in the Bank. Recently Devops became mainstream topic. But only few people have a deep understanding how to apply it to the process of software quality assurance. Some believe that the Devops kills manual testing.
I will talk about changes it makes to the role of QA engineers themself. The discussion main point is NOT about tools or technologies. It’s NOT about the “silver bullet” for your problems with the quality of products.
Instead, I will show you an integrated approach which we used for quality assurance. It allowed us to significantly reduce the cost of finding and fixing defects. This approach has also accelerated the development and delivery value to our customers and made the whole process more transparent and predictable.
Статический анализ кода: борьба с удорожанием ошибокAndrey Karpov
Нет смысла говорить, что "надо писать код без ошибок". Ошибки были, есть и будут. Все хорошо понимают, что ошибки следует исправлять. Люди забывают, что ошибка должна быть исправлена с минимальными временными и денежными затратами!
SECON'2016. Александр Шитиков, Кузнецов Максим, Кроссплатформенная разработка...SECON
- Гибридные приложения; - Известные технологии: Xamarin, RoboVM, Dropbox djinni; - Java как мост между платформами и языками; - Варианты разработки с использованием Java Native Interface.
Индустрия меняется прямо на глазах. Технология, еще вчера проходившая по категории "модно, но не нужно", сегодня используется даже бомжами, а завтра выбрасывается на свалку. Что учить, куда смотреть, какие книги читать? Я попробую рассказать свой взгляд на серверное программирование сейчас, в 2016 году.
SECON'2016. Кардава Звиад, Концепция Physical web. Eddystone format. Google b...SECON
Концепция Physical web как новый механизм взаимодействия с физическим миром. Преимущества стандарта eddystone по сравнению с iBeacon. Управление и мониторинг маячков с помощью Google beacon platform, разработка клиентских приложений (Proximity API, Nearby messages API, Places API). Разработка без маячков.
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON
В разработке игр существует множество сопутствующих проблем, которые приходиться решать разработчику, но которые напрямую не связаны с игровым процессом. Автоматизация рутинных задач - лучшее решение, позволяющее сэкономить время для воплощения творческого замысла в условиях компактных команд и компаний.
SECON'2016. Пименов Алексей, Как не выстрелить себе в ногу внедряя KPISECON
В крупных компаниях топ-менеджмент помешан на KPI, но мы то знаем, что в разработке ПО это приносит больше проблем, чем пользы. Как нам быть, если KPI неизбежен?
Компания «Моё дело» прошла путь от маленького стартапа до лидера рынка в своем сегменте. Вместе с ростом компании росла и ее it структура. Инфраструктура эволюционировала космическими темпами, кол-во проектов стремительно росло. Естественно, всем этим необходимо уметь грамотно оркестрировать. Как это делаем мы и во что это превращается мы и хотим вам рассказать.
Давайте абстрагируемся от всевозможных «мейнстримовых» библиотек/фреймворков и попробуем сами выставить требования к своему SPA приложению и создает его таким, каким хотим: - масштабируемым; - трестируемым; - гибким; - логически понятным.
SECON'2016. Аверин Сергей, Javascript-фреймворки: должен остаться только одинSECON
Рассказ от tech-менеджера о том, как мы в Acronis выбирали фреймворк в условиях, когда любое более-менее важное технологическое решение сразу затрагивает с десяток команд, несколько сотен человек и права «случайно все сломать» нет.
SECON'2016. Тарасенко Анна, Принцип YAGNI в управлении проектамиSECON
Один из острейших вопросов заказной разработки — правильная оценка сроков и бюджета проекта, чтобы и работа была выполнена, и заказчик доволен, и прибыль была адекватной. Я расскажу наше решение для нанесения максимальной пользы заказчику за интересный для нас бюджет.
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON
Набор практических приемов, которые позволяют создавать сложные многопоточные, параллельные, распределенные серверные приложения программистам без опыта сетевого и многопоточного программирования, работы с базами данных.
SECON'2016. Трошин Алексей, От 1 до 100: особенности выстраивания процессов в...SECON
Если вам повезёт, вы столкнётесь с ситуацией, когда ваша компания вырастет, и одна команда разработчиков превратится в множество. Как не потерять управление? Как собрать команду, которая в момент роста усилит компанию? Какие практики использовать? Поделюсь личным опытом нечеловеческих экспериментов над людьми и процессами :)
В докладе пойдет речь об экспорте Unity3D проектов на Flash-платформу. Докладчик на практических примерах покажет процесс разработки игры, расскажет о плюсах и минусах технологии, а также тонкостях взаимодействия Unity c AS3.
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Ontico
Unity3D - это внушительный набор средств для кроссплатформенной разработки игр и 3D-приложений. Однако ряд его особенностей может привести к внезапному падению производительности продукта на мобильных платформах.
Где же прячутся подводные камни? Как обеспечить оптимальный user experience на старом смартфоне? Каких "граблей" стоит избегать при написании кода и подготовке графики? Рассмотрим на примере RPG "Гильдия Героев" для Android и iOS.
Юрий Василевский «Автоматизация в XCode»
Yandex Mobile Camp в Санкт-Петербурге 2012
http://events.yandex.ru/events/yamobcamp/spb-may-2012/
Xcode — основной инструментарий разработки приложений под Mac OS X и Apple iOS. Он обладает широкими возможностями как для редактирования кода, так и для автоматизации задач. Мы обсудим некоторые из аспектов автоматизации (Code Sense, Targets, Services, Help), связанные с нумерацией сборок билдов, форматированием и контролем стиля кода, анализом дублированных участков кода, управлением внешними библиотеками.
Yandex Mobile Camp в Санкт-Петербурге, 30 мая 2012
Юрий Василевский, ведущий разработчик EPAM Systems, Mobile Solutions
Тема: Автоматизация в XCode
Тезисы:
Xcode — основной инструментарий разработки приложений под Mac OS X и Apple iOS. Он обладает широкими возможностями как для редактирования кода, так и для автоматизации задач.
Мы рассмотрим некоторые из аспектов автоматизации (Code Sense, Targets, Services, Help), связанные с нумерацией сборок билдов, форматированием и контролем стиля кода, анализом дублированных участков кода, управлением внешними библиотеками.
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...DevGAMM Conference
The session essentially focuses on case study of porting Divinity Original Sin 2 engine to Apple Metal API. Real-life examples are provided as well as a demo of frame capture, dissection and explanations of techniques used. The case study is followed by best practices section with advises for transitioning generic titles to Metal. The session concludes with ‘future tech’ section where advanced samples of Metal rendering technologies are displayed and briefly explained.
В скором времени, Unity получит поддержку еще одной платформы — WebGL, что позволит запускать игры в браузере без каких-либо плагинов. Валентин покажет, как работает процесс паблишинга, подробно остановится на IL2CPP — внутренней разработке Unity, которая и делает всю основную магию, а так же расскажет о дальнейших планах внедрения этой технологии на другие платформы.
Андрей Сибирёв "Ваше собственное облако — война за независимость"Yandex
Сегодня всё больше и больше компаний решаются на перевод своей инфраструктуры и сервисов в облака. Некоторые даже начинают строить свой бизнес, не имея ни единого собственного сервера для обработки или хранения пользовательских данных, и при этом становятся лидерами в своих сегментах рынка.
Но, несмотря на очевидные преимущества этого подхода, не всех устраивает перспектива быть привязанными к конкретному поставщику облачных услуг. В докладе рассказывается об основных тенденциях в современном «облакостроении», о свободе и гибкости и, самое главное, представляется наша открытая облачная платформа.
Доклад будет рассказывать о современных подходах проектирования ПО. Основной темой будет построение компонентных архитектур на примере архитектуры сцены 3D движка. Будет рассмотрен классический объектно-ориентированный подход организации сцены, его плюсы и минусы, и в качестве альтернативы будет показан компонентно ориентированный подход организации сцены. Доклад позволит слушателям понять, как разрабатывать сложные системы, которые впоследствии можно легко поддерживать.
Когда проект делает один разработчик — все просто. Когда над ним работает небольшая команда, можно синхронизироваться и договориться. А вот когда проектов (сайтов и приложений) становится много, и над ними трудится множество команд с перекрестной функциональностью и смежными зонами ответственности, все становится сложным и запутанным.
Я расскажу о своем виденье архитектуры фронтенда, какой она должна быть, чтобы обеспечить её масштабируемость. На основе своего опыта и проблем, с которыми сталкиваются большие проекты.
Видео: https://www.youtube.com/watch?list=PLknJ4Vr6efQFtZmsXmGG64Rz_PHrcXCBL&v=z9y6PNC2FL0
Unity: "Очевидное-невероятное” или хитрости разработки на Unity AndroidDevGAMM Conference
Unity для платформы Android решает за разработчика огромное количество проблем. Что впрочем не отменяет умелое использование этого мощного инструментария. Приходите и узнайте секреты и хитрости разработки от участника команды Unity Android.
Продуктивность и производительность в новых скриптовых языках / Антон Юдинцев...DevGAMM Conference
Антон Юдинцев, основатель Gaijin Entertainment, рассматривает проблемы продуктивности и производительности разработчиков в масштабных программных проектов с длинным циклом жизни – таких, как онлайн игры. Антон рассматривает типовые проблемы и исторически популярные пути их решения на реальных случаях, а также представляет недавний скрипт-язык собственной разработки, как механизм увеличения продуктивности и креативности – daScript – и опыт работы с ним.
C++ в играх, больших и не очень, Игорь Лобанчиков
С++, являясь прямым потомком C - одновременно гибкий и эффективный с точки зрения производительности язык. За счет оптимизирующего компилятора любой красиво и правильно написанный код будет быстрым, стабильным и безопасным. Ну, или нам бы этого очень хотелось.
На простых примерах из жизни мы рассмотрим благие намерения, куда они нас заводят и почему так получается.
В лекции рассказано о доступных средствах по отладке веб-сайтов, их возможностях, а также способах их использования. Также речь пойдет о том, как искать ошибки у пользователей в продакшене и контролировать качество продукта.
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...Yandex
Выбор языка для разработки под iOS не ограничен Objective-C — всё зависит от конкретных задач. Но даже если код пишется на Objective-C, у разработчика есть и другие инструменты, кроме Xcode, способные облегчить жизнь. Есть сторонние тестовые фреймворки, менеджеры зависимостей, браузеры документации и, конечно, альтернативные IDE — например, AppCode.
В докладе я расскажу, почему в JetBrains создали собственную IDE для Objective-C, а не просто плагин к Xcode. Обсудим, чем AppCode отличается от Xcode, и как мы реализовали интеграцию с этой средой. А также поговорим о возникавших сложностях и планах по развитию интеграции и всего продукта.
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...Yandex
Выбор языка для разработки под iOS не ограничен Objective-C — всё зависит от конкретных задач. Но даже если код пишется на Objective-C, у разработчика есть и другие инструменты, кроме Xcode, способные облегчить жизнь. Есть сторонние тестовые фреймворки, менеджеры зависимостей, браузеры документации и, конечно, альтернативные IDE — например, AppCode.
В докладе я расскажу, почему в JetBrains создали собственную IDE для Objective-C, а не просто плагин к Xcode. Обсудим, чем AppCode отличается от Xcode, и как мы реализовали интеграцию с этой средой. А также поговорим о возникавших сложностях и планах по развитию интеграции и всего продукта.
Similar to SECON'2016. Чубарь Алексей, Мобильные грабли Unity (20)
SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?SECON
Тестирование заказов в ecommerce международного масштаба/ Order Lifecycle - Жизненный цикл заказа vs QA / Lazada. Азиатская кухня ecommerce тестирования.
2. О чём речь?
1. Почему Unity3D?
2. Влияние движка на пайплайн разработки.
3. Неожиданные технические проблемы и их решения.
4. Удобство Unity3D для подобных проектов.
3. О чём речь?
1. Почему Unity3D?
2. Влияние движка на пайплайн разработки.
3. Неожиданные технические проблемы и их решения.
4. Удобство Unity3D для подобных проектов.
Brace yourselves
Technical mumbo-jumbo is coming
18. Портирование с С++
• Семантика сохраняется, меняются только элементы синтаксиса.
• Кодовая база C++ не пропадает даром.
19. Расширяемость и препроцессинг
• Утилита командной строки обрабатывает ассеты перед сборкой.
• В редакторе обработка запускается из кастомного пункта меню.
20. Расширяемость и всё остальное
Расширения редактора могут быть
любой сложности и назначения.
У нас используются для:
● препроцессинга ассетов
● пакетной обработки графики
● отладки геймплея
● самых разных читов
● упрощения редактирования
● сборки DLC
● ...
23. Плагины и Asset Store
• Проверенные решения многих задач.
• Недорого/бесплатно.
• Легко интегрировать.
• О чём ещё мечтать?
24. Плагины и Asset Store: функциональность
Возможности
кроссплатформенног
о плагина
Требуемый функционал
Часть нужного
функционала недоступна
25. Плагины и Asset Store: настройка
Плагинам иногда требуется внести
изменения в конфигурацию приложения.
Они могут делать это автоматически и
удалять другие важные изменения.
Следите за ними и отдавайте
предпочтение ручной настройке.
1.
2.
3.
26. Плагины и Asset Store: настройка
Изменения в конфигурацию приложения
могут вноситься и на этапе сборки.
Редактор поочерёдно запускает все скрипты
Editor/PostProcessBuildPlayer*.
Затем вызывает все методы с атрибутом
PostProcessBuild (PostProcessBuildAttribute) в
порядке, указанном в скобках.
Изучите эти скрипты и методы, если
конфигурация внезапно поломалась.
27. Плагины и Asset Store: настройка
Чтобы результат выполнения
скрипта никто не попортил,
запускайте его последним
Ваш скрипт
Запредельный
порядок выполнения
28. Плагины и Asset Store: настройка
Некоторые плагины имеют
взаимоисключающие требования.
Решение - препроцессинг
конфигурационных файлов при
сборке под конкретную платформу.
29. Плагины и Asset Store: ограничения Android
UserProfile.java
MainActivity.java
economics.jar
.class
.class
classes.dex classes.dex
Game.apk
N
methods
M
methods
K
methods
S = N + M + K + ...
● S < 63000: OK.
● S > 65536: Ошибка сборки APK в Unity.
● 63000 < S <= 65536: FFFFUUUUU~!!
30. Плагины и Asset Store: ограничения Android
Выпилить лишние SDK:
+ Максимально просто
- Эффективно “до следующего раза”
- Лишние? Мне всё нужно!
Выпиливать SDK в зависимости от
платформы:
• Относительно просто
• Относительно эффективно
- Легко облажаться
Multidex:
+ Решит проблему, сохранив SDK
- Экспорт проекта Android Studio
- Лишнее остаётся в APK
ProGuard:
+ Максимально эффективно
- Экспорт проекта Android Studio
- Требует настройки
31. Плагины и Asset Store: поддержка
В плагинах нередки баги.
Поддержка и фиксы остаются на
совести автора плагина.
Фиксить баги самому мешает
закрытый исходный код.
Сообщество пользователей, как
правило, невелико.
32. Редактор: стабильность и производительность
Редактор иногда падает. В новых
версиях реже.
Иморт/экспорт ассетов в один поток -
долго. Облегчат жизнь:
• SSD
• Ramdisk
• Десятки тысяч долларов на
крутую билд-машину
33. Редактор: MonoDevelop
• Долго перезагружает проект после внешних изменений.
• Иногда портит отступы в коде.
• Дебаггер не всегда подключается.
• Отладочная информация не всегда релевантна.
Не повод отказываться от любимого текстового редактора,
но может быть полезна для отладки в ряде случаев.
34. Редактор: threading
• Симуляция игры происходит в UI thread редактора.
• Ошибка в скрипте может “повесить” Unity.
• Запуск на устройстве даст больше информации о причине зависания.
• Panic Button plugin прервёт любой скрипт в редакторе.
35. Редактор: конфликты версий
Если работать над проектом в
разных версиях Unity, некоторые
файлы спонтанно меняются.
Это ведёт к конфликтам при
слиянии.
Держите всех на одной версии
редактора.
39. Компилятор и runtime: Garbage collection
• Сборка мусора работает плохо.
• Производительность игры со временем снижается.
• “Ручного управления” освобождением памяти нет.
40. Компилятор и runtime: Garbage collection
ReferenceType
class Entry {
uint id;
long phone;
string name;
}
Thread stack
var e1 = new Entry();
var e2 = e1;
Managed heap
ref1
Entry
id: 1337
phone: 88005553535
name: ref2
String
value: “Ayy Lmao”
ref3
42. Компилятор и runtime: Garbage collection
Нужно снижать число аллокаций:
• меньше временных объектов, аллоцируй
однажды и переиспользуй;
• ValueType вместо ReferenceType, где уместно;
• гибридные контейнеры. refactor
43. Компилятор и runtime: Garbage collection
struct HList<T> : IList<T>
гибридный контейнер
T val0;
T val1;
T val2;
T val3;
List<T> fallback; T TT ...
myHList.Add(newVal);
Count >
Capacity?
True,
alloc fallback
once
False,
no allocs
44. Компилятор и runtime: Garbage collection
Встроенные возможности языка много
аллоцируют. Зона риска:
• foreach;
• using;
• Array.IndexOf и т.п.;
• “Excessive” + “ strings “ + “concat”;
• …
• твоя киска
Можно придумать неаллоцирующие замены.
45. Компилятор и runtime: Garbage collection
Boxing
здорового человека
Boxing C#-программиста
struct Entry : IPrintable
Thread stack
var e1 = new Entry();
Entry
Managed heap
void MyCustomPrint(IPrintable p)
Object (boxed Entry)
IPrintable toPrint = e1;
MyCustomPrint(toPrint); IPrintable ref1
Неявная аллокация
46. Компилятор и runtime: повреждение стека
При передаче крупных структур по
значению возможно повреждение
стека.
Закономерность не установлена.
Решение - передавать их по
ссылке.
Unity call stack be like:
i == 2 i == 2 i == 2 i == -97
47. Компилятор и runtime: креши UnityPlayer
WindZone + UnloadUnusedAssets() =
падение самого UnityPlayer на iOS.
Соотнести причину со следствием
было очень сложно.
Пришлось отказаться от WindZone.
UnityPlayer? More like UnityPrayer!
50. Компилятор и runtime: жизнь без JIT на iOS
Весь код должен быть виден и понятен среде выполнения при запуске:
• Generics + Reflection = butthurt;
• Generics + Native code = butthurt;
• Delegates + Native code = butthurt;
...
Страница “Troubleshooting on iOS devices” - ваш друг и помощник.
51. Компилятор и runtime: жизнь без JIT на iOS
C#
JS
US
CIL
CIL
CIL
Sources Script compiler Mono runtime
JIT
AOT
dlldll
C++ Native binary
scripting backend: Mono
scripting backend: IL2CPP
Попытка использовать
JIT ведёт к
ExecutionEngineException
При попытке
использовать JIT не
происходит НИЧЕГО
DLL, собранные другим
компилятором, не знают,
что JIT недоступен
52. Компилятор и runtime: жизнь без JIT на iOS
• “Chat ConnectAsync…” выводится
• “Chat Connecting…” - нет.
Диагностика:
• Переключить Scripting backend на Mono
и словить ExecutionEngineException.
Решения:
• Использовать исходники вместо DLL.
• Собрать DLL компилятором Unity.
53. Компилятор и runtime: жизнь без JIT на iOS
Workaround для проблемы с DLL:
• объявлять операции
add/remove у event явно.
+ Все компиляторы будут
генерить одинаковый байткод.
- Код становится менее
компактным.
- Про это каждый раз надо
помнить.
60. Зона видимых объектов
Оптимизация графики: depth buffer
Far Clip Plane
Near Clip Plane
Здесь ничего
не рендерится
Здесь ничего
не рендерится
61. Оптимизация графики: depth buffer
Слишком широкий диапазон,
низкая точность.
Разрядность буфера зависит
от GPU, на ряде устройств
появляется Z-fighting.
OK!
Слишком узкий
диапазон, отсекается
больше, чем нужно
63. Сообщество: Unity Answers
• Огромная численность.
• Преобладание начинающих
разработчиков.
• Много странных вопросов.
• Много ответов на простые
вопросы.
• Мало ответов на сложные
вопросы.
2006: 2016:
The impact of Unity Answers
64. Сообщество: участие Unity Technologies
• Движок активно поддерживается.
• Сообщество активно обсуждает релизы и использует issue tracker.
• Представители Unity Technologies принимают участие в обсуждениях.
• Графон всё лучше.
• Развиваются веб-сервисы для Pro-пользователей (аналитика, crash
reporting).
65. TL;DR: Unity норм
• Unity - это внушительный набор средств для разработки.
• Бинарные ассеты - отстой, храните больше в текстовом виде.
• Скриптуемость и расширяемость редактора - это очень круто.
• There’s a [bad] plugin for that.
• Отлаживать код не всегда удобно, используйте логи.
• Аллокации - зло.
• Желательно понимать, что там под капотом.
• Учитывайте специфику мобильных устройств при оптимизации.
• На сообщество надейся, а сам не плошай.
Несмотря на подводные камни, достоинства перевешивают недостатки.