Slide 1

Slide 1 text

Here’s to the crazy ones lazyatom.com/crazy-ones

Slide 2

Slide 2 text

2005

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

– Me, on a mailing list of friends, Thursday, 16 Aug 2001 “I forsake Java! I renounce C++! All hail The Mighty RUBY!!” 2.upto(100) do |num| puts "Ruby is #{num} times better that Java or C++" end

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

Rails 5.2 Active Storage Redis Cache Store HTTP/2 Early Hints Credentials

Slide 11

Slide 11 text

Rails 5.1 Yarn/Webpacker Integration System Tests Encrypted Secrets Parameterised Mailers

Slide 12

Slide 12 text

Rails 5.0 Action Cable API Mode Turbolinks 5

Slide 13

Slide 13 text

Rails 4.2 Active Job Asynchronous Mailers Adequate Record Web Console

Slide 14

Slide 14 text

Rails 4.1 Spring Template Variants Enums Mailer Previews

Slide 15

Slide 15 text

Rails 4.0 Russian Doll Caching Turbolinks Live Streaming Strong Parameters

Slide 16

Slide 16 text

Rails 3.2 Faster Development Mode Faster Routing Engine Active Record Store Strong Parameters

Slide 17

Slide 17 text

Rails 3.1 Asset Pipeline HTTP Streaming Full Engines! Identity Map Reversible Migrations

Slide 18

Slide 18 text

Rails 3.0 ARel Active Model Significant Internal Refactoring Bundler Railtie API

Slide 19

Slide 19 text

Rails 2.3 Application Templates Rack Engines! Sort-of! Rails Metal Nested Forms

Slide 20

Slide 20 text

Rails 2.2 Internationalisation HTTP Validators Thread Safety Database Connection Pool

Slide 21

Slide 21 text

Rails 2.1 Time Zones Dirty Attribute Tracking Named Scopes Better Caching

Slide 22

Slide 22 text

Rails 2.0 Resources MultiView Cookie Store Sessions “Sexy” Migrations

Slide 23

Slide 23 text

Rails 1.2 RESTful Routes Formats Multibyte Support Autoloading

Slide 24

Slide 24 text

Rails 1.1 RJS (Javascript written in Ruby) Polymorphic Associations Eager Loading respond_to

Slide 25

Slide 25 text

Rails 1.0 Dynamic Finders Filter Controls redirect_to :back

Slide 26

Slide 26 text

Rails 0.14 Plugins Cleaner Configuration Gem Freezing

Slide 27

Slide 27 text

Rails 0.13 Migrations Ajax Scriptaculous Visual Effects Named Routes

Slide 28

Slide 28 text

Application 1 Application 2 Application 3 Application 4

Slide 29

Slide 29 text

Sharing code between apps in 2005 Railtie inside a gem Plugin A regular gem … guess we better make it

Slide 30

Slide 30 text

Application 1 Application 2 Application 3 Application 4

Slide 31

Slide 31 text

Application 1 Application 2 Application 3 Application 4 engines.rb

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

– François “Thanks! These engines are great — this is the most excited I’ve been since finding Rails.”

Slide 35

Slide 35 text

– Robert “Sweet stuff! "Most coolest" plugin yet ! Nice "”

Slide 36

Slide 36 text

– Ramin “Amazing. Great job! Go see it! GO GO GO!”

Slide 37

Slide 37 text

– Scott “This is just awesome. […] This is the real answer to the reuse question. I just tried the login engine, and it totally works, easy! Wowee zowee...”

Slide 38

Slide 38 text

ENGINES INSIDE OTHER ENGINES

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

–DHH “It's a tale of caution, not condemnation”

Slide 41

Slide 41 text

–DHH “It's a tale of caution, not condemnation”

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

Hey, here’s an idea OK, but y’know, be careful

Slide 44

Slide 44 text

Hey, here’s an idea OK, but y’know, be careful Genuine stock image for “excited developer” Genuine stock image for “angry developer”

Slide 45

Slide 45 text

2005-2008

Slide 46

Slide 46 text

2005-2008

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

Some Guy said about 17 hours later: Engines are in fact de facto evil

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

https://www.flickr.com/photos/etlund/539344246

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

https://www.flickr.com/photos/robbyrussell

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

No content

Slide 64

Slide 64 text

–Rails Envy Podcast #51 “Kinda like Rails Engines… but doesn’t suck?” “Exactly.” (On the topic of Merb slices)

Slide 65

Slide 65 text

“Engines aren’t evil”

Slide 66

Slide 66 text

November 2008

Slide 67

Slide 67 text

November 2008

Slide 68

Slide 68 text

November 2008

Slide 69

Slide 69 text

THE END

Slide 70

Slide 70 text

[ insert coding montage ]

Slide 71

Slide 71 text

Engines plugin features Controllers, Helpers, Views Models Routes Migrations Assets

Slide 72

Slide 72 text

+ =

Slide 73

Slide 73 text

class Rails::Application < Rails::Engine

Slide 74

Slide 74 text

Engines plugin features Controllers, Helpers, Views Models Routes Migrations Assets

Slide 75

Slide 75 text

Technology Trigger Peak of Inflated Expectations Trough of Disillusionment Slope of Enlightenment Plateau of Productivity

Slide 76

Slide 76 text

Technology Trigger Peak of Inflated Expectations 2005 2011

Slide 77

Slide 77 text

Technology Trigger Peak of Inflated Expectations Trough of Received Opinions Slope of Fear, Uncertainty and Doubt Plateau of “Oh, are those still a thing?” 2005 2011

Slide 78

Slide 78 text

–Ryan Bigg & Yehuda Katz, Rails 3 in Action, Manning Publications, 2011 “There was a lot of controversy surrounding engines, and James spent a lot of his time defending the decision to develop them. Since then, however, the community has grown to accept the idea.”

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

Application 1 Application 2 Application 3 Application 4

Slide 81

Slide 81 text

Application 1 Application 2 Application 3 Application 4

Slide 82

Slide 82 text

The Doctrine

Slide 83

Slide 83 text

Engines you may know Devise Spree Refinery CMS Active Storage

Slide 84

Slide 84 text

Donate to archive.org Almost every site I referenced here is gone

Slide 85

Slide 85 text

Donate to archive.org Almost every site I referenced here is gone

Slide 86

Slide 86 text

No content

Slide 87

Slide 87 text

A History of Opinions The History of Rails

Slide 88

Slide 88 text

String#capitalize Array#forty_two

Slide 89

Slide 89 text

resource :session

Slide 90

Slide 90 text

Model-centric ▶ Resource-centric controllers (2.0) RJS & Scriptaculous ▶ UJS & jQuery (3.1) Observers ▶ Concerns (4.0)

Slide 91

Slide 91 text

Active Resource ▶ Nothing (Monoliths?) (4.0)

Slide 92

Slide 92 text

No content

Slide 93

Slide 93 text

Majestic Monolith vs. Microservices Fat Models vs. Presenters Callbacks vs. Service Objects System Tests vs. Unit Testing & Stubs Fixtures vs. Factories

Slide 94

Slide 94 text

No content

Slide 95

Slide 95 text

H A N A M I rom.rb dry-rb

Slide 96

Slide 96 text

The Doctrine

Slide 97

Slide 97 text

Hey, I have an idea!

Slide 98

Slide 98 text

Hey, I have an idea! Some Guy said about 12 seconds later: Your idea is in fact de facto evil

Slide 99

Slide 99 text

No content

Slide 100

Slide 100 text

No content

Slide 101

Slide 101 text

No content

Slide 102

Slide 102 text

. I’ve written about it here: http://t.co/…

Slide 103

Slide 103 text

No content

Slide 104

Slide 104 text

No content

Slide 105

Slide 105 text

Pearls, not diamonds

Slide 106

Slide 106 text

Thanks! lazyatom.com/crazy-ones (it really is the end now)