Guava - open-source библиотека, разработанная в основном инженерами компании Google, в которой есть множество полезных утилит для написания эффективного и красивого кода. В Guava решено множество типичных задач, которые часто возникают при работе с примитивами, строками, коллекциями, параллельными вычислениями, кэшированием данных и многим другим. В докладе поговорим о возможностях, которые предоставляет Guava, рассмотрим примеры использования утилит библиотеки.
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
В своем докладе Олег расскажет о замене стандартных функций на более быстрые и об ускорении работы python. Также продемонстрирует несколько примеров быстрых конструкций python.
Guava - open-source библиотека, разработанная в основном инженерами компании Google, в которой есть множество полезных утилит для написания эффективного и красивого кода. В Guava решено множество типичных задач, которые часто возникают при работе с примитивами, строками, коллекциями, параллельными вычислениями, кэшированием данных и многим другим. В докладе поговорим о возможностях, которые предоставляет Guava, рассмотрим примеры использования утилит библиотеки.
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
В своем докладе Олег расскажет о замене стандартных функций на более быстрые и об ускорении работы python. Также продемонстрирует несколько примеров быстрых конструкций python.
Докладчик:
Александр Сапронов
Описание:
Мы рассмотрим популярные библиотеки для функционального программирования на Python — fn.py, functools, itertools, funcy, hask, Toolz. Узнаем возможности каждой из библиотеки, а также как в динамическом язык имитировать мощную систему типов. Затронем характеристики функционального программирования и проверим помогают ли библиотеки выполнить.
Пользователи ожидают обновление данных в реальном времени. Твиты должны появляться без задержек. Заказы должны быть подтверждены и обработаны мгновенно. Приложения должны быть отзывчивыми. Мы, как разработчики, не хотим блокировать потоки в ожидании результатов. Мы хотим чтобы результаты были переданы нам как только будут готовы. Более того - при работе с коллекциями данных каждый отдельный объект должен быть передан сразу как будет готов. У нас есть инструменты для создания уведомлений, это легко. Нам нужны удобные инструменты для реакции на оповещения.
Из доклада вы узнаете как создавать удобные, отзывчивые и тестируемые приложения при помощи Reactive Extensions, как многократно сократить код обработки событий, а также как совместить существующий код на основе событий с данным фреймворком
Доклад о дизайне кода в функциональном стиле на C++, представленный вниманию плюсовиков на C++ User Group Novosibirsk 2014.
В качестве демонстрационного проекта была реализована игра "Амбер" по мотивам "Хроник Амбера" Р. Желязны.
https://github.com/graninas/Amber
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Ontico
Многие современные высоконагруженные системы построены с использованием очередей. Не является исключением и внутренний сервис обработки OAuth токенов, который создала наша команда. Исключением является то, что и в качестве основного хранилища, и в качестве всех очередей используется один и тот же продукт - Tarantool. Более того, мы поставили себе амбициозную цель по отказоустойчивости - полную доступность сервиса, когда уходят любые два из трёх датацентров, и успешно её достигли.
При решении мы столкнулись с массой интересных инженерных задач и в нашем докладе мы расскажем вам о том, какие технологии и подходы использовались. В частности, рассмотрим более детально такие вещи, как:
- создание deadline очереди и проблемы, с ней связанные;
- создание кольцевой очереди;
- интеграция между собой шардинга, Raft и очередей;
- как мы победили split brain ;)
Правильная организация клиент-карточного взаимодействия — Антон КорзуновYandex
Как говорил один человек, нет данных — нет проблемы. Но проблема в том, что в современном мире данные есть, и их много . Ещё в современном мире очень любят данные отображать, например, на карте — только это не всегда хорошо получается.
Из доклада вы узнаете о типичных ошибках передачи данных на карту и простых способах этих ошибок избежать.
Многие разработчики не представляют, как дорого обходятся ошибки в программах. Причем я имею в виду не падения ракет и прочие катастрофы, а обыкновенное прикладное программное обеспечение. Хочется показать всю важность нахождения ошибок на самых ранних этапах. Одним из способов выявить ошибку как можно раньше является статический анализ кода. Поговорим мы не только об этом, но и о различных приемах при написании кода, которые позволят избежать множество типовых ошибок.
Докладчик:
Александр Сапронов
Описание:
Мы рассмотрим популярные библиотеки для функционального программирования на Python — fn.py, functools, itertools, funcy, hask, Toolz. Узнаем возможности каждой из библиотеки, а также как в динамическом язык имитировать мощную систему типов. Затронем характеристики функционального программирования и проверим помогают ли библиотеки выполнить.
Пользователи ожидают обновление данных в реальном времени. Твиты должны появляться без задержек. Заказы должны быть подтверждены и обработаны мгновенно. Приложения должны быть отзывчивыми. Мы, как разработчики, не хотим блокировать потоки в ожидании результатов. Мы хотим чтобы результаты были переданы нам как только будут готовы. Более того - при работе с коллекциями данных каждый отдельный объект должен быть передан сразу как будет готов. У нас есть инструменты для создания уведомлений, это легко. Нам нужны удобные инструменты для реакции на оповещения.
Из доклада вы узнаете как создавать удобные, отзывчивые и тестируемые приложения при помощи Reactive Extensions, как многократно сократить код обработки событий, а также как совместить существующий код на основе событий с данным фреймворком
Доклад о дизайне кода в функциональном стиле на C++, представленный вниманию плюсовиков на C++ User Group Novosibirsk 2014.
В качестве демонстрационного проекта была реализована игра "Амбер" по мотивам "Хроник Амбера" Р. Желязны.
https://github.com/graninas/Amber
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Ontico
Многие современные высоконагруженные системы построены с использованием очередей. Не является исключением и внутренний сервис обработки OAuth токенов, который создала наша команда. Исключением является то, что и в качестве основного хранилища, и в качестве всех очередей используется один и тот же продукт - Tarantool. Более того, мы поставили себе амбициозную цель по отказоустойчивости - полную доступность сервиса, когда уходят любые два из трёх датацентров, и успешно её достигли.
При решении мы столкнулись с массой интересных инженерных задач и в нашем докладе мы расскажем вам о том, какие технологии и подходы использовались. В частности, рассмотрим более детально такие вещи, как:
- создание deadline очереди и проблемы, с ней связанные;
- создание кольцевой очереди;
- интеграция между собой шардинга, Raft и очередей;
- как мы победили split brain ;)
Правильная организация клиент-карточного взаимодействия — Антон КорзуновYandex
Как говорил один человек, нет данных — нет проблемы. Но проблема в том, что в современном мире данные есть, и их много . Ещё в современном мире очень любят данные отображать, например, на карте — только это не всегда хорошо получается.
Из доклада вы узнаете о типичных ошибках передачи данных на карту и простых способах этих ошибок избежать.
Многие разработчики не представляют, как дорого обходятся ошибки в программах. Причем я имею в виду не падения ракет и прочие катастрофы, а обыкновенное прикладное программное обеспечение. Хочется показать всю важность нахождения ошибок на самых ранних этапах. Одним из способов выявить ошибку как можно раньше является статический анализ кода. Поговорим мы не только об этом, но и о различных приемах при написании кода, которые позволят избежать множество типовых ошибок.
Экстремальная оптимизация производительности на примере MongoDB Java DriverVitebsk DSC
При работе с базами данных мы часто сталкиваемся с тем, что ORM фреймворки, принося нам удобство и гибкость, требуют непомерную плату – серьезное падение производительности. Казалось бы, чтобы решить эту проблему, достаточно просто отказаться от ORM и использовать низкоуровневый API. Но иногда и этого бывает недостаточно…
Презентация подготовлена по материалам выступления Евгения Берлога на витебской конференции “Developer's Software Conference” (31.10.2015). Запись выступления: https://events.epam.com/events/dsc2015/talks/104.
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...Andrey Karpov
Как учит печальный опыт множества инцидентов, требования к качеству программного кода встраиваемых систем намного выше, чем для классического программного обеспечения (игры, офисные пакеты, графические редакторы и т.д.). Поговорим о стандартах кодирования, таких как MISRA, SEI CERT, и инструментах статического анализа кода. Статические анализаторы решают две смежные, но всё-таки разные задачи: поиск ошибок и поиск запахов кода. Оба эти направления важны и должны использоваться. Однако часто эти два направления смешивают, что приводят к недоразумениям и отторжению методологии статического анализа кода. Попробуем расставить точки над i.
Rambler.iOS #9: Анализируй это! (Сергей Крапивенский).
Доклад посвящён наиболее популярным статическим анализаторам кода для iOS: как ими пользоваться, какие проблемы они решают, как внедрить их в привычный цикл разработки, как писать для них свои правила. Также рассмотрен опыт интеграции статического анализа и CI.
Rambler.iOS - митапы iOS-разработчиков, организуемые компанией RAMBLER&Co.
"Formal verification of C code" Efremov D.V.
The talk covers the issue of developing correct software applying one of the types of static code analysis. The speaker will also address the matters of using such methods, their weaknesses and limitations, as well as the results they can guarantee.
PHDays VII, PDUG section, Moscow, May 24 2017.
"Формальная верификация кода на языке Си" Ефремов Д.В.
Доклад посвящен разработке корректного программного обеспечения с применением одного из видов статического анализа кода. Будут освещены вопросы применения подобных методов, их слабые стороны и ограничения, а также рассмотрены результаты, которые они могут дать. На конкретных примерах будет продемонстрировано, как выглядят разработка спецификаций для кода на языке Си и доказательство соответствия кода спецификациям.
Доклад представлен на конференции PHDays VII (2017) 24 мая в секции PDUG.
Доклад посвящен разработке корректного программного обеспечения с применением одного из видов статического анализа кода. Будут освещены вопросы применения подобных методов, их слабые стороны и ограничения, а также рассмотрены результаты, которые они могут дать. На конкретных примерах будет продемонстрировано, как выглядят разработка спецификаций для кода на языке Си и доказательство соответствия кода спецификациям.
Есть такая штука как инструментирование кода. Мало кто знает о ней, даже пользуясь результатами ее применения. Между тем, с инструментированием можно делать много всего интересного и, главное, полезного. Например, это может вам помочь лучше понять код или сделать процесс разработки более эффективным. Примеры инструментирования кода и принципы его работы.
Многим читателя понравилась моя статья "Последствия использования технологии Copy-Paste при программировании на Си++ и как с этим быть" [1]. Обратил на неё внимание и Scott Meyers [2] и задал вопрос о том, как же собственно статический анализ помог выявить описанные в статье ошибки.
9. Stream из потоков и файлов
Files.lines("/usr/local/java/tutorial.txt")
;
Reader reader = ...;
new BufferedReader(reader).lines();
new JarFile("pokmeonOG.jar").stream();
28. public class User implements Comparable {
private long id, count;
...
public boolean equals(Object o) {
if (this == o) return true;
else if (!(o instanceof User)) return false;
else return id == ((User) o).id;
}
public int compareTo(Object o) {
long count2 = ((User) o).getCount();
if (count > count2) return 1;
else if (count == count2) return 0;
else return -1
}
}
52. Миф №1: “Stream API только для коллекций”
Миф №2: “Stream быстрее цикла”
Миф №3: “Оптимизировать код можно добавлением .parallel()”
Миф №4: “Класс источника стрима прямо не влияет на скорость”
Миф №5: “Параллельный стрим выполняет лишние операции”
Итог
53. Миф №1: “Stream API только для коллекций”
Миф №2: “Stream быстрее цикла”
Миф №3: “Оптимизировать код можно добавлением .parallel()”
Миф №4: “Класс источника стрима прямо не влияет на скорость”
Миф №5: “Параллельный стрим выполняет лишние операции”
Итог
54. Миф №1: “Stream API только для коллекций”
Миф №2: “Stream быстрее цикла”
Миф №3: “Оптимизировать код можно добавлением .parallel()”
Миф №4: “Класс источника стрима прямо не влияет на скорость”
Миф №5: “Параллельный стрим выполняет лишние операции”
Итог
55. Миф №1: “Stream API только для коллекций”
Миф №2: “Stream быстрее цикла”
Миф №3: “Оптимизировать код можно добавлением .parallel()”
Миф №4: “Класс источника стрима прямо не влияет на скорость”
Миф №5: “Параллельный стрим выполняет лишние операции”
Итог
56. Миф №1: “Stream API только для коллекций”
Миф №2: “Stream быстрее цикла”
Миф №3: “Оптимизировать код можно добавлением .parallel()”
Миф №4: “Класс источника стрима прямо не влияет на скорость”
Миф №5: “Параллельный стрим выполняет лишние операции”
Итог
57. Миф №1: “Stream API только для коллекций”
Миф №2: “Stream быстрее цикла”
Миф №3: “Оптимизировать код можно добавлением .parallel()”
Миф №4: “Класс источника стрима прямо не влияет на скорость”
Миф №5: “Параллельный стрим выполняет лишние операции”
Итог