My talk is about DSLs, their kinds and when it’s worth to be using them. I’ll also demonstrate different approaches to developing internal and external DSLs in Python and will try to give the comparative analysis of those.
Из презентации вы узнаете:
— как работает database/sql;
— интерфейс и реализации database/sql/driver;
— обзор популярных ORM и что с ними не так;
— как мы делали свой лучший ORM;
— и почему столько раз его переделывали.
My talk is about DSLs, their kinds and when it’s worth to be using them. I’ll also demonstrate different approaches to developing internal and external DSLs in Python and will try to give the comparative analysis of those.
Из презентации вы узнаете:
— как работает database/sql;
— интерфейс и реализации database/sql/driver;
— обзор популярных ORM и что с ними не так;
— как мы делали свой лучший ORM;
— и почему столько раз его переделывали.
Александр Сомов "C++: препроцессор, компилятор, компоновщик"Yandex
Из этого доклада вы узнаете, как разбирать различные ошибки сборки C++, как их исправлять и что для этого нужно знать.
Речь пойдет о стадиях сборки программы на C++ и о том, как устроены объектные файлы (на примере формата ELF), о работе компилятора и компоновщика, а также особенностях, связанных со спецификой языка. В заключительной части доклада будут разобраны принципы работы препроцессора C++ и способы его отладки.
Стандартная библиотека C++ крайне гибка и позволяет решать множество задач. Однако мало кто знает о некоторых её возможностях, из-за чего порой вместо написания нескольких строчек кода люди неделями пишут своё решение или переизобретают готовые алгоритмы. В докладе вас ждёт рассказ о полезных "фишках" стандартной библиотеки на которые почему-то мало кто обращает внимание.
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
Практика показывает, что использование подхода, основанного на колбеках для асинхронного программирования обычно не является удобным и подвержено различным ошибкам. Для упрощения написания и поддержки сложных асинхронных программ можно использовать несколько иной подход: использовать сопрограммы для переключения контекста на время ожидания события. Такой подход позволяет реализовать интересные неблокирующие примитивы, включая неблокирующее сетевое взаимодействие, неблокирующие мьютексы, а также удобное переключение между различными пулами потоков для разнесения выполнения задач, которые требуют различные ресурсы.
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/LinuxDefconRussia
Руткиты в мире основанных на ядре Linux операционных систем уже не являются редкостью. Рассказ будет о том, как попытки в современных реалиях определить то, скомпрометирована ли система, привели к неожиданному результату.
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияPlatonov Sergey
В этом докладе Дмитрий кратко рассказывает о таком звере, как LLVM, о котором много кто слышал, но немногие щупали.
Что такое компилятор на самом деле? Как происходит компиляция программы, как работают оптимизации и, наконец, откуда берется неопределенное поведение в детерменированных программах на C++?
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Yandex
Ужасы локализации и как с ними бороться на пошаговом примере: от «Эврика, нам нужно перевести проект на язык Х!» до «Как не прострелить себе ногу, когда у вас есть Xcode, разработчики, переводчики и дедлайн». Рассматриваются все базовые инструменты локализации (genstrings, ibtool) в целях понимания, как их использовать с наименьшими телодвижениями. Отдельно рассказывается про то, как мы подружили весь этот «зоопарк» в Яндексе и чем готовы поделиться.
ЛЕКЦИЯ 4. Стандарт POSIX Threads. Реентерабельность функций. Обработка сигналов. Локальные данные потоков. Принудительное завершение потоков. Шаблоны программирования с использованием потоков
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
Александр Сомов "C++: препроцессор, компилятор, компоновщик"Yandex
Из этого доклада вы узнаете, как разбирать различные ошибки сборки C++, как их исправлять и что для этого нужно знать.
Речь пойдет о стадиях сборки программы на C++ и о том, как устроены объектные файлы (на примере формата ELF), о работе компилятора и компоновщика, а также особенностях, связанных со спецификой языка. В заключительной части доклада будут разобраны принципы работы препроцессора C++ и способы его отладки.
Стандартная библиотека C++ крайне гибка и позволяет решать множество задач. Однако мало кто знает о некоторых её возможностях, из-за чего порой вместо написания нескольких строчек кода люди неделями пишут своё решение или переизобретают готовые алгоритмы. В докладе вас ждёт рассказ о полезных "фишках" стандартной библиотеки на которые почему-то мало кто обращает внимание.
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
Практика показывает, что использование подхода, основанного на колбеках для асинхронного программирования обычно не является удобным и подвержено различным ошибкам. Для упрощения написания и поддержки сложных асинхронных программ можно использовать несколько иной подход: использовать сопрограммы для переключения контекста на время ожидания события. Такой подход позволяет реализовать интересные неблокирующие примитивы, включая неблокирующее сетевое взаимодействие, неблокирующие мьютексы, а также удобное переключение между различными пулами потоков для разнесения выполнения задач, которые требуют различные ресурсы.
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/LinuxDefconRussia
Руткиты в мире основанных на ядре Linux операционных систем уже не являются редкостью. Рассказ будет о том, как попытки в современных реалиях определить то, скомпрометирована ли система, привели к неожиданному результату.
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияPlatonov Sergey
В этом докладе Дмитрий кратко рассказывает о таком звере, как LLVM, о котором много кто слышал, но немногие щупали.
Что такое компилятор на самом деле? Как происходит компиляция программы, как работают оптимизации и, наконец, откуда берется неопределенное поведение в детерменированных программах на C++?
Андрей Субботин "Локализация приложений для iOS: как не прострелить себе ногу"Yandex
Ужасы локализации и как с ними бороться на пошаговом примере: от «Эврика, нам нужно перевести проект на язык Х!» до «Как не прострелить себе ногу, когда у вас есть Xcode, разработчики, переводчики и дедлайн». Рассматриваются все базовые инструменты локализации (genstrings, ibtool) в целях понимания, как их использовать с наименьшими телодвижениями. Отдельно рассказывается про то, как мы подружили весь этот «зоопарк» в Яндексе и чем готовы поделиться.
ЛЕКЦИЯ 4. Стандарт POSIX Threads. Реентерабельность функций. Обработка сигналов. Локальные данные потоков. Принудительное завершение потоков. Шаблоны программирования с использованием потоков
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
ЛЕКЦИЯ 5. Многопоточное программирование в языке С++. Работа с потоками. Защита данных. Синхронизация. Будущие результаты
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
ЛЕКЦИЯ 3. Реентерабельность. Сигналы. Локальные данные потоков. Принудительное завершение потоков
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в TarantoolTimur Safin
Презентация для выступления на Владивостокском митапе https://moscowdjango.timepad.ru/event/1884275/
"Основной режим разработки приложений в Тарантуле — это написание скриптов и манипуляции данными на Lua (оставим пока за скобками режим SQL). Часто внедрению Тарантула в некую систему становится блокером использование Lua.
В экосистеме Lua мало тулинга, это касается как встроенного интерпретатора, так и JIT-транслятора LuaJIT.
Давайте оглядимся, как обстоят дела с тестированием, профилированием, статическим анализом и дебагом в Lua. И как это все может быть использовано при разработке сервисов, в архитектуре которых есть Tarantool."
В своей работе мы постоянно используем инструменты, призванные облегчить нам жизнь. Но как хорошо мы ими на самом деле владеем? И почему мы пренебрегаем их суперсилами? Например, Chrome DevTools — это не только отладчик и инспектор HTML. Но когда у нас в руках молоток, кругом мерещатся гвозди. Десятки мегабайт и процентов загрузки процессора на вкладку браузера — верный признак того, что пора учиться пользоваться микроскопом.
Роман предложит освоить что-то посложнее молотка и расскажет о том, какую реальную пользу можно получить от профилирования, как найти в огромном отчёте проблему с кодом и что лучше — написать в коде десяток console.log или async debug.
3. $ man hello HELLO(1) User Commands HELLO(1) NAME hello - friendly greeting program SYNOPSIS hello [OPTION]... DESCRIPTION Print a friendly, customizable greeting. -h, --help display this help and exit -v, --version display version information and exit -t, --traditional use traditional greeting format -n, --next-generation use next-generation greeting format -g, --greeting=TEXT use TEXT as the greeting message
10. $ gcc -o hello hello.c main.c -Wall main.c: In function ‘main’: main.c:1:1: warning: implicit declaration of function ‘print_hello’ main.c:1:1: warning: control reaches end of non-void function $ nm hello.o 00000000 T print_hello U puts $ ldd hello linux-vdso.so.1 => (0x00110000) libc.so.6 => /lib/libc.so.6 (0x00a57000) /lib/ld-linux.so.2 (0x00a38000)
14. void openlog(char *ident, int option, int facility); void syslog(int priority, char *format, …); void closelog();
15. #include <syslog.h> int main() { int i; openlog("test", LOG_PID, LOG_USER); syslog(LOG_DEBUG,"try to sending 5 messages"); for (i = 0; i < 5; ++i) syslog(LOG_INFO,"info message [i = %i]",i); closelog(); };
16. $ tail /var/log/debug Dec 20 11:25:04 linux test[6222]: try to sending 5 messages $ tail /var/log/messages Dec 20 11:25:04 linux test[6222]: info message [i = 0] Dec 20 11:25:04 linux test[6222]: info message [i = 1] Dec 20 11:25:04 linux test[6222]: info message [i = 2] Dec 20 11:25:04 linux test[6222]: info message [i = 3] Dec 20 11:25:04 linux test[6222]: info message [i = 4]
26. USER - имя текущего пользователя HOME - путь к домашнему каталогу текущего пользователя PATH - список каталогов, разделенных двоеточиями, в которых производится "поиск" программ PWD - текущий каталог OLDPWD - предыдущий текущий каталог SHELL - текущая командная оболочка HOSTNAME - имя машины QTDIR - расположение библиотеки QT LD_LIBRARY_PATH - место "поиска" дополнительных библиотек LANG - язык и кодировка пользователя DISPLAY - текущий дисплей в X11
27. extern char ** environ; //declared in unistd.h char *getenv(char const *name); int setenv(char const *name, char const *value, int overwrite); int unsetenv(char const *name);