The Invisible Traceback

1,611 views

Published on

The Invisible Traceback: blockers that make potential contributors drop out (and how to fix them) - originally presented at the 2009 Ontario Linux Festival.

Abstract:

Unix Philosophy #12, Rule of Repair: "When you must fail, fail noisily and as soon as possible." This applies to both code and culture; when someone gets stuck and hollers for help, they are helping their community find and fix a participation process bug. However, the new contributor on-ramp pipeline is particularly tricky to debug; potential participants often struggle in silence, giving you no indication of their presence, let alone why they were unable to begin working with your project community. We'll go over some common blockers that quietly prevent students (and other new contributors) from beginning to participate in open source, and how to fix them no matter who you are.

Beginners enthusiastically welcomed - this talk is for everyone who's ever wanted to contribute to open source as well as everyone who's ever wanted to help someone else get started. It took me over 6 years of banging my head against a solitary wall to figure out how to contribute back to open source (and it's been worth it); here's how to figure out (or help someone figure out) the same thing in 99.999% less time.

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,611
On SlideShare
0
From Embeds
0
Number of Embeds
433
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

The Invisible Traceback

  1. 1. The invisible traceback <ul>Blockers that make potential contributors drop out (And how to fix them) Mel Chua [email_address] </ul>
  2. 2. Two requests:
  3. 3. Two requests: <ul>1. please ignore me </ul>
  4. 4. Two requests: <ul>1. please ignore me 2. please keep track of what you do when you ignore me </ul>
  5. 5. Who am I?
  6. 6. Who am I? <ul>hacker </ul>
  7. 7. Who am I? <ul>Hacker of systems </ul>
  8. 8. Who am I? <ul>Hacker of systems for people </ul>
  9. 9. Who am I? <ul>Hacker of systems of people </ul>
  10. 10. Who am I? <ul>Hacker of systems of people making systems for people </ul>
  11. 11. Where are the people?
  12. 12. here.
  13. 13. Or really, here.
  14. 14. Unix philosophy #12: rule of repair “ When you must fail, fail noisily and as soon as possible.”
  15. 15. These people know it. These people don't.
  16. 16. Listen underwater. The important thing is what you don't hear.
  17. 17. traceback web.Server Traceback (most recent call last): exceptions.ValueError?: invalid literal for int(): /usr/local/lib/python2.4/site-packages/twisted/web/server.py, line 152 in process 150 self.postpath = map(unquote, string.split(self.path[1:], '/')) 151 try: 152 resrc = self.site.getResourceFor(self) 153 self.render(resrc) Self site twisted.web.server.Site instance @ 0x4086f32c <twisted.web.server.Site instance at 0x4086f32c> path '/amd-full/builds/' postpath List instance @ 0x40d2f2ec Locals self twisted.web.server.Request instance @ 0x40d2448c <GET /amd-full/builds/ HTTP/1.1> Globals unquote <built-in function unquote> string <module 'string' from '/usr/lib/python2.4/string.pyc'> /usr/local/lib/python2.4/site-packages/twisted/web/server.py, line 507 in getResourceFor 505 # servers and disconnected sites. 506 request.sitepath = copy.copy(request.prepath) 507 return resource.getChildForRequest(self.resource, request) 508 Self resource buildbot.status.html.StatusResource? instance @ 0x4086512c <buildbot.status.html.StatusResource? instance at 0x4086512c> Locals self twisted.web.server.Site instance @ 0x4086f32c <twisted.web.server.Site instance at 0x4086f32c> request twisted.web.server.Request instance @ 0x40d2448c <GET /amd-full/builds/ HTTP/1.1> Globals copy <module 'copy' from '/usr/lib/python2.4/copy.pyc'> resource <module 'twisted.web.resource' from '/usr/local/lib/python2.4/site-packages/twisted/web/resource.pyc'> /usr/local/lib/python2.4/site-packages/twisted/web/resource.py, line 50 in getChildForRequest 48 pathElement = request.postpath.pop(0) 49 request.prepath.append(pathElement) 50 resource = resource.getChildWithDefault(pathElement, request) 51 return resource Locals pathElement 'builds' request twisted.web.server.Request instance @ 0x40d2448c <GET /amd-full/builds/ HTTP/1.1> resource buildbot.status.html.StatusResourceBuilder? instance @ 0x40c48c6c <buildbot.status.html.StatusResourceBuilder? instance at 0x40c48c6c> /usr/local/lib/python2.4/site-packages/twisted/web/resource.py, line 150 in getChildWithDefault 148 return self.children[path] 149 150 return self.getChild(path, request) 151 Self children Dictionary instance @ 0x40ca1e84 Locals path 'builds' self buildbot.status.html.StatusResourceBuilder? instance @ 0x40c48c6c <buildbot.status.html.StatusResourceBuilder? instance at 0x40c48c6c> request twisted.web.server.Request instance @ 0x40d2448c <GET /amd-full/builds/ HTTP/1.1> /usr/local/lib/python2.4/site-packages/buildbot/status/html.py, line 615 in getChild 613 num = request.postpath.pop(0) 614 request.prepath.append(num) 615 num = int(num) 616 if path == &quot;events&quot;: Locals path 'builds' num request twisted.web.server.Request instance @ 0x40d2448c <GET /amd-full/builds/ HTTP/1.1> exceptions.ValueError?: invalid literal for int():
  18. 18. traceback
  19. 19. Okay. Let's move around a bit.
  20. 20. blockers 1. I don't have it. 2. I'm not allowed to use it. 3. I'm not allowed to play with it. 4. I don't know I can tweak it. 5. I don't know how to tweak it. 6. I don't see why I'd tweak it. 7. I don't know anyone would care about my tweaks. 8. I don't know who would care about my tweaks. 9. I don't know how to approach the people who would care about my tweaks. 10. I don't know that this is a bug.
  21. 21. More blockers 11. The people on the mailing list are mean, 12. I'm afraid to break it. 13. I don't want to maintain my tweak forever. 14. No Volunteer Triage. Or: volunteer triage, but no volunteer exclusion 15. I'm too new to fit in with the old hats 16. Site is not well known 17. Need a BETTER ELEVATOR PITCH 18. Need a better project to start with gradually.
  22. 22. Yet More blockers 19. Need to clarify appropriateness of project for particular situations. 20. I don't know if this will suit my needs 21. i don't know if this will scale 22. I don't understand the scope of the project 23. I don't know English 24. I'm trying to be polite, and people are ignoring me 25. I've signed an NDA 26. i can't find the correct place to contribute (too many mailing lists, etc)
  23. 23. Learning about vs learning to be <ul>It's not what you know, </ul>It's what you want to learn.
  24. 24. How to get a job 1. study hard 2. Get good grades 3. Make a resume 4. Do research 5. Apply to jobs 6. Get interviewed 7. Get an offer 8. Accept the offer 9. Go to orientation 10. Work on something
  25. 25. How to work on open source 10. Work on something
  26. 26. What do these steps do? 2. Get good grades 3. Make a resume 4. Do research 5. Apply to jobs 6. Get interviewed 7. Get an offer 8. Accept the offer 9. Go to orientation
  27. 27. filters Hiring depends on the approval of one. participation depends on a rapport with many.
  28. 28. scaffolding
  29. 29. Dreyfus Model 1. novice 2. advanced beginner 3. Competent 4. proficient 5. expert
  30. 30. Radical transparency <ul>Teaches students you didn't know were there </ul>
  31. 31. (like these folks)
  32. 32. Fancy words 1. accidental learning 2. Zone of proximal development 3. legitimate peripheral participation
  33. 33. Learning to bike 1. watching 2. somebody pushes you 3. riding on the driveway
  34. 34. Pay it forward To pay for a lesson, document it.
  35. 35. Legitimate peripheral participation 1. mission-critical, 3. nobody really cares
  36. 36. Legitimate peripheral participation 1. mission-critical, 2. we have no time 3. nobody really cares
  37. 37. “hard to contribute” is a bug 1. mission-critical 2. we have no time 3. nobody really cares
  38. 38. Dreyfus Model 1. novice 2. advanced beginner 3. Competent 4. proficient 5. expert
  39. 39. Rule of thumb Everything is hackable.
  40. 40. Dreyfus Model 1. novice 2. advanced beginner 3. Competent 4. proficient 5. expert
  41. 41. algorithm 1. think of something you already care about 2. run (while thinking out loud)
  42. 42. Unix philosophy #12: rule of repair “ When you must fail, fail noisily and as soon as possible.”
  43. 43. traceback 1. older sibling uses linux 2. discover the gimp 3. offer to help 4. “no, go away”
  44. 44. traceback 1. Introduce self on mailing list 2. “I'm in charge”
  45. 45. traceback 1. offer to help 2. wait for instructions 3. loop runs forever
  46. 46. traceback How about yours?
  47. 47. [email_address] Thank you

×