bongaus.fi - Spotting Service Powered by Django
-
Upload
juho-vepsaelaeinen -
Category
Technology
-
view
1.710 -
download
1
description
Transcript of bongaus.fi - Spotting Service Powered by Django
bongaus.fiSpotting Service
Powered byDjango
Juho Vepsäläinen
● Jukka Raimovaara (Mentalhouse Oy), ○ Perl-guru, hosting
● Juho Vepsäläinen (Koodilehto co-op), ○ Python, JavaScript○ @bebraw (Twitter)○ nixtu.blogspot.com
Who?
● bongaus.fi - Spotting information in one place
● Target (QR) -> url -> Info● Examine info later● Competitions (who spotted most? ...)● Analytics after event
What?
● Initiated by Jyväskylä Design Week (contract work)
● Extended on need basis (AgileJkl pivot)● On longer term we might want to get
some bucks out of it
Why?
Evolution
http://autiomaa.galleria.fi/kuvat/2012/agilejkl/20120418-IMG_8483.jpg
http://autiomaa.galleria.fi/kuvat/2012/agilejkl/20120418-IMG_8530.jpg
http://autiomaa.galleria.fi/kuvat/2012/agilejkl/20120418-IMG_8522.jpg
● Instanssi demo: working Minimum Viable Product (MVP) with a few users
● Design Week: no notable use, bottleneck in content production
● AgileJkl pivot: success, around half (~100) of the attendees participated
Development Notes
Technology
http://dl-web.dropbox.com/u/10320/django/wallpaper/magic-pony-django-wallpaper.png
● Challenge: team of two, tight schedule● Familiar already. Could've used Node or
something else but Django felt like a safe bet
● Admin UI big bonus on retrospect
Why Django?
http://www.flickr.com/photos/12142259@N00/4084706293/ PixelPlacebo CC BY-NC
● Creating a good and responsive CSS layout is tough
● Bootstrap helps quite a bit!● Provides column layout and lots of other
goodies● http://twitter.github.com/bootstrap/
Why Bootstrap?
gunicorn
Architecture
Django 1.3(markdown, sorl-thumbnail, qrcode, jsonrpclib, django-simplegravatar)
Bootstrap
MySQL + South
auth Luova paja
● pip● virtualenv, virtualenvwrapper● git● Adobe InDesign (generated cards)● Adobe Illustrator (logo)● jQuery (Slimbox 2, Masonry, Rating)
In Addition
● Modeled Events, Targets, Spotting and a couple of more
● Defined some business logic there instead of views (good idea in this case)
● Could go further in this by using Managers and some meta-hackery. See http://dabapps.com/blog/higher-level-query-api-django-orm/
Data Model
Lessons Learned
● Definitely worth using● Worked mostly fine● Had to dump it once and build own
custom migration (SQLite to rescue)● South's development (lack of it) worrying
South
http://www.flickr.com/photos/9049083@N04/2332755401/ aldoaldoz CC BY-NC-SA
1. Decided to do some drastic changes to schema
2. Dumped South3. Wrote migration manually4. Migrate data using SQLite5. dumpdata -> JSON6. loaddata -> MySQL7. Use South again
Migration Migraine
http://www.flickr.com/photos/68907151@N00/45751138/ Kevin Severud BY-SA
● SQLite ok for dev● Made it difficult to spot certain issues,
though due to loose constraints● MySQL in production (be careful with
conf! UTF-8, engine)● Maintained demo fixtures for a while
(good idea)
Database
http://www.flickr.com/photos/92079962@N00/165513002/ Esther17 BY-NC-ND
● Django's native auth in dev● Custom solution (ext. auth.) in production● Ext. auth hooks into Django User, though● Some custom code for authorization (ie.
target ownership)
Authentication + Authorization
● Part of Luova paja that runs on a CMS● Provides registration + login (FB, regular)● Effectively performs redirects and uses
JSON-RPC● Utilizes checksums (secret keys) and user
info exchange
On External Auth
http://www.flickr.com/photos/95572727@N00/338474903/ Stuck in Customs BY-NC-SA
● Unit tests for core logic● Eased development somewhat (harder to
break)● Probably should've tested views and urls
too● Acceptance tests that describe the user's
flow might have been handy too to have (Selenium, zombie?)
Testing
http://www.flickr.com/photos/75654019@N00/100230432/ luxuryluke CC BY-NC-ND
● Somewhat useful without customizations even
● Use vanilla version till you need to optimize (request size, amount etc.)
● Customizable using LESS (colors, etc.)
Bootstrap
http://www.flickr.com/photos/25489182@N04/5022825091/ Philipp Lücke BY-NC
● Developing a MVP was a good idea (Instanssi demo)
● The rest grew around that● Pivots affect velocity (new, possibly
conflicting logic)● Tests are essential due to this (easier to
spot goof ups)
Development Speed
"Perfect is the enemy of good"
Summary
● bongaus.fi provides a way to store spotting information in one place
● Might grow into a business of some sort● MVPs are valuable!● Django+Bootstrap was a good combo
Summary
?? ?