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.

Scot Hacker: Building a Killer Bucketlist Site with Python/Django

Presentation to BayCHI, April 12, 2011, at PARC in Palo Alto, California.

  • Login to see the comments

  • Be the first to like this

Scot Hacker: Building a Killer Bucketlist Site with Python/Django

  1. 1. Scot Hacker@shacker
  2. 2. Make it easy...
  3. 3. Digits•94212 items•5595 lists•Avg 17 items per list•Avg completion ratio: 16% Most completed goal
  4. 4. Zero Tolerance
  5. 5. Skydiving Machu Pichu
  6. 6. Empty Calories
  7. 7. Oembed is aMiracle
  8. 8. Return Traffic
  9. 9. Flagged!
  10. 10. Most-liked
  11. 11. Love
  12. 12. Volunteer at ...
  13. 13. Pay for a stranger’s groceries
  14. 14. Zorb
  15. 15. Zentangle
  16. 16. Guerilla Gardening
  17. 17. Run Over a Snake
  18. 18. Witness ParanormalActivity
  19. 19. Kill Someone
  20. 20. Punch a Man in the Face
  21. 21. Become a 24 hr/day stoner
  22. 22. Try flipper pie
  23. 23. Get the surgery I need to remove myscars
  24. 24. Have sex on a pool table
  25. 25. Unclear on the Concept
  26. 26. Item titles need Hoovering
  27. 27. Sanitizing Input
  28. 28. School of Bucketlist
  29. 29. To-Do •Mobile site •Mobile apps •Geolocation •Facebook •Badges
  30. 30. Code
  31. 31. • Tweepy• The bit.ly API• Noble character counter• CSS 3 Gradient Buttons
  32. 32. The Bucketlist ItemUser ProfileList Item
  33. 33. Fully Object OrientedItem.List.Profile.User.Email
  34. 34. MTV (Model, Template, View) Logic Match URL (the business end) Templates (limited logic) Data models
  35. 35. Django Admin
  36. 36. Object Relational MapperSELECT FROM bucket_item WHEREbucket_item.list_id = bucket_list.idAND bucket_list.profile_id = bucket_profile.idAND bucket_profile.user_id = auth_user.idAND auth_user.username LIKE shacker;OR:Item.objects.filter(list__profile__user__username=shacker)
  37. 37. Database support• MySQL• PostgreSQL• Oracle• SQLite• Multi-db support
  38. 38. Caching options• Filesystem• Database• Memcached• Local memory• Per-site• Per-view• Template fragments
  39. 39. Batteries included• Python libs for anything you can think of
  40. 40. Clean URLs• Regex-based URL structures• Safer, no cruft, encourages RESTfulness
  41. 41. Multilingual• Built-in support for lang detection, delivery
  42. 42. Data modeling is fun
  43. 43. Re-usable apps• Somewhat similar to plugins/modules• Break project into functional bits - abstract!
  44. 44. Clean template inheritance
  45. 45. Form generation, validation
  46. 46. Extensible authentication• Typical usage built in• But can tie easily to other systems
  47. 47. Comment, RSS systems• Attach comments to any data model• Generate RSS feed from any view
  48. 48. Very good community• Sophisticated developers, willing to help• High-quality devs• Lists, IRC, blogs...
  49. 49. Disadvantages• Smaller community/less traction• Get ready to write code• Availability of developers• App docs can be opaque
  50. 50. Workflow1. Define data model2. Get it working in the admin3. Define a public URL4. Write view code (business logic)5. Send objects to templates
  51. 51. Cleaning Titles, has_media

×