В докладе рассказывается об инструментах и практиках парсинга формальных языков: как исходного кода, так и собственных предметно-ориентированных (DSL). О том, какие бывают парсеры и проблемы при их использовании. Доклад повествует как о базовых вещах: о токенах, деревьях разбора, абстрактных синтаксических деревьях (AST), так и о продвинутых: о методах обработки препроцессорных директив и восстановления от ошибок, о парсинге островных, нечувствительных к регистру языков и фрагментов кода. Помимо парсинга в докладе затрагивается тема обработки древовидных структур. Материал доклада основан на практических задачах и акцентирован на технологиях ANTLR и Roslyn.
Теория языков программирования некоторые слайды к лекциямSergey Staroletov
Теория языков программирования (немного об интерпретаторах, триадах, оптимизации, парсерах и прочее)
Compilers construction some lectures of whole course, it covers some methods on interpreters, optimisations, antlr, dsl (introduction)
Рассмотрю с практической стороны создание своего предметно-ориентированного языка. Продемонстрирую почти готовое решение возникшей задачи и расскажу, в каких случаях может потребоваться внедрение DSL.
Докладчик: Михаил Воротынцев (AgoraDoxa)
Видео: https://www.youtube.com/watch?v=Qf0TjcBG1oI
Теория языков программирования некоторые слайды к лекциямSergey Staroletov
Теория языков программирования (немного об интерпретаторах, триадах, оптимизации, парсерах и прочее)
Compilers construction some lectures of whole course, it covers some methods on interpreters, optimisations, antlr, dsl (introduction)
Рассмотрю с практической стороны создание своего предметно-ориентированного языка. Продемонстрирую почти готовое решение возникшей задачи и расскажу, в каких случаях может потребоваться внедрение DSL.
Докладчик: Михаил Воротынцев (AgoraDoxa)
Видео: https://www.youtube.com/watch?v=Qf0TjcBG1oI
Компилируемые в реальном времени DSL для С++corehard_by
В последнее время в промышленной разработке особую популярность обретают предметно-ориентированные языки программирования (Domain-Specific Lanugages, DSL). Они драматически упрощают разработку и дают возможность “программировать” не только инжеренерам, но и пользователям прикладных программ. В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Правила статического анализа кода для диагностики потенциально опасных констр...Sergey Vasilyev
В статье сформулированы правила диагностики потенциально опасных синтаксических конструкций в исходном коде программ на языке Си++. Описаны принципы построения статического анализатора исходного кода, реализующего проверку указанных правил.
Не всегда задачи решаются в терминах языка программирования. И когда дело доходит до реализации, иногда "волосы становятся дыбом" от мысли, как это придется делать на конкретном языке. В данном докладе автор "изольет душу" на тему идиом в языках программирования, чем они отличаются от паттернов проектирования, рассмотрит преимущества и недостатки их использования, а также подробно рассмотрит несколько наиболее популярных идиом для C++.
Спросите любого программиста и он честно вам ответит, что 90% процентов его времени уходит на поиск ошибок. Подпишусь под этим и я, сменивший за долгие годы множество языков и фреймворков. Действительно, "человеку свойственно ошибаться". Так что же делать, если из человека это свойство не выбить? Как сократить это бездарно потраченное время?
Тот же программист вам и ответ: "отлаживать, конечно". Это искуство сродни магии, доступно всем и покоряется немногим. Но к счастью, помимо проверенной временем практики "вставь сюда print" к услугам питонистов целый зоопарк инструментов.
В этом докладе я постараюсь обобщить самые частые практики отладки, описать их плюсы/минусы и как они соотносятся с Python. Кроме этого, мы совершим обзорный экскурс по экосистеме и посмотрим, чем можно помочь себе в этой нелегкой борьбе. Для особенных эстетов мы рассмотрим техники получения информации из уже запущенного кода. Buckle up!
======
Ссылки
======
Python Debugger Uncovered
https://www.youtube.com/watch?v=2sEPipctTxw
How I built a power debugger out of the standard library and
things I found on the internet
https://www.youtube.com/watch?v=g8kF9tuYZ6s
Architecture of Open Source Applications: GDB
http://www.aosabook.org/en/gdb.html
Advanced Python Debugging Techniques Using GDB
https://www.youtube.com/watch?v=rB9rPdMRxIA
pdb – Interactive Debugger
https://pymotw.com/2/pdb/
bdb — Debugger framework
https://docs.python.org/2/library/bdb.html
C++ является одним из самых распространенных и широко используемых языков программирования. Python становится все более популярным языком программирования и используется в различных сферах IT. С++ отлично подходит для оптимизации по скорости исполнения, Python же ориентирован на скорость разработки. Создавая гибридное решение можно пользоваться преимуществами этих двух мощных инструментов, но не стоит забывать и про недостатки. В докладе будет освещены методы интеграции С++ и Python и выбора подходящего языка для соответствующих задач.
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
Доклад посвящён различным аспектам компилятора С++, созданного с участием автора. В выступлении рассказывается о продвинутой архитектуре компилятора, основных проектных решениях, а также обсуждаются особенности входного языка, повлиявшие на реализацию компилятора.
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и ...Tech Talks @NSU
http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=f6Xk-CLUcF4
05 ноября 2014. Back to the Future: Функциональное программирование вчера и сегодня.(Александр Гранинр, Лаборатория Касперского)
«Несмотря на то, что функциональное программирование существует уже 60 лет, до сих пор оно оставалось в тени императивного программирования, а разработчики о нем знали лишь потому, что в университетах иногда есть некая туманная дисциплина с таким названием. Но сегодня, когда стало ясно, что ООП не является панацеей в борьбе со сложностью ПО, о функциональном программировании внезапно вспомнили: оказалось, что идеи, которые оно предлагает, помогают решать традиционные задачи более простым и элегантным способом. Современные мэйнстримные языки, в развитии своем исчерпав все лимиты из ООП и императивного программирования, двинулись в сторону функционального программирования. В лекции будет рассказано о наиболее значимых идеях и принципах, которые вышли из мира функционального программирования и с успехом покоряют умы современных мэйнстрим-разработчиков.»
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...corehard_by
Все мы знаем, что компиляторы в настоящее время достаточно умные. И нам как программистам зачастую не нужно думать о каких-то незначительных оптимизациях - мы полагаемся на оптимизации компилятора. Что ж, настало время выяснить, действительно ли настолько компиляторы умны и узнать, в каких местах программист всё же (может быть) умнее.
PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротковpgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Регулярные выражения — мощный и широко применяемый инструмент для обработки текстовых данных. При поиске по регулярному выражению в большом наборе строк, становится актуальным вопрос о применении индекса. В то же время, использование индексов для поиска по регулярному выражению — нетривиальная задача.
Существует два основных подхода к выполнению поиска по регулярным выражениям с помощью индекса: "FREE indexing engine" [1], основанный на выделении из регулярного выражения непрерывных фрагментов текста, а также метод, разработанный для Google Code Search [2], осуществляющий рекурсивный анализ составных частей регулярного выражения, с целью выявления его атрибутов. В целом же, оба этих подхода используют обратные индексы на основе k-грам (подстрок исходной строки длины k) и различаются методом извлечения k-грам из регулярного выражения для последующего поиска по индексу.
Данный доклад представляет новый метод извлечений k-грам из регулярного выражения, основанный не на анализе исходного регулярного выражения, а на преобразовании соответствующего конечного автомата. Предлагаемый подход позволяет осуществить более полное извлечение k-грам из регулярного выражения, что подтверждается примерами. Данный подход был реализован в модуле pg_trgm СУБД PostgreSQL 9.3 [3].
Основы ооп на языке C#. Часть 2. базовый синтаксис.YakubovichDA
Рассматриваются базовые понятия и конструкции языка C#:
- структура консольного приложения;
- переменные и типы данных;
- арифметические и логические операторы;
- условные вычисления;
- циклы;
- массивы;
- ввод и вывод данных.
«JMM в Android», Максим Ефимов, RedmadrobotMail.ru Group
Максим расскажет, что такое Java Memory Model, какие нюансы ожидают разработчика при написании мультипоточного кода, и как это учитывать в Android-приложениях.
Перевод на русский язык: отрыв от оригинала и адаптация переводаEugene Bartov
Задача данного мастер-класса было показать разнообразие ситуаций, где отраслевой переводчик может и должен отходить от оригинала, если он переводит на русский язык и адаптирует свой перевод под русскоязычную аудиторию.
Данный материал был представлен финалистам конкурса компании "Палекс" от Школы отраслевых переводчиков "Альянс ПРО".
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...Mail.ru Group
Анализ кода — один из эффективных подходов к выявлению дефектов на этапе разработки программного обеспечения. Это позволяет избежать тривиальных и не очень ошибок, которые могут приводить к появлению уязвимостей. Существует ряд подходов, применяемых в анализаторах, на основании которых производится анализ, позволяющий снижать риски. Однако возникает ряд предубеждений, ведь не всегда предупреждение анализатора является реальным дефектом, тем более, что не всякий дефект является уязвимостью.
Компилируемые в реальном времени DSL для С++corehard_by
В последнее время в промышленной разработке особую популярность обретают предметно-ориентированные языки программирования (Domain-Specific Lanugages, DSL). Они драматически упрощают разработку и дают возможность “программировать” не только инжеренерам, но и пользователям прикладных программ. В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Правила статического анализа кода для диагностики потенциально опасных констр...Sergey Vasilyev
В статье сформулированы правила диагностики потенциально опасных синтаксических конструкций в исходном коде программ на языке Си++. Описаны принципы построения статического анализатора исходного кода, реализующего проверку указанных правил.
Не всегда задачи решаются в терминах языка программирования. И когда дело доходит до реализации, иногда "волосы становятся дыбом" от мысли, как это придется делать на конкретном языке. В данном докладе автор "изольет душу" на тему идиом в языках программирования, чем они отличаются от паттернов проектирования, рассмотрит преимущества и недостатки их использования, а также подробно рассмотрит несколько наиболее популярных идиом для C++.
Спросите любого программиста и он честно вам ответит, что 90% процентов его времени уходит на поиск ошибок. Подпишусь под этим и я, сменивший за долгие годы множество языков и фреймворков. Действительно, "человеку свойственно ошибаться". Так что же делать, если из человека это свойство не выбить? Как сократить это бездарно потраченное время?
Тот же программист вам и ответ: "отлаживать, конечно". Это искуство сродни магии, доступно всем и покоряется немногим. Но к счастью, помимо проверенной временем практики "вставь сюда print" к услугам питонистов целый зоопарк инструментов.
В этом докладе я постараюсь обобщить самые частые практики отладки, описать их плюсы/минусы и как они соотносятся с Python. Кроме этого, мы совершим обзорный экскурс по экосистеме и посмотрим, чем можно помочь себе в этой нелегкой борьбе. Для особенных эстетов мы рассмотрим техники получения информации из уже запущенного кода. Buckle up!
======
Ссылки
======
Python Debugger Uncovered
https://www.youtube.com/watch?v=2sEPipctTxw
How I built a power debugger out of the standard library and
things I found on the internet
https://www.youtube.com/watch?v=g8kF9tuYZ6s
Architecture of Open Source Applications: GDB
http://www.aosabook.org/en/gdb.html
Advanced Python Debugging Techniques Using GDB
https://www.youtube.com/watch?v=rB9rPdMRxIA
pdb – Interactive Debugger
https://pymotw.com/2/pdb/
bdb — Debugger framework
https://docs.python.org/2/library/bdb.html
C++ является одним из самых распространенных и широко используемых языков программирования. Python становится все более популярным языком программирования и используется в различных сферах IT. С++ отлично подходит для оптимизации по скорости исполнения, Python же ориентирован на скорость разработки. Создавая гибридное решение можно пользоваться преимуществами этих двух мощных инструментов, но не стоит забывать и про недостатки. В докладе будет освещены методы интеграции С++ и Python и выбора подходящего языка для соответствующих задач.
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
Доклад посвящён различным аспектам компилятора С++, созданного с участием автора. В выступлении рассказывается о продвинутой архитектуре компилятора, основных проектных решениях, а также обсуждаются особенности входного языка, повлиявшие на реализацию компилятора.
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Tech Talks @NSU: Back to the Future: Функциональное программирование вчера и ...Tech Talks @NSU
http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=f6Xk-CLUcF4
05 ноября 2014. Back to the Future: Функциональное программирование вчера и сегодня.(Александр Гранинр, Лаборатория Касперского)
«Несмотря на то, что функциональное программирование существует уже 60 лет, до сих пор оно оставалось в тени императивного программирования, а разработчики о нем знали лишь потому, что в университетах иногда есть некая туманная дисциплина с таким названием. Но сегодня, когда стало ясно, что ООП не является панацеей в борьбе со сложностью ПО, о функциональном программировании внезапно вспомнили: оказалось, что идеи, которые оно предлагает, помогают решать традиционные задачи более простым и элегантным способом. Современные мэйнстримные языки, в развитии своем исчерпав все лимиты из ООП и императивного программирования, двинулись в сторону функционального программирования. В лекции будет рассказано о наиболее значимых идеях и принципах, которые вышли из мира функционального программирования и с успехом покоряют умы современных мэйнстрим-разработчиков.»
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...corehard_by
Все мы знаем, что компиляторы в настоящее время достаточно умные. И нам как программистам зачастую не нужно думать о каких-то незначительных оптимизациях - мы полагаемся на оптимизации компилятора. Что ж, настало время выяснить, действительно ли настолько компиляторы умны и узнать, в каких местах программист всё же (может быть) умнее.
PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротковpgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Регулярные выражения — мощный и широко применяемый инструмент для обработки текстовых данных. При поиске по регулярному выражению в большом наборе строк, становится актуальным вопрос о применении индекса. В то же время, использование индексов для поиска по регулярному выражению — нетривиальная задача.
Существует два основных подхода к выполнению поиска по регулярным выражениям с помощью индекса: "FREE indexing engine" [1], основанный на выделении из регулярного выражения непрерывных фрагментов текста, а также метод, разработанный для Google Code Search [2], осуществляющий рекурсивный анализ составных частей регулярного выражения, с целью выявления его атрибутов. В целом же, оба этих подхода используют обратные индексы на основе k-грам (подстрок исходной строки длины k) и различаются методом извлечения k-грам из регулярного выражения для последующего поиска по индексу.
Данный доклад представляет новый метод извлечений k-грам из регулярного выражения, основанный не на анализе исходного регулярного выражения, а на преобразовании соответствующего конечного автомата. Предлагаемый подход позволяет осуществить более полное извлечение k-грам из регулярного выражения, что подтверждается примерами. Данный подход был реализован в модуле pg_trgm СУБД PostgreSQL 9.3 [3].
Основы ооп на языке C#. Часть 2. базовый синтаксис.YakubovichDA
Рассматриваются базовые понятия и конструкции языка C#:
- структура консольного приложения;
- переменные и типы данных;
- арифметические и логические операторы;
- условные вычисления;
- циклы;
- массивы;
- ввод и вывод данных.
«JMM в Android», Максим Ефимов, RedmadrobotMail.ru Group
Максим расскажет, что такое Java Memory Model, какие нюансы ожидают разработчика при написании мультипоточного кода, и как это учитывать в Android-приложениях.
Перевод на русский язык: отрыв от оригинала и адаптация переводаEugene Bartov
Задача данного мастер-класса было показать разнообразие ситуаций, где отраслевой переводчик может и должен отходить от оригинала, если он переводит на русский язык и адаптирует свой перевод под русскоязычную аудиторию.
Данный материал был представлен финалистам конкурса компании "Палекс" от Школы отраслевых переводчиков "Альянс ПРО".
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...Mail.ru Group
Анализ кода — один из эффективных подходов к выявлению дефектов на этапе разработки программного обеспечения. Это позволяет избежать тривиальных и не очень ошибок, которые могут приводить к появлению уязвимостей. Существует ряд подходов, применяемых в анализаторах, на основании которых производится анализ, позволяющий снижать риски. Однако возникает ряд предубеждений, ведь не всегда предупреждение анализатора является реальным дефектом, тем более, что не всякий дефект является уязвимостью.
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Yandex
Алексей Куканов, Intel.
Последняя версия стандарта С++ добавляет в язык и библиотеку поддержки средства для использования потоков исполнения (threads) и синхронизации между ними. Однако это лишь необходимая низкоуровневая база для внедрения параллелизма. Эффективная разработка параллельных программ требует высокоуровневого API, реализующего типичные шаблоны использования параллелизма в виде, пригодном для применения в широком спектре алгоритмов и приложений. В докладе речь пойдёт о наиболее часто встречающихся параллельных шаблонах, реализованных в программных моделях Intel® Threading Building Blocks и Intel® Cilk Plus, и о примерах их использования.
[RU] Connecting AutoCAD and Python (by Alex Bausk)Alexander Bausk
(Russian) Future of Engineering Automation: Building a Distributed Application to Connect AutoCAD and Python
Speech given at Autodesk University 2014.
А. Бауск. "Создание распределенного приложения на примере AutoCAD и Python". Доклад на Autodesk University 2014.
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studiocorehard_by
Большинство программистов плохо представляют, что означает создание PVS-Studio для Linux. Многие думают, что вся сложность в портировании кода, однако это очень далеко от истины: портировать код очень просто, однако это только 5% работы. Остальная работа скрыта от стороннего наблюдателя и заключается в решении многих инфраструктурных вопросов. Предлагаем заглянуть на кухню разработчиков анализатора PVS-Studio и узнать разные интересные нюансы их работы.
Язык C++ и инфраструктура вокруг него продолжает активно развиваться, что делает этот язык одним из самых эффективных инструментов в настоящее время. Хочется выделить три фактора, делающие язык C++ сейчас столь привлекательным. Первое: нововведения в стандарт языка, позволяющие писать эффективный код. Второе: зрелость инструментов разработки и увеличение скорости сборки проектов. Третье: зрелось вспомогательного инструментария, позволяющие контролировать качество кода и другие аспекты жизненного цикла проекта. Этот доклад - ода языку программирования C++!
Статья знакомит разработчиков с библиотекой VivaCore, предпосылками ее создания, возможностями, структурой и областями применения. Данная статья была написана параллельно с разработкой библиотеки VivaCore, и поэтому отдельные детали ее конечной реализации могут отличаться от описанных здесь свойств. Но это не помешает разработчикам познакомиться с общими принципами работы библиотеки, механизмами анализа и обработки текстов программ на языке Си и Си++.
Промышленные контроллеры IIoT — это целая экосистема, которую разработчики.NET обычно обходят стороной. В докладе продолжим погружение в мир дружбы.NET и автономного оборудования, рассмотрим некоторые частые проблемы и "железные" заморочки, возникающие при общении с промышленным контроллерами. Расскажу, как не сломать зубы о "железные" протоколы и почему "умные" устройства пока не могут потеснить "глупых" промышленных собратьев в IIoT.дет интересно.
Николай Гусев «Функциональное программирование для C# разработчиков»MskDotNet Community
Функциональное программирование набирает популярность с каждым днем. Тут и там выходят новые библиотеки, фреймворки и языки, вдохновлённые функциональными концепциями. Всё больше программистов начинают ценить неизменяемое состояние и чистые функции, простую и удобную композицию конструкций и компилятор, находящий львиную долю ошибок ещё до запуска приложения. Язык C# с каждым годом вбирает в себя новые идеи из мира функционального программирования. Мы уже привыкли к удобному Linq и к передаче функций как параметров. А иногда C# и сам становится колыбелью новых идей, например, Reactive Extensions (спасибо Эрику Мейеру). Интересно, какие ещё конструкции функционального программирования можно было бы использовать в C#? Об этом мы и поговорим в нашем докладе. Заодно узнаем, как обрабатывать ошибки в стиле функционального программирования, как избавиться от Null Reference Exception, как ещё можно использовать Linq и многое другое. Приходите, будет интересно.
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...MskDotNet Community
Технология.net Core от Microsoft позволила.Net разработчикам разворачивать приложения на Linux. Вместе с этим появилось и множество новых возможностей для более эффективной разработки и поставки. В докладе будут разобраны основные проблемы разработки, поставки, тестирования и рассмотрены схемы их решения, используя такие средства как: GitLab, Vgarant+VirtualBox, TeamCity, Ansible, Octopus Deploy, Docker. Мы поговорим про создание тестовых сред, управление инфраструктурой из кода и CI/CD. Основная цель доклада — продемонстрировать, что.net Core на Linux — это выгодно, быстро и управляемо.
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовMskDotNet Community
Как помочь тестам находить баги? Что лучше: каждый новый запуск на новом наборе данных или же стабильность? Как сделать тестовые данные эффективными?
В докладе рассматривается Property based подход для написания unit-тестов.
На реальных примерах будет показано то, какими возможностями обладает FsCheck в связке с C#, какие есть плюсы и минусы у данного инструмента и стоит ли тратить время на его изучение.
Доклад посвящён специфике.NET Framework в рамках очередной версии хит-парада угроз безопасности приложений OWASP TOP 10, опубликованной в ноябре этого года. Поговорим о том, каким образом каждая из угроз может проявляться в.NET-приложениях, как от этого защищаться и, немного, об общем подходе к разработке защищённых приложений в.NET
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиковMskDotNet Community
2017-12-16 MskDotNet Субботник
Искусственный интеллект сейчас является одной из самых обсуждаемых тем и главным двигателем цифровой трансформации бизнеса. Стратегия Microsoft в области ИИ включает в себя демократизацию ИИ для разработчиков, т.е. предоставление простых в использовании фреймворков и сервисов для решения интеллектуальных задач. Мы расскажем, как.NET-разработчики могут использовать возможности ИИ в своих проектах: начиная от готовых когнитивных сервисов, работающих в облаке, заканчивая обучением нейросетей на.NET-языках и запуском сложных нейросетевых моделей на компактных устройствах типа Raspberry Pi.
Если вы пишете веб-приложения только под Windows, однако рано или поздно выбор определенной ОС накладывает на вас свои ограничения, наступает время подумать о кроссплатформенной разработке веб-приложений. К чему нужно быть готовым? Mono или .Net Core? Готовы ли Вы портировать свое приложение? Я расскажу о нашем опыте перехода на mono и о том, как это было, с какими проблемами мы столкнулись в первую очередь и почему. Помимо ASP.NET приложений мы так же портировали наш MS SQL Server под Docker. А в заключении мы поговорим о веб-серверах для ASP.NET приложений: — XSP — Apache — nginx
Дмитрий Тежельников «Разработка вэб-решений с использованием Asp.NET.Core и ...MskDotNet Community
Поговорим об эволюции в мире вэб-приложений, современных технологиях и фреймворках, которые используют в вэб-разработке сегодня.
Обсудим основные архитектурные принципы при создании вэб-решений для разных клиентов. Обсудим, как сделать и запустить бэк-энд на Asp.NET.Core в Visual Studio 2017. Далее поговорим, как написать и запустить фронт-энд с использованием React.JS, Redux, Routing, Bootstrap в IntelliJ IDEA 2017.
В конце доклада немного заглянем в будущее, что нас ждет в вэб-разработке завтра?
Поговорим о системе конфигурации в.net. Как она работает на больших проектах, какие проблемы и почему все очень плохо. Какой подход мы применили у себя, чтобы избавиться от некоторых проблем. Как изменились подходы сейчас в.net core. Что с конфигами в ASP.NET Core и как быть, когда кругом микросервисы.
На встрече мы поговорим о том, как не бояться изменений и как быть к ним готовым. Дадим определение АОП. Рассмотрим проблемы, хорошо решаемые инструментами АОП. Построим модульную систему, применяя АОП. Сравним динамический и статический подходы в АОП. Дадим рекомендации по применению АОП.
Вас ждет река теории впадающая в море практики.
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"MskDotNet Community
Поговорим что такое React и зачем он нужен разработчикам, разберемся что такое ReactJS.NET и JavaScriptServices,
Обсудим как интегрировать React компоненты в существующую Razor разметку или даже в WebForms. Расскажем о том какие проблемы с производительностью существуют при серверном рендеринге компонентов и как их решать.
Андрей Матвеев "Основные принципы микросервисов и их реализации"MskDotNet Community
Посмотрим, что скрывается за модным buzzword’ом, взвесим обещанные плюсы и найдем минусы, о которых умалчивают. Разберемся зачем они нужны, и пора ли отказываться от монолита. И попробуем понять, как же их делать.
MSK .NET Meetup #8
21 марта 2017
Сегодня понятие интернета вещей ассоциируется с двумя направлениями: облаком и устройствами. И если об облаках говорят много, то о устройствах в концепции IoT информации намного меньше. Мы поговорим о том, что же это за "вещи", какая у них роль, из чего они сделаны и как они работают.
MSK .NET Meetup #8
21 марта 2017
Путь от лабораторного прототипа к промышленной эксплуатации системы IoT тернист. Разработчиков ждут неожиданные проблемы, которые не могут возникнуть в лаборатории. Доклад о том как набить себе по меньше шишек и сделать работающую систему.
Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...MskDotNet Community
MSK .NET Meetup #8
21 марта 2017
При проектировании системы важно понять, каким угрозам эта система может подвергаться, и разработать соответствующие меры защиты при проектировании и построении её архитектуры. Особенно важно с самого начала учитывать требования безопасности при проектировании продукта. Если вы понимаете, каким образом злоумышленники могут скомпрометировать вашу систему, то это поможет еще до начала работы принять соответствующие меры по снижению рисков. В докладе на примере рефренсной архитектуры Azure IoT будет рассмотрено, каким образом можно спроектировать архитектуру соответствующую необходимому уровню безопасности.
Кирилл Маурин «Проектирование и разработка модульных приложений»MskDotNet Community
Выступление с MSK .NET Meetup #7
21 февраля 2017
Во вдоль и поперек изъезженной теме разработки модульных приложений есть много нового и полезного для большей части аудитории. Много материала из личного опыта автора с иллюстрацией из собственной микробиблиотеки с отрытым исходным кодом.
MSK .NET Meetup #7
21 февраля 2017
Мы поговорим о автоматических инструментах поиска ошибок в программах для.Net. Посмотрим на зоопарк средств статического анализа. Попробуем автоматически генерировать Unit-тесты с помощью IntelliTest.
Иван Кочуркин. Теория и практика парсинга формальных языков
1. Теория и практика парсинга
формальных языков
Иван Кочуркин
Работаю в Positive Technologies над открытым
универсальным сигнатурным анализатором кода PT.PM
Подрабатываю в Swiftify, веб‐сервисе для конвертинга
кода Objective‐C в Swift
Веду активную деятельность на GitHub
Пишу статьи на Хабре и GitHub под ником KvanTTT
1
2. Почему не Regex?
1. <table>(.*?)</table>
2. А если аттрибуты? <table.*?>(.*?)</table>
3. А если элементы? tr , td
4. А если комментарии? <!‐‐ html comment ‐‐>
5. ...
6. NO NOO̼OO NΘ stop the an*̶͑̾̾̅ͫ
̙̤g͇̫
͛͆̾ͫ̑͆
l͖͉̗̩̳̟
̍ͫͥͨ
e̠̅s ͎a̧͈͖r̽̾̈́͒͑
e not rè̑ͧ̌
aͨl̘̝̙
̃ͤ
͂̾̆
ZA̡͊͠͝LGΌ ISͮ̂
҉̯͈͕̹̘̱
TO͇̹̺ͅ
Ɲ̴ȳ̳
TH̘Ë͖́̉
͠P̯͍̭O̚N̐Y̡H̸̡̪̯ͨ͊̽̅̾̎
E̾͛ͪ̈́̀́
̶̧̧̨̬̩̱̹̭̯͘
ͧ̾ͬ
C̷̙̲̝͖
ͭ̏ͥͮ
͟O̮̪̝͍ͮ
M̲̖͊̒ͪͩͬ̚̚
͜Ȇ̴̟̟͙̞
ͩ͌͝S̨̥̫͎̭
ͯ̿̔̀
ͅ
2
3. Лексемы и токены
Лексема ‐ распознанная последовательность символов
Токен ‐ лексема + тип
MyKeyword: 'var';
Id: [a‐z]+;
Digit: [0‐9]+;
Comment: '<!‐‐' .*? '‐‐>';
Пример:
TagOpen(<) Identifier(html) TagClose(>) Whitespace()
3
4. Дерево разбора и AST
Дерево разбора ‐ древовидная структура, распознанная из
потока токенов
AST ‐ дерево разбора без пробелов, точек с запятых и т.д.
4
5. Типы парсеров
Готовые библиотеки парсинга ﴾regex, JSON.NET﴿
API
Только самые распространенные языки
Парсеры, написанные вручную ﴾Roslyn﴿
Большие возможности и гибкость
Большой порог вхождения
Медленная скорость разработки
Автоматически сгенерированные парсеры ﴾ANTLR﴿
Порог вхождения
Быстрая скорость разработки после освоения
Меньшая гибкость по сравнению с ручными
парсерами
5
6. Грамматика
Формальное описание языка, которое может быть
использовано для распознавания его структуры.
Пример грамматики
expr
: expr '*' expr
| expr '+' expr
| ID '(' args ')'
| ID
;
ID: [a‐zA‐Z]+;
Пример данных
a + b * c
6
11. Проблемы и задачи парсинга
На основе ANTLR и Roslyn.
Неоднозначность
Контекстно‐зависимые конструкции
Регистронезависимость
Островные языки и конструкции
Скрытые токены
Препроцессорные директивы
Парсинг фрагментов кода
Обработка и восстановление от ошибок
11
12. Неоднозначность
Пример: var var = 100500;
Решение с помощью грамматики
// Lexer
VAR: 'var';
ID: [0‐9a‐zA‐Z];
// Parser
varDeclaration
: VAR identifier ('=' expression)? ';'
;
identifier
: ID
// Other conflicted tokens
| VAR;
12
13. Объектный конструктор в C#
class Foo
{
public string Bar { get; set; }
}
public string Bar { get; set; } = "Bar2";
...
foo = new Foo
{
Bar = Bar // Umbiguity here
};
13
14. Какой результат возвращает nameof ?
class Foo
{
public string Bar { get; set; }
}
static void Main(string[] args)
{
var foo = new Foo();
WriteLine(nameof(foo.Bar));
}
14
15. nameof как функция и оператор
class Foo
{
public string Bar { get; set; }
}
static void Main(string[] args)
{
var foo = new Foo();
WriteLine(nameof(foo.Bar));
}
static string nameof(string str)
{
return "42";
}
15
16. Неоднозначность: решение с
использованием вставок кода
Действия ‐ производят вычисления на целевом языке
парсера.
Семантические предикаты ‐ возвращают результат.
// Lexer
ID: [0‐9a‐zA‐Z];
// Parser
varDeclaration
: id {_input.Lt(‐1).Text == "var"}? id ('=' expression)? ';'
;
id
: ID;
16
17. Контекстно-зависимые конструкции
Heredoc в PHP или интерполируемые строки в C#
<?php
echo <<< HeredocIdentifier
Line 1.
Line 2.
HeredocIdentifier
;
Решение
Использование вставок кода, смотри лексер PHP.
17
19. Регистронезависимость
Языки: Delphi, T‐SQL, PL/SQL и другие.
Решение с помощью грамматики
Фрагментный токен облегчает запись других токенов.
Abstract: A B S T R A C T;
BoolType: B O O L E A N | B O O L;
BooleanConstant: T R U E | F A L S E;
fragment A: [aA];
fragment B: [bB];
Без использования фрагметных токенов:
Abstract: [Aa][Bb][Ss][Tt][Rr][Aa][Cc][Tt];
19
20. Регистронезависимость: решение на
уровне рантайма
Abstract: 'ABSTRACT';
BoolType: 'BOOLEAN' | 'BOOL';
BooleanConstant: 'TRUE' | 'FALSE';
Используется CaseInsensitiveInputStream.
Чувствительные к регистру токены обрабатываются на этапе
обхода дерева. Например $id и $ID в PHP.
Достоинства:
Код лексера чище и проще
Производительность выше
20
21. Островные языки и конструкции
JavaScript внутри PHP или C# внутри Aspx.
<?php
<head>
<script type="text/javascript">
document.body.innerHTML="<svg/onload=alert(1)>"
</script>
</head>
21
22. Островные языки и конструкции
Использовать режимы переключения лексем mode .
Сначала парсинг PHP. Текст внутри тегов <script> ‐
обычная строка.
Затем парсинг JavaScript во время обхода дерева.
22
23. PHP: альтернативный синтаксис
Смесь блоков кода на HTML и PHP
<?php switch($a): case 1: // without semicolon?>
<br>
<?php break ?>
<?php case 2: ?>
<br>
<?php break;?>
<?php case 3: ?>
<br>
<?php break;?>
<?php endswitch; ?>
23
24. Использование отдельного режима
лексем для JavaScript
//SCRIPT_BODY: .*? '</script>'; // "Жадная" версия
SCRIPT_BODY: ~[<]+;
SCRIPT_CLOSE: '</script>' ‐> popMode;
SCRIPT_DUMMY: '<' ‐> type(SCRIPT_BODY);
pushMode ‐ зайти в другой режим распознавания лексем
﴾JavaScript ‐> PHP﴿
popMode ‐ выйти из режима ﴾PHP ‐> JavaScript﴿
type ‐ изменить тип токена
channel ‐ поместить токен в изолированный канал
﴾пробелы, комментарии﴿
24
25. Обработка /*комментариев*/ и пр·б·лов
Включение скрытых токенов в грамматику
declaration:
property COMMENT* COLON COMMENT* expr COMMENT* prio?;
Связывание скрытые токенов с правилами грамматики
﴾ANTLR, Swiftify﴿
Связывание скрытых токенов с основными ﴾Roslyn﴿
25
26. Связывание скрытых токенов с узлами
дерева (Swiftify)
Предшествующие (Precending)
//First comment
'{' /*Precending1*/ a = b; /*Precending2*/ b = c; '}'
Последующие (Following)
'{' a = b; b = c; /*Following*/ '}' /*Last comment*/
Токены-сироты (Orphans)
'{' /*Orphan*/ '}'
26
27. Связывание скрытых токенов со
значимыми (Roslyn)
Типы узлов Roslyn
Node ‐ не конечный узел дерева, содержащий детей
Token ‐ конечный узел ﴾keyword, id, литерал, пунктуация﴿
Trivia ‐ скрытый токен без родителя, связывается с Token .
Лидирующие ﴾Leading﴿
Замыкающие ﴾Trailing﴿
// leading 1 (var)
// leading 2 (var)
var foo = 42; /*trailing (;)*/ int bar = 100500; //trailing (;)
// leading (EOF)
EOF
27
29. Препроцессорные директивы:
одноэтапная обработка (Swiftify)
Одновременный парсинг директив и основного языка.
Каналы для изоляции токенов препроцессорных директив.
Интерпретация и обработка макросов вместе с функциями:
Objective-C
#define DEGREES_TO_RADIANS(degrees) (M_PI * (degrees) / 180)
Swift
func DEGREES_TO_RADIANS(degrees: Double)
‐> Double { return (.pi * degrees)/180; }
Пример на Swiftify.
29
30. Препроцессорные директивы:
двухэтапная обработка (Codebeat)
bool∙trueFlag∙=
∙∙∙∙∙∙∙∙∙
∙∙∙∙true
∙∙∙∙∙
∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙
∙∙∙∙∙∙
;
1. Токенизация и разбор кода препроцессорных диреткив.
2. Вычисление условных директив #if и компилируемых
блоков кода.
3. Замена директив из исходника на пробелы.
4. Токенизация и парсинг результирующего текста.
30
31. Парсинг фрагментов кода (Swiftify)
Задача: определение корректного правила для
фрагмента кода
Применение
Конвертинг кода в плагине IDE ﴾в Swiftify для плагинов к
AppCode, XCode﴿
Определение языка программирования ﴾в PT.PM для
редактора Approof﴿
Решение
Регулярные выражения
Токенизация и операции с токенами
Парсинг разными правилами
Примеры: утверждения, декларации методов, свойства. 31
33. Ошибки парсинга
Отсутствующий и лишний токены
class T { // Отсутствующий токен
class T ; { } // Лишний токен
Несколько лишних токенов (режим «паники»)
class T { a b c }
Отсутствующее альтернативное подправило
33
34. Ошибки парсинга в Roslyn
namespace App
{
class Program
{
static void void Main(string[] args) // Invalid token
{
a // ';' expected
string s = """; // Newline in constant
char c = ''; // Empty character literal
}
}
}
34
38. Методы обхода деревьев
Посетитель (Visitor)
Тип возвращаемого значения для каждого
правила. Например, string для конвертера
исходных кодов ﴾Swiftify﴿.
Выборочный обход дочерних узлов.
Слушатель (Listener)
Посещает все узлы.
Ограниченный функционал: можно
использовать для подсчета простых метрик
кода.
38
40. Реализации Visitor
Написанные вручную
Долгая и утомительная разработка
Сгенерированные (ANTLR)
Избыточность и нарушение Code Style
Доступны не всегда
Универсальность ﴾Java, C#, Python2|3, JS, C++, Go, Swift﴿
Скорость разработки
Динамические
Медленная скорость, но хорошо для прототипов
40
42. Архитектура Visitor
Архитектура
Несколько маленьких. Создание визиторов при
необходимости.
Один большой с использованием partial классов.
Формализация
Перегрузка всех методов и использование "заглушек"
throw new ShouldNotBeVisitedException(context);
42
43. C# 7: локальные функции
public static List<Terminal> GetLeafs(this Rule node)
{
var result = new List<TerminalNode>();
GetLeafs(node, result);
// Local function
void GetLeafs(Rule localNode, List<Terminal> localResult)
{
for (int i = 0; i < localNode.ChildCount; ++i)
{
IParseTree child = localNode.GetChild(i);
// Is expression
if (child is TerminalNode typedChild)
localResult.Add(typedChild);
GetLeafs(child, localResult);
}
}
return result;
}
43
44. Оптимизации
Мемоизация
Поиск первого потомка определенного типа
FirstDescendantOfType .
Хранение всех потомков для каждого узла дерева вместо
их поиска.
Увеличение производительности в 2‐3 раза.
Увеличение потребления памяти в 3 раза.
Уменьшение аллокаций
Метод Visit ‐ базовый, он часто вызывается.
44
45. Ресурсы
Исходники презентации и примеров.
Статьи:
Теория и практика парсинга исходников с помощью
ANTLR и Roslyn
Обработка препроцессорных директив в Objective‐C
Движок поиска по шаблонам PT.PM и грамматики
grammars‐v4 ﴾PL/SQL, T‐SQL, PHP, C#, Java8, Objective‐C﴿.
45
46. Выводы
Парсинг ‐ это не так просто как кажется
Существуют языки с различной выразительностью и
синтаксисом
На C# можно пользоваться разными методами и
библиотеками парсинга
ANTLR предоставляет широкие возможности по разработке
парсеров
Roslyn очень продуман в построении дерева, но только C#
и VB
Деревья можно обрабатывать разными способами
46