Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
В своем докладе Олег расскажет о замене стандартных функций на более быстрые и об ускорении работы python. Также продемонстрирует несколько примеров быстрых конструкций python.
В рамках данного выступления вас ждут:
* рассказ о полезных и интересных вещах из Boost
* новости с передовиц разработки Boost и о новинках ожидаемых в следующих версиях
* что из Boost готовится к переезду в новый стандарт С++
* как экспериментировать с Boost, имея под рукой только браузер
* что людям не нравится в Boost и как с этими людьми бороться (-:
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
В своем докладе Олег расскажет о замене стандартных функций на более быстрые и об ускорении работы python. Также продемонстрирует несколько примеров быстрых конструкций python.
В рамках данного выступления вас ждут:
* рассказ о полезных и интересных вещах из Boost
* новости с передовиц разработки Boost и о новинках ожидаемых в следующих версиях
* что из Boost готовится к переезду в новый стандарт С++
* как экспериментировать с Boost, имея под рукой только браузер
* что людям не нравится в Boost и как с этими людьми бороться (-:
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухинcorehard_by
В C++11 добавили новое ключевое слово - constexpr. Выглядит оно весьма невзрачно, да и на первый взгляд кажется, что смысла в нём маловато... Для чего же оно нужно, какие у него есть тайные супер способности и какую роль оно сыграет в дальнейшем развитии языка C++ - обо всём об этом мы и поговорим.
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
Зачастую, знакомство с алиасингом в C++ у многих программистов начинается и заканчивается одинаково: -fno-strict-aliasing. На вопросы новичка, более опытные коллеги отвечают в стиле: «не трогай! а то все сломаешь!». Новичок и не трогает. В докладе будет предпринята попытка заглянуть под капот и понять, что же там, внутри. Что такое алиасинг, где он может быть полезен и какие реальные преимущества дает. Тема будет рассмотрена и со стороны программиста и со стороны разработчика компилятора. А по сему, вопрос «зачем?» будет центральным в повествовании.
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Yandex
Алексей Куканов, Intel.
Последняя версия стандарта С++ добавляет в язык и библиотеку поддержки средства для использования потоков исполнения (threads) и синхронизации между ними. Однако это лишь необходимая низкоуровневая база для внедрения параллелизма. Эффективная разработка параллельных программ требует высокоуровневого API, реализующего типичные шаблоны использования параллелизма в виде, пригодном для применения в широком спектре алгоритмов и приложений. В докладе речь пойдёт о наиболее часто встречающихся параллельных шаблонах, реализованных в программных моделях Intel® Threading Building Blocks и Intel® Cilk Plus, и о примерах их использования.
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
Python&Printer / Андрей Пучко / penta.byPython Meetup
Андрей рассказал о личном опыте сражений за печать отчетов из программ на Python. Речь шла о полезных инструментах и форматах документов (PDF, RTF, DOCX, XLS, ODT, HTML) которые можно готовить к печати при помощи Python.
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»Platonov Sergey
За время работы над проектом был разработан удобный фреймворк для написания асинхронного кода. В докладе будет рассмотрено то, как он устроен и как со временем эволюционировал. Разберемся, как с помощью наших примитивов решать проблемы, часто встречающиеся в асинхронном программирование; будут примеры удачного и неудачного использования. Отдельно остановимся на сравнении получившихся средств с тем, что было добавлено в С++11.
Доклад о дизайне кода в функциональном стиле на C++, представленный вниманию плюсовиков на C++ User Group Novosibirsk 2014.
В качестве демонстрационного проекта была реализована игра "Амбер" по мотивам "Хроник Амбера" Р. Желязны.
https://github.com/graninas/Amber
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
ЛЕКЦИЯ 5. Многопоточное программирование в языке С++. Работа с потоками. Защита данных. Синхронизация. Будущие результаты
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
В третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
Описываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
ЛЕКЦИЯ 3. Реентерабельность. Сигналы. Локальные данные потоков. Принудительное завершение потоков
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухинcorehard_by
В C++11 добавили новое ключевое слово - constexpr. Выглядит оно весьма невзрачно, да и на первый взгляд кажется, что смысла в нём маловато... Для чего же оно нужно, какие у него есть тайные супер способности и какую роль оно сыграет в дальнейшем развитии языка C++ - обо всём об этом мы и поговорим.
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
Зачастую, знакомство с алиасингом в C++ у многих программистов начинается и заканчивается одинаково: -fno-strict-aliasing. На вопросы новичка, более опытные коллеги отвечают в стиле: «не трогай! а то все сломаешь!». Новичок и не трогает. В докладе будет предпринята попытка заглянуть под капот и понять, что же там, внутри. Что такое алиасинг, где он может быть полезен и какие реальные преимущества дает. Тема будет рассмотрена и со стороны программиста и со стороны разработчика компилятора. А по сему, вопрос «зачем?» будет центральным в повествовании.
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Yandex
Алексей Куканов, Intel.
Последняя версия стандарта С++ добавляет в язык и библиотеку поддержки средства для использования потоков исполнения (threads) и синхронизации между ними. Однако это лишь необходимая низкоуровневая база для внедрения параллелизма. Эффективная разработка параллельных программ требует высокоуровневого API, реализующего типичные шаблоны использования параллелизма в виде, пригодном для применения в широком спектре алгоритмов и приложений. В докладе речь пойдёт о наиболее часто встречающихся параллельных шаблонах, реализованных в программных моделях Intel® Threading Building Blocks и Intel® Cilk Plus, и о примерах их использования.
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
Python&Printer / Андрей Пучко / penta.byPython Meetup
Андрей рассказал о личном опыте сражений за печать отчетов из программ на Python. Речь шла о полезных инструментах и форматах документов (PDF, RTF, DOCX, XLS, ODT, HTML) которые можно готовить к печати при помощи Python.
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»Platonov Sergey
За время работы над проектом был разработан удобный фреймворк для написания асинхронного кода. В докладе будет рассмотрено то, как он устроен и как со временем эволюционировал. Разберемся, как с помощью наших примитивов решать проблемы, часто встречающиеся в асинхронном программирование; будут примеры удачного и неудачного использования. Отдельно остановимся на сравнении получившихся средств с тем, что было добавлено в С++11.
Доклад о дизайне кода в функциональном стиле на C++, представленный вниманию плюсовиков на C++ User Group Novosibirsk 2014.
В качестве демонстрационного проекта была реализована игра "Амбер" по мотивам "Хроник Амбера" Р. Желязны.
https://github.com/graninas/Amber
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
ЛЕКЦИЯ 5. Многопоточное программирование в языке С++. Работа с потоками. Защита данных. Синхронизация. Будущие результаты
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
В третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
Описываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
ЛЕКЦИЯ 3. Реентерабельность. Сигналы. Локальные данные потоков. Принудительное завершение потоков
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
JSLab. Максим Климишин. "Трансдюсеры, CSP каналы, неизменяемые структуры данных"GeeksLab Odessa
28.03.15. Одесса. Impact Hub Odessa. Конференция JSLab.
Максим Климишин. "Трансдюсеры, CSP каналы, неизменяемые структуры данных"
Эффективное использование новых возможностей JavaScript для построения клиентских и серверных приложений. Как применить современные функциональные инструменты для написания более простого и надежного кода.
Подробнее:
http://geekslab.co/
https://www.facebook.com/GeeksLab.co
https://www.youtube.com/user/GeeksLabVideo
Implicit conversions and implicit parameters are fundamental and unique features of Scala that are powerful at the same time. To use these features to their maximum potential, and do so with confidence, you have to understand the specifics of how Scala compiler’s implicits search works. I will cover this topic in details, including ways you can optimize the implicits search algorithm in your library.
The second part of my session will focus on IntelliJ IDEA and how to leverage your IDE for working with implicits. Among other helpful IDE features, I will show how to debug implicits in IntelliJ IDEA.
As examples we’ll take a look at a few Scala libraries, including Spray with its well-known Magnet pattern.
On top of that, during my talk I’ll show you a few new tips and tricks on how to be more efficient by using IntelliJ IDEA’s hidden gems when working with Scala. "
Основы языка Питон: функции, элементы функционального программирования, списочные выражения, генераторы. Презентация к лекции курса "Технологии и языки программирования".
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в TarantoolTimur Safin
Презентация для выступления на Владивостокском митапе https://moscowdjango.timepad.ru/event/1884275/
"Основной режим разработки приложений в Тарантуле — это написание скриптов и манипуляции данными на Lua (оставим пока за скобками режим SQL). Часто внедрению Тарантула в некую систему становится блокером использование Lua.
В экосистеме Lua мало тулинга, это касается как встроенного интерпретатора, так и JIT-транслятора LuaJIT.
Давайте оглядимся, как обстоят дела с тестированием, профилированием, статическим анализом и дебагом в Lua. И как это все может быть использовано при разработке сервисов, в архитектуре которых есть Tarantool."
6. Function call
Любая функция вызывается в prefix
нотации:
(+ 1 1)
В данном случае + это функция, а единицы
это аргументы.
7. Expressions
В Clojure, как практически и в Scala все
является выражением, то есть возвращает
значение:
(if condition
then-branch
else-branch)
8. Literals
● "a string" - String
● :key - Keyword
● 'symbol - Symbol
● newline, c - Character
● nil - No value
● true, false - Booleans
● Numbers like in Java
9. Data literals
● [1 2 3] - Vector
● {:key value :key1 value1} - Map
● #{:key :key1} - Set
● #() - Анонимная функция (fn)
11. Named functions
(defn foo
"This is documentation"
[arguments]
body)
Параметры анонимных функций
определяются также.
12. Higher order functions
Можно в качестве параметров передавать и
другие функции, например:
(map inc [1 2 3])
Или анонимный вариант:
(map (fn [i] (+ i 1)) [1 2 3])
13. Scoped definitions (let)
Можно определить переменные, которые
будут видны лишь внутри s-expr:
(def sum-result
(let [pi Math/PI]
(/ (* pi pi) 6)))
15. if
Ранее уже видели, else branch должен
обязательно присутствовать
16. do
Если нужно выполнить несколько
выражений прежде, чем что-то вернуть.
Признак side effects:
(do
expr1
expr2
return-expression)
17. when
Всегда возвращает nil. Комбинация if только
с then branch и do.
(when (even? 2)
expr1
expr2)
18. if-let
Комбинация let и if с проверкой на nil/false:
(def France {:capital "Paris"})
(if-let [capital (:capital France)]
(println "Capital is " capital)
(println "Capital is empty"))
19. cond
Является альтернативой для else-if цепочек:
(defn foo [n]
(cond
(> n 0) "positive"
(< n 0) "negative"
:else "zero"))
22. Function application
Есть более длинная форма для вызова
функции, ее можно использовать, например,
в макросах:
(apply + [1 2 3])
23. Namespaces
Каждый символ определен в каком-то
namespace, его можно задать с помощью
вызова ns:
(ns mylib.core)
24. :requre
С помощью этого ключа можно добавить в
namespace элементы из других namespaces:
(ns foo
(:require
clojure.test
[clojure.string :as str]))
25. :use
Это сочетание :require и :refer. Использовать
следует с осторожностью, как пример:
(ns foo
(:use clojure.string))
WARNING: replace already refers to: #'clojure.core/replace in namespace: foo, being replaced by: #'clojure.string/replace
WARNING: reverse already refers to: #'clojure.core/reverse in namespace: foo, being replaced by: #'clojure.string/reverse
26. :only
Для того, чтобы избежать подобных
проблем, можно использовать ключ :only
(ns foo (:use
[clojure.string :only [join]]))
27. :import
С помощью этого ключа можно добавлять
классы из Java:
(ns some.foo.space
"This is namespace doc"
(:import (java.util Date
GregorianCalendar)))
32. Maps
Также уже ранее обсуждали:
{:id 55
:name "Clojure"
:is-dynamic true}
33. Immutability
Все структуры данных в Clojure
неизменяемы.
Чаще всего, вновь создаваемые, структуры
данных используют предыдущие версии, но
все равно это может быть медленно.
34. Transient
Для performance critical single-threaded
кусков кода, можно написать все быстрее:
(defn vrange [n]
(loop [i 0 v (transient [])]
(if (< i n)
(recur (inc i) (conj! v i))
(persistent! v))))
36. get
Для векторов достает элемент по индексу.
Для Maps достает элемент по ключу.
(get [1 2 3] 1) ;2
(get {:one 1} :one) ;1
get-in принимает вектор, и выполняет
последовательно get
(get-in [1 [1 2] 3] [1 1]) ;2
37. assoc
Для векторов добавляет новый элемент по
индексу (возвращает новый вектор).
Для Maps добавляет новую пару key/value
(assoc [] 0 1) ;[1]
(assoc {} :key :value)
;{:key :value}
39. keys/vals
Для Maps мы можем вытащить keys и values:
(keys {:a :b :c :d}); (:a :c)
(vals {:a :b :c :d}); (:b :d)
40. merge
Также можно объединять несколько Maps,
перекрывая значения слева направо
(merge {:a :x :c :x}
{:a :b}
{:a :c :e :f})
; {:a :c :c :x :e :f}
41. merge-with
Если мы хотим перекрывать справа налево,
то это тоже возможно:
(merge-with (fn [a b] a)
{:a :x :c :x}
{:a :b}
{:a :c :e :f})
; {:a :x :c :x :e :f}
57. map
Для преобразования всех элементов
коллекции можно использовать обычную
функцию map:
(defn fun [i] (+ 1 i))
(map fun [1 2 3])
58. mapcat
Аналогично flatMap в Scala, в Clojure есть
mapcat.
(defn fun[i] (repeat i i))
(mapcat fun [1 2 3])
Получится (1 2 2 3 3 3)
59. filter and remove
Две по сути одинаковые функции, только
отличаются условием предиката
(filter even? (1 2 3 4))
;(2 4)
(remove even? (1 2 3 4))
;(1 3)
60. reduce
Это тоже самое, что и foldLeft. Есть вариант,
где первый элемент становится начальным
значением или что-то другое:
(reduce + [1 2 3]) ;6
(reduce cons '() [1 2 3])
; (3 2 1)
61. reductions
Это reduce, который сохраняет все
промежуточные значения
(reductions + [1 2 3])
; (1 3 6)
63. Simple recursion
Просто можно вызвать функцию из тела:
(defn sum
[[head & tail]]
(if (nil? head) 0
(+ head (sum tail)))
64. mutual recursion
Иногда нужно, чтобы две функции умели
друг друга вызывать, на помощь приходит
declare для второй функции.
(declare fun-2)
(defn fun-1 [i]
(if (< i 3) i (fun-2 (- i 1))))
(defn fun-2 [i]
(if (< i 2) i (fun-1 (- i 2))))
65. tail recursion
Но если мы вызовем
(sum (range 10000))
то получим StackOverflowError...
67. loop/recur
Альтернативой может быть loop/recur:
(defn sum [coll]
(loop [[head & tail] coll
acc 0]
(if (nil? head) acc
(recur tail (+ acc head)))))
68. Homework
1. Напишите функцию call-twice, которая берет на вход функцию и
параметр, и вызывает эту функцию два раза (не composition).
2. Напишите функцию, которая читает из файла (используйте slurp), затем
выводит текст консоль, и возвращает этот текст.
3. Напишите def cube-anonymous, в который присвоена функция, которая
возводит число в куб.
4. Напишите функцию, которая на вход принимает два seq, и возвращает
объединенные развернутые последовательности (concat + reverse)
5. Напишите функцию, которая возвращает, есть ли элемент в seq
(contains? не подходит, так как проверяет наличие индекса)
6. Напишите функцию, которая по двум последовательностям выводит все
различных элементов пары в консоль (сравнение это = или not=)
7. Напишите функцию, которая возвращает seq повторений элемента elem
n раз.