20 и 21 октября в Санкт-Петербурге в гостинице «Park Inn Пулковская» прошла конференция для Java-разработчиков Joker 2014. Конференция стала крупнейшим Java-событием года в России и собрала более 700 Java-разработчиков.
Мы ориентируемся на участников, которые хорошо разбираются в Java. Сильные и технически сложные доклады гарантируют нам высокое качество аудитории. Широкий охват целевой аудитории и высокий профессиональный уровень участников будут обеспечены тем, что:
Конференция Joker в 2013 году собрала более 500 участников, а в 2014 году — более 700 участников. Кроме того, наша команда делает и другое ежегодное Java-мероприятие — конференцию JPoint в Москве.
которыми мы занимаемся постоянно, собирают от 100 до 200 человек.
хорошую репутацию среди разработчиков, широкие связи и большое количество коммуникационных каналов, включая почтовые рассылки, группы в социальных сетях и прямые выходы на крупные компании-разработчики ПО на Java.
таргетирует аудиторию и позволяет каждому заинтересованному участнику выбрать оптимальную форму посещения конференции.
но и на обучение конкретным вещам, поэтому многие компании будут использовать эту возможность для повышения уровня своих сотрудников, направляя их как участников или как докладчиков.
гарантирует высокий уровень конференции. Мы персонально работаем с потенциальными спикерами и выводим их выступления на качественно новый уровень, проводя для них многочисленные тренировки и репетиции.
Время
Зал Пики
Зал Трефы
Зал Бубны
9.00-10.00
Регистрация
10.00-10.15
Открытие конференции
10.15-10.45
Олег Анастасьев
За гранью возможного (keynote)
10.45-11.15
Кофе-брейк
11.15-12.15
Nitsan Wakart
The Illusion of Execution
Александр Белокрылов и Александр Мироненко
Силовая установка c сердцем из Raspberry Pi
и мозгом на Java Embedded
Алексей Зиновьев
Java в качестве основного
рабочего инструмента Data Scientist
12.30-13.30
Андрей Паньгин
Лучший отладчик — сделанный своими руками
Volker Simonis
Heart Surgery: HotSpot Debugging at the OS Level
Николай Чашников
Писать код быстрее, ошибаться реже
13.30-14.30
Обед
Паулайнер (Full ticket)
14.30-15.30
Алексей Шипилёв
Java Benchmarking: как два таймстампа прочитать!
Christoph Engelbert & Peter Lawrey
Unsafe Java World
Иван Крылов
StructuredArray и ObjectLayout
15.45-16.45
Глеб Смирнов
HotSpot, что ты делаешь?! Ахаха, прекрати!
Олег Анастасьев
За гранью NoSQL: NewSQL на Cassandra
Nicolas Frankel
Integration Testing from the Trenches
16.45-17.15
Кофе-брейк
17.15-18.15
Барух Садогурский, Евгений Борисов и Николай Алименков
Зачем у Spring столько конфигураций?
Peter Lawrey
Low level Java coding with examples from OpenHFT
Владимир Ситников
Профайлер в каждый дом
18.30-19.30
Сергей Куксенко
Железные счётчики на страже производительности
Markus Eisele
JavaScript in the Еnterprise
Яков Жданов
От дисковой архитектуры
к In-Memory
19.45-20.00
Закрытие первого дня конференции
Время
Зал Пики
Зал Трефы
Зал Бубны
9.00-10.00
Утренний Кофе-брейк
11.30-11.45
Кофе-брейк
11.45-12.45
Markus Eisele
50 Best Features
of Java EE 7
Барух Садогурский и Евгений Борисов
Groovy Puzzlers
Дмитрий Лазаренко
Оптимизация работы JVM в облаке
12.50-13.50
Marcus Lagergren
OS/JVM dialectic – ending the struggle through unity
Владимир Красильщик
Мониторинг Java-приложения
с многопроцессной архитектурой
Светлана Исакова
Простыми словами про вывод типов
13.50-14.45
Обед Паулайнер (Full ticket)
14.45-15.45
Николай Алименков
Прикладная многопоточность
Алексей Рагозин
Структуры данных в Java, изобретаем заново
16.50-17.15
кофе-брейк
17.15-18.15
Евгений Борисов
Spring Data? Да, та!
Владимир Иванов
Future of Java: 9 and beyond
Jaroslaw Palka
So you want to write another JVM language?
18.30-19.30
Aleksey Shipilёv
java.lang.String Catechism (in English)
Роман Елизаров
Почему GC съедает все моё CPU?
Николай Рыжиков
Clojure: интерактивная разработка
для интерактивного веб
19.45-20.00
Закрытие конференции
Когда-то в Java всё было просто — заменил JDBC Driver на другой, и всё работает. Потом стало сложнее — заменил Hibernate на EclipseLink, но по большей части оно всё-ещё кое-как работает. А потом случился NoSQL. Что общего у MongoDB и Hadoop? Да ничего, кроме того, что они не-SQL. Достаточно ли этого, для того, что-бы написать фреймворк, энкапсулирующий детали их реализации? Именно на этот вопрос я попытаюсь ответить в своём докладе.
У Spring Data, инструмента, призванного абстрагировать вас от конкретной реализации базы данных, обычная для такого рода фреймворков дилемма: покрывать наименьшее общее кратное, чтобы работало одинаково со всем, либо давать возможность работать с уникальным функционалом каждого инструмента и усложнить переход между ними. В этом докладе мы познакомимся со Spring Data на примере перехода между реляционной и несколькими нереляционными базами данных.
Hardcore enterprise solutions, as well as other products, normally deal with large amount of text data. Those applications spend considerable time and memory to mess with Strings. It had been repeatedly shown that optimizing String usages will almost always give the immediate performance boosts. This is not to mention dodging OutOfMemoryErrors and the like.
In this talk, we will revisit the basic sins of working with Strings: gluttony of concatenation, wrath of substrings, greed of interning, pride of deduplication et cetera. We will also see the costs of sloth, believing JVM Almighty will do all the work for us.
Java разработчики привыкли: утекает память — запускай Eclipse Memory Analyzer, проблемы с производительностью — профилируй с YourKit. Но зачастую стандартных средств не хватает, например, когда ошибка проявляется только в production, куда и дебаггером не подключиться, и 10-гигабайтный heap dump не снять без перебоев в обслуживании.
Сделать собственный инструмент, заточенный под конкретную проблему — легко! Порой даже быстрее, чем найти готовое решение в интернете. JDK включает богатый инструментарий для написания всевозможных средств отладки и мониторинга: JVMTI, Dynamic Attach Mechanism, Serviceability Agent, Instrumentation API и т.п. Мы научимся ими пользоваться, узнаем, как устроены изнутри jstack, jmap и jstat, и даже напишем подобную утилиту сами во время доклада. За основу примеров взяты случаи из практики в «Одноклассниках», а также реальные проблемы разработчиков, обсуждаемые на Stack Overflow.
The Java EE 7 platform has four new components (WebSocket, JSON-P, batch, and concurrency), three that are significantly updated (JAX-RS, JMS, and EL), and several others that bring significant changes to the platform. As you can imagine, a lot of new functionality has been introduced in the platform. In this fast-paced session, you will learn about 50 new features introduced in the Java EE 7 platform. @ClientEndpoint, chunk-style batch processing, @FlowScoped, @AroundConstruct, @JMSDestinationDefinition, and @Transactional are some of features the presentation covers. It explains each feature.
Нередко при анализе производительности приложений приходится много копать. Но просто копать недостаточно, нужно еще разгребать накопанное. Железный век настал более 3000 лет назад, и было бы удивительно, если бы за это время человечество не создало кучу разнообразных железных приспособлений для копания и разгребания.
В данном докладе мы узнаем, что же такое "Hardware Performance Counters", где их найти и как их можно использовать для анализа производительности.
До недавнего времени в Одноклассниках около 50 ТБ данных, обрабатываемых в реальном времени, хранилось в Microsoft SQL Server. Многие знают, что для такого объема обеспечить быстрый и надежный, да еще и устойчивый к отказу ЦОД доступ, используя SQL СУБД, практически невозможно. Обычно в таких случаях используют одно из NoSQL хранилищ, но не всё можно перенести в NoSQL: некоторые сущности требуют гарантий ACID-транзакций.
Это ограничение подвело нас к необходимости использования NewSQL хранилища, то есть СУБД, предоставляющей отказоустойчивость, масштабируемость и быстродействие NoSQL-систем, но при этом сохраняющей привычные для классических систем ACID-гарантии. Работающих промышленных систем этого нового класса немного (сразу приходит на ум только Google Spanner), а доступных — и вовсе нет. Поэтому мы реализовали такую систему сами на любимой нами Java и запустили ее в промышленную эксплуатацию несколько месяцев назад.
Доклад про то, как устроено это хранилище будет интересен всем, кто следит за развитием технологий управления базами данных и имеет опыт работы с (No)SQL.
Java 8 is out and Java 9 is actively ramping up. What are the plans for future releases?
A number of experimental projects has been started recently to incubate advanced Java VM and Language feature candidates for future releases. Project Valhalla explores a new approach to generic typing, and hopes to produce a new form of generic typing that allows developers to use generic collections of primitive types. The other big feature currently proposed for Valhalla is value types.
Project Panama will provide a native interconnect between code managed by the JVM and APIs for non-Java libraries.
The primary goal of Project Sumatra is to enable Java applications to take advantage of graphics processing units (GPUs) and accelerated processing units (APUs) to improve performance.
For each major feature, I'll give an overview, current status, and vision of the future development.
Contrary to our intuitions, the execution of our software is far from the continuous and sequential mental model we use when reading and writing code. In this talk we will discuss the gap between this model and the reality of the average Java application:
Что нужно знать разработчику о системе типов языка, на котором он пишет? От каких проблем спасают статические проверки, или что выбрать: статически типизированный язык или динамически типизированный? Локальный вывод типов (переменных) – скорее мешает или помогает? А глобальный?
Каждый Java-разработчик сталкивается с выводом типов постоянно, но не все знают определения и задумываются, как все работает. Вывод типов (англ. Type inference) — это возможность компилятора самому логически вывести тип значения из выражения.
Каждый раз, когда вы пишете, например, фильтрацию списка, компилятор решает систему уравнений. И если решения нет, то код не компилируется! В докладе мы поговорим про алгоритм вывода типов: что за система, откуда берутся неизвестные и ограничения на них. И, конечно, о том, почему иногда типы не сходятся. Если такие понятия, как типы, типовая безопасность, вывод типов, являются для вас buzzword'ами, то этот доклад развеет для вас туман и внесёт ясность, а так же упорядочить в голове концепты, которые постоянно на слуху.
Померить производительность — это так просто! Два раза по System.nanoTime(), взяли разность, сложили-поделили, и всё, можно оптимизировать. Как бы не так!
В этом докладе мы поговорим о том, как исследуют производительность приложений при помощи бенчмарков, какие частые ошибки возникают, как с ними бороться, и как вообще получить хоть какие-то полезные данные о мире, где всё от всего зависит. Красной нитью в докладе проходит Java Microbenchmark Harness (JMH), стандартный инструмент для написания и исследования бенчмарков в OpenJDK.
Случается, что код тормозит. Конечно, наш код идеален и проблема кроется в third-party библиотеках, но легче от этого не становится. Как понять причину медлительности? Как профилировать?
Профилирование кода — это не просто «открыть профайлер», а процесс, позволяющий своевременно отлавливать неоптимальный код на этапе разработки, тестирования и работе в production. Для некоторых случаев и System.out/perf4j/poormansprofiler могут оказаться хорошим решением. Но что делать с жалобой QA: «Вчера работало медленно»? Что делать с заказчиком, который «уже обжёгся на профайлере X и не согласен его ставить»? Сколько времени разработчик потратит на анализ профиля, прежде чем найдёт упоминание интересного ему кода?
В Java можно легко сделать собственный профайлер: Instrumentation API позволяет внедрить код в нужные классы, и переносимый байткод позволяет не задумываться о зоопарке платформ. В докладе мы рассмотрим, как эти возможности можно использовать для разработки собственного профайлера. Вы на примерах увидите, почему стандартные профайлеры могут не удовлетворять требованиям некоторых заказчиков, мы с вами напишем несложный профайлер, научим его писать журнал событий и посмотрим, какие ещё возможности можно использовать для более плотной интеграции профайлера с вашим решением.
The Stream API is set to become as important in the future as the Collections API is today. But to make good use of it, we have to understand the basis of its design in the idea of “parallel-ready code,” how that idea leads to the new idioms of the Stream API, and how Collectors square the circle that combines parallel execution with mutable data structures.
This presentation ends with a practical payoff—it takes some typical collection processing problems and shows systematically how to choose the best stream processing solution for each.
В докладе будет затронуты следующие темы:
Любой Java-разработчик знает, что многопоточность — это зло, и что писать корректный многопоточный код сложно, а работает он совсем не всегда так быстро, как ожидаешь. Но какие задачи возникают в реальной коммерческой разработке помимо запуска асинхронного выполнения кода?
В этом докладе я представлю несколько задач, с которыми мы столкнулись в своем проекте, и решения, к которым мы пришли. Доклад носит прикладной характер и поможет вам расширить кругозор в многопоточной разработке.
Что делать, если GC потребляет существенную долю ресурсов системы, но профилировщик CPU не показывает узких мест в приложении, а в снимке памяти активных объектов нет ничего необычного? Как такое может быть?
Ответ на вопрос, вынесенный в заголовок, очевиден – где-то в приложении выделяется очень много ненужных объектов, которые живут не долго и сразу уходят в мусор. Особенность заключается в том, что выделение памяти происходит очень быстро и не заметно в общей картине потребления CPU. В итоге, во время сборки мусора информация о виновнике, то есть, о том месте в коде, которое собственно выделило этот мусор, уже потеряна.
Как же найти эти места в большом приложении? Для решения этой задачи нами в Devexperts был создан специальный инструмент – AProf. Он позволяет учитывать каждое выделение памяти в коде Java-приложения и запоминать достаточно контекстных данных, чтобы, с одной стороны, можно было найти виновника, а, с другой, делать это на целевой, нагруженной платформе, без заметного её замедления.
Из доклада вы узнаете не только о том, как с помощью AProf найти все места в коде вашего приложения, которые создают избыточный мусор, но и о том, как AProf устроен.
Debugging Java applications is comfortable and simple, but if you want to look beyond the Java horizon, you need special knowledge and and different tools.
This interactive session shows you how to debug a running VM or analyze a VM core file with a native debugger. You will also learn how to use some of the more than 1,200 VM options to trace or modify the VM behavior. This knowledge can greatly help you identify, isolate and reproduce the root cause of hard VM crashes, and it can also be pure fun to see which actual machine instruction the CPU is executing for your Java code.
Все программисты хотят делать меньше ошибок в программах. Если же ошибки случаются, хочется про них узнать пораньше: не обнаружить в готовом продукте, а поймать при помощи юнит-тестов, ещё лучше — найти при компиляции, а в идеале — увидеть прямо при наборе кода. В этом могут помочь статические анализаторы кода. Одни из них встроены в IDE, другие надо настраивать дополнительно, для проверок третьих придётся аннотировать код.
Стоит ли результат затраченных усилий? Какие ошибки можно найти таким способом? Не потонут ли сообщения о реальных проблемах в потоке ложных срабатываний? Об этом и поговорим на докладе.
Большинство разработчиков время от времени сталкиваются с проблемами, которые для них новы. Для решения иногда достаточно прочитать документацию. Иногда ответ можно найти в интернете, иногда спросить у кого-то, кто уже знает. Порой это не помогает, и приходится копать самостоятельно. Нередко раскопки доходят до уровня JVM, и от этого у кого-то могут опуститься руки.
Но ведь HotSpot — это не загадочная шайтан-машина, а что-то, у чего открыт исходный код! Всё поведение JVM, кажущееся поначалу странным, можно объяснить и научиться воспроизводить, нужно просто копнуть ещё немного глубже. Доклад окунёт слушателей в увлекательный мир исходников JVM и разберёт несколько "необычных" ситуаций, с которыми может столкнуться разработчик.
Я расскажу о том, что представляют из себя Java-объекты и структуры объектов в памяти, и о том, как перемещение и упаковка объектов в памяти влияют на производительность. Я представлю новый пакет классов Java, который имеют гарантированное взаимоположение классов в памяти, что позволит достичь производительности «как в программах на С». Для эффективной работы данных классов потребовались новые примитивные типы в JVM, модификация алгоритмов GC, а также новые интринсики. Развитие данных классов позволит в будущем переписать некоторые стандартные коллекции в JDK.
The JVM is an interesting beast, being a runtime and a virtual machine it shares a lot of its behavior with the operating system beneath it. It has concepts like threads, a heap for object allocation and code execution in sandboxed environment. The JVM uses resources from the operating system to implement its functionality, but as noted it also looks a lot like the operating system itself. Sometimes it’s useful that the operating system is beneath the JVM – we can, for example, use operating system thread directly. Other times, however, this is not a good thing. We want the same control of the machine in userland from the JVM as the OS has only in kernel land.
This has led to the boundary between the OS and the JVM becoming blurry. A JVM is basically just an operating system that does one thing – run Java. We will cover practical examples from the past of meta-virtual machines and also discuss projects like the (now dead) hypervisor only JRockit VE OS as an example of strange hybrids and explain what can be gained from them.
We’ll talk about threads, locks, and I/O implementation from a JVM and an OS perspective. The talk also contains a historical retrospective on virtual machines and operating system interaction that stretches back to the seventies. We’ll make educated guesses about where the future is heading.
Все мы хорошо знаем стандартную библиотеку коллекций Java. Для большинства задач её возможностей вполне достаточно, но если ваша цель — создание базы данных или специализированного поискового индекса, то вполне возможно, что вам придётся искать альтернативы стандартным коллекциям.
В этом докладе я хочу рассказать о своём опыте работы с существующими библиотеками коллекций и написания собственных.
Ahead-of-time (AOT) компиляция, или статическая компиляция, существует для платформы .NET довольно давно, однако Java до сих пор не имеет стандартного AOT-компилятора. Некоторые программисты думают, что AOT-компилятор для Java может работать только для ограниченного подмножества Java приложений и не может быть применен в общем случае, другие думают, что AOT не нужен для Java, потому что есть JIT.
Правда же состоит в том, что у Java есть AOT-компилятор с 2000 года как часть Excelsior JET JVM, полностью совместимой с Java спецификацией. В этом докладе я попробую развеять мифы, которые сложились вокруг AOT-компиляции и показать, где (с технической точки зрения) этот подход имеет преимущества перед динамической компиляцией (JIT).
You never heard of sun.misc.Unsafe? You may be using it without realising it. Are you using Spring or Hibernate? 90% of todays applications use sun.misc.Unsafe directly or indirectly. Unsafe is meant to be an API internal to the JVM but since it turned out to be extremely powerful, more and more frameworks have used it.
This talk will show different usecases of sun.misc.Unsafe. Some are commonly used in production environments like fast Serialization, Offheap or to build lock-free algorithms, some not suitable for production but fun to play with breaking the rules of what you can do in Java.
After the talk you’ll understand what is possible and what might help you, but not to forget, this talk is given with a big warning: Don’t Try That At Home!
Вам случалось полдня разбираться почему не проходит интеграционный тест и обнаружить, что один из Java-процессов Вашего приложения, находясь под нагрузочным тестированием, которое проводил коллега напротив Вас, так усиленно писал логи, что забил все свободное дисковое пространство, что в свою очередь, не позволяло другому Java-процессу этого приложения открыть сокет? Или в Вашей команде более 20 server-side Java-девелоперов, а архитектура Вашего “Ынтерпрайза” со стороны напоминает гигантский клубок нейронов и аксонов?
В общем, если Вы работаете на действительно большом проекте, многочисленные компоненты которого активно взаимодействуют друг с другом и при этом разрабатываются разными командами, то Вы относитесь к одному из двух типов людей: либо Вы мониторите состояния компонентов и окружений, на которых эти компоненты развернуты, либо Вы будете их мониторить. Потому что без мониторинга Вы потратите кучу времени на выявление и устранение неприятных инфраструктурных и интеграционных проблем, вместо того чтобы писать чистый и совершенный Java-код.
В своём докладе я пройдусь по плюсам и минусам принципа single responsibility в server-side архитектуре, расскажу про типичные проблемы своего текущего проекта и поделюсь рабочими рецептами против паранойи бесконечной и болезненной межкомпонентной интеграции. Также будет представлен краткий обзор продуктов основных игроков в сфере мониторинга, таких как hyperic, nagios, appdynamic или newrelic, подходящих для использования как специалистами DevOps, так и Java-программистами.
В российских реалиях изобилия нефти и газа альтернативные источники энергии вызывают истерический смех. Приходите посмеяться вместе с нами.
А если серьезно, вы узнаете о преимуществах использования Java Embedded для построения удалённых распределённых автономных систем. Мы на практике продемонстрируем прототип энергонезависимой установки использующей «чистые» ресурсы. Вы узнаете, как с помощью Java Embedded управлять источниками энергии, такими как солнечная батарея, велогенератор итд. Контролировать заряд батареи и нагрузку из облачного приложения. Если вы Java-разработчик и хотите улучшить своё здоровье и здоровье планеты, то это сессия для вас.
When one uses Test-Driven Development, has more then 90% test coverage and the best Sonar metrics ever seen, and still finds regular bugs in his application, it is time for something more. Unit Testing is like testing a car's every nuts and bolts while Integration Testing is like leading it on a test drive: one cannot achieve high internal quality without the other.
However, Integration Testing might seem very complex when put in place for the first several times; I have made many mistakes and have lost much time. In this presentation, I will present tools that helped me tremendously in Integration Testing, as well as proven tactics to get the best out of your tests.
Помните легендарные Java Puzzlers? Да-да, те самые, с Джошом Блохом и Нилом Гафтером? Ну, по которым ещё книжку написали? Так вот, в Groovy всё ещё веселее.
В смысле — задачки ещё более странные, и ответы ещё более поразительные. Этот доклад для вас, Groovy-разработчики, мы покажем вам настоящие, большие и красивые подводные камни! И для вас, Java-разработчики, потому что таких вещей на Java-подобном синтаксисе вы точно никогда не видели! И для вас, PHP-разработчики… хотя, нет, не для вас :)
Всем точно будет весело — ваши ведущие Женя и Барух будут зажигать, шутить, спорить, бросаться футболками в публику, и самое главное — заставят вас офигевать от Groovy.
In limited cases, low level coding can really make a difference to the performance of your Java application. Which pieces are useful? How to hide these details for Java developers? When is using low level coding the only option?
Практически каждая новая версия Spring привносила дополнительный способ конфигурации. XML, аннотации Java Config, Groovy Config. Что дальше? А главное зачем их так много? Как знать когда чем пользоваться?
Хотите понаблюдать за настоящей битвой Баруха, Жени и Николая в попытке найти золотую середину? Хотите поставить ставки на победу Groovy конфига над XML-ом или наоборот (люди, между прочим, уже выигрывали реальное пиво!)? Тогда этот доклад — для вас!
За отведённое нам время мы будем выявлять плюсы и минусы разных конфигураций на реальном проекте. Мы будем спорить, ругаться, бить друг друга (может быть, даже ногами) в попытке докопаться до истины. И наконец покажем вам наше видение будущего, в котором Spring Boot значительно упростит нам жизнь.
Instead of exclusively using JavaScript on front ends, what else can be done with it on Java EE servers? This session looks into Nashorn, Avatar, the scripting JSR, and other possible options for also using JavaScript as an enterprise workhorse.
Приятно работать с системами которые работают быстро. Пока у системы мало пользователей и данных — всё просто. Но что, если вам "повезло" и к вам пришла нагрузка?
Хотите узнать, какие проблемы с ресурсами и GC возникают у нагруженных приложений? А примеры решений? Как эффективно распараллелить запрос и от чего нужно защищаться? Как оценить, много ли мусора создают запросы? Что делать, чтобы приложение с хипом на 20GB как можно реже прерывалось на GC?
Все эти проблемы мы решали, делая поиск в Одноклассниках. В итоге наша система обрабатывает тысячи запросов в секунду, делая для этого десятки тысяч подзапросов в индексы и за данными.
В докладе будет мало чисто поисковой специфики: большинство времени будет посвящено разбору типичных проблем любых высоконагруженных систем. Будут даны конкретные рекомендации по их решению.
In recent years we have seen explosion of languages which run on Java Virtual Machine. We also have seen existing languages getting their implementations being rewritten to JVM. With all of the above we have seen rapid development of tools like parsers, bytecode generators and such, even inside JVM we saw initiatives like Da Vinci Machine Project, which led to invoke dynamic in JDK 7 and recent development of Graal and Truffle projects.
Is it really hard to write new programming language running on JVM? Even if you are not going to write your own I think it is worth to understand how your favorite language runs undercover, how early decisions can impact language extensibility and performance, what JVM itself and JVM ecosystem has to offer to language implementors.
During the session I will try to get you familiar with options you have when choosing parsers and byte code manipulation libraries. which language implementation to consider, how to test and tune your "new baby". Will you be able after this session to develop new and shiny language, packed with killer features language? No. But for sure you will understand difference between lexers and parsers, how bytecode works, why invoke dynamic and Graal and Truffle are so important to the future of JVM platform. Will we have time to write simple, compiled language?
Больше данных – больше время отклика: современным приложениям приходится обрабатывать постоянно растущие объемы информации, и поэтому на выполнение даже относительно простых операций с каждым днём требуется всё больше и больше времени. Как следствие, многие системы, будучи разработанными с использованием традиционных СУБД, практически исчерпали ресурсы для дальнейшего масштабирования.
Если вам не понаслышке знакома подобная проблема или вам интересно узнать, как можно выполнить запрос вида «select avg(sum) from Orders» по сотням миллионов строк за время, не превышающее одной секунды, то этот материал для вас! Мы рассмотрим процесс миграции приложения с «диска» в «память». Речь ни в коем случае не идет о полном отказе от использования СУБД – она остается, как надежное персистентное хранилище, а ACID-транзакции и SQL-запросы будут полностью выполняться в памяти.
Вы увидите, как с легкостью можно придать приложению способность масштабироваться на сотни машин, тем самым, сделав его хорошо адаптируемым к увеличению нагрузок. Доклад будет интересен всем, кто интересуется высоконагруженными системами и распределёнными вычислениями.
Производительность и цена — два основных направления, волнующих каждого, кто хостит приложение. Постоянный вопрос: как получить больше за меньшую цену?
Мы в Jelastic научились настраивать JVM так, чтобы неиспользуемая память возвращалась обратно в операционную систему без негативного влияния на само приложение. Из доклада вы узнаете о результатах внедрения этого решения:
Кроме того, вы научитесь демасштабировать VM и корректно обрабатывать пиковые нагрузки за счёт переноса приложений в облако.
Часто мы можем слышать разговоры, что, мол, Java хороша для Enterprise или для Mobile, но вот прототип алгоритма придется писать на любимом Python или R. Верно ли, что Java уже не та и мало подходит для этого изящного мира ученых, которые переваривают кропотливо собранные вами данные? Правда ли, что на Java нет фреймворков, сопоставимых по возможностям с пакетами R или NumPy для Python? Можно ли позволить тому парню с красным дипломом МГУ писать свой алгоритм в Matlab и Octave, ведь потом все «легко переписать в Java»?
Если вы Java-разработчик высоконагруженных систем и у вас периодически накапливаются данные для анализа, если у вас уже настроен прекрасный кластер Hadoop, а данные ждут своего часа в MongoDB, Cassandra или Hbase, то вам наверняка хотелось бы воспользоваться инструментами для Data Mining, без особых усилий добавляя сервисы, анализирующие ваши данные.
Из доклада вы узнаете о самых популярных фреймворках и IDE на Java для построения моделей при помощи методов Machine Learning, о вариантах встраивания этих решений в существующие системы.
Современный веб-сервер становится интерактивным (websockets, server sent events) и распределённым (microservices). А разрабатывать его нужно, как всегда, быстро и надежно.
В докладе я расскажу про язык программирования Clojure и о том, почему он является идеальным инструментом для разработки интерактивных систем:
Этот тренинг – углубление прошлогоднего курса про обоснованную архитектуру, которая очень понравилась участникам. Многие участники высказались за увеличение длительности за счет введения углубленной практики. Мы рады предложить Вам обновленную и углубленную версию этого тренинга.
Основной фокус тренинга лежит в плоскости обеспечения успеха Ваших проектов по разработке ПО. В условиях высокой неопределенности и изменчивости особое внимание стоит уделять обоснованности инженерных решений, способности поддерживать свою систему и, внезапно, здравому смыслу.
Авторы курса постарались обобщить успешный опыт, здравый смысл и практики Agile и дать Вам конкретные модели и инструменты, которые Вы сможете сразу же применить на производстве.
18-19 октября. Продолжительность: 16 часов. Подробности...
На тренинге вы будете решать реальные задачи, с которыми сталкивается почти каждый программист. Будут обсуждаться как правильные, так и неправильные шаблоны, названия которых будут озвучены только после того, как качественный код будет написан.
22 октября. Продолжительность: 8 часов. Подробности...
Вы узнаете о практических приёмах использования Spring, о разных способах его конфигурации, кастомизации, об использовании Spring AOP, использованию Groovy в Spring и многом другом.
В рамках этого тренинга мы начнем изучение Spring с самых основ и постепенно перейдем к рассмотрению всех основных внутренностей фреймворка Spring для того, чтобы иметь возможность адаптировать его под нужды вашего проекта.
Мы сравним преимущества и недостатки всех видов контекстов, от XML до конфигурации на Groovy, который появился вместе со Spring 4, и обсудим, когда и чем правильнее пользоваться.
23-24 октября. Продолжительность: 16 часов. Подробности...
At this workshop you’ll learn how to write web applications with Vaadin effectively. Given that you code only in Java, compile to bytecode you can integrate it easily with Spring, CDI, JDBC, JPA and build rich and robust application with minimum effort.
During this workshop I’ll guide you through the steps of development of a typical web application with Vaadin. This application will be a simple Chat application through which we will demo fundamental Vaadin features
23 октября. Продолжительность: 4 часа. Подробности...