├── .gitignore ├── LICENSE ├── Main.java ├── README.md ├── i18n └── zh-CN │ ├── ReadMe-zh-CN.md │ ├── java-developer-roadmap-zh-CN.png │ └── java-developer-roadmap-zh-CN.xml ├── java-developer-roadmap.png └── java-developer-roadmap.xml /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | java-developer-roadmap.iml 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2019 Sakib Sami 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Main.java: -------------------------------------------------------------------------------- 1 | class Main { 2 | public static void main(String[] args) { 3 | System.out.println("Welcome to Java Developer Roadmap"); 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Java Developer Roadmap 2 | 3 | > Roadmap to becoming a [Java](https://g.co/kgs/bzeRda) developer in 2025: 4 | 5 | Below you can find a chart demonstrating the paths that you can take and the libraries that you would want to learn to 6 | become a Java developer. I made this chart as a tip for everyone who asks me, "What should I learn next as a Java 7 | developer?" 8 | 9 | [中文版](./i18n/zh-CN/ReadMe-zh-CN.md) 10 | 11 | ## Disclaimer 12 | 13 | > The purpose of this roadmap is to give you an idea about the landscape. The road map will guide you if you are 14 | > confused about what to learn next, rather than encouraging you to pick what is hip and trendy. You should grow some 15 | > understanding of why one tool would be better suited for some cases than the other and remember hip and trendy does 16 | > not 17 | > always mean best suited for the job 18 | 19 | ## Give a Star! :star: 20 | 21 | If you like or are using this project to learn or start your solution, please give it a star. Thanks! 22 | 23 | ## Roadmap 24 | 25 |  26 | 27 | ## Resources 28 | 29 | 1. Prerequisites 30 | 31 | - [Java](https://www.java.com/en/download/) 32 | - [Gradle](https://gradle.org/) 33 | or [Maven](https://maven.apache.org/) 34 | - [SQL](https://www.w3schools.com/sql/default.asp) 35 | 36 | 2. General Development Skills 37 | 38 | - Learn GIT, create a few repositories on GitHub, share your code with other people 39 | - Know HTTP(S) protocol, request methods (GET, POST, PUT, PATCH, DELETE, OPTIONS) 40 | - Don't be afraid of using Google, [Power Searching with Google](http://www.powersearchingwithGoogle.com/) 41 | - Read a few books about algorithms and data structures 42 | - Learn about implementation of a basic Authentication 43 | - Solid principles, etc 44 | 45 | 3. CLI Tools 46 | 1. [args4j](http://args4j.kohsuke.org/) 47 | 2. [JCommander](http://jcommander.org/) 48 | 3. [airline](https://github.com/airlift/airline) 49 | 50 | 4. Web Frameworks + Routers 51 | 52 | 1. [Spring](https://spring.io/) 53 | 2. [Play Framework](https://www.playframework.com/) 54 | 3. [Spark](http://sparkjava.com/) 55 | 4. [dropwizard](https://www.dropwizard.io/en/stable/) 56 | 5. [nanohttpd](https://github.com/NanoHttpd/nanohttpd) 57 | 6. [Vertx](https://vertx.io/) 58 | 59 | 5. Databases 60 | 61 | 1. Relational 62 | 1. [SQL Server](https://www.microsoft.com/en-us/sql-server/sql-server-2017) 63 | 2. [PostgreSQL](https://www.postgresql.org/) 64 | 3. [MariaDB](https://mariadb.org/) 65 | 4. [MySQL](https://www.mysql.com/) 66 | 5. [Oracle](https://www.oracle.com/database/) 67 | 2. Cloud Databases 68 | - [CosmosDB](https://docs.microsoft.com/en-us/azure/cosmos-db) 69 | - [DynamoDB](https://aws.amazon.com/dynamodb/) 70 | 3. Search Engines 71 | - [ElasticSearch](https://www.elastic.co/) 72 | - [Opensearch](https://opensearch.org/) 73 | - [Algolia](https://www.algolia.com/) 74 | 4. NoSQL 75 | - [MongoDB](https://www.monJavadb.com/) 76 | - [Redis](https://redis.io/) 77 | - [Apache Cassandra](http://cassandra.apache.org/) 78 | - [Clickhouse](https://clickhouse.com/) 79 | - [InfluxDB](https://www.influxdata.com/) 80 | - [CouchDB](http://couchdb.apache.org/) 81 | 82 | 6. ORMs 83 | 84 | 1. [Hibernate](https://hibernate.org/) 85 | 2. [Ebean](https://ebean.io/) 86 | 87 | 7. Caching 88 | 89 | 1. [Caffeine](https://github.com/ben-manes/caffeine) 90 | 2. [EHCache](http://www.ehcache.org/) 91 | 3. [Cache2k](https://cache2k.org/) 92 | 4. Distributed Cache 93 | 1. [Java-Redis](https://github.com/xetorthio/jedis) 94 | 2. [Java-Memcached](https://redislabs.com/lp/memcached-java/) 95 | 3. [Infinispan](http://infinispan.org/) 96 | 97 | 8. Logging 98 | 99 | 1. Log Frameworks 100 | - [Zap](https://github.com/uber-Java/zap) 101 | - [TinyLog](http://www.tinylog.org/) 102 | - [log4j](https://logging.apache.org/log4j) 103 | 2. Log Management System 104 | - [ELK Stack](https://www.elastic.co/what-is/elk-stack) 105 | - [Sentry.io](http://sentry.io) 106 | - [Loggly.com](https://loggly.com) 107 | - [Tracer](https://github.com/zalando/tracer) 108 | 109 | 9. Real-Time Communication 110 | 1. [Socket.IO](https://socket.io/) 111 | 2. [atmosphere](https://github.com/Atmosphere/atmosphere) 112 | 3. [webbit](https://github.com/webbit/webbit) 113 | 114 | 10. API Clients 115 | 116 | 1. REST 117 | - [okhttp](https://square.github.io/okhttp/) 118 | - [retrofit](https://square.github.io/retrofit/) 119 | 2. [GraphQL](https://graphql.org/) 120 | 121 | 11. Good to Know 122 | 123 | - [Beanvalidation](https://beanvalidation.org/) 124 | - [bouncycastle](https://www.bouncycastle.org/java.html) 125 | - [gson](https://github.com/google/gson) 126 | - [Apache Shiro](https://shiro.apache.org/) 127 | - [JJWT](https://github.com/jwtk/jjwt) 128 | - [RxJava](https://github.com/ReactiveX/RxJava) 129 | - [Quarkus](https://quarkus.io/) 130 | 131 | 12. Testing 132 | 133 | 1. Unit, Behavior, Integration, Load Testing 134 | - [JUnit](http://junit.org/) 135 | - [JMeter](https://jmeter.apache.org/) 136 | - [CitrusFramework](https://citrusframework.org/) 137 | - [Gatling](https://gatling.io/) 138 | - [Tsung](http://tsung.erlang-projects.org/) 139 | - [Mockito](https://site.mockito.org/) 140 | - [Assertj](https://joel-costigliola.github.io/assertj) 141 | 142 | 2. E2E Testing 143 | - [Selenium](https://github.com/tebeka/selenium) 144 | - [Wiremock](https://wiremock.org/) 145 | - [Testcontainers](https://testcontainers.com/) 146 | 147 | 13. Task Scheduling 148 | 149 | - [Aurora](https://aurora.apache.org/) 150 | - [elasticjob](https://github.com/elasticjob/elastic-job-lite) 151 | - [Sundial](https://github.com/knowm/Sundial) 152 | - [cron-utils](https://github.com/jmrozanec/cron-utils) 153 | 154 | 14. MicroServices 155 | 156 | 1. Message-Broker 157 | - [RabbitMQ](https://www.rabbitmq.com/tutorials/tutorial-one-javascript.html) 158 | - [Apache Kafka](https://www.npmjs.com/package/kafka-node) 159 | - [ActiveMQ](https://github.com/apache/activemq) 160 | - [Apache Pulsar](https://pulsar.apache.org/) 161 | 2. Message-Bus 162 | - [mbassador](https://github.com/bennidi/mbassador) 163 | - [rmq](https://github.com/xetorthio/rmq) 164 | 3. Frameworks 165 | - [Apollo](https://spotify.github.io/apollo/) 166 | - [lagom-framework](https://www.lightbend.com/lagom-framework) 167 | - [micronaut](https://micronaut.io/) 168 | - [eureka](https://github.com/Netflix/eureka) 169 | - [helidon](https://helidon.io/#/) 170 | - [armeria](https://github.com/line/armeria) 171 | 4. RPC 172 | - [Protocol Buffers](https://github.com/protocolbuffers/protobuf) 173 | - [gRPC-Java](https://github.com/grpc/grpc-java) 174 | - [thrift](https://thrift.apache.org/) 175 | 176 | 15. [Java-Patterns](https://github.com/iluwatar/java-design-patterns) 177 | 178 | ## Wrap Up 179 | 180 | If you think the roadmap can be improved, please do open a PR with any updates and submit any issues. Also, I will 181 | continue to improve this, so you might want to star this repository to revisit. 182 | 183 | Idea from : [Golang Developer Roadmap](https://github.com/Alikhll/golang-developer-roadmap) 184 | 185 | ## Contribution 186 | 187 | The roadmap is built using [Draw.io](https://www.draw.io/). Project file can be found at `java-developer-roadmap.xml` 188 | file. To modify it, open draw.io, click **Open Existing Diagram** and choose `xml` file with project. It will open the 189 | roadmap for you. Update it, upload and update the images in readme and create a PR (export as png with 400% zoom and 190 | minify that with [Compressor.io](https://compressor.io/compress)). 191 | 192 | - Open a pull request with improvements 193 | - Discuss ideas in issues 194 | - Spread the word 195 | 196 | ## License 197 | 198 | [](https://creativecommons.org/licenses/by-nc-sa/4.0/) 199 | -------------------------------------------------------------------------------- /i18n/zh-CN/ReadMe-zh-CN.md: -------------------------------------------------------------------------------- 1 | # Java 开发者路线图 2 | 3 | > 在 2021 年成为一名 Java 开发者的路线图: 4 | 5 | 下面有一个路线图,如果你想要成为一名 Java 语言的开发者的话,你可以沿着这张图里面的路径去学习,里面记录了一些你可能也想学习的库。当你问:”我想成为一名 Java 语言开发者,接下来我要学些什么?“,我做的这个路线图就是一个很好的建议。 6 | 7 | ## 免责声明 8 | 9 | > 本路线图的目的是让你看到学习 Java 语言的一个全景图。在你对接下来要学习什么感到困惑的时候,这个路线图会给你一些指导,而不是鼓励你去选择当下流行的东西。你需要逐渐了解为什么一个工具可能会比另一个工具更适合某些场景。但请记住,流行的东西并不意味着一定适合你的工作。 10 | 11 | ## 给我一个 Star! :star: 12 | 13 | 如果您喜欢或者正在使用这个项目来学习或者开始你的计划,请给我一个 Star,谢谢! 14 | 15 | ## Roadmap 16 | 17 |  18 | 19 | ## 资源 20 | 21 | 1. 先决条件 22 | 23 | - [Java](https://www.java.com/en/download/) 24 | - [Gradle](https://gradle.org/) 25 | 或 [Maven](https://maven.apache.org/) 26 | - [SQL](https://www.w3schools.com/sql/default.asp) 27 | 28 | 2. 通用开发技能 29 | 30 | - 学习 GIT,在 GitHub 上建立一些仓库,与其它人分享你的代码 31 | - 了解 HTTP(S) 协议,request 方法(GET, POST, PUT, PATCH, DELETE, OPTIONS) 32 | - 不要害怕使用Google,[Google 搜索的力量](http://www.powersearchingwithgoogle.com/) 33 | - 看一些和数据结构以及算法有关的书籍 34 | - 学习关于认证的基础实现 35 | - 面向对象原则等等 36 | 37 | 3. 命令行工具 38 | 1. [args4j](http://args4j.kohsuke.org/) 39 | 2. [JCommander](http://jcommander.org/) 40 | 3. [airline](https://github.com/airlift/airline) 41 | 42 | 4. 网页框架 + 路由 43 | 44 | 1. [Spring](https://spring.io/) 45 | 2. [Play Framework](https://www.playframework.com/) 46 | 3. [Spark](http://sparkjava.com/) 47 | 4. [Jersey](https://jersey.github.io/) 48 | 5. [nanohttpd](https://github.com/NanoHttpd/nanohttpd) 49 | 50 | 5. 数据库 51 | 52 | 1. 关系型数据库 53 | 1. [SQL Server](https://www.microsoft.com/en-us/sql-server/sql-server-2017) 54 | 2. [PostgreSQL](https://www.postgresql.org/) 55 | 3. [MariaDB](https://mariadb.org/) 56 | 4. [MySQL](https://www.mysql.com/) 57 | 5. [Oracle](https://www.oracle.com/database/) 58 | 2. 云数据库 59 | - [CosmosDB](https://docs.microsoft.com/en-us/azure/cosmos-db) 60 | - [DynamoDB](https://aws.amazon.com/dynamodb/) 61 | 3. 搜索引擎 62 | - [ElasticSearch](https://www.elastic.co/) 63 | - [Solr](http://lucene.apache.org/solr/) 64 | - [Sphinx](http://sphinxsearch.com/) 65 | 4. NoSQL 66 | - [MongoDB](https://www.monJavadb.com/) 67 | - [Redis](https://redis.io/) 68 | - [Apache Cassandra](http://cassandra.apache.org/) 69 | - [LiteDB](https://github.com/mbdavid/LiteDB) 70 | - [RavenDB](https://github.com/ravendb/ravendb) 71 | - [CouchDB](http://couchdb.apache.org/) 72 | 73 | 6. 对象关系映射框架(ORMs) 74 | 75 | 1. [Hibernate](https://hibernate.org/) 76 | 2. [Ebean](https://ebean.io/) 77 | 3. [BelleORM](https://github.com/codersgarage/BelleORM) 78 | 79 | 7. 高速缓存 80 | 81 | 1. [Caffeine](https://github.com/ben-manes/caffeine) 82 | 2. [EHCache](http://www.ehcache.org/) 83 | 3. [Cache2k](https://cache2k.org/) 84 | 4. 分布式缓存 85 | 1. [Java-Redis](https://github.com/xetorthio/jedis) 86 | 2. [Java-Memcached](https://redislabs.com/lp/memcached-java/) 87 | 3. [Infinispan](http://infinispan.org/) 88 | 89 | 8. 日志 90 | 91 | 1. 日志框架 92 | - [Zap](https://github.com/uber-Java/zap) 93 | - [TinyLog](http://www.tinylog.org/) 94 | - [log4j](https://logging.apache.org/log4j) 95 | 2. 日志管理系统 96 | - [ELK Stack](https://www.elastic.co/what-is/elk-stack) 97 | - [Sentry.io](http://sentry.io) 98 | - [Loggly.com](https://loggly.com) 99 | - [Tracer](https://github.com/zalando/tracer) 100 | 101 | 9. 实时通信 102 | 1. [Socket.IO](https://socket.io/) 103 | 2. [atmosphere](https://github.com/Atmosphere/atmosphere) 104 | 3. [webbit](https://github.com/webbit/webbit) 105 | 106 | 10. API 客户端 107 | 108 | 1. REST 109 | - [okhttp](https://square.github.io/okhttp/) 110 | - [retrofit](https://square.github.io/retrofit/) 111 | 2. [GraphQL](https://graphql.org/) 112 | 113 | 11. 最好知道 114 | 115 | - [Beanvalidation](https://beanvalidation.org/) 116 | - [bouncycastle](https://www.bouncycastle.org/java.html) 117 | - [gson](https://github.com/google/gson) 118 | - [Apache Shiro](https://shiro.apache.org/) 119 | - [JJWT](https://github.com/jwtk/jjwt) 120 | - [RxJava](https://github.com/ReactiveX/RxJava) 121 | 122 | 12. 测试 123 | 124 | 1. 单元、行为、集成和载入测试 125 | 1. [JUnit](http://junit.org/) 126 | 2. [CitrusFramework](https://citrusframework.org/) 127 | 3. [Gatling](https://gatling.io/) 128 | 4. [Tsung](http://tsung.erlang-projects.org/) 129 | 5. [Mockito](https://site.mockito.org/) 130 | 6. [Truth](https://github.com/google/truth) 131 | 7. [Assertj](https://joel-costigliola.github.io/assertj) 132 | 8. [cucumber-jvm](https://github.com/cucumber/cucumber-jvm) 133 | 9. [cukes](https://github.com/ctco/cukes) 134 | 10. [hoverfly-java](https://github.com/SpectoLabs/hoverfly-java) 135 | 11. [rest-assured](https://github.com/rest-assured/rest-assured) 136 | 12. [jbehave](https://jbehave.org/) 137 | 13. [Mockserver](https://www.mock-server.com) 138 | 139 | 2. 端对端测试 140 | - [Selenium](https://github.com/tebeka/selenium) 141 | 142 | 13. 任务调度 143 | 144 | - [Aurora](https://aurora.apache.org/) 145 | - [elasticjob](https://github.com/elasticjob/elastic-job-lite) 146 | - [Sundial](https://github.com/knowm/Sundial) 147 | - [cron-utils](https://github.com/jmrozanec/cron-utils) 148 | 149 | 14. 微服务 150 | 151 | 1. 消息代理 152 | - [RabbitMQ](https://www.rabbitmq.com/tutorials/tutorial-one-javascript.html) 153 | - [Apache Kafka](https://www.npmjs.com/package/kafka-node) 154 | - [ActiveMQ](https://github.com/apache/activemq) 155 | - [Azure Service Bus](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview) 156 | 2. 消息总线 157 | - [mbassador](https://github.com/bennidi/mbassador) 158 | - [rmq](https://github.com/xetorthio/rmq) 159 | 3. 框架 160 | - [Apollo](https://spotify.github.io/apollo/) 161 | - [lagom-framework](https://www.lightbend.com/lagom-framework) 162 | - [micronaut](https://micronaut.io/) 163 | - [eureka](https://github.com/Netflix/eureka) 164 | - [helidon](https://helidon.io/#/) 165 | - [armeria](https://github.com/line/armeria) 166 | 4. RPC 167 | - [Protocol Buffers](https://github.com/protocolbuffers/protobuf) 168 | - [gRPC-Java](https://github.com/grpc/grpc-java) 169 | - [thrift](https://thrift.apache.org/) 170 | 171 | 15. [Java-模式](https://github.com/iluwatar/java-design-patterns) 172 | 173 | ## 最后 174 | 175 | 如果您认为该路线图有待改进,请务必提交PR或者发Issue。当然,我也会持续地改进它,所以你可以给这个仓库点个 Star 以便于再次访问。 176 | 177 | 想法来源于 : [Golang Developer Roadmap](https://github.com/Alikhll/golang-developer-roadmap) 178 | 179 | ## 贡献 180 | 181 | 这个路线图是用 [Draw.io](https://www.draw.io/) 做的。项目文件为该仓库下的 `java-developer-roadmap-zh-CN.xml` 文件。 您如果想要修改它,您可以进入 [Draw.io](https://www.draw.io/) 点击打开已有图表并且选择这个 `xml` 文件。它会为您打开这个路线图。改进它,并且上传,以及更新该 ReadMe 中的对应图片,然后提交 PR(以 400% 的缩放导出 PNG 以及使用 [Compressor.io](https://compressor.io/compress) 来压缩它)。 182 | 183 | - 用 PR 提交改进 184 | - 在 Issue 中交流想法 185 | - 传播这个图表 186 | 187 | ## License 188 | 189 | [](https://creativecommons.org/licenses/by-nc-sa/4.0/) -------------------------------------------------------------------------------- /i18n/zh-CN/java-developer-roadmap-zh-CN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/s4kibs4mi/java-developer-roadmap/54ad6905b192c70616d087b11ce1e56f7a1d93ac/i18n/zh-CN/java-developer-roadmap-zh-CN.png -------------------------------------------------------------------------------- /i18n/zh-CN/java-developer-roadmap-zh-CN.xml: -------------------------------------------------------------------------------- 1 | <mxfile modified="2021-04-27T07:00:39.880Z" host="app.diagrams.net" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36" etag="dQWiqqrKaIqiZOyRFdfR" version="14.6.6" type="device"><diagram id="MeNSXRW36sjKSdI7cYYw" name="Page-1">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</diagram></mxfile> -------------------------------------------------------------------------------- /java-developer-roadmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/s4kibs4mi/java-developer-roadmap/54ad6905b192c70616d087b11ce1e56f7a1d93ac/java-developer-roadmap.png -------------------------------------------------------------------------------- /java-developer-roadmap.xml: -------------------------------------------------------------------------------- 1 | <mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" version="24.8.6"> 2 | <diagram id="MeNSXRW36sjKSdI7cYYw" name="Page-1"> 3 | <mxGraphModel dx="1341" dy="682" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> 4 | <root> 5 | <mxCell id="0" /> 6 | <mxCell id="1" parent="0" /> 7 | <mxCell id="NU75y0YXBvxGrzugc1HJ-1" value="Java Developer in 2025" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=16;fontStyle=0" parent="1" vertex="1"> 8 | <mxGeometry x="278.5" width="280" height="30" as="geometry" /> 9 | </mxCell> 10 | <mxCell id="NU75y0YXBvxGrzugc1HJ-2" value="Legends" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=12;" parent="1" vertex="1"> 11 | <mxGeometry x="684" y="8" width="51" height="20" as="geometry" /> 12 | </mxCell> 13 | <mxCell id="NU75y0YXBvxGrzugc1HJ-3" value="Personal must know" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 14 | <mxGeometry x="685" y="40" width="120" height="20" as="geometry" /> 15 | </mxCell> 16 | <mxCell id="NU75y0YXBvxGrzugc1HJ-4" value="Good to know" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFCC99;" parent="1" vertex="1"> 17 | <mxGeometry x="685" y="70" width="120" height="20" as="geometry" /> 18 | </mxCell> 19 | <mxCell id="NU75y0YXBvxGrzugc1HJ-5" value="Possibilities" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#CCCCCC;" parent="1" vertex="1"> 20 | <mxGeometry x="685" y="100" width="120" height="20" as="geometry" /> 21 | </mxCell> 22 | <mxCell id="NU75y0YXBvxGrzugc1HJ-6" value="Learn the Prerequisites" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=10;fontStyle=0" parent="1" vertex="1"> 23 | <mxGeometry x="255" y="85" width="280" height="15" as="geometry" /> 24 | </mxCell> 25 | <mxCell id="NU75y0YXBvxGrzugc1HJ-7" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=0.5;exitY=1;entryX=0.5;entryY=0;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-6" target="NU75y0YXBvxGrzugc1HJ-9" edge="1"> 26 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 27 | <mxPoint x="275" y="180" as="sourcePoint" /> 28 | <mxPoint x="365" y="160" as="targetPoint" /> 29 | <Array as="points"> 30 | <mxPoint x="395" y="110" /> 31 | <mxPoint x="419" y="140" /> 32 | </Array> 33 | </mxGeometry> 34 | </mxCell> 35 | <mxCell id="NU75y0YXBvxGrzugc1HJ-8" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=0.5;exitY=1;entryX=0.5;entryY=0;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-1" target="NU75y0YXBvxGrzugc1HJ-6" edge="1"> 36 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 37 | <mxPoint x="419" y="70" as="sourcePoint" /> 38 | <mxPoint x="315" y="180" as="targetPoint" /> 39 | <Array as="points"> 40 | <mxPoint x="395" y="50" /> 41 | </Array> 42 | </mxGeometry> 43 | </mxCell> 44 | <mxCell id="NU75y0YXBvxGrzugc1HJ-9" value="Java" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 45 | <mxGeometry x="353.5" y="160" width="130" height="20" as="geometry" /> 46 | </mxCell> 47 | <mxCell id="NU75y0YXBvxGrzugc1HJ-10" value="Gradle/Maven, Library" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 48 | <mxGeometry x="353.5" y="185" width="130" height="20" as="geometry" /> 49 | </mxCell> 50 | <mxCell id="NU75y0YXBvxGrzugc1HJ-11" value="<span>Learn Java dependency management tool</span><br>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 51 | <mxGeometry x="545" y="155" width="260" height="15" as="geometry" /> 52 | </mxCell> 53 | <mxCell id="NU75y0YXBvxGrzugc1HJ-12" value="semantic versioning" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 54 | <mxGeometry x="544" y="167" width="260" height="15" as="geometry" /> 55 | </mxCell> 56 | <mxCell id="NU75y0YXBvxGrzugc1HJ-13" value="Version, scripts, repository and other Properties" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 57 | <mxGeometry x="545" y="180" width="260" height="15" as="geometry" /> 58 | </mxCell> 59 | <mxCell id="NU75y0YXBvxGrzugc1HJ-14" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;exitX=1;exitY=0.25;entryX=0;entryY=0.5;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-10" target="NU75y0YXBvxGrzugc1HJ-11" edge="1"> 60 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 61 | <mxPoint x="363.5" y="175" as="sourcePoint" /> 62 | <mxPoint x="295" y="132.5" as="targetPoint" /> 63 | <Array as="points"> 64 | <mxPoint x="505" y="163" /> 65 | </Array> 66 | </mxGeometry> 67 | </mxCell> 68 | <mxCell id="NU75y0YXBvxGrzugc1HJ-15" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;exitX=1;exitY=0.5;entryX=0;entryY=0.5;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-10" target="NU75y0YXBvxGrzugc1HJ-12" edge="1"> 69 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 70 | <mxPoint x="493.5" y="175" as="sourcePoint" /> 71 | <mxPoint x="555" y="157.5" as="targetPoint" /> 72 | <Array as="points"> 73 | <mxPoint x="515" y="175" /> 74 | </Array> 75 | </mxGeometry> 76 | </mxCell> 77 | <mxCell id="NU75y0YXBvxGrzugc1HJ-16" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;exitX=1;exitY=0.75;entryX=0;entryY=0.5;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-10" target="NU75y0YXBvxGrzugc1HJ-13" edge="1"> 78 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 79 | <mxPoint x="503.5" y="185" as="sourcePoint" /> 80 | <mxPoint x="565" y="167.5" as="targetPoint" /> 81 | <Array as="points"> 82 | <mxPoint x="525" y="188" /> 83 | </Array> 84 | </mxGeometry> 85 | </mxCell> 86 | <mxCell id="NU75y0YXBvxGrzugc1HJ-17" value="Array &amp; ArrayList" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 87 | <mxGeometry x="2.5" y="139.5" width="260" height="15" as="geometry" /> 88 | </mxCell> 89 | <mxCell id="NU75y0YXBvxGrzugc1HJ-18" value="Pointers, Class, Methods" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 90 | <mxGeometry x="5" y="153" width="260" height="15" as="geometry" /> 91 | </mxCell> 92 | <mxCell id="NU75y0YXBvxGrzugc1HJ-19" value="Interface" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 93 | <mxGeometry x="5" y="165" width="260" height="15" as="geometry" /> 94 | </mxCell> 95 | <mxCell id="NU75y0YXBvxGrzugc1HJ-20" value="Thread, Routine" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 96 | <mxGeometry x="5" y="177" width="260" height="15" as="geometry" /> 97 | </mxCell> 98 | <mxCell id="NU75y0YXBvxGrzugc1HJ-21" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;exitX=0;exitY=0.25;entryX=1;entryY=0.5;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" target="NU75y0YXBvxGrzugc1HJ-17" edge="1"> 99 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 100 | <mxPoint x="354" y="165" as="sourcePoint" /> 101 | <mxPoint x="295" y="107.5" as="targetPoint" /> 102 | <Array as="points"> 103 | <mxPoint x="315" y="140" /> 104 | </Array> 105 | </mxGeometry> 106 | </mxCell> 107 | <mxCell id="NU75y0YXBvxGrzugc1HJ-22" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;exitX=0;exitY=0.25;entryX=1;entryY=0.5;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" target="NU75y0YXBvxGrzugc1HJ-18" edge="1"> 108 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 109 | <mxPoint x="354" y="165" as="sourcePoint" /> 110 | <mxPoint x="275" y="157.5" as="targetPoint" /> 111 | <Array as="points"> 112 | <mxPoint x="305" y="150" /> 113 | </Array> 114 | </mxGeometry> 115 | </mxCell> 116 | <mxCell id="NU75y0YXBvxGrzugc1HJ-23" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=1;entryY=0.5;endFill=0;dashed=1;exitX=0;exitY=0.5;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" target="NU75y0YXBvxGrzugc1HJ-19" edge="1"> 117 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 118 | <mxPoint x="354" y="170" as="sourcePoint" /> 119 | <mxPoint x="275" y="170.5" as="targetPoint" /> 120 | <Array as="points"> 121 | <mxPoint x="305" y="160" /> 122 | </Array> 123 | </mxGeometry> 124 | </mxCell> 125 | <mxCell id="NU75y0YXBvxGrzugc1HJ-24" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;exitX=0;exitY=0.75;entryX=1;entryY=0.5;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" target="NU75y0YXBvxGrzugc1HJ-20" edge="1"> 126 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 127 | <mxPoint x="354" y="175" as="sourcePoint" /> 128 | <mxPoint x="285" y="180.5" as="targetPoint" /> 129 | <Array as="points"> 130 | <mxPoint x="305" y="170" /> 131 | </Array> 132 | </mxGeometry> 133 | </mxCell> 134 | <mxCell id="NU75y0YXBvxGrzugc1HJ-25" value="GIT" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 135 | <mxGeometry x="32" y="304" width="260" height="15" as="geometry" /> 136 | </mxCell> 137 | <mxCell id="NU75y0YXBvxGrzugc1HJ-26" value="HTTP/HTTPS" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 138 | <mxGeometry x="32" y="319" width="260" height="15" as="geometry" /> 139 | </mxCell> 140 | <mxCell id="NU75y0YXBvxGrzugc1HJ-27" value="Data Structures and Algorithms" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 141 | <mxGeometry x="31" y="334" width="260" height="15" as="geometry" /> 142 | </mxCell> 143 | <mxCell id="NU75y0YXBvxGrzugc1HJ-28" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;exitX=0;exitY=0.25;entryX=1;entryY=0.5;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-261" target="NU75y0YXBvxGrzugc1HJ-25" edge="1"> 144 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 145 | <mxPoint x="360.5" y="219" as="sourcePoint" /> 146 | <mxPoint x="272" y="241.5" as="targetPoint" /> 147 | <Array as="points"> 148 | <mxPoint x="352" y="304" /> 149 | </Array> 150 | </mxGeometry> 151 | </mxCell> 152 | <mxCell id="NU75y0YXBvxGrzugc1HJ-29" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;exitX=0;exitY=0.25;endFill=0;dashed=1;entryX=1;entryY=0.5;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-261" target="NU75y0YXBvxGrzugc1HJ-26" edge="1"> 153 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 154 | <mxPoint x="395.5" y="354" as="sourcePoint" /> 155 | <mxPoint x="302" y="334" as="targetPoint" /> 156 | <Array as="points"> 157 | <mxPoint x="352" y="319" /> 158 | </Array> 159 | </mxGeometry> 160 | </mxCell> 161 | <mxCell id="NU75y0YXBvxGrzugc1HJ-30" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;exitX=0;exitY=0.5;entryX=1;entryY=0.5;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-261" edge="1"> 162 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 163 | <mxPoint x="395.5" y="366.5" as="sourcePoint" /> 164 | <mxPoint x="292" y="342" as="targetPoint" /> 165 | <Array as="points"> 166 | <mxPoint x="342" y="324" /> 167 | </Array> 168 | </mxGeometry> 169 | </mxCell> 170 | <mxCell id="NU75y0YXBvxGrzugc1HJ-31" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=0.631;exitY=1.033;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-33" target="NU75y0YXBvxGrzugc1HJ-34" edge="1"> 171 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 172 | <mxPoint x="664" y="870.5" as="sourcePoint" /> 173 | <mxPoint x="694" y="923.5" as="targetPoint" /> 174 | <Array as="points"> 175 | <mxPoint x="677" y="883" /> 176 | <mxPoint x="720" y="883" /> 177 | <mxPoint x="704" y="913.5" /> 178 | </Array> 179 | </mxGeometry> 180 | </mxCell> 181 | <mxCell id="NU75y0YXBvxGrzugc1HJ-32" value="Caching" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 182 | <mxGeometry x="654" y="751.1666666666665" width="110" height="20" as="geometry" /> 183 | </mxCell> 184 | <mxCell id="NU75y0YXBvxGrzugc1HJ-33" value="Distributed Cache" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 185 | <mxGeometry x="632.5" y="832.5" width="70" height="25" as="geometry" /> 186 | </mxCell> 187 | <mxCell id="NU75y0YXBvxGrzugc1HJ-34" value="<pre><span>Java-Memcached</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 188 | <mxGeometry x="655.5" y="898.1666666666665" width="100" height="15" as="geometry" /> 189 | </mxCell> 190 | <mxCell id="NU75y0YXBvxGrzugc1HJ-35" value="<pre><span>Java-Redis</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 191 | <mxGeometry x="540.5" y="898.1666666666665" width="100" height="15" as="geometry" /> 192 | </mxCell> 193 | <mxCell id="NU75y0YXBvxGrzugc1HJ-36" value="Web Frameworks + Routers" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 194 | <mxGeometry x="506" y="495" width="100" height="30" as="geometry" /> 195 | </mxCell> 196 | <mxCell id="NU75y0YXBvxGrzugc1HJ-37" value="Databases" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 197 | <mxGeometry x="177.5" y="582.5" width="70" height="20" as="geometry" /> 198 | </mxCell> 199 | <mxCell id="NU75y0YXBvxGrzugc1HJ-38" value="Relational" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 200 | <mxGeometry x="113" y="482" width="110" height="20" as="geometry" /> 201 | </mxCell> 202 | <mxCell id="NU75y0YXBvxGrzugc1HJ-39" value="SQL Server" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 203 | <mxGeometry x="18" y="412" width="65" height="15" as="geometry" /> 204 | </mxCell> 205 | <mxCell id="NU75y0YXBvxGrzugc1HJ-40" value="MySql" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 206 | <mxGeometry x="93" y="412" width="65" height="15" as="geometry" /> 207 | </mxCell> 208 | <mxCell id="NU75y0YXBvxGrzugc1HJ-41" value="MariaDB" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#CCCCCC;" parent="1" vertex="1"> 209 | <mxGeometry x="168" y="412" width="65" height="15" as="geometry" /> 210 | </mxCell> 211 | <mxCell id="NU75y0YXBvxGrzugc1HJ-42" value="PostgreSQL<br>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 212 | <mxGeometry x="243" y="412" width="65" height="15" as="geometry" /> 213 | </mxCell> 214 | <mxCell id="NU75y0YXBvxGrzugc1HJ-43" value="Cloud Databases" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFCC99;" parent="1" vertex="1"> 215 | <mxGeometry x="171.5" y="529" width="110" height="20" as="geometry" /> 216 | </mxCell> 217 | <mxCell id="NU75y0YXBvxGrzugc1HJ-44" value="Azure CosmosDB" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 218 | <mxGeometry x="313.5" y="464.5" width="90" height="15" as="geometry" /> 219 | </mxCell> 220 | <mxCell id="NU75y0YXBvxGrzugc1HJ-45" value="Amazon DynamoDB" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 221 | <mxGeometry x="313.5" y="489.5" width="90" height="35" as="geometry" /> 222 | </mxCell> 223 | <mxCell id="NU75y0YXBvxGrzugc1HJ-46" value="Testing" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 224 | <mxGeometry x="325.5" y="1345" width="70" height="20" as="geometry" /> 225 | </mxCell> 226 | <mxCell id="NU75y0YXBvxGrzugc1HJ-47" value="API Clients<br>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 227 | <mxGeometry x="553.5" y="1119.8333333333333" width="70" height="20" as="geometry" /> 228 | </mxCell> 229 | <mxCell id="NU75y0YXBvxGrzugc1HJ-48" value="Task Scheduling" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFCC99;" parent="1" vertex="1"> 230 | <mxGeometry x="535.5" y="1542" width="130" height="20" as="geometry" /> 231 | </mxCell> 232 | <mxCell id="NU75y0YXBvxGrzugc1HJ-49" value="Log Frameworks<br>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 233 | <mxGeometry x="248.5" y="921" width="130" height="20" as="geometry" /> 234 | </mxCell> 235 | <mxCell id="NU75y0YXBvxGrzugc1HJ-50" value="NoSQL" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFCC99;" parent="1" vertex="1"> 236 | <mxGeometry x="35" y="622.5" width="80" height="20" as="geometry" /> 237 | </mxCell> 238 | <mxCell id="NU75y0YXBvxGrzugc1HJ-51" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-249" edge="1"> 239 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 240 | <mxPoint x="481.2108403120819" y="615.3433612483277" as="sourcePoint" /> 241 | <mxPoint x="445" y="1820" as="targetPoint" /> 242 | <Array as="points"> 243 | <mxPoint x="455" y="560" /> 244 | <mxPoint x="435" y="670" /> 245 | <mxPoint x="495" y="930" /> 246 | <mxPoint x="425" y="1250" /> 247 | <mxPoint x="495" y="1580" /> 248 | </Array> 249 | </mxGeometry> 250 | </mxCell> 251 | <mxCell id="NU75y0YXBvxGrzugc1HJ-52" value="" style="curved=1;endArrow=none;html=1;dashed=1;fontFamily=Verdana;fontSize=14;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" edge="1"> 252 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 253 | <mxPoint x="445" y="1820" as="sourcePoint" /> 254 | <mxPoint x="515" y="1900" as="targetPoint" /> 255 | <Array as="points"> 256 | <mxPoint x="425" y="1890" /> 257 | </Array> 258 | </mxGeometry> 259 | </mxCell> 260 | <mxCell id="NU75y0YXBvxGrzugc1HJ-53" value="Keep Learning :)" style="text;html=1;strokeColor=#000000;fillColor=#FFFFCC;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=1;comic=0;fontFamily=Verdana;fontSize=14;labelBorderColor=none;glass=0;arcSize=50;perimeterSpacing=1;" parent="1" vertex="1"> 261 | <mxGeometry x="435.5" y="1900" width="147" height="28" as="geometry" /> 262 | </mxCell> 263 | <mxCell id="NU75y0YXBvxGrzugc1HJ-54" value="MongoDB" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 264 | <mxGeometry x="146" y="710" width="100" height="15" as="geometry" /> 265 | </mxCell> 266 | <mxCell id="NU75y0YXBvxGrzugc1HJ-55" value="Redis" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 267 | <mxGeometry x="146" y="730" width="100" height="15" as="geometry" /> 268 | </mxCell> 269 | <mxCell id="NU75y0YXBvxGrzugc1HJ-56" value="Clickhouse" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 270 | <mxGeometry x="146" y="750" width="100" height="15" as="geometry" /> 271 | </mxCell> 272 | <mxCell id="NU75y0YXBvxGrzugc1HJ-57" value="Apache Cassandra" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#ffff66;" parent="1" vertex="1"> 273 | <mxGeometry x="146" y="770" width="100" height="15" as="geometry" /> 274 | </mxCell> 275 | <mxCell id="NU75y0YXBvxGrzugc1HJ-58" value="InfluxDB" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 276 | <mxGeometry x="146" y="790" width="100" height="15" as="geometry" /> 277 | </mxCell> 278 | <mxCell id="NU75y0YXBvxGrzugc1HJ-59" value="<pre><span>okhttp</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 279 | <mxGeometry x="539" y="1166.5" width="82" height="15" as="geometry" /> 280 | </mxCell> 281 | <mxCell id="NU75y0YXBvxGrzugc1HJ-60" value="<pre>log4j</pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 282 | <mxGeometry x="207.5" y="1005.5" width="65" height="15" as="geometry" /> 283 | </mxCell> 284 | <mxCell id="NU75y0YXBvxGrzugc1HJ-61" value="<pre><span>Zap</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#CCCCCC;" parent="1" vertex="1"> 285 | <mxGeometry x="287" y="1005.5" width="65" height="15" as="geometry" /> 286 | </mxCell> 287 | <mxCell id="NU75y0YXBvxGrzugc1HJ-62" value="Unit Testing" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 288 | <mxGeometry x="318" y="1213" width="85" height="20" as="geometry" /> 289 | </mxCell> 290 | <mxCell id="NU75y0YXBvxGrzugc1HJ-63" value="<pre><span>JUnit</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 291 | <mxGeometry x="70.5" y="1204.5" width="65" height="15" as="geometry" /> 292 | </mxCell> 293 | <mxCell id="NU75y0YXBvxGrzugc1HJ-64" value="<pre><span>Citrus Framework</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 294 | <mxGeometry x="50" y="1228" width="86" height="15" as="geometry" /> 295 | </mxCell> 296 | <mxCell id="NU75y0YXBvxGrzugc1HJ-66" value="Integration Testing" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFCC99;" parent="1" vertex="1"> 297 | <mxGeometry x="130" y="1350" width="120" height="20" as="geometry" /> 298 | </mxCell> 299 | <mxCell id="NU75y0YXBvxGrzugc1HJ-67" value="wiremock" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 300 | <mxGeometry x="31" y="1390" width="103" height="20" as="geometry" /> 301 | </mxCell> 302 | <mxCell id="NU75y0YXBvxGrzugc1HJ-68" value="E2E Testing" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFCC99;" parent="1" vertex="1"> 303 | <mxGeometry x="310.5" y="1459" width="85" height="20" as="geometry" /> 304 | </mxCell> 305 | <mxCell id="NU75y0YXBvxGrzugc1HJ-70" value="<pre><span>cron-utils</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 306 | <mxGeometry x="704.5" y="1527" width="80" height="15" as="geometry" /> 307 | </mxCell> 308 | <mxCell id="NU75y0YXBvxGrzugc1HJ-71" value="<pre><span>Aurora</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 309 | <mxGeometry x="704.5" y="1547" width="80" height="15" as="geometry" /> 310 | </mxCell> 311 | <mxCell id="NU75y0YXBvxGrzugc1HJ-72" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=0;exitY=0.5;entryX=1;entryY=0.5;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-36" target="NU75y0YXBvxGrzugc1HJ-224" edge="1"> 312 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 313 | <mxPoint x="351.33333333333326" y="624.8333333333334" as="sourcePoint" /> 314 | <mxPoint x="328" y="724.8333333333333" as="targetPoint" /> 315 | <Array as="points"> 316 | <mxPoint x="485" y="530" /> 317 | </Array> 318 | </mxGeometry> 319 | </mxCell> 320 | <mxCell id="NU75y0YXBvxGrzugc1HJ-73" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rounded=1;comic=0;strokeColor=#314354;fillColor=#647687;fontFamily=Verdana;fontSize=14;align=center;fontColor=#ffffff;" parent="1" vertex="1"> 321 | <mxGeometry x="430" y="663" width="23" height="23" as="geometry" /> 322 | </mxCell> 323 | <mxCell id="NU75y0YXBvxGrzugc1HJ-74" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rounded=1;comic=0;strokeColor=#314354;fillColor=#647687;fontFamily=Verdana;fontSize=14;align=center;fontColor=#ffffff;" parent="1" vertex="1"> 324 | <mxGeometry x="444" y="783.5" width="23" height="23" as="geometry" /> 325 | </mxCell> 326 | <mxCell id="NU75y0YXBvxGrzugc1HJ-75" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rounded=1;comic=0;strokeColor=#314354;fillColor=#647687;fontFamily=Verdana;fontSize=14;align=center;fontColor=#ffffff;" parent="1" vertex="1"> 327 | <mxGeometry x="466" y="877.5" width="23" height="23" as="geometry" /> 328 | </mxCell> 329 | <mxCell id="NU75y0YXBvxGrzugc1HJ-76" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rounded=1;comic=0;strokeColor=#314354;fillColor=#647687;fontFamily=Verdana;fontSize=14;align=center;fontColor=#ffffff;" parent="1" vertex="1"> 330 | <mxGeometry x="434" y="1167" width="23" height="23" as="geometry" /> 331 | </mxCell> 332 | <mxCell id="NU75y0YXBvxGrzugc1HJ-77" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rounded=1;comic=0;strokeColor=#314354;fillColor=#647687;fontFamily=Verdana;fontSize=14;align=center;fontColor=#ffffff;" parent="1" vertex="1"> 333 | <mxGeometry x="434" y="1295" width="23" height="23" as="geometry" /> 334 | </mxCell> 335 | <mxCell id="NU75y0YXBvxGrzugc1HJ-78" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rounded=1;comic=0;strokeColor=#314354;fillColor=#647687;fontFamily=Verdana;fontSize=14;align=center;fontColor=#ffffff;" parent="1" vertex="1"> 336 | <mxGeometry x="458.5" y="1546" width="23" height="23" as="geometry" /> 337 | </mxCell> 338 | <mxCell id="NU75y0YXBvxGrzugc1HJ-79" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=0;exitY=0;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-73" edge="1"> 339 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 340 | <mxPoint x="365.33333333333326" y="587" as="sourcePoint" /> 341 | <mxPoint x="248" y="593" as="targetPoint" /> 342 | <Array as="points"> 343 | <mxPoint x="405" y="619" /> 344 | <mxPoint x="335" y="619" /> 345 | <mxPoint x="285" y="619" /> 346 | </Array> 347 | </mxGeometry> 348 | </mxCell> 349 | <mxCell id="NU75y0YXBvxGrzugc1HJ-80" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=0;exitY=0.25;endFill=0;entryX=0.5;entryY=1;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-37" target="NU75y0YXBvxGrzugc1HJ-38" edge="1"> 350 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 351 | <mxPoint x="-134.16666666666674" y="625.8333333333333" as="sourcePoint" /> 352 | <mxPoint x="59.5" y="567.5" as="targetPoint" /> 353 | <Array as="points"> 354 | <mxPoint x="125" y="570" /> 355 | </Array> 356 | </mxGeometry> 357 | </mxCell> 358 | <mxCell id="NU75y0YXBvxGrzugc1HJ-81" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=0.75;exitY=0;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;entryX=0.432;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-37" target="NU75y0YXBvxGrzugc1HJ-43" edge="1"> 359 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 360 | <mxPoint x="-21.666666666666742" y="681" as="sourcePoint" /> 361 | <mxPoint x="215" y="540" as="targetPoint" /> 362 | <Array as="points"> 363 | <mxPoint x="230" y="570" /> 364 | <mxPoint x="213" y="560" /> 365 | </Array> 366 | </mxGeometry> 367 | </mxCell> 368 | <mxCell id="NU75y0YXBvxGrzugc1HJ-82" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;endFill=0;entryX=0.5;entryY=0;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=0.15;exitY=1.075;exitDx=0;exitDy=0;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-37" target="NU75y0YXBvxGrzugc1HJ-50" edge="1"> 369 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 370 | <mxPoint x="-37.5" y="592.5" as="sourcePoint" /> 371 | <mxPoint x="-42.5" y="697.5" as="targetPoint" /> 372 | <Array as="points"> 373 | <mxPoint x="155" y="623" /> 374 | <mxPoint x="115" y="580" /> 375 | <mxPoint x="85" y="598" /> 376 | </Array> 377 | </mxGeometry> 378 | </mxCell> 379 | <mxCell id="NU75y0YXBvxGrzugc1HJ-83" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=0.5;entryY=1;endFill=0;dashed=1;exitX=0.25;exitY=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-38" target="NU75y0YXBvxGrzugc1HJ-39" edge="1"> 380 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 381 | <mxPoint x="108" y="462" as="sourcePoint" /> 382 | <mxPoint x="42.83333333333326" y="454.83333333333326" as="targetPoint" /> 383 | <Array as="points"> 384 | <mxPoint x="138" y="462" /> 385 | <mxPoint x="50" y="452" /> 386 | </Array> 387 | </mxGeometry> 388 | </mxCell> 389 | <mxCell id="NU75y0YXBvxGrzugc1HJ-84" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=0.5;entryY=1;endFill=0;dashed=1;exitX=0.4;exitY=0.05;exitPerimeter=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-38" target="NU75y0YXBvxGrzugc1HJ-40" edge="1"> 390 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 391 | <mxPoint x="150.33333333333326" y="492.33333333333326" as="sourcePoint" /> 392 | <mxPoint x="60.33333333333326" y="437" as="targetPoint" /> 393 | <Array as="points"> 394 | <mxPoint x="158" y="462" /> 395 | <mxPoint x="126" y="452" /> 396 | </Array> 397 | </mxGeometry> 398 | </mxCell> 399 | <mxCell id="NU75y0YXBvxGrzugc1HJ-85" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=0.5;entryY=1;endFill=0;dashed=1;exitX=0.6;exitY=0.083;exitPerimeter=0;endSize=6;startSize=6;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-38" target="NU75y0YXBvxGrzugc1HJ-41" edge="1"> 400 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 401 | <mxPoint x="178.33333333333326" y="492.33333333333326" as="sourcePoint" /> 402 | <mxPoint x="135.66666666666674" y="437" as="targetPoint" /> 403 | <Array as="points"> 404 | <mxPoint x="179" y="462" /> 405 | <mxPoint x="200" y="452" /> 406 | </Array> 407 | </mxGeometry> 408 | </mxCell> 409 | <mxCell id="NU75y0YXBvxGrzugc1HJ-86" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=0.5;entryY=1;endFill=0;dashed=1;exitX=0.75;exitY=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-38" target="NU75y0YXBvxGrzugc1HJ-42" edge="1"> 410 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 411 | <mxPoint x="218" y="472" as="sourcePoint" /> 412 | <mxPoint x="210.33333333333326" y="437" as="targetPoint" /> 413 | <Array as="points"> 414 | <mxPoint x="210" y="452" /> 415 | <mxPoint x="268" y="452" /> 416 | </Array> 417 | </mxGeometry> 418 | </mxCell> 419 | <mxCell id="NU75y0YXBvxGrzugc1HJ-87" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=0;entryY=0.5;endFill=0;dashed=1;exitX=0.75;exitY=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-43" target="NU75y0YXBvxGrzugc1HJ-44" edge="1"> 420 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 421 | <mxPoint x="198.66666666666674" y="504.33333333333326" as="sourcePoint" /> 422 | <mxPoint x="278.66666666666674" y="449" as="targetPoint" /> 423 | <Array as="points"> 424 | <mxPoint x="213.5" y="484.5" /> 425 | </Array> 426 | </mxGeometry> 427 | </mxCell> 428 | <mxCell id="NU75y0YXBvxGrzugc1HJ-88" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=0;entryY=0.5;endFill=0;dashed=1;exitX=1;exitY=0.25;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-43" target="NU75y0YXBvxGrzugc1HJ-45" edge="1"> 429 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 430 | <mxPoint x="171.16666666666674" y="474.83333333333326" as="sourcePoint" /> 431 | <mxPoint x="251.16666666666674" y="419.5" as="targetPoint" /> 432 | <Array as="points"> 433 | <mxPoint x="283.5" y="506.5" /> 434 | </Array> 435 | </mxGeometry> 436 | </mxCell> 437 | <mxCell id="NU75y0YXBvxGrzugc1HJ-89" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;entryX=1;entryY=0;endFill=0;exitX=0;exitY=0.5;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-32" target="NU75y0YXBvxGrzugc1HJ-74" edge="1"> 438 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 439 | <mxPoint x="335" y="750" as="sourcePoint" /> 440 | <mxPoint x="377.33333333333326" y="747.8333333333333" as="targetPoint" /> 441 | <Array as="points"> 442 | <mxPoint x="595" y="750" /> 443 | <mxPoint x="545" y="740" /> 444 | <mxPoint x="505" y="740" /> 445 | </Array> 446 | </mxGeometry> 447 | </mxCell> 448 | <mxCell id="NU75y0YXBvxGrzugc1HJ-90" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-32" target="NU75y0YXBvxGrzugc1HJ-33" edge="1"> 449 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 450 | <mxPoint x="676.5" y="896" as="sourcePoint" /> 451 | <mxPoint x="614" y="903.5" as="targetPoint" /> 452 | <Array as="points"> 453 | <mxPoint x="709" y="803.5" /> 454 | </Array> 455 | </mxGeometry> 456 | </mxCell> 457 | <mxCell id="NU75y0YXBvxGrzugc1HJ-91" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;entryX=0.375;entryY=0.994;entryDx=0;entryDy=0;entryPerimeter=0;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=0.437;exitY=0.011;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-35" target="NU75y0YXBvxGrzugc1HJ-33" edge="1"> 458 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 459 | <mxPoint x="802.3333333333333" y="1066" as="sourcePoint" /> 460 | <mxPoint x="713" y="931.2142857142858" as="targetPoint" /> 461 | <Array as="points"> 462 | <mxPoint x="630" y="893" /> 463 | <mxPoint x="620" y="863" /> 464 | </Array> 465 | </mxGeometry> 466 | </mxCell> 467 | <mxCell id="NU75y0YXBvxGrzugc1HJ-92" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=0;exitY=0.5;entryX=1;entryY=0.5;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-47" target="NU75y0YXBvxGrzugc1HJ-76" edge="1"> 468 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 469 | <mxPoint x="267.83333333333326" y="1090.1666666666667" as="sourcePoint" /> 470 | <mxPoint x="421.83333333333326" y="1053.5" as="targetPoint" /> 471 | <Array as="points"> 472 | <mxPoint x="515" y="1130" /> 473 | <mxPoint x="495" y="1190" /> 474 | </Array> 475 | </mxGeometry> 476 | </mxCell> 477 | <mxCell id="NU75y0YXBvxGrzugc1HJ-93" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;exitX=1;exitY=0.5;entryX=0;entryY=0.25;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-59" target="NU75y0YXBvxGrzugc1HJ-134" edge="1"> 478 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 479 | <mxPoint x="533" y="987.1666666666667" as="sourcePoint" /> 480 | <mxPoint x="540.3333333333335" y="927.1666666666667" as="targetPoint" /> 481 | <Array as="points"> 482 | <mxPoint x="620.5" y="1172" /> 483 | <mxPoint x="660.5" y="1172" /> 484 | </Array> 485 | </mxGeometry> 486 | </mxCell> 487 | <mxCell id="NU75y0YXBvxGrzugc1HJ-94" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=0;entryY=0.5;endFill=0;dashed=1;exitX=0.927;exitY=1.142;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-50" target="NU75y0YXBvxGrzugc1HJ-54" edge="1"> 488 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 489 | <mxPoint x="106" y="684.5" as="sourcePoint" /> 490 | <mxPoint x="436.33333333333326" y="792.1666666666667" as="targetPoint" /> 491 | <Array as="points"> 492 | <mxPoint x="106" y="736.5" /> 493 | </Array> 494 | </mxGeometry> 495 | </mxCell> 496 | <mxCell id="NU75y0YXBvxGrzugc1HJ-95" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=0;entryY=0.5;endFill=0;dashed=1;exitX=0.635;exitY=1.017;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-50" target="NU75y0YXBvxGrzugc1HJ-56" edge="1"> 497 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 498 | <mxPoint x="86" y="684.5" as="sourcePoint" /> 499 | <mxPoint x="156.33333333333326" y="746.8333333333333" as="targetPoint" /> 500 | <Array as="points"> 501 | <mxPoint x="76" y="764.5" /> 502 | </Array> 503 | </mxGeometry> 504 | </mxCell> 505 | <mxCell id="NU75y0YXBvxGrzugc1HJ-96" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=0;entryY=0.5;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" target="NU75y0YXBvxGrzugc1HJ-58" edge="1"> 506 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 507 | <mxPoint x="65" y="643" as="sourcePoint" /> 508 | <mxPoint x="156.33333333333326" y="766.8333333333333" as="targetPoint" /> 509 | <Array as="points"> 510 | <mxPoint x="56" y="804.5" /> 511 | </Array> 512 | </mxGeometry> 513 | </mxCell> 514 | <mxCell id="NU75y0YXBvxGrzugc1HJ-97" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=0;entryY=0.5;endFill=0;dashed=1;exitX=0.5;exitY=1;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-50" target="NU75y0YXBvxGrzugc1HJ-57" edge="1"> 515 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 516 | <mxPoint x="76" y="684.5" as="sourcePoint" /> 517 | <mxPoint x="156.33333333333326" y="826.8333333333333" as="targetPoint" /> 518 | <Array as="points"> 519 | <mxPoint x="66" y="784.5" /> 520 | </Array> 521 | </mxGeometry> 522 | </mxCell> 523 | <mxCell id="NU75y0YXBvxGrzugc1HJ-98" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=0;entryY=0.5;endFill=0;dashed=1;exitX=0.75;exitY=1;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-50" target="NU75y0YXBvxGrzugc1HJ-55" edge="1"> 524 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 525 | <mxPoint x="96" y="684.5" as="sourcePoint" /> 526 | <mxPoint x="156.33333333333326" y="786.8333333333333" as="targetPoint" /> 527 | <Array as="points"> 528 | <mxPoint x="86" y="744.5" /> 529 | </Array> 530 | </mxGeometry> 531 | </mxCell> 532 | <mxCell id="NU75y0YXBvxGrzugc1HJ-99" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=0;exitY=1;entryX=1;entryY=0.5;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-75" target="NU75y0YXBvxGrzugc1HJ-49" edge="1"> 533 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 534 | <mxPoint x="520.8333333333333" y="916.1666666666667" as="sourcePoint" /> 535 | <mxPoint x="674.8333333333333" y="879.5" as="targetPoint" /> 536 | <Array as="points"> 537 | <mxPoint x="445" y="910" /> 538 | </Array> 539 | </mxGeometry> 540 | </mxCell> 541 | <mxCell id="NU75y0YXBvxGrzugc1HJ-100" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=0.5;entryY=0;endFill=0;dashed=1;exitX=0.25;exitY=1;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-49" target="NU75y0YXBvxGrzugc1HJ-60" edge="1"> 542 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 543 | <mxPoint x="78.16666666666674" y="1042.6666666666667" as="sourcePoint" /> 544 | <mxPoint x="250.83333333333326" y="1142.6666666666667" as="targetPoint" /> 545 | <Array as="points"> 546 | <mxPoint x="275" y="970" /> 547 | <mxPoint x="255" y="988" /> 548 | </Array> 549 | </mxGeometry> 550 | </mxCell> 551 | <mxCell id="NU75y0YXBvxGrzugc1HJ-101" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=0.5;entryY=0;endFill=0;dashed=1;exitX=0.578;exitY=1.136;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-49" target="NU75y0YXBvxGrzugc1HJ-61" edge="1"> 552 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 553 | <mxPoint x="259.5" y="982.5" as="sourcePoint" /> 554 | <mxPoint x="219.5" y="1042.5" as="targetPoint" /> 555 | <Array as="points"> 556 | <mxPoint x="305" y="970" /> 557 | <mxPoint x="319" y="991" /> 558 | </Array> 559 | </mxGeometry> 560 | </mxCell> 561 | <mxCell id="NU75y0YXBvxGrzugc1HJ-102" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;entryX=1;entryY=0.5;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;exitX=0;exitY=1;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-77" target="NU75y0YXBvxGrzugc1HJ-46" edge="1"> 562 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 563 | <mxPoint x="434.014348102899" y="1356.925717405145" as="sourcePoint" /> 564 | <mxPoint x="311.66666666666674" y="1103.3333333333333" as="targetPoint" /> 565 | <Array as="points"> 566 | <mxPoint x="425" y="1355" /> 567 | </Array> 568 | </mxGeometry> 569 | </mxCell> 570 | <mxCell id="NU75y0YXBvxGrzugc1HJ-103" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=0.5;exitY=1;entryX=0.5;entryY=0;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-62" target="NU75y0YXBvxGrzugc1HJ-46" edge="1"> 571 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 572 | <mxPoint x="446.5" y="1201.1666666666667" as="sourcePoint" /> 573 | <mxPoint x="543.1666666666667" y="1247.8333333333333" as="targetPoint" /> 574 | <Array as="points"> 575 | <mxPoint x="325.5" y="1270" /> 576 | <mxPoint x="385.5" y="1300" /> 577 | </Array> 578 | </mxGeometry> 579 | </mxCell> 580 | <mxCell id="NU75y0YXBvxGrzugc1HJ-104" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=0.5;exitY=1;entryX=0.5;entryY=0;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-46" target="NU75y0YXBvxGrzugc1HJ-68" edge="1"> 581 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 582 | <mxPoint x="269.5" y="1213.6666666666667" as="sourcePoint" /> 583 | <mxPoint x="337.5" y="1477" as="targetPoint" /> 584 | <Array as="points"> 585 | <mxPoint x="375" y="1401" /> 586 | <mxPoint x="333" y="1420" /> 587 | </Array> 588 | </mxGeometry> 589 | </mxCell> 590 | <mxCell id="NU75y0YXBvxGrzugc1HJ-105" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=0.25;exitY=1;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;entryX=1;entryY=0.75;entryDx=0;entryDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-46" target="NU75y0YXBvxGrzugc1HJ-66" edge="1"> 591 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 592 | <mxPoint x="279.5" y="1223.6666666666667" as="sourcePoint" /> 593 | <mxPoint x="245.5" y="1433" as="targetPoint" /> 594 | <Array as="points"> 595 | <mxPoint x="335" y="1421" /> 596 | <mxPoint x="275" y="1401" /> 597 | </Array> 598 | </mxGeometry> 599 | </mxCell> 600 | <mxCell id="NU75y0YXBvxGrzugc1HJ-106" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=1;entryY=0.5;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-66" target="NU75y0YXBvxGrzugc1HJ-67" edge="1"> 601 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 602 | <mxPoint x="175.5" y="1444" as="sourcePoint" /> 603 | <mxPoint x="655" y="1502.5" as="targetPoint" /> 604 | <Array as="points"> 605 | <mxPoint x="185.5" y="1490" /> 606 | </Array> 607 | </mxGeometry> 608 | </mxCell> 609 | <mxCell id="NU75y0YXBvxGrzugc1HJ-107" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="NU75y0YXBvxGrzugc1HJ-63" edge="1"> 610 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 611 | <mxPoint x="165" y="1260" as="sourcePoint" /> 612 | <mxPoint x="133" y="1190.5" as="targetPoint" /> 613 | <Array as="points"> 614 | <mxPoint x="165" y="1221" /> 615 | </Array> 616 | </mxGeometry> 617 | </mxCell> 618 | <mxCell id="NU75y0YXBvxGrzugc1HJ-110" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;entryX=1;entryY=0;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-48" target="NU75y0YXBvxGrzugc1HJ-162" edge="1"> 619 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 620 | <mxPoint x="505" y="1590" as="sourcePoint" /> 621 | <mxPoint x="445" y="1500" as="targetPoint" /> 622 | <Array as="points"> 623 | <mxPoint x="495" y="1570" /> 624 | <mxPoint x="515" y="1630" /> 625 | </Array> 626 | </mxGeometry> 627 | </mxCell> 628 | <mxCell id="NU75y0YXBvxGrzugc1HJ-111" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;exitX=0;exitY=0.25;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-70" edge="1"> 629 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 630 | <mxPoint x="639.1666666666667" y="1655" as="sourcePoint" /> 631 | <mxPoint x="665" y="1544" as="targetPoint" /> 632 | <Array as="points"> 633 | <mxPoint x="685" y="1531" /> 634 | </Array> 635 | </mxGeometry> 636 | </mxCell> 637 | <mxCell id="NU75y0YXBvxGrzugc1HJ-112" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;exitX=0;exitY=0.5;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;entryX=1;entryY=0.75;entryDx=0;entryDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-71" target="NU75y0YXBvxGrzugc1HJ-48" edge="1"> 638 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 639 | <mxPoint x="622" y="1598.3333333333333" as="sourcePoint" /> 640 | <mxPoint x="685" y="1560" as="targetPoint" /> 641 | <Array as="points" /> 642 | </mxGeometry> 643 | </mxCell> 644 | <mxCell id="NU75y0YXBvxGrzugc1HJ-113" value="" style="shape=image;html=1;verticalAlign=top;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;imageAspect=0;aspect=fixed;image=https://cdn1.iconfinder.com/data/icons/logotypes/32/github-128.png;rounded=1;glass=0;comic=0;strokeColor=#000000;fillColor=#FFFFFF;fontFamily=Verdana;fontSize=14;align=center;" parent="1" vertex="1"> 645 | <mxGeometry x="25" y="10" width="20" height="20" as="geometry" /> 646 | </mxCell> 647 | <mxCell id="NU75y0YXBvxGrzugc1HJ-114" value="s4kibs4mi/java-developer-roadmap" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 648 | <mxGeometry x="47.5" y="12.5" width="260" height="15" as="geometry" /> 649 | </mxCell> 650 | <mxCell id="NU75y0YXBvxGrzugc1HJ-115" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;exitX=0;exitY=0.5;entryX=1;entryY=0.5;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-261" edge="1"> 651 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 652 | <mxPoint x="405.66666666666674" y="354.33333333333337" as="sourcePoint" /> 653 | <mxPoint x="292.19047619047615" y="356.5238095238095" as="targetPoint" /> 654 | <Array as="points"> 655 | <mxPoint x="342" y="334" /> 656 | </Array> 657 | </mxGeometry> 658 | </mxCell> 659 | <mxCell id="NU75y0YXBvxGrzugc1HJ-116" value="Good to Know Libraries" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 660 | <mxGeometry x="563.5" y="1279" width="130" height="20" as="geometry" /> 661 | </mxCell> 662 | <mxCell id="NU75y0YXBvxGrzugc1HJ-117" value="<pre><span>beanvalidation</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#fad7ac;strokeColor=#000000;arcSize=0;" parent="1" vertex="1"> 663 | <mxGeometry x="705" y="1323" width="86" height="15" as="geometry" /> 664 | </mxCell> 665 | <mxCell id="NU75y0YXBvxGrzugc1HJ-118" value="<pre><span>bouncycastle</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#fad7ac;strokeColor=#000000;" parent="1" vertex="1"> 666 | <mxGeometry x="704.5" y="1342.5" width="71" height="15" as="geometry" /> 667 | </mxCell> 668 | <mxCell id="NU75y0YXBvxGrzugc1HJ-119" value="<pre><span>gson</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#fad7ac;strokeColor=#000000;" parent="1" vertex="1"> 669 | <mxGeometry x="704.5" y="1363.5" width="69" height="15" as="geometry" /> 670 | </mxCell> 671 | <mxCell id="NU75y0YXBvxGrzugc1HJ-120" value="<pre><span>shiro</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 672 | <mxGeometry x="704.5" y="1385.5" width="69" height="15" as="geometry" /> 673 | </mxCell> 674 | <mxCell id="NU75y0YXBvxGrzugc1HJ-121" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rounded=1;comic=0;strokeColor=#314354;fillColor=#647687;fontFamily=Verdana;fontSize=14;align=center;fontColor=#ffffff;" parent="1" vertex="1"> 675 | <mxGeometry x="452.5" y="1431" width="23" height="23" as="geometry" /> 676 | </mxCell> 677 | <mxCell id="NU75y0YXBvxGrzugc1HJ-122" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=0;exitY=0.75;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;entryX=0.848;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-116" target="NU75y0YXBvxGrzugc1HJ-121" edge="1"> 678 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 679 | <mxPoint x="285" y="1270.5" as="sourcePoint" /> 680 | <mxPoint x="465" y="1365" as="targetPoint" /> 681 | <Array as="points"> 682 | <mxPoint x="515" y="1310" /> 683 | <mxPoint x="525" y="1420" /> 684 | </Array> 685 | </mxGeometry> 686 | </mxCell> 687 | <mxCell id="NU75y0YXBvxGrzugc1HJ-123" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;entryX=0.867;entryY=1.016;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="NU75y0YXBvxGrzugc1HJ-116" edge="1"> 688 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 689 | <mxPoint x="705" y="1330" as="sourcePoint" /> 690 | <mxPoint x="750.7931034482758" y="1283.7241379310346" as="targetPoint" /> 691 | <Array as="points"> 692 | <mxPoint x="675" y="1330" /> 693 | </Array> 694 | </mxGeometry> 695 | </mxCell> 696 | <mxCell id="NU75y0YXBvxGrzugc1HJ-124" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;exitX=0;exitY=0.5;entryX=0.75;entryY=1;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-118" target="NU75y0YXBvxGrzugc1HJ-116" edge="1"> 697 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 698 | <mxPoint x="585.5" y="1316.5" as="sourcePoint" /> 699 | <mxPoint x="680.5" y="1290" as="targetPoint" /> 700 | <Array as="points"> 701 | <mxPoint x="675" y="1350" /> 702 | <mxPoint x="665" y="1320" /> 703 | </Array> 704 | </mxGeometry> 705 | </mxCell> 706 | <mxCell id="NU75y0YXBvxGrzugc1HJ-125" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;exitX=0;exitY=0.5;entryX=0.658;entryY=1.016;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;entryPerimeter=0;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-119" target="NU75y0YXBvxGrzugc1HJ-116" edge="1"> 707 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 708 | <mxPoint x="585.5" y="1336.5" as="sourcePoint" /> 709 | <mxPoint x="703" y="1279.5" as="targetPoint" /> 710 | <Array as="points"> 711 | <mxPoint x="640" y="1360" /> 712 | </Array> 713 | </mxGeometry> 714 | </mxCell> 715 | <mxCell id="NU75y0YXBvxGrzugc1HJ-126" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;exitX=0;exitY=0.5;entryX=0.5;entryY=1;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-120" target="NU75y0YXBvxGrzugc1HJ-116" edge="1"> 716 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 717 | <mxPoint x="595.5" y="1346.5" as="sourcePoint" /> 718 | <mxPoint x="724" y="1299.5" as="targetPoint" /> 719 | <Array as="points"> 720 | <mxPoint x="665" y="1390" /> 721 | <mxPoint x="625" y="1340" /> 722 | </Array> 723 | </mxGeometry> 724 | </mxCell> 725 | <mxCell id="NU75y0YXBvxGrzugc1HJ-127" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rounded=1;comic=0;strokeColor=#314354;fillColor=#647687;fontFamily=Verdana;fontSize=14;align=center;fontColor=#ffffff;" parent="1" vertex="1"> 726 | <mxGeometry x="445.5" y="1745.5" width="23" height="23" as="geometry" /> 727 | </mxCell> 728 | <mxCell id="NU75y0YXBvxGrzugc1HJ-128" value="Java Patterns" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 729 | <mxGeometry x="493.5" y="1717" width="70" height="29" as="geometry" /> 730 | </mxCell> 731 | <mxCell id="NU75y0YXBvxGrzugc1HJ-129" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=1;exitY=1;entryX=1;entryY=1;endArrow=none;endFill=0;jettySize=auto;orthogonalLoop=1;strokeColor=#000000;fillColor=#FFFFFF;fontFamily=Verdana;fontSize=8;" parent="1" edge="1"> 732 | <mxGeometry relative="1" as="geometry"> 733 | <mxPoint x="485" y="971" as="sourcePoint" /> 734 | <mxPoint x="485" y="971" as="targetPoint" /> 735 | </mxGeometry> 736 | </mxCell> 737 | <mxCell id="NU75y0YXBvxGrzugc1HJ-130" value="<pre><span>Caffeine</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 738 | <mxGeometry x="528.5" y="839.5" width="80" height="16" as="geometry" /> 739 | </mxCell> 740 | <mxCell id="NU75y0YXBvxGrzugc1HJ-131" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;exitX=0;exitY=0.5;entryX=0.354;entryY=1.05;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;entryPerimeter=0;exitDx=0;exitDy=0;" parent="1" target="NU75y0YXBvxGrzugc1HJ-116" edge="1"> 741 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 742 | <mxPoint x="705" y="1413" as="sourcePoint" /> 743 | <mxPoint x="729.5" y="1290.5" as="targetPoint" /> 744 | <Array as="points"> 745 | <mxPoint x="665" y="1410" /> 746 | <mxPoint x="635" y="1390" /> 747 | <mxPoint x="605" y="1330" /> 748 | </Array> 749 | </mxGeometry> 750 | </mxCell> 751 | <mxCell id="NU75y0YXBvxGrzugc1HJ-132" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;exitX=0.25;exitY=1;entryX=0.5;entryY=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-32" target="NU75y0YXBvxGrzugc1HJ-130" edge="1"> 752 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 753 | <mxPoint x="739" y="818.5" as="sourcePoint" /> 754 | <mxPoint x="624" y="836" as="targetPoint" /> 755 | <Array as="points"> 756 | <mxPoint x="682" y="803.5" /> 757 | <mxPoint x="600" y="823" /> 758 | </Array> 759 | </mxGeometry> 760 | </mxCell> 761 | <mxCell id="NU75y0YXBvxGrzugc1HJ-133" value="Creational<br>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;strokeColor=#000000;" parent="1" vertex="1"> 762 | <mxGeometry x="675" y="1676" width="110" height="15" as="geometry" /> 763 | </mxCell> 764 | <mxCell id="NU75y0YXBvxGrzugc1HJ-134" value="REST" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 765 | <mxGeometry x="673" y="1166.3333333333333" width="70" height="20" as="geometry" /> 766 | </mxCell> 767 | <mxCell id="NU75y0YXBvxGrzugc1HJ-135" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=1;exitY=0.75;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-47" edge="1"> 768 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 769 | <mxPoint x="883" y="1143" as="sourcePoint" /> 770 | <mxPoint x="718" y="1166" as="targetPoint" /> 771 | <Array as="points"> 772 | <mxPoint x="658" y="1150" /> 773 | <mxPoint x="718" y="1136" /> 774 | </Array> 775 | </mxGeometry> 776 | </mxCell> 777 | <mxCell id="NU75y0YXBvxGrzugc1HJ-136" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=1;exitY=0.25;entryX=0.5;entryY=1;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-47" target="NU75y0YXBvxGrzugc1HJ-149" edge="1"> 778 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 779 | <mxPoint x="830.5" y="1153" as="sourcePoint" /> 780 | <mxPoint x="753" y="1200" as="targetPoint" /> 781 | <Array as="points"> 782 | <mxPoint x="704.5" y="1129.5" /> 783 | </Array> 784 | </mxGeometry> 785 | </mxCell> 786 | <mxCell id="NU75y0YXBvxGrzugc1HJ-137" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;exitX=0;exitY=0.5;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-133" edge="1"> 787 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 788 | <mxPoint x="412.8333333333335" y="1682.8333333333335" as="sourcePoint" /> 789 | <mxPoint x="563.5" y="1738.5" as="targetPoint" /> 790 | <Array as="points"> 791 | <mxPoint x="657.5" y="1684.5" /> 792 | <mxPoint x="631.5" y="1728.5" /> 793 | </Array> 794 | </mxGeometry> 795 | </mxCell> 796 | <mxCell id="NU75y0YXBvxGrzugc1HJ-138" value="<pre><span>RxJava</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 797 | <mxGeometry x="704.5" y="1407.5" width="69" height="15" as="geometry" /> 798 | </mxCell> 799 | <mxCell id="NU75y0YXBvxGrzugc1HJ-139" value="Exception handling" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 800 | <mxGeometry x="5" y="190" width="258" height="15" as="geometry" /> 801 | </mxCell> 802 | <mxCell id="NU75y0YXBvxGrzugc1HJ-140" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" edge="1"> 803 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 804 | <mxPoint x="355" y="180" as="sourcePoint" /> 805 | <mxPoint x="265" y="200" as="targetPoint" /> 806 | <Array as="points"> 807 | <mxPoint x="325" y="180" /> 808 | <mxPoint x="295" y="190" /> 809 | </Array> 810 | </mxGeometry> 811 | </mxCell> 812 | <mxCell id="NU75y0YXBvxGrzugc1HJ-141" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=0.5;exitY=1;endFill=0;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-37" target="NU75y0YXBvxGrzugc1HJ-142" edge="1"> 813 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 814 | <mxPoint x="-17.5" y="605" as="sourcePoint" /> 815 | <mxPoint x="99.5" y="667.5" as="targetPoint" /> 816 | <Array as="points"> 817 | <mxPoint x="235" y="630" /> 818 | <mxPoint x="205" y="650" /> 819 | </Array> 820 | </mxGeometry> 821 | </mxCell> 822 | <mxCell id="NU75y0YXBvxGrzugc1HJ-142" value="Search Engines" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFCC99;" parent="1" vertex="1"> 823 | <mxGeometry x="162.5" y="664" width="110" height="20" as="geometry" /> 824 | </mxCell> 825 | <mxCell id="NU75y0YXBvxGrzugc1HJ-143" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" target="NU75y0YXBvxGrzugc1HJ-144" edge="1"> 826 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 827 | <mxPoint x="271" y="680" as="sourcePoint" /> 828 | <mxPoint x="365.5" y="664" as="targetPoint" /> 829 | <Array as="points"> 830 | <mxPoint x="285.5" y="670.5" /> 831 | <mxPoint x="335.5" y="663" /> 832 | </Array> 833 | </mxGeometry> 834 | </mxCell> 835 | <mxCell id="NU75y0YXBvxGrzugc1HJ-144" value="ElasticSearch" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 836 | <mxGeometry x="295.5" y="663" width="90" height="15" as="geometry" /> 837 | </mxCell> 838 | <mxCell id="NU75y0YXBvxGrzugc1HJ-145" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;entryX=0.1;entryY=0.167;entryDx=0;entryDy=0;entryPerimeter=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" target="NU75y0YXBvxGrzugc1HJ-146" edge="1"> 839 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 840 | <mxPoint x="271" y="680" as="sourcePoint" /> 841 | <mxPoint x="355.5" y="698.5" as="targetPoint" /> 842 | <Array as="points" /> 843 | </mxGeometry> 844 | </mxCell> 845 | <mxCell id="NU75y0YXBvxGrzugc1HJ-146" value="Opensearch" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 846 | <mxGeometry x="295.5" y="690" width="90" height="15" as="geometry" /> 847 | </mxCell> 848 | <mxCell id="NU75y0YXBvxGrzugc1HJ-147" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;entryX=0;entryY=0.75;entryDx=0;entryDy=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" target="NU75y0YXBvxGrzugc1HJ-148" edge="1"> 849 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 850 | <mxPoint x="270" y="690" as="sourcePoint" /> 851 | <mxPoint x="335.5" y="737.5" as="targetPoint" /> 852 | <Array as="points"> 853 | <mxPoint x="283" y="729" /> 854 | </Array> 855 | </mxGeometry> 856 | </mxCell> 857 | <mxCell id="NU75y0YXBvxGrzugc1HJ-148" value="Algolia" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#CCCCCC;" parent="1" vertex="1"> 858 | <mxGeometry x="295.5" y="717.5" width="90" height="15" as="geometry" /> 859 | </mxCell> 860 | <mxCell id="NU75y0YXBvxGrzugc1HJ-149" value="GraphQL" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFCC99;" parent="1" vertex="1"> 861 | <mxGeometry x="669" y="1086.8333333333333" width="70" height="20" as="geometry" /> 862 | </mxCell> 863 | <mxCell id="NU75y0YXBvxGrzugc1HJ-150" value="MicroServices" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFCC99;" parent="1" vertex="1"> 864 | <mxGeometry x="288.5" y="1662.5" width="74" height="20" as="geometry" /> 865 | </mxCell> 866 | <mxCell id="NU75y0YXBvxGrzugc1HJ-151" value="Message-Broker" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 867 | <mxGeometry x="230" y="1602" width="105" height="20" as="geometry" /> 868 | </mxCell> 869 | <mxCell id="NU75y0YXBvxGrzugc1HJ-152" value="RabbitMQ" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 870 | <mxGeometry x="56" y="1576.5" width="87" height="15" as="geometry" /> 871 | </mxCell> 872 | <mxCell id="NU75y0YXBvxGrzugc1HJ-153" value="Apache Kafka" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 873 | <mxGeometry x="57" y="1604.5" width="87" height="15" as="geometry" /> 874 | </mxCell> 875 | <mxCell id="NU75y0YXBvxGrzugc1HJ-154" value="ActiveMQ<br>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#CCCCCC;" parent="1" vertex="1"> 876 | <mxGeometry x="56" y="1631.5" width="88" height="15" as="geometry" /> 877 | </mxCell> 878 | <mxCell id="NU75y0YXBvxGrzugc1HJ-155" value="Message-Bus" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFCC99;strokeColor=#000000;" parent="1" vertex="1"> 879 | <mxGeometry x="40" y="1704.5" width="120" height="20" as="geometry" /> 880 | </mxCell> 881 | <mxCell id="NU75y0YXBvxGrzugc1HJ-156" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;entryX=1;entryY=0.5;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-78" target="NU75y0YXBvxGrzugc1HJ-150" edge="1"> 882 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 883 | <mxPoint x="331.5" y="1632" as="sourcePoint" /> 884 | <mxPoint x="193.66666666666674" y="1530.3333333333333" as="targetPoint" /> 885 | <Array as="points"> 886 | <mxPoint x="425" y="1570" /> 887 | <mxPoint x="405" y="1650" /> 888 | </Array> 889 | </mxGeometry> 890 | </mxCell> 891 | <mxCell id="NU75y0YXBvxGrzugc1HJ-157" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;entryX=0.5;entryY=0;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=0.635;exitY=0.979;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-151" target="NU75y0YXBvxGrzugc1HJ-150" edge="1"> 892 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 893 | <mxPoint x="162.5" y="1703" as="sourcePoint" /> 894 | <mxPoint x="365.66666666666674" y="1693.3333333333333" as="targetPoint" /> 895 | <Array as="points"> 896 | <mxPoint x="284" y="1641" /> 897 | <mxPoint x="325" y="1651" /> 898 | </Array> 899 | </mxGeometry> 900 | </mxCell> 901 | <mxCell id="NU75y0YXBvxGrzugc1HJ-158" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=0.5;exitY=1;entryX=1;entryY=0.5;endFill=0;exitDx=0;exitDy=0;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-150" target="NU75y0YXBvxGrzugc1HJ-155" edge="1"> 902 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 903 | <mxPoint x="102" y="1669.1666666666667" as="sourcePoint" /> 904 | <mxPoint x="198.66666666666674" y="1715.8333333333333" as="targetPoint" /> 905 | <Array as="points"> 906 | <mxPoint x="295" y="1731" /> 907 | <mxPoint x="195" y="1691" /> 908 | </Array> 909 | </mxGeometry> 910 | </mxCell> 911 | <mxCell id="NU75y0YXBvxGrzugc1HJ-159" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=1;entryY=0.75;endFill=0;dashed=1;exitX=0.124;exitY=-0.021;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-151" target="NU75y0YXBvxGrzugc1HJ-152" edge="1"> 912 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 913 | <mxPoint x="365" y="1672" as="sourcePoint" /> 914 | <mxPoint x="404.83333333333326" y="1790.833333333333" as="targetPoint" /> 915 | <Array as="points"> 916 | <mxPoint x="205" y="1588" /> 917 | <mxPoint x="175" y="1591" /> 918 | </Array> 919 | </mxGeometry> 920 | </mxCell> 921 | <mxCell id="NU75y0YXBvxGrzugc1HJ-160" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=1;entryY=0.75;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;" parent="1" target="NU75y0YXBvxGrzugc1HJ-153" edge="1"> 922 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 923 | <mxPoint x="225" y="1608" as="sourcePoint" /> 924 | <mxPoint x="429.83333333333326" y="1779.833333333333" as="targetPoint" /> 925 | <Array as="points"> 926 | <mxPoint x="181.5" y="1608" /> 927 | </Array> 928 | </mxGeometry> 929 | </mxCell> 930 | <mxCell id="NU75y0YXBvxGrzugc1HJ-161" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=1;entryY=0.75;endFill=0;dashed=1;exitX=0;exitY=0.75;exitDx=0;exitDy=0;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-151" target="NU75y0YXBvxGrzugc1HJ-154" edge="1"> 931 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 932 | <mxPoint x="335" y="1725.5" as="sourcePoint" /> 933 | <mxPoint x="480" y="1709.6666666666667" as="targetPoint" /> 934 | <Array as="points"> 935 | <mxPoint x="171" y="1643" /> 936 | </Array> 937 | </mxGeometry> 938 | </mxCell> 939 | <mxCell id="NU75y0YXBvxGrzugc1HJ-162" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rounded=1;comic=0;strokeColor=#314354;fillColor=#647687;fontFamily=Verdana;fontSize=14;align=center;fontColor=#ffffff;" parent="1" vertex="1"> 940 | <mxGeometry x="458" y="1655.5" width="23" height="23" as="geometry" /> 941 | </mxCell> 942 | <mxCell id="NU75y0YXBvxGrzugc1HJ-163" value="Mocking" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFF66;fontFamily=Verdana;fontSize=10;" parent="1" vertex="1"> 943 | <mxGeometry x="213.5" y="1129.5" width="68" height="20" as="geometry" /> 944 | </mxCell> 945 | <mxCell id="NU75y0YXBvxGrzugc1HJ-164" value="" style="endArrow=none;dashed=1;html=1;fontFamily=Verdana;fontSize=10;elbow=vertical;exitX=0.012;exitY=0.067;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;curved=1;fillColor=#dae8fc;strokeColor=#6c8ebf;exitPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-62" target="NU75y0YXBvxGrzugc1HJ-163" edge="1"> 946 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 947 | <mxPoint x="542.5" y="1231.1666666666667" as="sourcePoint" /> 948 | <mxPoint x="582.5" y="1254" as="targetPoint" /> 949 | <Array as="points"> 950 | <mxPoint x="325" y="1181" /> 951 | <mxPoint x="281" y="1161" /> 952 | </Array> 953 | </mxGeometry> 954 | </mxCell> 955 | <mxCell id="NU75y0YXBvxGrzugc1HJ-165" value="" style="endArrow=none;dashed=1;html=1;fontFamily=Verdana;fontSize=10;entryX=1;entryY=0.75;entryDx=0;entryDy=0;curved=1;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-62" target="NU75y0YXBvxGrzugc1HJ-167" edge="1"> 956 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 957 | <mxPoint x="325.5" y="1214" as="sourcePoint" /> 958 | <mxPoint x="612.5" y="1201" as="targetPoint" /> 959 | <Array as="points"> 960 | <mxPoint x="296" y="1228" /> 961 | </Array> 962 | </mxGeometry> 963 | </mxCell> 964 | <mxCell id="NU75y0YXBvxGrzugc1HJ-166" style="edgeStyle=none;rounded=0;html=1;entryX=1;entryY=0.25;entryDx=0;entryDy=0;jettySize=auto;orthogonalLoop=1;fontFamily=Verdana;fontSize=10;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" edge="1"> 965 | <mxGeometry relative="1" as="geometry"> 966 | <mxPoint x="483" y="1127.6666666666667" as="sourcePoint" /> 967 | <mxPoint x="483" y="1127.6666666666667" as="targetPoint" /> 968 | </mxGeometry> 969 | </mxCell> 970 | <mxCell id="NU75y0YXBvxGrzugc1HJ-167" value="Frameworks<br>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFF66;fontFamily=Verdana;fontSize=10;" parent="1" vertex="1"> 971 | <mxGeometry x="213.5" y="1209" width="77" height="19" as="geometry" /> 972 | </mxCell> 973 | <mxCell id="NU75y0YXBvxGrzugc1HJ-168" value="<pre><span>Mockito</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 974 | <mxGeometry x="71.5" y="1133" width="65" height="15" as="geometry" /> 975 | </mxCell> 976 | <mxCell id="NU75y0YXBvxGrzugc1HJ-169" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;fillColor=#dae8fc;strokeColor=#6c8ebf;entryX=1;entryY=0.75;entryDx=0;entryDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-163" target="NU75y0YXBvxGrzugc1HJ-168" edge="1"> 977 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 978 | <mxPoint x="636.3275862068967" y="1171.344827586207" as="sourcePoint" /> 979 | <mxPoint x="133.5" y="1140" as="targetPoint" /> 980 | <Array as="points" /> 981 | </mxGeometry> 982 | </mxCell> 983 | <mxCell id="NU75y0YXBvxGrzugc1HJ-171" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.325;entryY=0.098;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-155" target="NU75y0YXBvxGrzugc1HJ-172" edge="1"> 984 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 985 | <mxPoint x="414.5" y="1818.5" as="sourcePoint" /> 986 | <mxPoint x="508.5" y="1797.5" as="targetPoint" /> 987 | <Array as="points"> 988 | <mxPoint x="85" y="1741" /> 989 | <mxPoint x="68" y="1751" /> 990 | </Array> 991 | </mxGeometry> 992 | </mxCell> 993 | <mxCell id="NU75y0YXBvxGrzugc1HJ-172" value="<pre><span>mbassador</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#CCCCCC;" parent="1" vertex="1"> 994 | <mxGeometry x="34.5" y="1764.5" width="103" height="20" as="geometry" /> 995 | </mxCell> 996 | <mxCell id="NU75y0YXBvxGrzugc1HJ-179" value="Assertion" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFF66;fontFamily=Verdana;fontSize=10;" parent="1" vertex="1"> 997 | <mxGeometry x="230" y="1269" width="68" height="20" as="geometry" /> 998 | </mxCell> 999 | <mxCell id="NU75y0YXBvxGrzugc1HJ-180" value="" style="endArrow=none;dashed=1;html=1;fontFamily=Verdana;fontSize=10;elbow=vertical;entryX=1;entryY=0.5;entryDx=0;entryDy=0;curved=1;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=0;exitY=0.75;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-62" target="NU75y0YXBvxGrzugc1HJ-179" edge="1"> 1000 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1001 | <mxPoint x="345.5" y="1246" as="sourcePoint" /> 1002 | <mxPoint x="585" y="1309.5" as="targetPoint" /> 1003 | <Array as="points"> 1004 | <mxPoint x="305.5" y="1240" /> 1005 | <mxPoint x="315.5" y="1270" /> 1006 | </Array> 1007 | </mxGeometry> 1008 | </mxCell> 1009 | <mxCell id="NU75y0YXBvxGrzugc1HJ-181" value="Structrul" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 1010 | <mxGeometry x="675" y="1701.5" width="110" height="15" as="geometry" /> 1011 | </mxCell> 1012 | <mxCell id="NU75y0YXBvxGrzugc1HJ-182" value="Behavioral" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 1013 | <mxGeometry x="675" y="1725.5" width="110" height="15" as="geometry" /> 1014 | </mxCell> 1015 | <mxCell id="NU75y0YXBvxGrzugc1HJ-183" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;exitX=1.006;exitY=0.94;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-128" target="NU75y0YXBvxGrzugc1HJ-181" edge="1"> 1016 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1017 | <mxPoint x="621.166666666667" y="1746.166666666667" as="sourcePoint" /> 1018 | <mxPoint x="702" y="1772.5" as="targetPoint" /> 1019 | <Array as="points"> 1020 | <mxPoint x="661.5" y="1731.5" /> 1021 | </Array> 1022 | </mxGeometry> 1023 | </mxCell> 1024 | <mxCell id="NU75y0YXBvxGrzugc1HJ-184" value="synchronization" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;strokeColor=#000000;" parent="1" vertex="1"> 1025 | <mxGeometry x="675.5" y="1749.5" width="110" height="15" as="geometry" /> 1026 | </mxCell> 1027 | <mxCell id="NU75y0YXBvxGrzugc1HJ-185" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;exitX=0.971;exitY=1.086;fillColor=#dae8fc;strokeColor=#6c8ebf;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-128" target="NU75y0YXBvxGrzugc1HJ-182" edge="1"> 1028 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1029 | <mxPoint x="598.8333333333335" y="1755.8333333333335" as="sourcePoint" /> 1030 | <mxPoint x="678.8333333333335" y="1760" as="targetPoint" /> 1031 | <Array as="points"> 1032 | <mxPoint x="637.5" y="1748.5" /> 1033 | </Array> 1034 | </mxGeometry> 1035 | </mxCell> 1036 | <mxCell id="NU75y0YXBvxGrzugc1HJ-186" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;exitX=0.826;exitY=1.086;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-128" target="NU75y0YXBvxGrzugc1HJ-184" edge="1"> 1037 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1038 | <mxPoint x="551.3333333333335" y="1768.666666666667" as="sourcePoint" /> 1039 | <mxPoint x="675.5" y="1761.5" as="targetPoint" /> 1040 | <Array as="points"> 1041 | <mxPoint x="621.5" y="1772.5" /> 1042 | <mxPoint x="647.5" y="1748.5" /> 1043 | </Array> 1044 | </mxGeometry> 1045 | </mxCell> 1046 | <mxCell id="NU75y0YXBvxGrzugc1HJ-187" value="Concurrency" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;strokeColor=#000000;" parent="1" vertex="1"> 1047 | <mxGeometry x="675" y="1775.5" width="111" height="15" as="geometry" /> 1048 | </mxCell> 1049 | <mxCell id="NU75y0YXBvxGrzugc1HJ-188" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;exitX=0.681;exitY=1.011;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-128" edge="1"> 1050 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1051 | <mxPoint x="558.8333333333335" y="1802.166666666667" as="sourcePoint" /> 1052 | <mxPoint x="675.5" y="1783.5" as="targetPoint" /> 1053 | <Array as="points"> 1054 | <mxPoint x="621.5" y="1792.5" /> 1055 | <mxPoint x="657.5" y="1772.5" /> 1056 | </Array> 1057 | </mxGeometry> 1058 | </mxCell> 1059 | <mxCell id="NU75y0YXBvxGrzugc1HJ-189" value="Apache Pulsar" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#CCCCCC;" parent="1" vertex="1"> 1060 | <mxGeometry x="56" y="1656.5" width="88" height="15" as="geometry" /> 1061 | </mxCell> 1062 | <mxCell id="NU75y0YXBvxGrzugc1HJ-190" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=1;entryY=0.25;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-151" target="NU75y0YXBvxGrzugc1HJ-189" edge="1"> 1063 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1064 | <mxPoint x="225" y="1621" as="sourcePoint" /> 1065 | <mxPoint x="414.5" y="1743" as="targetPoint" /> 1066 | <Array as="points"> 1067 | <mxPoint x="215" y="1661" /> 1068 | </Array> 1069 | </mxGeometry> 1070 | </mxCell> 1071 | <mxCell id="NU75y0YXBvxGrzugc1HJ-191" value="Log Management System<br>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFCC99;" parent="1" vertex="1"> 1072 | <mxGeometry x="98" y="864" width="153" height="20" as="geometry" /> 1073 | </mxCell> 1074 | <mxCell id="NU75y0YXBvxGrzugc1HJ-192" value="" style="endArrow=none;html=1;fontFamily=Verdana;fontSize=10;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;curved=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-49" target="NU75y0YXBvxGrzugc1HJ-191" edge="1"> 1075 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1076 | <mxPoint x="215" y="960" as="sourcePoint" /> 1077 | <mxPoint x="257.5" y="935" as="targetPoint" /> 1078 | <Array as="points"> 1079 | <mxPoint x="225" y="931" /> 1080 | </Array> 1081 | </mxGeometry> 1082 | </mxCell> 1083 | <mxCell id="NU75y0YXBvxGrzugc1HJ-193" value="ELK Stack" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 1084 | <mxGeometry x="40.5" y="921" width="90" height="14" as="geometry" /> 1085 | </mxCell> 1086 | <mxCell id="NU75y0YXBvxGrzugc1HJ-199" value="CouchDB" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#CCCCCC;" parent="1" vertex="1"> 1087 | <mxGeometry x="146" y="810" width="100" height="15" as="geometry" /> 1088 | </mxCell> 1089 | <mxCell id="NU75y0YXBvxGrzugc1HJ-200" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=0;entryY=0.5;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" target="NU75y0YXBvxGrzugc1HJ-199" edge="1"> 1090 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1091 | <mxPoint x="56" y="645" as="sourcePoint" /> 1092 | <mxPoint x="156.33333333333326" y="786.8333333333333" as="targetPoint" /> 1093 | <Array as="points"> 1094 | <mxPoint x="45" y="825" /> 1095 | </Array> 1096 | </mxGeometry> 1097 | </mxCell> 1098 | <mxCell id="NU75y0YXBvxGrzugc1HJ-201" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rounded=1;comic=0;strokeColor=#314354;fillColor=#647687;fontFamily=Verdana;fontSize=14;align=center;fontColor=#ffffff;" parent="1" vertex="1"> 1099 | <mxGeometry x="461" y="998" width="23" height="23" as="geometry" /> 1100 | </mxCell> 1101 | <mxCell id="NU75y0YXBvxGrzugc1HJ-202" value="" style="endArrow=none;html=1;strokeColor=#6C8EBF;curved=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-203" target="NU75y0YXBvxGrzugc1HJ-201" edge="1"> 1102 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1103 | <mxPoint x="545" y="1030" as="sourcePoint" /> 1104 | <mxPoint x="450.2758620689656" y="1034.0344827586207" as="targetPoint" /> 1105 | <Array as="points" /> 1106 | </mxGeometry> 1107 | </mxCell> 1108 | <mxCell id="NU75y0YXBvxGrzugc1HJ-203" value="<font style="font-size: 10px">Real-Time Communication</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFF66;fontFamily=Verdana;" parent="1" vertex="1"> 1109 | <mxGeometry x="537.5" y="999" width="86" height="34" as="geometry" /> 1110 | </mxCell> 1111 | <mxCell id="NU75y0YXBvxGrzugc1HJ-204" value="" style="endArrow=none;dashed=1;html=1;strokeColor=#6C8EBF;fontFamily=Verdana;curved=1;exitX=0;exitY=0.75;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-205" edge="1"> 1112 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1113 | <mxPoint x="622.5" y="985" as="sourcePoint" /> 1114 | <mxPoint x="624" y="1016" as="targetPoint" /> 1115 | <Array as="points"> 1116 | <mxPoint x="663" y="1002" /> 1117 | </Array> 1118 | </mxGeometry> 1119 | </mxCell> 1120 | <mxCell id="NU75y0YXBvxGrzugc1HJ-205" value="<pre><span>webbit</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 1121 | <mxGeometry x="682.5" y="990.5" width="100" height="15" as="geometry" /> 1122 | </mxCell> 1123 | <mxCell id="NU75y0YXBvxGrzugc1HJ-206" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" edge="1"> 1124 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1125 | <mxPoint x="425" y="240" as="sourcePoint" /> 1126 | <mxPoint x="482" y="349" as="targetPoint" /> 1127 | <Array as="points"> 1128 | <mxPoint x="425" y="290" /> 1129 | <mxPoint x="480" y="320" /> 1130 | </Array> 1131 | </mxGeometry> 1132 | </mxCell> 1133 | <mxCell id="NU75y0YXBvxGrzugc1HJ-207" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;exitX=0;exitY=0.25;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;" parent="1" edge="1"> 1134 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1135 | <mxPoint x="354" y="165" as="sourcePoint" /> 1136 | <mxPoint x="263" y="130" as="targetPoint" /> 1137 | <Array as="points"> 1138 | <mxPoint x="311" y="130" /> 1139 | </Array> 1140 | </mxGeometry> 1141 | </mxCell> 1142 | <mxCell id="NU75y0YXBvxGrzugc1HJ-208" value="Variables, Constants, Types, Function, Packages, etc" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 1143 | <mxGeometry y="122.5" width="260" height="15" as="geometry" /> 1144 | </mxCell> 1145 | <mxCell id="NU75y0YXBvxGrzugc1HJ-209" value="<pre><span>Spring</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=9;fillColor=#FFFF66;" parent="1" vertex="1"> 1146 | <mxGeometry x="637" y="389.5" width="96" height="20" as="geometry" /> 1147 | </mxCell> 1148 | <mxCell id="NU75y0YXBvxGrzugc1HJ-210" value="" style="endArrow=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.669;entryY=-0.033;entryDx=0;entryDy=0;curved=1;strokeColor=#6C8EBF;dashed=1;entryPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-209" target="NU75y0YXBvxGrzugc1HJ-36" edge="1"> 1149 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1150 | <mxPoint x="465.5" y="544.5" as="sourcePoint" /> 1151 | <mxPoint x="515.5" y="494.5" as="targetPoint" /> 1152 | <Array as="points"> 1153 | <mxPoint x="588" y="459.5" /> 1154 | </Array> 1155 | </mxGeometry> 1156 | </mxCell> 1157 | <mxCell id="NU75y0YXBvxGrzugc1HJ-211" value="<pre><span>Play Framework</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=9;fillColor=#FFCC99;" parent="1" vertex="1"> 1158 | <mxGeometry x="690" y="434.5" width="96" height="20" as="geometry" /> 1159 | </mxCell> 1160 | <mxCell id="NU75y0YXBvxGrzugc1HJ-212" value="" style="endArrow=none;html=1;exitX=0;exitY=0.75;exitDx=0;exitDy=0;entryX=0.944;entryY=0.033;entryDx=0;entryDy=0;curved=1;strokeColor=#6C8EBF;dashed=1;entryPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-211" target="NU75y0YXBvxGrzugc1HJ-36" edge="1"> 1161 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1162 | <mxPoint x="405.1379310344828" y="419.25862068965523" as="sourcePoint" /> 1163 | <mxPoint x="481" y="539.2586206896551" as="targetPoint" /> 1164 | <Array as="points"> 1165 | <mxPoint x="665" y="470" /> 1166 | <mxPoint x="625" y="470" /> 1167 | </Array> 1168 | </mxGeometry> 1169 | </mxCell> 1170 | <mxCell id="NU75y0YXBvxGrzugc1HJ-213" value="<pre><span>Spark</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=9;fillColor=#FFCC99;" parent="1" vertex="1"> 1171 | <mxGeometry x="710.5" y="479.5" width="99" height="20" as="geometry" /> 1172 | </mxCell> 1173 | <mxCell id="NU75y0YXBvxGrzugc1HJ-214" value="" style="endArrow=none;html=1;exitX=0;exitY=0.75;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;curved=1;strokeColor=#6C8EBF;dashed=1;" parent="1" source="NU75y0YXBvxGrzugc1HJ-213" target="NU75y0YXBvxGrzugc1HJ-36" edge="1"> 1174 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1175 | <mxPoint x="384.7068965517242" y="458.6034482758621" as="sourcePoint" /> 1176 | <mxPoint x="500.5689655172414" y="539.2931034482758" as="targetPoint" /> 1177 | <Array as="points"> 1178 | <mxPoint x="685" y="490" /> 1179 | <mxPoint x="648" y="499.5" /> 1180 | <mxPoint x="625" y="512" /> 1181 | </Array> 1182 | </mxGeometry> 1183 | </mxCell> 1184 | <mxCell id="NU75y0YXBvxGrzugc1HJ-215" value="<pre>dropwizard<br></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=9;fillColor=#FFCC99;" parent="1" vertex="1"> 1185 | <mxGeometry x="690.5" y="525" width="99" height="20" as="geometry" /> 1186 | </mxCell> 1187 | <mxCell id="NU75y0YXBvxGrzugc1HJ-216" value="" style="endArrow=none;html=1;curved=1;strokeColor=#6C8EBF;dashed=1;exitX=0;exitY=0.25;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-215" target="NU75y0YXBvxGrzugc1HJ-36" edge="1"> 1188 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1189 | <mxPoint x="695" y="535" as="sourcePoint" /> 1190 | <mxPoint x="588" y="527.5" as="targetPoint" /> 1191 | <Array as="points"> 1192 | <mxPoint x="665" y="540" /> 1193 | <mxPoint x="638" y="534.5" /> 1194 | <mxPoint x="615" y="520" /> 1195 | </Array> 1196 | </mxGeometry> 1197 | </mxCell> 1198 | <mxCell id="NU75y0YXBvxGrzugc1HJ-217" value="<pre><span>nanohttpd</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=9;fillColor=#FFCC99;" parent="1" vertex="1"> 1199 | <mxGeometry x="637" y="562.5" width="99" height="20" as="geometry" /> 1200 | </mxCell> 1201 | <mxCell id="NU75y0YXBvxGrzugc1HJ-218" value="" style="endArrow=none;html=1;exitX=0;exitY=0.25;exitDx=0;exitDy=0;curved=1;strokeColor=#6C8EBF;dashed=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-217" target="NU75y0YXBvxGrzugc1HJ-36" edge="1"> 1202 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1203 | <mxPoint x="407.5689655172414" y="572.1896551724137" as="sourcePoint" /> 1204 | <mxPoint x="510.5" y="524.5" as="targetPoint" /> 1205 | <Array as="points"> 1206 | <mxPoint x="608" y="559.5" /> 1207 | <mxPoint x="625" y="540" /> 1208 | </Array> 1209 | </mxGeometry> 1210 | </mxCell> 1211 | <mxCell id="NU75y0YXBvxGrzugc1HJ-219" value="<pre><span>TinyLog</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 1212 | <mxGeometry x="362" y="1005.5" width="65" height="15" as="geometry" /> 1213 | </mxCell> 1214 | <mxCell id="NU75y0YXBvxGrzugc1HJ-220" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=0.5;entryY=0;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;exitX=0.794;exitY=1.008;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-49" target="NU75y0YXBvxGrzugc1HJ-219" edge="1"> 1215 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1216 | <mxPoint x="324.5" y="973.5" as="sourcePoint" /> 1217 | <mxPoint x="335.18965517241395" y="1043.1551724137933" as="targetPoint" /> 1218 | <Array as="points"> 1219 | <mxPoint x="345" y="970" /> 1220 | <mxPoint x="385" y="980" /> 1221 | <mxPoint x="394.5" y="990.5" /> 1222 | </Array> 1223 | </mxGeometry> 1224 | </mxCell> 1225 | <mxCell id="NU75y0YXBvxGrzugc1HJ-221" value="<pre><span>retrofit</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 1226 | <mxGeometry x="538.5" y="1191" width="82" height="15" as="geometry" /> 1227 | </mxCell> 1228 | <mxCell id="NU75y0YXBvxGrzugc1HJ-222" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;exitX=1;exitY=0.5;entryX=0.107;entryY=0.933;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;entryPerimeter=0;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-221" target="NU75y0YXBvxGrzugc1HJ-134" edge="1"> 1229 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1230 | <mxPoint x="630.5" y="1179.7241379310346" as="sourcePoint" /> 1231 | <mxPoint x="682.9137931034484" y="1181.103448275862" as="targetPoint" /> 1232 | <Array as="points"> 1233 | <mxPoint x="630.5" y="1185" /> 1234 | <mxPoint x="660.5" y="1195" /> 1235 | </Array> 1236 | </mxGeometry> 1237 | </mxCell> 1238 | <mxCell id="NU75y0YXBvxGrzugc1HJ-223" value="<pre><span>Assertj</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 1239 | <mxGeometry x="60.5" y="1254" width="65" height="15" as="geometry" /> 1240 | </mxCell> 1241 | <mxCell id="NU75y0YXBvxGrzugc1HJ-224" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rounded=1;comic=0;strokeColor=#314354;fillColor=#647687;fontFamily=Verdana;fontSize=14;align=center;fontColor=#ffffff;" parent="1" vertex="1"> 1242 | <mxGeometry x="443" y="502" width="23" height="23" as="geometry" /> 1243 | </mxCell> 1244 | <mxCell id="NU75y0YXBvxGrzugc1HJ-225" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" target="NU75y0YXBvxGrzugc1HJ-224" edge="1"> 1245 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1246 | <mxPoint x="469" y="410" as="sourcePoint" /> 1247 | <mxPoint x="445" y="1820" as="targetPoint" /> 1248 | <Array as="points" /> 1249 | </mxGeometry> 1250 | </mxCell> 1251 | <mxCell id="NU75y0YXBvxGrzugc1HJ-228" style="edgeStyle=none;html=1;entryX=0;entryY=0.25;entryDx=0;entryDy=0;dashed=1;jettySize=auto;orthogonalLoop=1;strokeColor=#6C8EBF;fontSize=9;" parent="1" source="NU75y0YXBvxGrzugc1HJ-151" target="NU75y0YXBvxGrzugc1HJ-151" edge="1"> 1252 | <mxGeometry relative="1" as="geometry" /> 1253 | </mxCell> 1254 | <mxCell id="NU75y0YXBvxGrzugc1HJ-229" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.75;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-128" target="NU75y0YXBvxGrzugc1HJ-127" edge="1"> 1255 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1256 | <mxPoint x="559.1034482758623" y="1653.2586206896553" as="sourcePoint" /> 1257 | <mxPoint x="472.2068965517242" y="1728.4310344827586" as="targetPoint" /> 1258 | <Array as="points"> 1259 | <mxPoint x="485" y="1770" /> 1260 | </Array> 1261 | </mxGeometry> 1262 | </mxCell> 1263 | <mxCell id="NU75y0YXBvxGrzugc1HJ-232" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="NU75y0YXBvxGrzugc1HJ-64" edge="1"> 1264 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1265 | <mxPoint x="163.5" y="1256" as="sourcePoint" /> 1266 | <mxPoint x="134.16666666666652" y="1226.952380952381" as="targetPoint" /> 1267 | <Array as="points"> 1268 | <mxPoint x="155" y="1235" /> 1269 | </Array> 1270 | </mxGeometry> 1271 | </mxCell> 1272 | <mxCell id="NU75y0YXBvxGrzugc1HJ-233" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontStyle=1" parent="1" target="NU75y0YXBvxGrzugc1HJ-223" edge="1"> 1273 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1274 | <mxPoint x="165" y="1260" as="sourcePoint" /> 1275 | <mxPoint x="147.66666666666652" y="1263.952380952381" as="targetPoint" /> 1276 | <Array as="points"> 1277 | <mxPoint x="155" y="1281" /> 1278 | </Array> 1279 | </mxGeometry> 1280 | </mxCell> 1281 | <mxCell id="NU75y0YXBvxGrzugc1HJ-234" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;strokeWidth=1;dashed=1;" parent="1" edge="1"> 1282 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1283 | <mxPoint x="186" y="1261" as="sourcePoint" /> 1284 | <mxPoint x="165" y="1259.5" as="targetPoint" /> 1285 | <Array as="points" /> 1286 | </mxGeometry> 1287 | </mxCell> 1288 | <mxCell id="NU75y0YXBvxGrzugc1HJ-235" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;entryX=-0.023;entryY=0.433;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="NU75y0YXBvxGrzugc1HJ-167" edge="1"> 1289 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1290 | <mxPoint x="185" y="1261" as="sourcePoint" /> 1291 | <mxPoint x="171.6111111111111" y="1212.4444444444443" as="targetPoint" /> 1292 | <Array as="points"> 1293 | <mxPoint x="201" y="1221.5" /> 1294 | </Array> 1295 | </mxGeometry> 1296 | </mxCell> 1297 | <mxCell id="NU75y0YXBvxGrzugc1HJ-236" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="NU75y0YXBvxGrzugc1HJ-179" edge="1"> 1298 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1299 | <mxPoint x="185" y="1261" as="sourcePoint" /> 1300 | <mxPoint x="221.72222222222217" y="1227.2222222222222" as="targetPoint" /> 1301 | <Array as="points"> 1302 | <mxPoint x="205" y="1279" /> 1303 | </Array> 1304 | </mxGeometry> 1305 | </mxCell> 1306 | <mxCell id="NU75y0YXBvxGrzugc1HJ-237" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" edge="1"> 1307 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1308 | <mxPoint x="355" y="220" as="sourcePoint" /> 1309 | <mxPoint x="275" y="240" as="targetPoint" /> 1310 | <Array as="points"> 1311 | <mxPoint x="335" y="220" /> 1312 | <mxPoint x="305" y="230" /> 1313 | </Array> 1314 | </mxGeometry> 1315 | </mxCell> 1316 | <mxCell id="NU75y0YXBvxGrzugc1HJ-238" value="SQL fundamentals" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 1317 | <mxGeometry x="353" y="210" width="130" height="20" as="geometry" /> 1318 | </mxCell> 1319 | <mxCell id="NU75y0YXBvxGrzugc1HJ-239" value="Basic Sql Syntax" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 1320 | <mxGeometry x="13.5" y="234" width="258" height="15" as="geometry" /> 1321 | </mxCell> 1322 | <mxCell id="NU75y0YXBvxGrzugc1HJ-240" value="Scrum, Kanban or other project strategies" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 1323 | <mxGeometry x="31" y="348" width="260" height="15" as="geometry" /> 1324 | </mxCell> 1325 | <mxCell id="NU75y0YXBvxGrzugc1HJ-241" value="" style="endArrow=none;dashed=1;html=1;strokeColor=#6C8EBF;fontFamily=Verdana;curved=1;exitX=0;exitY=0.75;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-242" edge="1"> 1326 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1327 | <mxPoint x="625.5" y="959.5" as="sourcePoint" /> 1328 | <mxPoint x="627" y="1000" as="targetPoint" /> 1329 | <Array as="points"> 1330 | <mxPoint x="666" y="976.5" /> 1331 | </Array> 1332 | </mxGeometry> 1333 | </mxCell> 1334 | <mxCell id="NU75y0YXBvxGrzugc1HJ-242" value="<pre><span>atmosphere</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 1335 | <mxGeometry x="685.5" y="965" width="100" height="15" as="geometry" /> 1336 | </mxCell> 1337 | <mxCell id="NU75y0YXBvxGrzugc1HJ-243" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" edge="1"> 1338 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1339 | <mxPoint x="355" y="1480" as="sourcePoint" /> 1340 | <mxPoint x="325" y="1540" as="targetPoint" /> 1341 | <Array as="points"> 1342 | <mxPoint x="345.5" y="1512" /> 1343 | </Array> 1344 | </mxGeometry> 1345 | </mxCell> 1346 | <mxCell id="NU75y0YXBvxGrzugc1HJ-244" value="Selenium" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 1347 | <mxGeometry x="255" y="1539.5" width="80" height="15" as="geometry" /> 1348 | </mxCell> 1349 | <mxCell id="NU75y0YXBvxGrzugc1HJ-245" value="Messaging" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;strokeColor=#000000;" parent="1" vertex="1"> 1350 | <mxGeometry x="669" y="1803" width="111" height="15" as="geometry" /> 1351 | </mxCell> 1352 | <mxCell id="NU75y0YXBvxGrzugc1HJ-246" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" edge="1"> 1353 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1354 | <mxPoint x="545" y="1750" as="sourcePoint" /> 1355 | <mxPoint x="669.5" y="1811" as="targetPoint" /> 1356 | <Array as="points"> 1357 | <mxPoint x="615.5" y="1820" /> 1358 | <mxPoint x="651.5" y="1800" /> 1359 | </Array> 1360 | </mxGeometry> 1361 | </mxCell> 1362 | <mxCell id="NU75y0YXBvxGrzugc1HJ-247" value="Stability" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;strokeColor=#000000;" parent="1" vertex="1"> 1363 | <mxGeometry x="669" y="1834.5" width="111" height="15" as="geometry" /> 1364 | </mxCell> 1365 | <mxCell id="NU75y0YXBvxGrzugc1HJ-248" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" edge="1"> 1366 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1367 | <mxPoint x="545" y="1750" as="sourcePoint" /> 1368 | <mxPoint x="669.5" y="1842.5" as="targetPoint" /> 1369 | <Array as="points"> 1370 | <mxPoint x="615.5" y="1851.5" /> 1371 | <mxPoint x="651.5" y="1831.5" /> 1372 | </Array> 1373 | </mxGeometry> 1374 | </mxCell> 1375 | <mxCell id="NU75y0YXBvxGrzugc1HJ-249" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rounded=1;comic=0;strokeColor=#314354;fillColor=#647687;fontFamily=Verdana;fontSize=14;align=center;fontColor=#ffffff;" parent="1" vertex="1"> 1376 | <mxGeometry x="435.5" y="582.5" width="23" height="23" as="geometry" /> 1377 | </mxCell> 1378 | <mxCell id="NU75y0YXBvxGrzugc1HJ-250" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-224" target="NU75y0YXBvxGrzugc1HJ-249" edge="1"> 1379 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1380 | <mxPoint x="455" y="525" as="sourcePoint" /> 1381 | <mxPoint x="445" y="1820" as="targetPoint" /> 1382 | <Array as="points" /> 1383 | </mxGeometry> 1384 | </mxCell> 1385 | <mxCell id="NU75y0YXBvxGrzugc1HJ-251" value="<pre><span>Ebean</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=9;fillColor=#FFCC99;" parent="1" vertex="1"> 1386 | <mxGeometry x="675.5" y="677.5" width="96" height="20" as="geometry" /> 1387 | </mxCell> 1388 | <mxCell id="NU75y0YXBvxGrzugc1HJ-252" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;entryX=1;entryY=0.5;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;entryDx=0;entryDy=0;" parent="1" edge="1"> 1389 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1390 | <mxPoint x="495" y="625.1666666666667" as="sourcePoint" /> 1391 | <mxPoint x="454" y="605.5" as="targetPoint" /> 1392 | <Array as="points"> 1393 | <mxPoint x="473" y="621.5" /> 1394 | </Array> 1395 | </mxGeometry> 1396 | </mxCell> 1397 | <mxCell id="NU75y0YXBvxGrzugc1HJ-253" value="" style="endArrow=none;html=1;exitX=0;exitY=0.75;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;curved=1;strokeColor=#6C8EBF;dashed=1;" parent="1" edge="1"> 1398 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1399 | <mxPoint x="689.5" y="621" as="sourcePoint" /> 1400 | <mxPoint x="584.5" y="629" as="targetPoint" /> 1401 | <Array as="points"> 1402 | <mxPoint x="663.5" y="616" /> 1403 | <mxPoint x="626.5" y="625.5" /> 1404 | <mxPoint x="603.5" y="638" /> 1405 | </Array> 1406 | </mxGeometry> 1407 | </mxCell> 1408 | <mxCell id="NU75y0YXBvxGrzugc1HJ-254" value="<pre><span>Hibernate</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=9;fillColor=#FFFF66;" parent="1" vertex="1"> 1409 | <mxGeometry x="682" y="612.5" width="96" height="20" as="geometry" /> 1410 | </mxCell> 1411 | <mxCell id="NU75y0YXBvxGrzugc1HJ-255" value="ORMs" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 1412 | <mxGeometry x="495" y="617.5" width="100" height="30" as="geometry" /> 1413 | </mxCell> 1414 | <mxCell id="NU75y0YXBvxGrzugc1HJ-256" value="" style="endArrow=none;html=1;exitX=0;exitY=0.75;exitDx=0;exitDy=0;entryX=0.95;entryY=1.05;entryDx=0;entryDy=0;curved=1;strokeColor=#6C8EBF;dashed=1;entryPerimeter=0;" parent="1" target="NU75y0YXBvxGrzugc1HJ-255" edge="1"> 1415 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1416 | <mxPoint x="695.5" y="673" as="sourcePoint" /> 1417 | <mxPoint x="590.5" y="681" as="targetPoint" /> 1418 | <Array as="points"> 1419 | <mxPoint x="669.5" y="668" /> 1420 | <mxPoint x="632.5" y="677.5" /> 1421 | </Array> 1422 | </mxGeometry> 1423 | </mxCell> 1424 | <mxCell id="NU75y0YXBvxGrzugc1HJ-257" value="<span>Basic Authentication, OAuth, JWT, etc&nbsp;</span><br>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 1425 | <mxGeometry x="625" y="290.5" width="260" height="15" as="geometry" /> 1426 | </mxCell> 1427 | <mxCell id="NU75y0YXBvxGrzugc1HJ-258" value="SOLID, YAGNI, KISS" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 1428 | <mxGeometry x="624" y="302.5" width="260" height="15" as="geometry" /> 1429 | </mxCell> 1430 | <mxCell id="NU75y0YXBvxGrzugc1HJ-259" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;exitX=1;exitY=0.25;entryX=0;entryY=0.5;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" target="NU75y0YXBvxGrzugc1HJ-257" edge="1"> 1431 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1432 | <mxPoint x="564" y="325.5" as="sourcePoint" /> 1433 | <mxPoint x="375" y="268" as="targetPoint" /> 1434 | <Array as="points"> 1435 | <mxPoint x="585" y="298.5" /> 1436 | </Array> 1437 | </mxGeometry> 1438 | </mxCell> 1439 | <mxCell id="NU75y0YXBvxGrzugc1HJ-260" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;exitX=1;exitY=0.5;entryX=0;entryY=0.5;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" target="NU75y0YXBvxGrzugc1HJ-258" edge="1"> 1440 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1441 | <mxPoint x="564" y="330.5" as="sourcePoint" /> 1442 | <mxPoint x="635" y="293" as="targetPoint" /> 1443 | <Array as="points"> 1444 | <mxPoint x="595" y="310.5" /> 1445 | </Array> 1446 | </mxGeometry> 1447 | </mxCell> 1448 | <mxCell id="NU75y0YXBvxGrzugc1HJ-261" value="General Development Skills" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 1449 | <mxGeometry x="395.5" y="321" width="170" height="20" as="geometry" /> 1450 | </mxCell> 1451 | <mxCell id="NU75y0YXBvxGrzugc1HJ-262" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=0.628;exitY=1.025;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" edge="1"> 1452 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1453 | <mxPoint x="245" y="1748" as="sourcePoint" /> 1454 | <mxPoint x="185" y="1805" as="targetPoint" /> 1455 | <Array as="points"> 1456 | <mxPoint x="215.5" y="1801.5" /> 1457 | </Array> 1458 | </mxGeometry> 1459 | </mxCell> 1460 | <mxCell id="NU75y0YXBvxGrzugc1HJ-263" value="<pre><span>Apollo</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 1461 | <mxGeometry x="135" y="1806" width="69" height="15" as="geometry" /> 1462 | </mxCell> 1463 | <mxCell id="NU75y0YXBvxGrzugc1HJ-264" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;entryX=1;entryY=0.25;entryDx=0;entryDy=0;" parent="1" edge="1"> 1464 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1465 | <mxPoint x="244.5" y="1757" as="sourcePoint" /> 1466 | <mxPoint x="202" y="1832" as="targetPoint" /> 1467 | <Array as="points"> 1468 | <mxPoint x="252.5" y="1822" /> 1469 | </Array> 1470 | </mxGeometry> 1471 | </mxCell> 1472 | <mxCell id="NU75y0YXBvxGrzugc1HJ-265" value="<pre><span>micronaut</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 1473 | <mxGeometry x="169" y="1829" width="65" height="15" as="geometry" /> 1474 | </mxCell> 1475 | <mxCell id="NU75y0YXBvxGrzugc1HJ-266" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" edge="1"> 1476 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1477 | <mxPoint x="354" y="160" as="sourcePoint" /> 1478 | <mxPoint x="263" y="116" as="targetPoint" /> 1479 | <Array as="points"> 1480 | <mxPoint x="311" y="116" /> 1481 | </Array> 1482 | </mxGeometry> 1483 | </mxCell> 1484 | <mxCell id="NU75y0YXBvxGrzugc1HJ-267" value="Java CLI" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" parent="1" vertex="1"> 1485 | <mxGeometry y="108.5" width="260" height="15" as="geometry" /> 1486 | </mxCell> 1487 | <mxCell id="NU75y0YXBvxGrzugc1HJ-268" value="Frameworks<br>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFCC99;" parent="1" vertex="1"> 1488 | <mxGeometry x="218" y="1732" width="74" height="20" as="geometry" /> 1489 | </mxCell> 1490 | <mxCell id="NU75y0YXBvxGrzugc1HJ-269" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;" parent="1" target="NU75y0YXBvxGrzugc1HJ-268" edge="1"> 1491 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1492 | <mxPoint x="328" y="1683" as="sourcePoint" /> 1493 | <mxPoint x="307" y="1730" as="targetPoint" /> 1494 | <Array as="points"> 1495 | <mxPoint x="330.5" y="1720.5" /> 1496 | </Array> 1497 | </mxGeometry> 1498 | </mxCell> 1499 | <mxCell id="NU75y0YXBvxGrzugc1HJ-270" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" edge="1"> 1500 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1501 | <mxPoint x="331" y="1683" as="sourcePoint" /> 1502 | <mxPoint x="360" y="1750" as="targetPoint" /> 1503 | <Array as="points"> 1504 | <mxPoint x="345.5" y="1730.5" /> 1505 | </Array> 1506 | </mxGeometry> 1507 | </mxCell> 1508 | <mxCell id="NU75y0YXBvxGrzugc1HJ-271" value="RPC" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 1509 | <mxGeometry x="327" y="1752" width="68" height="20" as="geometry" /> 1510 | </mxCell> 1511 | <mxCell id="NU75y0YXBvxGrzugc1HJ-272" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=0.628;exitY=1.025;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" edge="1"> 1512 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1513 | <mxPoint x="350.5" y="1774.5" as="sourcePoint" /> 1514 | <mxPoint x="290.5" y="1831.5" as="targetPoint" /> 1515 | <Array as="points"> 1516 | <mxPoint x="321" y="1828" /> 1517 | </Array> 1518 | </mxGeometry> 1519 | </mxCell> 1520 | <mxCell id="NU75y0YXBvxGrzugc1HJ-273" value="Protocol Buffers" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 1521 | <mxGeometry x="245" y="1828" width="80" height="15" as="geometry" /> 1522 | </mxCell> 1523 | <mxCell id="NU75y0YXBvxGrzugc1HJ-274" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" edge="1"> 1524 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1525 | <mxPoint x="357" y="1774.5" as="sourcePoint" /> 1526 | <mxPoint x="332" y="1850" as="targetPoint" /> 1527 | <Array as="points"> 1528 | <mxPoint x="365" y="1839.5" /> 1529 | </Array> 1530 | </mxGeometry> 1531 | </mxCell> 1532 | <mxCell id="NU75y0YXBvxGrzugc1HJ-275" value="<pre><span>gRPC-Java</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 1533 | <mxGeometry x="266" y="1852" width="80" height="15" as="geometry" /> 1534 | </mxCell> 1535 | <mxCell id="NU75y0YXBvxGrzugc1HJ-276" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" edge="1"> 1536 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1537 | <mxPoint x="367" y="1775.5" as="sourcePoint" /> 1538 | <mxPoint x="395" y="1851" as="targetPoint" /> 1539 | <Array as="points"> 1540 | <mxPoint x="375" y="1840.5" /> 1541 | </Array> 1542 | </mxGeometry> 1543 | </mxCell> 1544 | <mxCell id="NU75y0YXBvxGrzugc1HJ-277" value="<pre><span>thrift</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFFF66;" parent="1" vertex="1"> 1545 | <mxGeometry x="355" y="1850" width="75" height="15" as="geometry" /> 1546 | </mxCell> 1547 | <mxCell id="NU75y0YXBvxGrzugc1HJ-278" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-279" target="NU75y0YXBvxGrzugc1HJ-281" edge="1"> 1548 | <mxGeometry relative="1" as="geometry" /> 1549 | </mxCell> 1550 | <mxCell id="NU75y0YXBvxGrzugc1HJ-279" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rounded=1;comic=0;strokeColor=#314354;fillColor=#647687;fontFamily=Verdana;fontSize=14;align=center;fontColor=#ffffff;" parent="1" vertex="1"> 1551 | <mxGeometry x="458" y="391.5" width="23" height="23" as="geometry" /> 1552 | </mxCell> 1553 | <mxCell id="NU75y0YXBvxGrzugc1HJ-280" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=10;exitX=0.5;exitY=1;entryX=0.5;entryY=0;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="NU75y0YXBvxGrzugc1HJ-261" target="NU75y0YXBvxGrzugc1HJ-279" edge="1"> 1554 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1555 | <mxPoint x="481" y="341" as="sourcePoint" /> 1556 | <mxPoint x="459.8333333333335" y="469.8333333333335" as="targetPoint" /> 1557 | <Array as="points" /> 1558 | </mxGeometry> 1559 | </mxCell> 1560 | <mxCell id="NU75y0YXBvxGrzugc1HJ-281" value="CLI" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=10;fillColor=#FFFF66;" parent="1" vertex="1"> 1561 | <mxGeometry x="509" y="389.5" width="100" height="30" as="geometry" /> 1562 | </mxCell> 1563 | <mxCell id="NU75y0YXBvxGrzugc1HJ-282" value="<pre><span>JCommander</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=9;fillColor=#FFFF66;" parent="1" vertex="1"> 1564 | <mxGeometry x="764" y="319.5" width="96" height="20" as="geometry" /> 1565 | </mxCell> 1566 | <mxCell id="NU75y0YXBvxGrzugc1HJ-283" value="<pre><span>airline</span></pre>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=9;fillColor=#FFCC99;" parent="1" vertex="1"> 1567 | <mxGeometry x="764" y="353" width="96" height="20" as="geometry" /> 1568 | </mxCell> 1569 | <mxCell id="NU75y0YXBvxGrzugc1HJ-284" value="" style="endArrow=none;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;curved=1;strokeColor=#6C8EBF;dashed=1;" parent="1" source="NU75y0YXBvxGrzugc1HJ-282" target="NU75y0YXBvxGrzugc1HJ-281" edge="1"> 1570 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1571 | <mxPoint x="702.5" y="304" as="sourcePoint" /> 1572 | <mxPoint x="592.5" y="388" as="targetPoint" /> 1573 | <Array as="points"> 1574 | <mxPoint x="607.5" y="353.5" /> 1575 | </Array> 1576 | </mxGeometry> 1577 | </mxCell> 1578 | <mxCell id="NU75y0YXBvxGrzugc1HJ-285" value="" style="endArrow=none;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;curved=1;strokeColor=#6C8EBF;dashed=1;" parent="1" source="NU75y0YXBvxGrzugc1HJ-283" target="NU75y0YXBvxGrzugc1HJ-281" edge="1"> 1579 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1580 | <mxPoint x="774" y="326" as="sourcePoint" /> 1581 | <mxPoint x="569" y="400" as="targetPoint" /> 1582 | <Array as="points"> 1583 | <mxPoint x="617.5" y="363.5" /> 1584 | </Array> 1585 | </mxGeometry> 1586 | </mxCell> 1587 | <mxCell id="YNktaQSbBbT8UCnTPr-B-8" value="Sentry.io<br>" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#FFCC99;" parent="1" vertex="1"> 1588 | <mxGeometry x="40" y="941" width="90" height="15" as="geometry" /> 1589 | </mxCell> 1590 | <mxCell id="YNktaQSbBbT8UCnTPr-B-15" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=1;entryY=0.75;endFill=0;dashed=1;exitX=0.927;exitY=1.142;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;exitPerimeter=0;entryDx=0;entryDy=0;" parent="1" target="NU75y0YXBvxGrzugc1HJ-193" edge="1"> 1591 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1592 | <mxPoint x="163.16000000000008" y="885.42" as="sourcePoint" /> 1593 | <mxPoint x="200" y="957.58" as="targetPoint" /> 1594 | <Array as="points"> 1595 | <mxPoint x="160" y="932" /> 1596 | </Array> 1597 | </mxGeometry> 1598 | </mxCell> 1599 | <mxCell id="NU75y0YXBvxGrzugc1HJ-194" value="loggly.com" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#CCCCCC;" parent="1" vertex="1"> 1600 | <mxGeometry x="40" y="965" width="90" height="15" as="geometry" /> 1601 | </mxCell> 1602 | <mxCell id="YNktaQSbBbT8UCnTPr-B-21" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=1;entryY=0.5;endFill=0;dashed=1;exitX=0.5;exitY=1;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-191" target="YNktaQSbBbT8UCnTPr-B-8" edge="1"> 1603 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1604 | <mxPoint x="173.16000000000008" y="895.4200000000001" as="sourcePoint" /> 1605 | <mxPoint x="140.5" y="941.5" as="targetPoint" /> 1606 | <Array as="points"> 1607 | <mxPoint x="170" y="942" /> 1608 | </Array> 1609 | </mxGeometry> 1610 | </mxCell> 1611 | <mxCell id="YNktaQSbBbT8UCnTPr-B-22" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;entryX=1;entryY=0.5;endFill=0;dashed=1;exitX=0.559;exitY=1.07;fillColor=#dae8fc;strokeColor=#6c8ebf;exitDx=0;exitDy=0;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-191" target="NU75y0YXBvxGrzugc1HJ-194" edge="1"> 1612 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1613 | <mxPoint x="184.5" y="894" as="sourcePoint" /> 1614 | <mxPoint x="140" y="958.5" as="targetPoint" /> 1615 | <Array as="points"> 1616 | <mxPoint x="180" y="952" /> 1617 | </Array> 1618 | </mxGeometry> 1619 | </mxCell> 1620 | <mxCell id="xKLFKNOzfZAxjwdvtdzZ-1" value="Testcontainers" style="rounded=1;whiteSpace=wrap;html=1;comic=0;fontFamily=Verdana;fontSize=8;fillColor=#ffff66;" parent="1" vertex="1"> 1621 | <mxGeometry x="224" y="1512" width="80" height="15" as="geometry" /> 1622 | </mxCell> 1623 | <mxCell id="xKLFKNOzfZAxjwdvtdzZ-2" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="NU75y0YXBvxGrzugc1HJ-68" target="xKLFKNOzfZAxjwdvtdzZ-1" edge="1"> 1624 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1625 | <mxPoint x="365" y="1490" as="sourcePoint" /> 1626 | <mxPoint x="335" y="1550" as="targetPoint" /> 1627 | <Array as="points"> 1628 | <mxPoint x="355.5" y="1522" /> 1629 | </Array> 1630 | </mxGeometry> 1631 | </mxCell> 1632 | <mxCell id="eeL6GW4EWC3StHe4rQ_N-1" value="Virtual threads" style="text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;comic=0;fontFamily=Verdana;fontSize=8;" vertex="1" parent="1"> 1633 | <mxGeometry x="4.5" y="205" width="258" height="15" as="geometry" /> 1634 | </mxCell> 1635 | <mxCell id="eeL6GW4EWC3StHe4rQ_N-3" value="" style="curved=1;endArrow=none;html=1;fontFamily=Verdana;fontSize=8;endFill=0;dashed=1;fillColor=#dae8fc;strokeColor=#6c8ebf;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" target="eeL6GW4EWC3StHe4rQ_N-1"> 1636 | <mxGeometry width="50" height="50" relative="1" as="geometry"> 1637 | <mxPoint x="350" y="181" as="sourcePoint" /> 1638 | <mxPoint x="280" y="205" as="targetPoint" /> 1639 | <Array as="points"> 1640 | <mxPoint x="340" y="185" /> 1641 | <mxPoint x="310" y="195" /> 1642 | </Array> 1643 | </mxGeometry> 1644 | </mxCell> 1645 | </root> 1646 | </mxGraphModel> 1647 | </diagram> 1648 | </mxfile> 1649 | --------------------------------------------------------------------------------