Django Packages     Case Study         1
We do cartwheels       2
We do cartwheels• Python• Django• Pinax• django-cms• Teach               3
We do cartwheels• Python• Django• Pinax• django-cms• Teach           ...and we’re hiring!                    3
Inception    4
Inception    4
Inception    5
Inception    6
Inception    6
Inception    6
Inception          “How about          a site to help        find Django apps?”    7
Inception                       django-apps.comTags!                Ads!            8
InceptionLicenseSVN?                  Ads! Feed              9
InceptionDjango Packages      10
Inception   Bullets of design    11
Inception• Usability                 Bullets of design                  11
Inception• Usability• Search         Bullets of design                  11
Inception• Usability• Search       Bullets of design• Comparison               11
Inception• Usability• Search       Bullets of design• Comparison• No Ads               11
InceptionTeam Scared of Rabbits                    12
InceptionTeam Scared of Rabbits                    12
InceptionTeam Scared of Rabbits                    12
InceptionTeam Scared of Rabbits                    12
Mullets   13
MulletsAPOLOGY: No pictures of me with a mullet                   13
Tag Clouds    14
Tag cloud is themullet of web 2.0        15
Grids, not Tags       16
Grids, not Tags       16
Grids, not Tags              User created            categories lacking                metadata       16
Grids, not tagscode.djangoproject.com/wiki/CMSAppsComparison                     17
Grids, not tagscode.djangoproject.com/wiki/CMSAppsComparison                     17
Grids, not tagscode.djangoproject.com/wiki/CMSAppsComparison                     17
Grids, not tagscode.djangoproject.com/wiki/CMSAppsComparisonWhat if tags could  have all this information?        17
Grids, not tagscode.djangoproject.com/wiki/CMSAppsComparisonEasy to model     withMany to Many!        18
Grids, not tagscode.djangoproject.com/wiki/CMSAppsComparisonEasier to model   with EAV using NoSQL!        19
Grids, not tagscode.djangoproject.com/wiki/CMSAppsComparisonEasy to model     withMany to Many!        20
Not gonna fitwww.djangopackages.com/grids/g/nosql/                 21
Not gonna fitwww.djangopackages.com/grids/g/nosql/                 21
Not gonna fitwww.djangopackages.com/grids/g/nosql/                 21
Not gonna fitwww.djangopackages.com/grids/g/nosql/                 21
Only hard metrics*        22
Only hard metrics*• No opinions                22
Only hard metrics*• No opinions• No rating systems                      22
Only hard metrics*• No opinions• No rating systems• No comments                      22
Only hard metrics*                           “We wanted hard metrics. So the                           package numbers are...
Only hard metrics*                                    “We wanted hard metrics. So the                                    p...
Only hard metrics        23
Only hard metricsYes/No          23
Only hard metrics          PyPIYes/No          23
Only hard metrics          PyPIYes/No           Supported repo sites          23
Only hard metrics          PyPIYes/No           Supported repo sites          23
Only hard metrics          PyPIYes/No           Supported repo sites          23
Only hard metrics  PyPI         GoogleGithub   SourceforgeBitbucket Launchpad          24
Only hard metrics  PyPI         GoogleGithub   SourceforgeBitbucket Launchpad          24
Only hard metrics  PyPI         GoogleGithub   SourceforgeBitbucket Launchpad          24
Only hard metrics  PyPI         GoogleGithub   SourceforgeBitbucket Launchpad          24
Only hard metrics  PyPI         GoogleGithub   SourceforgeBitbucket Launchpad          24
Regex vs XML     25
Regex vs XML• Could not find PyPI API                    25
Regex vs XML• Could not find PyPI API• DOAP is next to useless                    25
Regex vs XML• Could not find PyPI API• DOAP is next to useless• Time to slurp data out of web pages                    25
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 th...
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 th...
Regex vs XMLbit.ly/cu5Prt      26
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 th...
Dash Architecture        28
Dash Architecture• Django 1.2.1 / Pinax 0.9a1                     28
Dash Architecture• Django 1.2.1 / Pinax 0.9a1• Python 2.6.5                     28
Dash Architecture• Django 1.2.1 / Pinax 0.9a1• Python 2.6.5• Sqlite 3.6.12                     28
Dash Architecture• Django 1.2.1 / Pinax 0.9a1• Python 2.6.5• Sqlite 3.6.12• Ubuntu 10.4                     28
Dash Architecture• Django 1.2.1 / Pinax 0.9a1• Python 2.6.5• Sqlite 3.6.12• Ubuntu 10.4• HTTP Server:                     28
Dash Architecture• Django 1.2.1 / Pinax 0.9a1• Python 2.6.5• Sqlite 3.6.12• Ubuntu 10.4• HTTP Server: Apache              ...
Dash Architecture• Django 1.2.1 / Pinax 0.9a1• Python 2.6.5• Sqlite 3.6.12• Ubuntu 10.4• HTTP Server:                     28
Dash Architecture• Django 1.2.1 / Pinax 0.9a1• Python 2.6.5• Sqlite 3.6.12• Ubuntu 10.4• HTTP Server: Django Runserver    ...
Django Dash Placing         29
Django Dash Placing         29
Django Dash Placing         29
Django Dash Placing         29
Django Dash Placing         29
Django Dash PlacingI’m not bitter             29
Lessons Learned       30
Lessons LearnedResearch ahead of time        API limitations      Google Charts rock              30
Lessons Learned       31
Lessons LearnedPEP-8 is your friend     python -c “import this”    Keep things simple and flat       Corrections easier    ...
Lessons Learned       32
Lessons Learned    Fixtures are a must      Test and blow away your stuff constantlyHelps the designer with matching conte...
Lessons Learned       33
Lessons Learned Don’t optimize  prematurely Don’t start by removing Django bits   Write the project then analyzeEven the s...
Lessons Learned       34
Lessons LearnedHave a system architecture     plan       34
Lessons Learned            I was nearHave a systemuseless at            sys admin architecture     plan       34
Lessons Learned                  I was nearHave a system      useless at                  sys admin architecture     plan ...
Lessons Learned                                 I was near          Have a system           useless at                    ...
Lessons Learned       35
Lessons LearnedShare during the dash  Bouncing ideas off other teams is handy                    35
Lessons Learned       36
Lessons Learned       37
The First Month       38
The First Month “There’s a package for that”              38
The First Month      “There’s a package for that”“I’ve got your Django Package right here”                   38
The First Month  http://www.revsys.com/            39
The First Month  http://www.revsys.com/            39
The First Month  http://www.revsys.com/            39
The First Month  http://www.revsys.com/            39
The First Month       40
The First Month  PyPI         GoogleGithub   SourceforgeBitbucket Launchpad          41
The First Month  PyPI         GoogleGithub   SourceforgeBitbucket Launchpad          41
The First Month       42
The First Month       42
The First Month• Apache• Got email functioning• Page cleanup                    43
The First MonthWARNING       44
The First MonthWARNING       44
DjangoCon 2010      45
DjangoCon 2010  flickr.com/photos/bfirsh             45
DjangoCon 2010Our Friendly DSF president                     46
DjangoCon 2010WARNING      47
DjangoCon 2010WARNING      47
DjangoCon 2010If I had been there earlier I would not have lost sprinters                            48
DjangoCon 2010      49
DjangoCon 2010THIS ROCKS!              49
DjangoCon 2010http://djangopackages.com/api/v1/docs/                  50
Django-CMSdjango-cms.org/en/extensions             51
DjangoCon 2010   django-reversions          52
DjangoCon 2010   PyPI  Regex
DjangoCon 2010    PyPI
DjangoCon 2010 PyPIXMLRPC
DjangoCon 2010• AJAX controls on “I use this”• Caching• Fancy permission controls for deletions• History Graphs on grid vi...
Around DjangoCon  Used to help track features!               55
Around DjangoCon  Used to help track features!               55
Random Hacks of Kindness https://github.com/rhok-planet/crisishacks         http://www.crisishacks.com/                   ...
AutumnMoved from Kansas to Los Angeles
AutumnMoved from Kansas to Los Angeles
AutumnMoved from Kansas to Los Angeles
Early 2011Read the Docs         +        Django Packages
Read the DocsDjango Packages            59
Read the DocsDjango Packages            59
PyCon 2011    60
PyCon 2011WARNING     60
PyCon 2011WARNING     60
Pycon Sprint     61
Pycon SprintStarting early!        61
Pycon Sprint  PyPI        GoogleGithub   SourceforgeBitbucket Launchpad         62
Pycon Sprint  PyPI        GoogleGithub   SourceforgeBitbucket Launchpad         62
Pycon SprintBadges      63
Pycon Sprint    Top 10          Django-CMS   Downloads           Plugin       Core       Badges                           ...
Pycon Sprint PackagePagination      64
Pycon SprintShopping CartSelect your packages and get a requirements file!                       65
Pycon Sprint    X-Y Axisdjangopackages.com/grids/g/deployment                 66
pythonpackages.com       ?        67
pythonpackages.com       ?        67
pythonpackages.com     Are you going      to replace         PyPI?          68
pythonpackages.com     Are you going      to replace         PyPI?  NO!     68
pythonpackages.comPhase I        69
pythonpackages.com  Only display packagesformally released on PyPI            70
pythonpackages.com  Release your stuff!           71
Questions?    72
Upcoming SlideShare
Loading in...5
×

Django Packages: A Case Study

3,500

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
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,500
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
65
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Talk about how PyPI allows comments - which can be spoofed.\n
  • Talk about how PyPI allows comments - which can be spoofed.\n
  • Talk about how PyPI allows comments - which can be spoofed.\n
  • Talk about how PyPI allows comments - which can be spoofed.\n
  • Talk about how PyPI allows comments - which can be spoofed.\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • 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
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×