Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Browser History Confessional: Searching My Recent Searches

Browser History Confessional: Searching My Recent Searches

We all only have so much working memory available in our brains. Developers may joke about spending their day composing search engine queries. The reason it's a joke is because of the truth behind it. Search-driven development is a reality.

Join me, and my actual search history, on a journey to solve recent challenges I faced. I'll categorize the different types of information I often search for. You'll leave with tips on retrieving the knowledge you need for your next bug, feature, or pull request.

Kevin Murphy

April 27, 2022
Tweet

More Decks by Kevin Murphy

Other Decks in Technology

Transcript

  1. @kevin_j_m Browser History Confessional Searching My Recent Searches @kevin_j_m Kevin

    Murphy
  2. Mine @kevin_j_m Alluvial Deposit Active Search History kevinjmurphy.com/alluvial how to

    give a good presentation
  3. @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
  4. @kevin_j_m What @kevin_j_m

  5. @kevin_j_m How @kevin_j_m

  6. @kevin_j_m Why @kevin_j_m

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

  8. @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
  9. @kevin_j_m Alluvial Deposit Sifting out 3 gems since 2022 @kevin_j_m

  10. @kevin_j_m Alluvial Deposit Active Search History Search History Searches: Search

    History 2 how to give a good presentation Kevin Murphy
  11. @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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 1 2 3 4 5 6 7 8 9 10

    11 12 @kevin_j_m NORMAL date_time_component.html.erb <div> <p id="date"> <%= l(@timestamp, format: :date) %> </p> <p id="time"> <%= l(@timestamp, format: :time_of_day) %> </p> </div> timestamp eruby Recall Details
  18. 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
  19. @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
  20. Mine @kevin_j_m Alluvial Deposit Active Search History Recall Details ruby

    strftime
  21. @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
  22. @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
  23. @kevin_j_m ruby-doc.org/stdlib-3.1.1/libdoc/date/rdoc/ DateTime.html#method-i-strftime

  24. 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
  25. 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
  26. @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
  27. @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
  28. @kevin_j_m Alluvial Deposit Active Search History DateTimeComponent May 18, 2022

    10:38 AM
  29. @kevin_j_m Alluvial Deposit Active Search History DateTimeComponent Unknown Unknown

  30. 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
  31. 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
  32. 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
  33. 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
  34. 1 2 3 4 5 6 7 8 9 10

    11 12 @kevin_j_m NORMAL date_time_component.html.erb <div> <%= heroicon "calendar" %> <p id="date"> <%= l(@timestamp, format: :date) %> </p> </div> placeholder eruby Solve Direct Problems
  35. 1 2 3 4 5 6 7 8 9 10

    11 12 @kevin_j_m NORMAL date_time_component.html.erb <div> <%= heroicon "calendar" %> <p id="date"> <%= l_datetime(@timestamp, format: :date) %> </p> </div> placeholder eruby Solve Direct Problems
  36. @kevin_j_m Solve Direct Problems > rails test # Running Error:

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

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

    DateTimeComponentTest#test_displays_the_formatted_date: NoMethodError: undefined method `l_datetime' for #<DateTimeC Ruby Exception
  39. @kevin_j_m Solve Direct Problems > rails test # Running Error:

    DateTimeComponentTest#test_displays_the_formatted_date: NoMethodError: undefined method `l_datetime' for #<DateTimeC app/helpers/datetime_helper.rb Ruby Exception
  40. @kevin_j_m github.com/github/view_component

  41. @kevin_j_m viewcomponent.org

  42. @kevin_j_m viewcomponent.org

  43. @kevin_j_m viewcomponent.org

  44. @kevin_j_m viewcomponent.org

  45. 1 2 3 4 5 6 7 8 9 10

    11 12 @kevin_j_m NORMAL date_time_component.html.erb <div> <%= heroicon "calendar" %> <p id="date"> <%= l_datetime(@timestamp, format: :date) %> </p> </div> placeholder eruby Solve Direct Problems
  46. 1 2 3 4 5 6 7 8 9 10

    11 12 @kevin_j_m NORMAL date_time_component.html.erb <div> <%= heroicon "calendar" %> <p id="date"> <%= helpers.l_datetime(@timestamp, format: :date) %> </p> </div> placeholder eruby Solve Direct Problems
  47. @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
  48. @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
  49. @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
  50. @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
  51. Mine @kevin_j_m Alluvial Deposit Active Search History Solve Direct Problems

    Processing #show as TURBO_STREAM
  52. @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
  53. @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
  54. Mine @kevin_j_m Alluvial Deposit Active Search History Solve Direct Problems

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

    Rails turbo render layout
  56. @kevin_j_m github.com/hotwired/turbo-rails

  57. @kevin_j_m discuss.rubyonrails.org/

  58. @kevin_j_m

  59. @kevin_j_m 🏃

  60. @kevin_j_m 📖

  61. @kevin_j_m 🎸

  62. @kevin_j_m 🍨

  63. @kevin_j_m ⁉

  64. @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/…
  65. @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.
  66. @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
  67. @kevin_j_m HOTWIRE HTML Over The Wire

  68. @kevin_j_m HOTWIRE ERB Over The Wire

  69. @kevin_j_m HOTWIRE ERB Over The Wire

  70. @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
  71. @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
  72. @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
  73. @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
  74. @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
  75. @kevin_j_m Alluvial Deposit Active Search History Search History Search History

    Comments
  76. @kevin_j_m rack-mini-profiler

  77. 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
  78. 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
  79. 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
  80. Mine @kevin_j_m Alluvial Deposit Active Search History Revisit Assumptions ruby

    n+1 bullet alternative
  81. @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
  82. @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
  83. @kevin_j_m evilmartians.com/chronicles/squash-n-plus-one-queries- early-with-n-plus-one-control-test-matchers-for-ruby-and-rails

  84. @kevin_j_m github.com/palkan/n_plus_one_control

  85. @kevin_j_m github.com/palkan/n_plus_one_control

  86. @kevin_j_m github.com/palkan/n_plus_one_control

  87. @kevin_j_m I Know I Can, But Should I? Evaluating Alternatives

    kevinjmurphy.com/railsconf-2019
  88. @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
  89. @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
  90. @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
  91. @kevin_j_m Alluvial Deposit Active Search History Search History Searches: Clear

    Clear Search History 0
  92. @kevin_j_m Code Review 1 2 3 4 5 class SearchHistory

    def self.clear Query.delete_all end end Submit Review
  93. @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
  94. Mine @kevin_j_m Alluvial Deposit Active Search History Share Communal Knowledge

    rails delete_all callbacks
  95. @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
  96. @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
  97. @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
  98. Mine @kevin_j_m Alluvial Deposit Active Search History Share Communal Knowledge

    rails delete_all vs destroy_all
  99. @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
  100. @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
  101. @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
  102. Mine @kevin_j_m Alluvial Deposit Active Search History Share Communal Knowledge

    rails dependent options
  103. @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
  104. @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
  105. @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
  106. @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
  107. @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
  108. @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
  109. @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
  110. @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
  111. Mine @kevin_j_m Alluvial Deposit Active Search History Search Experience Why

    Search?
  112. @kevin_j_m Alluvial Deposit Active Search History Search History Searches: Search

    Experience 4 Solve Direct Problems Recall Details Revisit Assumptions Share Communal Knowledge
  113. @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
  114. @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
  115. @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
  116. @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
  117. Mine @kevin_j_m Alluvial Deposit Active Search History Recall Details Presentation

    Resources
  118. @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
  119. @kevin_j_m