SlideShare una empresa de Scribd logo
1 de 123
Descargar para leer sin conexión
( °͡ ʖ͜ °͡) .oO(Hi)
Aaron 
Patterson
Ruby Core 
Rails Core
Enterprise 
Software
Twitter: tenderlove 
GitHub: tenderlove 
Instagram: tenderlove 
Yo: tenderlove
apatters@redhat.com
tenderlove@redhat.com
Tender 
Parents
OMG 
INTERNET 
POINTS
Revert Commits 
Count Too!
More mistakes == 
more points!!!!
Short Stack 
Engineer
Gorbachev Puff Puff Thunderhorse
SEA-TAC Airport YouTube
I am new!
Lost 
Passport
Very 
I am new!
Upgrading to 
Rails 4.x
Upgrading to 
Edge Rails
Rails Release 
Timeline
4.2 is Very Soon™
Next is 5.0
Upgrading Rails
Why?
Performance
Memory Reduction
Cost
How?
Push upstream
Move to gems
Change 
implementation
Issues Today
Rails Fork
Rails 
Monkey Patches
Monkey Patches
Rails Fork
Active Record 
Object Allocation Time
ms = Benchmark.ms do 
records = rows.map { |model| 
# … 
}.uniq 
end 
logger.debug(' %s Inst Including 
Associations (%.1fms - %drows)' % 
[join_base.active_record.name || 'SQL', 
ms, records.length])
We can’t 
upstream this :-(
ActiveSupport 
Notifications
ActiveSupport::Notifications.instrument( 
"some.key", payload 
) do 
records = rows.map { |model| 
# ... 
}.uniq 
end
ActiveSupport::Notifications.subscribe( 
'some.key' 
) do |value| 
# same logger statement 
end
Truncate table
# Executes the truncate statement. 
def truncate(table_name, name = nil) 
execute("TRUNCATE TABLE 
#{quote_table_name(table_name)}", name) 
end
Pushed up stream
Added a 
monkey patch 
to backport
64 bit 
primary keys
In PG: 
"integer" == 32bit
In PG: 
"bigint" == 64bit
Default is 32bit
Why?
¯_(ツ)_/¯
Schema.rb 
No PK 
declared 
create_table "accounts" do |t| 
t.string "name" 
t.integer "acctid" 
end 
Means 
32bit
We can 
upstream this
Determine backwards 
compat scheme
Default PK 
sequences
+ return if options[:id] == false 
+ return unless self.respond_to? 
(:set_pk_sequence!) 
+ 
+ value = ActiveRecord::Base.rails_sequence_start 
+ set_pk_sequence!(table_name, value) unless 
value == 0
We can’t 
upstream this
Extract and 
"super"
Add 
"extension" points.
Auto-reconnect
Supposedly fixed?
+ def 
self.did_retry_db_connection(connection 
,count) 
+ logger.info "CONNECTION RETRY: 
#{connection.class.name} retry 
##{count}." if logger 
+ end
Push Up 
Better Exceptions
Connection 
Extensions
Database 
Statistics
Create a new gem: 
activerecord-pg-stats
Virtual Columns
Declaration 
virtual_column :name, :type 
=> :string
2 Responsibilities
Declare a "column 
type" for reporting
Declare associations 
used by the method
Separate these 
concerns
Extract reporting
Push up relation 
declaration.
RJS
Land the Angular 
patch!!!!
jquery-rjs
prototype-rails
Monkey Patches
First Glance
Churn
"How often is stuff 
changing?"
git log --all -M -C --name-only -- 
format='format:' "$@" | sort | grep -v 
'^$' | uniq -c | sort -n | awk 'BEGIN 
{print "counttfile"} {print $1 "t" 
$2}'
445 vmdb/app/models/miq_server.rb 
498 vmdb/app/models/miq_provision_workflow.rb 
508 vmdb/app/models/miq_provision.rb 
590 vmdb/app/models/miq_report.rb 
720 vmdb/app/controllers/report_controller.rb 
777 vmdb/app/models/vm.rb 
802 vmdb/app/models/host.rb 
825 vmdb/app/helpers/application_helper.rb 
1186 vmdb/app/controllers/application.rb
Cyclomatic 
Complexity
Quantify Code 
Complexity
flog
1965.9: vmdb/db/migrate/20100302205959_collapsed_initial_migration.rb:7 
1131.5: vmdb/app/controllers/ops_controller/settings/common.rb:621 
1024.9: vmdb/app/controllers/application_controller/filter.rb:137 
951.9: vmdb/app/controllers/application_controller/performance.rb:220 
862.9: vmdb/spec/models/ems_refresh/refreshers/vc_refresher_spec.rb:27 
842.8: vmdb/app/controllers/ops_controller/settings/common.rb:881 
824.5: vmdb/spec/models/ems_refresh/refreshers/ 
rhevm_refresher_3_1_spec.rb:230 
791.5: vmdb/app/helpers/application_helper.rb:648
application_helper 
$$$$$$
Static Analysis
Find unused 
methods
Ripper
require 'ripper' 
class MyParser < Ripper 
def on_def name, _, _ 
# do something 
end 
end 
parser = MyParser.new "some code" 
parser.parse
class MyParser < Ripper 
attr_reader :methods, :calls 
def initialize code, file, line 
super 
@methods = [] 
@calls = [] 
end 
def on_def name, *rest 
@methods << name 
end 
alias :on_command :on_def 
def on_defs target, dot, name, *args 
@methods << name 
end 
def on_call target, dot, name 
@calls << name 
end 
def on_fcall name 
@calls << name 
end 
alias :on_symbol :on_fcall 
alias :on_vcall :on_fcall 
end
Find.find(ARGV[0]) do |file| 
next if File.directory? file 
ext = file[/(?<=.)w+$/] 
next unless ext 
case ext 
when 'rb' 
parser = MyParser.new(File.read(file), 
file, 1) 
parser.parse 
when 'erb' 
parser = MyParser.new 
ERB.new(File.read(file)).src, file, 1 
parser.parse 
end 
end
Dynamic Dispatch 
superclass.send("virtual_#{m}")
Static Analysis + 
Ruby = 
Probably also why 
Brakeman isn’t perfect
This Summit is 
GREAT!
Communication
Browser 
WebServer 
Memcached
Every 500ms 
Browser 
WebServer 
Memcached
Every 500ms 
Browser 
WebServer 
Memcached
Cache Size
Code Complexity
Bugs
Server Load
Every 500ms 
Browser 
WebServer 
Memcached
Always Question 
Assumptions
Ask Why
Business 
Requirements 
aren’t set in stone.
Thanks Everyone!
Questions?

Más contenido relacionado

La actualidad más candente

Kansai.pm 10周年記念 Plack/PSGI 入門
Kansai.pm 10周年記念 Plack/PSGI 入門Kansai.pm 10周年記念 Plack/PSGI 入門
Kansai.pm 10周年記念 Plack/PSGI 入門
lestrrat
 
Europython 2011 - Playing tasks with Django & Celery
Europython 2011 - Playing tasks with Django & CeleryEuropython 2011 - Playing tasks with Django & Celery
Europython 2011 - Playing tasks with Django & Celery
Mauro Rocco
 
Perl web frameworks
Perl web frameworksPerl web frameworks
Perl web frameworks
diego_k
 

La actualidad más candente (20)

Create a web-app with Cgi Appplication
Create a web-app with Cgi AppplicationCreate a web-app with Cgi Appplication
Create a web-app with Cgi Appplication
 
Ansible 202
Ansible 202Ansible 202
Ansible 202
 
AnsibleFest 2014 - Role Tips and Tricks
AnsibleFest 2014 - Role Tips and TricksAnsibleFest 2014 - Role Tips and Tricks
AnsibleFest 2014 - Role Tips and Tricks
 
Getting Started with Capistrano
Getting Started with CapistranoGetting Started with Capistrano
Getting Started with Capistrano
 
Mojo as a_client
Mojo as a_clientMojo as a_client
Mojo as a_client
 
Rack is Spectacular
Rack is SpectacularRack is Spectacular
Rack is Spectacular
 
Capistrano - automate all the things
Capistrano - automate all the thingsCapistrano - automate all the things
Capistrano - automate all the things
 
fabfile.py
fabfile.pyfabfile.py
fabfile.py
 
From * to Symfony2
From * to Symfony2From * to Symfony2
From * to Symfony2
 
V2 and beyond
V2 and beyondV2 and beyond
V2 and beyond
 
Ethiopian multiplication in Perl6
Ethiopian multiplication in Perl6Ethiopian multiplication in Perl6
Ethiopian multiplication in Perl6
 
More tips n tricks
More tips n tricksMore tips n tricks
More tips n tricks
 
Webrtc mojo
Webrtc mojoWebrtc mojo
Webrtc mojo
 
Kansai.pm 10周年記念 Plack/PSGI 入門
Kansai.pm 10周年記念 Plack/PSGI 入門Kansai.pm 10周年記念 Plack/PSGI 入門
Kansai.pm 10周年記念 Plack/PSGI 入門
 
Spark Jobserver
Spark JobserverSpark Jobserver
Spark Jobserver
 
Europython 2011 - Playing tasks with Django & Celery
Europython 2011 - Playing tasks with Django & CeleryEuropython 2011 - Playing tasks with Django & Celery
Europython 2011 - Playing tasks with Django & Celery
 
Working with databases in Perl
Working with databases in PerlWorking with databases in Perl
Working with databases in Perl
 
Perl web frameworks
Perl web frameworksPerl web frameworks
Perl web frameworks
 
Selenium sandwich-3: Being where you aren't.
Selenium sandwich-3: Being where you aren't.Selenium sandwich-3: Being where you aren't.
Selenium sandwich-3: Being where you aren't.
 
How to Upgrade Your Database Plan on Heroku and Rails Setup?
How to Upgrade Your Database Plan on Heroku and Rails Setup?How to Upgrade Your Database Plan on Heroku and Rails Setup?
How to Upgrade Your Database Plan on Heroku and Rails Setup?
 

Similar a Design Summit - Rails 4 Migration - Aaron Patterson

Performance Optimization of Rails Applications
Performance Optimization of Rails ApplicationsPerformance Optimization of Rails Applications
Performance Optimization of Rails Applications
Serge Smetana
 
Fast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on OracleFast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on Oracle
Raimonds Simanovskis
 
Ruby on Rails Oracle adaptera izstrāde
Ruby on Rails Oracle adaptera izstrādeRuby on Rails Oracle adaptera izstrāde
Ruby on Rails Oracle adaptera izstrāde
Raimonds Simanovskis
 
Using Ruby on Rails with legacy Oracle databases
Using Ruby on Rails with legacy Oracle databasesUsing Ruby on Rails with legacy Oracle databases
Using Ruby on Rails with legacy Oracle databases
Raimonds Simanovskis
 
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
Wesley Beary
 
Web aplikāciju izstrāde ar Ruby on Rails un Oracle DB
Web aplikāciju izstrāde ar Ruby on Rails un Oracle DBWeb aplikāciju izstrāde ar Ruby on Rails un Oracle DB
Web aplikāciju izstrāde ar Ruby on Rails un Oracle DB
Raimonds Simanovskis
 

Similar a Design Summit - Rails 4 Migration - Aaron Patterson (20)

Performance Optimization of Rails Applications
Performance Optimization of Rails ApplicationsPerformance Optimization of Rails Applications
Performance Optimization of Rails Applications
 
Behavior driven oop
Behavior driven oopBehavior driven oop
Behavior driven oop
 
Rails on Oracle 2011
Rails on Oracle 2011Rails on Oracle 2011
Rails on Oracle 2011
 
Fast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on OracleFast Web Applications Development with Ruby on Rails on Oracle
Fast Web Applications Development with Ruby on Rails on Oracle
 
Adventurous Merb
Adventurous MerbAdventurous Merb
Adventurous Merb
 
Otimizando Aplicações em Rails
Otimizando Aplicações em RailsOtimizando Aplicações em Rails
Otimizando Aplicações em Rails
 
Ruby on Rails Oracle adaptera izstrāde
Ruby on Rails Oracle adaptera izstrādeRuby on Rails Oracle adaptera izstrāde
Ruby on Rails Oracle adaptera izstrāde
 
fog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloudfog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloud
 
Using Ruby on Rails with legacy Oracle databases
Using Ruby on Rails with legacy Oracle databasesUsing Ruby on Rails with legacy Oracle databases
Using Ruby on Rails with legacy Oracle databases
 
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
 
Web aplikāciju izstrāde ar Ruby on Rails un Oracle DB
Web aplikāciju izstrāde ar Ruby on Rails un Oracle DBWeb aplikāciju izstrāde ar Ruby on Rails un Oracle DB
Web aplikāciju izstrāde ar Ruby on Rails un Oracle DB
 
Debugging of (C)Python applications
Debugging of (C)Python applicationsDebugging of (C)Python applications
Debugging of (C)Python applications
 
SproutCore and the Future of Web Apps
SproutCore and the Future of Web AppsSproutCore and the Future of Web Apps
SproutCore and the Future of Web Apps
 
Oracle adapters for Ruby ORMs
Oracle adapters for Ruby ORMsOracle adapters for Ruby ORMs
Oracle adapters for Ruby ORMs
 
Speedy TDD with Rails
Speedy TDD with RailsSpeedy TDD with Rails
Speedy TDD with Rails
 
Altitude NY 2018: Leveraging Log Streaming to Build the Best Dashboards, Ever
Altitude NY 2018: Leveraging Log Streaming to Build the Best Dashboards, EverAltitude NY 2018: Leveraging Log Streaming to Build the Best Dashboards, Ever
Altitude NY 2018: Leveraging Log Streaming to Build the Best Dashboards, Ever
 
DataMapper
DataMapperDataMapper
DataMapper
 
Rails 4.0
Rails 4.0Rails 4.0
Rails 4.0
 
Riak at The NYC Cloud Computing Meetup Group
Riak at The NYC Cloud Computing Meetup GroupRiak at The NYC Cloud Computing Meetup Group
Riak at The NYC Cloud Computing Meetup Group
 
Mist - Serverless proxy to Apache Spark
Mist - Serverless proxy to Apache SparkMist - Serverless proxy to Apache Spark
Mist - Serverless proxy to Apache Spark
 

Más de ManageIQ

Más de ManageIQ (20)

ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide Deck
 
ManageIQ - Sprint 235 Review - Slide Deck
ManageIQ - Sprint 235 Review - Slide DeckManageIQ - Sprint 235 Review - Slide Deck
ManageIQ - Sprint 235 Review - Slide Deck
 
ManageIQ - Sprint 234 Review - Slide Deck
ManageIQ - Sprint 234 Review - Slide DeckManageIQ - Sprint 234 Review - Slide Deck
ManageIQ - Sprint 234 Review - Slide Deck
 
ManageIQ - Sprint 233 Review - Slide Deck
ManageIQ - Sprint 233 Review - Slide DeckManageIQ - Sprint 233 Review - Slide Deck
ManageIQ - Sprint 233 Review - Slide Deck
 
ManageIQ - Sprint 232 Review - Slide Deck
ManageIQ - Sprint 232 Review - Slide DeckManageIQ - Sprint 232 Review - Slide Deck
ManageIQ - Sprint 232 Review - Slide Deck
 
ManageIQ - Sprint 231 Review - Slide Deck
ManageIQ - Sprint 231 Review - Slide DeckManageIQ - Sprint 231 Review - Slide Deck
ManageIQ - Sprint 231 Review - Slide Deck
 
ManageIQ - Sprint 230 Review - Slide Deck
ManageIQ - Sprint 230 Review - Slide DeckManageIQ - Sprint 230 Review - Slide Deck
ManageIQ - Sprint 230 Review - Slide Deck
 
ManageIQ - Sprint 229 Review - Slide Deck
ManageIQ - Sprint 229 Review - Slide DeckManageIQ - Sprint 229 Review - Slide Deck
ManageIQ - Sprint 229 Review - Slide Deck
 
ManageIQ - Sprint 228 Review - Slide Deck
ManageIQ - Sprint 228 Review - Slide DeckManageIQ - Sprint 228 Review - Slide Deck
ManageIQ - Sprint 228 Review - Slide Deck
 
Sprint 227
Sprint 227Sprint 227
Sprint 227
 
Sprint 226
Sprint 226Sprint 226
Sprint 226
 
Sprint 225
Sprint 225Sprint 225
Sprint 225
 
Sprint 224
Sprint 224Sprint 224
Sprint 224
 
Sprint 223
Sprint 223Sprint 223
Sprint 223
 
Sprint 222
Sprint 222Sprint 222
Sprint 222
 
Sprint 221
Sprint 221Sprint 221
Sprint 221
 
Sprint 220
Sprint 220Sprint 220
Sprint 220
 
Sprint 219
Sprint 219Sprint 219
Sprint 219
 
Sprint 218
Sprint 218Sprint 218
Sprint 218
 
Sprint 217
Sprint 217Sprint 217
Sprint 217
 

Último

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 

Design Summit - Rails 4 Migration - Aaron Patterson