Каждый разработчик рано или поздно сталкивается с предметно-ориентированными языками (DSL). Мы разберемся, зачем же нам нужны DSL, и какие проблемы они нам помогают решать. Поймем, в каких случаях нам стоит разрабатывать свой язык, а в каких — использовать уже существующий. Попробуем провести грань и решить, где у нас просто библиотека, а где — предметно ориентированный язык. Придумаем свой DSL и сравним различные подходы к работе с ним в Python. Увидим, как работают лексический и синтаксический анализаторы. Обязательно поговорим про то, как облегчить жизнь пользователям нашего языка. Как сделать информативными сообщения об ошибках? Как тестировать сценарии, написанные на нашем языке? На эти вопросы мы сможем дать ответ.
Ballerina, announced at WSO2Con 2017 in San Francisco, is a brand new programming language built from the ground to make it easier to design, describe and develop programs. It uses a unique visual approach allows you to create programs and integrate services and apps via sequence diagrams. In this slide deck, Sanjiva Weerawarana, CEO of WSO2, explains the workings of Ballerina and how it'll impact the future of integration.
Try it now and experience its capabilities at: http://ballerinalang.org/
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Loïc Knuchel
Vous commencez à en entendre parler de plus en plus mais vous avez encore du mal à voir ce que c’est et à comprendre de que ça change concrètement, ce talk est fait pour vous !!!
La programmation fonctionnelle est une manière de programmer basée sur les fonctions qui permet de faire du code vraiment modulaire, améliorer la qualité et limiter les bugs. Vous ne me croyez pas ? Venez voir cette session !
Ballerina, announced at WSO2Con 2017 in San Francisco, is a brand new programming language built from the ground to make it easier to design, describe and develop programs. It uses a unique visual approach allows you to create programs and integrate services and apps via sequence diagrams. In this slide deck, Sanjiva Weerawarana, CEO of WSO2, explains the workings of Ballerina and how it'll impact the future of integration.
Try it now and experience its capabilities at: http://ballerinalang.org/
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Loïc Knuchel
Vous commencez à en entendre parler de plus en plus mais vous avez encore du mal à voir ce que c’est et à comprendre de que ça change concrètement, ce talk est fait pour vous !!!
La programmation fonctionnelle est une manière de programmer basée sur les fonctions qui permet de faire du code vraiment modulaire, améliorer la qualité et limiter les bugs. Vous ne me croyez pas ? Venez voir cette session !
Anatomy of the loadable kernel module (lkm)Adrian Huang
Talk about how Linux kernel invokes your module's init function.
Note: When you view the the slide deck via web browser, the screenshots may be blurred. You can download and view them offline (Screenshots are clear).
Последние полтора года на каждой из наших встреч мы рассказываем о том, почему продуманная и чистая архитектура мобильных приложений — это нужно и важно. За попытками спроектировать серебряную пулю мы очень часто забываем — или просто не уделяем достаточно внимания менее заметной части нашего кода — тестам.
Егор Толстой расскажет о том, почему не стоит обделять вниманием unit-тесты, как подходить к их проектированию и осуществлять постепенный рефакторинг. Выступление, как обычно, подкреплено зарядом личной боли и опыта от поддержки базы в 3.000 unit-тестов на одном проекте и 1.000 на другом.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
Максим cdump Андреев, программист команды Облака Mail.Ru, участник различных bug-bounty программ, рассказал о протоколе автоматической настройки прокси WPAD и о том, чем он может быть интересен с точки зрения атакующего, а также поделился новыми способами перехвата пользовательского трафика с помощью WPAD.
La présentation a pour but de revenir sur différents aspects avancés de Doctrine mis en oeuvre au sein de projets Symfony 2.x/3.
Elle abordera, entre autres, les éléments suivants :
Étendre le vocabulaire DQL (spécifiquement ou à l'aide de bundles existants)
Utiliser les différents listeners existants (annotations, listeners, subscribers, utilisation de l'UOW de Doctrine lors d'un flush, etc.)
Créer des hydrateurs spécifiques ou des entités partielles pour améliorer les performances sur certaines opérations.
Astuces diverses pour améliorer les performances (désactivation des logs, etc.)
Anatomy of the loadable kernel module (lkm)Adrian Huang
Talk about how Linux kernel invokes your module's init function.
Note: When you view the the slide deck via web browser, the screenshots may be blurred. You can download and view them offline (Screenshots are clear).
Последние полтора года на каждой из наших встреч мы рассказываем о том, почему продуманная и чистая архитектура мобильных приложений — это нужно и важно. За попытками спроектировать серебряную пулю мы очень часто забываем — или просто не уделяем достаточно внимания менее заметной части нашего кода — тестам.
Егор Толстой расскажет о том, почему не стоит обделять вниманием unit-тесты, как подходить к их проектированию и осуществлять постепенный рефакторинг. Выступление, как обычно, подкреплено зарядом личной боли и опыта от поддержки базы в 3.000 unit-тестов на одном проекте и 1.000 на другом.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
Максим cdump Андреев, программист команды Облака Mail.Ru, участник различных bug-bounty программ, рассказал о протоколе автоматической настройки прокси WPAD и о том, чем он может быть интересен с точки зрения атакующего, а также поделился новыми способами перехвата пользовательского трафика с помощью WPAD.
La présentation a pour but de revenir sur différents aspects avancés de Doctrine mis en oeuvre au sein de projets Symfony 2.x/3.
Elle abordera, entre autres, les éléments suivants :
Étendre le vocabulaire DQL (spécifiquement ou à l'aide de bundles existants)
Utiliser les différents listeners existants (annotations, listeners, subscribers, utilisation de l'UOW de Doctrine lors d'un flush, etc.)
Créer des hydrateurs spécifiques ou des entités partielles pour améliorer les performances sur certaines opérations.
Astuces diverses pour améliorer les performances (désactivation des logs, etc.)
15. – Мартин Фаулер
Предметно-ориентированный язык — это
язык программирования с ограниченными
выразительными возможностями,
ориентированный на некую конкретную
предметную область
33. number = value_of('DIGIT') >> int
unit = number + value_of('UNIT') >> to_bytes
operand = unit | number
makeop = lambda s, f: skip_token(s) >> const(f)
add = makeop('PLUS', operator.add)
sub = makeop('MINUS', operator.sub)
mul = makeop('MUL', operator.mul)
div = makeop('DIV', operator.floordiv)
mul_op = mul | div
add_op = add | sub
funcparserlib
58. Сообщения об ошибках
Traceback (most recent call last):
File "size_parser/on_ply.py", line 100, in parse
return parser.parse(string)
File "size_parser/on_ply.py", line 94, in parse
p = self._parser.parse(data, debug=self._debug)
File ".env/site-packages/ply/yacc.py", line 331, in parse
return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
File ".env/site-packages/ply/yacc.py", line 1049, in parseopt_notrack
lookahead = get_token() # Get the next token
File ".env/site-packages/ply/lex.py", line 396, in token
raise LexError("Illegal character '%s' at index %d" % (lexdata[lexpos], lexpos), lexdata[lexpos:])
ply.lex.LexError: Illegal character '_' at index 5
59. Traceback (most recent call last):
File "size_parser/on_ply.py", line 100, in parse
return parser.parse(string)
File "size_parser/on_ply.py", line 94, in parse
p = self._parser.parse(data, debug=self._debug)
File ".env/site-packages/ply/yacc.py", line 331, in parse
return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
File ".env/site-packages/ply/yacc.py", line 1049, in parseopt_notrack
lookahead = get_token() # Get the next token
File ".env/site-packages/ply/lex.py", line 396, in token
raise LexError("Illegal character '%s' at index %d" % (lexdata[lexpos], lexpos), lexdata[lexpos:])
ply.lex.LexError: Illegal character '_' at index 5
Сообщения об ошибках
64. Что же выбрать?
PLY
funcparserlib
pyparsing
✤ Хочу как в учебнике
✤ Скорость работы - главное!
✤ Хочу легко все описать
✤ Быстродействие не главное
✤ Люблю функциональное
программирование
✤ Быстродействие не главное
65. И что в итоге?
✤ Для простых задач попробуйте:
✤ Средства самого языка
✤ Регулярные выражения
✤ Если задача сложная:
✤ Внутренние DSL
✤ Yaml, Json, XML, …
✤ Внешние DSL