Слайды доклада на конференции C++ Corehard Winter 2017 (г.Минск).
Автор доклада давно и успешно использует Модель Акторов при разработке приложений на C++. В основном это был положительный опыт. Но есть некоторые неочевидные моменты, про которые было бы хорошо узнать заранее. О том, где использование Модели Акторов уместно, а где нет, на какие грабли довелось наступить, какие шишки были набиты, как можно упростить себе жизнь и пойдет речь в докладе.
Слайды одноименного доклада с конференции C++ CoreHard Autumn 2018 (г.Минск, 2018.11.03).
Краткое описание доклада:
На предыдущих конференциях C++ CoreHard автор доклада рассказывал про Модель Акторов и опыт ее использования в C++. Но Модель Акторов -- это далеко не единственный способ борьбы со сложностью при работе с многопоточностью. Давайте попробуем поговорить о том, что еще можно применить и как это может выглядеть в C++.
Занимаясь разработкой интерфейсов, мы постоянно разбираемся как и что устроено. Вы задумывались, сколько времени у вас уходит на то, чтобы найти нужный фрагмент кода, который отвечает за компонент на странице? В своем докладе я покажу как это можно сделать за один клик, а так же раскрою технические детали.
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)Ontico
РИТ++ 2017, AppsConf
Зал Касабланка, 6 июня, 16:00
Тезисы:
http://appsconf.ru/2017/abstracts/2704.html
В последнее время паттерн MVP будоражит Android-комьюнити. Уже есть несколько довольно приличных библиотек, которые помогают использовать этот подход. Но с ними вам придётся писать много boilerplate-кода. Поэтому я хочу познакомить вас с Moxy. Покажу, как использовать её компоненты для решения задач, которые будут вставать перед вами, когда вы решите использовать паттерн MVP. И расскажу, как устроены эти компоненты, и почему именно так, чтобы вы не боялись использовать Moxy из-за потенциальных подводных камней.
Слайды доклада на конференции C++ Corehard Winter 2017 (г.Минск).
Автор доклада давно и успешно использует Модель Акторов при разработке приложений на C++. В основном это был положительный опыт. Но есть некоторые неочевидные моменты, про которые было бы хорошо узнать заранее. О том, где использование Модели Акторов уместно, а где нет, на какие грабли довелось наступить, какие шишки были набиты, как можно упростить себе жизнь и пойдет речь в докладе.
Слайды одноименного доклада с конференции C++ CoreHard Autumn 2018 (г.Минск, 2018.11.03).
Краткое описание доклада:
На предыдущих конференциях C++ CoreHard автор доклада рассказывал про Модель Акторов и опыт ее использования в C++. Но Модель Акторов -- это далеко не единственный способ борьбы со сложностью при работе с многопоточностью. Давайте попробуем поговорить о том, что еще можно применить и как это может выглядеть в C++.
Занимаясь разработкой интерфейсов, мы постоянно разбираемся как и что устроено. Вы задумывались, сколько времени у вас уходит на то, чтобы найти нужный фрагмент кода, который отвечает за компонент на странице? В своем докладе я покажу как это можно сделать за один клик, а так же раскрою технические детали.
Moxy. Как правильно пользоваться? / Юрий Шмаков (Arello Mobile)Ontico
РИТ++ 2017, AppsConf
Зал Касабланка, 6 июня, 16:00
Тезисы:
http://appsconf.ru/2017/abstracts/2704.html
В последнее время паттерн MVP будоражит Android-комьюнити. Уже есть несколько довольно приличных библиотек, которые помогают использовать этот подход. Но с ними вам придётся писать много boilerplate-кода. Поэтому я хочу познакомить вас с Moxy. Покажу, как использовать её компоненты для решения задач, которые будут вставать перед вами, когда вы решите использовать паттерн MVP. И расскажу, как устроены эти компоненты, и почему именно так, чтобы вы не боялись использовать Moxy из-за потенциальных подводных камней.
Поговорим о рефлексии в C++, о том, что это такое, для чего нужно и почему это вообще важно. На практическом примере с котами рассмотрим эволюцию подходов к рефлексии в рамках разных версий языка: C++03, C++11/14, C++17. Посмотрим на то, что для нас готовят разработчики нового стандарта, узнаем где и как можно "пощупать" эти новые возможности. Поделимся полезными утилитами и подходами, которые облегчат жизнь пока эти новые возможности не придут к вам на проект.
Как показывает практика, повсеместное применение классического, основанного на callback’ах подхода к асинхронному программированию обычно оказывается неудобным. Для упрощения написания и поддержки сложного асинхронного кода можно использовать иной подход — с использованием сопрограмм. Он значительно сокращает объём и сложность кода, превращая код из асинхронного в синхронный.
Парсим и кодогенерируем для С++ с использованием clangcorehard_by
Зачастую в промышленном программировании возникают рутинные задачи, которые могут быть единожды эффективно решены с помощью кодогенерации. В докладе представлена классификация таких проблем в контексте С++ и предложено решение, основанное на семействе инструментов clang. Приводятся примеры решения подобных задач из реальных проектов.
В этой сессии мы рассмотрим оптимизации как с практической, так и с теоретической стороны. Поговорим о том как компилятор видит программу, какие алгоритмы и представления в нем используются во время анализа и трансформаций. Также пройдемся по списку типовых (и не очень) оптимизаций. И пару раз заглянем в машинный код чтобы удостовериться что ожидаемые оптимизации действительно сработали.
MVVM в WinForms – DevExpress Way (теория и практика)GoSharp
Из доклада вы узнаете о применении популярного паттерна MVVM для упрощения и ускорения процесса разработки desktop-приложений.
Будут рассмотрены общие проблемы этого паттерна и решения которые мы предлагаем в нашем кроссплатформенном MVVM фреймворке. Упор будет сделан на практические аспекты и техники в условиях использования платформы WinForms и контролов от DevExpress.
Многие разработчики не представляют, как дорого обходятся ошибки в программах. Причем я имею в виду не падения ракет и прочие катастрофы, а обыкновенное прикладное программное обеспечение. Хочется показать всю важность нахождения ошибок на самых ранних этапах. Одним из способов выявить ошибку как можно раньше является статический анализ кода. Поговорим мы не только об этом, но и о различных приемах при написании кода, которые позволят избежать множество типовых ошибок.
Есть такая штука как инструментирование кода. Мало кто знает о ней, даже пользуясь результатами ее применения. Между тем, с инструментированием можно делать много всего интересного и, главное, полезного. Например, это может вам помочь лучше понять код или сделать процесс разработки более эффективным. Примеры инструментирования кода и принципы его работы.
Поговорим о рефлексии в C++, о том, что это такое, для чего нужно и почему это вообще важно. На практическом примере с котами рассмотрим эволюцию подходов к рефлексии в рамках разных версий языка: C++03, C++11/14, C++17. Посмотрим на то, что для нас готовят разработчики нового стандарта, узнаем где и как можно "пощупать" эти новые возможности. Поделимся полезными утилитами и подходами, которые облегчат жизнь пока эти новые возможности не придут к вам на проект.
Как показывает практика, повсеместное применение классического, основанного на callback’ах подхода к асинхронному программированию обычно оказывается неудобным. Для упрощения написания и поддержки сложного асинхронного кода можно использовать иной подход — с использованием сопрограмм. Он значительно сокращает объём и сложность кода, превращая код из асинхронного в синхронный.
Парсим и кодогенерируем для С++ с использованием clangcorehard_by
Зачастую в промышленном программировании возникают рутинные задачи, которые могут быть единожды эффективно решены с помощью кодогенерации. В докладе представлена классификация таких проблем в контексте С++ и предложено решение, основанное на семействе инструментов clang. Приводятся примеры решения подобных задач из реальных проектов.
В этой сессии мы рассмотрим оптимизации как с практической, так и с теоретической стороны. Поговорим о том как компилятор видит программу, какие алгоритмы и представления в нем используются во время анализа и трансформаций. Также пройдемся по списку типовых (и не очень) оптимизаций. И пару раз заглянем в машинный код чтобы удостовериться что ожидаемые оптимизации действительно сработали.
MVVM в WinForms – DevExpress Way (теория и практика)GoSharp
Из доклада вы узнаете о применении популярного паттерна MVVM для упрощения и ускорения процесса разработки desktop-приложений.
Будут рассмотрены общие проблемы этого паттерна и решения которые мы предлагаем в нашем кроссплатформенном MVVM фреймворке. Упор будет сделан на практические аспекты и техники в условиях использования платформы WinForms и контролов от DevExpress.
Многие разработчики не представляют, как дорого обходятся ошибки в программах. Причем я имею в виду не падения ракет и прочие катастрофы, а обыкновенное прикладное программное обеспечение. Хочется показать всю важность нахождения ошибок на самых ранних этапах. Одним из способов выявить ошибку как можно раньше является статический анализ кода. Поговорим мы не только об этом, но и о различных приемах при написании кода, которые позволят избежать множество типовых ошибок.
Есть такая штука как инструментирование кода. Мало кто знает о ней, даже пользуясь результатами ее применения. Между тем, с инструментированием можно делать много всего интересного и, главное, полезного. Например, это может вам помочь лучше понять код или сделать процесс разработки более эффективным. Примеры инструментирования кода и принципы его работы.
Сегодня многие фреймворки, такие как Prism или Autofac, позволяют разработчику организовать модульную структуру приложения. При этом часто бывает непонятно, для чего ещё нужны модули, кроме как для пресловутой "красоты архитектуры".
В рамках доклада я расскажу о том, какие существуют подходы к организации модульной структуры, в каких фреймворках они реализованы и для решения каких задач дает преимущество каждый подход.
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiSoftengi
Разработка Web-приложений на Angular JS — доклад Бориса Левицкого, архитектора ПО в команде портфеля проектов Enviance компании Softengi.
Видео с докладом от автора можно посмотреть по ссылке: http://youtu.be/oTXxrmIxo8Y
Презентация ответит на вопросы:
- что такое Angular?
- для чего он используется и что с ним можно делать?
- как работает Data-Binding?
- кастомные фильтры
- структура Angular приложения
Архитектурные семинары Softengi - еженедельные встречи, на которые приглашаются ведущие разработчики/архитекторы Softengi и других компаний нашего консорциума Intecracy Group.
Все проведенные семинары мы записывали, и теперь хотим поделиться опытом и знаниями с такими же профессионалами.
Подписывайся на канал Softengi https://www.youtube.com/user/softengi и узнай первым о новых семинарах.
http://www.softengi.com
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
Сергей Коржнев
Архитектор версии 1.4 2ГИС Web API
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Тезисы:
● Как организован код в старой версии.
● Вдумчиво смотрим, как мы используем Yii, хватаемся за голову и клавиатуру. Там отрезаем, тут пришиваем, и вуаля!
● Ну и делаем выводы, как мы забороли две классические проблемы программирования: борьба с дублированием кода и сложностью системы.
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
Методология статического анализа год за годом зарекомендовывает себя в поисках дефектов в исходном коде программ.
Максим расскажет про:
- методологию статического анализа и какие плюсы и минусы у нее есть;
- технологии этой методологии, которые позволяют выявлять разнообразнейшие дефекты в коде;
- интересные примеры ошибок в реальных проектах, которые были найдены при помощи статического анализа;
- интеграцию инструментов статического анализа в проекты любой сложности, и почему так важно регулярное использование подобных инструментов.
Мир мобильных телефонов очень сильно изменил нашу жизнь. В наше время невозможно представить современного человека, без этого чудо устройства. На рынке появляется все больше устройств и приложений. И чтобы удобнее пользоваться этими приложениями пользователи выбирают “умные” телефоны, или как их еще принято называть смартфоны. В своем докладе я хочу поделиться своим опытом автоматизации приложений под Android и iOS. Я расскажу о том, какие инструменты автоматизации я использовал. Поговорим о недостатках этих инструментов и какие из них стоит использовать у себя на проекте.
Formal Verification of a Linux Security ModuleDenis Efremov
Формальная верификация модуля безопасности Linux. Презентация про проект AstraVer ИСП РАН. Доклад представлен на сессии коротких докладов летней школы Мастерчейн. НИУ ВШЭ, Москва, 09 июля 2018.
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Yandex
Флеш-накопители используются в самых разных устройствах, от мобильных телефонов до компьютеров и серверов. Для каждой модели накопителя нужна прошивка с определённым набором параметров, которые могут отличаться в зависимости от ситуации. В докладе будет описан универсальный фреймфорк на С++, который предоставляет разработчикам симуляторов простой, прозрачный и быстрый доступ к любому параметру. Тестировщикам же он позволяет управлять конфигурациями при помощи стандартных инструментов редактирования и слияния.
2. Аспектно-ориентированное подход (АОП) — методология
программирования, основанная на идее разделения
функциональности для улучшения разбиения программы на
модули.
АОП предлагает языковые средства, позволяющие
выделять сквозную функциональность в отдельные модули,
и таким образом упрощать работу с компонентами
программной системы, и снижать сложность системы в
целом.
Методология АОП была предложена группой инженеров
исследовательского центра Xerox PARC под руководством
Грегора Кичалеса (Gregor Kiczales). Ими же в 2001 году было
разработано аспектно-ориентированное расширение для
языка Java, получившее название AspectJ.
3. Система как набор функциональных
требований
Функциональные требования:
– работа со счетами
– валютные операции
– работа с кредитными картами
– работа с банкоматами
– ...
Общесистемные требования:
– авторизованный доступ
– целостность транзакций
– ведение журнала событий
– мониторинг производительности
– обработка исключительных
ситуаций
– валидация данных
– многопоточность
– ...
– ...
Требования к банковской системе
4. Проблема сквозной функциональности
public class SomeBusinessClass {
// Данные, отвечающие за состояние объекта
// Вспомогательные данные, отвечающие за:
// - авторизованный доступ к данным;
// - целостность транзакций;
// - ведение журнала событий;
// - безопасность междупоточного взаимодействия;
// - ...
public void someOperation(Object...params) {
// проверить уровень доступа к данным
// запретить доступ к данным другим потокам выполнения
// занести в журнал отметку о начале операции
// Реализация логики данного метода
// занести в журнал отметку о конце операции
// разрешить доступ к данным другим потокам выполнения
}
}
5. Пространство требований и
реализации
Отображение
в реализацию
Безопасность
Управление
транзакциями
Бизнес-логика
Пространство требований
Безопасность
Управление
транзакциями
Бизнес-логика
Пространство реализации
Сворачивание многомерного пространства требований
в одномерное пространство реализации
8. Влияние запутанного и
рассредоточенного кода на
проектирование и реализацию
– Плохое прослеживание назначения модуля
– Низкая пригодность кода для повторного
использования
– Большая вероятность ошибок
– Трудности в сопровождении
9. Выделение сквозной
функциональности с помощь аспектов
Модуль счетов
Модуль банкомата
Модуль БД
Модуль
безопасности
Аспект
безопасности
Вызовы API
Автоматически
интегрированные
вызовы
10. Фундаментальные понятия АОП
● JoinPoint — строго определённая точка выполнения программы, ассоциированная с контекстом
выполнения (вызов метода, конструктора, доступ к полю класса, обработчик исключения, и т.д.)
● Pointcut — набор (срез) точек JoinPoint удовлетворяющих заданному условию.
● Advice — набор инструкций, выполняемых до, после или вместо каждой из точек выполнения
(JoinPoint), входящих в заданный срез (Pointcut)
● Inter-type declaration* — способность аспекта изменять статическую структуру класса путем
добавления как новых полей и методов, так и иерархии класса.
● Aspect — основная единица модульности АОП, инкапсулирующая срезы точек выполнения
(Pointcut), наборы инструкци (Advice), а также Inter-type определения*.
● Weaving – процесс интеграции правил вплетения кода аспектов с кодом, ответственным за
бизнес-логику, результатом которого является конечная система.
* – доступно только в AspectJ
12. Joinpoints, доступные в AspectJ
Категория Преставление
Выполнение метода Тело метода
Вызов метода Вызов метода
Выполнение конструктора Тело конструктора
Вызов конструктора Вызов конструктора
Чтение поля класса Чтение поля
Запись в поле класса Запись поля
Обработка исключений catch-блок обработки исключения
Инициализация класса Блок статической инициализации
Инициализация объекта Инициализация в конструкторе
13. Отношения между Joinpoints,
шаблонами сигнатур и Pointcuts
public class Account {
private double balance;
private int accountNumber;
public Account(int accountNumber) {
this.accountNumber = accountNumber;
}
public void credit(double amount) {
balance += amount;
}
public void debit(double amount)
throws InsufficientBalanceException {
if (balance < amount) {
throw new InsufficientBalanceException(
"Недостаточный баланс.");
} else {
balance -= amount;
}
}
// ...
}
within(Account)
Pointcut
Account
Сигнатура типа
Сигнатура метода
public * Account.*(..)
execution(public * Account.*(..))
Pointcut
private double Account.balance
get(private double Account.balance)
Pointcut
set(private double Account.balance)
PointcutPointcut
Сигнатура поля
public Account.new(int)
Сигнатура конструктора
execution(Account.new(int))
Pointcut
14. Pointcut. Мета-символы и логические
операторы
Операция Пример использования
&& call(* debit(..)) && target(Account+)
|| call(* int Account.*(..)) || call(* double Account.*(..))
! !whitin(Account)
Логические операторы
Символ Пример использования
* call(public *.new(int))
execution(public int *.get*())
..
call(public Account.new(..))
call(public int *.*(Account, .., double))
+ execution(public Account+.new(..))
Мета-символы
16. Конструкция Advice
Advice – набор инструкций сквозной функциональности, добавляемый до,
после или вместо JoinPoint, входящих в указанный Pointcut.
● Before – набор инструкций выполняемый перед выполнением инструкций
входящих в описываемую Joinpoint.
● after returning – набор инструкций выполняется после успешного
возвращения значения из описываемой точки выполнения.
● after throwing – набор инструкций выполняется после возникновения
исключительной ситуации в описываемой точке выполнения.
● after – набор инструкций выполняется после возвращения из
описываемой точки выполнения в любом случае.
● around – набор инструкций выполняется вместо описываемой точки
выполнения.
20. @AspectJ
@Aspect
public class PureJavaAspect {
@Pointcut(value = "execution(* Content.*(..))")
public void parents() {}
@Before("parents()")
public void before(JoinPoint joinPoint) {
Logger.log("Before " + joinPoint.toLongString());
}
@DeclareWarning("get(* System.*) && !within(cnc.logging.Logger)")
static final String warning = "Do not use System.out";
}
21. AspectJ. Средства разработки
Консольные:
– ajc - компилятор AspectJ
– ajdoc - средство документации AspectJ в стиле
javadoc
Визуальные:
– плагин для Eclipse
– плагин для NetBeans
– плагин для IntelliJ IDEA
22. Преимущества АОП
– Упрощение дизайна
– Более понятная реализация
– Уменьшение объёма исходного кода
– Уменьшение количества ошибок
– Уменьшение связанности между классами
– Улучшение повторного использования кода
– Уменьшение затрат на поддержку ПО
– Снижение стоимости разработки
23. Недостатки АОП
– Порог вхождения
– Похоже на магию
– Некоторые недостатки реализации
– Некоторые недостатки средств разработки
– Изучение существующих практик применения для
снижения рисков