The 5-th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
Современные процессоры имеют на борту по нескольку вычислительных ядер, позволяющих запускать задачи на них параллельно. И, казалось бы, вот оно — счастье: бей большие задачи на куски, запускай эти куски параллельно на разных ядрах и радуйся.
Но не все так просто. Для того чтобы одновременный доступ к общим данным выполнялся корректно, современные системы используют разные примитивы синхронизации. В основе одних лежат блокировки (locks), в основе других — операции типа сравнение-с-обменом (compare-and-swap). Однако и у тех и у других есть свои слабые места. О них мы и поговорим.
Из доклада вы узнаете, чем блокирующие алгоритмы отличаются от неблокирующих, и какими достоинствами и недостатками обладает каждый из этих классов. Кроме того, будут показаны различные подводные камни тех и других решений: Deadlock, Livelock, Starvation, Mutable vs Immutable hype.
The 5-th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
Современные процессоры имеют на борту по нескольку вычислительных ядер, позволяющих запускать задачи на них параллельно. И, казалось бы, вот оно — счастье: бей большие задачи на куски, запускай эти куски параллельно на разных ядрах и радуйся.
Но не все так просто. Для того чтобы одновременный доступ к общим данным выполнялся корректно, современные системы используют разные примитивы синхронизации. В основе одних лежат блокировки (locks), в основе других — операции типа сравнение-с-обменом (compare-and-swap). Однако и у тех и у других есть свои слабые места. О них мы и поговорим.
Из доклада вы узнаете, чем блокирующие алгоритмы отличаются от неблокирующих, и какими достоинствами и недостатками обладает каждый из этих классов. Кроме того, будут показаны различные подводные камни тех и других решений: Deadlock, Livelock, Starvation, Mutable vs Immutable hype.
The 3rd part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Ontico
JavaScript, который мы пишем, не всегда исполняется, как мы думаем. Виртуальные машины, исполняющие его, делают многое, чтобы он работал быстрее. Но они не всесильны, и чтобы сделать код действительно быстрым, нужно знать их особенности и как все работает под капотом.
Поговорим об этих особенностях, что может служить причиной потери производительности, как это диагностировать и как делать код действительно быстрым. Доклад базируется на опыте, полученном в ходе работы над такими проектами как basis.js (весьма быстрый фреймворк для SPA), CSSO (минификатор CSS, который из медленного стал один из самых быстрых), CSSTree (самый быстрый детальный CSS парсер) и других.
The 2nd part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Доклад на конференции Selenium Camp 2012.
http://seleniumcamp.com/program/#parallel-testing
Видео: http://video.yandex.ru/users/xpinjection/view/105/#hq
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
Как-то так происходит, что “на 10 девчонок по статистике 9 ребят”, а точнее на группу из 5-7 разработчиков – 1 тестировщик. Или его нет совсем. Так что очень часто приходится и код писать, и тестировать, а дата релиза все ближе и ближе.
В тех случаях, когда мы пишем веб-приложение, помочь в нашей нелегкой судьбе может бодрящий микс из Selenium и TestNG... Как это сделали мы, какие потом получили выводы и результаты — все это я и хочу рассказать и показать
Database First! О распространённых ошибках использования РСУБДNikolay Samokhvalov
Мы обсудим несколько фундаментальных ситуаций использования РСУБД (каждая из которых неоднократно встречалась автору), попутно разбирая возможные ошибки:
- элементарная модификация данных;
- работа с датой, временем и временными зонами;
- проверка ограничений целостности;
- очередь заданий;
- пакетная работа с данными (например, удаление пачки записей в таблице);
- полнотекстовый поиск;
- относительно новые задачи (создание API, machine learning).
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6Nikolay Samokhvalov
Первый релиз-кандидат версии 9.6 вышел 1 сентября, а это значит, что совсем скоро будет полноценный релиз. Все вокруг уже успели обсудить новинки, и теперь уже стыдно ничего не знать о таких вещах, как параллелизация выполнения запросов, pushdown для FDW, мониторинг waitlocks, полнотекстовый поиск по фразам или магический \gexec в psql. Чтобы никому не приходилось краснеть, мы быстро пройдёмся по всем основным и интересным моментам версии 9.6.
The 3rd part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Ontico
JavaScript, который мы пишем, не всегда исполняется, как мы думаем. Виртуальные машины, исполняющие его, делают многое, чтобы он работал быстрее. Но они не всесильны, и чтобы сделать код действительно быстрым, нужно знать их особенности и как все работает под капотом.
Поговорим об этих особенностях, что может служить причиной потери производительности, как это диагностировать и как делать код действительно быстрым. Доклад базируется на опыте, полученном в ходе работы над такими проектами как basis.js (весьма быстрый фреймворк для SPA), CSSO (минификатор CSS, который из медленного стал один из самых быстрых), CSSTree (самый быстрый детальный CSS парсер) и других.
The 2nd part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Доклад на конференции Selenium Camp 2012.
http://seleniumcamp.com/program/#parallel-testing
Видео: http://video.yandex.ru/users/xpinjection/view/105/#hq
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
Как-то так происходит, что “на 10 девчонок по статистике 9 ребят”, а точнее на группу из 5-7 разработчиков – 1 тестировщик. Или его нет совсем. Так что очень часто приходится и код писать, и тестировать, а дата релиза все ближе и ближе.
В тех случаях, когда мы пишем веб-приложение, помочь в нашей нелегкой судьбе может бодрящий микс из Selenium и TestNG... Как это сделали мы, какие потом получили выводы и результаты — все это я и хочу рассказать и показать
Database First! О распространённых ошибках использования РСУБДNikolay Samokhvalov
Мы обсудим несколько фундаментальных ситуаций использования РСУБД (каждая из которых неоднократно встречалась автору), попутно разбирая возможные ошибки:
- элементарная модификация данных;
- работа с датой, временем и временными зонами;
- проверка ограничений целостности;
- очередь заданий;
- пакетная работа с данными (например, удаление пачки записей в таблице);
- полнотекстовый поиск;
- относительно новые задачи (создание API, machine learning).
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6Nikolay Samokhvalov
Первый релиз-кандидат версии 9.6 вышел 1 сентября, а это значит, что совсем скоро будет полноценный релиз. Все вокруг уже успели обсудить новинки, и теперь уже стыдно ничего не знать о таких вещах, как параллелизация выполнения запросов, pushdown для FDW, мониторинг waitlocks, полнотекстовый поиск по фразам или магический \gexec в psql. Чтобы никому не приходилось краснеть, мы быстро пройдёмся по всем основным и интересным моментам версии 9.6.
Guava - open-source библиотека, разработанная в основном инженерами компании Google, в которой есть множество полезных утилит для написания эффективного и красивого кода. В Guava решено множество типичных задач, которые часто возникают при работе с примитивами, строками, коллекциями, параллельными вычислениями, кэшированием данных и многим другим. В докладе поговорим о возможностях, которые предоставляет Guava, рассмотрим примеры использования утилит библиотеки.
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Magneta AI
Антон Кириллов, Zeptolab (Москва)
Доклад посвящен обзору ключевых технологий стека Typesafe и анализу ключевых преимуществ и недостатков на примере реального проекта:
* Действительно ли Scala - “более лучшая” Java? Что следует знать, начиная внедрять Scala.
* Play Framework: больше чем просто контейнер. Архитектура и возможности.
* Доступ к базам данных: библиотеки и подходы, эволюция схемы БД во времени
* Actors: безболезненная многопоточность!
* Simple Build Tool: не совсем simple, но крайне функциональный инструмент автоматической сборки.
Рассматриваемые технологии позволяют “из коробки” начать создавать прототипы веб-приложений за очень короткое время и в дальнейшем наращивать их функционал. Тем не менее, из-за молодости стека существует большое количество “граблей”, о которых следует знать, принимая решение об использовании данного набора технологий.
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)Ontico
TypeScript – светлое будущее ES6 уже вчера.
Почему не "Кофе"? Чай полезней.
Что не так с Flow от Facebook?
Реальная практика использования: плюсы и минусы.
Не VisualStudio единым. Особенности работы в других IDE.
Интеграция с уже существующим JS кодом.
Использование совместно с RequireJS. Подводные камни.
Использование TypeScript совместно с React.
TypeScript и Angular.
Плюшки, которых нет в ES6/7 (пока нет): [static] enum, интерфейсы, private, protected, декораторы... Что дают и зачем?
Краткое введение в Scala для разработчиков на других языках. Рассмотрены несколько простых программ, написанных с использованием красивых возможностей Scala.
Вводная лекция в язык C#, для тех кто знает программирование и в особенности C++. В статье будет уделено внимание наиболее важным отличиям языков, будут обсуждаться вопросы производительности и эффективного кода.
Другие интересные статьи по C# ищите тут: http://itw66.ru/blog/c_sharp/
Написание компактного и эффективного кода в C#: http://itw66.ru/blog/c_sharp/520.html
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 секция. Для разработчиков.
Поговорим о том, как жизнь разработчиков изменится с приходом нового стандарта.
2. Scala в двух словах
• Краткость кода как в Ruby
• Возможности IDE как в Java
3. Ruby или Java?
• Ruby
меньше кода => меньше багов
• Java
умный компилятор => меньше багов
• Scala
меньше кода => меньше багов
умный компилятор => меньше багов
4. Erlang или Java?
• Java быстрее.
JVM быстрее Erlang VM.
• Erlang быстрее.
Проще создавать мастштабируемые прил.
• Scala быстрее.
JVM быстрее Erlang VM.
Проще создавать мастштабируемые прил.
5. Мартин Одерски
• Придумал Scala
• Написал компилятор Scala
• Написал компилятор Java
• Соавтор Java generics
• Смешанные Scala+Java проекты в Eclipse, etc
• Microsoft спонсирует Scala.NET
• Компиляция в JavaScript с Google Web Toolkit
10. Элитарность Scala
InfoQ: Тяжело ли найти разработчиков на Scala?
Дэвид Поллак:
Нет. Найти хороших Scala разработчиков легко.
Я могу организовать отличную команду из 10
человек, готовую к работе на следующей неделе.
Они не будут дешёвыми (средняя цена $250/час
плюс то, что возьму я). Они не будут локальными.
Но они будут отличными.
Тяжело найти аутсорсовую команду из 25 Scala
разработчиков за $40/час.
11. Количество фич в Scala
• Намного меньше, чем в C++ или C#
• Сравнимо с Java. Из Java удалены:
static члены
примитивные типы
break и continue
особое понятие об интерфейсах
wildcard’ы
raw типы
enum’ы
• Фичи Scala более унифицированные и гибкие
12. Пример кода на Java
public class Person implements Serializable {
private final String firstName;
private final String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
13. Пример кода на Java (продолжение)
public Person withFirstName(String firstName) {
return new Person(firstName, lastName);
}
public Person withLastName(String lastName) {
return new Person(firstName, lastName);
}
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Person person = (Person) o;
if (firstName != null ? !firstName.equals(person.firstName)
: person.firstName != null) {
return false;
}
14. Пример кода на Java (продолжение)
if (lastName != null ? !lastName.equals(person.lastName)
: person.lastName != null) {
return false;
}
return true;
}
public int hashCode() {
int result = firstName != null ? firstName.hashCode()
: 0;
result = 31 * result +
(lastName != null ? lastName.hashCode() : 0);
return result;
}
public String toString() {
return "Person(" + firstName + "," + lastName + ")";
}
}
15. То же самое на Scala
case class Person(firstName: String, lastName: String)
16. Использование
• Java
Person mr = new Person("Bob", "Dobbelina");
Person miss = new Person("Roberta", "MacSweeney");
Person mrs = miss.withLastName(mr.getLastName());
• Scala
val mr = Person("Bob", "Dobbelina")
val miss = Person("Roberta", "MacSweeney")
val mrs = miss copy (lastName = mr.lastName)
val mrs = miss.copy(lastName = mr.lastName)
val mrs = miss.copy(miss.firstName, mr.lastName)
17. Коллекции
case class User(id: Int, userName: String)
val users: List[User] = // ....
val resultUsers = new ArrayBuffer[User]
for (i <- 0 until users.size) {
if (users(i).userName != "test") {
resultUsers += users(i)
}
}
18. Коллекции
def formatUsers(users: List[User]): String = {
val result = new StringBuilder
for (i <- 0 until users.size) {
val userName = users(i).userName
if (userName != "test") {
result.append(userName)
if (i < users.size - 1) {
result.append(", “)
}
}
}
return result.toString
}
23. formatUsers версия 2.0
def formatUsers(users: List[User]) =
users map (_.userName) filter (_ != "test") mkString ", "
• Нет бага :-)
• Всего 3 шага
• Каждый шаг имеет смысл сам по себе
• Больше повторного использования кода
24. Повторное использование
• formatUsers версия 3.0
def formatUsersInParallel(users: List[User]) =
formatUsers(users.par)
• …
ScalaCL => граф.карта => быстрее в 10-100
раз
25. Java + Google Collections
public String formatUsers(final List<User> users) {
final Collection<String> filteredUserNames = FluentIterable
.from(users)
.transform(new Function<User, String>() {
@Override
public String apply(final User user) {
return user.getUserName();
}
})
.filter(new Predicate<String>() {
@Override
public boolean apply(final String userName) {
return !userName.equals("test");
}
})
.toImmutableList();
return Joiner.on(", ").join(filteredUserNames);
}
26. Паттерны проектирования банды 4-х
• Написание повторно используемого кода
на Java требует больших усилий
• На динамических языках и Scala многие из
этих паттернов тривиальны
• Критика паттернов Питером Норвигом
(директор по исследованиям в Google Inc.)
• ОО тоже когда-то было паттерном
29. Factory
object Car {
def apply(type: String) = {
type match {
case “Race" => new RaceCar
case "Normal" => new NormalCar
case _ => throw new Exception
}
}
}
val myCar = Car("Race“)
30. Visitor
trait Expr {
//...
}
case class Var(value: Int) extends Expr
case class Sum(ex1: Expr, ex2: Expr) extends Expr
object EvalVisitor {
def visit(expr: Expression) = expr match {
case (Var(v)) => v
case (Sum(e1, e2)) => visit(e1) + visit(e2)
}
}
31. Decorator
trait Reader {
type T
def read: T
}
trait BufferedReader extends Reader {
abstract override def read: T = {
// ... buffering code
super.read
}
}
class FileReader extends Reader {
type T = Char
def read: Char = // ... Read somehow
}
val bufferedReader = new FileReader with BufferedReader
32. ОО + ФП = Scala
• Объектная ориентация
- Любое значение – объект
- Любое действие – вызов метода у объекта
• Функциональная ориентация
- Любое действие – вызов функции
- Любая функция – значение, которое можно присвоить
переменной или передать другой функции
• Scala
- Любое значение – объект
- Любое действие – вызов метода у объекта
- Любой метод – функция
- Любая функция – объект
33. Чистое функциональное прог-ание
• Результат любой функции зависит только от
входных параметров
• Любая функция только возвращает результат
• А это значит, что напрямую нельзя:
- Менять значения переменных
- Модифицировать структуры данных
- Менять поля объектов
- Бросать исключения
- Печатать на консоль и читать с неё
- Читать или писать в файл
- Рисовать на экране
34. Работе со строками
• В Java – функциональный подход
• В Ruby – не функциональный подход
35. Сравним
def formatUsers(users: List[User]) =
users map (_.userName) filter (_ != "test") mkString ", "
def formatUsers(users: List[User]): String = {
val result = new StringBuilder
for (i <- 0 until users.size) {
val userName = users(i).userName
if (userName != "test") {
result.append(userName)
if (i < users.size - 1) {
result.append(", “)
}
}
}
return result.toString
}
36. Преимущества ФП
• Части кода не зависят друг от друга
• Код более понятный
• Меньше багов
• Проще параллелизовать
• Проще оптимизировать компилятору
Недостатки ФП
• Иногда больше расход ресурсов
• Иногда сложнее написать
• Иногда невозможно написать
38. Изучение Scala
• Уже 27 книг
• Бесплатные книги:
– Scala for the Impatient
Cay Horstmann
– Programming in Scala
Martin Odersky, Lex Spoon, Bill Venners
– Programming Scala
Alex Payne, Dean Wampler
• Статья для Java’истов: Scala for Java Refugees
39. Scala IDE
• Коммандная строка Scala REPL
• Eclipse
• IntelliJ IDEA
• NetBeans
• Emacs
• TextMate
• …
• Kojo – развлекательная Scala для детей