3. What?
● bongaus.fi - Spotting information in one
place
● Target (QR) -> url -> Info
● Examine info later
● Competitions (who spotted most? ...)
● Analytics after event
4. Why?
● 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
16. Development Notes
● 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
19. Why Django?
● 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
21. Why Bootstrap?
● 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/
22. Architecture
gunicorn
Bootstrap
Django 1.3
(markdown, sorl-thumbnail, qrcode, auth Luova paja
jsonrpclib, django-simplegravatar)
MySQL + South
24. Data Model
● 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/
26. South
● 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
28. Migration Migraine
1. Decided to do some drastic changes to
schema
2. Dumped South
3. Wrote migration manually
4. Migrate data using SQLite
5. dumpdata -> JSON
6. loaddata -> MySQL
7. Use South again
30. Database
● 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)
32. Authentication + Authorization
● 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)
33. On External Auth
● 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
35. Testing
● 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?)
37. Bootstrap
● Somewhat useful without customizations
even
● Use vanilla version till you need to
optimize (request size, amount etc.)
● Customizable using LESS (colors, etc.)
39. Development Speed
● 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)
42. 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