Olexandra Dmytrenko
QA Automating at EPAM Systems
I'll show you how to switch from writing standard code using good old Java7 into writing it using functional way presented in Java8. The training is counted on beginners in the subject who like discovering the new horizons or for those who want to become more firm in using the new lambda features.
Olexandra Dmytrenko
QA Automating at EPAM Systems
I'll show you how to switch from writing standard code using good old Java7 into writing it using functional way presented in Java8. The training is counted on beginners in the subject who like discovering the new horizons or for those who want to become more firm in using the new lambda features.
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...pgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Уникальный семинар от опытного "базиста" Ивана Фролкова призван наглядно пояснить слушателям адекватность применения реляционных СУБД на задачах веба. В рамках доклада Иван рассмотрит типичные "грабли", на которые натыкаются разработчики, и субоптимальные решения, изобретаемые с целью побороть возникшие проблемы. В качестве альтернативы, коллега Фролков наглядно пояснит, как эти же задачи решаются штатными средствами PostgreSQL.
В качестве бонуса Иван — "ветеран" промышленной разработки ПО для реляционных СУБД — проведет краткий ликбез по рекомендуемым практикам построения SQL-запросов и программирования на языке PL/PGSQL.
Java 8, самой заметной фичей которой стало появление лямбд, вышла два года назад, а в этом году мы даже начали её использовать в продакшен коде Идеи. Такое заметное нововведение в языке вызывает множество вопросов. Какие возможности перед нами открываются и какие проблемы при неаккуратном использовании лямбд могут возникнуть, как лямбды устроены внутри, во что они компилируются и как исполняются — вот темы, которые мы обсудим на докладе.
В лекции подробно рассмотрены тонкие моменты языка JavaScript, с которыми часто возникают основные проблемы. Наглядные примеры и рецепты помогают лучше понять его особенности.
http://bit.ly/2mainstream
Никита Прокопов из AboutEcho.com рассказывает о Clojure, 6 марта 2013
Эта лекция — часть курса «Немейнстримовые технологии разработки», читаемого в Новосибирском Государственном Университете
Becoming Your Best: New Executive Director Training nado-web
Whether you have been on the job for 3 days or 3 years, you probably feel as if you have a long way to go in terms of feeling comfortable as an RDO executive director. This session was developed by a former RDO executive director who went through many of the same situations you are facing today. Not only will he share his experiences, but he will walk you through a series of group exercises aimed at helping you develop skills needed to navigate through tough situations, better communicate with your many audiences (staff, board, funders, stakeholders), overcome the angst of transitioning from peer to boss, engage your staff, maintain current programs while bringing on new ones, hone in on your “inner leader” skills and talents, and much more. New executive directors, and those in need of a re-charge, will find the content and conversation extremely valuable.
Steve Etcher, Manager, Location Strategies, MarksNelson, Kansas City, MO
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...pgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Уникальный семинар от опытного "базиста" Ивана Фролкова призван наглядно пояснить слушателям адекватность применения реляционных СУБД на задачах веба. В рамках доклада Иван рассмотрит типичные "грабли", на которые натыкаются разработчики, и субоптимальные решения, изобретаемые с целью побороть возникшие проблемы. В качестве альтернативы, коллега Фролков наглядно пояснит, как эти же задачи решаются штатными средствами PostgreSQL.
В качестве бонуса Иван — "ветеран" промышленной разработки ПО для реляционных СУБД — проведет краткий ликбез по рекомендуемым практикам построения SQL-запросов и программирования на языке PL/PGSQL.
Java 8, самой заметной фичей которой стало появление лямбд, вышла два года назад, а в этом году мы даже начали её использовать в продакшен коде Идеи. Такое заметное нововведение в языке вызывает множество вопросов. Какие возможности перед нами открываются и какие проблемы при неаккуратном использовании лямбд могут возникнуть, как лямбды устроены внутри, во что они компилируются и как исполняются — вот темы, которые мы обсудим на докладе.
В лекции подробно рассмотрены тонкие моменты языка JavaScript, с которыми часто возникают основные проблемы. Наглядные примеры и рецепты помогают лучше понять его особенности.
http://bit.ly/2mainstream
Никита Прокопов из AboutEcho.com рассказывает о Clojure, 6 марта 2013
Эта лекция — часть курса «Немейнстримовые технологии разработки», читаемого в Новосибирском Государственном Университете
Becoming Your Best: New Executive Director Training nado-web
Whether you have been on the job for 3 days or 3 years, you probably feel as if you have a long way to go in terms of feeling comfortable as an RDO executive director. This session was developed by a former RDO executive director who went through many of the same situations you are facing today. Not only will he share his experiences, but he will walk you through a series of group exercises aimed at helping you develop skills needed to navigate through tough situations, better communicate with your many audiences (staff, board, funders, stakeholders), overcome the angst of transitioning from peer to boss, engage your staff, maintain current programs while bringing on new ones, hone in on your “inner leader” skills and talents, and much more. New executive directors, and those in need of a re-charge, will find the content and conversation extremely valuable.
Steve Etcher, Manager, Location Strategies, MarksNelson, Kansas City, MO
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...OdessaFrontend
Дмитрий Ховрич рассказывает как использовать строгую типизацию TypeScript и писать надёжный код в функциональном стиле. А также делится знаниями как использовать функторы и монады в ежедневной фронтенд разработке.
Guava - open-source библиотека, разработанная в основном инженерами компании Google, в которой есть множество полезных утилит для написания эффективного и красивого кода. В Guava решено множество типичных задач, которые часто возникают при работе с примитивами, строками, коллекциями, параллельными вычислениями, кэшированием данных и многим другим. В докладе поговорим о возможностях, которые предоставляет Guava, рассмотрим примеры использования утилит библиотеки.
Developers want to make very few errors in their code and to spot them as early as possible: with the help of unit tests, or earlier, during compilation, or best of all, immediately after they typed something wrong in their IDE. This is what static code analyzers are for. Some of them are built-in, others need to be run separately, some check just about any code, the others require it to be annotated first, and there are tools that are a little bit of all. Do the ends justify the means? Is it even worth trying? What kind of errors can be spotted by static code analysis? How sure can we be if what an analyzer gives us is a real error or a false positive? This talk hopefully helps you answer these questions.
Докладчик:
Александр Сапронов
Описание:
Мы рассмотрим популярные библиотеки для функционального программирования на Python — fn.py, functools, itertools, funcy, hask, Toolz. Узнаем возможности каждой из библиотеки, а также как в динамическом язык имитировать мощную систему типов. Затронем характеристики функционального программирования и проверим помогают ли библиотеки выполнить.
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=v7uBLSm6ft8
06 октября 2015. Как приручить дракона: введение в LLVM (Дмитрий Кашицын, HDsoft)
«В этом докладе мы кратко расскажем о таком звере, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.»
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
10 июня 2015. Дмитрий Кашицын (HDsoft) дает обзор LLVM.
http://techtalks.nsu.ru
Видеозапись: https://plus.google.com/events/ctes98f7uhf19t5jlvlbk24dan4
В этом докладе мы кратко расскажем о таком звере, как LLVM, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
31 мая – 1 июня в Киеве состоялась конференция HOTCODE 2013.
Сергей Тепляков, эксперт Luxoft Training по .Net, С++ и архитектуре приложений, выступил с докладом «C# Deep Dive».
Тезисы доклада:
«Когда-то в далеком 2002-м году язык C# был прост, как 2 копейки. Но у любого «живого» языка есть одна особенность, приятная и неприятная одновременно — в язык начинают добавляться новые возможности, чтобы наши с вами типовые задачи решались проще и эффективнее. Но с каждой новой возможностью появляются и свои тонкости, незнание которых может лишить столь нужных в нашей жизни конечностей, причем иногда самым изощренным образом. А поскольку язык C# развивается очень динамично, то за время жизни на его просторах появилось много маленьких грабелек, которые мы с вами и научимся обходить ;)».
Solit 2014, EcmaScript 6 in Action, Трухин Юрий solit
Юрий Трухин, Россия. Эксперт по облачным технологиям хостинговой компании InfoboxCloud. В прошлом – обладатель статуса Microsoft Most Valuable Professional. Гик, стратег, разработчик. Подробнее на trukhin.com
«Обзор InfoboxCloud для разработчиков». Development секция. Высокий уровень подготовки. Для разработчиков.
В этом докладе будет рассказано об устройстве InfoboxCloud из первых рук, о деталях внутренней реализации, о том, какую пользу несет облако для разработчиков и о будущем InfoboxCloud. Будут рассмотрены 2 кита облачных технологий: IaaS и PaaS без vendor-lock. Отличная возможность спросить обо всём, что касается PaaS/IaaS непосредственно архитектора и разработчика этих систем.
«EcmaScript 6 in Action». Development секция. Для разработчиков.
Поговорим о том, как жизнь разработчиков изменится с приходом нового стандарта.
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухинcorehard_by
В C++11 добавили новое ключевое слово - constexpr. Выглядит оно весьма невзрачно, да и на первый взгляд кажется, что смысла в нём маловато... Для чего же оно нужно, какие у него есть тайные супер способности и какую роль оно сыграет в дальнейшем развитии языка C++ - обо всём об этом мы и поговорим.
Solution for the reactive relational DB connection when programming using Spring WebFlux. When you want all you app to be reactive, don't make JDBC DB connection a bottlenack. Use R2DBC driver. In the presentation I share my experience on how to work with the driver, and if it is already ready to be used in serious projects on production. The talk was presented at Devoxx Ukraine, Nov 1, 2019.
The presentation from Java zone 2018 about
* how to teach programming to kids of different age,
* since which age it's good to teach programming to kids,
* ideas how to organise a lesson using a BB-8 robot
* what kids of lesson fits better to the older kids
Ideas on how to conduct a memorable programming lesson with kids are here. I've used the BB-8 robot from the Star Wars to teach children to code. It can be programmed with the Sphero Edu application installed on a phone or as a Google Chrome plugin.
There are also some general advice on how the mind of a kid gets developed, from which age it's good to give specific knowledge to kids and detailed info about 8-9 years old kids.
More on the subject you may read in the corresponding blog post: https://medium.com/@ladyInIT/kids-of-different-age-program-bb42ecb6fd06
The presentation was made for GeeCON 2018 held in Krakow.
В презентации рассказывается о структурах памяти в JVM: Heap, Non-Heap, Stack, об атомарности операций и о garbage collector. Рассмотрен пример, как работает стек. Также, приведены примеры, как использовать jVisualVM и что она может показать.
Презентация для JuJa вебинара о том, как писать рекурсивные программы с примером о вычислении факториала и чисел Фибоначчи. Также рассказывается о поиске линейном, бинарном, в глубину и в ширину, как работает поисковая система.
Презентация сделана для новичков в деле программистов.
Презентация делалась для JuJa конференции - Java конференции для (пре) Juniors: https://juja.com.ua/materials/jujacon-2017/
В ней
- описываются основные темы-вопросы, которые часто спрашивают на собеседовании на позицию Junior Java Developer;
- советы, что спросить собеседующего;
- как себя позиционировать, как относиться к собеседованию, как не бояться и как понять, что вам "туда".
В презентации в легком для детей формате описано, как создать HTML таблицу, как вставить туда картинки, как изменить шрифта, как поставить ссылки. Предлагается сделать открытку родителям в виде HTML таблицы и послать по почте.
4. Чем ФП приятно?Чем ФП приятно?
Функция не может поменять значение переменной вне
своей видимости, все переменные final (рай для юнит
тестов)
Внешние состояние не влияет на функцию (удобно
отлаживать и замещать части кода).
Встроенная многопоточность (кому нравится думать
про «разделяй и властвуй?»)
Ленивые (отложенные) вычисления - выполняется
только нужный код в момент, когда надо результат.
5. Чем ФП чревато?Чем ФП чревато?
Состояние не хранится (нет переменных)
Все переменные final или const, нет public (как вам
код с такими ограничениями?)
Встроенная многопоточность (к сожалению пока не
на высшем уровне)
Ленивые (отложенные) вычисления - выполняется
только используемый код в «когда захочу» момент.
Тяжело контролировать очередность действий.
9. КАК делаем -> ЧТОКАК делаем -> ЧТО
делаем?делаем?
Imperative style:
public boolean isPrime(int number) {
for (int curNumb = 2; curNumb <= number/2; curNumb++) {
if (number % curNumb == 0) {
return false;
}
}
return true;
}
DECLARATIVE STYLE:
public boolean isPrimeDeclarative(final int number) {
return IntStream.rangeClosed(2, number/2)
.noneMatch(curNumb -> number % curNumb == 0);
}
10. Добавим проверку наДобавим проверку на
знак числазнак числа
public boolean isPrimeImperative(int number) {
if (number < 0) {
return false;
}
for (int curNumb = 2; curNumb <= number / 2; curNumb++) {
if (number % curNumb == 0) {
return false;
}
}
return true;
}
public boolean isPrimeDeclarativeNegativeNumbCheck(final int number) {
return number >= 0 && IntStream.rangeClosed(2, number.2)
.noneMatch(curNumb -> number % curNumb == 0);
}
11. Ну… надо бы еще наНу… надо бы еще на
что-то посмотретьчто-то посмотреть
12. Кого на собеседовании неКого на собеседовании не
просили посчитать факториал?просили посчитать факториал?
public static int factorialOf(int number) {
if (number >= 0) {
int factorial = 1;
for (int curNumb = 2; curNumb <= number; curNumb++){
factorial = factorial * curNumber;
}
return factorial;
} else throw new IllegalArgumentException("Factorial can be counted only
of not negative numbers.");
}
6 строчек!
13. public static int factorialOf(int number) {
if (number > 0) return number*factorialOf(number-1);
if (number == 0) return 1;
else throw new IllegalArgumentException("Factorial can be counted only of not
negative numbers.");
}
3 строчки!
Факториал через цикл каждыйФакториал через цикл каждый
напишет. А рекурсия во чтонапишет. А рекурсия во что
обойдется?обойдется?
public static int factorialOf(int number) {
if (number >= 0)
return IntStream.rangeClosed(2, number)
.reduce(1, (accResult, curNumb) -> accResult * curNumb);
else throw new IllegalArgumentException("Factorial can be counted only of not negative
numbers.");
}
3 строчки!
14. – Я и многие другие
“Не делайте что-то только потому, что вы
можете это сделать. Делайте красиво.”
15. Chuck Norris can do multipleChuck Norris can do multiple
inheritance in Javainheritance in Java
16. Я скажу вамЯ скажу вам
больше, не толькобольше, не только
он может. Вы тоже!он может. Вы тоже!
С помощьюС помощью
интерфейсов,интерфейсов,
правда.правда.
17. А что если бы Cлон был Моськой, аА что если бы Cлон был Моськой, а
Моська Cлоном?Моська Cлоном?
interface Elephant {
default String makeSound(String name) {
return name + ": Не злите меня!";
}
}
interface Dog {
default String makeSound(String name) {
return name + ": Гав-гав";
}
}
18. class EveryDogWantsToBeAnElephant implements Dog, Elephant {
@Override
public String makeSound(String name) {
return name + ": Я спокоен";
}
public static void main(final String[] args) {
EveryDogWantsToBeAnElephant elephantDog = new
EveryDogWantsToBeAnElephant();
Elephant e = new Elephant(){};
Dog d = new Dog(){};
System.out.println(e.makeSound("Слон"));
System.out.println(d.makeSound("Моська"));
System.out.println(elephantDog.makeSound("Моська-слон"));
}}
А что если бы Cлон был Моськой, аА что если бы Cлон был Моськой, а
Моська Cлоном?Моська Cлоном?
СлонСлон: Не злите меня!: Не злите меня!
МоськаМоська: Гав-гав: Гав-гав
МоськаМоська--слонслон: Я спокоен: Я спокоен
19. Множественное наследование - это когда
есть дефолтная реализация метода с
одинаковым названием в каждом
интерфейсе.
А как себя будут вести статические и
абстрактные методы?
20. Статические методыСтатические методы
К ним мы обращаемся как
НазваниеКласса.имяМетода. По
сути эта комбинация всегда
уникальна и ее можно
воспринимать целиком, как
название
interface Dog {
static String walk() {
return "Я бегаю быстренько своими
маленькими лапками.»;
}}
interface Elephant {
static String walk() {
return "Я большой и ступаю тихо но тяжело.";
}}
——————————————————————
———————————————
System.out.println(Elephant.walk());
System.out.println(Dog.walk());
OUTPUT:
Я большой и ступаю тихо но тяжело.
Я бегаю быстренько своими маленькими
лапками.
21. Абстрактные методыАбстрактные методы
Когда мы инстанциируем абстрактный класс
(интерфейс), то надо реализовать все абстрактные
методы.
Но если мы имплементируем интерфейсы с
одинаковыми названиями методов, достаточно
описать только один из них.
22. Пример: Comparator с его int compare(T o1, T o2),
Comparable с его int compareTo(T o)
и другие
Интерфейс, у которого есть только один
абстрактный метод называется
функциональным интерфейсом
23. 1. Можно по-старинке:
Elephant e = new Elephant() {
@Override
public boolean isProud() {
return false;
}
};
2. Можно по-модному:
Elephant e = () -> { return false; };
3. А можно без лишних слов:
Elephant e = () -> false;
Реализуем функциональныйРеализуем функциональный
интерфейсинтерфейс
24. interface Elephant {
boolean isProud();
}
interface Dog {
boolean isProud();
}
System.out.println("Слон горделив: " + e.isProud());
System.out.println("Моська горделива: " + d.isProud());
System.out.println("Моська-слон горделив: " + elephantDog.isProud());
OUTPUT:
Слон горделив: false
Моська горделива: true
Моська-слон горделив: false
Функциональный интерфейсФункциональный интерфейс
вызываем точно так жевызываем точно так же
26. ПредикатыПредикаты
1. Обычный предикат:
public Predicate<Integer> isGreaterThan2New() {
return a -> a > 2;
}
Как это выглядело раньше:
public boolean isGreaterThan2Old(Integer a) {
return a > 2;
}
2. Обычный би-предикат:
public BiPredicate<Integer, Integer> isGreaterThanFunc() {
return (a, b) -> a > b;
}
Как это выглядело раньше:
public boolean isGreaterThan(Integer a, Integer b) {
return a > b;
}
ВсегдаВсегда
возвращаютвозвращают
булеан,булеан,
реализуютреализуют
интерфейс синтерфейс с
методомметодом
booleanboolean testtest((TT t)t);;
Если реализуется метод boolean test(T t),Если реализуется метод boolean test(T t),
почему нигде нет этого названия?почему нигде нет этого названия?
28. ФункцииФункции
1. Обычный предикат:
public Function<Integer, Integer> multiplyFuncBy2() {
return (a) -> a * 2;
}
Как это выглядело раньше:
public Integer multiplyBy2(Integer a) {
return a * 2;
}
2. Обычный би-предикат:
public BiFunction<Integer, Integer, Integer> multiplyFuncBy() {
return (a, b) -> a * b;
}
Как это выглядело раньше:
public Integer multiplyFuncBy(Integer a, Integer b) {
return a * b;
}
В отличие отВ отличие от
предикатов,предикатов,
возвращают тип,возвращают тип,
указанный науказанный на
последнем месте ипоследнем месте и
принимает типы,принимает типы,
указанные вначалеуказанные вначале
29. Как применяемКак применяем
предикатыпредикаты
1. Обычный и би-предикат, аналогичные методы:
boolean actual = p.isGreaterThan2New().test(4);
boolean actual = p.isGreaterThan2Old(4);
p.isGreaterThanNew().test(4, 8);
p.isGreaterThanOld(4, 8);
2. Предикат и соответствующий метод в стриме:
values.stream().filter(p.isGreaterThan2New( ))
.collect(Collectors.toList());
List<Integer> actual = values.stream()
.filter(v ->
p.isGreaterThan2(v)).collect(Collectors.toList());
Нету параметра.Нету параметра.
Стрим самСтрим сам
передает.передает.
30. Как применяемКак применяем
функции?функции?
1. Обычная и би-функция, аналогичные методы:
int actual = f.multiplyFuncBy2().apply(5);
int actual = f.multiplyBy2(5);
f.multiplyFuncBy().apply(5, 3);
f.multiplyBy(5, 3);
2. Функция и соответствующий метод в стриме:
values.stream().map(f.multiplyFuncBy2()).skip(2).limit(2).collect(
Collectors.toList());
List<Integer> actual = values.stream()
.map(v -> f.multiplyFuncBy().apply(v, 3))
.skip(2).limit(2).collect(Collectors.toList());
Параметр передаетсяПараметр передается
через apply()через apply()
36. Это совсем не все,Это совсем не все,
но основное, чтоно основное, что
надо знать о Javaнадо знать о Java
Тут код с презентации и слайды
https://github.com/olexandra-dmytrenko/LambdasForConfs.git