Аварийное завершение приложения — более чем неприятная ситуация. Особенно неприятно, если она случается уже на устройстве пользователя, когда нет возможности запустить отладчик и найти проблему. Тут и приходят на помощь разработчику системы отправки и анализа отчетов о падениях и техники postmortem debugging'а. Поговорим о существующих системах аналитики крэшей и чем они полезны для C++ разработчика.
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
В докладе будет рассказано о тех фундаментальных причинах, приводящих к неоптимальному коду в продукте, будет предложен подход, лишённый найденных недостатков.
Докладываемый подход опирается на технологию Expression Templates, которая позволяет уменьшить количество действий и объём ресурсов, которые требуются для выполнения неких промежуточных действий в процессе формирования каждой записи в журнал. Эта технология используется для уменьшения количества промежуточных операций при вычислении сложных математических выражений. Новизна докладываемого подхода в том, что тот же самый принцип, на котором основана технология Expression Templates можно применить для того, чтобы целенаправленно исключить те промежуточные действия, которые в конечном итоге приводят к неоптимальному коду.
Завершается доклад обсуждением полученного эффекта, путей возможного дальнейшего развития и возможностей применения этой же технологии в других задачах.
О поисковой системе Bing и хороших программистахcorehard_by
Расскажу о разработке поисковой системы Bing и о том, как 5 тысяч человек по всему миру делают веб-поиск лучше, о роли и эволюции С++ внутри Бинга, и о личных наблюдениях о лучших программистах, с которыми я работал.
Рассмотрены известные автору подходы к реализации как lock-free, так и fine-grained lock-based set/map: хеш-таблицы, деревья. Что из подходов STL может быть реализовано в lock-free манере, а что принципиально нет. Подводные камни lock-free и их нейтрализация.
Построение систем автоматического протоколирования Си/Си++ кодаTatyanazaxarova
Иногда единственным методом отладки является использование протоколирования событий приложения. К недостаткам протоколирования (логирования) можно отнести большой объем кода, который приходится писать вручную для сохранения всей необходимой информации. В статье рассматривается методика, позволяющая построить систему автоматического протоколирования кода на языке Си/Си++.
Антон Тюрин, Евгений Сафронов, Инфраструктура под CocaineTanya Denisyuk
Докладчики расскажут о набитых шишках в управлении облаком, а так же других частях облачной инфраструктуры. Расскажут о расширении возможностей взаимодействия между компонентами облака, организации полноценного стриминга данных. Т.е. поделяться опытом создания облачного планировщика, оптимизирующего утилизацию ресурсов облака, профилирования приложения «на горячую».
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
В докладе будет рассказано о тех фундаментальных причинах, приводящих к неоптимальному коду в продукте, будет предложен подход, лишённый найденных недостатков.
Докладываемый подход опирается на технологию Expression Templates, которая позволяет уменьшить количество действий и объём ресурсов, которые требуются для выполнения неких промежуточных действий в процессе формирования каждой записи в журнал. Эта технология используется для уменьшения количества промежуточных операций при вычислении сложных математических выражений. Новизна докладываемого подхода в том, что тот же самый принцип, на котором основана технология Expression Templates можно применить для того, чтобы целенаправленно исключить те промежуточные действия, которые в конечном итоге приводят к неоптимальному коду.
Завершается доклад обсуждением полученного эффекта, путей возможного дальнейшего развития и возможностей применения этой же технологии в других задачах.
О поисковой системе Bing и хороших программистахcorehard_by
Расскажу о разработке поисковой системы Bing и о том, как 5 тысяч человек по всему миру делают веб-поиск лучше, о роли и эволюции С++ внутри Бинга, и о личных наблюдениях о лучших программистах, с которыми я работал.
Рассмотрены известные автору подходы к реализации как lock-free, так и fine-grained lock-based set/map: хеш-таблицы, деревья. Что из подходов STL может быть реализовано в lock-free манере, а что принципиально нет. Подводные камни lock-free и их нейтрализация.
Построение систем автоматического протоколирования Си/Си++ кодаTatyanazaxarova
Иногда единственным методом отладки является использование протоколирования событий приложения. К недостаткам протоколирования (логирования) можно отнести большой объем кода, который приходится писать вручную для сохранения всей необходимой информации. В статье рассматривается методика, позволяющая построить систему автоматического протоколирования кода на языке Си/Си++.
Антон Тюрин, Евгений Сафронов, Инфраструктура под CocaineTanya Denisyuk
Докладчики расскажут о набитых шишках в управлении облаком, а так же других частях облачной инфраструктуры. Расскажут о расширении возможностей взаимодействия между компонентами облака, организации полноценного стриминга данных. Т.е. поделяться опытом создания облачного планировщика, оптимизирующего утилизацию ресурсов облака, профилирования приложения «на горячую».
Cocaine: погружение в облака — Евгений СафроновYandex
Всё больше и больше разговоров в последнее время занимают облака и технологии, с ними связанные. Многие программисты мечтают о том, чтобы писать масштабируемые и отказоустойчивые приложения было легко и просто. Многим администраторам хочется работать не с разношёрстным зоопарком программ, а в унифицированной и легко управляемой инфраструктуре. Наконец, серверам (наверняка) хочется использовать свои ресурсы на полезные дела, а не на обогрев воздуха.
В Яндексе мы решаем все эти проблемы с помощью собственной opensource технологии под названием Cocaine, которую может использовать любой желающий.
Что такое Cocaine, какие именно инфраструктурные проблемы он решает, какие возможности предоставляет — обо всем этом и пойдёт речь в докладе.
Использование Web Application Firewall вызвано желанием снизить существующие угрозы со стороны атак, направленных на эксплуатацию уязвимостей в Web-приложениях. Однако, как и все созданное человек, WAF имеет недостатки, которые позволяют воспользоваться уязвимостями даже на самых защищенных серверах…
С чего начать свой путь этичного хакера? - Вадим ЧакрянHackIT Ukraine
Презентация с форума http://hackit-ukraine.com/
Вадим Чакрян
С чего начать свой путь этичного хакера?
Руководитель проекта Hackup {Learning} Network
О спикере: Руководитель проектов Hackup {Learning} Network, Харьковского OWASP сообщества, ISACA KNURE; Инструктор сетевой академииCisco; независимый тренер-консультант по вопросам информационной безопасности.
TMPA-2015: Multi-Module Application Tracing in z/OS EnvironmentIosif Itkin
Multi-Module Application Tracing in z/OS Environment
Rostislav Efremov, Saint Petersburg State University, Saint Petersburg
12 - 14 November 2015
Tools and Methods of Program Analysis in St. Petersburg
Максим Трегубов, CUSTIS. Миграция данных из Oracle в Postgres. Доклад о том, как мы для одного из заказчиков тестировали переход с СУБД Oracle на Postgres. Расскажем о выборе инструмента миграции данных, настройке тестовой среды и о полученных результатах. Также немного затронем модную тему DevOps и покажем роль Ansible в миграции данных.
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...corehard_by
На практике возникают проблемы, которые невозможно воспроизвести и исследовать на стороне разработчика. В таких ситуациях порой бывает невозможно даже организовать удаленный доступ к машине. Во время доклада будут рассмотрены и даны советы по отладке типовых задач таких как аварийное завершение, утечка ресурсов и ошибки синхронизации в многопоточных приложениях. Мы будем использовать отладчик Windbg. Доклад будет интересен в первую очередь начинающим разработчикам, работающим с платформой Windows.
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решенияFProg
В докладе рассматривается мотивация и опыт перехода процесса разработки API с большим количеством внутренней логики с Python на сочетание Erlang и Haskell, проблемы в процессе разработки и способы их решения.
Статья рассказывает о новом направлении в развитии статических анализаторов кода - верификации параллельных программ. В статье рассказывается о нескольких статических анализаторах, которые могут претендовать на звание "Parallel Lint".
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Ontico
Мы создаем nodejs приложения, используя различные современные технологии, такие как Docker, Consul, pm2. Современный спектр решений настолько обширен, что сложно не заблудиться. Как же выбрать нужные вашему проекту технологии, чтобы успешно его запустить и поддерживать? Будут рассказаны истории и, конечно же, даны вредные советы :)
Как на nodejs пройти путь от Hello world приложения до распределённого решения, состоящего из микросервисов?
Мы пройдём жизненный цикл продукта, начав с простого приложения на nodejs. Научимся его правильно запускать и будем постепенно добавлять элементы, убирая при этом ненужные. Так к нашему приложению присоединится гипервизор, а само оно будет разделено на части, где каждая сущность будет управлять своей частью приложения.
Построив таким образом архитектуру на чистом nodejs, мы займёмся развитием приложения, добавим современные технологии и применим новые подходы к организации инфраструктуры. Запакуем приложение в Docker, попутно обсудим, зачем он нужен и что может дать. И, наконец, решим проблему поиска запущенных сервисов и отслеживания их статусов, используя Consul.
Лабораторные работы (практикум) по программированию на языке C Sharp (СИ решетка). Материал разработан специально для ресурса www.studentam-in.ru на котором Вы можете найти бесплатные учебные материалы и получить качественные образовательные услуги: китайский и английский перевод; репетиторство; заказ курсовых, контрольных; создание презентации, баннера, контента, сайта и многое другое.
Теория и практика написания безопасного кода на C++corehard_by
С++ предоставляет разработчику огромную свободу действий и власть над происходящим в программе. Расплачиваться за это приходится легкостью написания кода, который на много часов отправит программиста в увлекательный мир отладки и анализа crash report'ов; поможет злоумышленникам вмешаться в работу системы или повредит данные пользователя. В своем докладе я рассмотрю наиболее популярные на сегодняшний день уязвимости и ошибки в программах: откуда они берутся и как избежать их появления в коде на C++. Вместе с тем, я рассмотрю различные аспекты безопасного гарантирующего корректность своей работы C++ кода и практические рекомендации по его написанию.
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...corehard_by
Использование сторонних библиотек в языке C++ никогда не было простым - необходимо было правильно собрать их, имея дело с различными системами сборки, но с появлением пакетного менеджера conan.io процесс стал намного проще, так что теперь осталось только сделать пакеты для нужным библиотек, и в этом поможет команда bincrafter-ов.
Cocaine: погружение в облака — Евгений СафроновYandex
Всё больше и больше разговоров в последнее время занимают облака и технологии, с ними связанные. Многие программисты мечтают о том, чтобы писать масштабируемые и отказоустойчивые приложения было легко и просто. Многим администраторам хочется работать не с разношёрстным зоопарком программ, а в унифицированной и легко управляемой инфраструктуре. Наконец, серверам (наверняка) хочется использовать свои ресурсы на полезные дела, а не на обогрев воздуха.
В Яндексе мы решаем все эти проблемы с помощью собственной opensource технологии под названием Cocaine, которую может использовать любой желающий.
Что такое Cocaine, какие именно инфраструктурные проблемы он решает, какие возможности предоставляет — обо всем этом и пойдёт речь в докладе.
Использование Web Application Firewall вызвано желанием снизить существующие угрозы со стороны атак, направленных на эксплуатацию уязвимостей в Web-приложениях. Однако, как и все созданное человек, WAF имеет недостатки, которые позволяют воспользоваться уязвимостями даже на самых защищенных серверах…
С чего начать свой путь этичного хакера? - Вадим ЧакрянHackIT Ukraine
Презентация с форума http://hackit-ukraine.com/
Вадим Чакрян
С чего начать свой путь этичного хакера?
Руководитель проекта Hackup {Learning} Network
О спикере: Руководитель проектов Hackup {Learning} Network, Харьковского OWASP сообщества, ISACA KNURE; Инструктор сетевой академииCisco; независимый тренер-консультант по вопросам информационной безопасности.
TMPA-2015: Multi-Module Application Tracing in z/OS EnvironmentIosif Itkin
Multi-Module Application Tracing in z/OS Environment
Rostislav Efremov, Saint Petersburg State University, Saint Petersburg
12 - 14 November 2015
Tools and Methods of Program Analysis in St. Petersburg
Максим Трегубов, CUSTIS. Миграция данных из Oracle в Postgres. Доклад о том, как мы для одного из заказчиков тестировали переход с СУБД Oracle на Postgres. Расскажем о выборе инструмента миграции данных, настройке тестовой среды и о полученных результатах. Также немного затронем модную тему DevOps и покажем роль Ansible в миграции данных.
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...corehard_by
На практике возникают проблемы, которые невозможно воспроизвести и исследовать на стороне разработчика. В таких ситуациях порой бывает невозможно даже организовать удаленный доступ к машине. Во время доклада будут рассмотрены и даны советы по отладке типовых задач таких как аварийное завершение, утечка ресурсов и ошибки синхронизации в многопоточных приложениях. Мы будем использовать отладчик Windbg. Доклад будет интересен в первую очередь начинающим разработчикам, работающим с платформой Windows.
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решенияFProg
В докладе рассматривается мотивация и опыт перехода процесса разработки API с большим количеством внутренней логики с Python на сочетание Erlang и Haskell, проблемы в процессе разработки и способы их решения.
Статья рассказывает о новом направлении в развитии статических анализаторов кода - верификации параллельных программ. В статье рассказывается о нескольких статических анализаторах, которые могут претендовать на звание "Parallel Lint".
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Ontico
Мы создаем nodejs приложения, используя различные современные технологии, такие как Docker, Consul, pm2. Современный спектр решений настолько обширен, что сложно не заблудиться. Как же выбрать нужные вашему проекту технологии, чтобы успешно его запустить и поддерживать? Будут рассказаны истории и, конечно же, даны вредные советы :)
Как на nodejs пройти путь от Hello world приложения до распределённого решения, состоящего из микросервисов?
Мы пройдём жизненный цикл продукта, начав с простого приложения на nodejs. Научимся его правильно запускать и будем постепенно добавлять элементы, убирая при этом ненужные. Так к нашему приложению присоединится гипервизор, а само оно будет разделено на части, где каждая сущность будет управлять своей частью приложения.
Построив таким образом архитектуру на чистом nodejs, мы займёмся развитием приложения, добавим современные технологии и применим новые подходы к организации инфраструктуры. Запакуем приложение в Docker, попутно обсудим, зачем он нужен и что может дать. И, наконец, решим проблему поиска запущенных сервисов и отслеживания их статусов, используя Consul.
Лабораторные работы (практикум) по программированию на языке C Sharp (СИ решетка). Материал разработан специально для ресурса www.studentam-in.ru на котором Вы можете найти бесплатные учебные материалы и получить качественные образовательные услуги: китайский и английский перевод; репетиторство; заказ курсовых, контрольных; создание презентации, баннера, контента, сайта и многое другое.
Теория и практика написания безопасного кода на C++corehard_by
С++ предоставляет разработчику огромную свободу действий и власть над происходящим в программе. Расплачиваться за это приходится легкостью написания кода, который на много часов отправит программиста в увлекательный мир отладки и анализа crash report'ов; поможет злоумышленникам вмешаться в работу системы или повредит данные пользователя. В своем докладе я рассмотрю наиболее популярные на сегодняшний день уязвимости и ошибки в программах: откуда они берутся и как избежать их появления в коде на C++. Вместе с тем, я рассмотрю различные аспекты безопасного гарантирующего корректность своей работы C++ кода и практические рекомендации по его написанию.
Similar to использование систем аналитики крэшей (20)
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...corehard_by
Использование сторонних библиотек в языке C++ никогда не было простым - необходимо было правильно собрать их, имея дело с различными системами сборки, но с появлением пакетного менеджера conan.io процесс стал намного проще, так что теперь осталось только сделать пакеты для нужным библиотек, и в этом поможет команда bincrafter-ов.
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотниковcorehard_by
На предыдущих конференциях C++ CoreHard автор доклада рассказывал про Модель Акторов и опыт ее использования в C++. Но Модель Акторов -- это далеко не единственный способ борьбы со сложностью при работе с многопоточностью. Давайте попробуем поговорить о том, что еще можно применить и как это может выглядеть в C++.
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титовcorehard_by
Если вам важна скорость работы ваших программ, то вы обязаны понимать, как работает ваше "железо". Современный процессор -- это сложное устройство, многие механизмы которого могут неочевидным образом влиять на скорость исполнения вашего кода. В докладе дается обзорное представление основных структур современного процессора и подробно рассматривается работа иерархии памяти. Будут освещены следующие темы: организация кэш-памяти, принцип локальности, предподкачка данных, нежелательное общее владение данными, а также программные техники для эффективной работы с памятью.
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...corehard_by
Информационная безопасность все больше из отдельной сферы плавно перетекает в разработку ПО. А значит «обычным» программистам приходится понимать те требования и терминологию, которые специалисты по безопасности уже давно знают и используют. CWE, CERT, MISRA, SAST– для «обычных» программистов это непонятные аббревиатуры. Поэтому в обзорном докладе мы попробуем рассказать простым языком об этих понятиях так, чтобы все разработчики начали уверенно ориентироваться в этой теме.
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишковcorehard_by
Вот уже более двух лет мы создаём онлайн-специализацию по С++ на платформе Coursera. Её цель — обучить языку C++ с нуля до уровня, достаточного для решения практических задач, с которыми приходилось сталкиваться авторам в своей практике. В своём докладе я расскажу, как мы создаём наши онлайн-курсы, и уделю особое внимание техническим проблемам, которые нам пришлось решить в процессе создания автоматической системы проверки программ студентов.
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...corehard_by
В докладе обсуждаются способы улучшения времени сборки C++ проектов, опыт полученный в ходе ускорения сборки клиента и тулов World Of Tanks. Также описывается эффект, который они оказывают на организацию кодобазы (как позитивный, так и негативный) и затраты, которые необходимы для поддержки этих решений, т.к. не все они бесплатны. Методики, описываемые в докладе: ускорение линковки (Incremental Linking, Fastlink), ускорение компиляции(Include what you use, использование precompiled headers).
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...corehard_by
Доклад посвящён вопросам реализации пропозала Герба Саттера PR0707 (метаклассы в С++) за пределами компилятор - в виде отдельной утилиты. Будет продемонстрированы варианты использования метаклассов в реальной жизни, затронуты вопросы их реализации на базе Clang Frontend, а также возможные перспективы развития технологии и методики.
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...corehard_by
Все мы знаем, что компиляторы в настоящее время достаточно умные. И нам как программистам зачастую не нужно думать о каких-то незначительных оптимизациях - мы полагаемся на оптимизации компилятора. Что ж, настало время выяснить, действительно ли настолько компиляторы умны и узнать, в каких местах программист всё же (может быть) умнее.
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...corehard_by
В докладе будет рассмотрена генерация кода при компиляции различных языковых конструкций, как простых, так и сложных, на различных платформах, как общераспространённых x86/x64, так и тех, которым уделяется меньше внимания: ARM, AVR. Также будут встречаться примеры для совсем экзотических процессоров вроде PowerPC и даже MicroBlaze. Основной упор будет делаться не на обработку данных, а именно на сопоставление различных конструкций кода с инструкциями целевых платформ.
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...corehard_by
What do threads, atomic variables, mutexes, and conditional variables have in common? They are the basic building blocks of any concurrent application in C++, which are even for the experienced C++ programmers a big challenge. This massively changed with C++17 and change even more with C++20/23. What did we get with C++17, what can we hope for with C++20/23? With C++17, most of the standard template library algorithms are available in sequential, parallel, and vectorised variants. With the upcoming standards, we can look forward to executors, transactional memory, significantly improved futures and coroutines. To make it short. These are just the highlights from the concurrent and parallel perspective. Thus there is the hope that in the future C++ abstractions such as executors, transactional memory, futures and coroutines are used and that threads, atomic variables, mutexes and condition variables are just implementation details.
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...corehard_by
Язык C++, претерпев долгую эволюцию, обрёл ряд черт, характерных для функциональной парадигмы: функции стали полноправными объектами, над которыми могут выполняться операции, а аппарат шаблонов позволяет проводить вычисления на типах на этапе компиляции. Математический фундамент этих двух главных аспектов составляют, соответственно, ламбда-исчисление и теория категорий. Расширение языка этими средствами способствовало реализации на языке C++ ряда инструментов, известных из функционального программирования. Некоторые из этих реализаций вошли в стандартную библиотеку (std::function, std::bind), другие - в сторонние библиотеки, в том числе в коллекцию библиотек Boost (functional, hana). Важную роль в арсенале функционального программирования играют операции свёртки и развёртки, которые очевиднее всего определяются для списков, но также естественным образом обобщаются на другие индуктивные и коиндуктивные структуры данных. Например, суммирование списка чисел можно представить себе как свёртку списка по операции сложения, а построение списка простых множителей заданного целого числа - как развёртку. Обобщения свёртки и развёртки известны как анаморфизмы и катаморфизмы. Также в функциональном программировании находит применение понятие гиломорфизма - композиция развёртки некоторого объекта в коллекцию с последующей свёрткой её в новый объект. В докладе продемонстрировано, что свёртки, развёртки и их композиции допускают довольно простую реализацию на языке C++.
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филоновcorehard_by
Доклад посвящен часто используемому шаблону в моих проектах по анализу данных, когда обучение и настройка моделей происходят с использованием python, а вот их запуск в промышленное использование на языке C++. Предлагается рассмотреть несколько учебных примеров реализации такого подхода, от простой линейной регрессии до обработки изображений с помощью нейронных сетей.
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukićcorehard_by
This talk will be about the design and implementation of a reactive programming model inspired by ranges that allows easy implementation of asynchronous and distributed software systems by writing code that looks like a sequence of ordinary range transformations like filter, transform, etc. This programming model will be demonstrated along with the implementation of a simple asynchronous web service where the whole system logic is defined as a chain of range transformations.
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakovacorehard_by
Macros, templates, compile-time evaluation and code generation, reflection and metaclasses – C++ tends to hide the final code passed to the compiler under the tons of various names and aliases. Add here the preprocessor that shadows the actual running curve of your program with dozens of alternatives mixed in a non-trivial way. While this allows to avoid boilerplate code and reduce copy-paste and other errors, such an approach demands better tooling support to make the debugging process easier. To find an error in such a code, one has to continuously read-fix-run it and compare the results with some etalon, or to debug in order to find actual substitutions. But should you really wait until your code is run or even compiled to debug it? Or how to deal with the situations when the code can’t be run on the local machine? A text editor with code completion won’t help, while a smart IDE that “gets” your code can do a better job. In this talk we’ll see interesting approaches to solving cases like macro and typedef ‘debug’, understanding types when auto/decltype hide them, dealing with different code branches depending on the preprocessor’s pass-through, and other ideas. Some suggestions are already implemented as ready-to-use features in CLion and ReSharper C++, tools for C++ from JetBrains (that means I can show it in action), others are planned for the future. The aim of this talk is to share the workflows supported by the tools that can help C++ developers create better modern C++ code.
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухинcorehard_by
В C++11 добавили новое ключевое слово - constexpr. Выглядит оно весьма невзрачно, да и на первый взгляд кажется, что смысла в нём маловато... Для чего же оно нужно, какие у него есть тайные супер способности и какую роль оно сыграет в дальнейшем развитии языка C++ - обо всём об этом мы и поговорим.
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...corehard_by
Text formatting has been a favorite problem of C++ library authors for a long time. The standard C++ iostreams have been criticized for being difficult to use due to their statefulness and slow due to runtime polymorphism. Despite its age, printf is still popular because of simplicity and speed. The Boost library offers two more alternatives, Boost.Format and Boost.LexicalCast. And finally, the P0645 standard proposal sponsored by Facebook is currently finding its way through the C++ committee. All these approaches are still firmly based on standard containers and iterators. But the Standard Library is changing radically with the advent of ranges, range adaptors and functional style programming in C++. Generating optimized code with metaprogramming is becoming standard fare. In this talk, I want to convince you that the combination of ranges with a bit of metaprogramming makes for a very elegant solution to the text formatting problem. We introduce a form of ranges with internal iteration, which are generating their elements one by one rather than exposing external iterators. We can use these generator ranges to represent the values to be formatted, conceptually turning them into lazily evaluated strings. These can be used just like regular strings are used today: in function returns; as standard algorithm input; embedded into other, equally lazily evaluated strings; and so on, before they are finally expanded for display. By choosing the right interfaces, we can optimize this expansion at compile-time, making it no less pretty to write, but more efficient to expand than any text formatting approaches that rely on format strings that must be parsed at runtime. I believe that this approach is the natural extension of a range-based future standard library to text formatting.
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019corehard_by
Память в компьютере - это не только гигабайты оперативной памяти в слоте, но и занятная абстракция. В докладе мы рассмотрим, как можно эту абстракцию использовать необычным образом для моделирования других абстракций - регистровых файлов периферийных устройств. Доклад будет полезен не только embedded-разработчикам, но и, возможно, заставит переосмыслить свой взгляд на память.
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019corehard_by
Как правило, можно положиться на то, что компилятор оптимизирует результирующий бинарный файл так, чтобы она работала максимально быстро. Но компилятор не знает на каких данных и на каком железе программа будет запущена. Плюс хотелось бы, чтобы компиляция занимала приемлемое время. Из-за этого результат может оказаться субоптимальным. Предлагаю на примерах для LLVM посмотреть как можно подсказать компилятору как оптимизировать программу и сделать результат лучше или хуже.
Мы напишем простейший веб-сервис из клиента и сервера на C++. На этом C++ часть закончится, и пойдет настройка окружения и инфраструктуры. Мы обеспечим детерминируемость сборки и прогона тестов. Облегчим последующее обновление зависимых библиотек. Автоматизируем статические проверки, верификацию кода, прогон тестов. Обеспечим доступность сервиса, настроим инфраструктуру, сбалансируем нагрузку, добавим автоматическое и ручное масштабирование. И под конец мы настроим continious delivery таким образом, что код будет на продакшене через 5 минут после реквеста, при этом даже невалидные изменения и ошибки программиста не смогут повлиять на его работу.
3. 2
Крэш — это такое состояние программы (приложения или
операционной системы), в котором дальнейшее корректное
её выполнение не представляется возможным.
COREHARD // ВВЕДЕНИЕ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
ЧТО ТАКОЕ CRASH?
5. 4
COREHARD // ОТКУДА БЕРУТСЯ КРЭШИ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
ПРИЧИНЫ КРЭШЕЙ ПРИЛОЖЕНИЙ
Основные причины крэшей приложений
• Необработанное исключение или сигнал;
• Попытка чтения (или записи) памяти по адресу, не выделенному приложению для
чтения (или записи);
• Переполнение стека;
• Попытка выполнить инструкцию с некорректными параметрами (деление на 0,
работа с невыровненной памятью на ARM, …);
• Попытка выполнить некорректную инструкцию или инструкцию, не доступную в
текущем режиме работы процессора;
• Некорректная работа с системными функциями (передача неверных параметров,
недостаточные полномочия, нехватка памяти, …), нарушение целостности
системных объектов;
• Вызов std::terminate или std::abort при серьезных нарушениях логики работы
приложения, после которых дальнейшее его выполнение не имеет смысла.
6. 5
COREHARD // ОТКУДА БЕРУТСЯ КРЭШИ /
ЛАПИЦКИЙ АРТЁМ // COREHARD // 22.10.2016
КРЭШИ И ПОЛЬЗОВАТЕЛИ
Для пользователя крэш – это больше чем неудобство
• Внезапное завершение приводит к потере контекста работы с
приложением, восстановить который может быть сложно или даже
невозможно;
• Крэш может привести к потере данных пользователя, перехода
данных приложения в противоречивое или некорректное состояние;
• Катастрофически ухудшается пользовательский опыт.
7. 6
COREHARD // ОТКУДА БЕРУТСЯ КРЭШИ /
ЛАПИЦКИЙ АРТЁМ // COREHARD // 22.10.2016
НЕПРИЯТНОСТИ СЛУЧАЮТСЯ
Контроль качества не способен выявить все возможные проблемы
• Разнообразие устройств;
• Разнообразие операционных систем;
• Разнообразие программного окружения;
• Ошибки при разработке приложения;
• Ошибки в сторонних библиотеках и системных API;
• Ошибки в инструментарии разработки.
9. 8
COREHARD // РАССЛЕДОВАНИЕ КРЭША /
ЛАПИЦКИЙ АРТЁМ // COREHARD // 22.10.2016
РАССЛЕДОВАНИЕ ПРИЧИН КРЭША
Исходные данные
• Описание проблемы пользователем;
• Stack trace потоков приложения в момент падения;
• Дамп памяти;
• Логи работы приложения / breadcrumbs;
• Информация об окружении и логическом состоянии приложения.
10. 9
Stack trace — это отчет о
состоянии стека вызовов
приложения в конкретный
момент времени,
представляющий из себя
список активных stack
frame’ов;
Его анализ позволяет точно
локализовать место
возникновения крэша и
узнать последовательность
вызовов, которая к нему
привела.
COREHARD // РАССЛЕДОВАНИЕ КРЭША /
ЛАПИЦКИЙ АРТЁМ // COREHARD // 22.10.2016
STACK TRACE
11. 10
Memory dump — это
содержимое памяти
приложения в конкретный
момент времени;
Будучи загруженным в
отладчике он позволяет
изучить состояние программы
в момент его создания (так,
будто бы отладчик был вызван
на точке останова).
COREHARD // РАССЛЕДОВАНИЕ КРЭША /
ЛАПИЦКИЙ АРТЁМ // COREHARD // 22.10.2016
MEMORY DUMP
12. 11
Анализ логов поможет
изучить работу упавшего
приложения в течение всего
времени его жизни;
В отличие от других данных,
логи позволяют обнаружить
причину крэша даже тогда,
когда момент возникновения
проблемы и момент
«падения» разделены во
времени и не связаны
цепочкой вызовов.
COREHARD // РАССЛЕДОВАНИЕ КРЭША /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
ЛОГИ РАБОТЫ ПРИЛОЖЕНИЯ
13. 12
При анализе проблемы или
попытке ее воспроизвести
очень полезно иметь
сведения об устройстве и
его компонентах, версии
операционной системы и
драйверов, значений
системных счетчиков,
состоянии дисков и
оперативной памяти,
статуса соединения с сетью
и другой информации о
состоянии среды, в которой
выполнялось приложение.
COREHARD // РАССЛЕДОВАНИЕ КРЭША /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
ИНФОРМАЦИЯ ОБ ОКРУЖЕНИИ
14. 13
Системы аналитики отчетов о падении автоматизируют
процесс сбора, обработки и группировки крэшей,
возникающих на устройствах пользователей;
Зачастую являются частью более общих решений по
аналитике и дистрибуции приложений.
COREHARD // РАССЛЕДОВАНИЕ КРЭША /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
СИСТЕМЫ АНАЛИТИКИ КРЕШЕЙ СПЕШАТ НА ПОМОЩЬ
15. 14
Группировка похожих крэшей, которые вызваны одной и той же
проблемой;
Анализ возникающих проблем в динамике с уведомлением о статусе
крэшей с наибольшим эффектом;
Телеметрия и различные дополнительные метрики (сколько
пользователей онлайн, количество новых пользователей, количество
crash-free пользователей и т.д.);
Удобная навигация по группам и отдельным отчетам, фильтрация и
поиск;
API для реализации своих сценариев анализа отчетов;
Интеграция с популярными багтерекерами и системами управления
проектами.
COREHARD // РАССЛЕДОВАНИЕ КРЭША /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
ПОЛЕЗНЫЕ ФУНКЦИИ
18. 17
COREHARD // АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ
Windows Error Reporting (Watson)
• Позволяет создавать отчеты о сбоях, прикреплять к ним дампы памяти и
содержимое отдельных блоков памяти программы, дополнительные файлы и
параметры;
• Работает автоматически для всех приложений, не обрабатывающих крэши
самостоятельно, отправляя базовый отчет об ошибке и минидамп;
• Отчеты об ошибках приложений отправляются в службу Windows Quality
Online Services, зарегистрировавшись в которой, можно получить к ним
доступ.
19. 18
COREHARD // АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ (2)
Microsoft Dev Center
• Предоставляет доступ к информации о сбоях приложений из Windows Store (Windows
Universal Platform, Windows Phone 7/8);
• Производит символизацию stack trace’ов, по которым группирует возникшие проблемы;
• Стандратный обработчик крэшей для приложений из Windows Store срабатывает
автоматически, отправляя отчет в Microsoft.
20. 19
COREHARD // АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ (3)
Apple Crash Report Service
• Позволяет прямо из XCode просматривать отчеты о падении вашего приложения
для MacOS или iOS, которые отправили пользователи;
• Символизирует stack trace и группирует отчеты по ним;
• Доступная информация ограничивается stack trace’ом и небольшим количеством
сведений об устройствах и операционных системах, на которых произошел сбой;
• Работает автоматически для приложений, не обрабатывающих крэши
самостоятельно.
21. 20
COREHARD // АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ (4)
Android Market Crash Reports
• Предоставляет доступ к отчетам об ошибках, которые присылают
пользователи;
• Обработчик крэшей вызывается для необработанных исключений
управляемого кода, поэтому отчетов о крэшах в C++/NDK приложениях
или библиотеках увидеть не удастся.
23. 22
COREHARD // АНАЛИТИКА КРЭШЕЙ ОТ СТОРОННИХ РАЗРАБОТЧИКОВ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
ПОДДЕРЖКА ПЛАТФОРМ (ПО СОСТОЯНИЮ НА ОКТЯБРЬ 2016)
SDK NDK .NET Native .NET Native
B B
B Limited B Limited
24. 23
Отправка отчетов как о крэшах, так и об обработанных
исключениях;
Включение в отчет пользовательской метаинформации;
Breadcrumbs — последовательность значимых изменений в
состоянии приложения или системы; многие события
логируются автоматически.
COREHARD // АНАЛИТИКА КРЭШЕЙ ОТ СТОРОННИХ РАЗРАБОТЧИКОВ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
APTELIGENT
25. 24
Глубокий анализ и приоритезация крэшей согласно их массовости и
частоте;
Интегрируется с популярными багтрекерами;
В отчетах предоставляет достаточно много информации о состоянии
устройства и ОС в момент падения;
Позволяет создавать отчеты не только при крэше, но и для обработанных
исключений;
В клиентской библиотеке есть собственный логгер; полученный лог
прикрепляется к отчету;
Есть возможность задания пользовательских параметров, которые будут
добавлены в отчет;
Является также системой распространения сборок приложения.
COREHARD // АНАЛИТИКА КРЭШЕЙ ОТ СТОРОННИХ РАЗРАБОТЧИКОВ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
CRASHLYTICS
26. 25
COREHARD // АНАЛИТИКА КРЭШЕЙ ОТ ПЛАТФОРМОДЕРЖАТЕЛЕЙ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
HOCKEYAPP
Поддерживает множество платформ, в т.ч. позволяет
отправлять отчеты, созданные библиотекой Google Breakpad;
Есть телеметрия (пользовательская активность, crash free
пользователи);
Позволяет прикреплять к отчетам логи, дополнительные
файлы и параметры;
Является также системой распространения сборок
приложений;
Поддерживает интеграцию с подавляющим большинством
популярных багтрекеров.
27. 26
Включайте в отчеты об ошибках только техническую
информацию, которая необходима для последующего решения
проблем. Никогда не логируйте идентификаторы, пин-коды,
ключи, пароли, токены и прочую информацию, которой могут
воспользоваться злоумышленники для несанкционированных
действий от имени пользовтаеля или вашей системы;
Уважайте приватность ваших пользователей и не включайте
личную информацию (e-mail, номер телефона, списки контактов)
в отчеты об ошибках.
COREHARD // СОВЕТЫ /
ЛАПИЦКИЙ АРТЁМ // COREHARD / 22.10.2016
ЛОГИРУЙТЕ РАЗУМНО