SlideShare a Scribd company logo
Clojure – this one goes to eleven!
Clojure oikeassa projektissa 
Antti Virtanen 
Software Architect 
044 507 0050 // antti.virtanen@solita.fi
Agenda 
1 Esittelyt ja taustat 
2 Clojuren valinta, arkkitehtuuri 
3 REPL-demo 
4 Joitakin havaintoja matkan varrelta
Solita? 
Yli 300 ”digitaalisen liiketoiminnan matkaopasta”. 
Syntyy järjestelmiä. Koodia. Integraatioita.
Muutakin on kierretty kuin tahkoa 
Alalla töissä 1997 vuodesta. Pääasiassa Javaa, mutta aika paljon muutakin. 
Melko monipuolisia työtehtäviä - myyntiä, koodaamista, tutkimusta, opetusta. 
Nyt projektipäällikkö, arkkitehti, koodaaja.
Lisp can adap”t to 
your particular 
programming problem. 
Peter Norvig, Paradigms of AI Programming
Miksi Clojure? 
1. JVM-pohjainen 
Kaikki Javan kirjastot ovat käytettävissä. Ei vaadi ajavalta koneelta kuin JVM-tuen ja se oli ehdoton 
reunaehto Opetushallituksella. 
2. Funktionaalinen ohjelmointikieli 
Scalaakin voi kirjoittaa funktionaalisesti. Tai monella muulla tavalla. 
3. Clojure oli koettu jo hyväksi 
Tämä ei ollut Solitan ensimmäinen kosketus Clojureen. Kokemukset olivat olleet hyviä, joten haluttiin 
laajentaa käyttöä.
OPH:n arkkitehtuurimallin vaikutus: 
Clojure on piilossa. Kaikki ei riipu Clojuresta.
Konversio: REPL-demo 
Konversio = vanhan datan migraatio uuteen tietomalliin. 
Koodi: https://github.com/lokori/repl-demo. 
Kuva: FAKEGRIMLOCK, Creative Commons
REPL + dynaaminen tyypitys 
Tyypitys ja vierasavaimet legacy-datassa usein puutteellista. 
Tauluja voi olla satoja. Ei tiedetä täsmälleen miten ne pitää käsitellä.
Dynaaminen tyypitys ei ole mörkö 
Kun pelottaa, Prismatic Schema tai core.typed pelastaa.
Clojure mahdollistaa asioita 
Clojure ei ohjaa. Tarjolla on kirjastoja, ei frameworkkeja. Ohjelmoijan pitää tietää mitä haluaa tehdä ja tehdä 
itse valinnat. 
Valitseminen ja perusteleminen edellyttää kokemusta. 
Clojuressa kaikki ”standardikirjastot” eivät ole vielä valmiita. Ne toimivat, mutta joitakin tärkeitä 
ominaisuuksia voi joutua tekemään itse. Kokemus auttaa tässäkin. (Korma, Compojure)
Kysymyksiä? 
.
Luettavaa ja linkkejä 
› Miksi funktionaalinen ohjelmointi?http 
://steve-yegge.blogspot.fi/2006/03/execution-in-kingdom-of-nouns.html 
› Miksi Lisp? http://norvig.com/paip-preface.html#whylisp 
› Miksi Clojure? http://clojure.org/rationale 
› Miten? http://clojure.org/books 
› Miten käytännössä? http://dev.solita.fi/2014/04/01/real-world-clojure.html 
› REPL ammattilaisille: http://dev.solita.fi/2014/03/18/pimp-my-repl.html 
› Esityksen koodi: https://github.com/lokori/repl-demo 
› Opetushallituksen Aitu: https://github.com/Opetushallitus/aitu
Kiitos. 
Twitter: @SolitaOy 
www.solita.fi

More Related Content

Viewers also liked

Tga2015 documentationpipeline
Tga2015 documentationpipelineTga2015 documentationpipeline
Tga2015 documentationpipeline
lokori
 
Market research desk research
Market research desk researchMarket research desk research
Market research desk research
sezgincvs
 
Location notes
Location notes Location notes
Location notes
adimohamed96
 
Swot analysis
Swot analysisSwot analysis
Swot analysis
sezgincvs
 
Development of a new indexing technique for XML document retrieval
Development of a new indexing technique for XML document retrievalDevelopment of a new indexing technique for XML document retrieval
Development of a new indexing technique for XML document retrieval
Amjad Ali
 
Environmental Risk Assessment by Mhammed Nour
Environmental Risk Assessment by Mhammed NourEnvironmental Risk Assessment by Mhammed Nour
Environmental Risk Assessment by Mhammed Nour
Mhammd Nour Hajjat
 

Viewers also liked (6)

Tga2015 documentationpipeline
Tga2015 documentationpipelineTga2015 documentationpipeline
Tga2015 documentationpipeline
 
Market research desk research
Market research desk researchMarket research desk research
Market research desk research
 
Location notes
Location notes Location notes
Location notes
 
Swot analysis
Swot analysisSwot analysis
Swot analysis
 
Development of a new indexing technique for XML document retrieval
Development of a new indexing technique for XML document retrievalDevelopment of a new indexing technique for XML document retrieval
Development of a new indexing technique for XML document retrieval
 
Environmental Risk Assessment by Mhammed Nour
Environmental Risk Assessment by Mhammed NourEnvironmental Risk Assessment by Mhammed Nour
Environmental Risk Assessment by Mhammed Nour
 

Similar to Clojure oikeassa projektissa, IT-Päivät 2014

Ohjelmointikielet ja -paradigmat - kalvot 2014
Ohjelmointikielet ja -paradigmat - kalvot 2014Ohjelmointikielet ja -paradigmat - kalvot 2014
Ohjelmointikielet ja -paradigmat - kalvot 2014
Jouni Smed
 
Java - analysointityökaluja
Java - analysointityökalujaJava - analysointityökaluja
Java - analysointityökaluja
Kari Sarsila
 
Data, AI ja digitaalinen asiakaskokemus
Data, AI ja digitaalinen asiakaskokemusData, AI ja digitaalinen asiakaskokemus
Data, AI ja digitaalinen asiakaskokemus
Exove
 
Java9 moduulit jigsaw
Java9 moduulit jigsawJava9 moduulit jigsaw
Java9 moduulit jigsaw
Arto Santala
 
Ohjelmistotestauksen opetuksen kokemuksia fantasiatarinan avulla
Ohjelmistotestauksen opetuksen kokemuksia fantasiatarinan avullaOhjelmistotestauksen opetuksen kokemuksia fantasiatarinan avulla
Ohjelmistotestauksen opetuksen kokemuksia fantasiatarinan avulla
Kari Kakkonen
 
Valjasta tekoäly hyötykäyttöön 30.5.2024
Valjasta tekoäly hyötykäyttöön 30.5.2024Valjasta tekoäly hyötykäyttöön 30.5.2024
Valjasta tekoäly hyötykäyttöön 30.5.2024
Matleena Laakso
 
AitoOliot avaus
AitoOliot avausAitoOliot avaus
AitoOliot avaus
Jukka Tamminen
 
Ohjelmointia & monilukutaitoa
Ohjelmointia & monilukutaitoaOhjelmointia & monilukutaitoa
Ohjelmointia & monilukutaitoa
Emilia Hjelm
 
Tieto ja viestintätekniikka pedagogisena työvälineenä. luento 1
Tieto  ja viestintätekniikka pedagogisena työvälineenä. luento 1 Tieto  ja viestintätekniikka pedagogisena työvälineenä. luento 1
Tieto ja viestintätekniikka pedagogisena työvälineenä. luento 1
Jari Laru
 
Koodiaapinen MOOC - Racket
Koodiaapinen MOOC - RacketKoodiaapinen MOOC - Racket
Koodiaapinen MOOC - Racket
Tiina Partanen
 
Tekoäly, sovelluksia ja oppimistehtäviä 20.1.24
Tekoäly, sovelluksia ja oppimistehtäviä 20.1.24Tekoäly, sovelluksia ja oppimistehtäviä 20.1.24
Tekoäly, sovelluksia ja oppimistehtäviä 20.1.24
Matleena Laakso
 
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScriptPalvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
Sovelto
 
Ohjelmointi
OhjelmointiOhjelmointi
Ohjelmointi
Sari Auramo
 
KLehtomaa_HAMK_loppuseminaari_31.10.2013
KLehtomaa_HAMK_loppuseminaari_31.10.2013KLehtomaa_HAMK_loppuseminaari_31.10.2013
KLehtomaa_HAMK_loppuseminaari_31.10.2013
Kari Lehtomaa
 
Opettaja ja tekoäly. Pedaiiltapäivä 25.4.24
Opettaja ja tekoäly. Pedaiiltapäivä 25.4.24Opettaja ja tekoäly. Pedaiiltapäivä 25.4.24
Opettaja ja tekoäly. Pedaiiltapäivä 25.4.24
Matleena Laakso
 
Johdanto tekoälyyn, Tasekirjailijat ry 4.5.24
Johdanto tekoälyyn, Tasekirjailijat ry 4.5.24Johdanto tekoälyyn, Tasekirjailijat ry 4.5.24
Johdanto tekoälyyn, Tasekirjailijat ry 4.5.24
Matleena Laakso
 
10 parasta tapaa pilata Liferay-projekti
10 parasta tapaa pilata Liferay-projekti10 parasta tapaa pilata Liferay-projekti
10 parasta tapaa pilata Liferay-projekti
Ambientia
 
Tekoäly opetuksessa 13.10.23
Tekoäly opetuksessa 13.10.23Tekoäly opetuksessa 13.10.23
Tekoäly opetuksessa 13.10.23
Matleena Laakso
 
Tekoäly on tullut 13.12.23.pdf
Tekoäly on tullut 13.12.23.pdfTekoäly on tullut 13.12.23.pdf
Tekoäly on tullut 13.12.23.pdf
Matleena Laakso
 

Similar to Clojure oikeassa projektissa, IT-Päivät 2014 (19)

Ohjelmointikielet ja -paradigmat - kalvot 2014
Ohjelmointikielet ja -paradigmat - kalvot 2014Ohjelmointikielet ja -paradigmat - kalvot 2014
Ohjelmointikielet ja -paradigmat - kalvot 2014
 
Java - analysointityökaluja
Java - analysointityökalujaJava - analysointityökaluja
Java - analysointityökaluja
 
Data, AI ja digitaalinen asiakaskokemus
Data, AI ja digitaalinen asiakaskokemusData, AI ja digitaalinen asiakaskokemus
Data, AI ja digitaalinen asiakaskokemus
 
Java9 moduulit jigsaw
Java9 moduulit jigsawJava9 moduulit jigsaw
Java9 moduulit jigsaw
 
Ohjelmistotestauksen opetuksen kokemuksia fantasiatarinan avulla
Ohjelmistotestauksen opetuksen kokemuksia fantasiatarinan avullaOhjelmistotestauksen opetuksen kokemuksia fantasiatarinan avulla
Ohjelmistotestauksen opetuksen kokemuksia fantasiatarinan avulla
 
Valjasta tekoäly hyötykäyttöön 30.5.2024
Valjasta tekoäly hyötykäyttöön 30.5.2024Valjasta tekoäly hyötykäyttöön 30.5.2024
Valjasta tekoäly hyötykäyttöön 30.5.2024
 
AitoOliot avaus
AitoOliot avausAitoOliot avaus
AitoOliot avaus
 
Ohjelmointia & monilukutaitoa
Ohjelmointia & monilukutaitoaOhjelmointia & monilukutaitoa
Ohjelmointia & monilukutaitoa
 
Tieto ja viestintätekniikka pedagogisena työvälineenä. luento 1
Tieto  ja viestintätekniikka pedagogisena työvälineenä. luento 1 Tieto  ja viestintätekniikka pedagogisena työvälineenä. luento 1
Tieto ja viestintätekniikka pedagogisena työvälineenä. luento 1
 
Koodiaapinen MOOC - Racket
Koodiaapinen MOOC - RacketKoodiaapinen MOOC - Racket
Koodiaapinen MOOC - Racket
 
Tekoäly, sovelluksia ja oppimistehtäviä 20.1.24
Tekoäly, sovelluksia ja oppimistehtäviä 20.1.24Tekoäly, sovelluksia ja oppimistehtäviä 20.1.24
Tekoäly, sovelluksia ja oppimistehtäviä 20.1.24
 
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScriptPalvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
Palvelujen ohjelmointi JavaScriptillä: Node.js ja TypeScript
 
Ohjelmointi
OhjelmointiOhjelmointi
Ohjelmointi
 
KLehtomaa_HAMK_loppuseminaari_31.10.2013
KLehtomaa_HAMK_loppuseminaari_31.10.2013KLehtomaa_HAMK_loppuseminaari_31.10.2013
KLehtomaa_HAMK_loppuseminaari_31.10.2013
 
Opettaja ja tekoäly. Pedaiiltapäivä 25.4.24
Opettaja ja tekoäly. Pedaiiltapäivä 25.4.24Opettaja ja tekoäly. Pedaiiltapäivä 25.4.24
Opettaja ja tekoäly. Pedaiiltapäivä 25.4.24
 
Johdanto tekoälyyn, Tasekirjailijat ry 4.5.24
Johdanto tekoälyyn, Tasekirjailijat ry 4.5.24Johdanto tekoälyyn, Tasekirjailijat ry 4.5.24
Johdanto tekoälyyn, Tasekirjailijat ry 4.5.24
 
10 parasta tapaa pilata Liferay-projekti
10 parasta tapaa pilata Liferay-projekti10 parasta tapaa pilata Liferay-projekti
10 parasta tapaa pilata Liferay-projekti
 
Tekoäly opetuksessa 13.10.23
Tekoäly opetuksessa 13.10.23Tekoäly opetuksessa 13.10.23
Tekoäly opetuksessa 13.10.23
 
Tekoäly on tullut 13.12.23.pdf
Tekoäly on tullut 13.12.23.pdfTekoäly on tullut 13.12.23.pdf
Tekoäly on tullut 13.12.23.pdf
 

More from lokori

Smart Locks - too clever by half
Smart Locks - too clever by halfSmart Locks - too clever by half
Smart Locks - too clever by half
lokori
 
Turvallinen ohjelmointi -vierailuluento, 2019
Turvallinen ohjelmointi -vierailuluento, 2019Turvallinen ohjelmointi -vierailuluento, 2019
Turvallinen ohjelmointi -vierailuluento, 2019
lokori
 
Hacker Games & DevSecOps
Hacker Games & DevSecOpsHacker Games & DevSecOps
Hacker Games & DevSecOps
lokori
 
Developer is an attack vector
Developer is an attack vectorDeveloper is an attack vector
Developer is an attack vector
lokori
 
DevSec - build security in and dance like a pro!
DevSec - build security in and dance like a pro!DevSec - build security in and dance like a pro!
DevSec - build security in and dance like a pro!
lokori
 
Webapp security-tut-2017
Webapp security-tut-2017Webapp security-tut-2017
Webapp security-tut-2017
lokori
 
TTY turvallinen ohjelmointi 2017
TTY turvallinen ohjelmointi 2017TTY turvallinen ohjelmointi 2017
TTY turvallinen ohjelmointi 2017
lokori
 

More from lokori (7)

Smart Locks - too clever by half
Smart Locks - too clever by halfSmart Locks - too clever by half
Smart Locks - too clever by half
 
Turvallinen ohjelmointi -vierailuluento, 2019
Turvallinen ohjelmointi -vierailuluento, 2019Turvallinen ohjelmointi -vierailuluento, 2019
Turvallinen ohjelmointi -vierailuluento, 2019
 
Hacker Games & DevSecOps
Hacker Games & DevSecOpsHacker Games & DevSecOps
Hacker Games & DevSecOps
 
Developer is an attack vector
Developer is an attack vectorDeveloper is an attack vector
Developer is an attack vector
 
DevSec - build security in and dance like a pro!
DevSec - build security in and dance like a pro!DevSec - build security in and dance like a pro!
DevSec - build security in and dance like a pro!
 
Webapp security-tut-2017
Webapp security-tut-2017Webapp security-tut-2017
Webapp security-tut-2017
 
TTY turvallinen ohjelmointi 2017
TTY turvallinen ohjelmointi 2017TTY turvallinen ohjelmointi 2017
TTY turvallinen ohjelmointi 2017
 

Clojure oikeassa projektissa, IT-Päivät 2014

  • 1. Clojure – this one goes to eleven!
  • 2. Clojure oikeassa projektissa Antti Virtanen Software Architect 044 507 0050 // antti.virtanen@solita.fi
  • 3. Agenda 1 Esittelyt ja taustat 2 Clojuren valinta, arkkitehtuuri 3 REPL-demo 4 Joitakin havaintoja matkan varrelta
  • 4. Solita? Yli 300 ”digitaalisen liiketoiminnan matkaopasta”. Syntyy järjestelmiä. Koodia. Integraatioita.
  • 5. Muutakin on kierretty kuin tahkoa Alalla töissä 1997 vuodesta. Pääasiassa Javaa, mutta aika paljon muutakin. Melko monipuolisia työtehtäviä - myyntiä, koodaamista, tutkimusta, opetusta. Nyt projektipäällikkö, arkkitehti, koodaaja.
  • 6. Lisp can adap”t to your particular programming problem. Peter Norvig, Paradigms of AI Programming
  • 7. Miksi Clojure? 1. JVM-pohjainen Kaikki Javan kirjastot ovat käytettävissä. Ei vaadi ajavalta koneelta kuin JVM-tuen ja se oli ehdoton reunaehto Opetushallituksella. 2. Funktionaalinen ohjelmointikieli Scalaakin voi kirjoittaa funktionaalisesti. Tai monella muulla tavalla. 3. Clojure oli koettu jo hyväksi Tämä ei ollut Solitan ensimmäinen kosketus Clojureen. Kokemukset olivat olleet hyviä, joten haluttiin laajentaa käyttöä.
  • 8. OPH:n arkkitehtuurimallin vaikutus: Clojure on piilossa. Kaikki ei riipu Clojuresta.
  • 9. Konversio: REPL-demo Konversio = vanhan datan migraatio uuteen tietomalliin. Koodi: https://github.com/lokori/repl-demo. Kuva: FAKEGRIMLOCK, Creative Commons
  • 10. REPL + dynaaminen tyypitys Tyypitys ja vierasavaimet legacy-datassa usein puutteellista. Tauluja voi olla satoja. Ei tiedetä täsmälleen miten ne pitää käsitellä.
  • 11. Dynaaminen tyypitys ei ole mörkö Kun pelottaa, Prismatic Schema tai core.typed pelastaa.
  • 12. Clojure mahdollistaa asioita Clojure ei ohjaa. Tarjolla on kirjastoja, ei frameworkkeja. Ohjelmoijan pitää tietää mitä haluaa tehdä ja tehdä itse valinnat. Valitseminen ja perusteleminen edellyttää kokemusta. Clojuressa kaikki ”standardikirjastot” eivät ole vielä valmiita. Ne toimivat, mutta joitakin tärkeitä ominaisuuksia voi joutua tekemään itse. Kokemus auttaa tässäkin. (Korma, Compojure)
  • 14. Luettavaa ja linkkejä › Miksi funktionaalinen ohjelmointi?http ://steve-yegge.blogspot.fi/2006/03/execution-in-kingdom-of-nouns.html › Miksi Lisp? http://norvig.com/paip-preface.html#whylisp › Miksi Clojure? http://clojure.org/rationale › Miten? http://clojure.org/books › Miten käytännössä? http://dev.solita.fi/2014/04/01/real-world-clojure.html › REPL ammattilaisille: http://dev.solita.fi/2014/03/18/pimp-my-repl.html › Esityksen koodi: https://github.com/lokori/repl-demo › Opetushallituksen Aitu: https://github.com/Opetushallitus/aitu
  • 15. Kiitos. Twitter: @SolitaOy www.solita.fi

Editor's Notes

  1. Pitkästä aikaa olen innostunut jostain.
  2. Oletettavasti kaikki ovat sitä mieltä että Funktionaalinen Ohjelmointi on hyvä asia. En ala käyttää tässä aikaa sen perustelemiseen miksi näin on. Sitaatti: Peter Norvig, Googlen tutkimustjohtaja, vuonna 1992 kirjan Paradigms of AI Programming johdannossa.
  3. Pienentää valinnan riskiä. Jos Clojure osoittautuisi huonoksi, moni asia on kelvollinen. Single-page-app -> backend ei tiedä käyttöliittymän toteutustekniikkaa ja toisin päin.
  4. Huom: Tarkoitus on demota työtapaa ja Clojuren antamia mahdollisuuksia, älkää kiinnittäkö huomiota niinkään siihen onko koodi hienoa tai onko Eclipse paras IDE.
  5. “Because of its flexibility, Lisp has been successful as a high-level language for rapid prototyping in such areas as AI, graphics, and user interfaces.” Peter Norvig, Googlen tutkimustjohtaja, vuonna 1992 kirjan Paradigms of AI Programming johdannossa. Vastaavaa hyvin hankala tehdä vahvasti tyypitetyllä oliokielellä. Squeak/Smalltalk – ei mahdotonta ehkä kuitenkaan?