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]