SlideShare une entreprise Scribd logo
1  sur  69
Télécharger pour lire hors ligne
Lightweight APIs in mRuby
1 / 68
Who am I
2 / 68
Who am I
Name's Mikhail Bortnyk
3 / 68
Who am I
Name's Mikhail Bortnyk
Ruby developer and team leader in R&R Music Ukraine
4 / 68
Who am I
Name's Mikhail Bortnyk
Ruby developer and team leader in R&R Music Ukraine
Co-creator of Kottans school
5 / 68
Who am I
Name's Mikhail Bortnyk
Ruby developer and team leader in R&R Music Ukraine
Co-creator of Kottans school
Geek, polyglot, software development addict
6 / 68
Who am I
Name's Mikhail Bortnyk
Ruby developer and team leader in R&R Music Ukraine
Co-creator of Kottans school
Geek, polyglot, software development addict
github: @vessi
7 / 68
Who am I
Name's Mikhail Bortnyk
Ruby developer and team leader in R&R Music Ukraine
Co-creator of Kottans school
Geek, polyglot, software development addict
github: @vessi
twitter: @mikhailbortnyk
8 / 68
What is mRuby
9 / 68
What is mRuby
mRuby is lightweight implementation of Ruby complying (partially) to ISO/IEC
30170:2012
10 / 68
What is mRuby
mRuby is lightweight implementation of Ruby complying (partially) to ISO/IEC
30170:2012
can be linked and embedded into your application
11 / 68
What is mRuby
mRuby is lightweight implementation of Ruby complying (partially) to ISO/IEC
30170:2012
can be linked and embedded into your application
can compile your software into bytecode
12 / 68
What is mRuby
mRuby is lightweight implementation of Ruby complying (partially) to ISO/IEC
30170:2012
can be linked and embedded into your application
can compile your software into bytecode
can generate C code for embedding bytecode
13 / 68
What is mRuby
mRuby is lightweight implementation of Ruby complying (partially) to ISO/IEC
30170:2012
can be linked and embedded into your application
can compile your software into bytecode
can generate C code for embedding bytecode
author: Yukihiro 'matz' Matsumoto
14 / 68
What is mRuby
mRuby is lightweight implementation of Ruby complying (partially) to ISO/IEC
30170:2012
can be linked and embedded into your application
can compile your software into bytecode
can generate C code for embedding bytecode
author: Yukihiro 'matz' Matsumoto
github: github://mruby/mruby
15 / 68
What is mRuby
mRuby is lightweight implementation of Ruby complying (partially) to ISO/IEC
30170:2012
can be linked and embedded into your application
can compile your software into bytecode
can generate C code for embedding bytecode
author: Yukihiro 'matz' Matsumoto
github: github://mruby/mruby
latest version: 1.1.0
16 / 68
Typical Rails project
17 / 68
Typical Rails project (I am so
sorry for it, mom!)
18 / 68
Typical Rails project
it's based on Rack
19 / 68
Typical Rails project
it's based on Rack
it contains a lot of business processes
20 / 68
Typical Rails project
it's based on Rack
it contains a lot of business processes
it responds to many routes
21 / 68
Typical Rails project
it's based on Rack
it contains a lot of business processes
it responds to many routes
often too heavy to serve tons of lightweight requests without scaling
22 / 68
Typical Rails project
it's based on Rack
it contains a lot of business processes
it responds to many routes
often too heavy to serve tons of lightweight requests without scaling
So, what is the solution?
23 / 68
Solutions
24 / 68
Solutions
You have a problem and decide to use threads. Two now problems have you.
25 / 68
Solutions
You have a problem and decide to use threads. Two now problems have you.
You have a problem and decide to use functional languages. Now your problems are
immutable.
26 / 68
Solutions
You have a problem and decide to use threads. Two now problems have you.
You have a problem and decide to use functional languages. Now your problems are
immutable.
You have a problem and decide to use Java. Now you have ProblemsFactory.
27 / 68
Solutions
You have a problem and decide to use threads. Two now problems have you.
You have a problem and decide to use functional languages. Now your problems are
immutable.
You have a problem and decide to use Java. Now you have ProblemsFactory.
You have a problem and decide...
28 / 68
Kill it with fire!
29 / 68
Kill it with fire!
Microservices
30 / 68
Microservices
31 / 68
Microservices
32 / 68
Microservices
The idea is to split big project in bunch of independent lightweight services.
33 / 68
Microservices
The idea is to split big project in bunch of independent lightweight services.
Requirements:
34 / 68
Microservices
The idea is to split big project in bunch of independent lightweight services.
Requirements:
be fast
35 / 68
Microservices
The idea is to split big project in bunch of independent lightweight services.
Requirements:
be fast
be lightweight
36 / 68
Microservices
The idea is to split big project in bunch of independent lightweight services.
Requirements:
be fast
be lightweight
be stable
37 / 68
Microservices
The idea is to split big project in bunch of independent lightweight services.
Requirements:
be fast
be lightweight
be stable
don't switch technology stack aggresively
38 / 68
Microservices
The idea is to split big project in bunch of independent lightweight services.
Requirements:
be fast
be lightweight
be stable
don't switch technology stack aggresively
So, I decided to use mRuby. What do we have for serving web here?
39 / 68
Microservices
The idea is to split big project in bunch of independent lightweight services.
Requirements:
be fast
be lightweight
be stable
don't switch technology stack aggresively
So, I decided to use mRuby. What do we have for serving web here?
mod_mruby. Apache module that executes mRuby code inside Apache process.
40 / 68
Microservices
The idea is to split big project in bunch of independent lightweight services.
Requirements:
be fast
be lightweight
be stable
don't switch technology stack aggresively
So, I decided to use mRuby. What do we have for serving web here?
mod_mruby. Apache module that executes mRuby code inside Apache process.
ngx_mruby. Perfectly the same but with Nginx flavour.
41 / 68
Little demonstration
Microservice without any service
42 / 68
Little demonstration
Used software:
nginx (ALL)
docker (ALL)
docker-compose (ALL)
mongodb (ALL)
ab (ALL)
unicorn gem (rack)
rack gem (rack)
rack-routing gem (rack)
mongo gem (rack)
ngx_mruby (mRuby)
mruby-mongo (mRuby)
43 / 68
Rack execution
$> cd testlab/rack
$> docker-compose up
$> ab -n 10000 -c 100 http://192.168.0.100:10080/api/contacts
# and kill docker-compose with ^C
44 / 68
Rack stats (page 1)
Document Path: /api/contacts
Document Length: 537 bytes
Concurrency Level: 100
Time taken for tests: 7.897 seconds
Complete requests: 10000
Failed requests: 4399
(Connect: 0, Receive: 0, Length: 4399, Exceptions: 0)
Non-2xx responses: 5601
Total transferred: 5080859 bytes
HTML transferred: 3434440 bytes
Requests per second: 1266.27 [#/sec] (mean)
Time per request: 78.972 [ms] (mean)
Time per request: 0.790 [ms] (mean, across all concurrent requests)
Transfer rate: 628.29 [Kbytes/sec] received
45 / 68
Rack stats (page 2)
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 4 4.1 2 34
Processing: 1 74 72.1 23 423
Waiting: 1 74 72.0 22 423
Total: 2 78 72.2 27 426
Percentage of the requests served within a certain time (ms)
50% 27
66% 135
75% 147
80% 154
90% 174
95% 192
98% 216
99% 232
100% 426 (longest request)
46 / 68
mRuby execution
$> cd testlab/rack
$> docker-compose up
$> ab -n 10000 -c 100 http://192.168.0.100:10080/api/contacts
# and kill docker-compose with ^C
47 / 68
mRuby stats (page 1)
Document Path: /api/contacts
Document Length: 98 bytes
Concurrency Level: 100
Time taken for tests: 6.721 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 2140000 bytes
HTML transferred: 980000 bytes
Requests per second: 1487.83 [#/sec] (mean)
Time per request: 67.212 [ms] (mean)
Time per request: 0.672 [ms] (mean, across all concurrent requests)
Transfer rate: 310.93 [Kbytes/sec] received
48 / 68
mRuby stats (page 2)
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 3 5.9 0 29
Processing: 5 64 27.5 68 132
Waiting: 5 64 27.6 68 131
Total: 14 67 24.4 69 132
Percentage of the requests served within a certain time (ms)
50% 69
66% 78
75% 83
80% 88
90% 102
95% 106
98% 112
99% 120
100% 132 (longest request)
49 / 68
Problems
50 / 68
Problems
Everything has its price. ngx_mruby and Nginx and mRuby are not exceptions.
51 / 68
Problems
Everything has its price. ngx_mruby and Nginx and mRuby are not exceptions.
you have to recompile mRuby each time you add some dependency
52 / 68
Problems
Everything has its price. ngx_mruby and Nginx and mRuby are not exceptions.
you have to recompile mRuby each time you add some dependency
oftenly gems are written in pure C
53 / 68
Problems
Everything has its price. ngx_mruby and Nginx and mRuby are not exceptions.
you have to recompile mRuby each time you add some dependency
oftenly gems are written in pure C
mRuby has no require keyword, so you code will not be so DRY as you want
54 / 68
Problems
Everything has its price. ngx_mruby and Nginx and mRuby are not exceptions.
you have to recompile mRuby each time you add some dependency
oftenly gems are written in pure C
mRuby has no require keyword, so you code will not be so DRY as you want
still not so fast as pure C implementation :(
55 / 68
Problems
Everything has its price. ngx_mruby and Nginx and mRuby are not exceptions.
you have to recompile mRuby each time you add some dependency
oftenly gems are written in pure C
mRuby has no require keyword, so you code will not be so DRY as you want
WRONG!
still not so fast as pure C implementation :(
56 / 68
mruby-require to the rescue!
57 / 68
mruby-require to the rescue!
mruby-require allows you both to don't hold some gems in your mRuby virtual machine and
to require your own code.
58 / 68
mruby-require to the rescue!
mruby-require allows you both to don't hold some gems in your mRuby virtual machine and
to require your own code.
located at: github://mattn/mruby-require
59 / 68
mruby-require to the rescue!
mruby-require allows you both to don't hold some gems in your mRuby virtual machine and
to require your own code.
located at: github://mattn/mruby-require
gems that are located in build_config.rb before mruby-require - are included in mRuby
VM, after - are not
60 / 68
mruby-require to the rescue!
mruby-require allows you both to don't hold some gems in your mRuby virtual machine and
to require your own code.
located at: github://mattn/mruby-require
gems that are located in build_config.rb before mruby-require - are included in mRuby
VM, after - are not
requirements are loaded at each execution
61 / 68
Miss Rack?
62 / 68
Miss Rack?
mruby-hibari is the abstraction that is pretty similiar to well-known Rack interface. But just
faster a lot.
63 / 68
Miss Rack?
mruby-hibari is the abstraction that is pretty similiar to well-known Rack interface. But just
faster a lot.
Find it at github://kentaro/mruby-hibari
64 / 68
Seeking for opensource
developers!
I am looking for support to continue development of mruby-mongo. Any help will be
appreciated.
65 / 68
Still actual :(
66 / 68
Questions?
67 / 68
Thank you!
68 / 68
Lightweight APIs in mRuby (Михаил Бортник)

Contenu connexe

En vedette

Сергей Жук "Android Performance Tips & Tricks"
Сергей Жук "Android Performance Tips & Tricks"Сергей Жук "Android Performance Tips & Tricks"
Сергей Жук "Android Performance Tips & Tricks"Fwdays
 
Павел Тайкало: "Optimistic Approach : How to show results instead spinners wi...
Павел Тайкало: "Optimistic Approach : How to show results instead spinners wi...Павел Тайкало: "Optimistic Approach : How to show results instead spinners wi...
Павел Тайкало: "Optimistic Approach : How to show results instead spinners wi...Fwdays
 
"Frameworks in 2015" Андрей Листочкин
"Frameworks in 2015" Андрей Листочкин"Frameworks in 2015" Андрей Листочкин
"Frameworks in 2015" Андрей ЛисточкинFwdays
 
Светлана Старикова "Building a self-managing team: why you should not have e...
 Светлана Старикова "Building a self-managing team: why you should not have e... Светлана Старикова "Building a self-managing team: why you should not have e...
Светлана Старикова "Building a self-managing team: why you should not have e...Fwdays
 
Скрам и Канбан: применимость самых распространенных методов организации умств...
Скрам и Канбан: применимость самых распространенных методов организации умств...Скрам и Канбан: применимость самых распространенных методов организации умств...
Скрам и Канбан: применимость самых распространенных методов организации умств...Fwdays
 
Александр Воронов | Building CLI with Swift
Александр Воронов | Building CLI with SwiftАлександр Воронов | Building CLI with Swift
Александр Воронов | Building CLI with SwiftFwdays
 
Евгений Жарков AngularJS: Good parts
Евгений Жарков AngularJS: Good partsЕвгений Жарков AngularJS: Good parts
Евгений Жарков AngularJS: Good partsFwdays
 
Трансформация команды: от инди разработки к играм с коммерческой успешностью
Трансформация команды: от инди разработки к играм с коммерческой успешностьюТрансформация команды: от инди разработки к играм с коммерческой успешностью
Трансформация команды: от инди разработки к играм с коммерческой успешностьюFwdays
 
Андрей Шумада | Tank.ly
Андрей Шумада | Tank.ly Андрей Шумада | Tank.ly
Андрей Шумада | Tank.ly Fwdays
 
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"Fwdays
 
Евгений Обрезков "Behind the terminal"
Евгений Обрезков "Behind the terminal"Евгений Обрезков "Behind the terminal"
Евгений Обрезков "Behind the terminal"Fwdays
 
Алексей Волков "Интерактивные декларативные графики на React+D3"
Алексей Волков "Интерактивные декларативные графики на React+D3"Алексей Волков "Интерактивные декларативные графики на React+D3"
Алексей Волков "Интерактивные декларативные графики на React+D3"Fwdays
 
Анатолий Попель: "Формы оплаты и платёжные шлюзы"
Анатолий Попель: "Формы оплаты и платёжные шлюзы"Анатолий Попель: "Формы оплаты и платёжные шлюзы"
Анатолий Попель: "Формы оплаты и платёжные шлюзы"Fwdays
 
4 puchnina.pptx
4 puchnina.pptx4 puchnina.pptx
4 puchnina.pptxFwdays
 
Fighting Fat Models (Богдан Гусев)
Fighting Fat Models (Богдан Гусев)Fighting Fat Models (Богдан Гусев)
Fighting Fat Models (Богдан Гусев)Fwdays
 
"Spring Boot. Boot up your development" Сергей Моренец
"Spring Boot. Boot up your development" Сергей Моренец"Spring Boot. Boot up your development" Сергей Моренец
"Spring Boot. Boot up your development" Сергей МоренецFwdays
 
"Query Execution: Expectation - Reality (Level 300)" Денис Резник
"Query Execution: Expectation - Reality (Level 300)" Денис Резник"Query Execution: Expectation - Reality (Level 300)" Денис Резник
"Query Execution: Expectation - Reality (Level 300)" Денис РезникFwdays
 
Анастасия Войтова: "Building profanity filters on mobile: clbuttic sh!t"
Анастасия Войтова: "Building profanity filters on mobile: clbuttic sh!t"Анастасия Войтова: "Building profanity filters on mobile: clbuttic sh!t"
Анастасия Войтова: "Building profanity filters on mobile: clbuttic sh!t"Fwdays
 
"После OOD: как моделировать предметную область в пост-объектном мире" Руслан...
"После OOD: как моделировать предметную область в пост-объектном мире" Руслан..."После OOD: как моделировать предметную область в пост-объектном мире" Руслан...
"После OOD: как моделировать предметную область в пост-объектном мире" Руслан...Fwdays
 

En vedette (20)

Сергей Жук "Android Performance Tips & Tricks"
Сергей Жук "Android Performance Tips & Tricks"Сергей Жук "Android Performance Tips & Tricks"
Сергей Жук "Android Performance Tips & Tricks"
 
Павел Тайкало: "Optimistic Approach : How to show results instead spinners wi...
Павел Тайкало: "Optimistic Approach : How to show results instead spinners wi...Павел Тайкало: "Optimistic Approach : How to show results instead spinners wi...
Павел Тайкало: "Optimistic Approach : How to show results instead spinners wi...
 
"Frameworks in 2015" Андрей Листочкин
"Frameworks in 2015" Андрей Листочкин"Frameworks in 2015" Андрей Листочкин
"Frameworks in 2015" Андрей Листочкин
 
Светлана Старикова "Building a self-managing team: why you should not have e...
 Светлана Старикова "Building a self-managing team: why you should not have e... Светлана Старикова "Building a self-managing team: why you should not have e...
Светлана Старикова "Building a self-managing team: why you should not have e...
 
Скрам и Канбан: применимость самых распространенных методов организации умств...
Скрам и Канбан: применимость самых распространенных методов организации умств...Скрам и Канбан: применимость самых распространенных методов организации умств...
Скрам и Канбан: применимость самых распространенных методов организации умств...
 
Александр Воронов | Building CLI with Swift
Александр Воронов | Building CLI with SwiftАлександр Воронов | Building CLI with Swift
Александр Воронов | Building CLI with Swift
 
Евгений Жарков AngularJS: Good parts
Евгений Жарков AngularJS: Good partsЕвгений Жарков AngularJS: Good parts
Евгений Жарков AngularJS: Good parts
 
Трансформация команды: от инди разработки к играм с коммерческой успешностью
Трансформация команды: от инди разработки к играм с коммерческой успешностьюТрансформация команды: от инди разработки к играм с коммерческой успешностью
Трансформация команды: от инди разработки к играм с коммерческой успешностью
 
Андрей Шумада | Tank.ly
Андрей Шумада | Tank.ly Андрей Шумада | Tank.ly
Андрей Шумада | Tank.ly
 
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
 
Евгений Обрезков "Behind the terminal"
Евгений Обрезков "Behind the terminal"Евгений Обрезков "Behind the terminal"
Евгений Обрезков "Behind the terminal"
 
Алексей Волков "Интерактивные декларативные графики на React+D3"
Алексей Волков "Интерактивные декларативные графики на React+D3"Алексей Волков "Интерактивные декларативные графики на React+D3"
Алексей Волков "Интерактивные декларативные графики на React+D3"
 
Анатолий Попель: "Формы оплаты и платёжные шлюзы"
Анатолий Попель: "Формы оплаты и платёжные шлюзы"Анатолий Попель: "Формы оплаты и платёжные шлюзы"
Анатолий Попель: "Формы оплаты и платёжные шлюзы"
 
4 puchnina.pptx
4 puchnina.pptx4 puchnina.pptx
4 puchnina.pptx
 
Fighting Fat Models (Богдан Гусев)
Fighting Fat Models (Богдан Гусев)Fighting Fat Models (Богдан Гусев)
Fighting Fat Models (Богдан Гусев)
 
Designing for Privacy
Designing for PrivacyDesigning for Privacy
Designing for Privacy
 
"Spring Boot. Boot up your development" Сергей Моренец
"Spring Boot. Boot up your development" Сергей Моренец"Spring Boot. Boot up your development" Сергей Моренец
"Spring Boot. Boot up your development" Сергей Моренец
 
"Query Execution: Expectation - Reality (Level 300)" Денис Резник
"Query Execution: Expectation - Reality (Level 300)" Денис Резник"Query Execution: Expectation - Reality (Level 300)" Денис Резник
"Query Execution: Expectation - Reality (Level 300)" Денис Резник
 
Анастасия Войтова: "Building profanity filters on mobile: clbuttic sh!t"
Анастасия Войтова: "Building profanity filters on mobile: clbuttic sh!t"Анастасия Войтова: "Building profanity filters on mobile: clbuttic sh!t"
Анастасия Войтова: "Building profanity filters on mobile: clbuttic sh!t"
 
"После OOD: как моделировать предметную область в пост-объектном мире" Руслан...
"После OOD: как моделировать предметную область в пост-объектном мире" Руслан..."После OOD: как моделировать предметную область в пост-объектном мире" Руслан...
"После OOD: как моделировать предметную область в пост-объектном мире" Руслан...
 

Similaire à Lightweight APIs in mRuby (Михаил Бортник)

Dipping Your Toes Into Cloud Native Application Development
Dipping Your Toes Into Cloud Native Application DevelopmentDipping Your Toes Into Cloud Native Application Development
Dipping Your Toes Into Cloud Native Application DevelopmentMatthew Farina
 
Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Bram Adams
 
[COSCUP 2021] LLVM Project: The Good, The Bad, and The Ugly
[COSCUP 2021] LLVM Project: The Good, The Bad, and The Ugly[COSCUP 2021] LLVM Project: The Good, The Bad, and The Ugly
[COSCUP 2021] LLVM Project: The Good, The Bad, and The UglyMin-Yih Hsu
 
Introduction to Mithril JS
Introduction to Mithril JSIntroduction to Mithril JS
Introduction to Mithril JSMohamed Mohsin K
 
Workshop: Introduction to Web Components & Polymer
Workshop: Introduction to Web Components & Polymer Workshop: Introduction to Web Components & Polymer
Workshop: Introduction to Web Components & Polymer John Riviello
 
Pareto will tell you to stop using your ORM - Mateo Collina
Pareto will tell you to stop using your ORM - Mateo CollinaPareto will tell you to stop using your ORM - Mateo Collina
Pareto will tell you to stop using your ORM - Mateo CollinaWey Wey Web
 
When Will Drupal Die? Keynote talk from Bay Area Drupal Camp 2014
When Will Drupal Die? Keynote talk from Bay Area Drupal Camp 2014When Will Drupal Die? Keynote talk from Bay Area Drupal Camp 2014
When Will Drupal Die? Keynote talk from Bay Area Drupal Camp 2014chrisshattuck
 
20100730 phpstudy
20100730 phpstudy20100730 phpstudy
20100730 phpstudyYusuke Ando
 
Кирилл Толкачев. Микросервисы: огонь, вода и девопс
Кирилл Толкачев. Микросервисы: огонь, вода и девопсКирилл Толкачев. Микросервисы: огонь, вода и девопс
Кирилл Толкачев. Микросервисы: огонь, вода и девопсScrumTrek
 
Putting legacy to REST with middleware
Putting legacy to REST with middlewarePutting legacy to REST with middleware
Putting legacy to REST with middlewareAdam Culp
 
Lunch and learn as3_frameworks
Lunch and learn as3_frameworksLunch and learn as3_frameworks
Lunch and learn as3_frameworksYuri Visser
 
How to Build a Custom Plugin in Rundeck
How to Build a Custom Plugin in RundeckHow to Build a Custom Plugin in Rundeck
How to Build a Custom Plugin in RundeckRundeck
 
Understanding and building Your Own Docker
Understanding and building Your Own DockerUnderstanding and building Your Own Docker
Understanding and building Your Own DockerMotiejus Jakštys
 
The Ember.js Framework - Everything You Need To Know
The Ember.js Framework - Everything You Need To KnowThe Ember.js Framework - Everything You Need To Know
The Ember.js Framework - Everything You Need To KnowAll Things Open
 
OSCon - Performance vs Scalability
OSCon - Performance vs ScalabilityOSCon - Performance vs Scalability
OSCon - Performance vs ScalabilityGleicon Moraes
 
Middleware as Code with mruby
Middleware as Code with mrubyMiddleware as Code with mruby
Middleware as Code with mrubyHiroshi SHIBATA
 
Angular v2 et plus : le futur du développement d'applications en entreprise
Angular v2 et plus : le futur du développement d'applications en entrepriseAngular v2 et plus : le futur du développement d'applications en entreprise
Angular v2 et plus : le futur du développement d'applications en entrepriseLINAGORA
 

Similaire à Lightweight APIs in mRuby (Михаил Бортник) (20)

Dipping Your Toes Into Cloud Native Application Development
Dipping Your Toes Into Cloud Native Application DevelopmentDipping Your Toes Into Cloud Native Application Development
Dipping Your Toes Into Cloud Native Application Development
 
Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!
 
Concurrency in ruby
Concurrency in rubyConcurrency in ruby
Concurrency in ruby
 
[COSCUP 2021] LLVM Project: The Good, The Bad, and The Ugly
[COSCUP 2021] LLVM Project: The Good, The Bad, and The Ugly[COSCUP 2021] LLVM Project: The Good, The Bad, and The Ugly
[COSCUP 2021] LLVM Project: The Good, The Bad, and The Ugly
 
Introduction to Mithril JS
Introduction to Mithril JSIntroduction to Mithril JS
Introduction to Mithril JS
 
Workshop: Introduction to Web Components & Polymer
Workshop: Introduction to Web Components & Polymer Workshop: Introduction to Web Components & Polymer
Workshop: Introduction to Web Components & Polymer
 
Pareto will tell you to stop using your ORM - Mateo Collina
Pareto will tell you to stop using your ORM - Mateo CollinaPareto will tell you to stop using your ORM - Mateo Collina
Pareto will tell you to stop using your ORM - Mateo Collina
 
Micro Frontends
Micro FrontendsMicro Frontends
Micro Frontends
 
When Will Drupal Die? Keynote talk from Bay Area Drupal Camp 2014
When Will Drupal Die? Keynote talk from Bay Area Drupal Camp 2014When Will Drupal Die? Keynote talk from Bay Area Drupal Camp 2014
When Will Drupal Die? Keynote talk from Bay Area Drupal Camp 2014
 
20100730 phpstudy
20100730 phpstudy20100730 phpstudy
20100730 phpstudy
 
Кирилл Толкачев. Микросервисы: огонь, вода и девопс
Кирилл Толкачев. Микросервисы: огонь, вода и девопсКирилл Толкачев. Микросервисы: огонь, вода и девопс
Кирилл Толкачев. Микросервисы: огонь, вода и девопс
 
DevOps demystified
DevOps demystifiedDevOps demystified
DevOps demystified
 
Putting legacy to REST with middleware
Putting legacy to REST with middlewarePutting legacy to REST with middleware
Putting legacy to REST with middleware
 
Lunch and learn as3_frameworks
Lunch and learn as3_frameworksLunch and learn as3_frameworks
Lunch and learn as3_frameworks
 
How to Build a Custom Plugin in Rundeck
How to Build a Custom Plugin in RundeckHow to Build a Custom Plugin in Rundeck
How to Build a Custom Plugin in Rundeck
 
Understanding and building Your Own Docker
Understanding and building Your Own DockerUnderstanding and building Your Own Docker
Understanding and building Your Own Docker
 
The Ember.js Framework - Everything You Need To Know
The Ember.js Framework - Everything You Need To KnowThe Ember.js Framework - Everything You Need To Know
The Ember.js Framework - Everything You Need To Know
 
OSCon - Performance vs Scalability
OSCon - Performance vs ScalabilityOSCon - Performance vs Scalability
OSCon - Performance vs Scalability
 
Middleware as Code with mruby
Middleware as Code with mrubyMiddleware as Code with mruby
Middleware as Code with mruby
 
Angular v2 et plus : le futur du développement d'applications en entreprise
Angular v2 et plus : le futur du développement d'applications en entrepriseAngular v2 et plus : le futur du développement d'applications en entreprise
Angular v2 et plus : le futur du développement d'applications en entreprise
 

Plus de Fwdays

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...Fwdays
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil TopchiiFwdays
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro SpodaretsFwdays
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym KindritskyiFwdays
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...Fwdays
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...Fwdays
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...Fwdays
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...Fwdays
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...Fwdays
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...Fwdays
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...Fwdays
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...Fwdays
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra MyronovaFwdays
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...Fwdays
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...Fwdays
 

Plus de Fwdays (20)

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
 

Dernier

UNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its PerformanceUNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its Performancesivaprakash250
 
Double Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torqueDouble Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torqueBhangaleSonal
 
DC MACHINE-Motoring and generation, Armature circuit equation
DC MACHINE-Motoring and generation, Armature circuit equationDC MACHINE-Motoring and generation, Armature circuit equation
DC MACHINE-Motoring and generation, Armature circuit equationBhangaleSonal
 
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...soginsider
 
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Arindam Chakraborty, Ph.D., P.E. (CA, TX)
 
KubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghlyKubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghlysanyuktamishra911
 
Design For Accessibility: Getting it right from the start
Design For Accessibility: Getting it right from the startDesign For Accessibility: Getting it right from the start
Design For Accessibility: Getting it right from the startQuintin Balsdon
 
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night StandCall Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Standamitlee9823
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXssuser89054b
 
notes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.pptnotes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.pptMsecMca
 
COST-EFFETIVE and Energy Efficient BUILDINGS ptx
COST-EFFETIVE  and Energy Efficient BUILDINGS ptxCOST-EFFETIVE  and Energy Efficient BUILDINGS ptx
COST-EFFETIVE and Energy Efficient BUILDINGS ptxJIT KUMAR GUPTA
 
chapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineeringchapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineeringmulugeta48
 
Hostel management system project report..pdf
Hostel management system project report..pdfHostel management system project report..pdf
Hostel management system project report..pdfKamal Acharya
 
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Bookingdharasingh5698
 
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...roncy bisnoi
 
Work-Permit-Receiver-in-Saudi-Aramco.pptx
Work-Permit-Receiver-in-Saudi-Aramco.pptxWork-Permit-Receiver-in-Saudi-Aramco.pptx
Work-Permit-Receiver-in-Saudi-Aramco.pptxJuliansyahHarahap1
 

Dernier (20)

UNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its PerformanceUNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its Performance
 
Double Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torqueDouble Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torque
 
DC MACHINE-Motoring and generation, Armature circuit equation
DC MACHINE-Motoring and generation, Armature circuit equationDC MACHINE-Motoring and generation, Armature circuit equation
DC MACHINE-Motoring and generation, Armature circuit equation
 
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...
 
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
 
KubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghlyKubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghly
 
Design For Accessibility: Getting it right from the start
Design For Accessibility: Getting it right from the startDesign For Accessibility: Getting it right from the start
Design For Accessibility: Getting it right from the start
 
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night StandCall Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Bangalore ☎ 7737669865 🥵 Book Your One night Stand
 
Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
notes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.pptnotes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.ppt
 
COST-EFFETIVE and Energy Efficient BUILDINGS ptx
COST-EFFETIVE  and Energy Efficient BUILDINGS ptxCOST-EFFETIVE  and Energy Efficient BUILDINGS ptx
COST-EFFETIVE and Energy Efficient BUILDINGS ptx
 
chapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineeringchapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineering
 
FEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced Loads
FEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced LoadsFEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced Loads
FEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced Loads
 
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
 
Hostel management system project report..pdf
Hostel management system project report..pdfHostel management system project report..pdf
Hostel management system project report..pdf
 
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
 
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
 
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
 
Work-Permit-Receiver-in-Saudi-Aramco.pptx
Work-Permit-Receiver-in-Saudi-Aramco.pptxWork-Permit-Receiver-in-Saudi-Aramco.pptx
Work-Permit-Receiver-in-Saudi-Aramco.pptx
 

Lightweight APIs in mRuby (Михаил Бортник)

  • 1. Lightweight APIs in mRuby 1 / 68
  • 2. Who am I 2 / 68
  • 3. Who am I Name's Mikhail Bortnyk 3 / 68
  • 4. Who am I Name's Mikhail Bortnyk Ruby developer and team leader in R&R Music Ukraine 4 / 68
  • 5. Who am I Name's Mikhail Bortnyk Ruby developer and team leader in R&R Music Ukraine Co-creator of Kottans school 5 / 68
  • 6. Who am I Name's Mikhail Bortnyk Ruby developer and team leader in R&R Music Ukraine Co-creator of Kottans school Geek, polyglot, software development addict 6 / 68
  • 7. Who am I Name's Mikhail Bortnyk Ruby developer and team leader in R&R Music Ukraine Co-creator of Kottans school Geek, polyglot, software development addict github: @vessi 7 / 68
  • 8. Who am I Name's Mikhail Bortnyk Ruby developer and team leader in R&R Music Ukraine Co-creator of Kottans school Geek, polyglot, software development addict github: @vessi twitter: @mikhailbortnyk 8 / 68
  • 10. What is mRuby mRuby is lightweight implementation of Ruby complying (partially) to ISO/IEC 30170:2012 10 / 68
  • 11. What is mRuby mRuby is lightweight implementation of Ruby complying (partially) to ISO/IEC 30170:2012 can be linked and embedded into your application 11 / 68
  • 12. What is mRuby mRuby is lightweight implementation of Ruby complying (partially) to ISO/IEC 30170:2012 can be linked and embedded into your application can compile your software into bytecode 12 / 68
  • 13. What is mRuby mRuby is lightweight implementation of Ruby complying (partially) to ISO/IEC 30170:2012 can be linked and embedded into your application can compile your software into bytecode can generate C code for embedding bytecode 13 / 68
  • 14. What is mRuby mRuby is lightweight implementation of Ruby complying (partially) to ISO/IEC 30170:2012 can be linked and embedded into your application can compile your software into bytecode can generate C code for embedding bytecode author: Yukihiro 'matz' Matsumoto 14 / 68
  • 15. What is mRuby mRuby is lightweight implementation of Ruby complying (partially) to ISO/IEC 30170:2012 can be linked and embedded into your application can compile your software into bytecode can generate C code for embedding bytecode author: Yukihiro 'matz' Matsumoto github: github://mruby/mruby 15 / 68
  • 16. What is mRuby mRuby is lightweight implementation of Ruby complying (partially) to ISO/IEC 30170:2012 can be linked and embedded into your application can compile your software into bytecode can generate C code for embedding bytecode author: Yukihiro 'matz' Matsumoto github: github://mruby/mruby latest version: 1.1.0 16 / 68
  • 18. Typical Rails project (I am so sorry for it, mom!) 18 / 68
  • 19. Typical Rails project it's based on Rack 19 / 68
  • 20. Typical Rails project it's based on Rack it contains a lot of business processes 20 / 68
  • 21. Typical Rails project it's based on Rack it contains a lot of business processes it responds to many routes 21 / 68
  • 22. Typical Rails project it's based on Rack it contains a lot of business processes it responds to many routes often too heavy to serve tons of lightweight requests without scaling 22 / 68
  • 23. Typical Rails project it's based on Rack it contains a lot of business processes it responds to many routes often too heavy to serve tons of lightweight requests without scaling So, what is the solution? 23 / 68
  • 25. Solutions You have a problem and decide to use threads. Two now problems have you. 25 / 68
  • 26. Solutions You have a problem and decide to use threads. Two now problems have you. You have a problem and decide to use functional languages. Now your problems are immutable. 26 / 68
  • 27. Solutions You have a problem and decide to use threads. Two now problems have you. You have a problem and decide to use functional languages. Now your problems are immutable. You have a problem and decide to use Java. Now you have ProblemsFactory. 27 / 68
  • 28. Solutions You have a problem and decide to use threads. Two now problems have you. You have a problem and decide to use functional languages. Now your problems are immutable. You have a problem and decide to use Java. Now you have ProblemsFactory. You have a problem and decide... 28 / 68
  • 29. Kill it with fire! 29 / 68
  • 30. Kill it with fire! Microservices 30 / 68
  • 33. Microservices The idea is to split big project in bunch of independent lightweight services. 33 / 68
  • 34. Microservices The idea is to split big project in bunch of independent lightweight services. Requirements: 34 / 68
  • 35. Microservices The idea is to split big project in bunch of independent lightweight services. Requirements: be fast 35 / 68
  • 36. Microservices The idea is to split big project in bunch of independent lightweight services. Requirements: be fast be lightweight 36 / 68
  • 37. Microservices The idea is to split big project in bunch of independent lightweight services. Requirements: be fast be lightweight be stable 37 / 68
  • 38. Microservices The idea is to split big project in bunch of independent lightweight services. Requirements: be fast be lightweight be stable don't switch technology stack aggresively 38 / 68
  • 39. Microservices The idea is to split big project in bunch of independent lightweight services. Requirements: be fast be lightweight be stable don't switch technology stack aggresively So, I decided to use mRuby. What do we have for serving web here? 39 / 68
  • 40. Microservices The idea is to split big project in bunch of independent lightweight services. Requirements: be fast be lightweight be stable don't switch technology stack aggresively So, I decided to use mRuby. What do we have for serving web here? mod_mruby. Apache module that executes mRuby code inside Apache process. 40 / 68
  • 41. Microservices The idea is to split big project in bunch of independent lightweight services. Requirements: be fast be lightweight be stable don't switch technology stack aggresively So, I decided to use mRuby. What do we have for serving web here? mod_mruby. Apache module that executes mRuby code inside Apache process. ngx_mruby. Perfectly the same but with Nginx flavour. 41 / 68
  • 43. Little demonstration Used software: nginx (ALL) docker (ALL) docker-compose (ALL) mongodb (ALL) ab (ALL) unicorn gem (rack) rack gem (rack) rack-routing gem (rack) mongo gem (rack) ngx_mruby (mRuby) mruby-mongo (mRuby) 43 / 68
  • 44. Rack execution $> cd testlab/rack $> docker-compose up $> ab -n 10000 -c 100 http://192.168.0.100:10080/api/contacts # and kill docker-compose with ^C 44 / 68
  • 45. Rack stats (page 1) Document Path: /api/contacts Document Length: 537 bytes Concurrency Level: 100 Time taken for tests: 7.897 seconds Complete requests: 10000 Failed requests: 4399 (Connect: 0, Receive: 0, Length: 4399, Exceptions: 0) Non-2xx responses: 5601 Total transferred: 5080859 bytes HTML transferred: 3434440 bytes Requests per second: 1266.27 [#/sec] (mean) Time per request: 78.972 [ms] (mean) Time per request: 0.790 [ms] (mean, across all concurrent requests) Transfer rate: 628.29 [Kbytes/sec] received 45 / 68
  • 46. Rack stats (page 2) Connection Times (ms) min mean[+/-sd] median max Connect: 0 4 4.1 2 34 Processing: 1 74 72.1 23 423 Waiting: 1 74 72.0 22 423 Total: 2 78 72.2 27 426 Percentage of the requests served within a certain time (ms) 50% 27 66% 135 75% 147 80% 154 90% 174 95% 192 98% 216 99% 232 100% 426 (longest request) 46 / 68
  • 47. mRuby execution $> cd testlab/rack $> docker-compose up $> ab -n 10000 -c 100 http://192.168.0.100:10080/api/contacts # and kill docker-compose with ^C 47 / 68
  • 48. mRuby stats (page 1) Document Path: /api/contacts Document Length: 98 bytes Concurrency Level: 100 Time taken for tests: 6.721 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 2140000 bytes HTML transferred: 980000 bytes Requests per second: 1487.83 [#/sec] (mean) Time per request: 67.212 [ms] (mean) Time per request: 0.672 [ms] (mean, across all concurrent requests) Transfer rate: 310.93 [Kbytes/sec] received 48 / 68
  • 49. mRuby stats (page 2) Connection Times (ms) min mean[+/-sd] median max Connect: 0 3 5.9 0 29 Processing: 5 64 27.5 68 132 Waiting: 5 64 27.6 68 131 Total: 14 67 24.4 69 132 Percentage of the requests served within a certain time (ms) 50% 69 66% 78 75% 83 80% 88 90% 102 95% 106 98% 112 99% 120 100% 132 (longest request) 49 / 68
  • 51. Problems Everything has its price. ngx_mruby and Nginx and mRuby are not exceptions. 51 / 68
  • 52. Problems Everything has its price. ngx_mruby and Nginx and mRuby are not exceptions. you have to recompile mRuby each time you add some dependency 52 / 68
  • 53. Problems Everything has its price. ngx_mruby and Nginx and mRuby are not exceptions. you have to recompile mRuby each time you add some dependency oftenly gems are written in pure C 53 / 68
  • 54. Problems Everything has its price. ngx_mruby and Nginx and mRuby are not exceptions. you have to recompile mRuby each time you add some dependency oftenly gems are written in pure C mRuby has no require keyword, so you code will not be so DRY as you want 54 / 68
  • 55. Problems Everything has its price. ngx_mruby and Nginx and mRuby are not exceptions. you have to recompile mRuby each time you add some dependency oftenly gems are written in pure C mRuby has no require keyword, so you code will not be so DRY as you want still not so fast as pure C implementation :( 55 / 68
  • 56. Problems Everything has its price. ngx_mruby and Nginx and mRuby are not exceptions. you have to recompile mRuby each time you add some dependency oftenly gems are written in pure C mRuby has no require keyword, so you code will not be so DRY as you want WRONG! still not so fast as pure C implementation :( 56 / 68
  • 57. mruby-require to the rescue! 57 / 68
  • 58. mruby-require to the rescue! mruby-require allows you both to don't hold some gems in your mRuby virtual machine and to require your own code. 58 / 68
  • 59. mruby-require to the rescue! mruby-require allows you both to don't hold some gems in your mRuby virtual machine and to require your own code. located at: github://mattn/mruby-require 59 / 68
  • 60. mruby-require to the rescue! mruby-require allows you both to don't hold some gems in your mRuby virtual machine and to require your own code. located at: github://mattn/mruby-require gems that are located in build_config.rb before mruby-require - are included in mRuby VM, after - are not 60 / 68
  • 61. mruby-require to the rescue! mruby-require allows you both to don't hold some gems in your mRuby virtual machine and to require your own code. located at: github://mattn/mruby-require gems that are located in build_config.rb before mruby-require - are included in mRuby VM, after - are not requirements are loaded at each execution 61 / 68
  • 63. Miss Rack? mruby-hibari is the abstraction that is pretty similiar to well-known Rack interface. But just faster a lot. 63 / 68
  • 64. Miss Rack? mruby-hibari is the abstraction that is pretty similiar to well-known Rack interface. But just faster a lot. Find it at github://kentaro/mruby-hibari 64 / 68
  • 65. Seeking for opensource developers! I am looking for support to continue development of mruby-mongo. Any help will be appreciated. 65 / 68