Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Django Packages: A Case Study

4,250 views

Published on

These are the slides for my 2011 pycon talk on Django Packages. Django Packages (http://djangopackages.com) is the place to review Django apps, frameworks, and projects.

Published in: Technology
  • Be the first to comment

Django Packages: A Case Study

  1. 1. Django Packages Case Study 1
  2. 2. We do cartwheels 2
  3. 3. We do cartwheels• Python• Django• Pinax• django-cms• Teach 3
  4. 4. We do cartwheels• Python• Django• Pinax• django-cms• Teach ...and we’re hiring! 3
  5. 5. Inception 4
  6. 6. Inception 4
  7. 7. Inception 5
  8. 8. Inception 6
  9. 9. Inception 6
  10. 10. Inception 6
  11. 11. Inception “How about a site to help find Django apps?” 7
  12. 12. Inception django-apps.comTags! Ads! 8
  13. 13. InceptionLicenseSVN? Ads! Feed 9
  14. 14. InceptionDjango Packages 10
  15. 15. Inception Bullets of design 11
  16. 16. Inception• Usability Bullets of design 11
  17. 17. Inception• Usability• Search Bullets of design 11
  18. 18. Inception• Usability• Search Bullets of design• Comparison 11
  19. 19. Inception• Usability• Search Bullets of design• Comparison• No Ads 11
  20. 20. InceptionTeam Scared of Rabbits 12
  21. 21. InceptionTeam Scared of Rabbits 12
  22. 22. InceptionTeam Scared of Rabbits 12
  23. 23. InceptionTeam Scared of Rabbits 12
  24. 24. Mullets 13
  25. 25. MulletsAPOLOGY: No pictures of me with a mullet 13
  26. 26. Tag Clouds 14
  27. 27. Tag cloud is themullet of web 2.0 15
  28. 28. Grids, not Tags 16
  29. 29. Grids, not Tags 16
  30. 30. Grids, not Tags User created categories lacking metadata 16
  31. 31. Grids, not tagscode.djangoproject.com/wiki/CMSAppsComparison 17
  32. 32. Grids, not tagscode.djangoproject.com/wiki/CMSAppsComparison 17
  33. 33. Grids, not tagscode.djangoproject.com/wiki/CMSAppsComparison 17
  34. 34. Grids, not tagscode.djangoproject.com/wiki/CMSAppsComparisonWhat if tags could have all this information? 17
  35. 35. Grids, not tagscode.djangoproject.com/wiki/CMSAppsComparisonEasy to model withMany to Many! 18
  36. 36. Grids, not tagscode.djangoproject.com/wiki/CMSAppsComparisonEasier to model with EAV using NoSQL! 19
  37. 37. Grids, not tagscode.djangoproject.com/wiki/CMSAppsComparisonEasy to model withMany to Many! 20
  38. 38. Not gonna fitwww.djangopackages.com/grids/g/nosql/ 21
  39. 39. Not gonna fitwww.djangopackages.com/grids/g/nosql/ 21
  40. 40. Not gonna fitwww.djangopackages.com/grids/g/nosql/ 21
  41. 41. Not gonna fitwww.djangopackages.com/grids/g/nosql/ 21
  42. 42. Only hard metrics* 22
  43. 43. Only hard metrics*• No opinions 22
  44. 44. Only hard metrics*• No opinions• No rating systems 22
  45. 45. Only hard metrics*• No opinions• No rating systems• No comments 22
  46. 46. Only hard metrics* “We wanted hard metrics. So the package numbers are pulled from the repo sites such as Github,• No opinions Bitbucket, and Google Code. Otherwise things get weighted funny. Sure, this system can be• No rating systems monkeyed with, but its a good metric for now. Weve had• No comments suggestions from Django core developers of coming up with a quality check system, things like pypants and/or a formalized approval system.” 22
  47. 47. Only hard metrics* “We wanted hard metrics. So the package numbers are pulled from the repo sites such as Github,• No opinions Bitbucket, and Google Code. Otherwise things get weighted funny. Sure, this system can be• No rating systems monkeyed with, but its a good metric for now. Weve had• No comments suggestions from Django core developers of coming up with a quality check system, things like pypants and/or a formalized approval system.” *Also because it kept the project scope smaller 22
  48. 48. Only hard metrics 23
  49. 49. Only hard metricsYes/No 23
  50. 50. Only hard metrics PyPIYes/No 23
  51. 51. Only hard metrics PyPIYes/No Supported repo sites 23
  52. 52. Only hard metrics PyPIYes/No Supported repo sites 23
  53. 53. Only hard metrics PyPIYes/No Supported repo sites 23
  54. 54. Only hard metrics PyPI GoogleGithub SourceforgeBitbucket Launchpad 24
  55. 55. Only hard metrics PyPI GoogleGithub SourceforgeBitbucket Launchpad 24
  56. 56. Only hard metrics PyPI GoogleGithub SourceforgeBitbucket Launchpad 24
  57. 57. Only hard metrics PyPI GoogleGithub SourceforgeBitbucket Launchpad 24
  58. 58. Only hard metrics PyPI GoogleGithub SourceforgeBitbucket Launchpad 24
  59. 59. Regex vs XML 25
  60. 60. Regex vs XML• Could not find PyPI API 25
  61. 61. Regex vs XML• Could not find PyPI API• DOAP is next to useless 25
  62. 62. Regex vs XML• Could not find PyPI API• DOAP is next to useless• Time to slurp data out of web pages 25
  63. 63. Regex vs XML• Could not find PyPI API• DOAP is next to useless• Time to slurp data out of web pages• I’m faster at regex then XML parsing 25
  64. 64. Regex vs XML• Could not find PyPI API• DOAP is next to useless• Time to slurp data out of web pages• I’m faster at regex then XML parsing• And I got it working 25
  65. 65. Regex vs XMLbit.ly/cu5Prt 26
  66. 66. Regex vs XML• Could not find PyPI API• DOAP is next to useless• Time to slurp data out of web pages• I’m faster at regex then XML parsing• And I got it working 27
  67. 67. Dash Architecture 28
  68. 68. Dash Architecture• Django 1.2.1 / Pinax 0.9a1 28
  69. 69. Dash Architecture• Django 1.2.1 / Pinax 0.9a1• Python 2.6.5 28
  70. 70. Dash Architecture• Django 1.2.1 / Pinax 0.9a1• Python 2.6.5• Sqlite 3.6.12 28
  71. 71. Dash Architecture• Django 1.2.1 / Pinax 0.9a1• Python 2.6.5• Sqlite 3.6.12• Ubuntu 10.4 28
  72. 72. Dash Architecture• Django 1.2.1 / Pinax 0.9a1• Python 2.6.5• Sqlite 3.6.12• Ubuntu 10.4• HTTP Server: 28
  73. 73. Dash Architecture• Django 1.2.1 / Pinax 0.9a1• Python 2.6.5• Sqlite 3.6.12• Ubuntu 10.4• HTTP Server: Apache 28
  74. 74. Dash Architecture• Django 1.2.1 / Pinax 0.9a1• Python 2.6.5• Sqlite 3.6.12• Ubuntu 10.4• HTTP Server: 28
  75. 75. Dash Architecture• Django 1.2.1 / Pinax 0.9a1• Python 2.6.5• Sqlite 3.6.12• Ubuntu 10.4• HTTP Server: Django Runserver 28
  76. 76. Django Dash Placing 29
  77. 77. Django Dash Placing 29
  78. 78. Django Dash Placing 29
  79. 79. Django Dash Placing 29
  80. 80. Django Dash Placing 29
  81. 81. Django Dash PlacingI’m not bitter 29
  82. 82. Lessons Learned 30
  83. 83. Lessons LearnedResearch ahead of time API limitations Google Charts rock 30
  84. 84. Lessons Learned 31
  85. 85. Lessons LearnedPEP-8 is your friend python -c “import this” Keep things simple and flat Corrections easier 31
  86. 86. Lessons Learned 32
  87. 87. Lessons Learned Fixtures are a must Test and blow away your stuff constantlyHelps the designer with matching content with layout 32
  88. 88. Lessons Learned 33
  89. 89. Lessons Learned Don’t optimize prematurely Don’t start by removing Django bits Write the project then analyzeEven the simplest of caching will help. 33
  90. 90. Lessons Learned 34
  91. 91. Lessons LearnedHave a system architecture plan 34
  92. 92. Lessons Learned I was nearHave a systemuseless at sys admin architecture plan 34
  93. 93. Lessons Learned I was nearHave a system useless at sys admin architecture plan Audrey to the rescue! 34
  94. 94. Lessons Learned I was near Have a system useless at sys admin architecture plan Audrey to the rescue!“Learn the sys admin stuff cause it affects everything” 34
  95. 95. Lessons Learned 35
  96. 96. Lessons LearnedShare during the dash Bouncing ideas off other teams is handy 35
  97. 97. Lessons Learned 36
  98. 98. Lessons Learned 37
  99. 99. The First Month 38
  100. 100. The First Month “There’s a package for that” 38
  101. 101. The First Month “There’s a package for that”“I’ve got your Django Package right here” 38
  102. 102. The First Month http://www.revsys.com/ 39
  103. 103. The First Month http://www.revsys.com/ 39
  104. 104. The First Month http://www.revsys.com/ 39
  105. 105. The First Month http://www.revsys.com/ 39
  106. 106. The First Month 40
  107. 107. The First Month PyPI GoogleGithub SourceforgeBitbucket Launchpad 41
  108. 108. The First Month PyPI GoogleGithub SourceforgeBitbucket Launchpad 41
  109. 109. The First Month 42
  110. 110. The First Month 42
  111. 111. The First Month• Apache• Got email functioning• Page cleanup 43
  112. 112. The First MonthWARNING 44
  113. 113. The First MonthWARNING 44
  114. 114. DjangoCon 2010 45
  115. 115. DjangoCon 2010 flickr.com/photos/bfirsh 45
  116. 116. DjangoCon 2010Our Friendly DSF president 46
  117. 117. DjangoCon 2010WARNING 47
  118. 118. DjangoCon 2010WARNING 47
  119. 119. DjangoCon 2010If I had been there earlier I would not have lost sprinters 48
  120. 120. DjangoCon 2010 49
  121. 121. DjangoCon 2010THIS ROCKS! 49
  122. 122. DjangoCon 2010http://djangopackages.com/api/v1/docs/ 50
  123. 123. Django-CMSdjango-cms.org/en/extensions 51
  124. 124. DjangoCon 2010 django-reversions 52
  125. 125. DjangoCon 2010 PyPI Regex
  126. 126. DjangoCon 2010 PyPI
  127. 127. DjangoCon 2010 PyPIXMLRPC
  128. 128. DjangoCon 2010• AJAX controls on “I use this”• Caching• Fancy permission controls for deletions• History Graphs on grid views• Query Optimization• Unit Tests! 54
  129. 129. Around DjangoCon Used to help track features! 55
  130. 130. Around DjangoCon Used to help track features! 55
  131. 131. Random Hacks of Kindness https://github.com/rhok-planet/crisishacks http://www.crisishacks.com/ 56
  132. 132. AutumnMoved from Kansas to Los Angeles
  133. 133. AutumnMoved from Kansas to Los Angeles
  134. 134. AutumnMoved from Kansas to Los Angeles
  135. 135. Early 2011Read the Docs + Django Packages
  136. 136. Read the DocsDjango Packages 59
  137. 137. Read the DocsDjango Packages 59
  138. 138. PyCon 2011 60
  139. 139. PyCon 2011WARNING 60
  140. 140. PyCon 2011WARNING 60
  141. 141. Pycon Sprint 61
  142. 142. Pycon SprintStarting early! 61
  143. 143. Pycon Sprint PyPI GoogleGithub SourceforgeBitbucket Launchpad 62
  144. 144. Pycon Sprint PyPI GoogleGithub SourceforgeBitbucket Launchpad 62
  145. 145. Pycon SprintBadges 63
  146. 146. Pycon Sprint Top 10 Django-CMS Downloads Plugin Core Badges ApprovedRead the ThisDocs Site! On PyPI Coverage Top 10 80+% Used 63
  147. 147. Pycon Sprint PackagePagination 64
  148. 148. Pycon SprintShopping CartSelect your packages and get a requirements file! 65
  149. 149. Pycon Sprint X-Y Axisdjangopackages.com/grids/g/deployment 66
  150. 150. pythonpackages.com ? 67
  151. 151. pythonpackages.com ? 67
  152. 152. pythonpackages.com Are you going to replace PyPI? 68
  153. 153. pythonpackages.com Are you going to replace PyPI? NO! 68
  154. 154. pythonpackages.comPhase I 69
  155. 155. pythonpackages.com Only display packagesformally released on PyPI 70
  156. 156. pythonpackages.com Release your stuff! 71
  157. 157. Questions? 72

×