an interactive service for citizens with HTML 5 JS + Clojure +

Transcription

an interactive service for citizens with HTML 5 JS + Clojure +
Senior Software Designer
Timo Lehtonen
[email protected]
Lupapiste – an interactive service for citizens
with HTML 5 JS + Clojure + MongoDB
Nääsvillen oliopäivät 13.12.2012
Top 100-list of Javala:
Gamification - apply game-like features to a (often boring) non-game thing.
2012
Solita – an ICT company from Nääsville
Finlayson 2012:
Finlayson 1962:
Thousands of people in
manufacturing business
Copyright: Tampereen kaupungin kuva-arkisto
200 people manufacturing
Online businesses,
BI solutions,
ERP systems, …
Solita has one value: Care
ERP
Source: levikintarkastus.fi
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).
A similar circle of ”do, make a theory, do (fail?) again!”
Pekka Abrahamsson 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
Keynote by Cockburn at
Oliopäivät 2008
Keynote by Cockburn at
Oliopäivät 2008
Application Architecture
POST /rest/command:
{”command”: ”add-comment”
”applicationId”: ”123”
”text”: ”Autotallin räys…”}
Command
MongoDB
Clojure
back-end
MongoDB
Application Architecture
POST /rest/command:
{”command”: ”add-comment”
”applicationId”: ”123”
”text”: ”Autotallin räys…”}
Command
MongoDB
Clojure
back-end
Application Architecture
POST /rest/command:
{”command”: ”add-comment”
”applicationId”: ”123”
”text”: ”Autotallin räys…”}
Command
MongoDB
{”ok”: ”true”}
Clojure
back-end
Application Architecture
POST /rest/command:
{”command”: ”add-comment”
”applicationId”: ”123”
”text”: ”Autotallin räys…”}
Command
MongoDB
{”ok”: ”true”}
GET /rest/application
Clojure
back-end
Application Architecture
POST /rest/command:
{”command”: ”add-comment”
”applicationId”: ”123”
”text”: ”Autotallin räys…”}
Command
MongoDB
{”ok”: ”true”}
GET /rest/application
Clojure
back-end
Application Architecture
POST /rest/command:
{”command”: ”add-comment”
”applicationId”: ”123”
”text”: ”Autotallin räys…”}
Command
MongoDB
{”ok”: ”true”}
GET /rest/application
Clojure
back-end
Application Architecture
POST /rest/command:
{”command”: ”add-comment”
”applicationId”: ”123”
”text”: ”Autotallin räys…”}
Command
MongoDB
{”ok”: ”true”}
GET /rest/application
Clojure
back-end
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.
4
Source: Uusi sivistyssanakirja freely translated
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.
4
Source: Uusi sivistyssanakirja freely translated
Be slow – design the schema
first. Design it using a UI demo.
Plan 1. Lupapiste data model diagram
Be slow - Proof the schema with real data
Schema - Greek word skhēma - shape,
diagram, or more generally plan.
4
Source: Uusi sivistyssanakirja freely translated
Be slow – design the schema
first. Design it using a UI demo.
Plan 1b. Data model with explanation.
Database schema is a service interface. The only specification that matters.
1. Design the schema first.
Big Data
Then build an
app on top of it
JSON
HTML 5
JS SPA UI
REST API
Clojure back-end
Big Data
Then build an
app on top of it
JSON
HTML 5
JS SPA UI
REST API
Clojure back-end
Big Data
Then build an
app on top of it
JSON
HTML 5
JS SPA UI
REST API
Clojure back-end
Big Data
Then build an
app on top of it
HTML 5
JS SPA UI
REST API
Clojure back-end
Big Data
Then build an
app on top of it
JSON
HTML 5
JS SPA UI
REST API
Clojure back-end
Big Data
Then build an
app on top of it
JSON
HTML 5
JS SPA UI
REST API
Clojure back-end
Big Data
Then build an
app on top of it
HTML 5
JS SPA UI
REST API
Clojure back-end
Big Data
Then build an
app on top of it
JSON
HTML 5
JS SPA UI
REST API
Clojure back-end
Big Data
Then build an
app on top of it
JSON
Int 1
Int 2
Int 3
HTML 5
JS SPA UI
REST API
REST API
Clojure back-end
BI
Big Data
Then build an
app on top of it
JSON
Integration 1
Integration 2
HTML 5
JS SPA UI
REST API
Clojure back-end
Big Data
Then build an
app on top of it
JSON
Integration 1
Integration 2
Integration 3
HTML 5
JS SPA UI
REST API
REST API
Clojure back-end
Big Data
Then build an
app on top of it
JSON
Integration 1
Integration 2
Integration 3
HTML 5
JS SPA UI
REST API
REST API
Clojure back-end
Big Data
Then build an
app on top of it
JSON
Integration 1
Integration 2
Integration 3
HTML 5
JS SPA UI
REST API
REST API
Clojure back-end
Big Data
Then build an
app on top of it
JSON
Integration 1
Integration 2
Integration 3
HTML 5
JS SPA UI
REST API
REST API
Clojure back-end
Big Data
Then build an
app on top of it
JSON
Integration 1
Integration 3
Integration 2
HTML 5
JS SPA UI
REST API
REST API
Clojure back-end
BI
Big Data
Then build an
app on top of it
JSON
Integration 1
Integration 3
Integration 2
HTML 5
JS SPA UI
REST API
REST API
Clojure back-end
BI
Big Data
Then build an
app on top of it
JSON
Integration 1
Integration 3
Integration 2
HTML 5
JS SPA UI
REST API
REST API
Clojure back-end
BI
Database
Relational database has a schema. It has a plan with constraints.
Then build an
app on top of it
JSON
Integration 1
Integration 3
Integration 2
HTML 5
JS SPA UI
REST API
REST API
Clojure back-end
BI
Database
Relational database has a schema. It has a plan with constraints.
Then build an
app on top of it
JSON
Integration 1
Integration 3
Integration 2
HTML 5
JS SPA UI
REST API
REST API
Clojure back-end
BI
Database
Relational database has a schema. It has a plan with constraints.
Then build an
app on top of it
JSON
Integration 1
Integration 3
Integration 2
HTML 5
JS SPA UI
REST API
REST API
Clojure back-end
BI
Database
Relational database has a schema. It has a plan with constraints.
4
1. The society has constraints,
because people make errors
•
Be slow – design the schema
first. Design it using a UI demo.
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 :)
B
A
Thank you
› Questions, comments?
›
Feedback: [email protected]