Lupapiste – an interactive service for citizens
with HTML 5 JS + Clojure + MongoDB
Nääsvillen oliopäivät 13.12.2012
Senior Software Designer
Timo Lehtonen [email protected]
Top 100-list of Javala:
Gamification - apply game-like features to a (often boring) non-game thing.
Solita – an ICT company from Nääsville
2012
Finlayson 1962: Thousands of people in manufacturing business
Copyright: Tampereen kaupungin kuva-arkisto
Finlayson 2012: 200 people manufacturing Online businesses, BI solutions, ERP systems, …
Solita has one value: Care
Source: levikintarkastus.fi
ERP
Customer: environmental administration (Ympäristöministeriö) Released: in march 2013.
Aloitus
Aloitus Aamulehti 23.8.2012
Lupapiste handles 16 permit types in 20 pilot municipalities in the first phase
Keynote by Cockburn at Oliopäivät 2008
Haikala, I., and J. Märijärvi. "Ohjelmistotuotanto. 11. p." Jyväskylä: Gummerrus Kirjapaino Oy (2006).
Haikala, I., and J. Märijärvi. "Ohjelmistotuotanto. 11. p." Jyväskylä: Gummerrus Kirjapaino Oy (2006).
Pekka Abrahams-son at Oliopäivät 2012: ”Be ready to fail. Create a theory.”
Pasi Kovanen, Jarkko Järvenpää, Vincit at Oliopäivät 2012: try, measure and learn, try again
A similar circle of ”do, make a theory, do (fail?) again!”
Keynote by Cockburn at Oliopäivät 2008
Keynote by Cockburn at Oliopäivät 2008
MongoDB
Clojure back-end
POST /rest/command: {”command”: ”add-comment”
”applicationId”: ”123”
”text”: ”Autotallin räys…”}
Command
MongoDB
Application Architecture
Clojure back-end
POST /rest/command: {”command”: ”add-comment”
”applicationId”: ”123”
”text”: ”Autotallin räys…”}
Command
MongoDB
Application Architecture
Clojure back-end
POST /rest/command: {”command”: ”add-comment”
”applicationId”: ”123”
”text”: ”Autotallin räys…”}
Command
MongoDB
Application Architecture
{”ok”: ”true”}
Clojure back-end
POST /rest/command: {”command”: ”add-comment”
”applicationId”: ”123”
”text”: ”Autotallin räys…”}
Command
MongoDB
Application Architecture
{”ok”: ”true”}
GET /rest/application
Clojure back-end
POST /rest/command: {”command”: ”add-comment”
”applicationId”: ”123”
”text”: ”Autotallin räys…”}
Command
MongoDB
Application Architecture
{”ok”: ”true”}
GET /rest/application
Clojure back-end
POST /rest/command: {”command”: ”add-comment”
”applicationId”: ”123”
”text”: ”Autotallin räys…”}
Command
MongoDB
Application Architecture
{”ok”: ”true”}
GET /rest/application
Clojure back-end
POST /rest/command: {”command”: ”add-comment”
”applicationId”: ”123”
”text”: ”Autotallin räys…”}
Command
MongoDB
Application Architecture
{”ok”: ”true”}
GET /rest/application
4
Be slow – design the schema first. Design it using a UI demo.
A new foundation added at Oliopäivät 2012.
Be slow - schema first
Schema - Greek word skhēma - shape, diagram, or more generally plan.
Source: Uusi sivistyssanakirja freely translated
4
Be slow – design the schema first. Design it using a UI demo.
Be slow - schema first
Schema - Greek word skhēma - shape, diagram, or more generally plan.
Source: Uusi sivistyssanakirja freely translated
Plan 1. Lupapiste data model diagram
4
Be slow – design the schema first. Design it using a UI demo.
Be slow - Proof the schema with real data
Plan 1b. Data model with explanation.
Schema - Greek word skhēma - shape, diagram, or more generally plan.
Source: Uusi sivistyssanakirja freely translated
4
Be slow – design the schema first. Design it using a UI demo.
Database schema is a service interface. The only specification that matters.
Big Data
1. Design the schema first.
Big Data
Then build an app on top of it
HTML 5 JS SPA UI
Clojure back-end
REST API
JSON
Big Data
Then build an app on top of it
HTML 5 JS SPA UI
Clojure back-end
REST API
JSON
Big Data
Then build an app on top of it
HTML 5 JS SPA UI
Clojure back-end
REST API
JSON
Big Data
Then build an app on top of it
HTML 5 JS SPA UI
Clojure back-end
REST API
Big Data
Then build an app on top of it
HTML 5 JS SPA UI
Clojure back-end
REST API
JSON
Big Data
Then build an app on top of it
HTML 5 JS SPA UI
Clojure back-end
REST API
JSON
Big Data
Then build an app on top of it
HTML 5 JS SPA UI
Clojure back-end
REST API
Big Data
Then build an app on top of it
HTML 5 JS SPA UI
Clojure back-end
REST API
JSON
Big Data
Then build an app on top of it
HTML 5 JS SPA UI
Int 1 Int 2
BI
Int 3
Clojure back-end
REST API
JSON
REST API
Big Data
Then build an app on top of it
HTML 5 JS SPA UI
Integration 1
Clojure back-end
REST API
JSON Integration 2
Big Data
Then build an app on top of it
HTML 5 JS SPA UI
Integration 1 Integration 3
Clojure back-end
REST API
JSON
REST API
Integration 2
Big Data
Then build an app on top of it
HTML 5 JS SPA UI
Integration 1 Integration 3
Clojure back-end
REST API
JSON
REST API
Integration 2
Big Data
Then build an app on top of it
HTML 5 JS SPA UI
Integration 1 Integration 3
Clojure back-end
REST API
JSON
REST API
Integration 2
Big Data
Then build an app on top of it
HTML 5 JS SPA UI
Integration 1 Integration 3
Clojure back-end
REST API
JSON
REST API
Integration 2
Big Data
Then build an app on top of it
HTML 5 JS SPA UI
Integration 1 Integration 3
Clojure back-end
REST API
JSON
REST API
Integration 2
BI
Big Data
Then build an app on top of it
HTML 5 JS SPA UI
Clojure back-end
REST API
JSON
BI
Integration 1 Integration 3
REST API
Integration 2
Database
HTML 5 JS SPA UI
Clojure back-end
REST API
JSON
BI
Integration 1 Integration 3
REST API
Integration 2 Then build an app on top of it
Relational database has a schema. It has a plan with constraints.
Database
HTML 5 JS SPA UI
Clojure back-end
REST API
JSON
BI
Integration 1 Integration 3
REST API
Integration 2 Then build an app on top of it
Relational database has a schema. It has a plan with constraints.
Database
HTML 5 JS SPA UI
Clojure back-end
REST API
JSON
BI
Integration 1 Integration 3
REST API
Integration 2 Then build an app on top of it
Relational database has a schema. It has a plan with constraints.
Database
HTML 5 JS SPA UI
Clojure back-end
REST API
JSON
BI
Integration 1 Integration 3
REST API
Integration 2 Then build an app on top of it
Relational database has a schema. It has a plan with constraints.
4
Be slow – design the schema first. Design it using a UI demo.
1. The society has constraints, because people make errors
• You can not build a sauna everywhere, because its unsafe of would ruin the beautiful lake scenes
2. Use database schema with constraints, because people make errors
• You cannot refactor data model field names easily, so use a schema and a validator to prevent future errors
3. Then build an app on top of it
Choose any technology to get from A to B - cycle or sail …. or swim :)
A
B