This tutorial offers a way to learn Kotlin language, Neo4J graphDB and many other stuffs by following the development of a real project: domino.
The domino project is a processing manager. Its purpose is:
- gives a way to build a processing tree by connecting tasks
- launches processing in parallel
- manages errors and retries
How do we manage a processing ? We run the first task and when it's done, we run the second one. Each task result leads to another until the last one. Sometimes, the end of a task leads to launch two or more tasks in parallel and other times a task waits for the result of many previous tasks. Take a look here.
Currently, the domino project is built on:
- Kotlin (a JVM language) http://kotlinlang.org/
- Neo4J graph database http://neo4j.com/
- Linux or OS X OS
- Bash scripts or Python
The Neo4J database has been chosen because of:
- very good integration in JVM environment
- the Cypher query language
- the existence of a community edition of the database
- Isn't the best choice to save a tree representation into a graph DB ?
- Changes in the model are fast and easy.
The main language is Kotlin because:
- It's well thought
- It offers some capabilities from dynamic languages like Python or Groovy while being a static language
- High-order functions
- Its null-safety system
- It's a JVM language (good integration with Java language and Java tools)
The domino project will be developed following the domain driven design (https://en.wikipedia.org/wiki/Domain-driven_design). Often, use the domain driven design has an important time cost because changes are not easy with relational database. But this cost is reduced thanks to usage of Neo4J DB.
I'm a French software architect and developer for more 15 years. I started with C/C++ and now I often develop with JVM languages as Java8 or Kotlin and I tried others as Groovy, Clojure. I like the functional paradigm (I discovered it with Clojure and Haskell) and I try to find the best compromise between functional and object programming. For me, nothing is bad: we have to use the best tool for a problem.
Theses pages below will be update all along the development of this project.
- What do we want domino to make ?
- Entities definition
- First development step: template management