Pro Yearly is on sale from $80 to $50! »

Lessons from the Other Side: Effectively Contributing to Open Source

Efa76b164a7de4a5730e4fa397cc4425?s=47 nzkoz
May 21, 2012

Lessons from the Other Side: Effectively Contributing to Open Source

Talk given at Red Dot Ruby Conf in singapore, may 2012.

Efa76b164a7de4a5730e4fa397cc4425?s=128

nzkoz

May 21, 2012
Tweet

Transcript

  1. Lessons From The Other Side Michael Koziarski michael@koziarski.com Tuesday, 22

    May 12
  2. Who am I? Tuesday, 22 May 12

  3. Tuesday, 22 May 12

  4. Tuesday, 22 May 12

  5. Tuesday, 22 May 12

  6. Tuesday, 22 May 12

  7. Tuesday, 22 May 12

  8. Tuesday, 22 May 12

  9. Long Time Tuesday, 22 May 12

  10. 6 Years! Tuesday, 22 May 12

  11. Tuesday, 22 May 12

  12. Tuesday, 22 May 12

  13. Learned Many Lessons Tuesday, 22 May 12

  14. Help Us Help You Tuesday, 22 May 12

  15. Koz Lesson #1: Listen to Users Tuesday, 22 May 12

  16. How do you spot a User? Tuesday, 22 May 12

  17. It’d be cool if... Tuesday, 22 May 12

  18. It’s a bit annoying how... Tuesday, 22 May 12

  19. Why do I have to ...? Tuesday, 22 May 12

  20. Here’s a patch that ... Tuesday, 22 May 12

  21. I’ll never use your software until ... Tuesday, 22 May

    12
  22. More Modular Tuesday, 22 May 12

  23. Has Tail Call Optimization Magic Beans Tuesday, 22 May 12

  24. Supports full internationalization Tuesday, 22 May 12

  25. Supports a real database Tuesday, 22 May 12

  26. Runs on Windows 8 Tuesday, 22 May 12

  27. Supports the ‘enterprise’ Tuesday, 22 May 12

  28. You Stop Swearing At Conferences Tuesday, 22 May 12

  29. Tuesday, 22 May 12

  30. I’ll never use your software Tuesday, 22 May 12

  31. Implications for You Tuesday, 22 May 12

  32. How could I add function X? Tuesday, 22 May 12

  33. Has anyone tried fixing Y? Tuesday, 22 May 12

  34. I can’t use this until Z! Tuesday, 22 May 12

  35. Why doesn’t your craptastic hunk of junk do Z? Tuesday,

    22 May 12
  36. “This is the very reason I don’t use Rails, and

    I know there’s many others who think like me.” Tuesday, 22 May 12
  37. “This is the very reason I don’t use Rails, and

    I know there’s many others who think like me.” Tuesday, 22 May 12
  38. “[blah blah] I don’t use Rails [blah blah blah]” Tuesday,

    22 May 12
  39. Tuesday, 22 May 12

  40. Koz Lesson #2: Users Make The Best Contributors Tuesday, 22

    May 12
  41. Koz Lesson #2: Users Make The Best Contributors* Tuesday, 22

    May 12
  42. Scratching Their Own Itch Tuesday, 22 May 12

  43. Solves a Problem They Actually Had Tuesday, 22 May 12

  44. Help Your Users Tuesday, 22 May 12

  45. Users as Contributors Tuesday, 22 May 12

  46. Users as Contributors Users Tuesday, 22 May 12

  47. Users as Contributors Users Contributors Tuesday, 22 May 12

  48. More Users Tuesday, 22 May 12

  49. More Contributors! Tuesday, 22 May 12

  50. Better Product!! Tuesday, 22 May 12

  51. Even More Users!!! Tuesday, 22 May 12

  52. Problem! Tuesday, 22 May 12

  53. Our Users are Developers Tuesday, 22 May 12

  54. Our Users are Engineers Tuesday, 22 May 12

  55. Our Users are Computer Scientists Tuesday, 22 May 12

  56. Rewrite Stuff Tuesday, 22 May 12

  57. Rewrite Stuff Endlessly Tuesday, 22 May 12

  58. <% if !protected_attributes.empty? %> ... <% else %> ... <%

    end %> Tuesday, 22 May 12
  59. Tuesday, 22 May 12

  60. <% if !protected_attributes.empty? %> ... <% else %> ... <%

    end %> Tuesday, 22 May 12
  61. <% if protected_attributes.any? %> ... <% else %> ... <%

    end %> Tuesday, 22 May 12
  62. <% unless protected_attributes.empty? %> ... <% else %> ... <%

    end %> Tuesday, 22 May 12
  63. Tuesday, 22 May 12

  64. Tuesday, 22 May 12

  65. Tuesday, 22 May 12

  66. Tuesday, 22 May 12

  67. Tuesday, 22 May 12

  68. Tuesday, 22 May 12

  69. Tuesday, 22 May 12

  70. 34 Tuesday, 22 May 12

  71. Tuesday, 22 May 12

  72. Implications for You Tuesday, 22 May 12

  73. The Bike Shed is Green Tuesday, 22 May 12

  74. Cope Tuesday, 22 May 12

  75. Focus on small, digestible fixes. Tuesday, 22 May 12

  76. Focus on minor annoyances Tuesday, 22 May 12

  77. Koz Lesson #3: Listen to Contributors Tuesday, 22 May 12

  78. Contributors are like Super Users Tuesday, 22 May 12

  79. Trust Tuesday, 22 May 12

  80. The Patches Problem Tuesday, 22 May 12

  81. The Early Days Volunteers Work To Do Tuesday, 22 May

    12
  82. Equilibrium Volunteers Work To Do Tuesday, 22 May 12

  83. Eventually Volunteers Work To Do Tuesday, 22 May 12

  84. Trouble Volunteers Work To Do Tuesday, 22 May 12

  85. Danger Tuesday, 22 May 12

  86. Neglected Patches Tuesday, 22 May 12

  87. Tuesday, 22 May 12

  88. Tuesday, 22 May 12

  89. Tuesday, 22 May 12

  90. Fork! Fork! Fork! Tuesday, 22 May 12

  91. Tuesday, 22 May 12

  92. Tuesday, 22 May 12

  93. Implications for you Tuesday, 22 May 12

  94. Do the grunt work Tuesday, 22 May 12

  95. We mess up Tuesday, 22 May 12

  96. We mess up Constantly Tuesday, 22 May 12

  97. Don’t take it personally Tuesday, 22 May 12

  98. Lesson for You #1: Maintainers are Human Tuesday, 22 May

    12
  99. Busy Tuesday, 22 May 12

  100. Tuesday, 22 May 12

  101. Tuesday, 22 May 12

  102. Tuesday, 22 May 12

  103. Tuesday, 22 May 12

  104. Tuesday, 22 May 12

  105. Make Mistakes Tuesday, 22 May 12

  106. Tuesday, 22 May 12

  107. Tuesday, 22 May 12

  108. Need Persuading Tuesday, 22 May 12

  109. Tuesday, 22 May 12

  110. Tuesday, 22 May 12

  111. Tuesday, 22 May 12

  112. Tuesday, 22 May 12

  113. Tuesday, 22 May 12

  114. Tuesday, 22 May 12

  115. Use Concrete Examples Tuesday, 22 May 12

  116. It’s a POLS violation Tuesday, 22 May 12

  117. It’s a POLS violation Tuesday, 22 May 12

  118. It’s not compliant with RFC2549 Tuesday, 22 May 12

  119. It’s not compliant with RFC2549 Tuesday, 22 May 12

  120. It could be more elegant Tuesday, 22 May 12

  121. It could be more elegant Tuesday, 22 May 12

  122. This breaks when ... Tuesday, 22 May 12

  123. This doesn’t let me ... Tuesday, 22 May 12

  124. Lesson for You #2 Applying Patches is Hard Work Tuesday,

    22 May 12
  125. Tuesday, 22 May 12

  126. Tuesday, 22 May 12

  127. Tuesday, 22 May 12

  128. Tuesday, 22 May 12

  129. What’s So Hard!? Tuesday, 22 May 12

  130. Why does the change fix it? Tuesday, 22 May 12

  131. Is it the right fix? Tuesday, 22 May 12

  132. def some_huge_method # 100 lines snipped rescue nil end Tuesday,

    22 May 12
  133. Tuesday, 22 May 12

  134. Lesson for You #3: Contributions should be a by-product Tuesday,

    22 May 12
  135. Don’t go looking for problems to solve Tuesday, 22 May

    12
  136. Solve the problems you find as you work. Tuesday, 22

    May 12
  137. Example Tuesday, 22 May 12

  138. $ ./script/generate model Person Tuesday, 22 May 12

  139. CREATE TABLE `people` ( id int(11) NOT NULL AUTO_INCREMENT, name

    varchar(255), employer_id int(11), PRIMARY KEY (`id`), KEY `index_people_by_employer` (`employer_id`) ) Tuesday, 22 May 12
  140. Writing SQL is hard Tuesday, 22 May 12

  141. $ ./script/generate model Person Tuesday, 22 May 12

  142. class CreatePeople < ActiveRecord::Migration def self.up create_table :people do |t|

    end end def self.down drop_table :people end end Tuesday, 22 May 12
  143. class CreatePeople < ActiveRecord::Migration def self.up create_table :people do |t|

    t.column :name, :string, :null=>true t.column :employer_id, :integer, :null=>false t.column :created_at, :datetime t.column :updated_at :datetime end end def self.down drop_table :people end end Tuesday, 22 May 12
  144. $ rake migrate Tuesday, 22 May 12

  145. Why do I have to edit the migration? Tuesday, 22

    May 12
  146. $ ./script/rails generate model Person name:string \ employer_id:integer Tuesday, 22

    May 12
  147. class CreatePeople < ActiveRecord::Migration def self.up create_table :people do |t|

    t.string :name, :null=>true t.integer :employer_id, :null=>false t.timestamps end end def self.down drop_table :people end end Tuesday, 22 May 12
  148. $ rake migrate Tuesday, 22 May 12

  149. class Person < ActiveRecord::Base end Tuesday, 22 May 12

  150. class Person < ActiveRecord::Base belongs_to :employer end Tuesday, 22 May

    12
  151. Why do I have to edit the model? Tuesday, 22

    May 12
  152. $ ./script/rails generate model Person \ name:string \ employer:belongs_to Tuesday,

    22 May 12
  153. class CreatePeople < ActiveRecord::Migration def self.up create_table :people do |t|

    t.string :name, :null=>true t.integer :employer_id, :null=>false t.timestamps end end def self.down drop_table :people end end Tuesday, 22 May 12
  154. class Person < ActiveRecord::Base belongs_to :employer end Tuesday, 22 May

    12
  155. class CreatePeople < ActiveRecord::Migration def self.up create_table :people do |t|

    t.string :name, :null=>true t.integer :employer_id, :null=>false t.timestamps end add_index :people, :employer_id end def self.down drop_table :people end end Tuesday, 22 May 12
  156. class CreatePeople < ActiveRecord::Migration def self.up create_table :people do |t|

    t.string :name, :null=>true t.integer :employer_id, :null=>false t.timestamps end add_index :people, :employer_id end def self.down drop_table :people end end Tuesday, 22 May 12
  157. Why do I have to add an index manually? Tuesday,

    22 May 12
  158. $ ./script/rails generate model Person \ name:string \ employer:belongs_to Tuesday,

    22 May 12
  159. class CreatePeople < ActiveRecord::Migration def self.up create_table :people do |t|

    t.string :name, :null=>true t.integer :employer_id, :null=>false t.timestamps end add_index :people, :employer_id end def self.down drop_table :people end end Tuesday, 22 May 12
  160. What Next? Tuesday, 22 May 12

  161. Small Incremental Improvements Tuesday, 22 May 12

  162. Motivated By Real Frustration Tuesday, 22 May 12

  163. Huge Net Improvement Tuesday, 22 May 12

  164. Not Just For Toy Features Tuesday, 22 May 12

  165. singapore_now = Time.zone.now # => Thu, 17 May 2012 18:12:11

    SGT +08:00 wellington_now = singapore_now.in_time_zone("Wellington") # => Thu, 17 May 2012 22:12:11 NZST +12:00 singapore_now == wellington_now # => true Tuesday, 22 May 12
  166. Conclusions Tuesday, 22 May 12

  167. Find Improvements During Your Day Job Tuesday, 22 May 12

  168. Submit Them In Small, Digestible Chunks Tuesday, 22 May 12

  169. Don’t Take Our Mistakes Personally Tuesday, 22 May 12

  170. Thanks! Michael Koziarski michael@koziarski.com @nzkoz Tuesday, 22 May 12