Slide 1

Slide 1 text

@kevin_j_m Browser History Confessional Searching My Recent Searches @kevin_j_m Kevin Murphy

Slide 2

Slide 2 text

Mine @kevin_j_m Alluvial Deposit Active Search History kevinjmurphy.com/alluvial how to give a good presentation

Slide 3

Slide 3 text

@kevin_j_m 1 2 3 Alluvial Deposit Active Search History kevinjmurphy.com/alluvial how to give a good presentation Be prepared Look at the audience Read this before you get on stage

Slide 4

Slide 4 text

@kevin_j_m What @kevin_j_m

Slide 5

Slide 5 text

@kevin_j_m How @kevin_j_m

Slide 6

Slide 6 text

@kevin_j_m Why @kevin_j_m

Slide 7

Slide 7 text

Mine @kevin_j_m Alluvial Deposit Active Search History kevinjmurphy.com/alluvial Kevin Murphy

Slide 8

Slide 8 text

@kevin_j_m 1 2 3 Alluvial Deposit Active Search History About Me Kevin Murphy Personal Website kevinjmurphy.com @kevin_j_m / Twitter twitter.com BookBub: handpicked ebook deals bookbub.com BookBub is Hiring! bookbub.com/careers Tech Leads & Mobile Devs Ads

Slide 9

Slide 9 text

@kevin_j_m Alluvial Deposit Sifting out 3 gems since 2022 @kevin_j_m

Slide 10

Slide 10 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Search History 2 how to give a good presentation Kevin Murphy

Slide 11

Slide 11 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Search History 2 how to give a good presentation Kevin Murphy May 18, 2022 
 10:31 AM May 18, 2022 
 10:32 AM

Slide 12

Slide 12 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL date_time_component_test.rb class DateTimeComponentTest < ViewComponent::TestCase test "displays the formatted date and time" do end end timestamp ruby Recall Details

Slide 13

Slide 13 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL date_time_component_test.rb class DateTimeComponentTest < ViewComponent::TestCase test "displays the formatted date and time" do time = DateTime.new(2022, 3, 20, 3, 25, 6) end end timestamp ruby Recall Details

Slide 14

Slide 14 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL date_time_component_test.rb class DateTimeComponentTest < ViewComponent::TestCase test "displays the formatted date and time" do time = DateTime.new(2022, 3, 20, 3, 25, 6) render_inline(DateAndTimeComponent.new(time)) end end timestamp ruby Recall Details

Slide 15

Slide 15 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL date_time_component_test.rb class DateTimeComponentTest < ViewComponent::TestCase test "displays the formatted date and time" do time = DateTime.new(2022, 3, 20, 3, 25, 6) render_inline(DateAndTimeComponent.new(time)) assert_selector "p", id: "date", text: "Mar 20, 2022" end end timestamp ruby Recall Details

Slide 16

Slide 16 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL date_time_component_test.rb class DateTimeComponentTest < ViewComponent::TestCase test "displays the formatted date and time" do time = DateTime.new(2022, 3, 20, 3, 25, 6) render_inline(DateAndTimeComponent.new(time)) assert_selector "p", id: "date", text: "Mar 20, 2022" assert_selector "p", id: "time", text: "03:25 AM" end end timestamp ruby Recall Details

Slide 17

Slide 17 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL date_time_component.html.erb

<%= l(@timestamp, format: :date) %>

<%= l(@timestamp, format: :time_of_day) %>

timestamp eruby Recall Details

Slide 18

Slide 18 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL config/locales/en.yml en: time: formats: date: "" time_of_day: "" timestamp yaml Recall Details

Slide 19

Slide 19 text

@kevin_j_m Recall Details > rails test # Running F Finished in 0.414796s, 45.8056 runs/s, 4.9408 assertions/s 1 runs, 1 assertions, 1 failures, 0 errors, 0 skips

Slide 20

Slide 20 text

Mine @kevin_j_m Alluvial Deposit Active Search History Recall Details ruby strftime

Slide 21

Slide 21 text

@kevin_j_m 1 2 3 Alluvial Deposit Active Search History Recall Details ruby strftime Class: DateTime (Ruby 3.1.1) ruby-doc.org strftime (DateTime) - APIdock apidock.com Ruby Date Format (strftime) Cheat Sheet shortcutfoo.com

Slide 22

Slide 22 text

@kevin_j_m 1 2 3 Alluvial Deposit Active Search History Recall Details ruby strftime Class: DateTime (Ruby 3.1.1) ruby-doc.org strftime (DateTime) - APIdock apidock.com Ruby Date Format (strftime) Cheat Sheet shortcutfoo.com

Slide 23

Slide 23 text

@kevin_j_m ruby-doc.org/stdlib-3.1.1/libdoc/date/rdoc/ DateTime.html#method-i-strftime

Slide 24

Slide 24 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL config/locales/en.yml en: time: formats: date: "" time_of_day: "" timestamp yaml Recall Details

Slide 25

Slide 25 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL config/locales/en.yml en: time: formats: date: "%b %-d, %Y" time_of_day: "%I:%M %p" timestamp yaml Recall Details

Slide 26

Slide 26 text

@kevin_j_m Recall Details > rails test # Running . Finished in 0.414796s, 45.8056 runs/s, 4.9408 assertions/s 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips

Slide 27

Slide 27 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Recall Details 1 ruby strftime May 18, 2022 
 10:35 AM Bookmark search by keywords Reference materials

Slide 28

Slide 28 text

@kevin_j_m Alluvial Deposit Active Search History DateTimeComponent May 18, 2022 10:38 AM

Slide 29

Slide 29 text

@kevin_j_m Alluvial Deposit Active Search History DateTimeComponent Unknown Unknown

Slide 30

Slide 30 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL datetime_helper.rb module DatetimeHelper def l_datetime(timestamp, placeholder: "Unknown", **opts) end end placeholder ruby Solve Direct Problems

Slide 31

Slide 31 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL datetime_helper.rb module DatetimeHelper def l_datetime(timestamp, placeholder: "Unknown", **opts) if timestamp.present? else end end end placeholder ruby Solve Direct Problems

Slide 32

Slide 32 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL datetime_helper.rb module DatetimeHelper def l_datetime(timestamp, placeholder: "Unknown", **opts) if timestamp.present? l(timestamp, **opts) else end end end placeholder ruby Solve Direct Problems

Slide 33

Slide 33 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL datetime_helper.rb module DatetimeHelper def l_datetime(timestamp, placeholder: "Unknown", **opts) if timestamp.present? l(timestamp, **opts) else placeholder end end end placeholder ruby Solve Direct Problems

Slide 34

Slide 34 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL date_time_component.html.erb
<%= heroicon "calendar" %>

<%= l(@timestamp, format: :date) %>

placeholder eruby Solve Direct Problems

Slide 35

Slide 35 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL date_time_component.html.erb
<%= heroicon "calendar" %>

<%= l_datetime(@timestamp, format: :date) %>

placeholder eruby Solve Direct Problems

Slide 36

Slide 36 text

@kevin_j_m Solve Direct Problems > rails test # Running Error: DateTimeComponentTest#test_displays_the_formatted_date: NoMethodError: undefined method `l_datetime' for #

Slide 37

Slide 37 text

@kevin_j_m Solve Direct Problems > rails test # Running Error: DateTimeComponentTest#test_displays_the_formatted_date: NoMethodError: undefined method `l_datetime' for #

Slide 38

Slide 38 text

@kevin_j_m Solve Direct Problems > rails test # Running Error: DateTimeComponentTest#test_displays_the_formatted_date: NoMethodError: undefined method `l_datetime' for #

Slide 39

Slide 39 text

@kevin_j_m Solve Direct Problems > rails test # Running Error: DateTimeComponentTest#test_displays_the_formatted_date: NoMethodError: undefined method `l_datetime' for #

Slide 40

Slide 40 text

@kevin_j_m github.com/github/view_component

Slide 41

Slide 41 text

@kevin_j_m viewcomponent.org

Slide 42

Slide 42 text

@kevin_j_m viewcomponent.org

Slide 43

Slide 43 text

@kevin_j_m viewcomponent.org

Slide 44

Slide 44 text

@kevin_j_m viewcomponent.org

Slide 45

Slide 45 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL date_time_component.html.erb
<%= heroicon "calendar" %>

<%= l_datetime(@timestamp, format: :date) %>

placeholder eruby Solve Direct Problems

Slide 46

Slide 46 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL date_time_component.html.erb
<%= heroicon "calendar" %>

<%= helpers.l_datetime(@timestamp, format: :date) %>

placeholder eruby Solve Direct Problems

Slide 47

Slide 47 text

@kevin_j_m Solve Direct Problems > rails test # Running . Finished in 0.414796s, 45.8056 runs/s, 4.9408 assertions/s 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips

Slide 48

Slide 48 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Search History Comments 2 ruby strftime May 18, 2022 New Comment The ruby docs include a list of the directives. 10:35 AM B Create I S

Slide 49

Slide 49 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Search History Comments 2 ruby strftime May 18, 2022 New Comment The ruby docs include a list of the directives. 10:35 AM B Create I S

Slide 50

Slide 50 text

@kevin_j_m Solve Direct Problems Started POST "/comments" Processing by CommentsController#create as TURBO_STREAM Redirected to http://localhost:3000/queries/17 Completed 302 Found in 9ms Started GET "/queries/17" Processing by QueriesController#show as TURBO_STREAM Rendering queries/show.erb Rendered queries/show.erb Completed 200 OK in 6ms

Slide 51

Slide 51 text

Mine @kevin_j_m Alluvial Deposit Active Search History Solve Direct Problems Processing #show as TURBO_STREAM

Slide 52

Slide 52 text

@kevin_j_m Solve Direct Problems Started GET "/queries/17" Processing by QueriesController#show as TURBO_STREAM Rendering queries/show.erb Rendered queries/show.erb Completed 200 OK in 6ms Started GET "/queries/17" Processing by QueriesController#show as HTML Rendering layout layouts/application.html.erb Rendering queries/show.erb within layouts/application Rendered queries/show.erb within layouts/application Completed 200 OK in 6ms

Slide 53

Slide 53 text

@kevin_j_m Solve Direct Problems Started GET "/queries/17" Processing by QueriesController#show as TURBO_STREAM Rendering queries/show.erb Rendered queries/show.erb Completed 200 OK in 6ms Started GET "/queries/17" Processing by QueriesController#show as HTML Rendering layout layouts/application.html.erb Rendering queries/show.erb within layouts/application Rendered queries/show.erb within layouts/application Completed 200 OK in 6ms

Slide 54

Slide 54 text

Mine @kevin_j_m Alluvial Deposit Active Search History Solve Direct Problems Rails turbo stream not rendering layout

Slide 55

Slide 55 text

Mine @kevin_j_m Alluvial Deposit Active Search History Solve Direct Problems Rails turbo render layout

Slide 56

Slide 56 text

@kevin_j_m github.com/hotwired/turbo-rails

Slide 57

Slide 57 text

@kevin_j_m discuss.rubyonrails.org/

Slide 58

Slide 58 text

@kevin_j_m

Slide 59

Slide 59 text

@kevin_j_m 🏃

Slide 60

Slide 60 text

@kevin_j_m 📖

Slide 61

Slide 61 text

@kevin_j_m 🎸

Slide 62

Slide 62 text

@kevin_j_m 🍨

Slide 63

Slide 63 text

@kevin_j_m ⁉

Slide 64

Slide 64 text

@kevin_j_m Solve Direct Problems I have a fresh Rails 7 app, and my form isn’t rendering the show action after redirecting. What turbo thing am I missing? gist.github.com/…

Slide 65

Slide 65 text

@kevin_j_m Solve Direct Problems I have a fresh Rails 7 app, and my form isn’t rendering the show action after redirecting. What turbo thing am I missing? gist.github.com/… Shout-out to @RogersKonnor. It really helps if the views are *.html.erb, not only *.erb.

Slide 66

Slide 66 text

@kevin_j_m Solve Direct Problems Started GET "/queries/17" Processing by QueriesController#show as TURBO_STREAM Rendering queries/show.erb Rendered queries/show.erb Completed 200 OK in 6ms Started GET "/queries/17" Processing by QueriesController#show as HTML Rendering layout layouts/application.html.erb Rendering queries/show.erb within layouts/application Rendered queries/show.erb within layouts/application Completed 200 OK in 6ms

Slide 67

Slide 67 text

@kevin_j_m HOTWIRE HTML Over The Wire

Slide 68

Slide 68 text

@kevin_j_m HOTWIRE ERB Over The Wire

Slide 69

Slide 69 text

@kevin_j_m HOTWIRE ERB Over The Wire

Slide 70

Slide 70 text

@kevin_j_m Solve Direct Problems Started GET "/queries/17" Processing by QueriesController#show as TURBO_STREAM Rendering queries/show.erb Rendered queries/show.erb Completed 200 OK in 6ms Started GET "/queries/17" Processing by QueriesController#show as HTML Rendering layout layouts/application.html.erb Rendering queries/show.erb within layouts/application Rendered queries/show.erb within layouts/application Completed 200 OK in 6ms

Slide 71

Slide 71 text

@kevin_j_m Solve Direct Problems Started GET "/queries/17" Processing by QueriesController#show as TURBO_STREAM Rendering queries/show.html.erb Rendered queries/show.html.erb Completed 200 OK in 6ms Started GET "/queries/17" Processing by QueriesController#show as HTML Rendering layout layouts/application.html.erb Rendering queries/show.html.erb within layouts/application Rendered queries/show.html.erb within layouts/application Completed 200 OK in 6ms

Slide 72

Slide 72 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Solve Direct Problems Too many view_component documentation Copy exact issue Start at primary source May 18, 2022 10:48 AM

Slide 73

Slide 73 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Solve Direct Problems Too many view_component documentation Copy exact issue Start at primary source Rails turbo stream render Take a break Talk to a human May 18, 2022 10:45 AM May 18, 2022 10:48 AM

Slide 74

Slide 74 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Search History Comments 2 ruby strftime May 18, 2022 Comments The ruby docs include a list of the directives. 10:35 AM May 18, 2022 10:50 AM

Slide 75

Slide 75 text

@kevin_j_m Alluvial Deposit Active Search History Search History Search History Comments

Slide 76

Slide 76 text

@kevin_j_m rack-mini-profiler

Slide 77

Slide 77 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL app/controllers/queries_controller.rb class QueriesController < ApplicationController def index @queries = Query .all .order(searched_at: :asc) end end history-slowdown ruby Revisit Assumptions

Slide 78

Slide 78 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL app/controllers/queries_controller.rb class QueriesController < ApplicationController def index @queries = Query .all .order(searched_at: :asc) .includes(:comments) end end history-slowdown ruby Revisit Assumptions

Slide 79

Slide 79 text

1 2 3 4 5 6 7 8 9 10 11 12 @kevin_j_m NORMAL Gemfile group :development, :test do gem "bullet" end history-slowdown ruby Revisit Assumptions

Slide 80

Slide 80 text

Mine @kevin_j_m Alluvial Deposit Active Search History Revisit Assumptions ruby n+1 bullet alternative

Slide 81

Slide 81 text

@kevin_j_m 1 2 3 Alluvial Deposit Active Search History Revisit Assumptions ruby n+1 bullet alternative bullet Alternatives | LibHunt ruby.libhunt.com Squash N+1 queries early with n_plus_one_control evilmartians.com 4 Non-standard Ways to Fix N+1 Queries in Rails pawelurbanek.com

Slide 82

Slide 82 text

@kevin_j_m 1 2 3 Alluvial Deposit Active Search History Revisit Assumptions ruby n+1 bullet alternative bullet Alternatives | LibHunt ruby.libhunt.com Squash N+1 queries early with n_plus_one_control evilmartians.com 4 Non-standard Ways to Fix N+1 Queries in Rails pawelurbanek.com

Slide 83

Slide 83 text

@kevin_j_m evilmartians.com/chronicles/squash-n-plus-one-queries- early-with-n-plus-one-control-test-matchers-for-ruby-and-rails

Slide 84

Slide 84 text

@kevin_j_m github.com/palkan/n_plus_one_control

Slide 85

Slide 85 text

@kevin_j_m github.com/palkan/n_plus_one_control

Slide 86

Slide 86 text

@kevin_j_m github.com/palkan/n_plus_one_control

Slide 87

Slide 87 text

@kevin_j_m I Know I Can, But Should I? Evaluating Alternatives kevinjmurphy.com/railsconf-2019

Slide 88

Slide 88 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Revisit Assumptions 1 ruby n+1 bullet alternative May 18, 2022 11:05 AM Expand knowledge base Validate relevant criteria Make intentional choice

Slide 89

Slide 89 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Clear Search History 1 ruby n+1 bullet alternative May 18, 2022 11:05 AM

Slide 90

Slide 90 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Clear Clear Search History 1 ruby n+1 bullet alternative May 18, 2022 11:05 AM

Slide 91

Slide 91 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Clear Clear Search History 0

Slide 92

Slide 92 text

@kevin_j_m Code Review 1 2 3 4 5 class SearchHistory def self.clear Query.delete_all end end Submit Review

Slide 93

Slide 93 text

@kevin_j_m Share Communal Knowledge 1 2 3 class SearchHistory def self.clear Query.delete_all `delete_all` is a great choice for performance. I’m concerned, because this doesn’t honor `:dependent` rules, that it won’t delete associated records (like comments). Perhaps we start with using `destroy_all` and benchmark the worst-case performance impact? Add Comment B I S Submit Review

Slide 94

Slide 94 text

Mine @kevin_j_m Alluvial Deposit Active Search History Share Communal Knowledge rails delete_all callbacks

Slide 95

Slide 95 text

@kevin_j_m 1 2 3 Alluvial Deposit Active Search History Share Communal Knowledge rails delete_all callbacks Active Record Relation delete_all api.rubyonrails.org delete_all (ActiveRecord::Relation) apidock.com CollectionProxy `delete_all` and `destroy_all` gist.github.com

Slide 96

Slide 96 text

@kevin_j_m 1 2 3 Alluvial Deposit Active Search History Share Communal Knowledge rails delete_all callbacks Active Record Relation delete_all api.rubyonrails.org delete_all (ActiveRecord::Relation) apidock.com CollectionProxy `delete_all` and `destroy_all` gist.github.com

Slide 97

Slide 97 text

@kevin_j_m Share Communal Knowledge 1 2 3 class SearchHistory def self.clear Query.delete_all `delete_all` is a great choice for performance. I’m concerned, because this doesn’t honor `:dependent` rules, that it won’t delete associated records (like comments). Perhaps we start with using `destroy_all` and benchmark the worst-case performance impact? Add Comment B I S Submit Review

Slide 98

Slide 98 text

Mine @kevin_j_m Alluvial Deposit Active Search History Share Communal Knowledge rails delete_all vs destroy_all

Slide 99

Slide 99 text

@kevin_j_m 1 2 3 Alluvial Deposit Active Search History Share Communal Knowledge rails delete_all vs destroy_all CollectionProxy `delete_all` and `destroy_all` gist.github.com Delete vs. Destroy: Does it even matter? medium.com delete_all vs destroy_all ridingwithrails.wordpress.com

Slide 100

Slide 100 text

@kevin_j_m 1 2 3 Alluvial Deposit Active Search History Share Communal Knowledge rails delete_all vs destroy_all CollectionProxy `delete_all` and `destroy_all` gist.github.com Delete vs. Destroy: Does it even matter? medium.com delete_all vs destroy_all ridingwithrails.wordpress.com

Slide 101

Slide 101 text

@kevin_j_m Share Communal Knowledge 1 2 3 class SearchHistory def self.clear Query.delete_all `delete_all` is a great choice for performance. I’m concerned, because this doesn’t honor `:dependent` rules, that it won’t delete associated records (like comments). Perhaps we start with using `destroy_all` and benchmark the worst-case performance impact? Add Comment B I S Submit Review

Slide 102

Slide 102 text

Mine @kevin_j_m Alluvial Deposit Active Search History Share Communal Knowledge rails dependent options

Slide 103

Slide 103 text

@kevin_j_m 1 2 3 Alluvial Deposit Active Search History Share Communal Knowledge rails dependent options Active Record Associations - Ruby on Rails Guides guides.rubyonrails.org Rails Dependent Destroy dev.to Rails 6.1 adds support for destroying in background blog.saeloun.com

Slide 104

Slide 104 text

@kevin_j_m 1 2 3 Alluvial Deposit Active Search History Share Communal Knowledge rails dependent options Active Record Associations - Ruby on Rails Guides guides.rubyonrails.org Rails Dependent Destroy dev.to Rails 6.1 adds support for destroying in background blog.saeloun.com

Slide 105

Slide 105 text

@kevin_j_m Share Communal Knowledge 1 2 3 class SearchHistory def self.clear Query.delete_all `delete_all` is a great choice for performance. I’m concerned, because this doesn’t honor `:dependent` rules, that it won’t delete associated records (like comments). Perhaps we start with using `destroy_all` and benchmark the worst-case performance impact? Add Comment B I S Submit Review

Slide 106

Slide 106 text

@kevin_j_m Share Communal Knowledge 1 2 3 class SearchHistory def self.clear Query.delete_all `delete_all` is a great choice for performance. I’m concerned, because this doesn’t honor `:dependent` rules, that it won’t delete associated records (like comments). Perhaps a middle ground will be using `destroy_all` and changing the comments association to the `:destroy_async` option? We may need to do some benchmarking to test. Add Comment B I S Submit Review

Slide 107

Slide 107 text

@kevin_j_m Share Communal Knowledge 1 2 3 class SearchHistory def self.clear Query.delete_all `delete_all` is a great choice for performance. I’m concerned, because this doesn’t honor `:dependent` rules, that it won’t delete associated records (like comments). Perhaps a middle ground will be using `destroy_all` and changing the comments association to the `:destroy_async` option? We may need to do some benchmarking to test. Add Comment B I S Submit Review

Slide 108

Slide 108 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Share Communal Knowledge 3 rails delete_all callbacks Technical details May 18, 2022 11:12 AM

Slide 109

Slide 109 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Share Communal Knowledge 3 rails delete_all callbacks rails delete_all vs destroy_all Introduce alternative Technical details May 18, 2022 11:12 AM May 18, 2022 11:15 AM

Slide 110

Slide 110 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Share Communal Knowledge 3 rails delete_all callbacks rails delete_all vs destroy_all Introduce alternative Technical details rails dependent options Look at what I learned! May 18, 2022 11:12 AM May 18, 2022 11:15 AM May 18, 2022 11:21 AM

Slide 111

Slide 111 text

Mine @kevin_j_m Alluvial Deposit Active Search History Search Experience Why Search?

Slide 112

Slide 112 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Search Experience 4 Solve Direct Problems Recall Details Revisit Assumptions Share Communal Knowledge

Slide 113

Slide 113 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Search Experience 4 Solve Direct Problems Recall Details Revisit Assumptions Share Communal Knowledge Accumulate experience

Slide 114

Slide 114 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Search Experience 4 Solve Direct Problems Recall Details Revisit Assumptions Share Communal Knowledge Accumulate experience Utilize experience

Slide 115

Slide 115 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Search Experience 4 Solve Direct Problems Recall Details Revisit Assumptions Share Communal Knowledge Accumulate experience Utilize experience Expand experience

Slide 116

Slide 116 text

@kevin_j_m Alluvial Deposit Active Search History Search History Searches: Search Experience 4 Solve Direct Problems Recall Details Revisit Assumptions Share Communal Knowledge Accumulate experience Utilize experience Expand experience Preserve experience

Slide 117

Slide 117 text

Mine @kevin_j_m Alluvial Deposit Active Search History Recall Details Presentation Resources

Slide 118

Slide 118 text

@kevin_j_m 1 2 3 Alluvial Deposit Active Search History Recall Details Presentation Resources Browser History Confessional kevinjmurphy.com/browser-history Questions? Hallway Track @kevin_j_m / Twitter twitter.com

Slide 119

Slide 119 text

@kevin_j_m