SlideShare a Scribd company logo
build and maintain large Ruby
applications
Enrico Teotti - @agenteo - http://teotti.com
enrico.teotti@gmail.com
starting shortly
build and maintain large Ruby
applications
Enrico Teotti - @agenteo - http://teotti.com
http://www.slideshare.net/agenteo/build-and-maintain-large-ruby-applications-ruby-conf-australia-2016
Build and maintain large ruby applications - LA Ruby Oct meetup
crowbar.rb spec.description = ”Builds and maintains large Ruby apps”
Build and maintain large ruby applications - LA Ruby Oct meetup
Build and maintain large ruby applications - LA Ruby Oct meetup
–Any Java developer always ;-)
“Ruby is a toy language.”
automated
testing
team
diligence
local Ruby
gems
Booking + Driving + Billing
Booking + Driving + Billing
Booking Driving Billing
Build and maintain large ruby applications - LA Ruby Oct meetup
Ruby files in a project are like ingredients in a recipe
Build and maintain large ruby applications - LA Ruby Oct meetup
yeasthoney
salt
milk flourwaterlard
sugar
arugula
squacqueroneprosciutto
piadina
yeasthoney
salt
milk flourwaterlard
sugar
arugula
squacqueroneprosciutto
Build and maintain large ruby applications - LA Ruby Oct meetup
Build and maintain large ruby applications - LA Ruby Oct meetup
Build and maintain large ruby applications - LA Ruby Oct meetup
3 months later
piadina
the curse of
knowledge
yeasthoney
salt
milk flourwaterlard
sugar
arugula
squacqueroneprosciutto
6 months later
– The law of continuing change (1974) Lehman, M
“Any software system used in the real-world must change or
become less and less useful in that environment.”
– The law of increasing complexity (1974) Lehman, M
“As a program evolves, it becomes more complex, and extra
resources are needed to preserve and simplify its structure.”
biscuits
mozzarella
sunflower oil
carrots
eggs
tomato puree
basil
mascarpone
coffee
cacao
yeasthoney
salt
milk flourwaterlard
sugar
arugula
squacqueroneprosciutto
oregano
sunflower oil
carrots
gs
tomato puree
basil
mascarpone
coffee
cacao
yeasthoney
salt
milk flourwaterlard
sugar
arugula
squacqueroneprosciutto
oregano
piadina
pizza margherita
tiramisu
carrot cake
white ingredients
green ingredients
red ingredients
yellowish ingredients
orange ingredients
dark ingredients
white ingredients
green ingredients
classes grouped
by design pattern
ls -l app/
controllers
helpers
models
presenters
services
serializers
strategies
utils
views
http://teotti.com/application-directories-named-as-architectural-patterns-antipattern/
piadina
pizza margherita
tiramisu
carrot cake
Build and maintain large ruby applications - LA Ruby Oct meetup
namespaces
# lib/blog/after_publish.rb
module Blog
class AfterPublish
private
def subscribe_blogger_to_promotion
Promotions::Submission.new
end
end
end
# lib/promotions/new_member.rb
module Promotions
class Submission
private
def fetch_member(id)
# lib/membership/finder.rb
Membership::Finder.new(id)
end
end
end
promotionsblog membership
namespaces
context context
# lib/blog/after_publish.rb
module Blog
class AfterPublish
private
def subscribe_blogger_to_promotion
Promotions::Submission.new
end
end
end
# lib/promotions/new_member.rb
module Promotions
class Submission
private
def fetch_member(id)
# lib/membership/finder.rb
Membership::Finder.new(id)
end
end
end
promotionsblog membership
namespaces
context context
promotions
name
finder
blog membership
main Ruby application
1 year
lib
promotions
name
finder
blog membership
main Ruby application
1 year
lib
promotions
room
decorator
name
finder
blog membershiprecipes
main Ruby application
comments
lib
3 years
promotions
room
decorator
name
finder
blog membershiprecipes
main Ruby application
comments
lib
3 years
that’s the Ruby way
is that the Ruby way?
piadina worktop
tiramisu worktop
shared worktop
carrot cake worktop
pizza worktop
local Ruby gems
Build and maintain large ruby applications - LA Ruby Oct meetup
Build and maintain large ruby applications - LA Ruby Oct meetup
A
main Ruby application
piadina gem
Apiadina gem
pizza gem
C
shared
ingredients
gem
B
main Ruby application
Apiadina gem
pizza gem
C
shared
ingredients
gem
B
main Ruby application
spec.add_dependency "shared_ingredients"
# local_gems/pizza/pizza.gemspec
Apiadina gem
pizza gem
C
shared
ingredients
gem
B
main Ruby application
spec.add_dependency "shared_ingredients"
# local_gems/piadina/piadina.gemspec
Build and maintain large ruby applications - LA Ruby Oct meetup
piadina gem
pizza gem
C
shared
ingredients
gem
B
main Ruby application
desserts gem
D
A
Build and maintain large ruby applications - LA Ruby Oct meetup
piadina gem
pizza gem
C
shared
ingredients
gem
B
main Ruby application
desserts gem
D
A
E
calzone gem
pizza dough gem
F
Conway’s Law
“organizations which design systems … are constrained to produce designs which
are copies of the communication structures of these organizations"
piadina gem
pizza gem
shared
ingredients
gem
main Ruby application
desserts gem
D
A
calzone gem
pizza dough gem
F
B
E
C
http://teotti.com/create-dependency-structures-with-local-ruby-gems/
code & examples
A
C
D
B
E
your health plan
drug information
claims platform
product
information
membership
gem
gem
gem
gem
gem
dependency
main Ruby application
Sinatra / Rails / Hanami
http://teotti.com/create-dependency-structures-with-local-ruby-gems/
!"" Gemfile
!"" Gemfile.lock
!"" local_gems
!"" run.rb
#"" spec
ruby script that
triggers entry point
gem’s behaviour
require 'health_plan'
subscriber_id = 'ASE123456789'
aggregated_drug_information = HealthPlan::Aggregator.new(subscriber_id)
puts aggregated_drug_information.details
main Ruby application
!"" Gemfile
!"" Gemfile.lock
!"" local_gems
!"" run.rb
#"" spec
path 'local_gems' do
gem 'health_plan'
end
source 'https://rubygems.org'
group :test do
gem 'rspec'
end
bundler’s Gemfile uses
a path directive to find
local gems
main Ruby application
!"" Gemfile
!"" Gemfile.lock
!"" local_gems
!"" run.rb
#"" spec
bundler’s Gemfile uses
a path directive to find
local gems
path 'local_gems' do
gem 'health_plan'
end
source 'https://rubygems.org'
group :test do
gem 'rspec'
end
main Ruby application
!"" Gemfile
!"" Gemfile.lock
!"" local_gems
!"" run.rb
#"" spec
directory where your local gems are
$ cd local_gems
$ bundle gem health_plan
create health_plan/Gemfile
create health_plan/Rakefile
create health_plan/LICENSE.txt
create health_plan/README.md
create health_plan/.gitignore
create health_plan/health_plan.gemspec
create health_plan/lib/health_plan.rb
create health_plan/lib/health_plan/version.rb
Initializing git repo in /Users/me/code/lab/gem-dependency-structure/local_gems/health_plan
$ rm -Rf health_plan/.git*
bundle gem can create gems
main Ruby application
# local_gems/health_plan/health_plan.gemspec
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'health_plan/version'
Gem::Specification.new do |spec|
spec.name = "health_plan"
spec.version = HealthPlan::VERSION
spec.authors = ["Enrico Teotti"]
spec.email = ["enrico.teotti@gmail.com"]
spec.summary = %q{Write a short summary. Required.}
spec.description = %q{Write a longer description. Optional.}
spec.homepage = ""
spec.license = "MIT"
spec.files = `git ls-files -z`.split("x0")
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
spec.require_paths = ["lib"]
spec.add_development_dependency "bundler", "~> 1.7"
spec.add_development_dependency "rake", "~> 10.0"
!"" Gemfile
!"" Gemfile.lock
!"" local_gems
$   #"" health_plan
!"" run.rb
#"" spec
spec.add_development_dependency "rspec", "3.4.0"
end
your health plan
# local_gems/health_plan/health_plan.gemspec
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'health_plan/version'
Gem::Specification.new do |spec|
spec.name = "health_plan"
spec.version = HealthPlan::VERSION
spec.authors = ["Enrico Teotti"]
spec.email = ["enrico.teotti@gmail.com"]
spec.summary = %q{Write a short summary. Required.}
spec.description = %q{Write a longer description. Optional.}
spec.homepage = ""
spec.license = "MIT"
spec.files = `git ls-files -z`.split("x0")
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
spec.require_paths = ["lib"]
spec.add_development_dependency "bundler", "~> 1.7"
spec.add_development_dependency "rake", "~> 10.0"
!"" Gemfile
!"" Gemfile.lock
!"" local_gems
$   #"" health_plan
!"" run.rb
#"" spec
spec.add_development_dependency "rspec", "3.4.0"
end
your health plan
# local_gems/health_plan/spec/health_plan/aggregator_spec.rb
require 'spec_helper'
describe HealthPlan::Aggregator do
describe "#details" do
it "should not throw exceptions" do
aggregator = HealthPlan::Aggregator.new(12345)
expect(aggregator.details).to eq({ name: 'The full package plan'})
end
end
end
your health plan
!"" Gemfile
!"" Gemfile.lock
!"" local_gems
$   #"" health_plan
!"" run.rb
#"" spec
# local_gems/health_plan/lib/health_plan/aggregator.rb
module HealthPlan
class Aggregator
def initialize(id)
@subscriber_id = id
end
def details
{ name: 'The full package plan'}
end
end
end
# local_gems/health_plan/lib/health_plan.rb
require "health_plan/version"
require "health_plan/aggregator"
module HealthPlan
end
gem entry point
your health plan
!"" Gemfile
!"" Gemfile.lock
!"" local_gems
$   #"" health_plan
!"" run.rb
#"" spec
!"" Gemfile
!"" Gemfile.lock
!"" local_gems
$   !"" drug_information
$   #"" health_plan
!"" run.rb
#"" spec
your health plan
drug information
main Ruby application
$ cd local_gems
$ bundle gem drug_information
create drug_information/Gemfile
create drug_information/Rakefile
create drug_information/LICENSE.txt
create drug_information/README.md
create drug_information/.gitignore
create drug_information/drug_information.gemspec
create drug_information/lib/drug_information.rb
create drug_information/lib/drug_information/version.rb
drug information
# local_gems/health_plan/spec/health_plan/aggregator_spec.rb
require 'spec_helper'
describe HealthPlan::Aggregator do
describe "#details" do
let(:fetched_drugs) { 'something' }
before do
fetcher_double = double('DrugInformation::Fetcher', details: fetched_drugs)
allow(DrugInformation::Fetcher).to receive(:new).and_return(fetcher_double)
end
it "should not throw exceptions" do
aggregator = HealthPlan::Aggregator.new(12345)
expect(aggregator.details).to eq({ name: 'The full package plan’,
drugs: fetched_drugs })
end
end
end
your health plan
!"" Gemfile
!"" Gemfile.lock
!"" local_gems
$   !"" drug_information
$   #"" health_plan
!"" run.rb
#"" spec
your health plan
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'health_plan/version'
Gem::Specification.new do |spec|
spec.name = "health_plan"
spec.version = HealthPlan::VERSION
spec.authors = ["Enrico Teotti"]
spec.email = ["enrico.teotti@gmail.com"]
spec.summary = %q{Write a short summary. Required.}
spec.description = %q{Write a longer description. Optional.}
spec.homepage = ""
spec.license = "MIT"
spec.files = `git ls-files -z`.split("x0")
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
spec.require_paths = ["lib"]
spec.add_development_dependency "bundler", "~> 1.7"
spec.add_development_dependency "rake", "~> 10.0"
spec.add_development_dependency "rspec", "3.4.0"
spec.add_dependency "drug_information"
end
# local_gems/health_plan/health_plan.gemspec
!"" Gemfile
!"" Gemfile.lock
!"" local_gems
$   !"" drug_information
$   #"" health_plan
!"" run.rb
#"" spec
your health plan
# local_gems/health_plan/Gemfile
!"" Gemfile
!"" Gemfile.lock
!"" local_gems
$   !"" drug_information
$   #"" health_plan
!"" run.rb
#"" spec
path '..'
source 'https://rubygems.org'
‘..’ represents the parent directory
# local_gems/health_plan/lib/health_plan/aggregator.rb
module HealthPlan
class Aggregator
def initialize(id)
@subscriber_id = id
end
def details
fetched_drug_info = DrugInformation::Fetcher.new(@subscriber_id)
{ name: 'The full package plan', drugs: fetched_drug_info.details }
end
end
end
# local_gems/health_plan/lib/health_plan.rb
require "health_plan/version"
require "health_plan/aggregator"
require "drug_information"
module HealthPlan
end
gem entry point
your health plan
!"" Gemfile
!"" Gemfile.lock
!"" local_gems
$   !"" drug_information
$   #"" health_plan
!"" run.rb
#"" spec
require dependent gem
http://teotti.com/create-dependency-structures-with-local-ruby-gems/
automated
testing
A
C
D
B
E
main Ruby application
unit tested
unit tested
unit testedunit tested
unit tested
acceptance tests
A
C
main Ruby application
B
loaded in memory, deamon or webserver
unit tested
unit tested
not unit tested
http://teotti.com/create-dependency-structures-with-local-ruby-gems#gotcha-flaky-bugs-caused-by-missing-requirement-statements
A
C
D
B
E
Jurassic Ruby application
developer
CEO
head of product
QA “resource”
QA “resource”
team
diligence
A
C
D
B
E
main Ruby application
F
H
I L
membership
payment API
payment
platform
bank
transaction
credit card
transaction
your health plan
API
drug information
claims platform
product
information
membership
A
C
D
B
E
main Ruby application
F
H
I L
membership
payment API
payment
platform
bank
transaction
credit card
transaction
your health plan
API
drug information
claims platform
product
information
membership
A
C
D
B
E
main Ruby application
F
H
I L
membership
payment API
payment
platform
bank
transaction
credit card
transaction
your health plan
API
drug information
claims platform
product
information
membership
A
C
D
B
E
main Ruby application
F
H
I L
membership
payment API
payment
platform
bank
transaction
credit card
transaction
your health plan
API
drug information
claims platform
product
information
membership
A
C
D
B
E
main Ruby application
F
H
I L
membership
payment API
payment
platform
bank
transaction
credit card
transaction
your health plan
API
drug information
claims platform
product
information
membership
A
C
D
B
E
main Ruby application
F
H
I L
I find your use of
Gems disturbing
Do I really look like
a guy with a plan?
*nods then
deletes your
Gem*
Build and maintain large ruby applications - LA Ruby Oct meetup
http://teotti.com/rails-service-oriented-architecture-alternative-with-components/
to be continued…
premature use of SOA
A
C
D
B
E
main Ruby application
F
H
I L
membership
payment API
payment
platform
bank
transaction
credit card
transaction
your health plan
API
drug information
claims platform
product
information
membership
main Ruby application
your health
plan API
drug
information
claims
platform
product
information
membership
membership
payment
API
payment
platform
bank
transaction
credit card
transaction
deploy parts of a monolith
http://teotti.com/deploy-parts-of-a-ruby-on-rails-application/
monolithic Ruby application
DB
editorial admin ui
persistence
site search
componentized Ruby application
public content ui
shared ui
DB
deploy@adminServer $ RUNNING_MODE=admin puma
editorial admin ui
persistence
site search
Rails application
public content ui
shared ui
DB
deploy@publicServer $ RUNNING_MODE=public puma
http://teotti.com/deploy-parts-of-a-ruby-on-rails-application/
legacy migration
editorial admin ui
persistence
site search
Rails application
public content ui
shared ui
DB
legacy
migration
AWS
SQS
massage and
transform content
legacy system
pull legacy
content
http://cbra.info
formerly lotus.rb
hanami.rb
Build and maintain large ruby applications - LA Ruby Oct meetup
automated
testing
team
diligence
local Ruby
gems
automated
testing
team
diligence
local Ruby
gems
team
in a
fixed
mindset
run an experiment
automated
testing
team
diligence
local Ruby
gems
automated
testing
team
diligence
local Ruby
gems
automated
testing
team
diligence
local Ruby
gems
Enrico Teotti - @agenteo - http://teotti.com
Ad

More Related Content

What's hot (11)

Best practices for RESTful web service design
Best practices for RESTful web service designBest practices for RESTful web service design
Best practices for RESTful web service design
Ramin Orujov
 
Fisl 11 - Dicas de Desenvolvimento Web com Ruby
Fisl 11 - Dicas de Desenvolvimento Web com RubyFisl 11 - Dicas de Desenvolvimento Web com Ruby
Fisl 11 - Dicas de Desenvolvimento Web com Ruby
Fabio Akita
 
REST APIs in Laravel 101
REST APIs in Laravel 101REST APIs in Laravel 101
REST APIs in Laravel 101
Samantha Geitz
 
Using Jenkins XML API
Using Jenkins XML APIUsing Jenkins XML API
Using Jenkins XML API
Anton Weiss
 
Enemy of the state
Enemy of the stateEnemy of the state
Enemy of the state
Mike North
 
Jenkins data mining on the command line - Jenkins User Conference NYC 2012
Jenkins data mining on the command line - Jenkins User Conference NYC 2012Jenkins data mining on the command line - Jenkins User Conference NYC 2012
Jenkins data mining on the command line - Jenkins User Conference NYC 2012
Noah Sussman
 
Be Happy With Ruby on Rails - Ecosystem
Be Happy With Ruby on Rails - EcosystemBe Happy With Ruby on Rails - Ecosystem
Be Happy With Ruby on Rails - Ecosystem
Lucas Renan
 
atomPub, ruby y la api de 11870
atomPub, ruby y la api de 11870atomPub, ruby y la api de 11870
atomPub, ruby y la api de 11870
David Calavera
 
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
Karel Minarik
 
Action View Form Helpers - 1, Season 2
Action View Form Helpers - 1, Season 2Action View Form Helpers - 1, Season 2
Action View Form Helpers - 1, Season 2
RORLAB
 
Be a microservices hero
Be a microservices heroBe a microservices hero
Be a microservices hero
OpenRestyCon
 
Best practices for RESTful web service design
Best practices for RESTful web service designBest practices for RESTful web service design
Best practices for RESTful web service design
Ramin Orujov
 
Fisl 11 - Dicas de Desenvolvimento Web com Ruby
Fisl 11 - Dicas de Desenvolvimento Web com RubyFisl 11 - Dicas de Desenvolvimento Web com Ruby
Fisl 11 - Dicas de Desenvolvimento Web com Ruby
Fabio Akita
 
REST APIs in Laravel 101
REST APIs in Laravel 101REST APIs in Laravel 101
REST APIs in Laravel 101
Samantha Geitz
 
Using Jenkins XML API
Using Jenkins XML APIUsing Jenkins XML API
Using Jenkins XML API
Anton Weiss
 
Enemy of the state
Enemy of the stateEnemy of the state
Enemy of the state
Mike North
 
Jenkins data mining on the command line - Jenkins User Conference NYC 2012
Jenkins data mining on the command line - Jenkins User Conference NYC 2012Jenkins data mining on the command line - Jenkins User Conference NYC 2012
Jenkins data mining on the command line - Jenkins User Conference NYC 2012
Noah Sussman
 
Be Happy With Ruby on Rails - Ecosystem
Be Happy With Ruby on Rails - EcosystemBe Happy With Ruby on Rails - Ecosystem
Be Happy With Ruby on Rails - Ecosystem
Lucas Renan
 
atomPub, ruby y la api de 11870
atomPub, ruby y la api de 11870atomPub, ruby y la api de 11870
atomPub, ruby y la api de 11870
David Calavera
 
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
Efektivni vyvoj webovych aplikaci v Ruby on Rails (Webexpo)
Karel Minarik
 
Action View Form Helpers - 1, Season 2
Action View Form Helpers - 1, Season 2Action View Form Helpers - 1, Season 2
Action View Form Helpers - 1, Season 2
RORLAB
 
Be a microservices hero
Be a microservices heroBe a microservices hero
Be a microservices hero
OpenRestyCon
 

Viewers also liked (11)

Gerencia de proyectos
Gerencia de proyectosGerencia de proyectos
Gerencia de proyectos
oasis aires
 
Quienés somos
Quienés somosQuienés somos
Quienés somos
Juan Lalangui
 
Transforming Healthcare Through Connected Health Technology - A story from Th...
Transforming Healthcare Through Connected Health Technology - A story from Th...Transforming Healthcare Through Connected Health Technology - A story from Th...
Transforming Healthcare Through Connected Health Technology - A story from Th...
Apollo Hospitals Group and ATNF
 
Lightening a component based Rails architecture
Lightening a component based Rails architectureLightening a component based Rails architecture
Lightening a component based Rails architecture
Enrico Teotti
 
Student packet tracer manual
Student packet tracer manualStudent packet tracer manual
Student packet tracer manual
Waldir Nuñez Francia
 
2012 Inflection Point Report Trend Two Outsourced Labor: Major trends researc...
2012 Inflection Point Report Trend Two Outsourced Labor: Major trends researc...2012 Inflection Point Report Trend Two Outsourced Labor: Major trends researc...
2012 Inflection Point Report Trend Two Outsourced Labor: Major trends researc...
Chris Jones
 
Burning Man Colombia - Pereira 2016
Burning Man Colombia - Pereira 2016 Burning Man Colombia - Pereira 2016
Burning Man Colombia - Pereira 2016
Erin Donaldson
 
Mindset
MindsetMindset
Mindset
Enrico Teotti
 
The value of communication and infrastructure for automated cars
The value of communication and infrastructure for automated carsThe value of communication and infrastructure for automated cars
The value of communication and infrastructure for automated cars
Center for Transportation Research - UT Austin
 
conociendo la responsabilidad
conociendo la responsabilidadconociendo la responsabilidad
conociendo la responsabilidad
elimar rivas
 
Gerencia de proyectos
Gerencia de proyectosGerencia de proyectos
Gerencia de proyectos
oasis aires
 
Transforming Healthcare Through Connected Health Technology - A story from Th...
Transforming Healthcare Through Connected Health Technology - A story from Th...Transforming Healthcare Through Connected Health Technology - A story from Th...
Transforming Healthcare Through Connected Health Technology - A story from Th...
Apollo Hospitals Group and ATNF
 
Lightening a component based Rails architecture
Lightening a component based Rails architectureLightening a component based Rails architecture
Lightening a component based Rails architecture
Enrico Teotti
 
2012 Inflection Point Report Trend Two Outsourced Labor: Major trends researc...
2012 Inflection Point Report Trend Two Outsourced Labor: Major trends researc...2012 Inflection Point Report Trend Two Outsourced Labor: Major trends researc...
2012 Inflection Point Report Trend Two Outsourced Labor: Major trends researc...
Chris Jones
 
Burning Man Colombia - Pereira 2016
Burning Man Colombia - Pereira 2016 Burning Man Colombia - Pereira 2016
Burning Man Colombia - Pereira 2016
Erin Donaldson
 
conociendo la responsabilidad
conociendo la responsabilidadconociendo la responsabilidad
conociendo la responsabilidad
elimar rivas
 
Ad

Similar to Build and maintain large ruby applications - LA Ruby Oct meetup (20)

Build and maintain large Ruby applications 2023
Build and maintain large Ruby applications 2023Build and maintain large Ruby applications 2023
Build and maintain large Ruby applications 2023
Enrico Teotti
 
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com RubyConsegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Fabio Akita
 
Refactor Large apps with Backbone
Refactor Large apps with BackboneRefactor Large apps with Backbone
Refactor Large apps with Backbone
devObjective
 
Refactoring Large Web Applications with Backbone.js
Refactoring Large Web Applications with Backbone.jsRefactoring Large Web Applications with Backbone.js
Refactoring Large Web Applications with Backbone.js
Stacy London
 
Refactor Large applications with Backbone
Refactor Large applications with BackboneRefactor Large applications with Backbone
Refactor Large applications with Backbone
ColdFusionConference
 
Supa fast Ruby + Rails
Supa fast Ruby + RailsSupa fast Ruby + Rails
Supa fast Ruby + Rails
Jean-Baptiste Feldis
 
11 page-directive
11 page-directive11 page-directive
11 page-directive
snopteck
 
Socket applications
Socket applicationsSocket applications
Socket applications
João Moura
 
Sinatra
SinatraSinatra
Sinatra
kevinreiss
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
Gautam Rege
 
BP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesBP-6 Repository Customization Best Practices
BP-6 Repository Customization Best Practices
Alfresco Software
 
Tdc 2013 - Ecossistema Ruby
Tdc 2013 - Ecossistema RubyTdc 2013 - Ecossistema Ruby
Tdc 2013 - Ecossistema Ruby
Fabio Akita
 
REST API Pentester's perspective
REST API Pentester's perspectiveREST API Pentester's perspective
REST API Pentester's perspective
SecuRing
 
Ruby on Rails - Introduction
Ruby on Rails - IntroductionRuby on Rails - Introduction
Ruby on Rails - Introduction
Vagmi Mudumbai
 
Build and maintain large Ruby apps 0.0.1
Build and maintain large Ruby apps 0.0.1Build and maintain large Ruby apps 0.0.1
Build and maintain large Ruby apps 0.0.1
Enrico Teotti
 
From Ruby to Node.js
From Ruby to Node.jsFrom Ruby to Node.js
From Ruby to Node.js
jubilem
 
BPMS1
BPMS1BPMS1
BPMS1
tutorialsruby
 
BPMS1
BPMS1BPMS1
BPMS1
tutorialsruby
 
Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010
arif44
 
Rails Presentation (Anton Dmitriyev)
Rails Presentation (Anton Dmitriyev)Rails Presentation (Anton Dmitriyev)
Rails Presentation (Anton Dmitriyev)
True-Vision
 
Build and maintain large Ruby applications 2023
Build and maintain large Ruby applications 2023Build and maintain large Ruby applications 2023
Build and maintain large Ruby applications 2023
Enrico Teotti
 
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com RubyConsegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Fabio Akita
 
Refactor Large apps with Backbone
Refactor Large apps with BackboneRefactor Large apps with Backbone
Refactor Large apps with Backbone
devObjective
 
Refactoring Large Web Applications with Backbone.js
Refactoring Large Web Applications with Backbone.jsRefactoring Large Web Applications with Backbone.js
Refactoring Large Web Applications with Backbone.js
Stacy London
 
Refactor Large applications with Backbone
Refactor Large applications with BackboneRefactor Large applications with Backbone
Refactor Large applications with Backbone
ColdFusionConference
 
11 page-directive
11 page-directive11 page-directive
11 page-directive
snopteck
 
Socket applications
Socket applicationsSocket applications
Socket applications
João Moura
 
BP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesBP-6 Repository Customization Best Practices
BP-6 Repository Customization Best Practices
Alfresco Software
 
Tdc 2013 - Ecossistema Ruby
Tdc 2013 - Ecossistema RubyTdc 2013 - Ecossistema Ruby
Tdc 2013 - Ecossistema Ruby
Fabio Akita
 
REST API Pentester's perspective
REST API Pentester's perspectiveREST API Pentester's perspective
REST API Pentester's perspective
SecuRing
 
Ruby on Rails - Introduction
Ruby on Rails - IntroductionRuby on Rails - Introduction
Ruby on Rails - Introduction
Vagmi Mudumbai
 
Build and maintain large Ruby apps 0.0.1
Build and maintain large Ruby apps 0.0.1Build and maintain large Ruby apps 0.0.1
Build and maintain large Ruby apps 0.0.1
Enrico Teotti
 
From Ruby to Node.js
From Ruby to Node.jsFrom Ruby to Node.js
From Ruby to Node.js
jubilem
 
Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010
arif44
 
Rails Presentation (Anton Dmitriyev)
Rails Presentation (Anton Dmitriyev)Rails Presentation (Anton Dmitriyev)
Rails Presentation (Anton Dmitriyev)
True-Vision
 
Ad

More from Enrico Teotti (8)

Facilitating an online Agile Retrospective.pdf
Facilitating an online Agile Retrospective.pdfFacilitating an online Agile Retrospective.pdf
Facilitating an online Agile Retrospective.pdf
Enrico Teotti
 
Facilitating online agile retrospectives
Facilitating online agile retrospectivesFacilitating online agile retrospectives
Facilitating online agile retrospectives
Enrico Teotti
 
Measure success in agile retrospectives
Measure success in agile retrospectivesMeasure success in agile retrospectives
Measure success in agile retrospectives
Enrico Teotti
 
Structured retros
Structured retrosStructured retros
Structured retros
Enrico Teotti
 
3 things about public speaking
3 things about public speaking3 things about public speaking
3 things about public speaking
Enrico Teotti
 
feature flagging with rails engines v0.2
feature flagging with rails engines v0.2 feature flagging with rails engines v0.2
feature flagging with rails engines v0.2
Enrico Teotti
 
Feature flagging with rails engines
Feature flagging with rails enginesFeature flagging with rails engines
Feature flagging with rails engines
Enrico Teotti
 
Rails engines in large apps
Rails engines in large appsRails engines in large apps
Rails engines in large apps
Enrico Teotti
 
Facilitating an online Agile Retrospective.pdf
Facilitating an online Agile Retrospective.pdfFacilitating an online Agile Retrospective.pdf
Facilitating an online Agile Retrospective.pdf
Enrico Teotti
 
Facilitating online agile retrospectives
Facilitating online agile retrospectivesFacilitating online agile retrospectives
Facilitating online agile retrospectives
Enrico Teotti
 
Measure success in agile retrospectives
Measure success in agile retrospectivesMeasure success in agile retrospectives
Measure success in agile retrospectives
Enrico Teotti
 
3 things about public speaking
3 things about public speaking3 things about public speaking
3 things about public speaking
Enrico Teotti
 
feature flagging with rails engines v0.2
feature flagging with rails engines v0.2 feature flagging with rails engines v0.2
feature flagging with rails engines v0.2
Enrico Teotti
 
Feature flagging with rails engines
Feature flagging with rails enginesFeature flagging with rails engines
Feature flagging with rails engines
Enrico Teotti
 
Rails engines in large apps
Rails engines in large appsRails engines in large apps
Rails engines in large apps
Enrico Teotti
 

Recently uploaded (20)

How to Buy Snapchat Account A Step-by-Step Guide.pdf
How to Buy Snapchat Account A Step-by-Step Guide.pdfHow to Buy Snapchat Account A Step-by-Step Guide.pdf
How to Buy Snapchat Account A Step-by-Step Guide.pdf
jamedlimmk
 
The Gaussian Process Modeling Module in UQLab
The Gaussian Process Modeling Module in UQLabThe Gaussian Process Modeling Module in UQLab
The Gaussian Process Modeling Module in UQLab
Journal of Soft Computing in Civil Engineering
 
Relations and Functions – Understanding the Foundation of Mathematics.pptx
Relations and Functions – Understanding the Foundation of Mathematics.pptxRelations and Functions – Understanding the Foundation of Mathematics.pptx
Relations and Functions – Understanding the Foundation of Mathematics.pptx
srmvalliammaicse2
 
sss1.pptxsss1.pptxsss1.pptxsss1.pptxsss1.pptx
sss1.pptxsss1.pptxsss1.pptxsss1.pptxsss1.pptxsss1.pptxsss1.pptxsss1.pptxsss1.pptxsss1.pptx
sss1.pptxsss1.pptxsss1.pptxsss1.pptxsss1.pptx
ajayrm685
 
Interfacing PMW3901 Optical Flow Sensor with ESP32
Interfacing PMW3901 Optical Flow Sensor with ESP32Interfacing PMW3901 Optical Flow Sensor with ESP32
Interfacing PMW3901 Optical Flow Sensor with ESP32
CircuitDigest
 
COMPUTER GRAPHICS AND VISUALIZATION :MODULE-1 notes [BCG402-CG&V].pdf
COMPUTER GRAPHICS AND VISUALIZATION :MODULE-1 notes [BCG402-CG&V].pdfCOMPUTER GRAPHICS AND VISUALIZATION :MODULE-1 notes [BCG402-CG&V].pdf
COMPUTER GRAPHICS AND VISUALIZATION :MODULE-1 notes [BCG402-CG&V].pdf
Alvas Institute of Engineering and technology, Moodabidri
 
Nanometer Metal-Organic-Framework Literature Comparison
Nanometer Metal-Organic-Framework  Literature ComparisonNanometer Metal-Organic-Framework  Literature Comparison
Nanometer Metal-Organic-Framework Literature Comparison
Chris Harding
 
Resistance measurement and cfd test on darpa subboff model
Resistance measurement and cfd test on darpa subboff modelResistance measurement and cfd test on darpa subboff model
Resistance measurement and cfd test on darpa subboff model
INDIAN INSTITUTE OF TECHNOLOGY KHARAGPUR
 
Introduction to FLUID MECHANICS & KINEMATICS
Introduction to FLUID MECHANICS &  KINEMATICSIntroduction to FLUID MECHANICS &  KINEMATICS
Introduction to FLUID MECHANICS & KINEMATICS
narayanaswamygdas
 
Process Parameter Optimization for Minimizing Springback in Cold Drawing Proc...
Process Parameter Optimization for Minimizing Springback in Cold Drawing Proc...Process Parameter Optimization for Minimizing Springback in Cold Drawing Proc...
Process Parameter Optimization for Minimizing Springback in Cold Drawing Proc...
Journal of Soft Computing in Civil Engineering
 
Computer Security Fundamentals Chapter 1
Computer Security Fundamentals Chapter 1Computer Security Fundamentals Chapter 1
Computer Security Fundamentals Chapter 1
remoteaimms
 
Surveying through global positioning system
Surveying through global positioning systemSurveying through global positioning system
Surveying through global positioning system
opneptune5
 
最新版加拿大魁北克大学蒙特利尔分校毕业证(UQAM毕业证书)原版定制
最新版加拿大魁北克大学蒙特利尔分校毕业证(UQAM毕业证书)原版定制最新版加拿大魁北克大学蒙特利尔分校毕业证(UQAM毕业证书)原版定制
最新版加拿大魁北克大学蒙特利尔分校毕业证(UQAM毕业证书)原版定制
Taqyea
 
SICPA: Fabien Keller - background introduction
SICPA: Fabien Keller - background introductionSICPA: Fabien Keller - background introduction
SICPA: Fabien Keller - background introduction
fabienklr
 
Compiler Design_Code Optimization tech.pptx
Compiler Design_Code Optimization tech.pptxCompiler Design_Code Optimization tech.pptx
Compiler Design_Code Optimization tech.pptx
RushaliDeshmukh2
 
COMPUTER GRAPHICS AND VISUALIZATION :MODULE-02 notes [BCG402-CG&V].pdf
COMPUTER GRAPHICS AND VISUALIZATION :MODULE-02 notes [BCG402-CG&V].pdfCOMPUTER GRAPHICS AND VISUALIZATION :MODULE-02 notes [BCG402-CG&V].pdf
COMPUTER GRAPHICS AND VISUALIZATION :MODULE-02 notes [BCG402-CG&V].pdf
Alvas Institute of Engineering and technology, Moodabidri
 
Design of Variable Depth Single-Span Post.pdf
Design of Variable Depth Single-Span Post.pdfDesign of Variable Depth Single-Span Post.pdf
Design of Variable Depth Single-Span Post.pdf
Kamel Farid
 
Artificial intelligence and machine learning.pptx
Artificial intelligence and machine learning.pptxArtificial intelligence and machine learning.pptx
Artificial intelligence and machine learning.pptx
rakshanatarajan005
 
Dynamics of Structures with Uncertain Properties.pptx
Dynamics of Structures with Uncertain Properties.pptxDynamics of Structures with Uncertain Properties.pptx
Dynamics of Structures with Uncertain Properties.pptx
University of Glasgow
 
ZJIT: Building a Next Generation Ruby JIT
ZJIT: Building a Next Generation Ruby JITZJIT: Building a Next Generation Ruby JIT
ZJIT: Building a Next Generation Ruby JIT
maximechevalierboisv1
 
How to Buy Snapchat Account A Step-by-Step Guide.pdf
How to Buy Snapchat Account A Step-by-Step Guide.pdfHow to Buy Snapchat Account A Step-by-Step Guide.pdf
How to Buy Snapchat Account A Step-by-Step Guide.pdf
jamedlimmk
 
Relations and Functions – Understanding the Foundation of Mathematics.pptx
Relations and Functions – Understanding the Foundation of Mathematics.pptxRelations and Functions – Understanding the Foundation of Mathematics.pptx
Relations and Functions – Understanding the Foundation of Mathematics.pptx
srmvalliammaicse2
 
sss1.pptxsss1.pptxsss1.pptxsss1.pptxsss1.pptx
sss1.pptxsss1.pptxsss1.pptxsss1.pptxsss1.pptxsss1.pptxsss1.pptxsss1.pptxsss1.pptxsss1.pptx
sss1.pptxsss1.pptxsss1.pptxsss1.pptxsss1.pptx
ajayrm685
 
Interfacing PMW3901 Optical Flow Sensor with ESP32
Interfacing PMW3901 Optical Flow Sensor with ESP32Interfacing PMW3901 Optical Flow Sensor with ESP32
Interfacing PMW3901 Optical Flow Sensor with ESP32
CircuitDigest
 
Nanometer Metal-Organic-Framework Literature Comparison
Nanometer Metal-Organic-Framework  Literature ComparisonNanometer Metal-Organic-Framework  Literature Comparison
Nanometer Metal-Organic-Framework Literature Comparison
Chris Harding
 
Introduction to FLUID MECHANICS & KINEMATICS
Introduction to FLUID MECHANICS &  KINEMATICSIntroduction to FLUID MECHANICS &  KINEMATICS
Introduction to FLUID MECHANICS & KINEMATICS
narayanaswamygdas
 
Computer Security Fundamentals Chapter 1
Computer Security Fundamentals Chapter 1Computer Security Fundamentals Chapter 1
Computer Security Fundamentals Chapter 1
remoteaimms
 
Surveying through global positioning system
Surveying through global positioning systemSurveying through global positioning system
Surveying through global positioning system
opneptune5
 
最新版加拿大魁北克大学蒙特利尔分校毕业证(UQAM毕业证书)原版定制
最新版加拿大魁北克大学蒙特利尔分校毕业证(UQAM毕业证书)原版定制最新版加拿大魁北克大学蒙特利尔分校毕业证(UQAM毕业证书)原版定制
最新版加拿大魁北克大学蒙特利尔分校毕业证(UQAM毕业证书)原版定制
Taqyea
 
SICPA: Fabien Keller - background introduction
SICPA: Fabien Keller - background introductionSICPA: Fabien Keller - background introduction
SICPA: Fabien Keller - background introduction
fabienklr
 
Compiler Design_Code Optimization tech.pptx
Compiler Design_Code Optimization tech.pptxCompiler Design_Code Optimization tech.pptx
Compiler Design_Code Optimization tech.pptx
RushaliDeshmukh2
 
Design of Variable Depth Single-Span Post.pdf
Design of Variable Depth Single-Span Post.pdfDesign of Variable Depth Single-Span Post.pdf
Design of Variable Depth Single-Span Post.pdf
Kamel Farid
 
Artificial intelligence and machine learning.pptx
Artificial intelligence and machine learning.pptxArtificial intelligence and machine learning.pptx
Artificial intelligence and machine learning.pptx
rakshanatarajan005
 
Dynamics of Structures with Uncertain Properties.pptx
Dynamics of Structures with Uncertain Properties.pptxDynamics of Structures with Uncertain Properties.pptx
Dynamics of Structures with Uncertain Properties.pptx
University of Glasgow
 
ZJIT: Building a Next Generation Ruby JIT
ZJIT: Building a Next Generation Ruby JITZJIT: Building a Next Generation Ruby JIT
ZJIT: Building a Next Generation Ruby JIT
maximechevalierboisv1
 

Build and maintain large ruby applications - LA Ruby Oct meetup