* Почему Angular 2 такой быстрый и как его ускорить еще сильнее?
* Как работает Change Detection механизм и как им управлять?
* Зачем нам Zone.js и Функциональное Реактивное Программирование?
* Как работать с Redux и Mobx в Angular 2 и что можно от этого выиграть?
Об этом и ряде других вещей вы узнаете из этого доклада.
«Как перестать отлаживать асинхронные вызовы и начать жить»FDConf
Асинхронность в Javascript больше не страшна. Классические триллеры вроде
«Callback Hell» и «Pyramid of Doom» потеряли свою актуальность настолько,что даже Java-программисты перестали пугать ими невинных джуниоров.
Всё благодаря паттернам и библиотекам. Streams, Promises, Async-Await и другие изменили наш код. Теперь он прекрасен.
Пока ещё вымысел? Поговорим о том, как сделать эту картину реальностью. Об основных практиках асинхронного программирования.
Принципах их работы,отличиях и сценариях использования.
How to build solid CI-CD pipeline / Илья Беда (beda.software)Ontico
РИТ++ 2017, Root Conf
Зал Конгресс-холл, 6 июня, 15:00
Тезисы:
http://rootconf.ru/2017/abstracts/2551.html
На основе своего опыта работы в консалтинге я расскажу, как избавить разработчиков от рутинных задач и как сэкономить на ресурсах команды с помощью правильно настроенного CI-CD pipeline.
Единствено верный способ упаковки приложений - это Docker-контейнеры, благодаря этому способу вы сможете унифицировать процесс деплоя. Нужно деплоить приложения с помощью Ansible-плейбука, запакованного в Docker-контейнер, это снижает требования к окружению CI-ранера. Вам нужен только Docker.
...
* Почему Angular 2 такой быстрый и как его ускорить еще сильнее?
* Как работает Change Detection механизм и как им управлять?
* Зачем нам Zone.js и Функциональное Реактивное Программирование?
* Как работать с Redux и Mobx в Angular 2 и что можно от этого выиграть?
Об этом и ряде других вещей вы узнаете из этого доклада.
«Как перестать отлаживать асинхронные вызовы и начать жить»FDConf
Асинхронность в Javascript больше не страшна. Классические триллеры вроде
«Callback Hell» и «Pyramid of Doom» потеряли свою актуальность настолько,что даже Java-программисты перестали пугать ими невинных джуниоров.
Всё благодаря паттернам и библиотекам. Streams, Promises, Async-Await и другие изменили наш код. Теперь он прекрасен.
Пока ещё вымысел? Поговорим о том, как сделать эту картину реальностью. Об основных практиках асинхронного программирования.
Принципах их работы,отличиях и сценариях использования.
How to build solid CI-CD pipeline / Илья Беда (beda.software)Ontico
РИТ++ 2017, Root Conf
Зал Конгресс-холл, 6 июня, 15:00
Тезисы:
http://rootconf.ru/2017/abstracts/2551.html
На основе своего опыта работы в консалтинге я расскажу, как избавить разработчиков от рутинных задач и как сэкономить на ресурсах команды с помощью правильно настроенного CI-CD pipeline.
Единствено верный способ упаковки приложений - это Docker-контейнеры, благодаря этому способу вы сможете унифицировать процесс деплоя. Нужно деплоить приложения с помощью Ansible-плейбука, запакованного в Docker-контейнер, это снижает требования к окружению CI-ранера. Вам нужен только Docker.
...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Ontico
РИТ++ 2017, Root Conf
Зал Пекин + Шанхай, 5 июня, 16:00
Тезисы:
http://rootconf.ru/2017/abstracts/2826.html
Благодаря Docker'у, контейнеры стали доступны каждому. Однако, чтобы развернуть production-систему на Docker'е, нужно решить ряд инфраструктурных задач: логи, мониторинг, бэкапы, отказоустойчивость, апдейты, безопасность. Решить эти задачи "для себя" не сложно, но при попытке превратить свое контейнерное решение в программный продукт возникают проблемы: "глупые" пользователи, нестабильный хостинг, коварные конкуренты и неясное будущее продукта. Эти трудности - системные, и лучше о них знать заранее. Я расскажу о них на примере проекта dockhero.io.
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
Рассказ об основных принципах, которых придерживается Viber в длительной разработке приложения с большой кодовой базой — если разработкой занимается распределённая команда. Мы обсудим используемые технологии, библиотеки, работу с кодом и многое другое.
Продвинутое использование Celery — Александр КошелевYandex
Доклад будет интересен как тем, кто уже знаком с библиотекой для реализации очередей задач Celery, так и тем, кто только собирается её попробовать. Основные темы выступления:
- как устроена Celery;
- как перейти на альтернативные брокеры;
- как обеспечить эффективный доступ к ресурсам;
- как отслеживать работоспособность процессов Celery
Вадим Челышов, Scala Engineer : Все ненавидят SBT Provectus
Как понятно из названия, речь пойдет про sbt – simple/scala/satan build tool. Его боятся даже сами скалисты, им пугают новичков, но в рамках моего доклада я постараюсь вернуть ему добрую честь и объясню почему это один из самых лучших билд тулов, которым вы вообще могли бы пользоваться
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Ontico
Чтобы быстро двигаться, надо быстро двигаться :-)
Скоростная разработка продукта невозможна без непрекращающегося выкатывания свежих изменений в боевое окружение. Именно это позволяет Ultimate-Guitar оставаться #1 world's guitar service.
Когда-то давным-давно мы приняли для себя, что "мы движемся очень быстро и иногда из-за этого что-то ломаем. Недоставленный пользователям продукт/непроверенная гипотеза хуже, чем временная неработоспособность части сервиса. Поэтому мы убираем преграды между новым кодом и продакшном: не тратим время ни на тестирование, ни на строгий релиз-менеджмент".
Многие возникающие проблемы касаются только обслуживания (датацентр, OS, каналы) и мониторинг, естественно, необходим. Ну, а раз уж у нас есть мониторинг, то давайте считать систему единым целым, которая может выходить из строя по различным причинам, одной из которых является ошибка в коде. Это привело нас к идее использовать мониторинг вместо тестирования. К чему это привело, почему мы любим Anturis, Graylog, Grafana, что главное в деплое - это быстрый откат и другие прелести управления звездолётом Ultimate-Guitar с дневным населением больше Москвы на скорости 10 деплоев/час - обо всё этом пойдёт речь в этом докладе:
- Про скорость и цену быстрого развития (Innovation Costs).
- Холакратия в бранчах, "сам себе релиз-инженер", ответственность и честность.
- Скорость отката > скорость деплоя.
- Как умер QA или демоны с tail и Graylog.
- Когда не нужны микросервисы: успеть за 30 секунд, медленный Mercurial и шустрое комбо Git + Capistrano + Ansible.
- Бесполезные фичи, бритва Оккама и пользователи, которые на самом деле любят изменения :-)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)Ontico
В этом году мы перевели наш портал на HTTPS. Это оказалось непростой задачей. Основными проблемами явились рост нагрузки, увеличение Round Trip Times (RTT) и Mixed Content. Мы опробовали различные известные механизмы, призванные нивелировать эти проблемы, но, как оказалось на практике, все они скрывают в себе особенности. Эти особенности стоило знать заранее, но их не удалось почерпнуть из открытых источников.
В этом докладе мы хотим поделиться сложностями, с которыми мы столкнулись, а также тем, к каким выводам в итоге пришли. Надеемся, что набитые нами шишки будут полезны тем проектам, которые только планируют переход на HTTPS.
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Ontico
РИТ++ 2017, Root Conf
Зал Пекин + Шанхай, 5 июня, 16:00
Тезисы:
http://rootconf.ru/2017/abstracts/2826.html
Благодаря Docker'у, контейнеры стали доступны каждому. Однако, чтобы развернуть production-систему на Docker'е, нужно решить ряд инфраструктурных задач: логи, мониторинг, бэкапы, отказоустойчивость, апдейты, безопасность. Решить эти задачи "для себя" не сложно, но при попытке превратить свое контейнерное решение в программный продукт возникают проблемы: "глупые" пользователи, нестабильный хостинг, коварные конкуренты и неясное будущее продукта. Эти трудности - системные, и лучше о них знать заранее. Я расскажу о них на примере проекта dockhero.io.
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
Рассказ об основных принципах, которых придерживается Viber в длительной разработке приложения с большой кодовой базой — если разработкой занимается распределённая команда. Мы обсудим используемые технологии, библиотеки, работу с кодом и многое другое.
Продвинутое использование Celery — Александр КошелевYandex
Доклад будет интересен как тем, кто уже знаком с библиотекой для реализации очередей задач Celery, так и тем, кто только собирается её попробовать. Основные темы выступления:
- как устроена Celery;
- как перейти на альтернативные брокеры;
- как обеспечить эффективный доступ к ресурсам;
- как отслеживать работоспособность процессов Celery
Вадим Челышов, Scala Engineer : Все ненавидят SBT Provectus
Как понятно из названия, речь пойдет про sbt – simple/scala/satan build tool. Его боятся даже сами скалисты, им пугают новичков, но в рамках моего доклада я постараюсь вернуть ему добрую честь и объясню почему это один из самых лучших билд тулов, которым вы вообще могли бы пользоваться
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Ontico
Чтобы быстро двигаться, надо быстро двигаться :-)
Скоростная разработка продукта невозможна без непрекращающегося выкатывания свежих изменений в боевое окружение. Именно это позволяет Ultimate-Guitar оставаться #1 world's guitar service.
Когда-то давным-давно мы приняли для себя, что "мы движемся очень быстро и иногда из-за этого что-то ломаем. Недоставленный пользователям продукт/непроверенная гипотеза хуже, чем временная неработоспособность части сервиса. Поэтому мы убираем преграды между новым кодом и продакшном: не тратим время ни на тестирование, ни на строгий релиз-менеджмент".
Многие возникающие проблемы касаются только обслуживания (датацентр, OS, каналы) и мониторинг, естественно, необходим. Ну, а раз уж у нас есть мониторинг, то давайте считать систему единым целым, которая может выходить из строя по различным причинам, одной из которых является ошибка в коде. Это привело нас к идее использовать мониторинг вместо тестирования. К чему это привело, почему мы любим Anturis, Graylog, Grafana, что главное в деплое - это быстрый откат и другие прелести управления звездолётом Ultimate-Guitar с дневным населением больше Москвы на скорости 10 деплоев/час - обо всё этом пойдёт речь в этом докладе:
- Про скорость и цену быстрого развития (Innovation Costs).
- Холакратия в бранчах, "сам себе релиз-инженер", ответственность и честность.
- Скорость отката > скорость деплоя.
- Как умер QA или демоны с tail и Graylog.
- Когда не нужны микросервисы: успеть за 30 секунд, медленный Mercurial и шустрое комбо Git + Capistrano + Ansible.
- Бесполезные фичи, бритва Оккама и пользователи, которые на самом деле любят изменения :-)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)Ontico
В этом году мы перевели наш портал на HTTPS. Это оказалось непростой задачей. Основными проблемами явились рост нагрузки, увеличение Round Trip Times (RTT) и Mixed Content. Мы опробовали различные известные механизмы, призванные нивелировать эти проблемы, но, как оказалось на практике, все они скрывают в себе особенности. Эти особенности стоило знать заранее, но их не удалось почерпнуть из открытых источников.
В этом докладе мы хотим поделиться сложностями, с которыми мы столкнулись, а также тем, к каким выводам в итоге пришли. Надеемся, что набитые нами шишки будут полезны тем проектам, которые только планируют переход на HTTPS.
«Работа с базами данных с использованием Sequel»Olga Lavrentieva
Сергей Нартымов (Software Engineer в Transinet GmbH, г.Минск)
Доклад: «Работа с базами данных с использованием Sequel»
О чём: Ruby библиотека для работы с базами данных Sequel представляет собой легковесную альтернативу более популярной Active Record. Sequel лежит в основе работы с SQL базами данных в ROM (Ruby Object Mapper) - развивающемся ORM для Ruby, реализующим паттерн Data Mapper. В докладе будут рассмотрены различные аспекты использования Sequel, в том числе показаны примеры использования некоторых возможностей PostgreSQL с помощью Sequel.
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
Расскажу зачем они вообще нужны. Пройдемся по технологиям и промоем им косточки. Рассмотрим достоинства и недостатки, а также где и когда лучше всего применять ту или иную ORM.
Что такое REPL, как он устроен и какие крутые возможности в нём заложены. Поговорим о выполнении кода в REPL и о том как работает автокомплит в динамических языках. Ответим на вопрос что такое vm.runInContext, перехватим парочку промисов, сделаем вывод результатов действительно приятным и даже узнаем как подгрузить нужные модули и не подать виду. В заключение рассмотрим потрясающие возможности, которые даёт нам инфраструктура npm и как это всё можно использовать в работе.
Доклад ориентирован на тех, кому небезынтересен мир Node.js, но будет доступен также и более широкому кругу JS-разработчиков. Надеюсь, для кого-нибудь этот доклад станет очередной ступенькой в изучении любимого языка.
Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...Ruby Meditation
Talk of Julik Tarkhanov, senior backend engineer, WeTransfer, Amsterdam, at Ruby Meditation #28 Kyiv 26.10.2019
Next conference - http://www.rubymeditation.com/
It is often a choice, sometimes a whim, and sometimes an act of desperation. We idolise reuse while sometimes the road not taken is just as exciting. Let's chat about where it is appropriate to "do the thing again", take the scenic route and enjoy the view.
Announcements and conference materials https://www.fb.me/RubyMeditation
News https://twitter.com/RubyMeditation
Photos https://www.instagram.com/RubyMeditation
The stream of Ruby conferences (not just ours) https://t.me/RubyMeditation
* The channel of the organizers of the meetup https://t.me/incredevly
3. Less code
=
Easier to maintain
=
(often)
Faster
суббота, 5 ноября 11 г.
4. Motives to travel light
• Production performance
• Complexity overhead
• Learning curve
• More flexibility
• Self-improvement
суббота, 5 ноября 11 г.
5. Do you always need all
$ ls
of that?
app/
config/
db/
doc/
Gemfile
lib/
log
public/
Rakefile
README
script/
spec/
test/
tmp/
vendor/
www/
Gemfile.lock
.rspec
config.ru
суббота, 5 ноября 11 г.
6. Do you always need all
$ ls
of that?
app/
config/
db/
doc/
Gemfile
lib/
log
public/
Rakefile
README
script/
spec/
test/
tmp/
vendor/
www/
Gemfile.lock
.rspec
config.ru
суббота, 5 ноября 11 г.
7. Lightweight plan
• Replace components of your framework
• Inject lightweight tools
• Migrate to a different platform
• Don't forget to be consistent
суббота, 5 ноября 11 г.
8. ActiveRecord? Sequel!
• http://sequel.rubyforge.org
• Sequel is a gem providing both raw SQL and neat
ORM interfaces
• 18 DBMS support out of the box
• 25—50% faster than ActiveRecord
• 100% ActiveModel compliant
суббота, 5 ноября 11 г.
9. Sequel ORM
class UsersController < ApplicationController
before_filter :find_user, :except => [:create]
def create
@user = User.new(params[:user])
end
protected
def find_user
@user = User[params[:id]]
end
end
суббота, 5 ноября 11 г.
10. Sequel Model
class User < Sequel::Model
one_to_many :comments
subset(:active){comments_count > 20}
plugin :validation_helpers
def validate
super
validates_presence [:email, :name]
validates_unique :email
validates_integer :age if new?
end
def before_create
self.created_at ||= Time.now # however there's a plugin
super # for timestamping
end
end
суббота, 5 ноября 11 г.
11. Raw SQL
DB.fetch("SELECT * FROM albums WHERE name LIKE :pattern", :pattern=>'A%') do |row|
puts row[:name]
end
DB.run "CREATE TABLE albums (id integer primary key, name varchar(255))"
db(:legacy).fetch("
SELECT
(SELECT count(*) FROM activities WHERE
ACTION = 'logged_in'
AND
DATE(created_at) BETWEEN DATE(:start) AND DATE(:end)
) AS login_count,
(SELECT count(*) FROM users WHERE
(DATE(created_at) BETWEEN DATE(:start) AND DATE(:end))
AND
(activated_at IS NOT NULL)
) AS user_count",
:start => start_date, :end => end_date)
суббота, 5 ноября 11 г.
13. Clean frontend with
Zepto.js
• http://zeptojs.com
• JS framework for with a jQ-compatible syntax
and API
• Perfect for rich mobile (esp. iOS) web-apps, but
works in any modern browser except IE
• 7.5 Kb at the moment (vs. 31 Kb jQ)
• Officially — beta, but used at mobile version of
Groupon production-ready
суббота, 5 ноября 11 г.
14. Good old $
$('p>span').html('Hello, RubyC').css('color:red');
Well-known syntax
$('p').bind('click', function(){
$('span', this).css('color:red');
});
Touch UI? No problem!
$('some selector').tap(function(){ ... });
$('some selector').doubleTap(function(){ ... });
$('some selector').swipeRight(function(){ ... });
$('some selector').pinch(function(){ ... });
суббота, 5 ноября 11 г.
15. Xtra Xtra Small: Rack
• Rack is a specification of a minimal Ruby
API that models HTTP
• One might say Rack is a CGI in a Ruby
world
• Only connects a webserver with your
«app» (actually it can be just a lambda!)
суббота, 5 ноября 11 г.
16. Rack
• You need to have an object with a method
call(env)
• It should return an array with 3 elements
[status_code, headers, body]
• So now you can connect it with any webserver
that supports Rack
require ‘thin’
Rack::Handler::Thin.run(app, :Port => 4000)
• Lightweight webapp completed
суббота, 5 ноября 11 г.
17. Rack App Example
class ServerLoad
def call(env)
[200, {"Content-Type" => "text/plain"}, ["uptime | cut -f 11 -d ' '"]]
end
end
суббота, 5 ноября 11 г.
18. Metal. Rack on Rails
• ActionController::Metal is a way to get a valid Rack
app from a controller
• A bit more comfortable dealing with Rack inside
Rails
• You still can include any parts of ActionController
stack inside your metal controller
• Great for API`s
суббота, 5 ноября 11 г.
19. Metallic API
class ApiController < ActionController::Metal
include AbstractController::Callbacks
include ActionController::Helpers
include Devise::Controllers::Helpers
before_filter :require_current_user
def history
content_type = "application/json"
recipient = User.find(params[:user_id])
messages = Message.between(current_user, recipient)
if params[:start_date]
response_body = messages.after(params[:start_date]).to_json
else
response_body = messages.recent.to_json
end
end
end
суббота, 5 ноября 11 г.
20. Sinatra
• Sinatra should be considered as a compact
framework (however they prefer calling it DSL)
replacing ActionController and router
• You still can include ActiveRecord, ActiveSupport
or on the other side — include Sinatra app inside
Rails app
• But you can also go light with Sequel / DataMapper
and plaintext / XML / JSON output
суббота, 5 ноября 11 г.
21. Sinatra
require 'rubygems'
require 'sinatra'
get '/' do
haml :index
end
post '/signup' do
Spam.deliver(params[:email])
end
mime :json, 'application/json'
get '/events/recent.json' do
content_type :json
Event.recent.to_json
end
суббота, 5 ноября 11 г.
22. Padrino. DSL evolves to
a framework
• http://www.padrinorb.com/
• Based on a Sinatra and brings LIKE-A-BOSS
comfort to a Sinatra development process
• Fully supports 6 ORMs, 5 JS libs, 2
rendering engines, 6 test frameworks, 2
stylesheet engines and 2 mocking libs out
of the box
• Still remains quick and simple
суббота, 5 ноября 11 г.
23. Padrino blog
$ padrino g project sample_blog -t shoulda -e haml
-c sass -s jquery -d activerecord -b
class SampleBlog < Padrino::Application
register Padrino::Helpers
register Padrino::Mailer
register SassInitializer
get "/" do
"Hello World!"
end
get :about, :map => '/about_us' do
render :haml, "%p This is a sample blog"
end
end
суббота, 5 ноября 11 г.
24. Posts controller
SampleBlog.controllers :posts do
get :index, :provides => [:html, :rss, :atom] do
@posts = Post.all(:order => 'created_at desc')
render 'posts/index'
end
get :show, :with => :id do
@post = Post.find_by_id(params[:id])
render 'posts/show'
end
end
суббота, 5 ноября 11 г.
25. A little bit of useless
benchmarking
• We take almost plain «Hello World»
application and run
ab -‐c 10 -‐n 1000
• rack 1200 rps
• sinatra 600 rps
• padrino 570 rps
• rails 140 rps
суббота, 5 ноября 11 г.
26. Tools
They don't need to be huge and slow
суббота, 5 ноября 11 г.
27. Pow
• http://pow.cx/
• A 37signals Rack-based webserver for
developer needs
• One-line installer, unobtrusive, fast and only
serves web-apps, nothing else
• cd ~/.pow
ln -‐s /path/to/app
суббота, 5 ноября 11 г.
28. rbenv
• https://github.com/sstephenson/rbenv
• Small, quick, doesn't modify shell
commands, UNIX-way
• rbenv global 1.9.2-‐p290
cd /path/to/app
rbenv local jruby-‐1.6.4
суббота, 5 ноября 11 г.
30. Ruby is not a silver
bullet
You should always consider different platforms and
languages: Erlang, Scala, .NET and even C++
суббота, 5 ноября 11 г.
31. Ruby is not a silver
bullet
You should always consider different platforms and
languages: Erlang, Scala, .NET and even C++
Don't miss Timothy Tsvetkov's speech
tomorrow
суббота, 5 ноября 11 г.
32. Questions?
alexey.nayden@evilmartians.com
суббота, 5 ноября 11 г.