diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..0bdb3ed0d14dcb5c0e174cb0239a9abedec8331a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.ipynb_checkpoints
+_config.yml
+_build           
+_toc.yml
diff --git a/Quickstart.ipynb b/Quickstart.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..6a590cd40ff551b6863af1f37c5380541e9d1025
--- /dev/null
+++ b/Quickstart.ipynb
@@ -0,0 +1,677 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "3cd4997c-1ed7-4fdc-bf4c-aaea4dceb215",
+   "metadata": {
+    "user_expressions": []
+   },
+   "source": [
+    "# Quickstart Java notebook"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "d9166747-a475-463a-8120-3013056691bf",
+   "metadata": {
+    "tags": [],
+    "user_expressions": []
+   },
+   "source": [
+    "## Java Code"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "395c3ff1-1c66-4457-b7f5-2b096d51c3d1",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Apache Maven 3.9.1 (2e178502fcdbffc201671fb2537d0cb4b4cc58f8)\n",
+      "Maven home: /home/jovyan/.sdkman/candidates/maven/current\n",
+      "Java version: 17.0.6, vendor: Eclipse Adoptium, runtime: /home/jovyan/.sdkman/candidates/java/17.0.6-tem\n",
+      "Default locale: en_US, platform encoding: UTF-8\n",
+      "OS name: \"linux\", version: \"5.15.82-0-virt\", arch: \"aarch64\", family: \"unix\"\n"
+     ]
+    }
+   ],
+   "source": [
+    "%%shell\n",
+    "mvn --version"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "7574b173-b657-40d1-b884-cd542984334a",
+   "metadata": {
+    "user_expressions": []
+   },
+   "source": [
+    "### Between code cells"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "6eb1582a-7137-49dc-850a-c32d2ccec50b",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [],
+   "source": [
+    "List<String> fruits=List.of(\"Banana\",\"Apple\",\"Orange\");"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "07b6fd43-3ad6-4405-b0d8-70365b33cf7f",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "apple\n",
+      "banana\n",
+      "orange\n"
+     ]
+    }
+   ],
+   "source": [
+    "fruits\n",
+    "    .stream()\n",
+    "    .sorted()\n",
+    "    .map(String::toLowerCase)\n",
+    "    .forEach(System.out::println);"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "id": "400a1d1c-91db-4b46-9e3d-ce2e686ab3ad",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [],
+   "source": [
+    "public class Pair<E,F> {\n",
+    "    private E e;\n",
+    "    private F f;\n",
+    "    public Pair(E e,F f) {\n",
+    "        this.e = e;\n",
+    "        this.f = f;\n",
+    "    }\n",
+    "    public String toString() {\n",
+    "        return \"(%s,%s)\".formatted(e.toString(),f.toString());\n",
+    "    }\n",
+    "}"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "id": "ca418a9e-196d-4499-bfe4-19f448817c89",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(A,10)"
+      ]
+     },
+     "execution_count": 7,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "Pair<String, Integer> p= new Pair<>(\"A\",10);\n",
+    "p;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "abe49b7c-4fb7-4f0c-b570-1fc1fe0f2dc4",
+   "metadata": {
+    "user_expressions": []
+   },
+   "source": [
+    "### External compilation \n",
+    "\n",
+    "#### From cells\n",
+    "\n",
+    "This image support external compilation to allow annotation processors (like lombok, JPA, JAX-RS, ...).\n",
+    "\n",
+    "```{warning}\n",
+    "The compiled class cannot be changed until the kernel is restarted.\n",
+    "```"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "6fac3be4-b89e-46e6-9f25-5bd643cc8823",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [],
+   "source": [
+    "%%compile fr/univtln/bruno/Vehicule.java\n",
+    "\n",
+    "package fr.univtln.bruno;\n",
+    "\n",
+    "import lombok.experimental.FieldDefaults;\n",
+    "import lombok.*;\n",
+    "import lombok.experimental.*;\n",
+    "import java.time.LocalDate;\n",
+    "import java.util.*;\n",
+    "\n",
+    "@FieldDefaults(level=AccessLevel.PRIVATE)\n",
+    "@NoArgsConstructor\n",
+    "@AllArgsConstructor\n",
+    "@Builder\n",
+    "@Getter\n",
+    "@Setter\n",
+    "@EqualsAndHashCode(of= {\"numeroMoteur\",\"numeroChassis\"})\n",
+    "@ToString(of= {\"numeroMoteur\",\"numeroChassis\",\"numeroImmatriculation\"})\n",
+    "public class Vehicule\n",
+    "{\n",
+    "    String numeroMoteur;\n",
+    "    String numeroChassis;\n",
+    "    String numeroImmatriculation;\n",
+    "    LocalDate dateMiseEnCirculation;\n",
+    "    \n",
+    "    @Singular\n",
+    "    List<String> interventions;\n",
+    "}"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "id": "19298648-64e3-48a4-ae50-cd3e705f1e15",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [],
+   "source": [
+    "import fr.univtln.bruno.Vehicule;\n",
+    "Vehicule v = Vehicule.builder().numeroMoteur(\"A12\").build();"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "id": "1bc26bcc-9506-4be1-a9c6-1a4ae0301187",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Vehicule(numeroMoteur=A12, numeroChassis=null, numeroImmatriculation=null)"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "v;"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "ed8f4640-ac2a-4ba3-a7ee-d86c69b62cd5",
+   "metadata": {
+    "user_expressions": []
+   },
+   "source": [
+    "#### From Maven"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 65,
+   "id": "a7a5b560-b3e0-47f7-bb3b-e46dc18ff488",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[INFO] Scanning for projects...\n",
+      "[INFO] \n",
+      "[INFO] ------------------< org.apache.maven:standalone-pom >-------------------\n",
+      "[INFO] Building Maven Stub Project (No POM) 1\n",
+      "[INFO] --------------------------------[ pom ]---------------------------------\n",
+      "[INFO] \n",
+      "[INFO] >>> archetype:3.2.1:generate (default-cli) > generate-sources @ standalone-pom >>>\n",
+      "[INFO] \n",
+      "[INFO] <<< archetype:3.2.1:generate (default-cli) < generate-sources @ standalone-pom <<<\n",
+      "[INFO] \n",
+      "[INFO] \n",
+      "[INFO] --- archetype:3.2.1:generate (default-cli) @ standalone-pom ---\n",
+      "[WARNING] Parameter 'localRepository' is deprecated core expression; Avoid use of ArtifactRepository type. If you need access to local repository, switch to '${repositorySystemSession}' expression and get LRM from it instead.\n",
+      "[INFO] Generating project in Batch mode\n",
+      "[INFO] Archetype repository not defined. Using the one from [org.apache.maven.archetypes:maven-archetype-quickstart:1.4] found in catalog remote\n",
+      "[INFO] ----------------------------------------------------------------------------\n",
+      "[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4\n",
+      "[INFO] ----------------------------------------------------------------------------\n",
+      "[INFO] Parameter: groupId, Value: fr.univtln.mylogin\n",
+      "[INFO] Parameter: artifactId, Value: MyApp\n",
+      "[INFO] Parameter: version, Value: 1.0-SNAPSHOT\n",
+      "[INFO] Parameter: package, Value: fr.univtln.mylogin\n",
+      "[INFO] Parameter: packageInPathFormat, Value: fr/univtln/mylogin\n",
+      "[INFO] Parameter: package, Value: fr.univtln.mylogin\n",
+      "[INFO] Parameter: groupId, Value: fr.univtln.mylogin\n",
+      "[INFO] Parameter: artifactId, Value: MyApp\n",
+      "[INFO] Parameter: version, Value: 1.0-SNAPSHOT\n",
+      "[INFO] ------------------------------------------------------------------------\n",
+      "[INFO] BUILD FAILURE\n",
+      "[INFO] ------------------------------------------------------------------------\n",
+      "[INFO] Total time:  3.849 s\n",
+      "[INFO] Finished at: 2023-03-29T16:50:30Z\n",
+      "[INFO] ------------------------------------------------------------------------\n",
+      "[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.2.1:generate (default-cli) on project standalone-pom: A Maven project already exists in the directory /home/jovyan/work/MyApp -> [Help 1]\n",
+      "[ERROR] \n",
+      "[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.\n",
+      "[ERROR] Re-run Maven using the -X switch to enable full debug logging.\n",
+      "[ERROR] \n",
+      "[ERROR] For more information about the errors and possible solutions, please read the following articles:\n",
+      "[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException\n",
+      "[INFO] Scanning for projects...\n",
+      "[INFO] \n",
+      "[INFO] ----------------------< fr.univtln.mylogin:MyApp >----------------------\n",
+      "[INFO] Building MyApp 1.0-SNAPSHOT\n",
+      "[INFO]   from pom.xml\n",
+      "[INFO] --------------------------------[ jar ]---------------------------------\n",
+      "[INFO] \n",
+      "[INFO] --- resources:3.0.2:resources (default-resources) @ MyApp ---\n",
+      "[INFO] Using 'UTF-8' encoding to copy filtered resources.\n",
+      "[INFO] skip non existing resourceDirectory /home/jovyan/work/Myapp/src/main/resources\n",
+      "[INFO] \n",
+      "[INFO] --- compiler:3.8.0:compile (default-compile) @ MyApp ---\n",
+      "[INFO] Nothing to compile - all classes are up to date\n",
+      "[INFO] \n",
+      "[INFO] --- resources:3.0.2:testResources (default-testResources) @ MyApp ---\n",
+      "[INFO] Using 'UTF-8' encoding to copy filtered resources.\n",
+      "[INFO] skip non existing resourceDirectory /home/jovyan/work/Myapp/src/test/resources\n",
+      "[INFO] \n",
+      "[INFO] --- compiler:3.8.0:testCompile (default-testCompile) @ MyApp ---\n",
+      "[INFO] Nothing to compile - all classes are up to date\n",
+      "[INFO] \n",
+      "[INFO] --- surefire:2.22.1:test (default-test) @ MyApp ---\n",
+      "[WARNING] Parameter 'localRepository' is deprecated core expression; Avoid use of ArtifactRepository type. If you need access to local repository, switch to '${repositorySystemSession}' expression and get LRM from it instead.\n",
+      "[INFO] \n",
+      "[INFO] -------------------------------------------------------\n",
+      "[INFO]  T E S T S\n",
+      "[INFO] -------------------------------------------------------\n",
+      "[INFO] Running fr.univtln.mylogin.AppTest\n",
+      "[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.101 s - in fr.univtln.mylogin.AppTest\n",
+      "[INFO] \n",
+      "[INFO] Results:\n",
+      "[INFO] \n",
+      "[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n",
+      "[INFO] \n",
+      "[INFO] \n",
+      "[INFO] --- jar:3.0.2:jar (default-jar) @ MyApp ---\n",
+      "[INFO] ------------------------------------------------------------------------\n",
+      "[INFO] BUILD SUCCESS\n",
+      "[INFO] ------------------------------------------------------------------------\n",
+      "[INFO] Total time:  2.919 s\n",
+      "[INFO] Finished at: 2023-03-29T16:50:35Z\n",
+      "[INFO] ------------------------------------------------------------------------\n"
+     ]
+    }
+   ],
+   "source": [
+    "%%shell\n",
+    "\n",
+    "cd /home/jovyan/work\n",
+    "\n",
+    "[[ ! -f MyApp ]] && \\\n",
+    "mvn archetype:generate --ntp --batch-mode \\\n",
+    " -DarchetypeGroupId=org.apache.maven.archetypes \\\n",
+    " -DarchetypeArtifactId=maven-archetype-quickstart \\\n",
+    " -DarchetypeVersion=1.4 \\\n",
+    " -DgroupId=fr.univtln.mylogin \\\n",
+    " -DartifactId=MyApp \\\n",
+    " -Dversion=1.0-SNAPSHOT\n",
+    " \n",
+    " \n",
+    "( cd Myapp && mvn --ntp --batch-mode package )"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "f718e40e-51c0-4b9f-a895-d70d7b19a0c4",
+   "metadata": {
+    "tags": [],
+    "user_expressions": []
+   },
+   "source": [
+    "## IDE\n",
+    "\n",
+    "VSCode is supported from the launcher or via link : [/home/jovyan/work/MyApp](/code-server/?folder=/home/jovyan/work/MyApp)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c945c5c4-79c4-401d-88ff-71e86c60f0be",
+   "metadata": {
+    "user_expressions": []
+   },
+   "source": [
+    "## UML"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 67,
+   "id": "9ce0a18e-557a-4200-894a-c177ce4a353e",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "data": {
+      "image/svg+xml": [
+       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" contentScriptType=\"application/ecmascript\" contentStyleType=\"text/css\" height=\"213px\" preserveAspectRatio=\"none\" style=\"width:116px;height:213px;\" version=\"1.1\" viewBox=\"0 0 116 213\" width=\"116px\" zoomAndPan=\"magnify\"><defs><filter height=\"300%\" id=\"f1tvwar3hg26oq\" width=\"300%\" x=\"-1\" y=\"-1\"><feGaussianBlur result=\"blurOut\" stdDeviation=\"2.0\"/><feColorMatrix in=\"blurOut\" result=\"blurOut2\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0\"/><feOffset dx=\"4.0\" dy=\"4.0\" in=\"blurOut2\" result=\"blurOut3\"/><feBlend in=\"SourceGraphic\" in2=\"blurOut3\" mode=\"normal\"/></filter></defs><g><!--MD5=[a46ee5ce0ceb0380cf446a08a056dce4]\n",
+       "class A--><rect fill=\"#FEFECE\" filter=\"url(#f1tvwar3hg26oq)\" height=\"86.4141\" id=\"A\" style=\"stroke: #A80036; stroke-width: 1.5;\" width=\"99\" x=\"6\" y=\"8\"/><ellipse cx=\"47.55\" cy=\"24\" fill=\"#ADD1B2\" rx=\"11\" ry=\"11\" style=\"stroke: #A80036; stroke-width: 1.0;\"/><path d=\"M50.5188,29.6406 Q49.9406,29.9375 49.3,30.0781 Q48.6594,30.2344 47.9563,30.2344 Q45.4563,30.2344 44.1281,28.5938 Q42.8156,26.9375 42.8156,23.8125 Q42.8156,20.6875 44.1281,19.0313 Q45.4563,17.375 47.9563,17.375 Q48.6594,17.375 49.3,17.5313 Q49.9563,17.6875 50.5188,17.9844 L50.5188,20.7031 Q49.8938,20.125 49.3,19.8594 Q48.7063,19.5781 48.0813,19.5781 Q46.7375,19.5781 46.05,20.6563 Q45.3625,21.7188 45.3625,23.8125 Q45.3625,25.9063 46.05,26.9844 Q46.7375,28.0469 48.0813,28.0469 Q48.7063,28.0469 49.3,27.7813 Q49.8938,27.5 50.5188,26.9219 L50.5188,29.6406 Z \"/><text fill=\"#000000\" font-family=\"sans-serif\" font-size=\"12\" lengthAdjust=\"spacingAndGlyphs\" textLength=\"8\" x=\"67.45\" y=\"28.1543\">A</text><line style=\"stroke: #A80036; stroke-width: 1.5;\" x1=\"7\" x2=\"104\" y1=\"40\" y2=\"40\"/><rect fill=\"none\" height=\"6\" style=\"stroke: #C82930; stroke-width: 1.0;\" width=\"6\" x=\"14\" y=\"48\"/><text fill=\"#000000\" font-family=\"sans-serif\" font-size=\"11\" lengthAdjust=\"spacingAndGlyphs\" textLength=\"32\" x=\"26\" y=\"54.2104\">id: int</text><rect fill=\"none\" height=\"6\" style=\"stroke: #C82930; stroke-width: 1.0;\" width=\"6\" x=\"14\" y=\"60.8047\"/><text fill=\"#000000\" font-family=\"sans-serif\" font-size=\"11\" lengthAdjust=\"spacingAndGlyphs\" textLength=\"72\" x=\"26\" y=\"67.0151\">value: String</text><line style=\"stroke: #A80036; stroke-width: 1.0;\" x1=\"7\" x2=\"104\" y1=\"73.6094\" y2=\"73.6094\"/><ellipse cx=\"17\" cy=\"84.6094\" fill=\"#84BE84\" rx=\"3\" ry=\"3\" style=\"stroke: #038048; stroke-width: 1.0;\"/><text fill=\"#000000\" font-family=\"sans-serif\" font-size=\"11\" lengthAdjust=\"spacingAndGlyphs\" textLength=\"73\" x=\"26\" y=\"87.8198\">action(): void</text><!--MD5=[69c451c751c414e37549b782190fef46]\n",
+       "class B--><rect fill=\"#FEFECE\" filter=\"url(#f1tvwar3hg26oq)\" height=\"48\" id=\"B\" style=\"stroke: #A80036; stroke-width: 1.5;\" width=\"40\" x=\"35.5\" y=\"154\"/><ellipse cx=\"50.5\" cy=\"170\" fill=\"#ADD1B2\" rx=\"11\" ry=\"11\" style=\"stroke: #A80036; stroke-width: 1.0;\"/><path d=\"M53.4688,175.6406 Q52.8906,175.9375 52.25,176.0781 Q51.6094,176.2344 50.9063,176.2344 Q48.4063,176.2344 47.0781,174.5938 Q45.7656,172.9375 45.7656,169.8125 Q45.7656,166.6875 47.0781,165.0313 Q48.4063,163.375 50.9063,163.375 Q51.6094,163.375 52.25,163.5313 Q52.9063,163.6875 53.4688,163.9844 L53.4688,166.7031 Q52.8438,166.125 52.25,165.8594 Q51.6563,165.5781 51.0313,165.5781 Q49.6875,165.5781 49,166.6563 Q48.3125,167.7188 48.3125,169.8125 Q48.3125,171.9063 49,172.9844 Q49.6875,174.0469 51.0313,174.0469 Q51.6563,174.0469 52.25,173.7813 Q52.8438,173.5 53.4688,172.9219 L53.4688,175.6406 Z \"/><text fill=\"#000000\" font-family=\"sans-serif\" font-size=\"12\" lengthAdjust=\"spacingAndGlyphs\" textLength=\"8\" x=\"64.5\" y=\"174.1543\">B</text><line style=\"stroke: #A80036; stroke-width: 1.5;\" x1=\"36.5\" x2=\"74.5\" y1=\"186\" y2=\"186\"/><line style=\"stroke: #A80036; stroke-width: 1.5;\" x1=\"36.5\" x2=\"74.5\" y1=\"194\" y2=\"194\"/><!--MD5=[81500ff05264bba268bb228b65a49ed8]\n",
+       "reverse link A to B--><path d=\"M55.5,114.49 C55.5,128.49 55.5,142.48 55.5,153.67 \" fill=\"none\" id=\"A&lt;-B\" style=\"stroke: #A80036; stroke-width: 1.0;\"/><polygon fill=\"none\" points=\"48.5,114.32,55.5,94.32,62.5,114.32,48.5,114.32\" style=\"stroke: #A80036; stroke-width: 1.0;\"/><!--MD5=[38a8d2811f83b09964963181481af52f]\n",
+       "@startuml\r\n",
+       "\r\n",
+       "class A {\r\n",
+       "- id: int\r\n",
+       "- value: String\r\n",
+       "- -\r\n",
+       "+ action(): void\r\n",
+       "}\r\n",
+       "\r\n",
+       "class B {\r\n",
+       "}\r\n",
+       "\r\n",
+       "A<|- -B\r\n",
+       "\r\n",
+       "\r\n",
+       "@enduml\r\n",
+       "\n",
+       "PlantUML version 1.2020.02(Sun Mar 01 10:22:07 UTC 2020)\n",
+       "(GPL source distribution)\n",
+       "Java Runtime: OpenJDK Runtime Environment\n",
+       "JVM: OpenJDK 64-Bit Server VM\n",
+       "Java Version: 17.0.6+10\n",
+       "Operating System: Linux\n",
+       "Default Encoding: UTF-8\n",
+       "Language: en\n",
+       "Country: US\n",
+       "--></g></svg>"
+      ],
+      "text/plain": [
+       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" contentScriptType=\"application/ecmascript\" contentStyleType=\"text/css\" height=\"213px\" preserveAspectRatio=\"none\" style=\"width:116px;height:213px;\" version=\"1.1\" viewBox=\"0 0 116 213\" width=\"116px\" zoomAndPan=\"magnify\"><defs><filter height=\"300%\" id=\"f1tvwar3hg26oq\" width=\"300%\" x=\"-1\" y=\"-1\"><feGaussianBlur result=\"blurOut\" stdDeviation=\"2.0\"/><feColorMatrix in=\"blurOut\" result=\"blurOut2\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0\"/><feOffset dx=\"4.0\" dy=\"4.0\" in=\"blurOut2\" result=\"blurOut3\"/><feBlend in=\"SourceGraphic\" in2=\"blurOut3\" mode=\"normal\"/></filter></defs><g><!--MD5=[a46ee5ce0ceb0380cf446a08a056dce4]\n",
+       "class A--><rect fill=\"#FEFECE\" filter=\"url(#f1tvwar3hg26oq)\" height=\"86.4141\" id=\"A\" style=\"stroke: #A80036; stroke-width: 1.5;\" width=\"99\" x=\"6\" y=\"8\"/><ellipse cx=\"47.55\" cy=\"24\" fill=\"#ADD1B2\" rx=\"11\" ry=\"11\" style=\"stroke: #A80036; stroke-width: 1.0;\"/><path d=\"M50.5188,29.6406 Q49.9406,29.9375 49.3,30.0781 Q48.6594,30.2344 47.9563,30.2344 Q45.4563,30.2344 44.1281,28.5938 Q42.8156,26.9375 42.8156,23.8125 Q42.8156,20.6875 44.1281,19.0313 Q45.4563,17.375 47.9563,17.375 Q48.6594,17.375 49.3,17.5313 Q49.9563,17.6875 50.5188,17.9844 L50.5188,20.7031 Q49.8938,20.125 49.3,19.8594 Q48.7063,19.5781 48.0813,19.5781 Q46.7375,19.5781 46.05,20.6563 Q45.3625,21.7188 45.3625,23.8125 Q45.3625,25.9063 46.05,26.9844 Q46.7375,28.0469 48.0813,28.0469 Q48.7063,28.0469 49.3,27.7813 Q49.8938,27.5 50.5188,26.9219 L50.5188,29.6406 Z \"/><text fill=\"#000000\" font-family=\"sans-serif\" font-size=\"12\" lengthAdjust=\"spacingAndGlyphs\" textLength=\"8\" x=\"67.45\" y=\"28.1543\">A</text><line style=\"stroke: #A80036; stroke-width: 1.5;\" x1=\"7\" x2=\"104\" y1=\"40\" y2=\"40\"/><rect fill=\"none\" height=\"6\" style=\"stroke: #C82930; stroke-width: 1.0;\" width=\"6\" x=\"14\" y=\"48\"/><text fill=\"#000000\" font-family=\"sans-serif\" font-size=\"11\" lengthAdjust=\"spacingAndGlyphs\" textLength=\"32\" x=\"26\" y=\"54.2104\">id: int</text><rect fill=\"none\" height=\"6\" style=\"stroke: #C82930; stroke-width: 1.0;\" width=\"6\" x=\"14\" y=\"60.8047\"/><text fill=\"#000000\" font-family=\"sans-serif\" font-size=\"11\" lengthAdjust=\"spacingAndGlyphs\" textLength=\"72\" x=\"26\" y=\"67.0151\">value: String</text><line style=\"stroke: #A80036; stroke-width: 1.0;\" x1=\"7\" x2=\"104\" y1=\"73.6094\" y2=\"73.6094\"/><ellipse cx=\"17\" cy=\"84.6094\" fill=\"#84BE84\" rx=\"3\" ry=\"3\" style=\"stroke: #038048; stroke-width: 1.0;\"/><text fill=\"#000000\" font-family=\"sans-serif\" font-size=\"11\" lengthAdjust=\"spacingAndGlyphs\" textLength=\"73\" x=\"26\" y=\"87.8198\">action(): void</text><!--MD5=[69c451c751c414e37549b782190fef46]\n",
+       "class B--><rect fill=\"#FEFECE\" filter=\"url(#f1tvwar3hg26oq)\" height=\"48\" id=\"B\" style=\"stroke: #A80036; stroke-width: 1.5;\" width=\"40\" x=\"35.5\" y=\"154\"/><ellipse cx=\"50.5\" cy=\"170\" fill=\"#ADD1B2\" rx=\"11\" ry=\"11\" style=\"stroke: #A80036; stroke-width: 1.0;\"/><path d=\"M53.4688,175.6406 Q52.8906,175.9375 52.25,176.0781 Q51.6094,176.2344 50.9063,176.2344 Q48.4063,176.2344 47.0781,174.5938 Q45.7656,172.9375 45.7656,169.8125 Q45.7656,166.6875 47.0781,165.0313 Q48.4063,163.375 50.9063,163.375 Q51.6094,163.375 52.25,163.5313 Q52.9063,163.6875 53.4688,163.9844 L53.4688,166.7031 Q52.8438,166.125 52.25,165.8594 Q51.6563,165.5781 51.0313,165.5781 Q49.6875,165.5781 49,166.6563 Q48.3125,167.7188 48.3125,169.8125 Q48.3125,171.9063 49,172.9844 Q49.6875,174.0469 51.0313,174.0469 Q51.6563,174.0469 52.25,173.7813 Q52.8438,173.5 53.4688,172.9219 L53.4688,175.6406 Z \"/><text fill=\"#000000\" font-family=\"sans-serif\" font-size=\"12\" lengthAdjust=\"spacingAndGlyphs\" textLength=\"8\" x=\"64.5\" y=\"174.1543\">B</text><line style=\"stroke: #A80036; stroke-width: 1.5;\" x1=\"36.5\" x2=\"74.5\" y1=\"186\" y2=\"186\"/><line style=\"stroke: #A80036; stroke-width: 1.5;\" x1=\"36.5\" x2=\"74.5\" y1=\"194\" y2=\"194\"/><!--MD5=[81500ff05264bba268bb228b65a49ed8]\n",
+       "reverse link A to B--><path d=\"M55.5,114.49 C55.5,128.49 55.5,142.48 55.5,153.67 \" fill=\"none\" id=\"A&lt;-B\" style=\"stroke: #A80036; stroke-width: 1.0;\"/><polygon fill=\"none\" points=\"48.5,114.32,55.5,94.32,62.5,114.32,48.5,114.32\" style=\"stroke: #A80036; stroke-width: 1.0;\"/><!--MD5=[38a8d2811f83b09964963181481af52f]\n",
+       "@startuml\r\n",
+       "\r\n",
+       "class A {\r\n",
+       "- id: int\r\n",
+       "- value: String\r\n",
+       "- -\r\n",
+       "+ action(): void\r\n",
+       "}\r\n",
+       "\r\n",
+       "class B {\r\n",
+       "}\r\n",
+       "\r\n",
+       "A<|- -B\r\n",
+       "\r\n",
+       "\r\n",
+       "@enduml\r\n",
+       "\n",
+       "PlantUML version 1.2020.02(Sun Mar 01 10:22:07 UTC 2020)\n",
+       "(GPL source distribution)\n",
+       "Java Runtime: OpenJDK Runtime Environment\n",
+       "JVM: OpenJDK 64-Bit Server VM\n",
+       "Java Version: 17.0.6+10\n",
+       "Operating System: Linux\n",
+       "Default Encoding: UTF-8\n",
+       "Language: en\n",
+       "Country: US\n",
+       "--></g></svg>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "%%plantUML\n",
+    "@startuml\n",
+    "\n",
+    "class A {\n",
+    "- id: int\n",
+    "- value: String\n",
+    "--\n",
+    "+ action(): void\n",
+    "}\n",
+    "\n",
+    "class B {\n",
+    "}\n",
+    "\n",
+    "A<|--B\n",
+    "\n",
+    "\n",
+    "@enduml"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "d31766a4-3532-4aaf-a169-359a21efebf2",
+   "metadata": {
+    "user_expressions": []
+   },
+   "source": [
+    "## Source code"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 69,
+   "id": "b6663cc2-b90d-4090-95fd-5c9c033e03aa",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "```Java\n",
+       "public class Voiture {\n",
+       "\n",
+       "    private long id;\n",
+       "\n",
+       "    private String name;\n",
+       "\n",
+       "    public void start() {\n",
+       "        System.out.println(\"Vroum.\");\n",
+       "    }\n",
+       "\n",
+       "    @Deprecated\n",
+       "    public void old() {\n",
+       "    }\n",
+       "}\n",
+       "```"
+      ],
+      "text/plain": [
+       "```Java\n",
+       "public class Voiture {\n",
+       "\n",
+       "    private long id;\n",
+       "\n",
+       "    private String name;\n",
+       "\n",
+       "    public void start() {\n",
+       "        System.out.println(\"Vroum.\");\n",
+       "    }\n",
+       "\n",
+       "    @Deprecated\n",
+       "    public void old() {\n",
+       "    }\n",
+       "}\n",
+       "```"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "%%javasrcClassByName Voiture\n",
+    "Voiture.java"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 70,
+   "id": "3cc86737-d6b6-4cb2-8f27-b90ae09594ef",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "```Java\n",
+       "public void start() {\n",
+       "    System.out.println(\"Vroum.\");\n",
+       "}\n",
+       "```"
+      ],
+      "text/plain": [
+       "```Java\n",
+       "public void start() {\n",
+       "    System.out.println(\"Vroum.\");\n",
+       "}\n",
+       "```"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "%%javasrcMethodByName Voiture start\n",
+    "Voiture.java"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 71,
+   "id": "0e44b6d5-13c8-4d09-bc20-f0034ef0d516",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "```Java\n",
+       "@Deprecated\n",
+       "public void old() {\n",
+       "}\n",
+       "```"
+      ],
+      "text/plain": [
+       "```Java\n",
+       "@Deprecated\n",
+       "public void old() {\n",
+       "}\n",
+       "```"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "%%javasrcMethodByAnnotationName Voiture Deprecated\n",
+    "Voiture.java"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "019e262f-1b3b-41a8-8c08-90f968b2bbab",
+   "metadata": {
+    "tags": [],
+    "user_expressions": []
+   },
+   "source": [
+    "## Shell"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 73,
+   "id": "1a286e60-5b12-4e3d-8d83-5effdb557e53",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Linux 330851cf59b4 5.15.82-0-virt #1-Alpine SMP Mon, 12 Dec 2022 09:15:17 +0000 aarch64 aarch64 aarch64 GNU/Linux\n"
+     ]
+    }
+   ],
+   "source": [
+    "%%shell\n",
+    "uname -a"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "4b94d8f6-2ab5-4536-806c-24d98a24078b",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Java",
+   "language": "java",
+   "name": "java"
+  },
+  "language_info": {
+   "codemirror_mode": "java",
+   "file_extension": ".jshell",
+   "mimetype": "text/x-java-source",
+   "name": "Java",
+   "pygments_lexer": "java",
+   "version": "17.0.6+10"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/Voiture.java b/Voiture.java
new file mode 100644
index 0000000000000000000000000000000000000000..3ea54e1f15328134b78b59c2d0c2c70bf10ffce9
--- /dev/null
+++ b/Voiture.java
@@ -0,0 +1,11 @@
+public class Voiture {
+    private long id;
+    private String name;
+    
+    public void start() {
+        System.out.println("Vroum.");
+    }
+    
+    @Deprecated
+    public void old() { }
+}
\ No newline at end of file
diff --git a/run-with-docker.sh b/run-with-docker.sh
new file mode 100755
index 0000000000000000000000000000000000000000..cb2c5e85001ebdb3d0607a23f7a0bbd7017a4475
--- /dev/null
+++ b/run-with-docker.sh
@@ -0,0 +1,8 @@
+docker run --rm \
+	--user root \
+        --name notebook-java-${PWD##*/} \
+        --volume $PWD:/home/jovyan/notebooks \
+        --volume $HOME/JUPYTER_WORK:/home/jovyan/work \
+        --publish 8888:8888 \
+        --env NB_UID=$UID \
+        brunoe/jupyter-java-base:develop start-notebook.sh --notebook-dir=/home/jovyan/notebooks