Slides for my PyCon and DevDay talk about the idea of Underscore spread onto other languages.
Video (in russian) is available here http://www.youtube.com/watch?v=lGAC6ftYUS0#t=12100
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
В своем докладе Олег расскажет о замене стандартных функций на более быстрые и об ускорении работы python. Также продемонстрирует несколько примеров быстрых конструкций python.
Slides for my PyCon and DevDay talk about the idea of Underscore spread onto other languages.
Video (in russian) is available here http://www.youtube.com/watch?v=lGAC6ftYUS0#t=12100
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
В своем докладе Олег расскажет о замене стандартных функций на более быстрые и об ускорении работы python. Также продемонстрирует несколько примеров быстрых конструкций python.
Java имеет огромное множество книг о том как правильно писать код на этом языке, какие практити стоит использовать из раза в раз для реализации стандартных паттернов программирования. За 25 лет своей истории Java накопила много проблем. Доклад проливает свет как Kotlin решает проблемы, которые есть в Java и делает программистов счастливыми снова.
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...pgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Уникальный семинар от опытного "базиста" Ивана Фролкова призван наглядно пояснить слушателям адекватность применения реляционных СУБД на задачах веба. В рамках доклада Иван рассмотрит типичные "грабли", на которые натыкаются разработчики, и субоптимальные решения, изобретаемые с целью побороть возникшие проблемы. В качестве альтернативы, коллега Фролков наглядно пояснит, как эти же задачи решаются штатными средствами PostgreSQL.
В качестве бонуса Иван — "ветеран" промышленной разработки ПО для реляционных СУБД — проведет краткий ликбез по рекомендуемым практикам построения SQL-запросов и программирования на языке PL/PGSQL.
Александр Щепановский «Почему каждому языку нужен свой _»DevDay
Такие библиотеки как funcy и underscore часто связывают с функциональным программированием, но настоящий их фокус - это практичность. Задача их - упростить манипулирование данными, коллекциями, функциями и даже потоком управления, а также абстрагировать часто встречащиеся полезные поведения. В своём докладе я приведу жизненные примеры использования всего этого, а также расскажу об идеях заложенных в и продвигаемых funcy.
«Опыт использования каналов в корутинах в боевом проекте» Григорий ФедоровMail.ru Group
Каналы — это способ передавать поток данных между корутинами.
В этом докладе пойдет речь об опыте применения корутин и каналов в нашем новом проекте “Маруся”:
- Почему мы решились использовать каналы, несмотря на экспериментальный статус, и были ли альтернативы?
- Как использовали каналы мы, и как использовать правильно?
- А также о том, как пришлось написать пару операторов из Rx, и чем их можно заменить?
[Expert Fridays] Dmitry Isaev - Функциональные велосипеды в JavaProvectus
Есть ли в джава функциональщина? Если есть - нужна ли она? Если нужна - как ее лучше приготовить? Скандалы, интриги, расследования. Немного Vavr, стримов и монад на закуску
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Ontico
Многие современные высоконагруженные системы построены с использованием очередей. Не является исключением и внутренний сервис обработки OAuth токенов, который создала наша команда. Исключением является то, что и в качестве основного хранилища, и в качестве всех очередей используется один и тот же продукт - Tarantool. Более того, мы поставили себе амбициозную цель по отказоустойчивости - полную доступность сервиса, когда уходят любые два из трёх датацентров, и успешно её достигли.
При решении мы столкнулись с массой интересных инженерных задач и в нашем докладе мы расскажем вам о том, какие технологии и подходы использовались. В частности, рассмотрим более детально такие вещи, как:
- создание deadline очереди и проблемы, с ней связанные;
- создание кольцевой очереди;
- интеграция между собой шардинга, Raft и очередей;
- как мы победили split brain ;)
Разработка крупного Standalone проекта на юнити: улучшаем производительностьВадим Воробьев
Презентация к докладу на DevGamm 2015, Минск.
В докладе рассказывлось о технических тонкостях оптимизации под ПК в Unity на примере The Godlike и приводились истории разработки. Как использовать кодогенерацию, что может профайлер Unity, как правильно работать с UI и почему не стоит связываться с LINQ.
Python&Printer / Андрей Пучко / penta.byPython Meetup
Андрей рассказал о личном опыте сражений за печать отчетов из программ на Python. Речь шла о полезных инструментах и форматах документов (PDF, RTF, DOCX, XLS, ODT, HTML) которые можно готовить к печати при помощи Python.
Презентация со встречи сообщества SPb Python Interest Group рассказывающая об устройстве словарей в Python.
В презентации рассмотрена работа словаря в CPython 2.x, словаря в CPython 3.x, а также рассмотрены изменения в CPython 3.6.
Помимо CPython рассмотрены версии словаря в альтернативных реализациях Python, таких как PyPy, IronPython и Jython.
Java имеет огромное множество книг о том как правильно писать код на этом языке, какие практити стоит использовать из раза в раз для реализации стандартных паттернов программирования. За 25 лет своей истории Java накопила много проблем. Доклад проливает свет как Kotlin решает проблемы, которые есть в Java и делает программистов счастливыми снова.
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...pgdayrussia
Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL.
Уникальный семинар от опытного "базиста" Ивана Фролкова призван наглядно пояснить слушателям адекватность применения реляционных СУБД на задачах веба. В рамках доклада Иван рассмотрит типичные "грабли", на которые натыкаются разработчики, и субоптимальные решения, изобретаемые с целью побороть возникшие проблемы. В качестве альтернативы, коллега Фролков наглядно пояснит, как эти же задачи решаются штатными средствами PostgreSQL.
В качестве бонуса Иван — "ветеран" промышленной разработки ПО для реляционных СУБД — проведет краткий ликбез по рекомендуемым практикам построения SQL-запросов и программирования на языке PL/PGSQL.
Александр Щепановский «Почему каждому языку нужен свой _»DevDay
Такие библиотеки как funcy и underscore часто связывают с функциональным программированием, но настоящий их фокус - это практичность. Задача их - упростить манипулирование данными, коллекциями, функциями и даже потоком управления, а также абстрагировать часто встречащиеся полезные поведения. В своём докладе я приведу жизненные примеры использования всего этого, а также расскажу об идеях заложенных в и продвигаемых funcy.
«Опыт использования каналов в корутинах в боевом проекте» Григорий ФедоровMail.ru Group
Каналы — это способ передавать поток данных между корутинами.
В этом докладе пойдет речь об опыте применения корутин и каналов в нашем новом проекте “Маруся”:
- Почему мы решились использовать каналы, несмотря на экспериментальный статус, и были ли альтернативы?
- Как использовали каналы мы, и как использовать правильно?
- А также о том, как пришлось написать пару операторов из Rx, и чем их можно заменить?
[Expert Fridays] Dmitry Isaev - Функциональные велосипеды в JavaProvectus
Есть ли в джава функциональщина? Если есть - нужна ли она? Если нужна - как ее лучше приготовить? Скандалы, интриги, расследования. Немного Vavr, стримов и монад на закуску
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Ontico
Многие современные высоконагруженные системы построены с использованием очередей. Не является исключением и внутренний сервис обработки OAuth токенов, который создала наша команда. Исключением является то, что и в качестве основного хранилища, и в качестве всех очередей используется один и тот же продукт - Tarantool. Более того, мы поставили себе амбициозную цель по отказоустойчивости - полную доступность сервиса, когда уходят любые два из трёх датацентров, и успешно её достигли.
При решении мы столкнулись с массой интересных инженерных задач и в нашем докладе мы расскажем вам о том, какие технологии и подходы использовались. В частности, рассмотрим более детально такие вещи, как:
- создание deadline очереди и проблемы, с ней связанные;
- создание кольцевой очереди;
- интеграция между собой шардинга, Raft и очередей;
- как мы победили split brain ;)
Разработка крупного Standalone проекта на юнити: улучшаем производительностьВадим Воробьев
Презентация к докладу на DevGamm 2015, Минск.
В докладе рассказывлось о технических тонкостях оптимизации под ПК в Unity на примере The Godlike и приводились истории разработки. Как использовать кодогенерацию, что может профайлер Unity, как правильно работать с UI и почему не стоит связываться с LINQ.
Python&Printer / Андрей Пучко / penta.byPython Meetup
Андрей рассказал о личном опыте сражений за печать отчетов из программ на Python. Речь шла о полезных инструментах и форматах документов (PDF, RTF, DOCX, XLS, ODT, HTML) которые можно готовить к печати при помощи Python.
Презентация со встречи сообщества SPb Python Interest Group рассказывающая об устройстве словарей в Python.
В презентации рассмотрена работа словаря в CPython 2.x, словаря в CPython 3.x, а также рассмотрены изменения в CPython 3.6.
Помимо CPython рассмотрены версии словаря в альтернативных реализациях Python, таких как PyPy, IronPython и Jython.
This one hour webinar is aimed at everyone involved in providing video based services in higher education who is interested in how these services can be successfully implemented on a campus-wide basis. Issues that our speakers will discuss include how academics and students can be supported in creating their own video-based resources, how quality and production values are dealt with and the management of technical and human resources to support these types of services.
Renee Hobbs is an American educator, scholar and well known advocate for media literacy education. She is a Professor in the Harrington School of Communication and Media at the University of Rhode Island, where she directs the Media Education Lab. One of Renee’s more recent initiatives is the highly successful Mind over Media resource for teachers and others interested in exploring propaganda with students. During this webinar, Renee will be talking about the background to this initiative and why she believes it is important for students to learn how to recognise propaganda and to develop a responsible attitude to it in their daily lives
31 мая – 1 июня в Киеве состоялась конференция HOTCODE 2013.
Сергей Тепляков, эксперт Luxoft Training по .Net, С++ и архитектуре приложений, выступил с докладом «C# Deep Dive».
Тезисы доклада:
«Когда-то в далеком 2002-м году язык C# был прост, как 2 копейки. Но у любого «живого» языка есть одна особенность, приятная и неприятная одновременно — в язык начинают добавляться новые возможности, чтобы наши с вами типовые задачи решались проще и эффективнее. Но с каждой новой возможностью появляются и свои тонкости, незнание которых может лишить столь нужных в нашей жизни конечностей, причем иногда самым изощренным образом. А поскольку язык C# развивается очень динамично, то за время жизни на его просторах появилось много маленьких грабелек, которые мы с вами и научимся обходить ;)».
3. Groovy, http://groovy.codehaus.org/
● Работает в JVM
● Статическая и динамическая типизация
● Совместим с Java и всеми библиотеками
● Динамический язык
● Может использоваться как скриптовый
● Низкий порог вхождения
● Синтаксический сахар :-)
4. Две программы
println “Hello World” import java.io.*;
public class HelloWorld {
public static void
main(String[] args) {
System.out.println("Hello
World");
}
}
5. import java.io.*;
import java.util.*;
public class HelloWorld {
public static List<Integer> kvadrat(List<Integer> x) {
List<Integer> y = new ArrayList<>(x.size());
for (Integer n : x) {
y.add( (int)Math.round(Math.pow(n, 2)) );
}
return y;
}
public static void main(String[] args) {
List<Integer> x = new ArrayList<>();
x.add(1); x.add(2); x.add(3); x.add(4); x.add(5);
List<Integer> y = kvadrat(x);
for (Integer n : y) {
System.out.println(n);
}
}
}
6. public static List<Integer> kvadrat(List<Integer> x) {
List<Integer> y = new ArrayList<>(x.size());
for (Integer n : x) {
y.add((int) Math.round(Math.pow(n, 2)));
}
return y;
}
List<Integer> x = new ArrayList<>();
x.add(1); x.add(2); x.add(3); x.add(4); x.add(5);
List<Integer> y = kvadrat(x);
for (Integer n : y) {
System.out.println(n);
}
7. // Инициализируем x в одну строчку, используем power
public static List<Integer> kvadrat(List<Integer> x) {
List<Integer> y = new ArrayList<>(x.size());
for (Integer n : x) {
y.add(n.power(2));
}
return y;
}
List<Integer> x = [1, 2, 3, 4, 5];
List<Integer> y = kvadrat(x);
for (Integer n : y) {
System.out.println(n);
}
8. // Используем collect. Groovy отлично работает со списками
public static List<Integer> kvadrat(List<Integer> x) {
List<Integer> y = x.collect({ n -> n.power(2) });
return y;
}
List<Integer> x = [1, 2, 3, 4, 5];
List<Integer> y = kvadrat(x);
for (Integer n : y) {
System.out.println(n);
}
9. // Избавимся от лишних переменных. В Java мы не могли
// без них обойтись, а в Groovy - запросто
public static List<Integer> kvadrat(List<Integer> x) {
return x.collect({ n -> n.power(2) });
}
List<Integer> y = kvadrat([1, 2, 3, 4, 5]);
for (Integer n : y) {
System.out.println(n);
}
10. // Грувификация: убрали типы, точки с запятыми, return.
// Перешли на .each
def kvadrat(x) { x.collect { n -> n.power(2) } }
def y = kvadrat([1, 2, 3, 4, 5])
y.each { n ->
System.out.println(n)
}
11. // Теперь и переменная y лишняя :)
def kvadrat(x) { x.collect { n -> n.power(2) } }
kvadrat([1, 2, 3, 4, 5]).each { n ->
System.out.println(n)
}
12. // Переменная n тоже, используем служебную it
def kvadrat(x) { x.collect { it.power(2) } }
kvadrat([1, 2, 3, 4, 5]).each { println it }
13. // Метод kvadrat в общем-то тоже необязателен :)
[1, 2, 3, 4, 5].collect { it.power(2) }.each { println it }
14. Две программы
[1, 2, 3, 4, 5].collect {
it.power(2) }.each {
println it
}
import java.io.*;
import java.util.*;
public class HelloWorld {
public static List<Integer> kvadrat(List<Integer> x) {
List<Integer> y = new ArrayList<>(x.size());
for (Integer n : x) {
y.add( (int)Math.round(Math.pow(n, 2)) );
}
return y;
}
public static void main(String[] args) {
List<Integer> x = new ArrayList<>();
x.add(1); x.add(2); x.add(3); x.add(4); x.add(5);
List<Integer> y = kvadrat(x);
for (Integer n : y) {
System.out.println(n);
}
}
}
15. Немного метапрограммирования
final a = [1, 2, 3, 4, 5], b = [2, 3, 4, 5, 6]
List.metaClass.kvadrat = { delegate.collect { it.power(2) } }
println "${a.kvadrat()} ${b.kvadrat()}"
import javax.servlet.http.HttpServletRequest
HttpServletRequest.metaClass.getRealIp = {
delegate.getHeader('X-Real-Ip') ?: delegate.remoteAddr }
16. Миксины
class Eat { def eat() { println "I ate" } }
class Drink { def drink() { println "I drinked" } }
class Animal {}; class Mammal extends Animal {}
@Mixin(Eat) class Human extends Mammal {}
final me = new Human()
me.eat()
Human.mixin(Drink)
me.drink()
17. Прокси
class Human {
def eat() {}
def drink() {}
}
final x = [ eat: { println "I ate." }, drink: { println "I drinked." } ] as Human
x.eat()
println "${x.class}: ${x instanceof Human}"
I ate.
class Human1_groovyProxy: true
18. I/O
println new File('/etc/passwd').text
println new URL('http://baron.su/').text
import groovy.json.*
def builder = new JsonBuilder()
builder.human ( name: 'Vasya', height: 180 )
new File('/tmp/out.json').withWriter { w ->
w.println builder.toString()
}
{"human":{"name":"Vasya","height":180}}
19. POGO
class Human {
def name, sex, height, weight
String toString() { "$name ($sex): $height cm $weight kg" }
}
println new Human(name: 'Vasya', sex: 'every day', height: 180, weight: 80)
Vasya (every day): 180 cm 80 kg
20. GORM
class Person {
String name
int age
static constraints = {
name blank: false
}
}
new Person(name: ‘Ruslan’, age: 31).save(flush:true)
final ruslan = Person.findOrCreateByNameAndAge(‘Ruslan’, 31).save()
21. GORM
● Удобная надстройка над Hibernate
● Pessimistic & Optimistic locking
● Мощная система валидации данных
● Все возможности Hibernate доступны
● Convention over Configuration
22. Grails
● Convention over Configuration
● Самый распространённый для web
● Постоянно развивается
● Большое сообщество разработчиков
● Поддержка плагинов
23. Grails. Модель
package dummy
class Password {
String username
String password
String url
static constraints = {
}
}