Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
Занимаясь разработкой интерфейсов, мы постоянно разбираемся как и что устроено. Вы задумывались, сколько времени у вас уходит на то, чтобы найти нужный фрагмент кода, который отвечает за компонент на странице? В своем докладе я покажу как это можно сделать за один клик, а так же раскрою технические детали.
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
Зачастую, знакомство с алиасингом в C++ у многих программистов начинается и заканчивается одинаково: -fno-strict-aliasing. На вопросы новичка, более опытные коллеги отвечают в стиле: «не трогай! а то все сломаешь!». Новичок и не трогает. В докладе будет предпринята попытка заглянуть под капот и понять, что же там, внутри. Что такое алиасинг, где он может быть полезен и какие реальные преимущества дает. Тема будет рассмотрена и со стороны программиста и со стороны разработчика компилятора. А по сему, вопрос «зачем?» будет центральным в повествовании.
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)Ontico
TypeScript – светлое будущее ES6 уже вчера.
Почему не "Кофе"? Чай полезней.
Что не так с Flow от Facebook?
Реальная практика использования: плюсы и минусы.
Не VisualStudio единым. Особенности работы в других IDE.
Интеграция с уже существующим JS кодом.
Использование совместно с RequireJS. Подводные камни.
Использование TypeScript совместно с React.
TypeScript и Angular.
Плюшки, которых нет в ES6/7 (пока нет): [static] enum, интерфейсы, private, protected, декораторы... Что дают и зачем?
Пользователь точно оценит! Повышение производительности мобильных приложений ...Ontico
Расскажем о методиках создания производительных приложений, опираясь на собственный многолетний опыт проб и ошибок:
• использование инструментов отладки (работа с Hierarchy Viewer; поиск и устранение overdraw; профилирование методов; поиск утечек памяти);
• написание производительного кода;
• создание верстки, повышающей скорость работы приложений;
• создание требований к дизайну интерфейсов и API с оглядкой на производительность;
• использование аналитики для логирования и отладки багов.
Android-приложения Superjob:
• 3 приложения в Google Play для B2C и B2B-аудиторий;
• более 1 млн. пользователей;
• в числе лучших российских приложений по мнению Google Play.
В рамках данного выступления вас ждут:
* рассказ о полезных и интересных вещах из Boost
* новости с передовиц разработки Boost и о новинках ожидаемых в следующих версиях
* что из Boost готовится к переезду в новый стандарт С++
* как экспериментировать с Boost, имея под рукой только браузер
* что людям не нравится в Boost и как с этими людьми бороться (-:
Михаил Рахманов рассказывает о паттерне Promise и его использовании в iOS разработке.
Краткие тезисы:
- Что такое promises?
- Использование promises в iOS разработке (существующие библиотеки и подходы)
- Реализация promises библиотекой PromiseKit (основные методы, цепочки promises, обработка ошибок)
- Какие задачи можно решить с помощью promises, а какие - нельзя
- Использование promises на примере приложения: драм-машины с возможностью сохранять аудио-дорожки
- Подведение итогов: преимущества и недостатки.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Сенцов Сергей "Приемы оптимизаций Desktop приложений"Yulia Tsisyk
В докладе будут рассмотрены приемы оптимизации приложений на платформе .NET, в большей степени специфичные для desktop приложений. Тем не менее, представителям других направлений тоже будет что почерпнуть.
Для достижения максимальной скорости запуска приложения или поднятия из swap'а иногда приходится обращаться к нестандартным подходам, которые, на первый взгляд, могут идти наперекор общепринятой практике (например, отказ от emit в пользу reflection). Каждая из оптимизаций, начиная от устройства CLR, заканчивается анализом в xperf отдельных IO операций, будет подобно разобрана. В качестве результатов будут представлены показатели реальных продуктов.
Moscow .Net Meetup #4·14 ноября 2016
* Почему Angular 2 такой быстрый и как его ускорить еще сильнее?
* Как работает Change Detection механизм и как им управлять?
* Зачем нам Zone.js и Функциональное Реактивное Программирование?
* Как работать с Redux и Mobx в Angular 2 и что можно от этого выиграть?
Об этом и ряде других вещей вы узнаете из этого доклада.
Java agents are pluggable self contained components that run embedded in a JVM and intercept the classloading process. They were introduced in Java 5 along with the powerful java.lang.instrument package. Java agents can be loaded statically at startup or dynamically (programmatically) at runtime to attach to a running process.
Java agents were an awesome addition to the JVM as it opened a lot of opportunities for tool designers and changed Java tooling landscape quite drastically. In conjunction with Java bytecode manipulation libraries it is now possible to do amazing things to Java classes: we can experiment with programming models, redefine classes at runtime, record execution flow, etc.
I’d like to give an overview of Java agents’ functionality along with the usage examples and real world experiences. You will learn, how to implement an agent and apply Instrumentation API in combination with bytecode manipulation libraries to solve interesting tasks.
Занимаясь разработкой интерфейсов, мы постоянно разбираемся как и что устроено. Вы задумывались, сколько времени у вас уходит на то, чтобы найти нужный фрагмент кода, который отвечает за компонент на странице? В своем докладе я покажу как это можно сделать за один клик, а так же раскрою технические детали.
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
Зачастую, знакомство с алиасингом в C++ у многих программистов начинается и заканчивается одинаково: -fno-strict-aliasing. На вопросы новичка, более опытные коллеги отвечают в стиле: «не трогай! а то все сломаешь!». Новичок и не трогает. В докладе будет предпринята попытка заглянуть под капот и понять, что же там, внутри. Что такое алиасинг, где он может быть полезен и какие реальные преимущества дает. Тема будет рассмотрена и со стороны программиста и со стороны разработчика компилятора. А по сему, вопрос «зачем?» будет центральным в повествовании.
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)Ontico
TypeScript – светлое будущее ES6 уже вчера.
Почему не "Кофе"? Чай полезней.
Что не так с Flow от Facebook?
Реальная практика использования: плюсы и минусы.
Не VisualStudio единым. Особенности работы в других IDE.
Интеграция с уже существующим JS кодом.
Использование совместно с RequireJS. Подводные камни.
Использование TypeScript совместно с React.
TypeScript и Angular.
Плюшки, которых нет в ES6/7 (пока нет): [static] enum, интерфейсы, private, protected, декораторы... Что дают и зачем?
Пользователь точно оценит! Повышение производительности мобильных приложений ...Ontico
Расскажем о методиках создания производительных приложений, опираясь на собственный многолетний опыт проб и ошибок:
• использование инструментов отладки (работа с Hierarchy Viewer; поиск и устранение overdraw; профилирование методов; поиск утечек памяти);
• написание производительного кода;
• создание верстки, повышающей скорость работы приложений;
• создание требований к дизайну интерфейсов и API с оглядкой на производительность;
• использование аналитики для логирования и отладки багов.
Android-приложения Superjob:
• 3 приложения в Google Play для B2C и B2B-аудиторий;
• более 1 млн. пользователей;
• в числе лучших российских приложений по мнению Google Play.
В рамках данного выступления вас ждут:
* рассказ о полезных и интересных вещах из Boost
* новости с передовиц разработки Boost и о новинках ожидаемых в следующих версиях
* что из Boost готовится к переезду в новый стандарт С++
* как экспериментировать с Boost, имея под рукой только браузер
* что людям не нравится в Boost и как с этими людьми бороться (-:
Михаил Рахманов рассказывает о паттерне Promise и его использовании в iOS разработке.
Краткие тезисы:
- Что такое promises?
- Использование promises в iOS разработке (существующие библиотеки и подходы)
- Реализация promises библиотекой PromiseKit (основные методы, цепочки promises, обработка ошибок)
- Какие задачи можно решить с помощью promises, а какие - нельзя
- Использование promises на примере приложения: драм-машины с возможностью сохранять аудио-дорожки
- Подведение итогов: преимущества и недостатки.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Сенцов Сергей "Приемы оптимизаций Desktop приложений"Yulia Tsisyk
В докладе будут рассмотрены приемы оптимизации приложений на платформе .NET, в большей степени специфичные для desktop приложений. Тем не менее, представителям других направлений тоже будет что почерпнуть.
Для достижения максимальной скорости запуска приложения или поднятия из swap'а иногда приходится обращаться к нестандартным подходам, которые, на первый взгляд, могут идти наперекор общепринятой практике (например, отказ от emit в пользу reflection). Каждая из оптимизаций, начиная от устройства CLR, заканчивается анализом в xperf отдельных IO операций, будет подобно разобрана. В качестве результатов будут представлены показатели реальных продуктов.
Moscow .Net Meetup #4·14 ноября 2016
* Почему Angular 2 такой быстрый и как его ускорить еще сильнее?
* Как работает Change Detection механизм и как им управлять?
* Зачем нам Zone.js и Функциональное Реактивное Программирование?
* Как работать с Redux и Mobx в Angular 2 и что можно от этого выиграть?
Об этом и ряде других вещей вы узнаете из этого доклада.
Java agents are pluggable self contained components that run embedded in a JVM and intercept the classloading process. They were introduced in Java 5 along with the powerful java.lang.instrument package. Java agents can be loaded statically at startup or dynamically (programmatically) at runtime to attach to a running process.
Java agents were an awesome addition to the JVM as it opened a lot of opportunities for tool designers and changed Java tooling landscape quite drastically. In conjunction with Java bytecode manipulation libraries it is now possible to do amazing things to Java classes: we can experiment with programming models, redefine classes at runtime, record execution flow, etc.
I’d like to give an overview of Java agents’ functionality along with the usage examples and real world experiences. You will learn, how to implement an agent and apply Instrumentation API in combination with bytecode manipulation libraries to solve interesting tasks.
Riga Dev Day 2016 - Having fun with JavassistAnton Arhipov
The document discusses using Javassist, an open-source bytecode engineering library, for bytecode instrumentation and generation of Java proxies. It provides examples of using Javassist's ClassPool and CtClass APIs to dynamically generate and modify classes, such as adding a print statement before a method or generating a class from metadata. The key uses of Javassist mentioned are generating proxies, bytecode instrumentation, and dynamic class generation.
JavaOne 2015 - Having fun with JavassistAnton Arhipov
The document provides examples of using Javassist, an open-source bytecode engineering library, to dynamically generate, instrument, reflect and modify Java bytecode. It demonstrates how to use Javassist to generate proxy classes, insert logging before methods, and modify existing classes at runtime without recompilation. Key classes and methods discussed include ClassPool, CtClass, CtMethod and insertBefore.
Con-FESS 2015 - Having Fun With JavassistAnton Arhipov
This document discusses using Javassist, a bytecode manipulation library, for tasks like adding logging to existing code without modifying the source code. It provides examples of using Javassist to inject logging into a method and creating a Java agent to manipulate bytecode. The document also summarizes how Javassist works under the hood to modify class files and how frameworks like JRebel use it to reload configurations without restarts.
This document provides a summary of the history and features of the Groovy programming language. It discusses how Groovy evolved from earlier dynamic scripting languages for Java like BeanShell and Rhino. Key points include:
- Groovy was created in 2003 by James Strachan as a new dynamic language for the Java platform.
- Groovy adds dynamic and static typing, closures, builders, metaprogramming and other features to make Java development more productive.
- Groovy scripts can omit elements like semicolons and parentheses and do not require defining a class or main method. This makes Groovy code more concise and readable.
This document provides an overview of the Go programming language including:
- A brief history of Go from its origins at Google in 2007 to current widespread usage.
- Key features of Go like functions, structs, interfaces, methods, slices, pointers, go-routines and channels.
- Examples of basic Go code demonstrating functions, structs, methods, interfaces, concurrency with go-routines and channels.
- Discussion of things missing from Go like classes, generics and exceptions.
- Quotes from developers commenting both positively and negatively on Go's simplicity and tradeoffs.
- Links to further resources like the Go tour to learn more.
This document discusses continuous delivery and creating a continuous delivery pipeline. It introduces concepts like using Jenkins for continuous integration, Artifactory for artifact storage, and LiveRebel for deployment management. The document outlines building a pipeline with phases for building, testing, QA, and production. It explains how continuous delivery changes traditional processes by increasing automated testing, reducing manual work, and removing infrastructure teams from releases so they are driven by business decisions and automation.
A Java agents are pluggable self contained components that run embedded in a JVM and intercept the classloading process. They were introduced in Java 5 along with the powerful java.lang.instrument package. Java agents can be loaded statically at startup or dynamically (programmatically) at runtime to attach to a running process in a fail-safe fashion.
Java agents were an awesome addition to the JVM as it opened a lot of opportunities for tool designers and changed Java tooling landscape quite drastically. In conjunction with Java bytecode manipulation libraries it is now possible to do amazing things to Java classes: we can experiment with programming models, redefine classes in runtime, record execution flow, etc.
The presentation provides an overview of Java agents’ functionality along with the usage examples and real world experiences. You will learn, how to implement an agent and apply Instrumentation API in combination with bytecode manipulation libraries to solve interesting tasks.
Con-FESS 2015 - Is your profiler speaking to you?Anton Arhipov
The document discusses various techniques for profiling Java applications, including sampling, tracing, and busy loops. It notes that profiling is needed to optimize performance, but that some profiling techniques can introduce overhead that shifts the balance. The key areas to focus on optimizing first are the application's own building blocks like database and web service access.
Improve your Developer Experiece using the WAS Liberty Profile with JRebel Anton Arhipov
This document provides an overview of the WAS Liberty Profile and how it can improve the developer experience when used with JRebel. The Liberty Profile is a lightweight Java EE server profile that offers fast start up times, small footprint, and dynamic updates without restarts. JRebel further improves developer productivity by allowing code and configuration changes without rebuilds and redeploys. Together, the Liberty Profile and JRebel aim to significantly reduce development turnaround times for Java EE applications.
This document discusses integrating the JRebel plugin with NetBeans by patching NetBeans platform classes at load time. Specifically, it covers adding buttons, menus, and options to NetBeans, integrating with the NetBeans debugger and server adaptors, and programmatically patching NetBeans classes using Javassist to inject JRebel JVM arguments into the server launch process.
Voxxed Days Vilnius 2015 - Having fun with JavassistAnton Arhipov
The document discusses using Javassist, a Java bytecode engineering library, to dynamically generate Java proxies at runtime. It provides examples of using Javassist with a Java agent to transform class files and generate proxies within a ClassFileTransformer. It also summarizes how Javassist is used within the JRebel application reload agent to refresh configurations and notify plugins of class reloading.
Jenkins is used to automate testing for software projects, including continuous integration and continuous delivery. Over time, the number of tests and configurations grew substantially, creating challenges around speed and scaling. Solutions involved leveraging Jenkins plugins for capabilities like matrix configurations, cloud integration, and elasticity. This allowed parallelizing tests across different environments and machines. DVCS also helped with faster feedback by automatically triggering downstream tests upon code changes.
В этом докладе рассмотрен опыт NetCracker по выбору инструмента для изучения причин проблем производительности.
Рассмотрены критерии по которым не подошли имеющиеся инструменты и показаны примеры того, чего не хватает при анализе результатов обычными профайлерами.
http://jokerconf.com/#sitnikov
The document discusses Scala implicits, including how they work, how IDEs can help with them, and possibilities to improve their performance. It covers implicit conversions, extension methods, implicit parameters, and how the compiler handles implicit resolution and type inference. The presenter advocates using implicits as a key Scala feature while also choosing tools that help debug issues and analyze available implicit conversions.
Краткое введение в Scala для разработчиков на других языках. Рассмотрены несколько простых программ, написанных с использованием красивых возможностей Scala.
Как показывает практика, повсеместное применение классического, основанного на callback’ах подхода к асинхронному программированию обычно оказывается неудобным. Для упрощения написания и поддержки сложного асинхронного кода можно использовать иной подход — с использованием сопрограмм. Он значительно сокращает объём и сложность кода, превращая код из асинхронного в синхронный.
Как показывает практика, применение классического, основанного на callback’ах подхода к асинхронному программированию обычно оказывается неудобным. Для упрощения написания и поддержки сложного асинхронного кода можно использовать иной подход, основанный на прозрачном использованием сопрограмм. Он значительно сокращает объём и сложность кода, превращая его в понятный, легко читаемый и структурируемый код.
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
Практика показывает, что использование подхода, основанного на колбеках для асинхронного программирования обычно не является удобным и подвержено различным ошибкам. Для упрощения написания и поддержки сложных асинхронных программ можно использовать несколько иной подход: использовать сопрограммы для переключения контекста на время ожидания события. Такой подход позволяет реализовать интересные неблокирующие примитивы, включая неблокирующее сетевое взаимодействие, неблокирующие мьютексы, а также удобное переключение между различными пулами потоков для разнесения выполнения задач, которые требуют различные ресурсы.
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в TarantoolTimur Safin
Презентация для выступления на Владивостокском митапе https://moscowdjango.timepad.ru/event/1884275/
"Основной режим разработки приложений в Тарантуле — это написание скриптов и манипуляции данными на Lua (оставим пока за скобками режим SQL). Часто внедрению Тарантула в некую систему становится блокером использование Lua.
В экосистеме Lua мало тулинга, это касается как встроенного интерпретатора, так и JIT-транслятора LuaJIT.
Давайте оглядимся, как обстоят дела с тестированием, профилированием, статическим анализом и дебагом в Lua. И как это все может быть использовано при разработке сервисов, в архитектуре которых есть Tarantool."
Осуществим вводный экскурс в Node.JS. Действительно это что-то новое и гениальное? Что оно может, а что нет? Кому будет полезен? В каких случаях применять, а в каких нет? На все эти вопросы я постараюсь ответить в своём докладе.
Мир мобильных телефонов очень сильно изменил нашу жизнь. В наше время невозможно представить современного человека, без этого чудо устройства. На рынке появляется все больше устройств и приложений. И чтобы удобнее пользоваться этими приложениями пользователи выбирают “умные” телефоны, или как их еще принято называть смартфоны. В своем докладе я хочу поделиться своим опытом автоматизации приложений под Android и iOS. Я расскажу о том, какие инструменты автоматизации я использовал. Поговорим о недостатках этих инструментов и какие из них стоит использовать у себя на проекте.
Иван Пузыревский — Введение в асинхронное программированиеYandex
Доклад посвящен основам асинхронного программирования. Мы кратко обсудим историю вопроса: что такое асинхронность, где, почему и зачем она используется. Затем рассмотрим наиболее частые способы построения асинхронных интерфейсов: основанные на callback'ах и на future/promise. В ходе доклада выделим основные используемые концепции, посмотрим на их реализацию и примеры использования. А в конце поговорим о сложностях, которые часто встречаются в асинхронном программировании.
Продолжаем говорить о микрооптимизациях .NET-приложенийAndrey Akinshin
Этот доклад продолжает тему моего выступления с прошлого DotNext про сложную науку о микрооптимизациях. Вас ждут новые увлекательные истории о том, что же происходит под капотом .NET-программ. Будем обсуждать различия разных C# и JIT компиляторов (Roslyn и RyuJIT в том числе), медитировать на IL и ASM листинги, а также разбираться с особенностями современных CPU.
Семинар по Node.js в КПИ 20 октября 2014. Докладчики: Тимур Шемсединов, Никита Савченко, Максим Петренко. Краткое содержание:
* Что такое Node.js и как работает JavaScript в V8
* Профессионалы расскажут, почему они выбрали Node.js
* Вы узнаете его сильные и слабые стороны и где его лучше применять
* Будет полный обзор особеностей и внутреннего строения Node.js
* Примеры внедрения и Highload-проекты
* Вопросы развертывания, хостинг, тестирования, и отладки
* Где и что учить, что читать, как осваивать
Similar to JPoint 2016 - Etudes of DIY Java profiler (20)
JavaZone 2022 - Building Kotlin DSL.pdfAnton Arhipov
The document discusses Kotlin DSL and provides examples of using Kotlin as a domain specific language. It demonstrates how to build type-safe builders using Kotlin, including defining DSL blocks, extension functions and properties, infix notation, lambda receivers, and context receivers to define internal and external DSLs. Code samples are provided of building clients and dates using DSL syntax and context requirements.
The document discusses idiomatic Kotlin programming. It covers several topics including:
- Using expressions idiomatically in Kotlin like if/when expressions
- Examples of idiomatic patterns from the Kotlin standard library
- Best practices for null safety using safe calls, let, elvis operator
- Idiomatic use of classes, functions, and data classes
- Leveraging the Kotlin standard library
TeamCity is a great tool for Continuous Integration with a lot of advanced features provided out-of-the-box. In this session, we will go through how TeamCity helps the software development with the daily routine; what was added to the product in the latest releases; and what features are coming next.
You will learn why build pipelines are useful, and how the CI server can be optimized when properly configured. I will also demonstrate how to configure the builds using the special Kotlin DSL provided with TeamCity.
TeamCity is a build management and continuous integration tool created by JetBrains that allows building pipelines of steps. It supports over 2000 projects with 12,000 build configurations running on 500 agents. Key features include a Kotlin DSL, HA read-only servers, Docker runner improvements, templates for step ordering, enforced settings, .NET Core support, and plugins. Pipelines allow breaking up builds into sequential steps like compiling, running tests, and publishing results to improve efficiency.
Devoxx Ukraine 2018 - Kotlin DSL in under an hourAnton Arhipov
Kotlin DSLLearn how to create type-safe and statically typed DSLs in Kotlin. Uncover the language features that make DSL creation possible. We’ll take a look at a few practical examples and create a simple DSL ourselves.
Build pipelines with TeamCity and Kotlin DSLAnton Arhipov
- TeamCity allows building software projects and managing build pipelines for continuous integration and delivery (CI/CD)
- A build pipeline in TeamCity refers to the sequence of build steps such as compiling code, running tests, and deploying artifacts that are automatically triggered by code changes
- The document demonstrates how to define a build pipeline in TeamCity using Kotlin DSL that compiles and packages a Java application project and its dependency library project
A build pipeline refers to the automated process of building software by breaking it down into discrete steps. This document discusses how TeamCity, a build management and continuous integration tool, can be used to create build pipelines. It provides an example pipeline with steps for checking out sources, compiling code, running tests at different stages, generating reports, and publishing results. The benefits of a pipeline include running different test types in parallel and tracking dependencies between steps to speed up the overall build process.
JavaDay Kiev 2017 - Integration testing with TestContainersAnton Arhipov
This document introduces TestContainers, an open source Java library that supports integration testing for applications that depend on external resources like databases. It allows tests to use real Docker containers to manage these dependent services. Tests run quickly and are portable across environments because the containers are started and stopped for each test. The document provides examples of using TestContainers with Spring Boot tests to launch containers for PostgreSQL and Redis, and to configure a MockServer container to handle external API dependencies. It suggests TestContainers is useful for testing microservices and Java agents that depend on external services or APIs.
TestContainers is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.
JavaOne 2017 - The hitchhiker’s guide to Java class reloadingAnton Arhipov
This document discusses different techniques for reloading Java classes at runtime:
- HotSwap allows reloading individual statements but is limited. Class loaders allow reloading entire classes but each class loader isolates its classes.
- More advanced techniques like Java agents and bytecode instrumentation allow redefining classes in-place and reloading methods, fields, and class hierarchies in a binary-compatible way.
- Demonstrations show reloading an entire "region" of related classes like a service class and its dependencies, allowing a live application thread to see the changes immediately without restarts. Java agents in particular provide a powerful but complex way to implement class reloading.
JavaOne 2017 - TestContainers: integration testing without the hassleAnton Arhipov
This document introduces TestContainers, an open source tool for running Docker containers as part of integration tests. It discusses why integration testing is important for reproducibility, isolation, and realism. TestContainers allows setting up Docker containers programmatically and automatically cleaning them up after tests complete. It supports starting individual containers, Docker Compose environments, and custom container types. Examples are given for testing services that depend on databases, caches, and external APIs using TestContainers without complex test environment configuration. The document also describes how to use TestContainers to test Java agents by modifying bytecode at runtime within a container during tests.
JavaOne 2017 - The hitchhiker’s guide to Java class reloadingAnton Arhipov
In Java, a typical workflow involves restarting the application with (almost) every class change. For some applications, it is not a problem at all; for others, it is a disaster, from HotSwap to agent-based reloading. This session takes a look at the options available for Java class reloading. There are plenty of tools you can use for this task: rely on standard JVM HotSwap, redesign your application to rely on dynamic class loaders, comprehend the Zen of OSGi, or integrate a reloading agent. Every option has its own drawbacks and benefits, and the presentation takes a deep dive into the subject. Come get a better understanding of class reloading technologies and become a more productive Java developer.
JavaZone 2017 - The Hitchhiker’s guide to Java class reloadingAnton Arhipov
This document discusses techniques for reloading Java classes at runtime, including using class loaders to load updated classes, Java agents to instrument classes, and frameworks like HotSwap that utilize these techniques. It provides examples of how class loaders can be used to reload specific parts of an application while a program is running. The goal is to achieve hot reloading that is binary compatible and allows updating code without restarting the Java virtual machine.
Riga DevDays 2017 - The hitchhiker’s guide to Java class reloadingAnton Arhipov
This document discusses techniques for reloading Java classes at runtime, known as hot reloading or hot swapping. It begins with an introduction and overview of class loaders, Java agents, and instrumentation which can be used to dynamically modify classes. Specific techniques are then presented for reloading classes, fields, methods and code using custom class loaders and bytecode manipulation. The goal is to allow reloading parts of an application without restarting the Java Virtual Machine.
GeeCON 2017 - TestContainers. Integration testing without the hassleAnton Arhipov
TestContainers is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.
JEEConf 2017 - The hitchhiker’s guide to Java class reloadingAnton Arhipov
In Java, a typical workflow involves restarting the application (almost) with every class change. For some applications it is not a problem at all, for some – it is a disaster.
From HotSwap to agent-based reloading. In this session, we are going to take a look at the options available for Java class reloading. There is plenty of tools that you can use for this task: rely on standard JVM HotSwap, redesign your application to rely on dynamic class loaders, to comprehend the Zen of OSGi, or to integrate a reloading agent. Every option has its own drawbacks and benefits and we’re going to take a deep dive on the subject.
Finally, there are also the conceptual challenges in reloading Java classes. What to do with the state? What should happen with the static initialisers? What if super class changes? Join this session to gain a better understanding of class reloading technologies and become more productive Java developer.
JEEConf 2017 - Having fun with JavassistAnton Arhipov
Javassist makes Java bytecode manipulation simple. At ZeroTurnaround we use Javassist a lot to implement the integrations for our tools.
In this talk we will go through the examples of how Javassist can be applied to alter the applications behavior and do all kind of fun stuff with it.
Why is it interesting? Because while trying to do unusual things in Java, you learn much more about the language and the platform itself and learning about Javassist will actually make you a better Java developer!
4. Batch / ETL
Исходные данные : ~10k записей
Результат: ~20M записей
j.u.Date / j.u.Calendar
Java 1.4 HP-UX
Первый запуск: 25 ч :-(
После оптимизаций: 10 ч
После изменения дизайна: 30 мин :-)
2005
История одного проекта
30. class Profiler {
Loop loop;
public static void start(String method) {
long now = loop.getTime();
…
}
31. public class Loop implements Runnable {
private volatile long time;
public void run() {
while (running) {
time = System.nanoTime();
sleep();
}
}
public final long getTime() {
return time;
}
Busy Loop
32. Наносекунды в приближении
Чтение памяти имеет цену
Занимает циклы процессора = ns
Каждый слой ПО добавляет к цене.
JVM, JNI, OS, HW
http://shipilev.net/blog/2014/nanotrusting-nanotime/
Nanotrusting the NanoTime
34. Thread.sleep
Win8: 1.7 мс (JNI + socket poll: 1.0 ms )
Linux: 0.1 мс
OS X: 0.05 мс
Всё таки загружает ядро процессора на 25-50%
Thread.yield
Планировшик в Windows может проигнорировать
наш поток в случае высокой загрузки процессора
35. public class Loop implements Runnable {
private volatile long time;
public void run() {
while (running) {
time = System.nanoTime();
sleep();
}
}
private void sleep() {
if (!MiscUtil.isWindows()) {
Thread.yield();
}
}
Busy Loop
36. Busy Loop
public class Loop implements Runnable {
private volatile long time;
public void run() {
while (running) {
time = System.nanoTime();
sleep();
}
}
private void sleep() {
if (!MiscUtil.isWindows()) {
Thread.yield();
}
}
37. Busy Loop
public class Loop implements Runnable {
private volatile long time;
public void run() {
while (running) {
time = System.nanoTime();
sleep();
}
}
private void sleep() {
if (!MiscUtil.isWindows()) {
Thread.yield();
}
}
43. Оптимизации
public int calculateMargin(Order order){
return order.grossPrice() / order.salesPrice() * 100;
}
public int grossPrice() {
return gross;
}
public int grossPrice();
Code:
0: aload_0
1: getfield #2 // Field gross:I
4: ireturn
Не вызывает других методов
Нет циклов
Можно игнорировать
50. JDBC
> Вариант 1. Proxy
> Вариант 2. Список известных нам классов. Что
знаем, то и инструментируем.
> Вариант 3. Есть известные интерфейсы -
сканируем иерархию классов
Привет, ClassCastException
Замедление старта приложения
Привет, DB2
56. Что уже есть?
> Разные $$$ APM-продукты: Dynatrace, AppDynamics
> Dapper
> ZipKin
http://research.google.com/pubs/pub36356.html
http://zipkin.io
NB! Требуется серверная часть