diff --git a/public/authors/fernando.jpeg b/public/authors/fernando.jpeg new file mode 100644 index 000000000000..fe5b9471c85b Binary files /dev/null and b/public/authors/fernando.jpeg differ diff --git a/public/guides/backend-languages/back-vs-front.png b/public/guides/backend-languages/back-vs-front.png new file mode 100644 index 000000000000..e64f196aafc2 Binary files /dev/null and b/public/guides/backend-languages/back-vs-front.png differ diff --git a/public/guides/backend-languages/backend-roadmap-part.png b/public/guides/backend-languages/backend-roadmap-part.png new file mode 100644 index 000000000000..4ddfc1ba9c18 Binary files /dev/null and b/public/guides/backend-languages/backend-roadmap-part.png differ diff --git a/public/guides/backend-languages/javascript-interest.png b/public/guides/backend-languages/javascript-interest.png new file mode 100644 index 000000000000..76f6ae6b1e16 Binary files /dev/null and b/public/guides/backend-languages/javascript-interest.png differ diff --git a/public/guides/backend-languages/pypl-go-index.png b/public/guides/backend-languages/pypl-go-index.png new file mode 100644 index 000000000000..1af2b8f6b490 Binary files /dev/null and b/public/guides/backend-languages/pypl-go-index.png differ diff --git a/public/images/partners/spring-tile.png b/public/images/partners/spring-tile.png new file mode 100644 index 000000000000..8802e85a75cc Binary files /dev/null and b/public/images/partners/spring-tile.png differ diff --git a/src/components/GuideListItem.astro b/src/components/GuideListItem.astro index a29c0b0a2a88..45658649b81c 100644 --- a/src/components/GuideListItem.astro +++ b/src/components/GuideListItem.astro @@ -13,7 +13,7 @@ const { frontmatter, id } = guide; class:list={[ "block no-underline py-2 group text-md items-center text-gray-600 hover:text-blue-600 flex justify-between border-b", ]} - href={`/guides/${id}`} + href={frontmatter.excludedBySlug ? frontmatter.excludedBySlug : `/guides/${id}`} > {frontmatter.title} diff --git a/src/components/MarkdownFile.astro b/src/components/MarkdownFile.astro index c8a753227e30..6065d882ba53 100644 --- a/src/components/MarkdownFile.astro +++ b/src/components/MarkdownFile.astro @@ -1,5 +1,5 @@
diff --git a/src/data/guides/backend-languages.md b/src/data/guides/backend-languages.md new file mode 100644 index 000000000000..a273a2c5ef09 --- /dev/null +++ b/src/data/guides/backend-languages.md @@ -0,0 +1,394 @@ +--- +title: 'The 5 Best Backend Development Languages to Master (2024)' +description: 'Discover the best backend development languages to master in 2024.' +author: + name: 'Fernando Doglio' + url: 'https://twitter.com/deleteman123' + imageUrl: '/authors/fernando.jpeg' +excludedBySlug: '/backend/languages' +seo: + title: 'The 5 Best Backend Development Languages to Master (2024)' + description: 'Discover the best backend development languages to learn right now for career development, with practical tips from an experienced developer.' +isNew: true +type: 'textual' +date: 2024-01-18 +sitemap: + priority: 0.7 + changefreq: 'weekly' +tags: + - 'guide' + - 'textual-guide' + - 'guide-sitemap' +--- + +Web development is typically divided into two main categories: [backend development](https://roadmap.sh/backend) and [frontend development](https://roadmap.sh/frontend). Frontend development focuses on the visible part of the application for end-users, i.e. the part that users interact with, while backend development involves writing code that remains unseen but is essential for the functioning of all applications—the business logic. + +Two of the key components when it comes to backend development are the programming language that you are going to code in and the database. In this article, we will be looking into a subset of programming languages that could be used for backend development. We will be discussing the pros and cons of each and the community to help you pick the best programming language for backend development. + +Without further ado, let’s get started! + +## What are backend languages? + +When it comes to web development, there is a very clear distinction between frontend and backend technologies. + +While the frontend ecosystem is quite limited to JavaScript (and other JavaScript-based languages, like TypeScript) due to Browser compatibility, the backend (A.K.A server-side) is a very different scenario. + +![Backend Languages](/guides/backend-languages/back-vs-front.png) + +Please note that neither of those lists is extensive, as they’re both constantly growing. + +You can think of a backend language as one that “runs on the server side”. That said, by that definition, any language is a backend language because even JavaScript nowadays can be used on the backend as well (thanks to Node, Bun, and Deno). + +However, we can go one step further and say: + +> “A backend language is a server side programming language that has the tools and frameworks required to build web backends” + +That will narrow down the list a little bit. But essentially, we can think of backend languages as anything that fits the following list: + +- Is able to listen for incoming HTTP/S connections. +- Can access databases. +- Can send HTTP/S requests. +- Can access the filesystem. +- Has a rich ecosystem of tools and frameworks to build web applications. + +With those features and a rich ecosystem of libraries and frameworks, a language can definitely be considered “backend-ready”. + +## Why learn a backend programming language? + +If you’re already a backend developer, then the main reason would be to become a more versatile developer. The more languages you know, the better code you’ll write. Either because you’ve learned different ways of solving the same problem, or simply because you’ll be able to contribute to more projects. + +If, on the other hand, you’re just getting started, the main reason would be that you’re entering an industry that’s always looking for people. + +## Is the market in demand for backend developers? + +One thing to keep in mind right now is that the software development market is always in demand for devs. For example, the [U.S. Bureau of Labor Statistics gives our industry a 25% growth rate](https://www.bls.gov/ooh/computer-and-information-technology/software-developers.htm) (demand-wise) from 2022 to 2023, whereas the mean for other industries is 3%. + +According to [JetBrains, during 2022, 75% of developers were involved with web development](https://www.jetbrains.com/lp/devecosystem-2022/) in one fashion or another, so whether you’re backend devs or frontend devs, there is always someone looking for you. + +That said, we also have to consider that this industry is becoming a global industry. While some countries might still be fighting that process back, most developers can directly access the global market and work for any company in the world. + +That is a great opportunity for a backend developer who lives in an area where there isn’t a big IT industry; however, it also means competing with every other developer in the world. That might cause the illusion that the IT industry is in recession or that there are no job opportunities for developers. + +There are always opportunities; it’s just that you're now after the same job that many others from around the world are after as well. + +That said, backend devs are always in high demand because they’re the bread and butter of any web application. They’re always required to create the underlying platform that will power most systems, so the key to standing out here is to stay up-to-date with the industry’s trends and technologies. + +Don’t get me wrong. You can’t possibly be expected to keep up with every single programming language that is released or with all the new frameworks that are created every month. However, keeping an eye on the industry and understanding what survives long enough to become a new industry standard is important. You have to keep updating yourself and learning new technologies/skills constantly; that way, you’ll stay relevant. + +## Is learning a backend language good for your career? + +Whether you’re a frontend developer looking to become full-stack (someone who can code both the backend and the frontend of an application), or if you’re new to the industry and you’re thinking if this might be the best place for you, the answer is “yes”. + +Backend developers are always in demand, so adding a new tool to your already existing toolbelt (if you’re already a dev) will only make you more flexible in the eyes of your employer. + +But remember, a language is just a language until you give it context. If you’re wondering whether or not one of the backend languages in this article might be for you, the answer will always be “yes”. However, understand that if backend development is new to you, you will also need to pick up other skills and backend technologies around the language, such as: + +- Understanding HTTP. +- Learning Structured Query Language (SQL) to query your databases. +- Understanding how APIs work. +- What server side rendering means and how to take advantage of it. +- What web servers are and how to use them/build them. + +Otherwise, you’ll understand the language, but you won’t know how to use it for the role of backend development. + +## Top 5 Backend Languages to Learn for Web Development + +With that introduction out of the way, let’s see the top 5 backend programming languages that you might want to learn if you’re looking to broaden your horizons in the server-side world. +The languages we’ll cover are: + +- Python +- Java +- JavaScript +- PHP +- Go + +Why these languages specifically? + +They’re some of the most known and used languages in the industry right now (see [StackOverflow’s 2023 Developer Survey](https://survey.stackoverflow.co/2023/#most-popular-technologies-language-prof)). That said, keep in mind that these are all great options, and they’re not presented here in any particular order. + +### Python + +Python has been around for decades already and while it’s never been the most popular option, it has always managed to stay within the top 5 choices. People love it for being easy to read, straightforward, and able to handle all sorts of tasks, making it a top pick for developers globally. Sure, Python's got a big name in data processing and machine learning, but let's not forget its solid impact on web development!. + +What makes Python extra appealing, especially for beginners, is the fact that reading and writing it feels very much like English (or at least, as pseudo code). This makes it a top choice for folks just starting out in coding. + +#### Beginner Accessibility and Learning Resources + +One of Python's standout features is its beginner-friendly syntax, making it an ideal language for those new to programming. The emphasis on readability and the absence of complex syntax (for the most part), eases the learning curve, enabling new developers to quickly grasp fundamental concepts. + +Python's community plays a critical role in its accessibility. Abundant learning resources, tutorials, and documentation are readily available, empowering beginners to progress from basic programming principles to advanced backend development seamlessly. Online platforms like Codecademy, Coursera, realpython.com, and even Google offer comprehensive courses tailored to all skill levels. + +#### Practical Applications and Popular Frameworks + +Python's versatility is evident in its applicability across a spectrum of industries, from web development and data science to artificial intelligence and automation. In the context of backend development, Python shines brightly with its two standout frameworks: [Django](https://www.djangoproject.com/) and [Flask](https://github.com/pallets/flask). + +##### Django + +So, let's talk about Django – it's like the superhero of web frameworks, at least in the world of Python. This high-level powerhouse is all about that "batteries-included" style, giving you a whole package of tools and features that make development lightning-fast. It follows the [Model-View-Controller](https://www.crio.do/blog/understand-mvc-architecture/) (MVC) architecture that gives your web applications a solid structure, making them scalable and easy to keep up. + +Part of that whole “batteries-included” motto means that it comes with an admin panel, an [ORM](https://www.freecodecamp.org/news/what-is-an-orm-the-meaning-of-object-relational-mapping-database-tools/) (Object-Relational Mapping) for smooth data handling, and security features that make sure your project is secured out-of-the-box. All these goodies work together, making Django a top choice for projects, whether they're a walk in the park or a brain-bending challenge. + +##### Flask + +On the other hand, Flask, a micro-framework, takes a minimalist approach, providing developers with the flexibility to choose components as needed. While Flask may be lighter than Django, it doesn't compromise on functionality. Its simplicity and modularity make it an excellent choice for small to medium-sized projects, allowing developers to tailor the framework to meet specific project requirements. + +Both Django and Flask underscore Python's suitability for backend development, offering developers frameworks that cater to diverse project needs while maintaining Python's hallmark readability and efficiency. + +#### Pros and Cons of Python + +As with all other backend languages in this article, Python has some pros and cons you should consider before picking it as your first backend language. + +##### Pros + +- The syntax is very easy to learn because it’s very much like writing English. +- The ecosystem is quite mature and has some nice frameworks that will contain all the tools you need to get started + +##### Cons + +- It’s not the most popular backend language, so while the frameworks available are constantly updated, they aren’t necessarily using the latest technology trends. +- The GIL (Global Interpreter Lock) limits Python’s performance in multi-threaded applications. + +### Java + +Java has a massive presence and for good reason (according to [JetBrain’s survey in 2022, Java was used by 48% of developers](https://w3techs.com/technologies/details/pl-php)).It's the kind of programming language that's everywhere – serving up websites, running your favorite apps, and even powering big-scale enterprise systems. + +#### Is it worth learning Java? + +Now, learning Java, (a strongly typed, object oriented programming language (OOP), is a journey worth taking, but it's not a walk in the park. It's a bit like climbing a mountain – you start at the bottom with the basics, and as you ascend, you get into the nitty-gritty of things like object-oriented programming. The process will force you to learn a lot, which is a great thing, by the end you’ll have a lot of understanding of mechanics and concepts around OOP that can be extrapolated into other languages. However, that can also be overwhelming to some developers who just want to learn by building mini-projects. In those situations, the learning curve of Java might be too long (not steep, but long because there is a lot more to cover than with alternatives such as Python or JavaScript). + +That said, the community is big and there are tons of resources, from online courses to forums, helping you navigate the Java landscape. And good reason, considering Java has been around for quite a while. + +#### Use Cases and Robust Ecosystem + +Java's everywhere. From web development to mobile apps, and even diving into the world of big data, Java's got its fingerprints all over. And if it’s not the language itself, it’s the Java Virtual Machine (JVM) powering some other language, like Spark. + +Java’s the language of choice for many big enterprises given its innate robustness (the first version of the language was released in 1995, it’s had quite a long time to evolve), and its robust ecosystem of libraries and frameworks makes it a go-to for developers. + +#### Pros and Cons of Java + +For all its power and robustness, there are some negative (and positive) aspects to picking Java as your first backend language. + +##### Pros + +- Java has a mature ecosystem with a varied array of libraries and frameworks for you to try. The community has been working on them and evolving them for years in many cases, so they’re quite ready to develop enterprise-ready solutions. +- Java’s multithreading support makes it ideal for some processing-heavy tasks in the backend of big applications. +- Java’s heavy focus on object oriented programming makes it a great option for developers who enjoy that paradigm. + +##### Cons + +- Java’s verbose syntax might be a problem for some people. While you can still code without an issue, it all comes down to personal preference. If you like to write less and do more with your code, Java might not be the ideal pick for you. It’s verbosity can increase development time in some situations. +- Java applications can have higher memory consumption than others, especially compared to others like PHP. While the reason for this is their entire architecture, the fact remains. + +### JavaScript (Node.js) + +With Node.js in the mix, JavaScript becomes a lingua franca in web development. In other words, you can use the same language both for the frontend (client side) and for the backend (server side) of your application. + +That said, keep in mind that depending on the framework you’re using, while it might be JavaScript on both sides, the code and logic you use can be considerably different. + +Remember that frontend code is often confused with framework code (as in React, Angular, Vue, etc) by some developers, simply because it’s all JavaScript. But don’t be confused, the backend lacks a lot of the extra “juice” added by the browser (like the DOM API and others). + +#### Learning Advantages of Node.js + +If you've got the basics of JavaScript down, even if your experience has only been on the frontend, diving into Node.js is like leveling up. It lets you use the same language for both frontend and backend, which means less time juggling languages and more time building cool stuff. + +The event-driven, non-blocking architecture is one of the main features that make the language so special – it makes your web apps fast and efficient without you having to learn more complex concepts such as multi-threading. Plus, the community is constantly growing and there are tutorials everywhere to guide you through the Node.js universe. + +If you were to rank languages based on the amount of content out there to learn them, JavaScript would be one of the first ones (if not the first one) on the list. + +#### Key Frameworks and Development Tools + +Now, let's talk about frameworks. In the case of JavaScript, this topic is so varied that recommending a single option for someone just getting started is really hard. + +For example, if you want to go frontend agnostic, or in other words, you don’t care about the technology being used to develop the client side of your app, then a good starting option would be [Express.js](https://expressjs.com/). This framework used to be the industry standard. And while that’s no longer the case, it’s still a perfect first choice if you’re looking for something with the required functionality to make your life a lot easier. + +Now, if on the other hand, you’re looking to build the frontend and the backend at the same time, then I would recommend going with [Next.js](https://nextjs.org/) if you’re already familiar with React. Or if on the other hand, you prefer Vue.js, then definitely try [Nuxt](https://nuxt.com/). Either one of those will help you get the job done with all the bells and whistles you can think of. + +#### Does it make sense to pick up JavaScript as a backend language? + +The answer to this question is always going to be “yes”, whether you’re coming from the frontend and you already have JS experience or if you’re picking it up from scratch. In fact, according to [StackOverflow’s 2023 survey, JavaScript is the most used language by professionals](https://survey.stackoverflow.co/2023/#most-popular-technologies-language-prof) (with 65.85% of the votes). + +![JavaScript Interest](/guides/backend-languages/javascript-interest.png) + +If you’re coming from the client side, then adopting JS for your backend will let you start working in minutes. You’ll probably spend more time learning the backend-specific concepts than the language itself. + +On the other hand, if you’re coming from zero, or from other programming languages, JS has some quirks, for sure, but if you go the JS route, you’re already making way for a potential switch into the frontend in the future. Who knows, maybe in a few months you’ll also want to start working on the frontend, and by having picked up JS as your main backend language, you have 90% of the work already cut for you. + +There is really no downside to picking JS as your first backend language. + +#### Pros and Cons of JavaScript + +While there might not be a downside to picking JS, there is no perfect language out there, so let’s take a look at some of the pros and cons before moving on to the next one. + +##### Pros + +- Going with JavaScript, you’re using the same language on the backend and on the frontend. There is less cognitive load while switching environments if you’re the one coding both sides of the app. +- The ecosystem around JavaScript is one of the richest ones you can find. The community is constantly pushing the limits of the language and coming up with new solutions to everyday problems. +- The simple syntax allows you to reduce development time because you don’t have to write as much code to achieve good results. + +##### Cons + +- Asynchronous programming can be hard for some developers coming from other languages, like Python for example. +- The lack of strong types in JavaScript can cause some problems for big codebases. +- The single-thread nature of the language makes it really hard to implement CPU-intensive tasks. While there is support for multi-threading, it’s not extensive nor commonly used. +- Debugging asynchronous code can be difficult for new developers given the non-linear nature of it. + +### PHP + +Now, if you’re looking for something very well established in the web development industry, just like Java but with a shorter learning curve, then you’re probably looking for PHP. + +> As a note about PHP’s relevancy, while many developers might claim that PHP is a dying tech, according to [W3Techs, over 75% of websites with a backend use PHP](https://w3techs.com/technologies/details/pl-php). + +It's the glue that holds a ton of websites together, and its longevity in the web development scene is no accident. + +#### Ease of Mastery and Vast Library Support + +If you're diving into PHP, you wouldn’t be so wrong (no matter what others might tell you). It's got a gentle learning curve, which means you can start building things pretty quickly. Getting everything set up and working will probably take you 10 minutes, and you’ll be writing your first “hello world” 5 minutes after that. + +The vast community support and an ocean of online resources make mastering PHP a breeze. Plus, its library support is like having a toolkit that's always expanding – you'll find what you need, whether you're wrangling databases, handling forms, or making your website dance with dynamic content. + +If you’re looking to pick up PHP, look for the LAMP stack, which stands for **L**inux, **A**pache, **M**ySQL, and **P**HP. With that tech stack, you’ll have everything you need to start creating websites in no time. + +#### Modern PHP Frameworks and Their Impact + +If we’re talking about PHP frameworks, then we gotta talk about [Laravel](https://laravel.com/) and [Symfony](https://symfony.com/). They are like the rockstars of the modern PHP world. + +Laravel comes with a lot of tools and features that help you speed up your development process. On the other side, Symfony has a modular architecture, making it a solid choice for projects of all sizes. + +These frameworks showcase how PHP has evolved, staying relevant and powerful in the ever-changing landscape of web development. + +#### Pros and Cons of PHP + +Let’s take a look at some of the most common advantages of going with PHP for the backend and some cons to discuss why it might not be the best choice for you. + +##### Pros + +- PHP is designed for web development, which still makes it a very popular choice for a backend language. +- PHP’s community is quite big, considering how old the language is, so if you need help, chances are, someone has the answer you’re looking for. + +##### Cons + +- One of the major complaints developers have about the language is its inconsistent function naming convention. While not a huge problem, it makes it very hard for developers to intuitively find the right function by name. This causes you to constantly verify your code against the documentation to make sure you’re not making mistakes. + +### Go + +Now, let's close in on Go, the programming language born at Google that's all about simplicity and efficiency. Go embraces a clean and straightforward syntax. Despite its simplicity, it focuses heavily on performance, making it an excellent choice for building modern, scalable applications. + +According to the [PYPL index](https://pypl.github.io/PYPL.html) (using Google searches to weigh interest of developers in a particular language), we can see a clear worldwide growing interest in Go from the development community: + +![Go Interest](/guides/backend-languages/pypl-go-index.png) + +#### Concurrency and Scalability + +Go stands out in the crowd, especially when it comes to handling concurrency and scalability. Its built-in support for concurrent programming, through goroutines and channels, makes it a standout choice for applications that need to juggle multiple tasks simultaneously. This makes Go particularly adept at handling the demands of today's highly concurrent and distributed systems. In other words, Go is a great choice for building microservices, a type of system that is very commonly used as the backend for complex web applications. + +So yes, very relevant. + +#### Learning Curve and Developer Productivity + +Learning Go is a smooth ride, thanks to its simplicity and extensive documentation. Developers often find themselves quickly transitioning from understanding the basics to building robust applications. + +The language's focus on developer productivity is evident in its quick compilation times and the absence of excessive boilerplate code, allowing developers to concentrate on building features rather than wrestling with the language itself. + +#### Pros and Cons of Go + +Let’s take a look at some pros and cons for the last programming language on our list. + +##### Pros + +- Go code compiles quickly, which in turn leads to very fast development cycles. This is a big plus if you’re developing a big application with a large codebase because other options might slow down your process with their compilation times. +- Go's syntax is simple enough to make it easy to learn and understand for new developers. + +##### Cons + +- Go’s ecosystem is quite young when compared to the other alternatives here, so the maturity of the tools available might not be the same as, for example, Java or JavaScript tooling. + +### Choosing the Ideal Backend Language + +So, are these the best backend programming languages out there? Is there an absolute “best” backend programming language? + +As you’ve probably seen by now, there is no “perfect” or “ideal” backend language. When it comes to picking one out of the huge number of alternatives, you have to consider other aspects outside of the language itself: + +- What’s the size of your project? Are you building a large-scale platform? Or just a basic static website? +- Do you mind spending more time learning or do you need to be efficient and start coding right away? +- Do you already have some programming knowledge and would like to pick something that resembles what you already know? Or would you like to pick up something that’s entirely different? +- Are you alone? Or are you part of a team? + +Once you’ve answered those questions, you’ll probably have some idea of where to go, but then you should look into the language itself, specifically into: + +- Does it have enough learning resources for you? +- How big and active is the community around it? +- Are the main frameworks still under development? Or have they been parked for a while? + +In the end, you’re evaluating the language and its ecosystem, making sure they’re both evolving right along the web industry. If you find that there are aspects that are falling behind, then it probably isn’t a good choice. + +A handy tool when trying to evaluate a language like that is [roadmap.sh](https://roadmap.sh). + +[![Roadmap.sh](/guides/backend-languages/backend-roadmap-part.png)](https://roadmap.sh/backend) + +

Small section of the full backend roadmap available on roadmap.sh

+ +There you’ll find community-maintained roadmaps for many career paths within software development. In particular, for this article, the [backend roadmap](https://roadmap.sh/backend) is a great place to start, because while picking a backend language is important, you’ll see there that it’s not just about the language. In fact, there is a lot of tech around the language that is also required (I’m referring to databases, git, understanding how client-server communication works, and a big “etc). + +### Jumpstarting Your Backend Development Journey + +To get started with your backend development journey, it's crucial to have a roadmap that guides you through the learning process and equips you with the skills to build robust and scalable backend systems. + +Lucky for you, if you’re reading this, that means you’ve found the most complete and comprehensive roadmap online: [roadmap.sh](https://roadmap.sh), the current [backend roadmap](https://roadmap.sh/backend) is filled with details of everything you should and could (optionally) learn in your journey to becoming a backend developer. + +### Guided Learning: From Online Courses to Bootcamps + +Online courses and bootcamps serve as invaluable companions on your learning expedition. Platforms like Udemy, Coursera, and freeCodeCamp offer comprehensive backend development courses. + +These resources not only cover programming languages like Python, Java, or JavaScript but also dive deep into frameworks like Django, Express.js, or Laravel. For those seeking a more immersive experience, coding bootcamps provide intensive, hands-on training to fast-track your backend development skills. + +Whatever choice you go for, make sure you’re not following trends or just copying the learning methods of others. Learning is a very personal experience and what works for others might not work for you, and vice versa. So make sure to do the proper research and figure out what option works best for you. + +### Building Community Connections for Learning Support + +Joining developer communities (there are several on Twitter for example), forums like Stack Overflow, or participating in social media groups dedicated to backend development creates a network of support. + +Engaging with experienced developers, sharing challenges, and seeking advice fosters a collaborative learning environment. Attend local meetups or virtual events if you can to connect with professionals in the field, gaining insights and building relationships that can prove invaluable throughout your journey. + +### Think about you and your project + +There are many ways to go about picking the ideal backend language for you. If there is anything you should take home with you after reading this article, it is that most languages are equivalent in the sense that you’ll be able to do pretty much everything with any of them. + +So what criteria can you use to pick the “right one” for you? + +The questions you should also be asking yourself are: + +- What’s your preference for a language? Do you like Object Oriented Programming (OOP) or are you more of a functional programming type of dev? Do you like statically typed programming languages or loosely typed ones? Personal preferences should also play an important role at the time of picking your ideal programming language. +- What does my project need? After all, project requirements sometimes dictate technology. Keep that in mind, check if the project’s needs and your personal preferences align, and try to weigh in pros and cons if they don’t. + +In the end, personal preference and actual project requirements (if you have any) are very important, because both will influence how much you enjoy (or don’t enjoy) the learning process. + +### Crafting a Portfolio to Display Your Backend Skills: + +As you accumulate skills and knowledge, showcase your journey through a well-crafted portfolio. Include projects that highlight your backend skills, demonstrating your ability to - design databases, implement server-side logic, and integrate with client side technologies. Whether it's a dynamic web application, a RESTful API, or a data-driven project, your portfolio becomes a tangible representation of your backend development capabilities for potential employers or collaborators. + +When it comes to deciding where to publish this portfolio, you have some options, such as directly on your GitHub profile (if you have one), or perhaps on your own personal website where you can share some design thoughts about each project along with the code. + +In the end, the important thing is that you should be sharing your experience somewhere, especially when you don’t have working experience in the field. + +### Conclusion + +In the end, there are many backend programming languages to choose from, and what language you go for, is up to you and your particular context/needs. All I can do is guide you to the door, but you have to cross it yourself. Some interesting options are: + +- Python with its English-like syntax. +- Java with its formal syntax and enterprise support. +- JavaScript with its flexibility and ability to jump between frontend and backend. +- PHP with its proven record of success. +- And Go, with its performance and scalability focus. + +You’re the one who gets to decide, but just know that no matter what you choose, getting started in backend development is a one-way street. You’ll be learning from this moment on, and you’ll be jumping from one language to the other as the field evolves. + +Remember that there is a very detailed version of a [backend roadmap here](https://roadmap.sh/backend), it might be a great place to get started! And if you’re also interested in frontend development, there is an [equally handy roadmap](https://roadmap.sh/frontend) here as well! + + + + + + + + + diff --git a/src/data/question-groups/javascript/javascript.md b/src/data/question-groups/javascript/javascript.md index 9603b74d208c..3d19692d76b3 100644 --- a/src/data/question-groups/javascript/javascript.md +++ b/src/data/question-groups/javascript/javascript.md @@ -4,7 +4,7 @@ briefTitle: 'JavaScript' briefDescription: 'Test, rate and improve your JavaScript knowledge with these questions.' title: 'JavaScript Questions' description: 'Test, rate and improve your JavaScript knowledge with these questions.' -isNew: true +isNew: false seo: title: 'JavaScript Questions' description: 'Curated list of JavaScript questions to test, rate and improve your knowledge. Questions are based on real world experience and knowledge.' diff --git a/src/data/question-groups/nodejs/content/commonjs-vs-esm.md b/src/data/question-groups/nodejs/content/commonjs-vs-esm.md new file mode 100644 index 000000000000..f9d8b5649702 --- /dev/null +++ b/src/data/question-groups/nodejs/content/commonjs-vs-esm.md @@ -0,0 +1,17 @@ +CommonJS and ES Modules are two different module systems in JavaScript. CommonJS is the module system used in Node.js, while ES Modules are the module system used in browsers and TypeScript. + +## CommonJS + +```js +const fs = require('fs'); +``` + +CommonJS modules are loaded synchronously. This means that the module is loaded and evaluated before the code using the module is executed. It uses `require()` to load modules and `module.exports` to export modules. + +## ES Modules + +```js +import fs from 'fs'; +``` + +ES Modules are loaded asynchronously. This means that the module is loaded and evaluated when the module is used. It uses `import` to load modules and `export` to export modules. diff --git a/src/data/question-groups/nodejs/content/error-handling.md b/src/data/question-groups/nodejs/content/error-handling.md new file mode 100644 index 000000000000..269e0669074f --- /dev/null +++ b/src/data/question-groups/nodejs/content/error-handling.md @@ -0,0 +1,66 @@ +There are four fundamental strategies to report errors in Node.js: + +## `try...catch` blocks + +`try...catch` blocks are the most basic way to handle errors in JavaScript. They are synchronous and can only be used to handle errors in synchronous code. They are not suitable for asynchronous code, such as callbacks and promises. + +```js +import fs from 'node:fs'; + +try { + const data = fs.readFileSync('file.md', 'utf-8'); + console.log(data); +} catch (err) { + console.error(err); +} +``` + +## Callbacks + +Callbacks are the most common way to handle errors in asynchronous code. They are passed as the last argument to a function and are called when the function completes or fails. + +```js +import fs from 'node:fs'; + +fs.readFile('file.md', 'utf-8', (err, data) => { + if (err) { + console.error(err); + return; + } + + console.log(data); +}); +``` + +## Promises + +Promises are a more modern way to handle errors in asynchronous code. They are returned by functions and can be chained together. They are resolved when the function completes and rejected when it fails. + +```js +import fs from 'node:fs/promises'; + +fs.readFile('file.md', 'utf-8') + .then((data) => { + console.log(data); + }) + .catch((err) => { + console.error(err); + }); +``` + +## Event emitters + +Event emitters are a more advanced way to handle errors in asynchronous code. They are returned by functions and emit an `error` event when they fail. They are resolved when the function completes and rejected when it fails. + +```js +import fs from 'node:fs'; + +const reader = fs.createReadStream('file.md', 'utf-8'); +reader.on('data', (data) => { + console.log(data); +}); + +reader.on('error', (err) => { + console.error(err); +}); +``` diff --git a/src/data/question-groups/nodejs/content/exit-codes.md b/src/data/question-groups/nodejs/content/exit-codes.md new file mode 100644 index 000000000000..f544b60abe57 --- /dev/null +++ b/src/data/question-groups/nodejs/content/exit-codes.md @@ -0,0 +1,18 @@ +The following exit codes are used in Node.js: + +- `0`: Success +- `1`: Uncaught Fatal Exception +- `2`: Unused +- `3`: Internal JavaScript Parse Error +- `4`: Internal JavaScript Evaluation Failure +- `5`: Fatal Error +- `6`: Non-function Internal Exception Handler +- `7`: Internal Exception Handler Run-Time Failure +- `8`: Unused +- `9`: Invalid Argument +- `10`: Internal JavaScript Run-Time Failure +- `12`: Invalid Debug Argument +- `13`: Uncaught Exception +- `14`: Unhandled Promise Rejection +- `15`: Fatal Exception +- `16`: Signal Exits diff --git a/src/data/question-groups/nodejs/content/input-from-command-line.md b/src/data/question-groups/nodejs/content/input-from-command-line.md new file mode 100644 index 000000000000..db6137f22e47 --- /dev/null +++ b/src/data/question-groups/nodejs/content/input-from-command-line.md @@ -0,0 +1,18 @@ +In order to take user input from the command line, you can use the `readline` module. It provides an interface for reading data from a Readable stream (such as `process.stdin`) one line at a time. + +```js +import readline from 'node:readline'; +import { stdin as input, stdout as output } from 'node:process'; + +const rl = readline.createInterface({ input, output }); + +rl.question('What do you think of Node.js? ', (answer) => { + console.log(`Thank you for your valuable feedback: ${answer}`); + rl.close(); +}); + +rl.on('close', () => { + console.log('\nBYE BYE !!!'); + process.exit(0); +}); +``` diff --git a/src/data/question-groups/nodejs/content/order-priority.md b/src/data/question-groups/nodejs/content/order-priority.md new file mode 100644 index 000000000000..2a07b207e105 --- /dev/null +++ b/src/data/question-groups/nodejs/content/order-priority.md @@ -0,0 +1,25 @@ +Order priorities of `process.nextTick`, `Promise`, `setTimeout` and `setImmediate` are as follows: + +1. `process.nextTick`: Highest priority, executed immediately after the current event loop cycle, before any other I/O events or timers. +2. `Promise`: Executed in the microtask queue, after the current event loop cycle, but before the next one. +3. `setTimeout`: Executed in the timer queue, after the current event loop cycle, with a minimum delay specified in milliseconds. +4. `setImmediate`: Executed in the check queue, but its order may vary based on the system and load. It generally runs in the next iteration of the event loop after I/O events. + +```js +console.log('start'); +Promise.resolve().then(() => console.log('Promise')); +setTimeout(() => console.log('setTimeout'), 0); +process.nextTick(() => console.log('process.nextTick')); +setImmediate(() => console.log('setImmediate')); +console.log('end'); + +// Output: +// start +// end +// process.nextTick +// Promise +// setTimeout +// setImmediate +``` + +In summary, the order of execution is generally `process.nextTick` > `Promise` > `setTimeout` > `setImmediate`. However, keep in mind that the behavior may vary in specific situations, and the order might be influenced by factors such as system load and other concurrent operations. diff --git a/src/data/question-groups/nodejs/content/process-argv.md b/src/data/question-groups/nodejs/content/process-argv.md new file mode 100644 index 000000000000..c5559c1a1ba8 --- /dev/null +++ b/src/data/question-groups/nodejs/content/process-argv.md @@ -0,0 +1,15 @@ +`process.argv` is an array containing the command-line arguments passed when the Node.js process was launched. The first element is the path to the Node.js executable, the second element is the path to the JavaScript file being executed, and the remaining elements are the command-line arguments. + +```js +node index.js hello world +``` + +```js +console.log(process.argv); +// [ +// '/usr/local/bin/node', -> path to the Node.js executable +// '/Users/username/projects/nodejs/index.js', -> path to the JavaScript file being executed +// 'hello', -> command-line argument +// 'world' -> command-line argument +// ] +``` diff --git a/src/data/question-groups/nodejs/content/process-cwd-vs-dirname.md b/src/data/question-groups/nodejs/content/process-cwd-vs-dirname.md new file mode 100644 index 000000000000..740698f3b8d7 --- /dev/null +++ b/src/data/question-groups/nodejs/content/process-cwd-vs-dirname.md @@ -0,0 +1,9 @@ +`process.cwd()` returns the current working directory of the Node.js process, while `__dirname` returns the directory name of the current module. + +```js +console.log(process.cwd()); +// /Users/username/projects/nodejs + +console.log(__dirname); +// /Users/username/projects/nodejs/src +``` diff --git a/src/data/question-groups/nodejs/content/web-server.md b/src/data/question-groups/nodejs/content/web-server.md new file mode 100644 index 000000000000..06a208e61143 --- /dev/null +++ b/src/data/question-groups/nodejs/content/web-server.md @@ -0,0 +1,14 @@ +To create a minimal `Hello, World!` HTTP server in Node.js, you can use the `http` module. It provides an HTTP server, and the createServer() method sets up a server instance with a callback function to handle incoming requests + +```js +import http from 'node:http'; + +const server = http.createServer((req, res) => { + res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.end('Hello World\n'); +}); + +server.listen(3000, () => { + console.log('Server running at http://localhost:3000/'); +}); +``` diff --git a/src/data/question-groups/nodejs/nodejs.md b/src/data/question-groups/nodejs/nodejs.md new file mode 100644 index 000000000000..8bca6d97a2bd --- /dev/null +++ b/src/data/question-groups/nodejs/nodejs.md @@ -0,0 +1,227 @@ +--- +order: 1 +briefTitle: 'Node.js' +briefDescription: 'Test, rate and improve your Node.js knowledge with these questions.' +title: 'Node.js Questions' +description: 'Test, rate and improve your Node.js knowledge with these questions.' +isNew: true +seo: + title: 'Node.js Questions' + description: 'Curated list of Node.js questions to test, rate and improve your knowledge. Questions are based on real world experience and knowledge.' + keywords: + - 'node.js quiz' + - 'node.js questions' + - 'node.js interview questions' + - 'node.js interview' + - 'node.js test' +sitemap: + priority: 1 + changefreq: 'monthly' +questions: + - question: What is Node.js? + answer: Node.js is an open-source and cross-platform JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. + topics: + - 'Core' + - 'Beginner' + - question: What is REPL in Node.js? + answer: | + REPL stands for Read-Eval-Print-Loop. It is an interactive shell that allows you to execute JavaScript code and view the output immediately. It is useful for testing small snippets of code and experimenting with the Node.js API. + topics: + - 'Core' + - 'Beginner' + - question: What is the difference between Node.js and JavaScript? + answer: Node.js is a runtime environment for JavaScript. JavaScript is a programming language used to create web applications. Node.js is a runtime environment that can execute JavaScript code outside of a web browser. + topics: + - 'Core' + - 'Beginner' + - question: What is Event Loop in Node.js? + answer: | + The event loop is a single-threaded loop responsible for handling all asynchronous tasks in Node.js. It continuously checks for events and executes associated callback functions, allowing Node.js to handle asynchronous tasks efficiently. Its non-blocking I/O model ensures that it can process multiple operations simultaneously without waiting for one to complete before moving on to the next, contributing to its scalability and performance. [Watch this video](https://www.youtube.com/watch?v=8aGhZQkoFbQ) to learn more about the topic. + topics: + - 'Core' + - 'Intermediate' + - question: What is the difference between Node.js and AJAX? + answer: | + Node.js is a server-side runtime for JavaScript, while AJAX is a client-side technique for asynchronous communication with the server. + topics: + - 'Core' + - 'Beginner' + - question: What are modules in Node.js? + answer: | + Modules are reusable blocks of code that can be imported into other files. They are used to encapsulate related code into a single unit of code that can be used in other parts of the program. It allow us to split our code into multiple files and reuse it across multiple files. Some built-in modules include `fs`, `http`, `path`, `url`, `util`, etc. + topics: + - 'Core' + - 'Beginner' + - question: Difference between CommonJS and ESM? + answer: commonjs-vs-esm.md + topics: + - 'Core' + - 'Intermediate' + - question: What is the `global` object in Node.js? + answer: | + The `global` object is a global namespace object that contains all global variables, functions, and objects. It is similar to the `window` object in the browser. It can be accessed from anywhere in the program without importing it. + topics: + - 'Core' + - 'Intermediate' + - question: What is the difference between `process.nextTick()` and `setImmediate()`? + answer: | + `process.nextTick()` and `setImmediate()` are both used to schedule a callback function to be executed in the next iteration of the event loop. The difference is that `process.nextTick()` executes the callback at the end of the current iteration of the event loop, while `setImmediate()` executes the callback at the beginning of the next iteration of the event loop. + topics: + - 'Core' + - 'Intermediate' + - question: What is `setInterval()`? + answer: | + `setInterval()` is a global function that helps you execute a function repeatedly at a fixed delay. It returns an interval ID that uniquely identifies the interval, which can be used to cancel the interval using the `clearInterval()` function. + topics: + - 'Core' + - 'Beginner' + - question: What is `setTimeout()`? + answer: | + `setTimeout()` is a global function that helps you execute a function after a specified delay. It returns a timeout ID that uniquely identifies the timeout, which can be used to cancel the timeout using the `clearTimeout()` function. + topics: + - 'Core' + - 'Beginner' + - question: What are Event Emitters in Node.js? + answer: | + Event Emitters is a class that can be used to emit named events and register listeners for those events. It is used to handle asynchronous events in Node.js. + topics: + - 'Core' + - 'Intermediate' + - question: What is `npm`? + answer: | + `npm` is a package manager for Node.js. It is used to install, update, and remove packages from the Node.js ecosystem. It is also used to manage dependencies for Node.js projects. + topics: + - 'Core' + - 'Beginner' + - question: What is the full form of `npm`? + answer: | + `npm` stands for Node Package Manager. + topics: + - 'Core' + - 'Beginner' + - question: What is `npx`? + answer: | + `npx` is a tool that allows you to run Node.js packages without installing them. It is used to execute Node.js packages that are not installed globally. + topics: + - 'Core' + - 'Beginner' + - question: What is `process.cwd()`? + answer: | + `process.cwd()` returns the current working directory of the Node.js process. It is similar to `pwd` in Unix. + topics: + - 'Core' + - 'Intermediate' + - question: What is the difference between `process.cwd()` and `__dirname`? + answer: process-cwd-vs-dirname.md + topics: + - 'Core' + - 'Intermediate' + - question: What is `__filename`? + answer: | + `__filename` is a global variable that contains the absolute path of the current file. + topics: + - 'Core' + - 'Intermediate' + - question: What is `process.argv`? + answer: process-argv.md + topics: + - 'Core' + - 'Intermediate' + - question: What is the purpose of `fs` module? + answer: | + The File System (fs) module is used to perform file operations such as reading, writing, and deleting files. All file system operations have synchronous and asynchronous forms. + topics: + - 'Core' + - 'Beginner' + - question: What is the purpose of `path` module? + answer: | + The Path module is used to perform operations on file and directory paths. It provides methods for resolving and normalizing paths, joining paths, and extracting file and directory names. + topics: + - 'Core' + - 'Beginner' + - question: How to read a file in Node.js? + answer: | + The `fs.readFile()` method is used to read the contents of a file asynchronously. It takes the path of the file to be read and a callback function as arguments. The callback function is called with two arguments, `err` and `data`. If an error occurs while reading the file, the `err` argument will contain the error object. Otherwise, the `data` argument will contain the contents of the file. + topics: + - 'Core' + - 'Beginner' + - question: How to load environment variables from a `.env` file in Node.js? + answer: | + The `dotenv` package is used to load environment variables from a `.env` file into `process.env`. It is used to store sensitive information such as API keys, database credentials, etc. in a `.env` file instead of hardcoding them in the source code. + topics: + - 'Core' + - 'Beginner' + - question: How to access environment variables in Node.js? + answer: | + Environment variables can be accessed using the `process.env` object. It is an object that contains all the environment variables defined in the current process. + topics: + - 'Core' + - 'Beginner' + - question: How to take user input from the command line in Node.js? + answer: input-from-command-line.md + topics: + - 'CLI' + - 'Beginner' + - question: How to create a web server in Node.js? + answer: web-server.md + topics: + - 'Core' + - 'Beginner' + - question: What are streams in Node.js? + answer: | + Streams are objects that allow you to read data from a source or write data to a destination in a continuous manner. They are used to handle large amounts of data efficiently. + topics: + - 'Core' + - 'Advanced' + - question: What is difference between `fork` and `spawn` methods of `child_process` module? + answer: | + The `fork` method is used when you want to run another JavaScript file in a separate worker. It's like having a friend with a specific task. You can communicate with them via messages and they can send messages back to you. The `spawn` method is used when you want to run a command in a separate process. It's like asking someone to do a specific. You can communicate with them via stdin/stdout/stderr, but it's more like giving orders and getting results. + topics: + - 'Core' + - 'Advanced' + - question: What is the `os` module? + answer: | + The `os` module provides methods for interacting with the operating system. It can be used to get information about the operating system, such as the hostname, platform, architecture, etc. + topics: + - 'Core' + - 'Intermediate' + - question: Can you access the DOM in Node.js? + answer: | + No, you cannot access the DOM in Node.js because it does not have a DOM. It is a server-side runtime for JavaScript, so it does not have access to the browser's DOM. + topics: + - 'Core' + - 'Intermediate' + - question: What is Clustering in Node.js? + answer: | + Clustering is a technique used to distribute the load across multiple processes. It is used to improve the performance and scalability of Node.js applications. + topics: + - 'Core' + - 'Advanced' + - question: How can memory leaks happen in Node.js? + answer: | + Memory leaks happen when a program allocates memory but does not release it when it is no longer needed. This can happen due to bugs in the program or due to the way the program is designed. In Node.js, memory leaks can happen due to the use of closures, circular references, and global variables. + topics: + - 'Core' + - 'Intermediate' + - question: What is the order priority of `process.nextTick`, `Promise`, `setTimeout`, and `setImmediate`? + answer: order-priority.md + topics: + - 'Core' + - 'Intermediate' + - question: What is `process.exit()`? + answer: | + `process.exit()` is a method that can be used to exit the current process. It takes an optional exit code as an argument. If no exit code is specified, it defaults to 0. + topics: + - 'Core' + - 'Intermediate' + - question: Different exit codes in Node.js? + answer: exit-codes.md + topics: + - 'Core' + - 'Intermediate' + - question: How Node.js handle errors? + answer: error-handling.md + topics: + - 'Core' + - 'Intermediate' +--- diff --git a/src/data/question-groups/react/react.md b/src/data/question-groups/react/react.md index 859a32bfac58..71d28e6d9cc6 100644 --- a/src/data/question-groups/react/react.md +++ b/src/data/question-groups/react/react.md @@ -4,7 +4,7 @@ briefTitle: 'React' briefDescription: 'Test, rate and improve your React knowledge with these questions.' title: 'React Questions' description: 'Test, rate and improve your React knowledge with these questions.' -isNew: true +isNew: false seo: title: 'React Questions' description: 'Curated list of React questions to test, rate and improve your knowledge. Questions are based on real world experience and knowledge.' diff --git a/src/data/roadmaps/android/android.md b/src/data/roadmaps/android/android.md index 35869cf38700..bdef0c3967a1 100644 --- a/src/data/roadmaps/android/android.md +++ b/src/data/roadmaps/android/android.md @@ -6,7 +6,7 @@ briefDescription: 'Step by step guide to becoming an Android Developer in 2024' title: 'Android Developer' description: 'Step by step guide to becoming an Android developer in 2024' hasTopics: true -isNew: true +isNew: false dimensions: width: 968 height: 2197.76 diff --git a/src/data/roadmaps/android/content/101-the-fundamentals/104-using-gradle.md b/src/data/roadmaps/android/content/101-the-fundamentals/104-using-gradle.md index f486db42f017..3029073c105c 100644 --- a/src/data/roadmaps/android/content/101-the-fundamentals/104-using-gradle.md +++ b/src/data/roadmaps/android/content/101-the-fundamentals/104-using-gradle.md @@ -1,3 +1,9 @@ # What is and how to use Gradle? -**Using Gradle**: Gradle is a powerful build system used in Android development that allows you to define your project and dependencies, and distinguish between different build types and flavors. Gradle uses a domain-specific language (DSL) which gives developers almost complete control over the build process. When you trigger a build in Android Studio, Gradle is the tool working behind the scenes to compile and package your app. It looks at the dependencies you declared in your build.gradle files and creates a build script accordingly. Using Gradle in android development requires continuous editing of the build.gradle files to manage app dependencies, build variants, signing configurations and other essential aspects related to building your app. \ No newline at end of file +**Using Gradle**: Gradle is a powerful build system used in Android development that allows you to define your project and dependencies, and distinguish between different build types and flavors. Gradle uses a domain-specific language (DSL) which gives developers almost complete control over the build process. When you trigger a build in Android Studio, Gradle is the tool working behind the scenes to compile and package your app. It looks at the dependencies you declared in your build.gradle files and create a build script accordingly. Using Gradle in Android development requires continuous editing of the build.gradle files to manage app dependencies, build variants, signing configurations, and other essential aspects related to building your app. + +Visit the following resources to learn more: + +- [Introduction to Gradle for Complete Beginners - 25minutes](https://youtu.be/-dtcEMLNmn0?si=NuIP-3wNpUrxfTxA) +- [Gradle Course for Beginners - 55minutes](https://www.youtube.com/watch?v=R6Z-Sxb837I) + diff --git a/src/data/roadmaps/backend/backend-beginner.json b/src/data/roadmaps/backend/backend-beginner.json new file mode 100644 index 000000000000..3abf35c9400a --- /dev/null +++ b/src/data/roadmaps/backend/backend-beginner.json @@ -0,0 +1,3214 @@ +{ + "mockup": { + "controls": { + "control": [ + { + "ID": "2155", + "typeID": "Arrow", + "zOrder": "18", + "w": "1", + "h": "177", + "measuredW": "150", + "measuredH": "100", + "x": "1251", + "y": "846", + "properties": { + "curvature": "-1", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "color": "3700253", + "p0": { + "x": 1.0826222816126574, + "y": -0.00765522788196904 + }, + "p1": { + "x": 0.46737830066706726, + "y": -0.003606051439574667 + }, + "p2": { + "x": 1.0826222816126574, + "y": 176.9643106904665 + } + } + }, + { + "ID": "2168", + "typeID": "Arrow", + "zOrder": "19", + "w": "139", + "h": "27", + "measuredW": "150", + "measuredH": "100", + "x": "1019", + "y": "1491", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": -0.06462658260011267, + "y": 27.019432060373674 + }, + "p1": { + "x": 0.4665558798140599, + "y": 0.07029751256299145 + }, + "p2": { + "x": 139.27696294456564, + "y": 0.2229725359186432 + } + } + }, + { + "ID": "2169", + "typeID": "Arrow", + "zOrder": "20", + "w": "154", + "h": "18", + "measuredW": "150", + "measuredH": "100", + "x": "1015", + "y": "1462", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": -0.08409551126828774, + "y": -0.25313294098191363 + }, + "p1": { + "x": 0.4534602255665107, + "y": -0.06413455828959744 + }, + "p2": { + "x": 153.99554675434774, + "y": 14.484919797468365 + } + } + }, + { + "ID": "2172", + "typeID": "Arrow", + "zOrder": "21", + "w": "107", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1371", + "y": "1360", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": -0.5 + }, + "p1": { + "x": 0.4734542725983134, + "y": -0.00011162392477927755 + }, + "p2": { + "x": 107.31478788338131, + "y": -0.5 + }, + "stroke": "dotted" + } + }, + { + "ID": "2180", + "typeID": "Arrow", + "zOrder": "22", + "w": "144", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1038", + "y": "969", + "properties": { + "color": "2848996", + "curvature": "-1", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": -0.24980034602958767, + "y": 0.04191001796402816 + }, + "p1": { + "x": 0.49999999999999994, + "y": 0 + }, + "p2": { + "x": 143.51622394886613, + "y": 0.04191001796402816 + } + } + }, + { + "ID": "2185", + "typeID": "__group__", + "zOrder": "23", + "measuredW": "169", + "measuredH": "40", + "w": "169", + "h": "40", + "x": "861", + "y": "1596", + "properties": { + "controlName": "104-apis:authentication:jwt" + }, + "children": { + "controls": { + "control": [ + { + "ID": "3", + "typeID": "Canvas", + "zOrder": "0", + "w": "169", + "h": "40", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "4", + "typeID": "Label", + "zOrder": "1", + "measuredW": "35", + "measuredH": "25", + "x": "67", + "y": "7", + "properties": { + "text": "JWT", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "2188", + "typeID": "__group__", + "zOrder": "24", + "measuredW": "269", + "measuredH": "50", + "w": "269", + "h": "50", + "x": "1148", + "y": "1335", + "properties": { + "controlName": "106-relational-databases" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "269", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "165", + "measuredH": "25", + "x": "52", + "y": "13", + "properties": { + "size": "17", + "text": "Relational Databases" + } + } + ] + } + } + }, + { + "ID": "2189", + "typeID": "__group__", + "zOrder": "25", + "measuredW": "169", + "measuredH": "40", + "w": "169", + "h": "40", + "x": "1471", + "y": "1340", + "properties": { + "controlName": "100-relational-databases:postgresql" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "169", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "96", + "measuredW": "93", + "measuredH": "25", + "x": "37", + "y": "7", + "properties": { + "size": "17", + "text": "PostgreSQL" + } + } + ] + } + } + }, + { + "ID": "2191", + "typeID": "__group__", + "zOrder": "26", + "measuredW": "211", + "measuredH": "50", + "w": "211", + "h": "50", + "x": "1146", + "y": "1757", + "properties": { + "controlName": "108-more-about-databases" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "211", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "176", + "measuredH": "25", + "x": "18", + "y": "13", + "properties": { + "text": "More about Databases", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "2192", + "typeID": "__group__", + "zOrder": "27", + "measuredW": "206", + "measuredH": "40", + "w": "206", + "h": "40", + "x": "1470", + "y": "1780", + "properties": { + "controlName": "102-more-about-databases:transactions" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "206", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "105", + "measuredW": "99", + "measuredH": "25", + "x": "50", + "y": "7", + "properties": { + "size": "17", + "text": "Transactions" + } + } + ] + } + } + }, + { + "ID": "2193", + "typeID": "__group__", + "zOrder": "28", + "measuredW": "206", + "measuredH": "40", + "w": "206", + "h": "40", + "x": "1470", + "y": "1824", + "properties": { + "controlName": "103-more-about-databases:n-plus-one-problem" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "206", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "99", + "measuredH": "25", + "x": "53", + "y": "7", + "properties": { + "text": "N+1 Problem", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "2194", + "typeID": "__group__", + "zOrder": "29", + "measuredW": "205", + "measuredH": "40", + "w": "205", + "h": "40", + "x": "1471", + "y": "1692", + "properties": { + "controlName": "100-scaling-databases:database-indexes" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "205", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "140", + "measuredH": "25", + "x": "34", + "y": "7", + "properties": { + "size": "17", + "text": "Database Indexes" + } + } + ] + } + } + }, + { + "ID": "2195", + "typeID": "__group__", + "zOrder": "30", + "measuredW": "273", + "measuredH": "50", + "w": "273", + "h": "50", + "x": "1145", + "y": "1460", + "properties": { + "controlName": "109-apis" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "273", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "133", + "measuredH": "25", + "x": "70", + "y": "13", + "properties": { + "text": "Learn about APIs", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "2196", + "typeID": "__group__", + "zOrder": "31", + "measuredW": "166", + "measuredH": "40", + "w": "166", + "h": "40", + "x": "864", + "y": "1447", + "properties": { + "controlName": "100-apis:rest" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "166", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "49", + "measuredW": "44", + "measuredH": "25", + "x": "58", + "y": "7", + "properties": { + "size": "17", + "text": "REST" + } + } + ] + } + } + }, + { + "ID": "2197", + "typeID": "__group__", + "zOrder": "32", + "measuredW": "167", + "measuredH": "40", + "w": "167", + "h": "40", + "x": "863", + "y": "1492", + "properties": { + "controlName": "101-apis:json-apis" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "167", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "90", + "measuredW": "85", + "measuredH": "25", + "x": "39", + "y": "7", + "properties": { + "size": "17", + "text": "JSON APIs" + } + } + ] + } + } + }, + { + "ID": "2198", + "typeID": "__group__", + "zOrder": "33", + "measuredW": "170", + "measuredH": "50", + "w": "170", + "h": "50", + "x": "861", + "y": "1549", + "properties": { + "controlName": "106-apis:authentication" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "170", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "111", + "measuredW": "111", + "measuredH": "25", + "x": "29", + "y": "12", + "properties": { + "size": "17", + "text": "Authentication" + } + } + ] + } + } + }, + { + "ID": "2199", + "typeID": "Label", + "zOrder": "34", + "measuredW": "128", + "measuredH": "40", + "x": "1200", + "y": "789", + "properties": { + "size": "32", + "text": "Backend" + } + }, + { + "ID": "2200", + "typeID": "Arrow", + "zOrder": "35", + "w": "1", + "h": "75", + "measuredW": "150", + "measuredH": "100", + "x": "1251", + "y": "702", + "properties": { + "curvature": "-1", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.43268541466795796, + "y": -0.4292144763719534 + }, + "p1": { + "x": 0.4673783006670677, + "y": -0.0036060514395746665 + }, + "p2": { + "x": 0.08850738176079176, + "y": 74.41806720423438 + }, + "color": "3700253" + } + }, + { + "ID": "2201", + "typeID": "__group__", + "zOrder": "36", + "measuredW": "350", + "measuredH": "141", + "w": "350", + "h": "141", + "x": "1473", + "y": "670", + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "350", + "h": "141", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0" + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "314", + "measuredH": "25", + "x": "14", + "y": "17", + "properties": { + "size": "17", + "text": "Find the detailed version of this roadmap" + } + }, + { + "ID": "2", + "typeID": "Label", + "zOrder": "2", + "measuredW": "319", + "measuredH": "25", + "x": "14", + "y": "45", + "properties": { + "size": "17", + "text": "along with resources and other roadmaps" + } + }, + { + "ID": "3", + "typeID": "__group__", + "zOrder": "3", + "measuredW": "320", + "measuredH": "45", + "w": "320", + "h": "45", + "x": "15", + "y": "81", + "properties": { + "controlName": "ext_link:roadmap.sh" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "320", + "h": "45", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "borderColor": "4273622", + "color": "4273622" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "105", + "measuredH": "28", + "x": "141", + "y": "8", + "properties": { + "color": "16777215", + "size": "20", + "text": "roadmap.sh" + } + }, + { + "ID": "2", + "typeID": "Label", + "zOrder": "2", + "measuredW": "45", + "measuredH": "28", + "x": "66", + "y": "8", + "properties": { + "color": "16777215", + "size": "20", + "text": "https" + } + }, + { + "ID": "3", + "typeID": "Label", + "zOrder": "3", + "measuredW": "5", + "measuredH": "28", + "x": "113", + "y": "8", + "properties": { + "bold": "true", + "color": "16777215", + "size": "20", + "text": ":" + } + }, + { + "ID": "4", + "typeID": "Label", + "zOrder": "4", + "measuredW": "10", + "measuredH": "28", + "x": "120", + "y": "9", + "properties": { + "color": "16777215", + "size": "20", + "text": "/" + } + }, + { + "ID": "5", + "typeID": "Label", + "zOrder": "5", + "measuredW": "10", + "measuredH": "28", + "x": "128", + "y": "9", + "properties": { + "color": "16777215", + "size": "20", + "text": "/" + } + } + ] + } + } + } + ] + } + } + }, + { + "ID": "2203", + "typeID": "__group__", + "zOrder": "37", + "measuredW": "144", + "measuredH": "40", + "w": "144", + "h": "40", + "x": "915", + "y": "993", + "properties": { + "controlName": "100-learn-a-language:go" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "136", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "8", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "26", + "measuredW": "23", + "measuredH": "25", + "x": "63", + "y": "7", + "properties": { + "size": "17", + "text": "Go" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "4", + "typeID": "Icon", + "zOrder": "4", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } + } + }, + { + "ID": "2204", + "typeID": "__group__", + "zOrder": "38", + "measuredW": "272", + "measuredH": "50", + "w": "272", + "h": "50", + "x": "1147", + "y": "944", + "properties": { + "controlName": "103-learn-a-language" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "272", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "141", + "measuredH": "25", + "x": "65", + "y": "13", + "properties": { + "text": "Learn a Language", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "2205", + "typeID": "__group__", + "zOrder": "39", + "measuredW": "146", + "measuredH": "40", + "w": "146", + "h": "40", + "x": "913", + "y": "903", + "properties": { + "controlName": "105-learn-a-language:javascript" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "136", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "10", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "85", + "measuredW": "81", + "measuredH": "25", + "x": "37", + "y": "8", + "properties": { + "size": "17", + "text": "JavaScript" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "4", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "10027263" + } + } + ] + } + } + }, + { + "ID": "2206", + "typeID": "__group__", + "zOrder": "40", + "measuredW": "145", + "measuredH": "40", + "w": "145", + "h": "40", + "x": "914", + "y": "948", + "properties": { + "controlName": "106-learn-a-language:python" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "136", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "9", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "56", + "measuredW": "53", + "measuredH": "25", + "x": "49", + "y": "8", + "properties": { + "size": "17", + "text": "Python" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "4", + "typeID": "Icon", + "zOrder": "4", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } + } + }, + { + "ID": "2211", + "typeID": "__group__", + "zOrder": "41", + "measuredW": "205", + "measuredH": "40", + "w": "205", + "h": "40", + "x": "1470", + "y": "1736", + "properties": { + "controlName": "100-more-about-databases:orms" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "205", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "49", + "measuredW": "49", + "measuredH": "25", + "x": "78", + "y": "7", + "properties": { + "size": "17", + "text": "ORMs" + } + } + ] + } + } + }, + { + "ID": "2221", + "typeID": "Arrow", + "zOrder": "42", + "w": "3", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1848", + "y": "829", + "properties": { + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "color": "16777215", + "p0": { + "x": 0.14652915468354877, + "y": 0.452028801972574 + }, + "p1": { + "x": 0.47345427259831346, + "y": -0.00011162392477928299 + }, + "p2": { + "x": 2.7298768229543384, + "y": 0.452028801972574 + } + } + }, + { + "ID": "2222", + "typeID": "Arrow", + "zOrder": "43", + "w": "3", + "h": "3", + "measuredW": "150", + "measuredH": "100", + "x": "648", + "y": "882", + "properties": { + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "color": "16777215", + "p0": { + "x": 0.2658611453201729, + "y": 2.452028801972574 + }, + "p1": { + "x": 0.4734542725983134, + "y": -0.00011162392477936523 + }, + "p2": { + "x": 3.1065906667259924, + "y": -0.38870071943324547 + } + } + }, + { + "ID": "2223", + "typeID": "Arrow", + "zOrder": "44", + "w": "3", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1369", + "y": "637", + "properties": { + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "color": "16777215", + "p0": { + "x": 0.14652915468354877, + "y": 0.452028801972574 + }, + "p1": { + "x": 0.47345427259831346, + "y": -0.00011162392477928299 + }, + "p2": { + "x": 2.7298768229543384, + "y": 0.452028801972574 + } + } + }, + { + "ID": "2224", + "typeID": "Arrow", + "zOrder": "17", + "w": "114", + "h": "32", + "measuredW": "150", + "measuredH": "100", + "x": "1053", + "y": "923", + "properties": { + "color": "2848996", + "curvature": "-1", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": -0.1257521407827653, + "y": -0.30013658969107837 + }, + "p1": { + "x": 0.41833810888252165, + "y": -0.1060171919770771 + }, + "p2": { + "x": 114.1798056113546, + "y": 31.45140723034706 + } + } + }, + { + "ID": "2225", + "typeID": "Arrow", + "zOrder": "16", + "w": "117", + "h": "39", + "measuredW": "150", + "measuredH": "100", + "x": "1054", + "y": "980", + "properties": { + "color": "2848996", + "curvature": "-1", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.14430961201878745, + "y": 39.224556623224885 + }, + "p1": { + "x": 0.4389989572471317, + "y": 0.10010427528675775 + }, + "p2": { + "x": 116.98999086975914, + "y": -0.14735771362245487 + } + } + }, + { + "ID": "2226", + "typeID": "Label", + "zOrder": "45", + "measuredW": "348", + "measuredH": "26", + "x": "667", + "y": "1066", + "properties": { + "color": "4985136", + "size": "18", + "text": "When you are following this roadmap, make" + } + }, + { + "ID": "2227", + "typeID": "Label", + "zOrder": "46", + "measuredW": "338", + "measuredH": "26", + "x": "667", + "y": "1099", + "properties": { + "color": "4985136", + "size": "18", + "text": "sure to build as many projects as possible" + } + }, + { + "ID": "2228", + "typeID": "Label", + "zOrder": "47", + "measuredW": "145", + "measuredH": "32", + "x": "667", + "y": "1022", + "properties": { + "color": "4985136", + "size": "24", + "text": "Important Tip" + } + }, + { + "ID": "2229", + "typeID": "Label", + "zOrder": "48", + "measuredW": "242", + "measuredH": "26", + "x": "667", + "y": "1129", + "properties": { + "color": "4985136", + "size": "18", + "text": "for each node of the roadmap" + } + }, + { + "ID": "2230", + "typeID": "Label", + "zOrder": "49", + "measuredW": "357", + "measuredH": "26", + "x": "1473", + "y": "852", + "properties": { + "color": "4985136", + "size": "18", + "text": "If you are a frontend developer, jumping into" + } + }, + { + "ID": "2231", + "typeID": "Label", + "zOrder": "50", + "measuredW": "348", + "measuredH": "26", + "x": "1473", + "y": "882", + "properties": { + "color": "4985136", + "size": "18", + "text": "backend development, I would recommend" + } + }, + { + "ID": "2232", + "typeID": "Label", + "zOrder": "51", + "measuredW": "319", + "measuredH": "26", + "x": "1473", + "y": "912", + "properties": { + "color": "4985136", + "size": "18", + "text": "picking JavaScript and learning Node.js" + } + }, + { + "ID": "2233", + "typeID": "Label", + "zOrder": "52", + "measuredW": "353", + "measuredH": "26", + "x": "1473", + "y": "942", + "properties": { + "color": "4985136", + "size": "18", + "text": "to get up to speed. Alternatively, Python and" + } + }, + { + "ID": "2234", + "typeID": "Label", + "zOrder": "53", + "measuredW": "208", + "measuredH": "26", + "x": "1473", + "y": "972", + "properties": { + "color": "4985136", + "size": "18", + "text": "Go are also good options." + } + }, + { + "ID": "2235", + "typeID": "Label", + "zOrder": "54", + "measuredW": "347", + "measuredH": "26", + "x": "1473", + "y": "1013", + "properties": { + "size": "18", + "text": "Pick any language, learn the language, and", + "color": "3700253" + } + }, + { + "ID": "2236", + "typeID": "Label", + "zOrder": "55", + "measuredW": "355", + "measuredH": "26", + "x": "1473", + "y": "1043", + "properties": { + "size": "18", + "color": "3700253", + "text": "build some CLI applications to practice your" + } + }, + { + "ID": "2237", + "typeID": "Label", + "zOrder": "56", + "measuredW": "223", + "measuredH": "26", + "x": "1473", + "y": "1073", + "properties": { + "size": "18", + "color": "3700253", + "text": "knowledge of the language." + } + }, + { + "ID": "2238", + "typeID": "Arrow", + "zOrder": "57", + "w": "116", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1071", + "y": "1179", + "properties": { + "color": "2848996", + "curvature": "-1", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": -0.17790705272341256, + "y": 0.4387080768251508 + }, + "p1": { + "x": 0.5, + "y": 0 + }, + "p2": { + "x": 115.75019965397041, + "y": 0.43870807682526447 + } + } + }, + { + "ID": "2239", + "typeID": "__group__", + "zOrder": "58", + "measuredW": "95", + "measuredH": "50", + "w": "95", + "h": "50", + "x": "1000", + "y": "1156", + "properties": { + "controlName": "100-version-control-systems:git" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "95", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "22", + "measuredH": "25", + "x": "37", + "y": "12", + "properties": { + "size": "17", + "text": "Git" + } + } + ] + } + } + }, + { + "ID": "2240", + "typeID": "__group__", + "zOrder": "59", + "measuredW": "275", + "measuredH": "50", + "w": "275", + "h": "50", + "x": "1147", + "y": "1155", + "properties": { + "controlName": "104-version-control-systems" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "275", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "186", + "measuredH": "25", + "x": "45", + "y": "12", + "properties": { + "text": "Version Control Systems", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "2241", + "typeID": "Arrow", + "zOrder": "15", + "w": "1", + "h": "137", + "measuredW": "150", + "measuredH": "100", + "x": "1251", + "y": "1034", + "properties": { + "curvature": "-1", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0.08262228161265739, + "y": 0.45817900313909377 + }, + "p1": { + "x": 0.4673783006670674, + "y": -0.0036060514395746678 + }, + "p2": { + "x": 0.08262228161265739, + "y": 137.67519270679327 + } + } + }, + { + "ID": "2242", + "typeID": "Label", + "zOrder": "60", + "measuredW": "278", + "measuredH": "26", + "x": "1473", + "y": "1143", + "properties": { + "color": "4985136", + "size": "18", + "text": "Create your GitHub profile. Publish" + } + }, + { + "ID": "2243", + "typeID": "Label", + "zOrder": "61", + "measuredW": "300", + "measuredH": "26", + "x": "1473", + "y": "1173", + "properties": { + "color": "4985136", + "size": "18", + "text": "the projects that you have developed" + } + }, + { + "ID": "2244", + "typeID": "Label", + "zOrder": "62", + "measuredW": "229", + "measuredH": "26", + "x": "1473", + "y": "1203", + "properties": { + "color": "4985136", + "size": "18", + "text": "so far to your GitHub profile." + } + }, + { + "ID": "2245", + "typeID": "Label", + "zOrder": "63", + "measuredW": "249", + "measuredH": "26", + "x": "1473", + "y": "1238", + "properties": { + "size": "18", + "text": "Use git for your future projects.", + "color": "10027263" + } + }, + { + "ID": "2247", + "typeID": "Label", + "zOrder": "64", + "measuredW": "420", + "measuredH": "26", + "x": "665", + "y": "1297", + "properties": { + "color": "4985136", + "size": "18", + "text": "Learn about the relational databases, normalization," + } + }, + { + "ID": "2248", + "typeID": "Label", + "zOrder": "65", + "measuredW": "418", + "measuredH": "26", + "x": "665", + "y": "1324", + "properties": { + "color": "4985136", + "size": "18", + "text": "learn SQL, db migrations, indexes and performance." + } + }, + { + "ID": "2250", + "typeID": "Label", + "zOrder": "66", + "measuredW": "386", + "measuredH": "26", + "x": "665", + "y": "1358", + "properties": { + "size": "18", + "text": "Make some CLI application that uses database.", + "color": "11820806" + } + }, + { + "ID": "2251", + "typeID": "Arrow", + "zOrder": "14", + "w": "1", + "h": "104", + "measuredW": "150", + "measuredH": "100", + "x": "1251", + "y": "1302", + "properties": { + "curvature": "-1", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "color": "11820806", + "p0": { + "x": 0.08262228161265739, + "y": 0.45817900313909377 + }, + "p1": { + "x": 0.4673783006670672, + "y": -0.003606051439574666 + }, + "p2": { + "x": 0.08262228161265739, + "y": 104.8141250338856 + } + } + }, + { + "ID": "2253", + "typeID": "__group__", + "zOrder": "67", + "measuredW": "98", + "measuredH": "49", + "w": "98", + "h": "49", + "x": "997", + "y": "1212", + "properties": { + "controlName": "100-repo-hosting-services:github" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "98", + "h": "49", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "54", + "measuredH": "25", + "x": "27", + "y": "12", + "properties": { + "text": "GitHub", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "2254", + "typeID": "__group__", + "zOrder": "68", + "measuredW": "275", + "measuredH": "50", + "w": "275", + "h": "50", + "x": "1149", + "y": "1210", + "properties": { + "controlName": "105-repo-hosting-services" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "275", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "172", + "measuredH": "25", + "x": "52", + "y": "12", + "properties": { + "text": "Repo hosting services", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "2255", + "typeID": "Arrow", + "zOrder": "13", + "w": "116", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1071", + "y": "1237", + "properties": { + "color": "2848996", + "curvature": "-1", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": -0.17790705272341256, + "y": 0.4387080768251508 + }, + "p1": { + "x": 0.5, + "y": 0 + }, + "p2": { + "x": 115.75019965397041, + "y": 0.43870807682526447 + } + } + }, + { + "ID": "2256", + "typeID": "Arrow", + "zOrder": "12", + "w": "1", + "h": "58", + "measuredW": "150", + "measuredH": "100", + "x": "1251", + "y": "1235", + "properties": { + "curvature": "-1", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0.08262228161265739, + "y": 0.45817900313909377 + }, + "p1": { + "x": 0.4673783006670675, + "y": -0.0036060514395746678 + }, + "p2": { + "x": 0.08262228161265739, + "y": 58.599083543063216 + } + } + }, + { + "ID": "2265", + "typeID": "Arrow", + "zOrder": "11", + "w": "1", + "h": "113", + "measuredW": "150", + "measuredH": "100", + "x": "1251", + "y": "1418", + "properties": { + "curvature": "-1", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0.08262228161265739, + "y": 0.2026203317789168 + }, + "p1": { + "x": 0.4673783006670673, + "y": -0.003606051439574669 + }, + "p2": { + "x": 0.08262228161265739, + "y": 113.41766182260108 + } + } + }, + { + "ID": "2267", + "typeID": "Label", + "zOrder": "69", + "measuredW": "309", + "measuredH": "26", + "x": "1470", + "y": "1441", + "properties": { + "color": "4985136", + "size": "18", + "text": "Learn how to build APIs and add auth-" + } + }, + { + "ID": "2268", + "typeID": "Label", + "zOrder": "70", + "measuredW": "251", + "measuredH": "26", + "x": "1470", + "y": "1468", + "properties": { + "color": "4985136", + "size": "18", + "text": "entication to secure endpoints." + } + }, + { + "ID": "2269", + "typeID": "Label", + "zOrder": "71", + "measuredW": "377", + "measuredH": "26", + "x": "1470", + "y": "1506", + "properties": { + "size": "18", + "text": "Develop some RESTful API and add JWT Auth.", + "color": "10027263" + } + }, + { + "ID": "2270", + "typeID": "Arrow", + "zOrder": "10", + "w": "145", + "h": "87", + "measuredW": "150", + "measuredH": "100", + "x": "1020", + "y": "1498", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.27519639362265025, + "y": 87.01058087151091 + }, + "p1": { + "x": 0.46723646723646683, + "y": 0.14529914529914467 + }, + "p2": { + "x": 144.97607782567957, + "y": -0.07791258296765591 + } + } + }, + { + "ID": "2271", + "typeID": "Arrow", + "zOrder": "9", + "w": "1", + "h": "106", + "measuredW": "150", + "measuredH": "100", + "x": "1251", + "y": "1542", + "properties": { + "curvature": "-1", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "color": "11820806", + "p0": { + "x": 0.08262228161265739, + "y": -0.2708353187069861 + }, + "p1": { + "x": 0.46737830066706704, + "y": -0.0036060514395746673 + }, + "p2": { + "x": 0.08262228161265739, + "y": 105.9822607539802 + } + } + }, + { + "ID": "2272", + "typeID": "Arrow", + "zOrder": "8", + "w": "99", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1250", + "y": "1593", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.21279569788953268, + "y": 0.40095678414945723 + }, + "p1": { + "x": 0.4734542725983135, + "y": -0.0001116239247792803 + }, + "p2": { + "x": 98.87518164630478, + "y": 0.40095678414945723 + } + } + }, + { + "ID": "2273", + "typeID": "__group__", + "zOrder": "72", + "measuredW": "130", + "measuredH": "50", + "w": "130", + "h": "50", + "x": "1147", + "y": "1569", + "properties": { + "controlName": "110-caching" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "130", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "64", + "measuredH": "25", + "x": "33", + "y": "13", + "properties": { + "text": "Caching", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "2274", + "typeID": "__group__", + "zOrder": "73", + "measuredW": "115", + "measuredH": "40", + "w": "115", + "h": "40", + "x": "1302", + "y": "1574", + "properties": { + "controlName": "100-caching:server-side:redis" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "115", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "46", + "measuredW": "45", + "measuredH": "25", + "x": "35", + "y": "8", + "properties": { + "size": "17", + "text": "Redis" + } + } + ] + } + } + }, + { + "ID": "2275", + "typeID": "Label", + "zOrder": "74", + "measuredW": "325", + "measuredH": "26", + "x": "1470", + "y": "1564", + "properties": { + "color": "4985136", + "size": "18", + "text": "Learn about different caching strategies" + } + }, + { + "ID": "2276", + "typeID": "Label", + "zOrder": "75", + "measuredW": "258", + "measuredH": "26", + "x": "1470", + "y": "1592", + "properties": { + "color": "4985136", + "size": "18", + "text": "Including HTTP caching as well." + } + }, + { + "ID": "2277", + "typeID": "Label", + "zOrder": "76", + "measuredW": "387", + "measuredH": "26", + "x": "1470", + "y": "1628", + "properties": { + "size": "18", + "color": "11820806", + "text": "Use Redis in some application for performance." + } + }, + { + "ID": "2278", + "typeID": "Arrow", + "zOrder": "7", + "w": "1", + "h": "163", + "measuredW": "150", + "measuredH": "100", + "x": "1251", + "y": "1659", + "properties": { + "curvature": "-1", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 1.0826222816126574, + "y": 0.2026203317789168 + }, + "p1": { + "x": 0.4673783006670671, + "y": -0.0036060514395746695 + }, + "p2": { + "x": 1.0826222816126574, + "y": 163.15924766293733 + } + } + }, + { + "ID": "2279", + "typeID": "Arrow", + "zOrder": "6", + "w": "143", + "h": "60", + "measuredW": "150", + "measuredH": "100", + "x": "1339", + "y": "1708", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.15306473463670045, + "y": 60.5663286140275 + }, + "p1": { + "x": 0.50878873841777, + "y": -0.08602102696235464 + }, + "p2": { + "x": 143.51412319047085, + "y": 0.2742946840037348 + } + } + }, + { + "ID": "2280", + "typeID": "Arrow", + "zOrder": "5", + "w": "140", + "h": "21", + "measuredW": "150", + "measuredH": "100", + "x": "1346", + "y": "1756", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": -0.14782038424959865, + "y": 20.605266471364075 + }, + "p1": { + "x": 0.5049876784965737, + "y": -0.04117901161463641 + }, + "p2": { + "x": 140.3147878833813, + "y": -0.5 + } + } + }, + { + "ID": "2281", + "typeID": "Arrow", + "zOrder": "4", + "w": "147", + "h": "17", + "measuredW": "150", + "measuredH": "100", + "x": "1334", + "y": "1789", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": -0.20622717025435122, + "y": 1.003496233591477 + }, + "p1": { + "x": 0.5414707973491237, + "y": 0.04604856083293399 + }, + "p2": { + "x": 147.17430021424798, + "y": 17.081371948264405 + } + } + }, + { + "ID": "2282", + "typeID": "Arrow", + "zOrder": "3", + "w": "142", + "h": "51", + "measuredW": "150", + "measuredH": "100", + "x": "1339", + "y": "1799", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.15306473463670045, + "y": 0.38225706715070373 + }, + "p1": { + "x": 0.4769533667572815, + "y": 0.08464143678172667 + }, + "p2": { + "x": 142.17430021424798, + "y": 51.29553016361501 + } + } + }, + { + "ID": "2283", + "typeID": "Label", + "zOrder": "77", + "measuredW": "395", + "measuredH": "26", + "x": "667", + "y": "1703", + "properties": { + "color": "4985136", + "size": "18", + "text": "Learn about additional database topics including" + } + }, + { + "ID": "2284", + "typeID": "Label", + "zOrder": "78", + "measuredW": "401", + "measuredH": "26", + "x": "667", + "y": "1730", + "properties": { + "color": "4985136", + "size": "18", + "text": "performance analysis, ORMs, limitations, common" + } + }, + { + "ID": "2285", + "typeID": "Label", + "zOrder": "79", + "measuredW": "322", + "measuredH": "26", + "x": "667", + "y": "1799", + "properties": { + "size": "18", + "color": "11820806", + "text": "Get some experience withs some ORM." + } + }, + { + "ID": "2286", + "typeID": "Arrow", + "zOrder": "80", + "w": "1", + "h": "304", + "measuredW": "150", + "measuredH": "100", + "x": "1250", + "y": "1836", + "properties": { + "curvature": "-1", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "color": "11820806", + "p0": { + "x": 1.0826222816126574, + "y": 0.45817900313909377 + }, + "p1": { + "x": 0.4673783006670671, + "y": -0.003606051439574667 + }, + "p2": { + "x": 1.0826222816126574, + "y": 304.3477355871719 + } + } + }, + { + "ID": "2288", + "typeID": "__group__", + "zOrder": "81", + "measuredW": "212", + "measuredH": "50", + "w": "212", + "h": "50", + "x": "1147", + "y": "1892", + "properties": { + "controlName": "112-testing" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "212", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "56", + "measuredH": "25", + "x": "78", + "y": "13", + "properties": { + "text": "Testing", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "2289", + "typeID": "__group__", + "zOrder": "82", + "measuredW": "212", + "measuredH": "40", + "w": "212", + "h": "40", + "x": "828", + "y": "1856", + "properties": { + "controlName": "100-testing:integration-testing" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "212", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "144", + "measuredH": "25", + "x": "34", + "y": "7", + "properties": { + "text": "Integration Testing", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "2290", + "typeID": "__group__", + "zOrder": "83", + "measuredW": "214", + "measuredH": "37", + "w": "214", + "h": "37", + "x": "826", + "y": "1900", + "properties": { + "controlName": "101-testing:unit-testing" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "214", + "h": "37", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "91", + "measuredH": "25", + "x": "61", + "y": "6", + "properties": { + "text": "Unit Testing", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "2291", + "typeID": "__group__", + "zOrder": "84", + "measuredW": "214", + "measuredH": "37", + "w": "214", + "h": "37", + "x": "826", + "y": "1941", + "properties": { + "controlName": "102-testing:functional-testing" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "214", + "h": "37", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "140", + "measuredH": "25", + "x": "37", + "y": "6", + "properties": { + "text": "Functional Testing", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "2292", + "typeID": "Arrow", + "zOrder": "2", + "w": "130", + "h": "30", + "measuredW": "150", + "measuredH": "100", + "x": "1032", + "y": "1875", + "properties": { + "color": "2848996", + "curvature": "-1", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": -0.17790705272341256, + "y": 0.4387080768251508 + }, + "p1": { + "x": 0.4930677863483558, + "y": -0.08253007962375944 + }, + "p2": { + "x": 130.29643187323404, + "y": 29.645970879643528 + } + } + }, + { + "ID": "2293", + "typeID": "Arrow", + "zOrder": "1", + "w": "140", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1031", + "y": "1918", + "properties": { + "color": "2848996", + "curvature": "-1", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": -0.17790705272341256, + "y": 0.4387080768251508 + }, + "p1": { + "x": 0.5, + "y": 0 + }, + "p2": { + "x": 139.3353697305704, + "y": 0.4387080768251508 + } + } + }, + { + "ID": "2294", + "typeID": "Arrow", + "zOrder": "0", + "w": "135", + "h": "30", + "measuredW": "150", + "measuredH": "100", + "x": "1028", + "y": "1931", + "properties": { + "color": "2848996", + "curvature": "-1", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.31413425095911407, + "y": 29.91853588099889 + }, + "p1": { + "x": 0.47627245735948676, + "y": 0.0705776198056142 + }, + "p2": { + "x": 135.6362548494567, + "y": 0.44243040409855894 + } + } + }, + { + "ID": "2295", + "typeID": "Label", + "zOrder": "85", + "measuredW": "399", + "measuredH": "26", + "x": "667", + "y": "1759", + "properties": { + "color": "4985136", + "size": "18", + "text": "issues to keep in mind with ORMs and in general." + } + }, + { + "ID": "2296", + "typeID": "Label", + "zOrder": "86", + "measuredW": "361", + "measuredH": "26", + "x": "1474", + "y": "1888", + "properties": { + "color": "4985136", + "size": "18", + "text": "Learn about different testing techniques and" + } + }, + { + "ID": "2297", + "typeID": "Label", + "zOrder": "87", + "measuredW": "371", + "measuredH": "26", + "x": "1474", + "y": "1918", + "properties": { + "color": "4985136", + "size": "18", + "text": "get some experience writing automated tests." + } + }, + { + "ID": "2298", + "typeID": "Arrow", + "zOrder": "88", + "w": "1", + "h": "71", + "measuredW": "150", + "measuredH": "100", + "x": "1249", + "y": "2280", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "40463", + "p0": { + "x": 0, + "y": -0.05210330899694782 + }, + "p1": { + "x": 0.5000000000000007, + "y": 0 + }, + "p2": { + "x": 0, + "y": 71 + } + } + }, + { + "ID": "2299", + "typeID": "Arrow", + "zOrder": "89", + "w": "2", + "h": "89", + "measuredW": "150", + "measuredH": "100", + "x": "1248", + "y": "2433", + "properties": { + "curvature": "0", + "leftArrow": "false", + "p0": { + "x": 1, + "y": 88 + }, + "p1": { + "x": 0.4072427393330943, + "y": 0.00953746862674794 + }, + "p2": { + "x": 1, + "y": 0 + }, + "rightArrow": "false", + "stroke": "dotted", + "color": "40463" + } + }, + { + "ID": "2300", + "typeID": "TextArea", + "zOrder": "90", + "w": "499", + "h": "118", + "measuredW": "200", + "measuredH": "140", + "x": "999", + "y": "2346" + }, + { + "ID": "2301", + "typeID": "Label", + "zOrder": "91", + "measuredW": "431", + "measuredH": "25", + "x": "1033", + "y": "2365", + "properties": { + "size": "17", + "text": "Look at the detailed version for what else you don’t know" + } + }, + { + "ID": "2302", + "typeID": "__group__", + "zOrder": "92", + "measuredW": "430", + "measuredH": "44", + "w": "430", + "h": "44", + "x": "1034", + "y": "2400", + "properties": { + "controlName": "json:backend.json" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "430", + "h": "44", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "147", + "measuredH": "25", + "x": "140", + "y": "9", + "properties": { + "size": "17", + "text": "Backend Roadmap" + } + } + ] + } + } + }, + { + "ID": "2303", + "typeID": "TextArea", + "zOrder": "93", + "w": "613", + "h": "246", + "measuredW": "200", + "measuredH": "140", + "x": "946", + "y": "2033" + }, + { + "ID": "2304", + "typeID": "Label", + "zOrder": "94", + "measuredW": "532", + "measuredH": "26", + "x": "978", + "y": "2099", + "properties": { + "color": "4985136", + "size": "18", + "text": "At this point, you should have enough knowledge to find a junior to" + } + }, + { + "ID": "2305", + "typeID": "Label", + "zOrder": "95", + "measuredW": "530", + "measuredH": "26", + "x": "978", + "y": "2129", + "properties": { + "color": "4985136", + "size": "18", + "text": "mid-level (maybe even senior) backend developer position at any" + } + }, + { + "ID": "2306", + "typeID": "Label", + "zOrder": "96", + "measuredW": "441", + "measuredH": "26", + "x": "978", + "y": "2159", + "properties": { + "color": "4985136", + "size": "18", + "text": "company (depending on the depth of your knowledge)." + } + }, + { + "ID": "2307", + "typeID": "Label", + "zOrder": "97", + "measuredW": "116", + "measuredH": "32", + "x": "978", + "y": "2055", + "properties": { + "color": "4985136", + "size": "24", + "text": "Job Ready" + } + }, + { + "ID": "2308", + "typeID": "Label", + "zOrder": "98", + "measuredW": "536", + "measuredH": "26", + "x": "978", + "y": "2201", + "properties": { + "size": "18", + "color": "10027263", + "text": "Deepen your pool of knowledge and keep building projects till you" + } + }, + { + "ID": "2309", + "typeID": "Label", + "zOrder": "99", + "measuredW": "360", + "measuredH": "26", + "x": "978", + "y": "2230", + "properties": { + "size": "18", + "color": "10027263", + "text": "find a job. Your job will teach you a lot as well." + } + }, + { + "ID": "2310", + "typeID": "Canvas", + "zOrder": "100", + "w": "380", + "h": "150", + "measuredW": "100", + "measuredH": "70", + "x": "688", + "y": "655" + }, + { + "ID": "2311", + "typeID": "Label", + "zOrder": "101", + "measuredW": "187", + "measuredH": "32", + "x": "716", + "y": "680", + "properties": { + "size": "24", + "text": "Beginner Version" + } + }, + { + "ID": "2312", + "typeID": "Label", + "zOrder": "102", + "measuredW": "319", + "measuredH": "28", + "x": "716", + "y": "721", + "properties": { + "color": "4985136", + "size": "20", + "text": "This is the trimmed down version of" + } + }, + { + "ID": "2313", + "typeID": "Label", + "zOrder": "103", + "measuredW": "328", + "measuredH": "28", + "x": "716", + "y": "752", + "properties": { + "color": "4985136", + "size": "20", + "text": "the backend roadmap for beginners." + } + }, + { + "ID": "2314", + "typeID": "__group__", + "zOrder": "104", + "measuredW": "382", + "measuredH": "47", + "w": "382", + "h": "47", + "x": "688", + "y": "815", + "properties": { + "controlName": "json:backend.json" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "382", + "h": "47", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "3355443", + "borderColor": "3355443" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "203", + "measuredH": "26", + "x": "89", + "y": "11", + "properties": { + "color": "16777215", + "size": "18", + "text": "Visit the Detailed Version" + } + } + ] + } + } + }, + { + "ID": "2315", + "typeID": "Arrow", + "zOrder": "105", + "w": "3", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1315", + "y": "2523", + "properties": { + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "color": "16777215", + "p0": { + "x": 0.14652915468354877, + "y": 0.452028801972574 + }, + "p1": { + "x": 0.47345427259831346, + "y": -0.00011162392477928299 + }, + "p2": { + "x": 2.7298768229543384, + "y": 0.452028801972574 + } + } + } + ] + }, + "attributes": { + "name": "New Wireframe 1 copy 2", + "order": 1000018.3019863295, + "parentID": null, + "notes": "" + }, + "branchID": "Master", + "resourceID": "7BDB8D3D-BEB5-4A58-BF91-F519F8754661", + "mockupH": "1887", + "mockupW": "1209", + "measuredW": "1857", + "measuredH": "2524", + "version": "1.0" + }, + "groupOffset": { + "x": 0, + "y": 0 + }, + "dependencies": [], + "projectID": "file:///Users/kamrify/Desktop/New%20Roadmaps/Android%20Roadmap.bmpr" +} \ No newline at end of file diff --git a/src/data/roadmaps/backend/backend.json b/src/data/roadmaps/backend/backend.json index 9276740084ca..7ffd256dbb8c 100644 --- a/src/data/roadmaps/backend/backend.json +++ b/src/data/roadmaps/backend/backend.json @@ -3,315 +3,496 @@ "controls": { "control": [ { - "ID": "1854", + "ID": "2380", "typeID": "Arrow", - "zOrder": "55", - "w": "60", - "h": "30", + "zOrder": "0", + "w": "1", + "h": "101", "measuredW": "150", "measuredH": "100", - "x": "1444", - "y": "1445", + "x": "1254", + "y": "846", "properties": { "color": "2848996", - "curvature": "0", + "curvature": "-1", + "direction": "bottom", "leftArrow": "false", "rightArrow": "false", - "stroke": "dotted", "p0": { - "x": 60.31920991767379, - "y": 30.162697528578974 + "x": 0.08262228161265739, + "y": -0.00765522788196904 }, "p1": { - "x": 0.38469222125109326, - "y": -0.13210138594081827 + "x": 0.4673783006670675, + "y": -0.003606051439574666 }, "p2": { - "x": 0.32605804231866387, - "y": -0.07999046131453724 + "x": 0.08262228161265739, + "y": 100.83103671353786 } } }, { - "ID": "1855", + "ID": "2381", "typeID": "Arrow", - "zOrder": "56", - "w": "61", - "h": "24", + "zOrder": "1", + "w": "136", + "h": "1", "measuredW": "150", "measuredH": "100", - "x": "1448", - "y": "1409", + "x": "1071", + "y": "3249", "properties": { "color": "2848996", - "curvature": "0", + "direction": "bottom", "leftArrow": "false", "rightArrow": "false", "stroke": "dotted", "p0": { - "x": 61.039807248761235, - "y": 0.07433489335426202 + "x": -0.08928421577456902, + "y": -0.2906057506302204 }, "p1": { - "x": 0.46208226221079857, - "y": 0.11053984575835622 + "x": 0.4734542725983134, + "y": -0.00011162392477928117 }, "p2": { - "x": 0.4878500355812321, - "y": 24.3979188798794 + "x": 136.35388907392644, + "y": -0.2906057506302204 + } + } + }, + { + "ID": "2382", + "typeID": "__group__", + "zOrder": "2", + "measuredW": "214", + "measuredH": "46", + "w": "214", + "h": "46", + "x": "671", + "y": "3258", + "properties": { + "controlName": "102-scalability:migration-strategies" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "214", + "h": "46", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "155", + "measuredH": "25", + "x": "29", + "y": "9", + "properties": { + "text": "Migration Strategies", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "2383", + "typeID": "__group__", + "zOrder": "3", + "measuredW": "211", + "measuredH": "196", + "w": "211", + "h": "196", + "x": "671", + "y": "3298", + "properties": { + "controlName": "101-scalability:instrumentation-monitoring-telemetry" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "211", + "h": "196", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "151", + "measuredH": "25", + "x": "29", + "y": "156", + "properties": { + "size": "17", + "text": "Difference + Usage" + } + }, + { + "ID": "4", + "typeID": "TextArea", + "zOrder": "2", + "w": "187", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "11", + "y": "15", + "properties": { + "color": "16770457" + } + }, + { + "ID": "5", + "typeID": "Label", + "zOrder": "3", + "measuredW": "121", + "measuredH": "25", + "x": "44", + "y": "22", + "properties": { + "size": "17", + "text": "Instrumentation" + } + }, + { + "ID": "6", + "typeID": "TextArea", + "zOrder": "4", + "w": "187", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "11", + "y": "60", + "properties": { + "color": "16770457" + } + }, + { + "ID": "7", + "typeID": "Label", + "zOrder": "5", + "measuredW": "83", + "measuredH": "25", + "x": "63", + "y": "67", + "properties": { + "size": "17", + "text": "Monitoring" + } + }, + { + "ID": "8", + "typeID": "TextArea", + "zOrder": "6", + "w": "187", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "11", + "y": "105", + "properties": { + "color": "16770457" + } + }, + { + "ID": "9", + "typeID": "Label", + "zOrder": "7", + "measuredW": "76", + "measuredH": "25", + "x": "67", + "y": "112", + "properties": { + "size": "17", + "text": "Telemetry" + } + } + ] } } }, { - "ID": "1863", + "ID": "2384", "typeID": "Arrow", - "zOrder": "57", + "zOrder": "4", "w": "1", - "h": "76", + "h": "744", "measuredW": "150", "measuredH": "100", - "x": "1751", - "y": "2482", + "x": "1301", + "y": "2957", "properties": { "color": "2848996", "direction": "bottom", "leftArrow": "false", "rightArrow": "false", - "stroke": "dotted", "p0": { "x": 0, - "y": 76.34691492882303 + "y": -0.5 }, "p1": { - "x": 0.5702216182256714, - "y": -0.004517251466967862 + "x": 0.4734542725983139, + "y": -0.00011162392477927807 }, "p2": { "x": 0, - "y": 0.4406451246140932 + "y": 743.8442967676933 } } }, { - "ID": "1883", + "ID": "2385", "typeID": "Arrow", - "zOrder": "58", - "w": "1", - "h": "83", + "zOrder": "5", + "w": "276", + "h": "1", "measuredW": "150", "measuredH": "100", - "x": "1328", - "y": "1054", + "x": "1264", + "y": "2948", "properties": { "color": "2848996", - "curvature": "-1", + "direction": "bottom", "leftArrow": "false", "rightArrow": "false", "stroke": "dotted", "p0": { - "x": -0.24980034602958767, - "y": 83.20762430962418 + "x": 0.14952920007272041, + "y": -0.2906057506302204 }, "p1": { - "x": 0.5, - "y": 0 - }, + "x": 0.47345427259831324, + "y": -0.00011162392477928119 + }, "p2": { - "x": -0.24980034602958767, - "y": 0.43870807682526447 + "x": 276.35388907392644, + "y": -0.2906057506302204 } } }, { - "ID": "1884", + "ID": "2386", "typeID": "Arrow", - "zOrder": "59", - "w": "189", - "h": "26", + "zOrder": "6", + "w": "1", + "h": "95", "measuredW": "150", "measuredH": "100", - "x": "1336", - "y": "948", + "x": "1051", + "y": "2946", "properties": { "color": "2848996", - "curvature": "0", + "direction": "bottom", "leftArrow": "false", "rightArrow": "false", "stroke": "dotted", "p0": { - "x": 188.1515397158321, - "y": 26.337543700961987 + "x": 0.14952920007272041, + "y": 95.70939424936978 }, "p1": { - "x": 0.47995321703110466, - "y": -0.07212649611970283 + "x": 0.4734542725983132, + "y": -0.00011162392477928113 }, "p2": { - "x": -0.43181905983556135, - "y": 4.652303666645025 + "x": 0.14952920007272041, + "y": 0.28897406297528505 } } }, { - "ID": "1885", + "ID": "2387", "typeID": "Arrow", - "zOrder": "60", - "w": "166", - "h": "56", + "zOrder": "7", + "w": "487", + "h": "1", "measuredW": "150", "measuredH": "100", - "x": "1351", - "y": "872", + "x": "837", + "y": "2949", "properties": { "color": "2848996", - "curvature": "0", + "direction": "bottom", "leftArrow": "false", "rightArrow": "false", - "stroke": "dotted", "p0": { - "x": 166.53718413209776, - "y": 0.4764677114528695 + "x": -0.27015691059352775, + "y": -0.5 }, "p1": { - "x": 0.46937049176096135, - "y": 0.08997514266115965 + "x": 0.47345427259831374, + "y": -0.00011162392477927586 }, "p2": { - "x": 0.46780214183309, - "y": 56.80287186414216 + "x": 486.40782766206894, + "y": -0.5 } } }, { - "ID": "1886", + "ID": "2388", "typeID": "Arrow", - "zOrder": "61", - "w": "167", - "h": "21", + "zOrder": "8", + "w": "1", + "h": "141", "measuredW": "150", "measuredH": "100", - "x": "1349", - "y": "918", + "x": "745", + "y": "2813", "properties": { "color": "2848996", - "curvature": "0", + "direction": "bottom", "leftArrow": "false", "rightArrow": "false", - "stroke": "dotted", "p0": { - "x": 166.76388789240877, - "y": 0.20312439636302315 + "x": 0, + "y": -0.5 }, "p1": { - "x": 0.4153666146645862, - "y": 0.03354134165366616 + "x": 0.4734542725983137, + "y": -0.00011162392477927808 }, "p2": { - "x": -0.18213472511160944, - "y": 21.402619331921187 + "x": 0, + "y": 140.20697009709465 } } }, { - "ID": "1887", - "typeID": "Arrow", - "zOrder": "62", - "w": "174", - "h": "99", - "measuredW": "150", - "measuredH": "100", - "x": "1519", - "y": "1206", + "ID": "2389", + "typeID": "__group__", + "zOrder": "9", + "measuredW": "200", + "measuredH": "50", + "w": "200", + "h": "50", + "x": "674", + "y": "2927", "properties": { - "curvature": "0", - "rightArrow": "false", - "leftArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": -0.4945558087927111, - "y": 99.40759071508523 - }, - "p1": { - "x": 0.4991402865711436, - "y": -0.13680773075641436 - }, - "p2": { - "x": 173.69874920774737, - "y": 0.19861969047110506 + "controlName": "120-real-time-data" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "120", + "measuredH": "25", + "x": "40", + "y": "12", + "properties": { + "size": "17", + "text": "Real-Time Data" + } + } + ] } } }, { - "ID": "1888", + "ID": "2390", "typeID": "Arrow", - "zOrder": "63", - "w": "177", - "h": "54", + "zOrder": "10", + "w": "1", + "h": "91", "measuredW": "150", "measuredH": "100", - "x": "1516", - "y": "1263", + "x": "747", + "y": "2729", "properties": { - "curvature": "0", - "rightArrow": "false", + "color": "2848996", + "direction": "bottom", "leftArrow": "false", - "color": "10027263", + "rightArrow": "false", "stroke": "dotted", "p0": { - "x": -0.14449267573741054, - "y": 54.33230661633661 + "x": 0.14952920007272041, + "y": 91.51893704138683 }, "p1": { - "x": 0.5049653579676676, - "y": -0.08879907621247117 + "x": 0.4734542725983133, + "y": -0.0001116239247792811 }, "p2": { - "x": 176.69874920774737, - "y": 0.08207771058664548 + "x": 0.14952920007272041, + "y": 0.044261593589453696 } } }, { - "ID": "1889", + "ID": "2391", "typeID": "Arrow", - "zOrder": "64", - "w": "189", - "h": "5", + "zOrder": "11", + "w": "623", + "h": "1", "measuredW": "150", "measuredH": "100", - "x": "1520", - "y": "1323", + "x": "849", + "y": "2811", "properties": { - "curvature": "0", - "rightArrow": "false", + "color": "2848996", + "direction": "bottom", "leftArrow": "false", - "color": "10027263", - "stroke": "dotted", + "rightArrow": "false", "p0": { - "x": -0.1695873753203614, - "y": 4.932054084115634 + "x": -0.27015691059352775, + "y": -0.5 }, "p1": { - "x": 0.5, - "y": 0 + "x": 0.47345427259831374, + "y": -0.00011162392477927636 }, "p2": { - "x": 188.57320260870983, - "y": -0.3887220358042214 + "x": 622.4205322823302, + "y": -0.5 } } }, { - "ID": "1890", + "ID": "2392", "typeID": "Arrow", - "zOrder": "65", - "w": "236", - "h": "1", + "zOrder": "12", + "w": "1", + "h": "260", "measuredW": "150", "measuredH": "100", - "x": "923", - "y": "1047", + "x": "1567", + "y": "2502", "properties": { "color": "2848996", "direction": "bottom", @@ -319,120 +500,328 @@ "rightArrow": "false", "p0": { "x": 0, - "y": 0.5 + "y": -0.5 }, "p1": { - "x": 0.47345427259831335, - "y": -0.00011162392477927807 + "x": 0.4734542725983138, + "y": -0.00011162392477927808 }, "p2": { - "x": 235.68489507160098, - "y": -0.32512695598120445 + "x": 0, + "y": 259.3201595478108 } } }, { - "ID": "1891", + "ID": "2393", "typeID": "Arrow", - "zOrder": "66", + "zOrder": "13", "w": "1", - "h": "90", + "h": "61", "measuredW": "150", "measuredH": "100", - "x": "910", - "y": "1052", + "x": "1751", + "y": "2608", "properties": { "color": "2848996", - "curvature": "-1", + "direction": "bottom", "leftArrow": "false", "rightArrow": "false", "stroke": "dotted", "p0": { - "x": -0.24980034602958767, - "y": 89.04191001796403 + "x": 0, + "y": 61.303758754635055 }, "p1": { - "x": 0.49999999999999994, - "y": 0 + "x": 0.5702216182256715, + "y": -0.004517251466967861 }, "p2": { - "x": -0.24980034602958767, - "y": -0.47695781458287456 + "x": 0, + "y": 0.4406451246140932 } } }, { - "ID": "1892", + "ID": "2394", "typeID": "Arrow", - "zOrder": "67", + "zOrder": "14", "w": "1", - "h": "172", + "h": "68", "measuredW": "150", "measuredH": "100", - "x": "746", - "y": "969", + "x": "1379", + "y": "2491", "properties": { "color": "2848996", - "curvature": "-1", + "direction": "bottom", "leftArrow": "false", "rightArrow": "false", "stroke": "dotted", "p0": { - "x": -0.24980034602958767, - "y": 172.04191001796403 + "x": 0.14952920007272041, + "y": 68.46927069197682 }, "p1": { - "x": 0.5, - "y": 0 + "x": 0.47345427259831335, + "y": -0.00011162392477928112 }, "p2": { - "x": -0.24980034602958767, - "y": 0.24952581221509718 + "x": 0.14952920007272041, + "y": 0.11283757677028916 } } }, { - "ID": "1894", + "ID": "2395", "typeID": "Arrow", - "zOrder": "68", + "zOrder": "15", + "w": "413", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1160", + "y": "2489", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": -0.23631528854207318, + "y": -0.5 + }, + "p1": { + "x": 0.4734542725983137, + "y": -0.00011162392477927657 + }, + "p2": { + "x": 412.9689266111002, + "y": -0.5 + } + } + }, + { + "ID": "2396", + "typeID": "Arrow", + "zOrder": "16", "w": "1", - "h": "113", + "h": "95", + "measuredW": "150", + "measuredH": "100", + "x": "1086", + "y": "2494", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.14952920007272041, + "y": 95.46927069197682 + }, + "p1": { + "x": 0.47345427259831324, + "y": -0.00011162392477928106 + }, + "p2": { + "x": 0.14952920007272041, + "y": 0.044261593589453696 + } + } + }, + { + "ID": "2397", + "typeID": "Arrow", + "zOrder": "17", + "w": "1", + "h": "141", + "measuredW": "150", + "measuredH": "100", + "x": "1086", + "y": "2351", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": -0.5 + }, + "p1": { + "x": 0.4734542725983137, + "y": -0.00011162392477927808 + }, + "p2": { + "x": 0, + "y": 140.20697009709465 + } + } + }, + { + "ID": "2398", + "typeID": "Arrow", + "zOrder": "18", + "w": "283", + "h": "70", + "measuredW": "150", + "measuredH": "100", + "x": "1286", + "y": "2337", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": -0.4303565735040138, + "y": 0.1604238547820387 + }, + "p1": { + "x": 0.6318104821378916, + "y": 0.08459535307056273 + }, + "p2": { + "x": 282.89489105686675, + "y": 70.62473414627311 + } + } + }, + { + "ID": "2399", + "typeID": "Arrow", + "zOrder": "19", + "w": "280", + "h": "32", + "measuredW": "150", + "measuredH": "100", + "x": "1291", + "y": "2330", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.4416692841202803, + "y": 1.288397997157972 + }, + "p1": { + "x": 0.6187498978609268, + "y": 0.05481031926139201 + }, + "p2": { + "x": 280.830903985679, + "y": 32.11653374968546 + } + } + }, + { + "ID": "2400", + "typeID": "Arrow", + "zOrder": "20", + "w": "272", + "h": "35", "measuredW": "150", "measuredH": "100", "x": "1299", - "y": "3757", + "y": "2269", "properties": { "color": "2848996", - "curvature": "0", + "direction": "bottom", "leftArrow": "false", "rightArrow": "false", "stroke": "dotted", "p0": { - "x": 1, - "y": 112.58154962364824 + "x": -0.21829839384940897, + "y": 35.13027840564564 }, "p1": { - "x": 0.4072427393330942, - "y": 0.00953746862674794 + "x": 0.6266543897586216, + "y": -0.03388863281637455 }, "p2": { - "x": 1, - "y": 0 + "x": 271.362897521273, + "y": -0.10187674010012415 + } + } + }, + { + "ID": "2401", + "typeID": "Arrow", + "zOrder": "21", + "w": "280", + "h": "72", + "measuredW": "150", + "measuredH": "100", + "x": "1287", + "y": "2223", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.03764989090200288, + "y": 72.32223961920909 + }, + "p1": { + "x": 0.531044448873829, + "y": -0.059547538369544246 + }, + "p2": { + "x": 280.42688459246074, + "y": 0.3899228633117673 } } }, { - "ID": "1896", + "ID": "2402", + "typeID": "Arrow", + "zOrder": "22", + "w": "320", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1295", + "y": "2316", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": -0.5 + }, + "p1": { + "x": 0.4734542725983135, + "y": -0.00011162392477927686 + }, + "p2": { + "x": 320.137094685658, + "y": -0.5 + }, + "stroke": "dotted" + } + }, + { + "ID": "2403", "typeID": "__group__", - "zOrder": "216", - "measuredW": "432", - "measuredH": "124", - "w": "432", - "h": "124", - "x": "670", - "y": "3491", + "zOrder": "23", + "measuredW": "324", + "measuredH": "50", + "w": "324", + "h": "50", + "x": "1005", + "y": "2312", "properties": { - "controlName": "104-scalability:observability" + "controlName": "114-design-and-development-principles" }, "children": { "controls": { @@ -441,53 +830,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "432", - "h": "124", + "w": "324", + "h": "50", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "105", - "measuredH": "26", - "x": "18", - "y": "18", - "properties": { - "text": "Observability", - "size": "18" - } - }, - { - "ID": "2", - "typeID": "Label", - "zOrder": "2", - "measuredW": "400", - "measuredH": "25", - "x": "18", - "y": "50", - "properties": { - "size": "17", - "text": "Metrics logging and other observable items that can" - } - }, - { - "ID": "3", - "typeID": "Label", - "zOrder": "3", - "measuredW": "283", + "measuredW": "275", "measuredH": "25", - "x": "18", - "y": "79", + "x": "24", + "y": "13", "properties": { "size": "17", - "text": "help in debugging and solving issues" + "text": "Design and Development Principles" } } ] @@ -495,2506 +858,1355 @@ } }, { - "ID": "1898", - "typeID": "__group__", - "zOrder": "69", - "measuredW": "200", - "measuredH": "50", - "w": "200", - "h": "50", - "x": "1005", - "y": "2463", + "ID": "2404", + "typeID": "Arrow", + "zOrder": "24", + "w": "219", + "h": "145", + "measuredW": "150", + "measuredH": "100", + "x": "868", + "y": "2155", "properties": { - "controlName": "115-architectural-patterns" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "166", - "measuredH": "25", - "x": "17", - "y": "13", - "properties": { - "text": "Architectural Patterns", - "size": "17" - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": -0.23631528854207318, + "y": 0.5 + }, + "p1": { + "x": 0.5857743945397229, + "y": 0.2432032446977395 + }, + "p2": { + "x": 219.0587868926923, + "y": 144.632126492103 } } }, { - "ID": "1899", - "typeID": "__group__", - "zOrder": "70", - "measuredW": "209", - "measuredH": "40", - "w": "209", - "h": "40", - "x": "1005", - "y": "2546", + "ID": "2405", + "typeID": "Arrow", + "zOrder": "25", + "w": "1", + "h": "91", + "measuredW": "150", + "measuredH": "100", + "x": "768", + "y": "2148", "properties": { - "controlName": "100-architectural-patterns:monolithic-apps" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "202", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "123", - "measuredW": "123", - "measuredH": "25", - "x": "39", - "y": "7", - "properties": { - "size": "17", - "text": "Monolithic Apps" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "185", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "185", - "y": "8", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.14952920007272041, + "y": 91.51893704138683 + }, + "p1": { + "x": 0.4734542725983133, + "y": -0.0001116239247792811 + }, + "p2": { + "x": 0.14952920007272041, + "y": 0.044261593589453696 } } }, { - "ID": "1900", - "typeID": "__group__", - "zOrder": "71", - "measuredW": "209", - "measuredH": "37", - "w": "209", - "h": "37", - "x": "1005", - "y": "2588", + "ID": "2406", + "typeID": "Arrow", + "zOrder": "26", + "w": "1", + "h": "118", + "measuredW": "150", + "measuredH": "100", + "x": "768", + "y": "2031", "properties": { - "controlName": "101-architectural-patterns:microservices" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "202", - "h": "37", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "112", - "measuredW": "108", - "measuredH": "25", - "x": "45", - "y": "6", - "properties": { - "size": "17", - "text": "Microservices" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "185", - "y": "7", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "185", - "y": "7", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - }, - { - "ID": "1902", - "typeID": "__group__", - "zOrder": "72", - "measuredW": "209", - "measuredH": "37", - "w": "209", - "h": "37", - "x": "1005", - "y": "2628", - "properties": { - "controlName": "102-architectural-patterns:soa" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "202", - "h": "37", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "38", - "measuredW": "34", - "measuredH": "25", - "x": "103", - "y": "6", - "properties": { - "size": "17", - "text": "SOA" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "185", - "y": "7", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "185", - "y": "7", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": -0.5 + }, + "p1": { + "x": 0.47345427259831374, + "y": -0.0001116239247792781 + }, + "p2": { + "x": 0, + "y": 117.42746065827805 } } }, { - "ID": "1903", - "typeID": "__group__", - "zOrder": "73", - "measuredW": "182", - "measuredH": "50", - "w": "182", - "h": "50", - "x": "1284", - "y": "2463", + "ID": "2407", + "typeID": "Arrow", + "zOrder": "27", + "w": "1", + "h": "91", + "measuredW": "150", + "measuredH": "100", + "x": "769", + "y": "1939", "properties": { - "controlName": "117-message-brokers" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "182", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "141", - "measuredW": "136", - "measuredH": "25", - "x": "20", - "y": "12", - "properties": { - "size": "17", - "text": "Message Brokers" - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.14952920007272041, + "y": 91.51893704138683 + }, + "p1": { + "x": 0.4734542725983133, + "y": -0.0001116239247792811 + }, + "p2": { + "x": 0.14952920007272041, + "y": 0.044261593589453696 } } }, { - "ID": "1904", - "typeID": "__group__", - "zOrder": "74", - "measuredW": "305", - "measuredH": "50", - "w": "305", - "h": "50", - "x": "1516", - "y": "2465", + "ID": "2408", + "typeID": "Arrow", + "zOrder": "28", + "w": "469", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "837", + "y": "2033", "properties": { - "controlName": "118-containerization" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "305", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "250", - "measuredH": "25", - "x": "28", - "y": "13", - "properties": { - "text": "Containerization vs Virtualization", - "size": "17" - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": -0.23631528854207318, + "y": -0.5 + }, + "p1": { + "x": 0.4734542725983135, + "y": -0.000111623924779277 + }, + "p2": { + "x": 468.3987853999388, + "y": -0.5 } } }, { - "ID": "1905", - "typeID": "__group__", - "zOrder": "75", - "measuredW": "197", - "measuredH": "50", - "w": "197", - "h": "50", - "x": "678", - "y": "2786", + "ID": "2409", + "typeID": "Arrow", + "zOrder": "29", + "w": "1", + "h": "75", + "measuredW": "150", + "measuredH": "100", + "x": "1391", + "y": "2039", "properties": { - "controlName": "122-web-servers" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "197", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "98", - "measuredH": "25", - "x": "50", - "y": "13", - "properties": { - "text": "Web Servers", - "size": "17" - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.14952920007272041, + "y": 75.11122147525384 + }, + "p1": { + "x": 0.4734542725983133, + "y": -0.000111623924779281 + }, + "p2": { + "x": 0.14952920007272041, + "y": 0.044261593589453696 } } }, { - "ID": "1906", - "typeID": "__group__", - "zOrder": "76", - "measuredW": "153", - "measuredH": "40", - "w": "153", - "h": "40", - "x": "671", - "y": "2572", + "ID": "2410", + "typeID": "Arrow", + "zOrder": "30", + "w": "223", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1391", + "y": "1798", "properties": { - "controlName": "100-web-servers:nginx" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "46", - "measuredW": "45", - "measuredH": "25", - "x": "58", - "y": "7", - "properties": { - "size": "17", - "text": "Nginx" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": -0.5 + }, + "p1": { + "x": 0.4734542725983135, + "y": -0.00011162392477927705 + }, + "p2": { + "x": 223.3987853999388, + "y": -0.5 } } }, { - "ID": "1907", - "typeID": "__group__", - "zOrder": "77", - "measuredW": "153", - "measuredH": "40", - "w": "153", - "h": "40", - "x": "671", - "y": "2617", + "ID": "2411", + "typeID": "Arrow", + "zOrder": "31", + "w": "1", + "h": "206", + "measuredW": "150", + "measuredH": "100", + "x": "1688", + "y": "1690", "properties": { - "controlName": "101-web-servers:apache" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "60", - "measuredW": "59", - "measuredH": "25", - "x": "51", - "y": "7", - "properties": { - "size": "17", - "text": "Apache" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "4", - "typeID": "Icon", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.14952920007272041, + "y": 206.75343217305021 + }, + "p1": { + "x": 0.4734542725983135, + "y": -0.00011162392477928018 + }, + "p2": { + "x": 0.14952920007272041, + "y": 0.38258659839470965 + } + } + }, + { + "ID": "2412", + "typeID": "Arrow", + "zOrder": "32", + "w": "223", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1391", + "y": "1780", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": -0.5 + }, + "p1": { + "x": 0.4734542725983135, + "y": -0.00011162392477927705 + }, + "p2": { + "x": 223.3987853999388, + "y": -0.5 } } }, { - "ID": "1908", - "typeID": "__group__", - "zOrder": "78", - "measuredW": "153", - "measuredH": "40", - "w": "153", - "h": "40", - "x": "671", - "y": "2663", + "ID": "2413", + "typeID": "Arrow", + "zOrder": "33", + "w": "1", + "h": "211", + "measuredW": "150", + "measuredH": "100", + "x": "1391", + "y": "1566", "properties": { - "controlName": "102-web-servers:caddy" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "53", - "measuredW": "49", - "measuredH": "25", - "x": "54", - "y": "7", - "properties": { - "size": "17", - "text": "Caddy" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "4", - "typeID": "Icon", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": -0.5 + }, + "p1": { + "x": 0.47345427259831363, + "y": -0.00011162392477927808 + }, + "p2": { + "x": 0, + "y": 210.88680138292193 } } }, { - "ID": "1909", - "typeID": "__group__", - "zOrder": "79", - "measuredW": "152", - "measuredH": "40", - "w": "152", - "h": "40", - "x": "671", - "y": "2708", + "ID": "2414", + "typeID": "Arrow", + "zOrder": "34", + "w": "1", + "h": "93", + "measuredW": "150", + "measuredH": "100", + "x": "1391", + "y": "1486", "properties": { - "controlName": "103-web-servers:ms-iis" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "55", - "measuredW": "51", - "measuredH": "25", - "x": "57", - "y": "7", - "properties": { - "size": "17", - "text": "MS IIS" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "4", - "typeID": "Icon", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 1.2127956978895327, + "y": 93.40095678414946 + }, + "p1": { + "x": 0.47345427259831346, + "y": -0.00011162392477928008 + }, + "p2": { + "x": 0.14952920007272041, + "y": 0.38258659839470965 + } + } + }, + { + "ID": "2415", + "typeID": "Arrow", + "zOrder": "35", + "w": "267", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1137", + "y": "1579", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": -0.5 + }, + "p1": { + "x": 0.4734542725983135, + "y": -0.00011162392477927736 + }, + "p2": { + "x": 267.29850098875386, + "y": -0.5 } } }, { - "ID": "1910", - "typeID": "__group__", - "zOrder": "80", - "measuredW": "144", - "measuredH": "40", - "w": "144", - "h": "40", - "x": "1671", - "y": "2588", + "ID": "2416", + "typeID": "Arrow", + "zOrder": "36", + "w": "1", + "h": "108", + "measuredW": "150", + "measuredH": "100", + "x": "1120", + "y": "1464", "properties": { - "controlName": "ext_link:roadmap.sh/docker" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "4273622", - "borderColor": "4273622" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "58", - "measuredW": "56", - "measuredH": "25", - "x": "47", - "y": "8", - "properties": { - "size": "17", - "text": "Docker", - "color": "16777215" - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.21279569788953268, + "y": 107.33087955966835 + }, + "p1": { + "x": 0.47345427259831363, + "y": -0.00011162392477927894 + }, + "p2": { + "x": 0.21279569788953268, + "y": -0.3596558928045397 } } }, { - "ID": "1911", - "typeID": "__group__", - "zOrder": "81", - "measuredW": "154", - "measuredH": "40", - "w": "154", - "h": "40", - "x": "1672", - "y": "2544", + "ID": "2417", + "typeID": "Arrow", + "zOrder": "37", + "w": "1", + "h": "129", + "measuredW": "150", + "measuredH": "100", + "x": "1058", + "y": "1587", "properties": { - "controlName": "102-containerization:lxc" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "textColor": "6710886", - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "37", - "measuredW": "32", - "measuredH": "25", - "x": "53", - "y": "8", - "properties": { - "color": "3355443", - "size": "17", - "text": "LXC" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "130", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "130", - "y": "8", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.21279569788953268, + "y": 129.33087955966835 + }, + "p1": { + "x": 0.4734542725983137, + "y": -0.00011162392477927875 + }, + "p2": { + "x": 0.21279569788953268, + "y": 0.03075605110257129 } } }, { - "ID": "1912", - "typeID": "__group__", - "zOrder": "82", - "measuredW": "141", - "measuredH": "50", - "w": "141", - "h": "50", - "x": "976", - "y": "2927", + "ID": "2418", + "typeID": "Arrow", + "zOrder": "38", + "w": "214", + "h": "180", + "measuredW": "150", + "measuredH": "100", + "x": "816", + "y": "1586", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": -0.17347654643435817, + "y": 180.38352203951763 + }, + "p1": { + "x": 0.4387031121915371, + "y": 0.07581196822794485 + }, + "p2": { + "x": 214.2042960399042, + "y": 0.24664368571939121 + } + } + }, + { + "ID": "2419", + "typeID": "Arrow", + "zOrder": "39", + "w": "183", + "h": "125", + "measuredW": "150", + "measuredH": "100", + "x": "811", + "y": "1594", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.36031985801696464, + "y": 124.74401702033128 + }, + "p1": { + "x": 0.47415070546175875, + "y": 0.06172844723948579 + }, + "p2": { + "x": 183.47466727551432, + "y": -0.3096836550328135 + } + } + }, + { + "ID": "2420", + "typeID": "Arrow", + "zOrder": "40", + "w": "186", + "h": "82", + "measuredW": "150", + "measuredH": "100", + "x": "808", + "y": "1591", "properties": { - "controlName": "ext_link:roadmap.sh/graphql" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "141", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "4273622", - "borderColor": "4273622" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "71", - "measuredH": "25", - "x": "35", - "y": "13", - "properties": { - "text": "GraphQL", - "size": "17", - "color": "16777215" - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0, + "y": 81.5 + }, + "p1": { + "x": 0.4667037938257157, + "y": 0.05826324141902692 + }, + "p2": { + "x": 186.47466727551432, + "y": -0.2871527187319316 } } }, { - "ID": "1913", - "typeID": "__group__", - "zOrder": "83", - "measuredW": "155", - "measuredH": "40", - "w": "155", + "ID": "2421", + "typeID": "Arrow", + "zOrder": "41", "h": "40", - "x": "975", - "y": "3025", + "measuredW": "150", + "measuredH": "100", + "x": "817", + "y": "1591", "properties": { - "controlName": "100-graphql:apollo" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "50", - "measuredW": "48", - "measuredH": "25", - "x": "47", - "y": "7", - "properties": { - "size": "17", - "text": "Apollo" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "131", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "131", - "y": "8", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.3152579854152009, + "y": 39.90867964120662 + }, + "p1": { + "x": 0.4665558798140599, + "y": 0.0702975125629915 + }, + "p2": { + "x": 150.67744570222203, + "y": -0.2871527187319316 } } }, { - "ID": "1914", - "typeID": "__group__", - "zOrder": "84", - "measuredW": "153", - "measuredH": "40", - "w": "153", - "h": "40", - "x": "975", - "y": "3069", + "ID": "2422", + "typeID": "Arrow", + "zOrder": "42", + "w": "176", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "804", + "y": "1577", "properties": { - "controlName": "101-graphql:relay-modern" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "108", - "measuredW": "107", - "measuredH": "25", - "x": "18", - "y": "7", - "properties": { - "size": "17", - "text": "Relay Modern" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "129", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "129", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "4", - "typeID": "Icon", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "x": "129", - "y": "8", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0, + "y": 1.5 + }, + "p1": { + "x": 0.47345427259831363, + "y": -0.00011162392477927848 + }, + "p2": { + "x": 176.21279569788953, + "y": 0.03075605110257129 } } }, { - "ID": "1915", - "typeID": "__group__", - "zOrder": "212", - "measuredW": "200", - "measuredH": "50", - "w": "200", - "h": "50", - "x": "674", - "y": "3019", + "ID": "2423", + "typeID": "Arrow", + "zOrder": "43", + "w": "1", + "h": "239", + "measuredW": "150", + "measuredH": "100", + "x": "1059", + "y": "1336", "properties": { - "controlName": "121-web-sockets" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "95", - "measuredH": "25", - "x": "52", - "y": "12", - "properties": { - "text": "WebSockets", - "size": "17" - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": -0.5 + }, + "p1": { + "x": 0.47345427259831346, + "y": -0.00011162392477927806 + }, + "p2": { + "x": 0, + "y": 238.3367674309227 } } }, { - "ID": "1922", - "typeID": "__group__", - "zOrder": "85", - "measuredW": "179", - "measuredH": "40", - "w": "179", - "h": "40", - "x": "975", - "y": "1692", + "ID": "2424", + "typeID": "Arrow", + "zOrder": "44", + "w": "236", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "1135", + "y": "1323", "properties": { - "controlName": "104-apis:authentication:jwt" - }, - "children": { - "controls": { - "control": [ - { - "ID": "1", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Canvas", - "zOrder": "0", - "w": "169", - "h": "40", - "measuredW": "100", - "measuredH": "70", - "x": "10", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "4", - "typeID": "Label", - "zOrder": "1", - "measuredW": "35", - "measuredH": "25", - "x": "77", - "y": "7", - "properties": { - "text": "JWT", - "size": "17" - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": 0.5 + }, + "p1": { + "x": 0.47345427259831335, + "y": -0.00011162392477927807 + }, + "p2": { + "x": 235.68489507160098, + "y": -0.32512695598120445 } } }, { - "ID": "1925", - "typeID": "__group__", - "zOrder": "86", - "measuredW": "130", - "measuredH": "50", - "w": "130", - "h": "50", - "x": "1332", - "y": "1552", + "ID": "2425", + "typeID": "Arrow", + "zOrder": "45", + "w": "166", + "h": "168", + "measuredW": "150", + "measuredH": "100", + "x": "859", + "y": "1342", "properties": { - "controlName": "110-caching" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "130", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "64", - "measuredH": "25", - "x": "33", - "y": "13", - "properties": { - "text": "Caching", - "size": "17" - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.24202910684186918, + "y": 167.85171934094888 + }, + "p1": { + "x": 0.5187506526383378, + "y": 0.10092669429158865 + }, + "p2": { + "x": 165.86308329089002, + "y": -0.4192717100440859 + } + } + }, + { + "ID": "2426", + "typeID": "Arrow", + "zOrder": "46", + "w": "151", + "h": "125", + "measuredW": "150", + "measuredH": "100", + "x": "862", + "y": "1340", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": -0.1080340262133177, + "y": 124.80279260288762 + }, + "p1": { + "x": 0.4785842736801959, + "y": 0.11879950919024476 + }, + "p2": { + "x": 150.93836738963864, + "y": 0.25575985648356436 } } }, { - "ID": "1926", - "typeID": "__group__", - "zOrder": "87", - "measuredW": "154", - "measuredH": "40", - "w": "154", - "h": "40", - "x": "1502", - "y": "1400", + "ID": "2427", + "typeID": "Arrow", + "zOrder": "47", + "w": "115", + "h": "81", + "measuredW": "150", + "measuredH": "100", + "x": "863", + "y": "1344", "properties": { - "controlName": "100-caching:server-side:redis" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "46", - "measuredW": "45", - "measuredH": "25", - "x": "49", - "y": "8", - "properties": { - "size": "17", - "text": "Redis" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "130", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "130", - "y": "8", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.216934407259032, + "y": 81.05373959871622 + }, + "p1": { + "x": 0.44045282407886405, + "y": 0.13711042381893543 + }, + "p2": { + "x": 115.48918811935664, + "y": 0.2306651569006135 } } }, { - "ID": "1927", - "typeID": "__group__", - "zOrder": "88", - "measuredW": "155", - "measuredH": "40", - "w": "155", + "ID": "2428", + "typeID": "Arrow", + "zOrder": "48", + "w": "97", "h": "40", - "x": "1502", - "y": "1445", + "measuredW": "150", + "measuredH": "100", + "x": "859", + "y": "1335", "properties": { - "controlName": "101-caching:server-side:memcached" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "96", - "measuredW": "96", - "measuredH": "25", - "x": "28", - "y": "8", - "properties": { - "size": "17", - "text": "Memcached" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "131", - "y": "9", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "131", - "y": "9", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "4", - "typeID": "Icon", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "x": "131", - "y": "9", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.24202910684186918, + "y": 39.70493912676557 + }, + "p1": { + "x": 0.41485764854624113, + "y": 0.109423049141837 + }, + "p2": { + "x": 96.96472475032601, + "y": -0.044113877406061874 + } + } + }, + { + "ID": "2429", + "typeID": "Arrow", + "zOrder": "49", + "w": "107", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "846", + "y": "1321", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": -0.5 + }, + "p1": { + "x": 0.4734542725983134, + "y": -0.00011162392477927755 + }, + "p2": { + "x": 107.31478788338131, + "y": -0.5 + }, + "stroke": "dotted" + } + }, + { + "ID": "2430", + "typeID": "Arrow", + "zOrder": "50", + "w": "140", + "h": "251", + "measuredW": "150", + "measuredH": "100", + "x": "1202", + "y": "1058", + "properties": { + "color": "2848996", + "curvature": "-1", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 1.733821809662004, + "y": -0.012705872300330157 + }, + "p1": { + "x": 0.6281690675432272, + "y": -0.24735053069351437 + }, + "p2": { + "x": 139.53053889079024, + "y": 250.4063280539806 } } }, { - "ID": "1928", - "typeID": "__group__", - "zOrder": "89", - "measuredW": "129", - "measuredH": "40", - "w": "129", - "h": "40", - "x": "1332", - "y": "1421", + "ID": "2431", + "typeID": "Arrow", + "zOrder": "51", + "w": "1", + "h": "99", + "measuredW": "150", + "measuredH": "100", + "x": "909", + "y": "954", "properties": { - "controlName": "101-caching:server-side" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "129", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "95", - "measuredW": "90", - "measuredH": "25", - "x": "19", - "y": "8", - "properties": { - "size": "17", - "text": "Server Side" - } - } - ] + "color": "2848996", + "curvature": "-1", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0.08262228161265739, + "y": -0.00765522788196904 + }, + "p1": { + "x": 0.46737830066706765, + "y": -0.0036060514395746665 + }, + "p2": { + "x": 0.08262228161265739, + "y": 99.34990461054645 } } }, { - "ID": "1929", - "typeID": "__group__", - "zOrder": "90", - "measuredW": "140", - "measuredH": "40", - "w": "140", - "h": "40", - "x": "1333", - "y": "1464", + "ID": "2432", + "typeID": "Arrow", + "zOrder": "52", + "w": "257", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "909", + "y": "952", "properties": { - "controlName": "102-caching:client-side" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "130", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "88", - "measuredW": "84", - "measuredH": "25", - "x": "21", - "y": "7", - "properties": { - "size": "17", - "text": "Client Side" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "116", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "116", - "y": "8", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0.2658611453201729, + "y": 0.452028801972574 + }, + "p1": { + "x": 0.47345427259831346, + "y": -0.00011162392477927633 + }, + "p2": { + "x": 257.72987682295434, + "y": 0.452028801972574 } } }, { - "ID": "1930", - "typeID": "__group__", - "zOrder": "91", - "measuredW": "139", - "measuredH": "37", - "w": "139", - "h": "37", - "x": "1332", - "y": "1381", - "properties": { - "controlName": "100-caching:cdn" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "129", - "h": "37", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "40", - "measuredW": "38", - "measuredH": "25", - "x": "45", - "y": "6", - "properties": { - "size": "17", - "text": "CDN" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "115", - "y": "5", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "115", - "y": "5", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "ID": "2433", + "typeID": "Arrow", + "zOrder": "53", + "w": "189", + "h": "129", + "measuredW": "150", + "measuredH": "100", + "x": "1329", + "y": "971", + "properties": { + "color": "2848996", + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 189.29875220380154, + "y": 129.53446090344232 + }, + "p1": { + "x": 0.5173830120100052, + "y": -0.10475991954824745 + }, + "p2": { + "x": -0.0566612271975373, + "y": 0.20186173525848972 } } }, { - "ID": "1932", - "typeID": "__group__", - "zOrder": "92", - "measuredW": "229", - "measuredH": "50", - "w": "229", - "h": "50", - "x": "941", - "y": "1301", + "ID": "2434", + "typeID": "Arrow", + "zOrder": "54", + "w": "173", + "h": "89", + "measuredW": "150", + "measuredH": "100", + "x": "1344", + "y": "965", "properties": { - "controlName": "106-relational-databases" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "229", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "165", - "measuredH": "25", - "x": "32", - "y": "13", - "properties": { - "size": "17", - "text": "Relational Databases" - } - } - ] + "color": "2848996", + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 172.29875220380154, + "y": 88.53446090344232 + }, + "p1": { + "x": 0.5173830120100056, + "y": -0.10475991954824762 + }, + "p2": { + "x": -0.4820084590012357, + "y": -0.42298043210348624 } } }, { - "ID": "1933", - "typeID": "__group__", - "zOrder": "93", - "measuredW": "199", - "measuredH": "40", - "w": "199", - "h": "40", - "x": "668", - "y": "1305", + "ID": "2435", + "typeID": "Arrow", + "zOrder": "55", + "w": "60", + "h": "30", + "measuredW": "150", + "measuredH": "100", + "x": "1444", + "y": "1445", "properties": { - "controlName": "100-relational-databases:postgresql" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "191", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "96", - "measuredW": "93", - "measuredH": "25", - "x": "56", - "y": "7", - "properties": { - "size": "17", - "text": "PostgreSQL" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "4", - "typeID": "Icon", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 60.31920991767379, + "y": 30.162697528578974 + }, + "p1": { + "x": 0.38469222125109326, + "y": -0.13210138594081827 + }, + "p2": { + "x": 0.32605804231866387, + "y": -0.07999046131453724 + } + } + }, + { + "ID": "2436", + "typeID": "Arrow", + "zOrder": "56", + "w": "61", + "h": "24", + "measuredW": "150", + "measuredH": "100", + "x": "1448", + "y": "1409", + "properties": { + "color": "2848996", + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 61.039807248761235, + "y": 0.07433489335426202 + }, + "p1": { + "x": 0.46208226221079857, + "y": 0.11053984575835622 + }, + "p2": { + "x": 0.4878500355812321, + "y": 24.3979188798794 + } + } + }, + { + "ID": "2437", + "typeID": "Arrow", + "zOrder": "57", + "w": "1", + "h": "76", + "measuredW": "150", + "measuredH": "100", + "x": "1751", + "y": "2482", + "properties": { + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0, + "y": 76.34691492882303 + }, + "p1": { + "x": 0.5702216182256714, + "y": -0.004517251466967862 + }, + "p2": { + "x": 0, + "y": 0.4406451246140932 } } }, { - "ID": "1934", - "typeID": "__group__", - "zOrder": "94", - "measuredW": "199", - "measuredH": "40", - "w": "199", - "h": "40", - "x": "668", - "y": "1350", + "ID": "2438", + "typeID": "Arrow", + "zOrder": "58", + "w": "1", + "h": "83", + "measuredW": "150", + "measuredH": "100", + "x": "1328", + "y": "1054", "properties": { - "controlName": "101-relational-databases:mysql" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "191", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "60", - "measuredW": "56", - "measuredH": "25", - "x": "74", - "y": "7", - "properties": { - "size": "17", - "text": "MySQL" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "4", - "typeID": "Icon", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "curvature": "-1", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": -0.24980034602958767, + "y": 83.20762430962418 + }, + "p1": { + "x": 0.5, + "y": 0 + }, + "p2": { + "x": -0.24980034602958767, + "y": 0.43870807682526447 } } }, { - "ID": "1935", - "typeID": "__group__", - "zOrder": "95", - "measuredW": "199", - "measuredH": "40", - "w": "199", - "h": "40", - "x": "668", - "y": "1395", + "ID": "2439", + "typeID": "Arrow", + "zOrder": "59", + "w": "189", + "h": "26", + "measuredW": "150", + "measuredH": "100", + "x": "1336", + "y": "948", "properties": { - "controlName": "102-relational-databases:mariadb" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "191", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "69", - "measuredH": "25", - "x": "69", - "y": "7", - "properties": { - "size": "17", - "text": "MariaDB" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "4", - "typeID": "Icon", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 188.1515397158321, + "y": 26.337543700961987 + }, + "p1": { + "x": 0.47995321703110466, + "y": -0.07212649611970283 + }, + "p2": { + "x": -0.43181905983556135, + "y": 4.652303666645025 + } + } + }, + { + "ID": "2440", + "typeID": "Arrow", + "zOrder": "60", + "w": "166", + "h": "56", + "measuredW": "150", + "measuredH": "100", + "x": "1351", + "y": "872", + "properties": { + "color": "2848996", + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 166.53718413209776, + "y": 0.4764677114528695 + }, + "p1": { + "x": 0.46937049176096135, + "y": 0.08997514266115965 + }, + "p2": { + "x": 0.46780214183309, + "y": 56.80287186414216 } } }, { - "ID": "1936", - "typeID": "__group__", - "zOrder": "96", - "measuredW": "199", - "measuredH": "40", - "w": "199", - "h": "40", - "x": "668", - "y": "1440", + "ID": "2441", + "typeID": "Arrow", + "zOrder": "61", + "w": "167", + "h": "21", + "measuredW": "150", + "measuredH": "100", + "x": "1349", + "y": "918", "properties": { - "controlName": "103-relational-databases:mssql" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "191", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "67", - "measuredW": "63", - "measuredH": "25", - "x": "70", - "y": "8", - "properties": { - "size": "17", - "text": "MS SQL" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "4", - "typeID": "Icon", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 166.76388789240877, + "y": 0.20312439636302315 + }, + "p1": { + "x": 0.4153666146645862, + "y": 0.03354134165366616 + }, + "p2": { + "x": -0.18213472511160944, + "y": 21.402619331921187 } } }, { - "ID": "1937", - "typeID": "__group__", - "zOrder": "97", - "measuredW": "199", - "measuredH": "40", - "w": "199", - "h": "40", - "x": "668", - "y": "1486", + "ID": "2442", + "typeID": "Arrow", + "zOrder": "62", + "w": "174", + "h": "99", + "measuredW": "150", + "measuredH": "100", + "x": "1519", + "y": "1206", "properties": { - "controlName": "104-relational-databases:oracle" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "191", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "54", - "measuredW": "52", - "measuredH": "25", - "x": "77", - "y": "8", - "properties": { - "size": "17", - "text": "Oracle" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "4", - "typeID": "Icon", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "curvature": "0", + "rightArrow": "false", + "leftArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": -0.4945558087927111, + "y": 99.40759071508523 + }, + "p1": { + "x": 0.4991402865711436, + "y": -0.13680773075641436 + }, + "p2": { + "x": 173.69874920774737, + "y": 0.19861969047110506 + } + } + }, + { + "ID": "2443", + "typeID": "Arrow", + "zOrder": "63", + "w": "177", + "h": "54", + "measuredW": "150", + "measuredH": "100", + "x": "1516", + "y": "1263", + "properties": { + "curvature": "0", + "rightArrow": "false", + "leftArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": -0.14449267573741054, + "y": 54.33230661633661 + }, + "p1": { + "x": 0.5049653579676676, + "y": -0.08879907621247117 + }, + "p2": { + "x": 176.69874920774737, + "y": 0.08207771058664548 } } }, { - "ID": "1938", - "typeID": "__group__", - "zOrder": "98", - "measuredW": "214", - "measuredH": "50", - "w": "214", - "h": "50", - "x": "1188", - "y": "2924", + "ID": "2444", + "typeID": "Arrow", + "zOrder": "64", + "w": "189", + "h": "5", + "measuredW": "150", + "measuredH": "100", + "x": "1520", + "y": "1323", "properties": { - "controlName": "107-nosql-databases" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "214", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "143", - "measuredH": "25", - "x": "35", - "y": "12", - "properties": { - "text": "NoSQL Databases", - "size": "17" - } - } - ] + "curvature": "0", + "rightArrow": "false", + "leftArrow": "false", + "color": "10027263", + "stroke": "dotted", + "p0": { + "x": -0.1695873753203614, + "y": 4.932054084115634 + }, + "p1": { + "x": 0.5, + "y": 0 + }, + "p2": { + "x": 188.57320260870983, + "y": -0.3887220358042214 } } }, { - "ID": "1939", - "typeID": "__group__", - "zOrder": "99", - "measuredW": "213", - "measuredH": "40", - "w": "213", - "h": "40", - "x": "674", - "y": "2262", + "ID": "2445", + "typeID": "Arrow", + "zOrder": "65", + "w": "236", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "923", + "y": "1047", "properties": { - "controlName": "101-more-about-databases:acid" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "206", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "7", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "43", - "measuredW": "40", - "measuredH": "25", - "x": "88", - "y": "7", - "properties": { - "size": "17", - "text": "ACID" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": 0.5 + }, + "p1": { + "x": 0.47345427259831335, + "y": -0.00011162392477927807 + }, + "p2": { + "x": 235.68489507160098, + "y": -0.32512695598120445 } } }, { - "ID": "1940", - "typeID": "__group__", - "zOrder": "100", - "measuredW": "211", - "measuredH": "50", - "w": "211", - "h": "50", - "x": "679", - "y": "2130", + "ID": "2446", + "typeID": "Arrow", + "zOrder": "66", + "w": "1", + "h": "90", + "measuredW": "150", + "measuredH": "100", + "x": "910", + "y": "1052", "properties": { - "controlName": "108-more-about-databases" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "211", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "176", - "measuredH": "25", - "x": "18", - "y": "13", - "properties": { - "text": "More about Databases", - "size": "17" - } - } - ] + "color": "2848996", + "curvature": "-1", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": -0.24980034602958767, + "y": 89.04191001796403 + }, + "p1": { + "x": 0.49999999999999994, + "y": 0 + }, + "p2": { + "x": -0.24980034602958767, + "y": -0.47695781458287456 + } + } + }, + { + "ID": "2447", + "typeID": "Arrow", + "zOrder": "67", + "w": "1", + "h": "172", + "measuredW": "150", + "measuredH": "100", + "x": "746", + "y": "969", + "properties": { + "color": "2848996", + "curvature": "-1", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": -0.24980034602958767, + "y": 172.04191001796403 + }, + "p1": { + "x": 0.5, + "y": 0 + }, + "p2": { + "x": -0.24980034602958767, + "y": 0.24952581221509718 } } }, { - "ID": "1941", - "typeID": "__group__", - "zOrder": "101", - "measuredW": "213", - "measuredH": "40", - "w": "213", - "h": "40", - "x": "674", - "y": "2306", + "ID": "2448", + "typeID": "Arrow", + "zOrder": "68", + "w": "1", + "h": "113", + "measuredW": "150", + "measuredH": "100", + "x": "1299", + "y": "3757", "properties": { - "controlName": "102-more-about-databases:transactions" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "206", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "7", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "105", - "measuredW": "99", - "measuredH": "25", - "x": "57", - "y": "7", - "properties": { - "size": "17", - "text": "Transactions" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "color": "2848996", + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 1, + "y": 112.58154962364824 + }, + "p1": { + "x": 0.4072427393330942, + "y": 0.00953746862674794 + }, + "p2": { + "x": 1, + "y": 0 } } }, { - "ID": "1942", + "ID": "2449", "typeID": "__group__", - "zOrder": "102", - "measuredW": "213", - "measuredH": "40", - "w": "213", - "h": "40", - "x": "674", - "y": "2350", + "zOrder": "69", + "measuredW": "200", + "measuredH": "50", + "w": "200", + "h": "50", + "x": "1005", + "y": "2463", "properties": { - "controlName": "103-more-about-databases:n-plus-one-problem" + "controlName": "115-architectural-patterns" }, "children": { "controls": { @@ -3003,139 +2215,26 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "206", - "h": "40", + "h": "50", "measuredW": "200", "measuredH": "140", - "x": "7", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "99", - "measuredH": "25", - "x": "60", - "y": "7", - "properties": { - "text": "N+1 Problem", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", "x": "0", - "y": "8", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - }, - { - "ID": "1943", - "typeID": "__group__", - "zOrder": "210", - "measuredW": "215", - "measuredH": "40", - "w": "215", - "h": "40", - "x": "672", - "y": "1895", - "properties": { - "controlName": "102-scaling-databases:sharding-strategies" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "208", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "7", "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "155", - "measuredW": "151", + "measuredW": "166", "measuredH": "25", - "x": "33", - "y": "7", - "properties": { - "size": "17", - "text": "Sharding Strategies" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "7", + "x": "17", + "y": "13", "properties": { - "color": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } + "text": "Architectural Patterns", + "size": "17" } } ] @@ -3143,17 +2242,17 @@ } }, { - "ID": "1944", + "ID": "2450", "typeID": "__group__", - "zOrder": "103", - "measuredW": "215", + "zOrder": "70", + "measuredW": "209", "measuredH": "40", - "w": "215", + "w": "209", "h": "40", - "x": "672", - "y": "2394", + "x": "1005", + "y": "2546", "properties": { - "controlName": "104-more-about-databases:database-normalization" + "controlName": "100-architectural-patterns:monolithic-apps" }, "children": { "controls": { @@ -3162,11 +2261,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "206", + "w": "202", "h": "40", "measuredW": "200", "measuredH": "140", - "x": "9", + "x": "0", "y": "0", "properties": { "color": "16770457" @@ -3176,13 +2275,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "107", + "w": "123", + "measuredW": "123", "measuredH": "25", - "x": "58", + "x": "39", "y": "7", "properties": { "size": "17", - "text": "Normalization" + "text": "Monolithic Apps" } }, { @@ -3191,7 +2291,7 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "0", + "x": "185", "y": "8", "properties": { "color": "16777215", @@ -3207,7 +2307,7 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "0", + "x": "185", "y": "8", "properties": { "color": "10027263", @@ -3222,17 +2322,17 @@ } }, { - "ID": "1945", + "ID": "2451", "typeID": "__group__", - "zOrder": "209", - "measuredW": "218", - "measuredH": "40", - "w": "218", - "h": "40", - "x": "670", - "y": "1852", + "zOrder": "71", + "measuredW": "209", + "measuredH": "37", + "w": "209", + "h": "37", + "x": "1005", + "y": "2588", "properties": { - "controlName": "101-scaling-databases:data-replication" + "controlName": "101-architectural-patterns:microservices" }, "children": { "controls": { @@ -3241,11 +2341,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "208", - "h": "40", + "w": "202", + "h": "37", "measuredW": "200", "measuredH": "140", - "x": "10", + "x": "0", "y": "0", "properties": { "color": "16770457" @@ -3255,14 +2355,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "129", - "measuredW": "128", + "w": "112", + "measuredW": "108", "measuredH": "25", - "x": "49", - "y": "7", + "x": "45", + "y": "6", "properties": { "size": "17", - "text": "Data Replication" + "text": "Microservices" } }, { @@ -3271,8 +2371,8 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "8", + "x": "185", + "y": "7", "properties": { "color": "16777215", "icon": { @@ -3287,10 +2387,10 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "8", + "x": "185", + "y": "7", "properties": { - "color": "10066329", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -3302,17 +2402,17 @@ } }, { - "ID": "1946", + "ID": "2452", "typeID": "__group__", - "zOrder": "104", - "measuredW": "218", - "measuredH": "40", - "w": "218", - "h": "40", - "x": "670", - "y": "1810", + "zOrder": "72", + "measuredW": "209", + "measuredH": "37", + "w": "209", + "h": "37", + "x": "1005", + "y": "2628", "properties": { - "controlName": "100-scaling-databases:database-indexes" + "controlName": "102-architectural-patterns:soa" }, "children": { "controls": { @@ -3321,11 +2421,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "208", - "h": "40", + "w": "202", + "h": "37", "measuredW": "200", "measuredH": "140", - "x": "10", + "x": "0", "y": "0", "properties": { "color": "16770457" @@ -3335,13 +2435,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "140", + "w": "38", + "measuredW": "34", "measuredH": "25", - "x": "44", - "y": "7", + "x": "103", + "y": "6", "properties": { "size": "17", - "text": "Database Indexes" + "text": "SOA" } }, { @@ -3350,8 +2451,8 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "8", + "x": "185", + "y": "7", "properties": { "color": "16777215", "icon": { @@ -3366,8 +2467,8 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "8", + "x": "185", + "y": "7", "properties": { "color": "10027263", "icon": { @@ -3381,17 +2482,17 @@ } }, { - "ID": "1947", + "ID": "2453", "typeID": "__group__", - "zOrder": "105", - "measuredW": "212", + "zOrder": "73", + "measuredW": "182", "measuredH": "50", - "w": "212", + "w": "182", "h": "50", - "x": "945", - "y": "1554", + "x": "1284", + "y": "2463", "properties": { - "controlName": "109-apis" + "controlName": "117-message-brokers" }, "children": { "controls": { @@ -3400,7 +2501,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "212", + "w": "182", "h": "50", "measuredW": "200", "measuredH": "140", @@ -3414,93 +2515,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "133", - "measuredH": "25", - "x": "39", - "y": "13", - "properties": { - "text": "Learn about APIs", - "size": "17" - } - } - ] - } - } - }, - { - "ID": "1948", - "typeID": "__group__", - "zOrder": "106", - "measuredW": "157", - "measuredH": "40", - "w": "157", - "h": "40", - "x": "668", - "y": "1562", - "properties": { - "controlName": "100-apis:rest" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "146", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "49", - "measuredW": "44", + "w": "141", + "measuredW": "136", "measuredH": "25", - "x": "59", - "y": "7", + "x": "20", + "y": "12", "properties": { "size": "17", - "text": "REST" - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "4", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } + "text": "Message Brokers" } } ] @@ -3508,17 +2530,17 @@ } }, { - "ID": "1949", + "ID": "2454", "typeID": "__group__", - "zOrder": "107", - "measuredW": "157", - "measuredH": "40", - "w": "157", - "h": "40", - "x": "668", - "y": "1607", + "zOrder": "74", + "measuredW": "305", + "measuredH": "50", + "w": "305", + "h": "50", + "x": "1516", + "y": "2465", "properties": { - "controlName": "101-apis:json-apis" + "controlName": "118-containerization" }, "children": { "controls": { @@ -3527,60 +2549,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "146", - "h": "40", + "w": "305", + "h": "50", "measuredW": "200", "measuredH": "140", - "x": "11", + "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "90", - "measuredW": "85", + "measuredW": "250", "measuredH": "25", - "x": "39", - "y": "7", - "properties": { - "size": "17", - "text": "JSON APIs" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", + "x": "28", + "y": "13", "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } + "text": "Containerization vs Virtualization", + "size": "17" } } ] @@ -3588,17 +2577,17 @@ } }, { - "ID": "1950", + "ID": "2455", "typeID": "__group__", - "zOrder": "108", - "measuredW": "155", - "measuredH": "40", - "w": "155", - "h": "40", - "x": "670", - "y": "1652", + "zOrder": "75", + "measuredW": "197", + "measuredH": "50", + "w": "197", + "h": "50", + "x": "678", + "y": "2786", "properties": { - "controlName": "102-apis:soap" + "controlName": "122-web-servers" }, "children": { "controls": { @@ -3607,60 +2596,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "145", - "h": "40", + "w": "197", + "h": "50", "measuredW": "200", "measuredH": "140", - "x": "10", + "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "49", - "measuredW": "44", + "measuredW": "98", "measuredH": "25", - "x": "58", - "y": "7", - "properties": { - "size": "17", - "text": "SOAP" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", + "x": "50", + "y": "13", "properties": { - "color": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } + "text": "Web Servers", + "size": "17" } } ] @@ -3668,17 +2624,17 @@ } }, { - "ID": "1951", + "ID": "2456", "typeID": "__group__", - "zOrder": "109", - "measuredW": "201", + "zOrder": "76", + "measuredW": "153", "measuredH": "40", - "w": "201", + "w": "153", "h": "40", - "x": "1082", - "y": "1412", + "x": "671", + "y": "2572", "properties": { - "controlName": "104-apis:hateoas" + "controlName": "100-web-servers:nginx" }, "children": { "controls": { @@ -3687,11 +2643,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "190", + "w": "144", "h": "40", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "9", "y": "0", "properties": { "color": "16770457" @@ -3701,14 +2657,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "78", - "measuredW": "76", + "w": "46", + "measuredW": "45", "measuredH": "25", - "x": "56", + "x": "58", "y": "7", "properties": { "size": "17", - "text": "HATEOAS" + "text": "Nginx" } }, { @@ -3717,7 +2673,7 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "177", + "x": "0", "y": "8", "properties": { "color": "16777215", @@ -3733,10 +2689,10 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "177", + "x": "0", "y": "8", "properties": { - "color": "10066329", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -3748,17 +2704,17 @@ } }, { - "ID": "1952", + "ID": "2457", "typeID": "__group__", - "zOrder": "110", - "measuredW": "201", + "zOrder": "77", + "measuredW": "153", "measuredH": "40", - "w": "201", + "w": "153", "h": "40", - "x": "1082", - "y": "1448", + "x": "671", + "y": "2617", "properties": { - "controlName": "105-apis:open-api-spec" + "controlName": "101-web-servers:apache" }, "children": { "controls": { @@ -3767,11 +2723,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "190", + "w": "144", "h": "40", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "9", "y": "0", "properties": { "color": "16770457" @@ -3781,13 +2737,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "126", + "w": "60", + "measuredW": "59", "measuredH": "25", - "x": "32", + "x": "51", "y": "7", "properties": { "size": "17", - "text": "Open API Specs" + "text": "Apache" } }, { @@ -3796,7 +2753,7 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "177", + "x": "0", "y": "8", "properties": { "color": "16777215", @@ -3812,10 +2769,26 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "177", + "x": "0", "y": "8", "properties": { - "color": "10066329", + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "4", + "typeID": "Icon", + "zOrder": "4", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "3700253", "icon": { "ID": "check-circle", "size": "small" @@ -3827,17 +2800,17 @@ } }, { - "ID": "1953", + "ID": "2458", "typeID": "__group__", - "zOrder": "211", - "measuredW": "216", + "zOrder": "78", + "measuredW": "153", "measuredH": "40", - "w": "216", + "w": "153", "h": "40", - "x": "672", - "y": "1938", + "x": "671", + "y": "2663", "properties": { - "controlName": "103-scaling-databases:cap-theorem" + "controlName": "102-web-servers:caddy" }, "children": { "controls": { @@ -3846,11 +2819,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "208", + "w": "144", "h": "40", "measuredW": "200", "measuredH": "140", - "x": "8", + "x": "9", "y": "0", "properties": { "color": "16770457" @@ -3860,14 +2833,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "109", - "measuredW": "107", + "w": "53", + "measuredW": "49", "measuredH": "25", - "x": "57", + "x": "54", "y": "7", "properties": { "size": "17", - "text": "CAP Theorem" + "text": "Caddy" } }, { @@ -3895,103 +2868,27 @@ "x": "0", "y": "8", "properties": { - "color": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - }, - { - "ID": "1954", - "typeID": "__group__", - "zOrder": "111", - "measuredW": "170", - "measuredH": "50", - "w": "170", - "h": "50", - "x": "985", - "y": "1645", - "properties": { - "controlName": "106-apis:authentication" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "170", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "111", - "measuredW": "111", - "measuredH": "25", - "x": "29", - "y": "12", - "properties": { - "size": "17", - "text": "Authentication" - } - } - ] - } - } - }, - { - "ID": "1955", - "typeID": "__group__", - "zOrder": "112", - "measuredW": "240", - "measuredH": "54", - "w": "240", - "h": "54", - "x": "1581", - "y": "1762", - "properties": { - "controlName": "111-web-security-knowledge" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "240", - "h": "54", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "189", - "measuredH": "25", - "x": "25", - "y": "15", + "ID": "4", + "typeID": "Icon", + "zOrder": "4", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", "properties": { - "size": "17", - "text": "Web Security Knowledge" + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -3999,28 +2896,17 @@ } }, { - "ID": "1956", - "typeID": "TextArea", - "zOrder": "113", - "w": "270", - "h": "192", - "measuredW": "200", - "measuredH": "140", - "x": "1552", - "y": "1526" - }, - { - "ID": "1957", + "ID": "2459", "typeID": "__group__", - "zOrder": "114", - "measuredW": "239", + "zOrder": "79", + "measuredW": "152", "measuredH": "40", - "w": "239", + "w": "152", "h": "40", - "x": "1567", - "y": "1541", + "x": "671", + "y": "2708", "properties": { - "controlName": "100-web-security-knowledge:md5" + "controlName": "103-web-servers:ms-iis" }, "children": { "controls": { @@ -4029,11 +2915,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "239", + "w": "144", "h": "40", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "8", "y": "0", "properties": { "color": "16770457" @@ -4043,14 +2929,62 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "203", - "measuredW": "197", + "w": "55", + "measuredW": "51", "measuredH": "25", - "x": "20", - "y": "8", + "x": "57", + "y": "7", "properties": { "size": "17", - "text": "MD5 and why not to use it" + "text": "MS IIS" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "4", + "typeID": "Icon", + "zOrder": "4", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -4058,17 +2992,17 @@ } }, { - "ID": "1958", + "ID": "2460", "typeID": "__group__", - "zOrder": "115", - "measuredW": "237", + "zOrder": "80", + "measuredW": "144", "measuredH": "40", - "w": "237", + "w": "144", "h": "40", - "x": "1568", - "y": "1586", + "x": "1671", + "y": "2588", "properties": { - "controlName": "101-web-security-knowledge:sha-family" + "controlName": "ext_link:roadmap.sh/docker" }, "children": { "controls": { @@ -4077,28 +3011,30 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "237", + "w": "144", "h": "40", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "4273622", + "borderColor": "4273622" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "93", - "measuredW": "87", + "w": "58", + "measuredW": "56", "measuredH": "25", - "x": "72", - "y": "7", + "x": "47", + "y": "8", "properties": { "size": "17", - "text": "SHA Family" + "text": "Docker", + "color": "16777215" } } ] @@ -4106,17 +3042,17 @@ } }, { - "ID": "1959", + "ID": "2461", "typeID": "__group__", - "zOrder": "116", - "measuredW": "119", + "zOrder": "81", + "measuredW": "154", "measuredH": "40", - "w": "119", + "w": "154", "h": "40", - "x": "1569", - "y": "1632", + "x": "1672", + "y": "2544", "properties": { - "controlName": "104-web-security-knowledge:scrypt" + "controlName": "102-containerization:lxc" }, "children": { "controls": { @@ -4125,13 +3061,14 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "119", + "w": "144", "h": "40", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { + "textColor": "6710886", "color": "16770457" } }, @@ -4139,14 +3076,47 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "62", - "measuredW": "47", + "w": "37", + "measuredW": "32", "measuredH": "25", - "x": "38", - "y": "7", + "x": "53", + "y": "8", "properties": { + "color": "3355443", "size": "17", - "text": "scrypt" + "text": "LXC" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "130", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "130", + "y": "8", + "properties": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "3700253" } } ] @@ -4154,17 +3124,17 @@ } }, { - "ID": "1960", + "ID": "2462", "typeID": "__group__", - "zOrder": "117", - "measuredW": "111", - "measuredH": "40", - "w": "111", - "h": "40", - "x": "1695", - "y": "1632", + "zOrder": "82", + "measuredW": "141", + "measuredH": "50", + "w": "141", + "h": "50", + "x": "976", + "y": "2927", "properties": { - "controlName": "102-web-security-knowledge:bcrypt" + "controlName": "ext_link:roadmap.sh/graphql" }, "children": { "controls": { @@ -4173,28 +3143,29 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "111", - "h": "40", + "w": "141", + "h": "50", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "4273622", + "borderColor": "4273622" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "53", - "measuredW": "48", + "measuredW": "71", "measuredH": "25", "x": "35", - "y": "7", + "y": "13", "properties": { + "text": "GraphQL", "size": "17", - "text": "bcrypt" + "color": "16777215" } } ] @@ -4202,31 +3173,17 @@ } }, { - "ID": "1961", - "typeID": "Label", - "zOrder": "118", - "w": "155", - "measuredW": "149", - "measuredH": "25", - "x": "1609", - "y": "1680", - "properties": { - "size": "17", - "text": "Hashing Algorithms" - } - }, - { - "ID": "1963", + "ID": "2463", "typeID": "__group__", - "zOrder": "205", - "measuredW": "195", - "measuredH": "50", - "w": "195", - "h": "50", - "x": "1293", - "y": "2008", + "zOrder": "83", + "measuredW": "155", + "measuredH": "40", + "w": "155", + "h": "40", + "x": "975", + "y": "3025", "properties": { - "controlName": "112-testing" + "controlName": "100-graphql:apollo" }, "children": { "controls": { @@ -4235,27 +3192,60 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "195", - "h": "50", + "w": "144", + "h": "40", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16776960" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "56", + "w": "50", + "measuredW": "48", "measuredH": "25", - "x": "70", - "y": "13", + "x": "47", + "y": "7", "properties": { - "text": "Testing", - "size": "17" + "size": "17", + "text": "Apollo" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "131", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "131", + "y": "8", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -4263,17 +3253,17 @@ } }, { - "ID": "1964", + "ID": "2464", "typeID": "__group__", - "zOrder": "206", - "measuredW": "223", + "zOrder": "84", + "measuredW": "153", "measuredH": "40", - "w": "223", + "w": "153", "h": "40", - "x": "1278", - "y": "2093", + "x": "975", + "y": "3069", "properties": { - "controlName": "100-testing:integration-testing" + "controlName": "101-graphql:relay-modern" }, "children": { "controls": { @@ -4282,7 +3272,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "212", + "w": "144", "h": "40", "measuredW": "200", "measuredH": "140", @@ -4296,14 +3286,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "150", - "measuredW": "144", + "w": "108", + "measuredW": "107", "measuredH": "25", - "x": "31", + "x": "18", "y": "7", "properties": { "size": "17", - "text": "Integration Testing" + "text": "Relay Modern" } }, { @@ -4312,8 +3302,8 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "199", - "y": "7", + "x": "129", + "y": "8", "properties": { "color": "16777215", "icon": { @@ -4328,8 +3318,76 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "199", - "y": "7", + "x": "129", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "4", + "typeID": "Icon", + "zOrder": "4", + "measuredW": "24", + "measuredH": "24", + "x": "129", + "y": "8", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } + } + }, + { + "ID": "2465", + "typeID": "__group__", + "zOrder": "85", + "measuredW": "179", + "measuredH": "40", + "w": "179", + "h": "40", + "x": "975", + "y": "1692", + "properties": { + "controlName": "104-apis:authentication:jwt" + }, + "children": { + "controls": { + "control": [ + { + "ID": "1", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", "properties": { "color": "10027263", "icon": { @@ -4337,23 +3395,50 @@ "size": "small" } } + }, + { + "ID": "3", + "typeID": "Canvas", + "zOrder": "0", + "w": "169", + "h": "40", + "measuredW": "100", + "measuredH": "70", + "x": "10", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "4", + "typeID": "Label", + "zOrder": "1", + "measuredW": "35", + "measuredH": "25", + "x": "77", + "y": "7", + "properties": { + "text": "JWT", + "size": "17" + } } ] } } }, { - "ID": "1965", + "ID": "2466", "typeID": "__group__", - "zOrder": "207", - "measuredW": "224", - "measuredH": "37", - "w": "224", - "h": "37", - "x": "1276", - "y": "2136", + "zOrder": "86", + "measuredW": "130", + "measuredH": "50", + "w": "130", + "h": "50", + "x": "1332", + "y": "1552", "properties": { - "controlName": "101-testing:unit-testing" + "controlName": "110-caching" }, "children": { "controls": { @@ -4362,8 +3447,55 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "214", - "h": "37", + "w": "130", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "64", + "measuredH": "25", + "x": "33", + "y": "13", + "properties": { + "text": "Caching", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "2467", + "typeID": "__group__", + "zOrder": "87", + "measuredW": "154", + "measuredH": "40", + "w": "154", + "h": "40", + "x": "1502", + "y": "1400", + "properties": { + "controlName": "100-caching:server-side:redis" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "144", + "h": "40", "measuredW": "200", "measuredH": "140", "x": "0", @@ -4376,14 +3508,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "99", - "measuredW": "91", + "w": "46", + "measuredW": "45", "measuredH": "25", - "x": "47", - "y": "6", + "x": "49", + "y": "8", "properties": { "size": "17", - "text": "Unit Testing" + "text": "Redis" } }, { @@ -4392,8 +3524,8 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "200", - "y": "7", + "x": "130", + "y": "8", "properties": { "color": "16777215", "icon": { @@ -4408,8 +3540,8 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "200", - "y": "7", + "x": "130", + "y": "8", "properties": { "color": "10027263", "icon": { @@ -4423,17 +3555,17 @@ } }, { - "ID": "1966", + "ID": "2468", "typeID": "__group__", - "zOrder": "208", - "measuredW": "225", - "measuredH": "37", - "w": "225", - "h": "37", - "x": "1276", - "y": "2175", + "zOrder": "88", + "measuredW": "155", + "measuredH": "40", + "w": "155", + "h": "40", + "x": "1502", + "y": "1445", "properties": { - "controlName": "102-testing:functional-testing" + "controlName": "101-caching:server-side:memcached" }, "children": { "controls": { @@ -4442,8 +3574,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "214", - "h": "37", + "w": "144", + "h": "40", "measuredW": "200", "measuredH": "140", "x": "0", @@ -4456,14 +3588,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "151", - "measuredW": "140", + "w": "96", + "measuredW": "96", "measuredH": "25", - "x": "29", - "y": "6", + "x": "28", + "y": "8", "properties": { "size": "17", - "text": "Functional Testing" + "text": "Memcached" } }, { @@ -4472,8 +3604,8 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "201", - "y": "7", + "x": "131", + "y": "9", "properties": { "color": "16777215", "icon": { @@ -4488,10 +3620,26 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "201", - "y": "7", + "x": "131", + "y": "9", "properties": { - "color": "10027263", + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "4", + "typeID": "Icon", + "zOrder": "4", + "measuredW": "24", + "measuredH": "24", + "x": "131", + "y": "9", + "properties": { + "color": "3700253", "icon": { "ID": "check-circle", "size": "small" @@ -4503,203 +3651,47 @@ } }, { - "ID": "1969", - "typeID": "Label", - "zOrder": "119", - "measuredW": "128", + "ID": "2469", + "typeID": "__group__", + "zOrder": "89", + "measuredW": "129", "measuredH": "40", - "x": "1200", - "y": "789", - "properties": { - "size": "32", - "text": "Backend" - } - }, - { - "ID": "1970", - "typeID": "Arrow", - "zOrder": "120", - "w": "1", - "h": "75", - "measuredW": "150", - "measuredH": "100", - "x": "1251", - "y": "702", + "w": "129", + "h": "40", + "x": "1332", + "y": "1421", "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.43268541466795796, - "y": -0.4292144763719534 - }, - "p1": { - "x": 0.4673783006670677, - "y": -0.0036060514395746665 - }, - "p2": { - "x": 0.08850738176079176, - "y": 74.41806720423438 - } - } - }, - { - "ID": "1971", - "typeID": "__group__", - "zOrder": "121", - "measuredW": "350", - "measuredH": "141", - "w": "350", - "h": "141", - "x": "1477", - "y": "672", + "controlName": "101-caching:server-side" + }, "children": { "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "350", - "h": "141", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "314", - "measuredH": "25", - "x": "14", - "y": "17", - "properties": { - "size": "17", - "text": "Find the detailed version of this roadmap" - } - }, - { - "ID": "2", - "typeID": "Label", - "zOrder": "2", - "measuredW": "319", - "measuredH": "25", - "x": "14", - "y": "45", - "properties": { - "size": "17", - "text": "along with resources and other roadmaps" - } - }, - { - "ID": "3", - "typeID": "__group__", - "zOrder": "3", - "measuredW": "320", - "measuredH": "45", - "w": "320", - "h": "45", - "x": "15", - "y": "81", - "properties": { - "controlName": "ext_link:roadmap.sh" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "320", - "h": "45", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "borderColor": "4273622", - "color": "4273622" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "105", - "measuredH": "28", - "x": "141", - "y": "8", - "properties": { - "color": "16777215", - "size": "20", - "text": "roadmap.sh" - } - }, - { - "ID": "2", - "typeID": "Label", - "zOrder": "2", - "measuredW": "45", - "measuredH": "28", - "x": "66", - "y": "8", - "properties": { - "color": "16777215", - "size": "20", - "text": "https" - } - }, - { - "ID": "3", - "typeID": "Label", - "zOrder": "3", - "measuredW": "5", - "measuredH": "28", - "x": "113", - "y": "8", - "properties": { - "bold": "true", - "color": "16777215", - "size": "20", - "text": ":" - } - }, - { - "ID": "4", - "typeID": "Label", - "zOrder": "4", - "measuredW": "10", - "measuredH": "28", - "x": "120", - "y": "9", - "properties": { - "color": "16777215", - "size": "20", - "text": "/" - } - }, - { - "ID": "5", - "typeID": "Label", - "zOrder": "5", - "measuredW": "10", - "measuredH": "28", - "x": "128", - "y": "9", - "properties": { - "color": "16777215", - "size": "20", - "text": "/" - } - } - ] - } + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "129", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "95", + "measuredW": "90", + "measuredH": "25", + "x": "19", + "y": "8", + "properties": { + "size": "17", + "text": "Server Side" } } ] @@ -4707,37 +3699,57 @@ } }, { - "ID": "1972", + "ID": "2470", "typeID": "__group__", - "zOrder": "122", - "measuredW": "408", - "measuredH": "162", - "w": "408", - "h": "162", - "x": "665", - "y": "662", + "zOrder": "90", + "measuredW": "140", + "measuredH": "40", + "w": "140", + "h": "40", + "x": "1333", + "y": "1464", + "properties": { + "controlName": "102-caching:client-side" + }, "children": { "controls": { "control": [ { "ID": "0", - "typeID": "Canvas", + "typeID": "TextArea", "zOrder": "0", - "w": "408", - "h": "162", - "measuredW": "100", - "measuredH": "70", + "w": "130", + "h": "40", + "measuredW": "200", + "measuredH": "140", "x": "0", - "y": "0" + "y": "0", + "properties": { + "color": "16770457" + } }, { "ID": "1", - "typeID": "Icon", + "typeID": "Label", "zOrder": "1", + "w": "88", + "measuredW": "84", + "measuredH": "25", + "x": "21", + "y": "7", + "properties": { + "size": "17", + "text": "Client Side" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "23", - "y": "21", + "x": "116", + "y": "8", "properties": { "color": "16777215", "icon": { @@ -4747,13 +3759,13 @@ } }, { - "ID": "2", + "ID": "3", "typeID": "Icon", - "zOrder": "2", + "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "23", - "y": "21", + "x": "116", + "y": "8", "properties": { "color": "10027263", "icon": { @@ -4761,43 +3773,192 @@ "size": "small" } } + } + ] + } + } + }, + { + "ID": "2471", + "typeID": "__group__", + "zOrder": "91", + "measuredW": "139", + "measuredH": "37", + "w": "139", + "h": "37", + "x": "1332", + "y": "1381", + "properties": { + "controlName": "100-caching:cdn" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "129", + "h": "37", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } }, { - "ID": "3", + "ID": "1", "typeID": "Label", + "zOrder": "1", + "w": "40", + "measuredW": "38", + "measuredH": "25", + "x": "45", + "y": "6", + "properties": { + "size": "17", + "text": "CDN" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "115", + "y": "5", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", "zOrder": "3", - "measuredW": "269", + "measuredW": "24", "measuredH": "24", - "x": "59", - "y": "21", + "x": "115", + "y": "5", "properties": { - "size": "16", - "text": "Personal Recommendation / Opinion" + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } + } + }, + { + "ID": "2472", + "typeID": "__group__", + "zOrder": "92", + "measuredW": "229", + "measuredH": "50", + "w": "229", + "h": "50", + "x": "941", + "y": "1301", + "properties": { + "controlName": "106-relational-databases" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "229", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" } }, { - "ID": "4", + "ID": "1", "typeID": "Label", - "zOrder": "4", - "measuredW": "159", - "measuredH": "24", - "x": "59", - "y": "118", + "zOrder": "1", + "measuredW": "165", + "measuredH": "25", + "x": "32", + "y": "13", + "properties": { + "size": "17", + "text": "Relational Databases" + } + } + ] + } + } + }, + { + "ID": "2473", + "typeID": "__group__", + "zOrder": "93", + "measuredW": "199", + "measuredH": "40", + "w": "199", + "h": "40", + "x": "668", + "y": "1305", + "properties": { + "controlName": "100-relational-databases:postgresql" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "191", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "8", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "96", + "measuredW": "93", + "measuredH": "25", + "x": "56", + "y": "7", "properties": { - "size": "16", - "text": "I wouldn't recommend" + "size": "17", + "text": "PostgreSQL" } }, { - "ID": "5", + "ID": "2", "typeID": "Icon", - "zOrder": "5", + "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "23", - "y": "118", + "x": "0", + "y": "7", "properties": { - "color": "10066329", + "color": "16777215", "icon": { "ID": "circle", "size": "small" @@ -4805,27 +3966,13 @@ } }, { - "ID": "6", - "typeID": "Label", - "zOrder": "6", - "w": "324", - "measuredW": "315", - "measuredH": "24", - "x": "60", - "y": "86", - "properties": { - "size": "16", - "text": "Order in roadmap not strict (Learn anytime)" - } - }, - { - "ID": "7", + "ID": "3", "typeID": "Icon", - "zOrder": "7", + "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "23", - "y": "86", + "x": "0", + "y": "7", "properties": { "color": "16777215", "icon": { @@ -4835,42 +3982,77 @@ } }, { - "ID": "8", + "ID": "4", "typeID": "Icon", - "zOrder": "8", + "zOrder": "4", "measuredW": "24", "measuredH": "24", - "x": "23", - "y": "86", + "x": "0", + "y": "7", "properties": { - "color": "10066329", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" } } + } + ] + } + } + }, + { + "ID": "2474", + "typeID": "__group__", + "zOrder": "94", + "measuredW": "199", + "measuredH": "40", + "w": "199", + "h": "40", + "x": "668", + "y": "1350", + "properties": { + "controlName": "101-relational-databases:mysql" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "191", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "8", + "y": "0", + "properties": { + "color": "16770457" + } }, { - "ID": "9", + "ID": "1", "typeID": "Label", - "zOrder": "9", - "measuredW": "272", - "measuredH": "24", - "x": "59", - "y": "54", + "zOrder": "1", + "w": "60", + "measuredW": "56", + "measuredH": "25", + "x": "74", + "y": "7", "properties": { - "size": "16", - "text": "Alternative Option - Pick this or purple" + "size": "17", + "text": "MySQL" } }, { - "ID": "10", + "ID": "2", "typeID": "Icon", - "zOrder": "10", + "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "23", - "y": "53", + "x": "0", + "y": "7", "properties": { "color": "16777215", "icon": { @@ -4880,13 +4062,13 @@ } }, { - "ID": "11", + "ID": "3", "typeID": "Icon", - "zOrder": "11", + "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "23", - "y": "53", + "x": "0", + "y": "7", "properties": { "color": "16777215", "icon": { @@ -4896,13 +4078,13 @@ } }, { - "ID": "12", + "ID": "4", "typeID": "Icon", - "zOrder": "12", + "zOrder": "4", "measuredW": "24", "measuredH": "24", - "x": "23", - "y": "53", + "x": "0", + "y": "7", "properties": { "color": "3700253", "icon": { @@ -4916,17 +4098,17 @@ } }, { - "ID": "1973", + "ID": "2475", "typeID": "__group__", - "zOrder": "123", - "measuredW": "144", + "zOrder": "95", + "measuredW": "199", "measuredH": "40", - "w": "144", + "w": "199", "h": "40", "x": "668", - "y": "950", + "y": "1395", "properties": { - "controlName": "100-learn-a-language:go" + "controlName": "102-relational-databases:mariadb" }, "children": { "controls": { @@ -4935,7 +4117,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "136", + "w": "191", "h": "40", "measuredW": "200", "measuredH": "140", @@ -4949,14 +4131,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "26", - "measuredW": "23", + "measuredW": "69", "measuredH": "25", - "x": "63", + "x": "69", "y": "7", "properties": { "size": "17", - "text": "Go" + "text": "MariaDB" } }, { @@ -4966,7 +4147,7 @@ "measuredW": "24", "measuredH": "24", "x": "0", - "y": "8", + "y": "7", "properties": { "color": "16777215", "icon": { @@ -4982,7 +4163,7 @@ "measuredW": "24", "measuredH": "24", "x": "0", - "y": "8", + "y": "7", "properties": { "color": "16777215", "icon": { @@ -4998,7 +4179,7 @@ "measuredW": "24", "measuredH": "24", "x": "0", - "y": "8", + "y": "7", "properties": { "color": "3700253", "icon": { @@ -5012,17 +4193,17 @@ } }, { - "ID": "1974", + "ID": "2476", "typeID": "__group__", - "zOrder": "124", - "measuredW": "144", + "zOrder": "96", + "measuredW": "199", "measuredH": "40", - "w": "144", + "w": "199", "h": "40", "x": "668", - "y": "1108", + "y": "1440", "properties": { - "controlName": "102-learn-a-language:java" + "controlName": "103-relational-databases:mssql" }, "children": { "controls": { @@ -5031,7 +4212,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "136", + "w": "191", "h": "40", "measuredW": "200", "measuredH": "140", @@ -5045,14 +4226,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "38", - "measuredW": "36", + "w": "67", + "measuredW": "63", "measuredH": "25", - "x": "57", - "y": "7", + "x": "70", + "y": "8", "properties": { "size": "17", - "text": "Java" + "text": "MS SQL" } }, { @@ -5062,7 +4243,7 @@ "measuredW": "24", "measuredH": "24", "x": "0", - "y": "8", + "y": "7", "properties": { "color": "16777215", "icon": { @@ -5078,7 +4259,7 @@ "measuredW": "24", "measuredH": "24", "x": "0", - "y": "8", + "y": "7", "properties": { "color": "16777215", "icon": { @@ -5094,7 +4275,7 @@ "measuredW": "24", "measuredH": "24", "x": "0", - "y": "8", + "y": "7", "properties": { "color": "3700253", "icon": { @@ -5108,17 +4289,17 @@ } }, { - "ID": "1975", + "ID": "2477", "typeID": "__group__", - "zOrder": "125", - "measuredW": "145", + "zOrder": "97", + "measuredW": "199", "measuredH": "40", - "w": "145", + "w": "199", "h": "40", "x": "668", - "y": "907", + "y": "1486", "properties": { - "controlName": "101-learn-a-language:rust" + "controlName": "104-relational-databases:oracle" }, "children": { "controls": { @@ -5127,11 +4308,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "136", + "w": "191", "h": "40", "measuredW": "200", "measuredH": "140", - "x": "9", + "x": "8", "y": "0", "properties": { "color": "16770457" @@ -5141,14 +4322,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "39", - "measuredW": "36", + "w": "54", + "measuredW": "52", "measuredH": "25", - "x": "57", - "y": "7", + "x": "77", + "y": "8", "properties": { "size": "17", - "text": "Rust" + "text": "Oracle" } }, { @@ -5204,17 +4385,64 @@ } }, { - "ID": "1976", + "ID": "2478", "typeID": "__group__", - "zOrder": "126", - "measuredW": "144", + "zOrder": "98", + "measuredW": "214", + "measuredH": "50", + "w": "214", + "h": "50", + "x": "1188", + "y": "2924", + "properties": { + "controlName": "107-nosql-databases" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "214", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "143", + "measuredH": "25", + "x": "35", + "y": "12", + "properties": { + "text": "NoSQL Databases", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "2479", + "typeID": "__group__", + "zOrder": "99", + "measuredW": "213", "measuredH": "40", - "w": "144", + "w": "213", "h": "40", - "x": "668", - "y": "1152", + "x": "674", + "y": "2262", "properties": { - "controlName": "103-learn-a-language:csharp" + "controlName": "101-more-about-databases:acid" }, "children": { "controls": { @@ -5223,11 +4451,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "136", + "w": "206", "h": "40", "measuredW": "200", "measuredH": "140", - "x": "8", + "x": "7", "y": "0", "properties": { "color": "16770457" @@ -5237,14 +4465,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "27", - "measuredW": "24", + "w": "43", + "measuredW": "40", "measuredH": "25", - "x": "62", + "x": "88", "y": "7", "properties": { "size": "17", - "text": "C#" + "text": "ACID" } }, { @@ -5272,23 +4500,7 @@ "x": "0", "y": "8", "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "4", - "typeID": "Icon", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "3700253", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -5300,17 +4512,17 @@ } }, { - "ID": "1977", + "ID": "2480", "typeID": "__group__", - "zOrder": "127", - "measuredW": "302", + "zOrder": "100", + "measuredW": "211", "measuredH": "50", - "w": "302", + "w": "211", "h": "50", "x": "679", - "y": "1026", + "y": "2130", "properties": { - "controlName": "103-learn-a-language" + "controlName": "108-more-about-databases" }, "children": { "controls": { @@ -5319,7 +4531,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "302", + "w": "211", "h": "50", "measuredW": "200", "measuredH": "140", @@ -5333,12 +4545,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "141", + "measuredW": "176", "measuredH": "25", - "x": "80", + "x": "18", "y": "13", "properties": { - "text": "Learn a Language", + "text": "More about Databases", "size": "17" } } @@ -5347,17 +4559,17 @@ } }, { - "ID": "1978", + "ID": "2481", "typeID": "__group__", - "zOrder": "128", - "measuredW": "144", + "zOrder": "101", + "measuredW": "213", "measuredH": "40", - "w": "144", + "w": "213", "h": "40", - "x": "668", - "y": "1196", + "x": "674", + "y": "2306", "properties": { - "controlName": "103-learn-a-language:php" + "controlName": "102-more-about-databases:transactions" }, "children": { "controls": { @@ -5366,11 +4578,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "136", + "w": "206", "h": "40", "measuredW": "200", "measuredH": "140", - "x": "8", + "x": "7", "y": "0", "properties": { "color": "16770457" @@ -5380,14 +4592,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "34", - "measuredW": "34", + "w": "105", + "measuredW": "99", "measuredH": "25", - "x": "59", + "x": "57", "y": "7", "properties": { "size": "17", - "text": "PHP" + "text": "Transactions" } }, { @@ -5415,23 +4627,7 @@ "x": "0", "y": "8", "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "4", - "typeID": "Icon", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "3700253", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -5443,17 +4639,17 @@ } }, { - "ID": "1979", + "ID": "2482", "typeID": "__group__", - "zOrder": "129", - "measuredW": "146", + "zOrder": "102", + "measuredW": "213", "measuredH": "40", - "w": "146", + "w": "213", "h": "40", - "x": "846", - "y": "1110", + "x": "674", + "y": "2350", "properties": { - "controlName": "105-learn-a-language:javascript" + "controlName": "103-more-about-databases:n-plus-one-problem" }, "children": { "controls": { @@ -5462,11 +4658,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "136", + "w": "206", "h": "40", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "7", "y": "0", "properties": { "color": "16770457" @@ -5476,14 +4672,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "85", - "measuredW": "81", + "measuredW": "99", "measuredH": "25", - "x": "27", - "y": "8", + "x": "60", + "y": "7", "properties": { - "size": "17", - "text": "JavaScript" + "text": "N+1 Problem", + "size": "17" } }, { @@ -5492,8 +4687,8 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "122", - "y": "7", + "x": "0", + "y": "8", "properties": { "color": "16777215", "icon": { @@ -5503,15 +4698,15 @@ } }, { - "ID": "4", + "ID": "3", "typeID": "Icon", "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "122", - "y": "7", + "x": "0", + "y": "8", "properties": { - "color": "3700253", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -5523,17 +4718,17 @@ } }, { - "ID": "1980", + "ID": "2483", "typeID": "__group__", - "zOrder": "130", - "measuredW": "146", + "zOrder": "103", + "measuredW": "215", "measuredH": "40", - "w": "146", + "w": "215", "h": "40", - "x": "846", - "y": "1153", + "x": "672", + "y": "2394", "properties": { - "controlName": "106-learn-a-language:python" + "controlName": "104-more-about-databases:database-normalization" }, "children": { "controls": { @@ -5542,11 +4737,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "136", + "w": "206", "h": "40", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "9", "y": "0", "properties": { "color": "16770457" @@ -5556,14 +4751,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "56", - "measuredW": "53", + "measuredW": "107", "measuredH": "25", - "x": "40", - "y": "8", + "x": "58", + "y": "7", "properties": { "size": "17", - "text": "Python" + "text": "Normalization" } }, { @@ -5572,7 +4766,7 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "122", + "x": "0", "y": "8", "properties": { "color": "16777215", @@ -5588,26 +4782,10 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "122", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "4", - "typeID": "Icon", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "x": "122", + "x": "0", "y": "8", "properties": { - "color": "3700253", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -5619,17 +4797,17 @@ } }, { - "ID": "1981", + "ID": "2484", "typeID": "__group__", - "zOrder": "131", - "measuredW": "146", + "zOrder": "104", + "measuredW": "218", "measuredH": "40", - "w": "146", + "w": "218", "h": "40", - "x": "846", - "y": "1196", + "x": "670", + "y": "1810", "properties": { - "controlName": "107-learn-a-language:ruby" + "controlName": "100-scaling-databases:database-indexes" }, "children": { "controls": { @@ -5638,11 +4816,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "136", + "w": "208", "h": "40", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "10", "y": "0", "properties": { "color": "16770457" @@ -5652,14 +4830,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "42", - "measuredW": "39", + "measuredW": "140", "measuredH": "25", - "x": "47", - "y": "8", + "x": "44", + "y": "7", "properties": { "size": "17", - "text": "Ruby" + "text": "Database Indexes" } }, { @@ -5668,7 +4845,7 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "122", + "x": "0", "y": "8", "properties": { "color": "16777215", @@ -5684,26 +4861,10 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "122", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "4", - "typeID": "Icon", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "x": "122", + "x": "0", "y": "8", "properties": { - "color": "3700253", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -5715,47 +4876,17 @@ } }, { - "ID": "1983", - "typeID": "Arrow", - "zOrder": "132", - "w": "175", - "h": "48", - "measuredW": "150", - "measuredH": "100", - "x": "1342", - "y": "960", - "properties": { - "color": "2848996", - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 175.29875220380154, - "y": 48.53446090344232 - }, - "p1": { - "x": 0.5008052694036629, - "y": -0.08367970543914485 - }, - "p2": { - "x": 0.1930231075264146, - "y": 0.6021142674793509 - } - } - }, - { - "ID": "1984", + "ID": "2485", "typeID": "__group__", - "zOrder": "133", - "measuredW": "227", + "zOrder": "105", + "measuredW": "212", "measuredH": "50", - "w": "227", + "w": "212", "h": "50", - "x": "1140", - "y": "927", + "x": "945", + "y": "1554", "properties": { - "controlName": "100-internet" + "controlName": "109-apis" }, "children": { "controls": { @@ -5764,7 +4895,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "227", + "w": "212", "h": "50", "measuredW": "200", "measuredH": "140", @@ -5778,12 +4909,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "62", + "measuredW": "133", "measuredH": "25", - "x": "83", + "x": "39", "y": "13", "properties": { - "text": "Internet", + "text": "Learn about APIs", "size": "17" } } @@ -5792,17 +4923,17 @@ } }, { - "ID": "1985", + "ID": "2486", "typeID": "__group__", - "zOrder": "134", - "measuredW": "310", - "measuredH": "44", - "w": "310", - "h": "44", - "x": "1510", - "y": "855", + "zOrder": "106", + "measuredW": "157", + "measuredH": "40", + "w": "157", + "h": "40", + "x": "668", + "y": "1562", "properties": { - "controlName": "100-internet:how-does-the-internet-work" + "controlName": "100-apis:rest" }, "children": { "controls": { @@ -5811,11 +4942,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "299", - "h": "44", + "w": "146", + "h": "40", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "11", "y": "0", "properties": { "color": "16770457" @@ -5825,24 +4956,24 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "223", - "measuredW": "219", + "w": "49", + "measuredW": "44", "measuredH": "25", - "x": "38", - "y": "9", + "x": "59", + "y": "7", "properties": { "size": "17", - "text": "How does the internet work?" + "text": "REST" } }, { - "ID": "2", + "ID": "3", "typeID": "Icon", "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "286", - "y": "9", + "x": "0", + "y": "8", "properties": { "color": "16777215", "icon": { @@ -5852,13 +4983,13 @@ } }, { - "ID": "3", + "ID": "4", "typeID": "Icon", "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "286", - "y": "9", + "x": "0", + "y": "8", "properties": { "color": "10027263", "icon": { @@ -5872,17 +5003,17 @@ } }, { - "ID": "1986", + "ID": "2487", "typeID": "__group__", - "zOrder": "135", - "measuredW": "310", + "zOrder": "107", + "measuredW": "157", "measuredH": "40", - "w": "310", + "w": "157", "h": "40", - "x": "1510", - "y": "902", + "x": "668", + "y": "1607", "properties": { - "controlName": "101-internet:what-is-http" + "controlName": "101-apis:json-apis" }, "children": { "controls": { @@ -5891,11 +5022,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "299", + "w": "146", "h": "40", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "11", "y": "0", "properties": { "color": "16770457" @@ -5905,14 +5036,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "119", - "measuredW": "113", + "w": "90", + "measuredW": "85", "measuredH": "25", - "x": "90", - "y": "8", + "x": "39", + "y": "7", "properties": { "size": "17", - "text": "What is HTTP?" + "text": "JSON APIs" } }, { @@ -5921,7 +5052,7 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "286", + "x": "0", "y": "8", "properties": { "color": "16777215", @@ -5937,7 +5068,7 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "286", + "x": "0", "y": "8", "properties": { "color": "10027263", @@ -5952,17 +5083,17 @@ } }, { - "ID": "1987", + "ID": "2488", "typeID": "__group__", - "zOrder": "136", - "measuredW": "310", + "zOrder": "108", + "measuredW": "155", "measuredH": "40", - "w": "310", + "w": "155", "h": "40", - "x": "1510", - "y": "946", + "x": "670", + "y": "1652", "properties": { - "controlName": "102-internet:browsers-and-how-they-work" + "controlName": "102-apis:soap" }, "children": { "controls": { @@ -5971,11 +5102,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "299", + "w": "145", "h": "40", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "10", "y": "0", "properties": { "color": "16770457" @@ -5985,14 +5116,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "230", - "measuredW": "225", + "w": "49", + "measuredW": "44", "measuredH": "25", - "x": "34", - "y": "8", + "x": "58", + "y": "7", "properties": { "size": "17", - "text": "Browsers and how they work?" + "text": "SOAP" } }, { @@ -6001,7 +5132,7 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "286", + "x": "0", "y": "8", "properties": { "color": "16777215", @@ -6017,10 +5148,10 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "286", + "x": "0", "y": "8", "properties": { - "color": "10027263", + "color": "10066329", "icon": { "ID": "check-circle", "size": "small" @@ -6032,17 +5163,17 @@ } }, { - "ID": "1988", + "ID": "2489", "typeID": "__group__", - "zOrder": "137", - "measuredW": "311", + "zOrder": "109", + "measuredW": "201", "measuredH": "40", - "w": "311", + "w": "201", "h": "40", - "x": "1511", - "y": "990", + "x": "1082", + "y": "1412", "properties": { - "controlName": "103-internet:dns-and-how-it-works" + "controlName": "104-apis:hateoas" }, "children": { "controls": { @@ -6051,7 +5182,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "300", + "w": "190", "h": "40", "measuredW": "200", "measuredH": "140", @@ -6065,14 +5196,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "179", - "measuredW": "175", + "w": "78", + "measuredW": "76", "measuredH": "25", - "x": "60", - "y": "8", + "x": "56", + "y": "7", "properties": { "size": "17", - "text": "DNS and how it works?" + "text": "HATEOAS" } }, { @@ -6081,7 +5212,7 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "287", + "x": "177", "y": "8", "properties": { "color": "16777215", @@ -6097,10 +5228,10 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "287", + "x": "177", "y": "8", "properties": { - "color": "10027263", + "color": "10066329", "icon": { "ID": "check-circle", "size": "small" @@ -6112,17 +5243,17 @@ } }, { - "ID": "1989", + "ID": "2490", "typeID": "__group__", - "zOrder": "138", - "measuredW": "312", + "zOrder": "110", + "measuredW": "201", "measuredH": "40", - "w": "312", + "w": "201", "h": "40", - "x": "1510", - "y": "1034", + "x": "1082", + "y": "1448", "properties": { - "controlName": "104-internet:what-is-domain-name" + "controlName": "105-apis:open-api-spec" }, "children": { "controls": { @@ -6131,7 +5262,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "302", + "w": "190", "h": "40", "measuredW": "200", "measuredH": "140", @@ -6145,14 +5276,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "179", - "measuredW": "180", + "measuredW": "126", "measuredH": "25", - "x": "61", - "y": "8", + "x": "32", + "y": "7", "properties": { "size": "17", - "text": "What is Domain Name?" + "text": "Open API Specs" } }, { @@ -6161,7 +5291,7 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "288", + "x": "177", "y": "8", "properties": { "color": "16777215", @@ -6177,10 +5307,10 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "288", + "x": "177", "y": "8", "properties": { - "color": "10027263", + "color": "10066329", "icon": { "ID": "check-circle", "size": "small" @@ -6192,17 +5322,17 @@ } }, { - "ID": "1990", + "ID": "2491", "typeID": "__group__", - "zOrder": "139", - "measuredW": "313", - "measuredH": "40", - "w": "313", - "h": "40", - "x": "1511", - "y": "1078", + "zOrder": "111", + "measuredW": "170", + "measuredH": "50", + "w": "170", + "h": "50", + "x": "985", + "y": "1645", "properties": { - "controlName": "105-internet:what-is-hosting" + "controlName": "106-apis:authentication" }, "children": { "controls": { @@ -6211,60 +5341,72 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "304", - "h": "40", + "w": "170", + "h": "50", "measuredW": "200", "measuredH": "140", "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } + "y": "0" }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "133", - "measuredW": "126", + "w": "111", + "measuredW": "111", "measuredH": "25", - "x": "85", - "y": "8", + "x": "29", + "y": "12", "properties": { "size": "17", - "text": "What is hosting?" + "text": "Authentication" } - }, + } + ] + } + } + }, + { + "ID": "2492", + "typeID": "__group__", + "zOrder": "112", + "measuredW": "240", + "measuredH": "54", + "w": "240", + "h": "54", + "x": "1581", + "y": "1762", + "properties": { + "controlName": "111-web-security-knowledge" + }, + "children": { + "controls": { + "control": [ { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "289", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "240", + "h": "54", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" } }, { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "289", - "y": "8", + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "189", + "measuredH": "25", + "x": "25", + "y": "15", "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } + "size": "17", + "text": "Web Security Knowledge" } } ] @@ -6272,17 +5414,28 @@ } }, { - "ID": "2001", + "ID": "2493", + "typeID": "TextArea", + "zOrder": "113", + "w": "270", + "h": "192", + "measuredW": "200", + "measuredH": "140", + "x": "1552", + "y": "1526" + }, + { + "ID": "2494", "typeID": "__group__", - "zOrder": "140", - "measuredW": "82", - "measuredH": "50", - "w": "82", - "h": "50", - "x": "1293", - "y": "1102", + "zOrder": "114", + "measuredW": "239", + "measuredH": "40", + "w": "239", + "h": "40", + "x": "1567", + "y": "1541", "properties": { - "controlName": "100-version-control-systems:git" + "controlName": "100-web-security-knowledge:md5" }, "children": { "controls": { @@ -6291,8 +5444,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "71", - "h": "50", + "w": "239", + "h": "40", "measuredW": "200", "measuredH": "140", "x": "0", @@ -6305,45 +5458,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "22", + "w": "203", + "measuredW": "197", "measuredH": "25", - "x": "25", - "y": "12", + "x": "20", + "y": "8", "properties": { "size": "17", - "text": "Git" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "58", - "y": "13", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "58", - "y": "13", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } + "text": "MD5 and why not to use it" } } ] @@ -6351,17 +5473,17 @@ } }, { - "ID": "2002", + "ID": "2495", "typeID": "__group__", - "zOrder": "141", - "measuredW": "138", - "measuredH": "49", - "w": "138", - "h": "49", - "x": "1684", - "y": "1184", + "zOrder": "115", + "measuredW": "237", + "measuredH": "40", + "w": "237", + "h": "40", + "x": "1568", + "y": "1586", "properties": { - "controlName": "100-repo-hosting-services:github" + "controlName": "101-web-security-knowledge:sha-family" }, "children": { "controls": { @@ -6370,8 +5492,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "131", - "h": "49", + "w": "237", + "h": "40", "measuredW": "200", "measuredH": "140", "x": "0", @@ -6384,45 +5506,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "54", + "w": "93", + "measuredW": "87", "measuredH": "25", - "x": "39", - "y": "12", - "properties": { - "text": "GitHub", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "114", - "y": "13", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "114", - "y": "13", + "x": "72", + "y": "7", "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } + "size": "17", + "text": "SHA Family" } } ] @@ -6430,17 +5521,17 @@ } }, { - "ID": "2003", + "ID": "2496", "typeID": "__group__", - "zOrder": "142", - "measuredW": "227", - "measuredH": "50", - "w": "227", - "h": "50", - "x": "1333", - "y": "1292", + "zOrder": "116", + "measuredW": "119", + "measuredH": "40", + "w": "119", + "h": "40", + "x": "1569", + "y": "1632", "properties": { - "controlName": "105-repo-hosting-services" + "controlName": "104-web-security-knowledge:scrypt" }, "children": { "controls": { @@ -6449,27 +5540,28 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "227", - "h": "50", + "w": "119", + "h": "40", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16776960" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "172", + "w": "62", + "measuredW": "47", "measuredH": "25", - "x": "28", - "y": "12", + "x": "38", + "y": "7", "properties": { - "text": "Repo hosting services", - "size": "17" + "size": "17", + "text": "scrypt" } } ] @@ -6477,17 +5569,17 @@ } }, { - "ID": "2004", + "ID": "2497", "typeID": "__group__", - "zOrder": "143", - "measuredW": "226", - "measuredH": "50", - "w": "226", - "h": "50", - "x": "1139", - "y": "1023", + "zOrder": "117", + "measuredW": "111", + "measuredH": "40", + "w": "111", + "h": "40", + "x": "1695", + "y": "1632", "properties": { - "controlName": "104-version-control-systems" + "controlName": "102-web-security-knowledge:bcrypt" }, "children": { "controls": { @@ -6496,27 +5588,28 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "226", - "h": "50", + "w": "111", + "h": "40", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16776960" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "186", + "w": "53", + "measuredW": "48", "measuredH": "25", - "x": "20", - "y": "12", + "x": "35", + "y": "7", "properties": { - "text": "Version Control Systems", - "size": "17" + "size": "17", + "text": "bcrypt" } } ] @@ -6524,94 +5617,216 @@ } }, { - "ID": "2005", + "ID": "2498", + "typeID": "Label", + "zOrder": "118", + "w": "155", + "measuredW": "149", + "measuredH": "25", + "x": "1609", + "y": "1680", + "properties": { + "size": "17", + "text": "Hashing Algorithms" + } + }, + { + "ID": "2499", + "typeID": "Label", + "zOrder": "119", + "measuredW": "128", + "measuredH": "40", + "x": "1200", + "y": "789", + "properties": { + "size": "32", + "text": "Backend" + } + }, + { + "ID": "2500", + "typeID": "Arrow", + "zOrder": "120", + "w": "1", + "h": "75", + "measuredW": "150", + "measuredH": "100", + "x": "1251", + "y": "702", + "properties": { + "color": "2848996", + "curvature": "-1", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0.43268541466795796, + "y": -0.4292144763719534 + }, + "p1": { + "x": 0.4673783006670677, + "y": -0.0036060514395746665 + }, + "p2": { + "x": 0.08850738176079176, + "y": 74.41806720423438 + } + } + }, + { + "ID": "2501", "typeID": "__group__", - "zOrder": "144", - "measuredW": "140", - "measuredH": "49", - "w": "140", - "h": "49", - "x": "1684", - "y": "1291", - "properties": { - "controlName": "102-repo-hosting-services:bitbucket" - }, + "zOrder": "121", + "measuredW": "350", + "measuredH": "141", + "w": "350", + "h": "141", + "x": "1477", + "y": "672", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Canvas", "zOrder": "0", - "w": "131", - "h": "49", - "measuredW": "200", - "measuredH": "140", + "w": "350", + "h": "141", + "measuredW": "100", + "measuredH": "70", "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } + "y": "0" }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "73", + "measuredW": "314", "measuredH": "25", - "x": "29", - "y": "12", + "x": "14", + "y": "17", "properties": { - "color": "3355443", - "text": "Bitbucket", - "size": "17" + "size": "17", + "text": "Find the detailed version of this roadmap" } }, { - "ID": "3", - "typeID": "Icon", + "ID": "2", + "typeID": "Label", "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "116", - "y": "13", + "measuredW": "319", + "measuredH": "25", + "x": "14", + "y": "45", "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } + "size": "17", + "text": "along with resources and other roadmaps" } }, { - "ID": "4", - "typeID": "Icon", + "ID": "3", + "typeID": "__group__", "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "116", - "y": "13", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "5", - "typeID": "Icon", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "x": "116", - "y": "13", + "measuredW": "320", + "measuredH": "45", + "w": "320", + "h": "45", + "x": "15", + "y": "81", "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" + "controlName": "ext_link:roadmap.sh" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "320", + "h": "45", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "borderColor": "4273622", + "color": "4273622" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "105", + "measuredH": "28", + "x": "141", + "y": "8", + "properties": { + "color": "16777215", + "size": "20", + "text": "roadmap.sh" + } + }, + { + "ID": "2", + "typeID": "Label", + "zOrder": "2", + "measuredW": "45", + "measuredH": "28", + "x": "66", + "y": "8", + "properties": { + "color": "16777215", + "size": "20", + "text": "https" + } + }, + { + "ID": "3", + "typeID": "Label", + "zOrder": "3", + "measuredW": "5", + "measuredH": "28", + "x": "113", + "y": "8", + "properties": { + "bold": "true", + "color": "16777215", + "size": "20", + "text": ":" + } + }, + { + "ID": "4", + "typeID": "Label", + "zOrder": "4", + "measuredW": "10", + "measuredH": "28", + "x": "120", + "y": "9", + "properties": { + "color": "16777215", + "size": "20", + "text": "/" + } + }, + { + "ID": "5", + "typeID": "Label", + "zOrder": "5", + "measuredW": "10", + "measuredH": "28", + "x": "128", + "y": "9", + "properties": { + "color": "16777215", + "size": "20", + "text": "/" + } + } + ] } } } @@ -6620,58 +5835,37 @@ } }, { - "ID": "2006", + "ID": "2502", "typeID": "__group__", - "zOrder": "145", - "measuredW": "140", - "measuredH": "49", - "w": "140", - "h": "49", - "x": "1684", - "y": "1237", - "properties": { - "controlName": "101-repo-hosting-services:gitlab" - }, + "zOrder": "122", + "measuredW": "408", + "measuredH": "162", + "w": "408", + "h": "162", + "x": "665", + "y": "662", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Canvas", "zOrder": "0", - "w": "131", - "h": "49", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "52", - "measuredW": "51", - "measuredH": "25", - "x": "40", - "y": "12", - "properties": { - "color": "3355443", - "size": "17", - "text": "GitLab" - } + "w": "408", + "h": "162", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0" }, { - "ID": "3", + "ID": "1", "typeID": "Icon", - "zOrder": "2", + "zOrder": "1", "measuredW": "24", "measuredH": "24", - "x": "116", - "y": "13", + "x": "23", + "y": "21", "properties": { "color": "16777215", "icon": { @@ -6681,93 +5875,85 @@ } }, { - "ID": "4", + "ID": "2", "typeID": "Icon", - "zOrder": "3", + "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "116", - "y": "13", + "x": "23", + "y": "21", "properties": { - "color": "16777215", + "color": "10027263", "icon": { - "ID": "circle", + "ID": "check-circle", "size": "small" } } }, + { + "ID": "3", + "typeID": "Label", + "zOrder": "3", + "measuredW": "269", + "measuredH": "24", + "x": "59", + "y": "21", + "properties": { + "size": "16", + "text": "Personal Recommendation / Opinion" + } + }, + { + "ID": "4", + "typeID": "Label", + "zOrder": "4", + "measuredW": "159", + "measuredH": "24", + "x": "59", + "y": "118", + "properties": { + "size": "16", + "text": "I wouldn't recommend" + } + }, { "ID": "5", "typeID": "Icon", - "zOrder": "4", + "zOrder": "5", "measuredW": "24", "measuredH": "24", - "x": "116", - "y": "13", + "x": "23", + "y": "118", "properties": { - "color": "3700253", + "color": "10066329", "icon": { - "ID": "check-circle", + "ID": "circle", "size": "small" } } - } - ] - } - } - }, - { - "ID": "2007", - "typeID": "__group__", - "zOrder": "146", - "measuredW": "212", - "measuredH": "40", - "w": "212", - "h": "40", - "x": "674", - "y": "2218", - "properties": { - "controlName": "100-more-about-databases:orms" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "205", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "7", - "y": "0", - "properties": { - "color": "16770457" - } }, { - "ID": "1", + "ID": "6", "typeID": "Label", - "zOrder": "1", - "w": "49", - "measuredW": "49", - "measuredH": "25", - "x": "85", - "y": "7", + "zOrder": "6", + "w": "324", + "measuredW": "315", + "measuredH": "24", + "x": "60", + "y": "86", "properties": { - "size": "17", - "text": "ORMs" + "size": "16", + "text": "Order in roadmap not strict (Learn anytime)" } }, { - "ID": "2", + "ID": "7", "typeID": "Icon", - "zOrder": "2", + "zOrder": "7", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "8", + "x": "23", + "y": "86", "properties": { "color": "16777215", "icon": { @@ -6777,172 +5963,58 @@ } }, { - "ID": "3", + "ID": "8", "typeID": "Icon", - "zOrder": "3", + "zOrder": "8", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "8", + "x": "23", + "y": "86", "properties": { - "color": "10027263", + "color": "10066329", "icon": { "ID": "check-circle", "size": "small" } } - } - ] - } - } - }, - { - "ID": "2008", - "typeID": "__group__", - "zOrder": "147", - "measuredW": "169", - "measuredH": "50", - "w": "169", - "h": "50", - "x": "984", - "y": "2008", - "properties": { - "controlName": "113-ci-cd" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "169", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "62", - "measuredW": "59", - "measuredH": "25", - "x": "54", - "y": "12", - "properties": { - "size": "17", - "text": "CI / CD" - } - } - ] - } - } - }, - { - "ID": "2009", - "typeID": "__group__", - "zOrder": "23", - "measuredW": "324", - "measuredH": "50", - "w": "324", - "h": "50", - "x": "1005", - "y": "2312", - "properties": { - "controlName": "114-design-and-development-principles" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "324", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } }, { - "ID": "1", + "ID": "9", "typeID": "Label", - "zOrder": "1", - "measuredW": "275", - "measuredH": "25", - "x": "24", - "y": "13", - "properties": { - "size": "17", - "text": "Design and Development Principles" - } - } - ] - } - } - }, - { - "ID": "2010", - "typeID": "__group__", - "zOrder": "148", - "measuredW": "271", - "measuredH": "40", - "w": "271", - "h": "40", - "x": "1561", - "y": "2208", - "properties": { - "controlName": "100-design-and-development-principles:gof-design-patterns" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "260", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", + "zOrder": "9", + "measuredW": "272", + "measuredH": "24", + "x": "59", + "y": "54", "properties": { - "color": "16770457" + "size": "16", + "text": "Alternative Option - Pick this or purple" } }, { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "168", - "measuredW": "164", - "measuredH": "25", - "x": "46", - "y": "7", + "ID": "10", + "typeID": "Icon", + "zOrder": "10", + "measuredW": "24", + "measuredH": "24", + "x": "23", + "y": "53", "properties": { - "size": "17", - "text": "GOF Design Patterns" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { - "ID": "2", + "ID": "11", "typeID": "Icon", - "zOrder": "2", + "zOrder": "11", "measuredW": "24", "measuredH": "24", - "x": "247", - "y": "8", + "x": "23", + "y": "53", "properties": { "color": "16777215", "icon": { @@ -6952,19 +6024,19 @@ } }, { - "ID": "3", + "ID": "12", "typeID": "Icon", - "zOrder": "3", + "zOrder": "12", "measuredW": "24", "measuredH": "24", - "x": "247", - "y": "8", + "x": "23", + "y": "53", "properties": { + "color": "3700253", "icon": { "ID": "check-circle", "size": "small" - }, - "color": "10027263" + } } } ] @@ -6972,17 +6044,17 @@ } }, { - "ID": "2011", + "ID": "2503", "typeID": "__group__", - "zOrder": "149", - "measuredW": "271", + "zOrder": "123", + "measuredW": "144", "measuredH": "40", - "w": "271", + "w": "144", "h": "40", - "x": "1561", - "y": "2252", + "x": "668", + "y": "950", "properties": { - "controlName": "101-design-and-development-principles:domain-driven-design" + "controlName": "100-learn-a-language:go" }, "children": { "controls": { @@ -6991,11 +6063,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "260", + "w": "136", "h": "40", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "8", "y": "0", "properties": { "color": "16770457" @@ -7005,14 +6077,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "175", - "measuredW": "172", + "w": "26", + "measuredW": "23", "measuredH": "25", - "x": "42", + "x": "63", "y": "7", "properties": { "size": "17", - "text": "Domain Driven Design" + "text": "Go" } }, { @@ -7021,7 +6093,7 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "247", + "x": "0", "y": "8", "properties": { "color": "16777215", @@ -7037,14 +6109,30 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "247", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "4", + "typeID": "Icon", + "zOrder": "4", + "measuredW": "24", + "measuredH": "24", + "x": "0", "y": "8", "properties": { + "color": "3700253", "icon": { "ID": "check-circle", "size": "small" - }, - "color": "10027263" + } } } ] @@ -7052,17 +6140,17 @@ } }, { - "ID": "2012", + "ID": "2504", "typeID": "__group__", - "zOrder": "150", - "measuredW": "271", + "zOrder": "124", + "measuredW": "144", "measuredH": "40", - "w": "271", + "w": "144", "h": "40", - "x": "1561", - "y": "2296", + "x": "668", + "y": "1108", "properties": { - "controlName": "102-design-and-development-principles:test-driven-development" + "controlName": "102-learn-a-language:java" }, "children": { "controls": { @@ -7071,11 +6159,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "260", + "w": "136", "h": "40", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "8", "y": "0", "properties": { "color": "16770457" @@ -7085,14 +6173,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "196", - "measuredW": "194", + "w": "38", + "measuredW": "36", "measuredH": "25", - "x": "32", + "x": "57", "y": "7", "properties": { "size": "17", - "text": "Test Driven Development" + "text": "Java" } }, { @@ -7101,7 +6189,7 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "247", + "x": "0", "y": "8", "properties": { "color": "16777215", @@ -7117,72 +6205,8 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "247", - "y": "8", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - }, - { - "ID": "2013", - "typeID": "__group__", - "zOrder": "151", - "measuredW": "210", - "measuredH": "37", - "w": "210", - "h": "37", - "x": "1005", - "y": "2668", - "properties": { - "controlName": "104-architectural-patterns:serverless" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "202", - "h": "37", - "measuredW": "200", - "measuredH": "140", "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "87", - "measuredW": "82", - "measuredH": "25", - "x": "57", - "y": "6", - "properties": { - "size": "17", - "text": "Serverless" - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "186", - "y": "7", + "y": "8", "properties": { "color": "16777215", "icon": { @@ -7192,15 +6216,15 @@ } }, { - "ID": "3", + "ID": "4", "typeID": "Icon", - "zOrder": "3", + "zOrder": "4", "measuredW": "24", "measuredH": "24", - "x": "186", - "y": "7", + "x": "0", + "y": "8", "properties": { - "color": "10027263", + "color": "3700253", "icon": { "ID": "check-circle", "size": "small" @@ -7212,17 +6236,17 @@ } }, { - "ID": "2014", + "ID": "2505", "typeID": "__group__", - "zOrder": "2", - "measuredW": "214", - "measuredH": "46", - "w": "214", - "h": "46", - "x": "671", - "y": "3258", + "zOrder": "125", + "measuredW": "145", + "measuredH": "40", + "w": "145", + "h": "40", + "x": "668", + "y": "907", "properties": { - "controlName": "102-scalability:migration-strategies" + "controlName": "101-learn-a-language:rust" }, "children": { "controls": { @@ -7231,11 +6255,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "214", - "h": "46", + "w": "136", + "h": "40", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "9", "y": "0", "properties": { "color": "16770457" @@ -7245,60 +6269,62 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "155", + "w": "39", + "measuredW": "36", "measuredH": "25", - "x": "29", - "y": "9", + "x": "57", + "y": "7", "properties": { - "text": "Migration Strategies", - "size": "17" + "size": "17", + "text": "Rust" } - } - ] - } - } - }, - { - "ID": "2015", - "typeID": "__group__", - "zOrder": "215", - "measuredW": "212", - "measuredH": "41", - "w": "212", - "h": "41", - "x": "671", - "y": "3220", - "properties": { - "controlName": "103-scalability:horizontal-vertical-scaling" - }, - "children": { - "controls": { - "control": [ + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "212", - "h": "41", - "measuredW": "200", - "measuredH": "140", + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", "x": "0", - "y": "0", + "y": "8", "properties": { - "color": "16770457" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "125", - "measuredH": "25", - "x": "43", + "ID": "4", + "typeID": "Icon", + "zOrder": "4", + "measuredW": "24", + "measuredH": "24", + "x": "0", "y": "8", "properties": { - "size": "17", - "text": "Types of Scaling" + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -7306,17 +6332,17 @@ } }, { - "ID": "2018", + "ID": "2506", "typeID": "__group__", - "zOrder": "152", - "measuredW": "155", + "zOrder": "126", + "measuredW": "144", "measuredH": "40", - "w": "155", + "w": "144", "h": "40", - "x": "670", - "y": "1697", + "x": "668", + "y": "1152", "properties": { - "controlName": "103-apis:grpc" + "controlName": "103-learn-a-language:csharp" }, "children": { "controls": { @@ -7325,11 +6351,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "145", + "w": "136", "h": "40", "measuredW": "200", "measuredH": "140", - "x": "10", + "x": "8", "y": "0", "properties": { "color": "16770457" @@ -7339,19 +6365,18 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "90", - "measuredW": "45", + "w": "27", + "measuredW": "24", "measuredH": "25", - "x": "38", + "x": "62", "y": "7", "properties": { - "align": "center", "size": "17", - "text": "gRPC" + "text": "C#" } }, { - "ID": "4", + "ID": "2", "typeID": "Icon", "zOrder": "2", "measuredW": "24", @@ -7367,7 +6392,7 @@ } }, { - "ID": "5", + "ID": "3", "typeID": "Icon", "zOrder": "3", "measuredW": "24", @@ -7375,7 +6400,23 @@ "x": "0", "y": "8", "properties": { - "color": "10066329", + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "4", + "typeID": "Icon", + "zOrder": "4", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "3700253", "icon": { "ID": "check-circle", "size": "small" @@ -7387,17 +6428,17 @@ } }, { - "ID": "2019", + "ID": "2507", "typeID": "__group__", - "zOrder": "153", - "measuredW": "323", + "zOrder": "127", + "measuredW": "302", "measuredH": "50", - "w": "323", + "w": "302", "h": "50", - "x": "1005", - "y": "2264", + "x": "679", + "y": "1026", "properties": { - "controlName": "ext_link:roadmap.sh/software-design-architecture" + "controlName": "103-learn-a-language" }, "children": { "controls": { @@ -7406,30 +6447,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "323", + "w": "302", "h": "50", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "4273622", - "borderColor": "4273622", - "textColor": "16777215" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "240", + "measuredW": "141", "measuredH": "25", - "x": "42", - "y": "12", + "x": "80", + "y": "13", "properties": { - "text": "Software Design & Architecture", - "size": "17", - "color": "16777215" + "text": "Learn a Language", + "size": "17" } } ] @@ -7437,17 +6475,17 @@ } }, { - "ID": "2024", + "ID": "2508", "typeID": "__group__", - "zOrder": "154", - "measuredW": "174", - "measuredH": "154", - "w": "174", - "h": "154", - "x": "1475", - "y": "2923", + "zOrder": "128", + "measuredW": "144", + "measuredH": "40", + "w": "144", + "h": "40", + "x": "668", + "y": "1196", "properties": { - "controlName": "100-nosql-databases:document-databases" + "controlName": "103-learn-a-language:php" }, "children": { "controls": { @@ -7456,191 +6494,155 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "174", - "h": "154", + "w": "136", + "h": "40", "measuredW": "200", "measuredH": "140", - "x": "0", - "y": "0" + "x": "8", + "y": "0", + "properties": { + "color": "16770457" + } }, { "ID": "1", - "typeID": "TextArea", + "typeID": "Label", "zOrder": "1", - "w": "137", - "h": "43", - "measuredW": "200", - "measuredH": "140", - "x": "21", - "y": "15", + "w": "34", + "measuredW": "34", + "measuredH": "25", + "x": "59", + "y": "7", "properties": { - "color": "16770457" + "size": "17", + "text": "PHP" } }, { "ID": "2", - "typeID": "Label", + "typeID": "Icon", "zOrder": "2", - "measuredW": "78", - "measuredH": "25", - "x": "51", - "y": "24", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", "properties": { - "size": "17", - "text": "MongoDB" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { "ID": "3", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "3", - "w": "137", - "h": "43", - "measuredW": "200", - "measuredH": "140", - "x": "21", - "y": "63", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", "properties": { - "color": "16770457" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { "ID": "4", - "typeID": "Label", + "typeID": "Icon", "zOrder": "4", - "measuredW": "74", - "measuredH": "25", - "x": "53", - "y": "72", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", "properties": { - "size": "17", - "text": "CouchDB" + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } + } + }, + { + "ID": "2509", + "typeID": "__group__", + "zOrder": "129", + "measuredW": "146", + "measuredH": "40", + "w": "146", + "h": "40", + "x": "846", + "y": "1110", + "properties": { + "controlName": "105-learn-a-language:javascript" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "136", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" } }, { - "ID": "5", + "ID": "1", "typeID": "Label", - "zOrder": "5", - "measuredW": "117", + "zOrder": "1", + "w": "85", + "measuredW": "81", "measuredH": "25", - "x": "31", - "y": "114", + "x": "27", + "y": "8", "properties": { "size": "17", - "text": "Document DBs" + "text": "JavaScript" } }, { - "ID": "6", - "typeID": "__group__", - "zOrder": "6", + "ID": "2", + "typeID": "Icon", + "zOrder": "2", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "12", - "y": "22", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "x": "122", + "y": "7", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" } } }, { - "ID": "7", - "typeID": "__group__", - "zOrder": "7", + "ID": "4", + "typeID": "Icon", + "zOrder": "3", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "11", - "y": "71", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "x": "122", + "y": "7", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" } } } @@ -7649,17 +6651,17 @@ } }, { - "ID": "2025", + "ID": "2510", "typeID": "__group__", - "zOrder": "155", - "measuredW": "168", - "measuredH": "154", - "w": "168", - "h": "154", - "x": "1646", - "y": "2923", + "zOrder": "130", + "measuredW": "146", + "measuredH": "40", + "w": "146", + "h": "40", + "x": "846", + "y": "1153", "properties": { - "controlName": "102-nosql-databases:timeseries-databases" + "controlName": "106-learn-a-language:python" }, "children": { "controls": { @@ -7668,191 +6670,171 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "168", - "h": "154", + "w": "136", + "h": "40", "measuredW": "200", "measuredH": "140", "x": "0", - "y": "0" + "y": "0", + "properties": { + "color": "16770457" + } }, { "ID": "1", - "typeID": "TextArea", + "typeID": "Label", "zOrder": "1", - "w": "137", - "h": "43", - "measuredW": "200", - "measuredH": "140", - "x": "17", - "y": "14", + "w": "56", + "measuredW": "53", + "measuredH": "25", + "x": "40", + "y": "8", "properties": { - "color": "16770457" + "size": "17", + "text": "Python" } }, { "ID": "2", - "typeID": "Label", + "typeID": "Icon", "zOrder": "2", - "measuredW": "65", - "measuredH": "25", - "x": "53", - "y": "23", + "measuredW": "24", + "measuredH": "24", + "x": "122", + "y": "8", "properties": { - "size": "17", - "text": "InfluxDB" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { "ID": "3", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "3", - "w": "137", - "h": "43", - "measuredW": "200", - "measuredH": "140", - "x": "17", - "y": "62", + "measuredW": "24", + "measuredH": "24", + "x": "122", + "y": "8", "properties": { - "color": "16770457" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { "ID": "4", - "typeID": "Label", + "typeID": "Icon", "zOrder": "4", - "measuredW": "81", - "measuredH": "25", - "x": "45", - "y": "71", + "measuredW": "24", + "measuredH": "24", + "x": "122", + "y": "8", "properties": { - "size": "17", - "text": "TimeScale" + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } + } + }, + { + "ID": "2511", + "typeID": "__group__", + "zOrder": "131", + "measuredW": "146", + "measuredH": "40", + "w": "146", + "h": "40", + "x": "846", + "y": "1196", + "properties": { + "controlName": "107-learn-a-language:ruby" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "136", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" } }, { - "ID": "5", + "ID": "1", "typeID": "Label", - "zOrder": "5", - "measuredW": "91", + "zOrder": "1", + "w": "42", + "measuredW": "39", "measuredH": "25", - "x": "38", - "y": "113", + "x": "47", + "y": "8", "properties": { "size": "17", - "text": "Time Series" + "text": "Ruby" } }, { - "ID": "6", - "typeID": "__group__", - "zOrder": "6", + "ID": "2", + "typeID": "Icon", + "zOrder": "2", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "137", - "y": "21", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "x": "122", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" } } }, { - "ID": "7", - "typeID": "__group__", - "zOrder": "7", + "ID": "3", + "typeID": "Icon", + "zOrder": "3", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "141", - "y": "70", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "x": "122", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "4", + "typeID": "Icon", + "zOrder": "4", + "measuredW": "24", + "measuredH": "24", + "x": "122", + "y": "8", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" } } } @@ -7861,17 +6843,47 @@ } }, { - "ID": "2026", + "ID": "2512", + "typeID": "Arrow", + "zOrder": "132", + "w": "175", + "h": "48", + "measuredW": "150", + "measuredH": "100", + "x": "1342", + "y": "960", + "properties": { + "color": "2848996", + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 175.29875220380154, + "y": 48.53446090344232 + }, + "p1": { + "x": 0.5008052694036629, + "y": -0.08367970543914485 + }, + "p2": { + "x": 0.1930231075264146, + "y": 0.6021142674793509 + } + } + }, + { + "ID": "2513", "typeID": "__group__", - "zOrder": "156", - "measuredW": "174", - "measuredH": "154", - "w": "174", - "h": "154", - "x": "1475", - "y": "3072", + "zOrder": "133", + "measuredW": "227", + "measuredH": "50", + "w": "227", + "h": "50", + "x": "1140", + "y": "927", "properties": { - "controlName": "103-nosql-databases:realtime-databases" + "controlName": "100-internet" }, "children": { "controls": { @@ -7880,191 +6892,106 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "174", - "h": "154", + "w": "227", + "h": "50", "measuredW": "200", "measuredH": "140", "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "TextArea", - "zOrder": "1", - "w": "137", - "h": "43", - "measuredW": "200", - "measuredH": "140", - "x": "21", - "y": "14", + "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { - "ID": "2", + "ID": "1", "typeID": "Label", - "zOrder": "2", - "measuredW": "68", + "zOrder": "1", + "measuredW": "62", "measuredH": "25", - "x": "56", - "y": "23", + "x": "83", + "y": "13", "properties": { - "size": "17", - "text": "Firebase" + "text": "Internet", + "size": "17" } - }, + } + ] + } + } + }, + { + "ID": "2514", + "typeID": "__group__", + "zOrder": "134", + "measuredW": "310", + "measuredH": "44", + "w": "310", + "h": "44", + "x": "1510", + "y": "855", + "properties": { + "controlName": "100-internet:how-does-the-internet-work" + }, + "children": { + "controls": { + "control": [ { - "ID": "3", - "typeID": "TextArea", - "zOrder": "3", - "w": "137", - "h": "43", + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "299", + "h": "44", "measuredW": "200", "measuredH": "140", - "x": "21", - "y": "62", + "x": "0", + "y": "0", "properties": { "color": "16770457" } }, { - "ID": "4", - "typeID": "Label", - "zOrder": "4", - "measuredW": "83", - "measuredH": "25", - "x": "48", - "y": "71", - "properties": { - "size": "17", - "text": "RethinkDB" - } - }, - { - "ID": "5", + "ID": "1", "typeID": "Label", - "zOrder": "5", - "measuredW": "69", + "zOrder": "1", + "w": "223", + "measuredW": "219", "measuredH": "25", - "x": "55", - "y": "113", + "x": "38", + "y": "9", "properties": { "size": "17", - "text": "Realtime" + "text": "How does the internet work?" } }, { - "ID": "6", - "typeID": "__group__", - "zOrder": "6", + "ID": "2", + "typeID": "Icon", + "zOrder": "2", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "9", - "y": "23", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "x": "286", + "y": "9", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" } } }, { - "ID": "7", - "typeID": "__group__", - "zOrder": "7", + "ID": "3", + "typeID": "Icon", + "zOrder": "3", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "10", - "y": "71", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "x": "286", + "y": "9", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" } } } @@ -8073,17 +7000,17 @@ } }, { - "ID": "2027", + "ID": "2515", "typeID": "__group__", - "zOrder": "157", - "measuredW": "168", - "measuredH": "154", - "w": "168", - "h": "154", - "x": "1646", - "y": "3072", + "zOrder": "135", + "measuredW": "310", + "measuredH": "40", + "w": "310", + "h": "40", + "x": "1510", + "y": "902", "properties": { - "controlName": "101-nosql-databases:column-databases" + "controlName": "101-internet:what-is-http" }, "children": { "controls": { @@ -8092,191 +7019,139 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "168", - "h": "154", + "w": "299", + "h": "40", "measuredW": "200", "measuredH": "140", "x": "0", - "y": "0" + "y": "0", + "properties": { + "color": "16770457" + } }, { "ID": "1", - "typeID": "TextArea", + "typeID": "Label", "zOrder": "1", - "w": "137", - "h": "43", - "measuredW": "200", - "measuredH": "140", - "x": "15", - "y": "14", + "w": "119", + "measuredW": "113", + "measuredH": "25", + "x": "90", + "y": "8", "properties": { - "color": "16770457" + "size": "17", + "text": "What is HTTP?" } }, { "ID": "2", - "typeID": "Label", + "typeID": "Icon", "zOrder": "2", - "measuredW": "83", - "measuredH": "25", - "x": "42", - "y": "23", + "measuredW": "24", + "measuredH": "24", + "x": "286", + "y": "8", "properties": { - "size": "17", - "text": "Cassandra" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { "ID": "3", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "3", - "w": "137", - "h": "43", + "measuredW": "24", + "measuredH": "24", + "x": "286", + "y": "8", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } + } + }, + { + "ID": "2516", + "typeID": "__group__", + "zOrder": "136", + "measuredW": "310", + "measuredH": "40", + "w": "310", + "h": "40", + "x": "1510", + "y": "946", + "properties": { + "controlName": "102-internet:browsers-and-how-they-work" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "299", + "h": "40", "measuredW": "200", "measuredH": "140", - "x": "15", - "y": "62", + "x": "0", + "y": "0", "properties": { "color": "16770457" } }, { - "ID": "4", - "typeID": "Label", - "zOrder": "4", - "measuredW": "53", - "measuredH": "25", - "x": "57", - "y": "71", - "properties": { - "size": "17", - "text": "HBase" - } - }, - { - "ID": "5", + "ID": "1", "typeID": "Label", - "zOrder": "5", - "measuredW": "96", + "zOrder": "1", + "w": "230", + "measuredW": "225", "measuredH": "25", - "x": "36", - "y": "113", + "x": "34", + "y": "8", "properties": { "size": "17", - "text": "Column DBs" + "text": "Browsers and how they work?" } }, { - "ID": "6", - "typeID": "__group__", - "zOrder": "6", + "ID": "2", + "typeID": "Icon", + "zOrder": "2", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "137", - "y": "23", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "x": "286", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" } } }, { - "ID": "7", - "typeID": "__group__", - "zOrder": "7", + "ID": "3", + "typeID": "Icon", + "zOrder": "3", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "137", - "y": "71", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "x": "286", + "y": "8", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" } } } @@ -8285,17 +7160,17 @@ } }, { - "ID": "2028", + "ID": "2517", "typeID": "__group__", - "zOrder": "158", - "measuredW": "174", - "measuredH": "154", - "w": "174", - "h": "154", - "x": "1475", - "y": "3222", + "zOrder": "137", + "measuredW": "311", + "measuredH": "40", + "w": "311", + "h": "40", + "x": "1511", + "y": "990", "properties": { - "controlName": "104-nosql-databases:key-value-databases" + "controlName": "103-internet:dns-and-how-it-works" }, "children": { "controls": { @@ -8304,191 +7179,139 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "174", - "h": "154", + "w": "300", + "h": "40", "measuredW": "200", "measuredH": "140", "x": "0", - "y": "0" + "y": "0", + "properties": { + "color": "16770457" + } }, { "ID": "1", - "typeID": "TextArea", + "typeID": "Label", "zOrder": "1", - "w": "143", - "h": "43", - "measuredW": "200", - "measuredH": "140", - "x": "18", - "y": "14", + "w": "179", + "measuredW": "175", + "measuredH": "25", + "x": "60", + "y": "8", "properties": { - "color": "16770457" + "size": "17", + "text": "DNS and how it works?" } }, { "ID": "2", - "typeID": "Label", + "typeID": "Icon", "zOrder": "2", - "measuredW": "45", - "measuredH": "25", - "x": "64", - "y": "23", + "measuredW": "24", + "measuredH": "24", + "x": "287", + "y": "8", "properties": { - "size": "17", - "text": "Redis" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { "ID": "3", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "3", - "w": "143", - "h": "43", - "measuredW": "200", - "measuredH": "140", - "x": "18", - "y": "61", + "measuredW": "24", + "measuredH": "24", + "x": "287", + "y": "8", "properties": { - "color": "16770457" + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } } - }, + } + ] + } + } + }, + { + "ID": "2518", + "typeID": "__group__", + "zOrder": "138", + "measuredW": "312", + "measuredH": "40", + "w": "312", + "h": "40", + "x": "1510", + "y": "1034", + "properties": { + "controlName": "104-internet:what-is-domain-name" + }, + "children": { + "controls": { + "control": [ { - "ID": "4", - "typeID": "Label", - "zOrder": "4", - "measuredW": "88", - "measuredH": "25", - "x": "43", - "y": "70", + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "302", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", "properties": { - "size": "17", - "text": "DynamoDB" + "color": "16770457" } }, { - "ID": "5", + "ID": "1", "typeID": "Label", - "zOrder": "5", - "measuredW": "76", + "zOrder": "1", + "w": "179", + "measuredW": "180", "measuredH": "25", - "x": "52", - "y": "114", + "x": "61", + "y": "8", "properties": { "size": "17", - "text": "Key-Value" + "text": "What is Domain Name?" } }, { - "ID": "6", - "typeID": "__group__", - "zOrder": "6", + "ID": "2", + "typeID": "Icon", + "zOrder": "2", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "11", - "y": "21", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "x": "288", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" } } }, { - "ID": "7", - "typeID": "__group__", - "zOrder": "7", + "ID": "3", + "typeID": "Icon", + "zOrder": "3", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "9", - "y": "70", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "x": "288", + "y": "8", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" } } } @@ -8497,26 +7320,57 @@ } }, { - "ID": "2029", + "ID": "2519", "typeID": "__group__", - "zOrder": "159", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "1802", - "y": "3036", + "zOrder": "139", + "measuredW": "313", + "measuredH": "40", + "w": "313", + "h": "40", + "x": "1511", + "y": "1078", + "properties": { + "controlName": "105-internet:what-is-hosting" + }, "children": { "controls": { "control": [ { "ID": "0", - "typeID": "Icon", + "typeID": "TextArea", "zOrder": "0", - "measuredW": "24", - "measuredH": "24", + "w": "304", + "h": "40", + "measuredW": "200", + "measuredH": "140", "x": "0", "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "133", + "measuredW": "126", + "measuredH": "25", + "x": "85", + "y": "8", + "properties": { + "size": "17", + "text": "What is hosting?" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "289", + "y": "8", "properties": { "color": "16777215", "icon": { @@ -8526,15 +7380,15 @@ } }, { - "ID": "1", + "ID": "3", "typeID": "Icon", - "zOrder": "1", + "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "0", + "x": "289", + "y": "8", "properties": { - "color": "10066329", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -8546,26 +7400,56 @@ } }, { - "ID": "2030", + "ID": "2520", "typeID": "__group__", - "zOrder": "160", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "1802", - "y": "3185", + "zOrder": "140", + "measuredW": "82", + "measuredH": "50", + "w": "82", + "h": "50", + "x": "1293", + "y": "1102", + "properties": { + "controlName": "100-version-control-systems:git" + }, "children": { "controls": { "control": [ { "ID": "0", - "typeID": "Icon", + "typeID": "TextArea", "zOrder": "0", - "measuredW": "24", - "measuredH": "24", + "w": "71", + "h": "50", + "measuredW": "200", + "measuredH": "140", "x": "0", "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "22", + "measuredH": "25", + "x": "25", + "y": "12", + "properties": { + "size": "17", + "text": "Git" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "58", + "y": "13", "properties": { "color": "16777215", "icon": { @@ -8575,15 +7459,15 @@ } }, { - "ID": "1", + "ID": "3", "typeID": "Icon", - "zOrder": "1", + "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "0", + "x": "58", + "y": "13", "properties": { - "color": "10066329", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -8595,75 +7479,56 @@ } }, { - "ID": "2031", + "ID": "2521", "typeID": "__group__", - "zOrder": "161", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "1466", - "y": "3185", + "zOrder": "141", + "measuredW": "138", + "measuredH": "49", + "w": "138", + "h": "49", + "x": "1684", + "y": "1184", + "properties": { + "controlName": "100-repo-hosting-services:github" + }, "children": { "controls": { "control": [ { "ID": "0", - "typeID": "Icon", + "typeID": "TextArea", "zOrder": "0", - "measuredW": "24", - "measuredH": "24", + "w": "131", + "h": "49", + "measuredW": "200", + "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } + "color": "16770457" } }, { "ID": "1", - "typeID": "Icon", + "typeID": "Label", "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", + "measuredW": "54", + "measuredH": "25", + "x": "39", + "y": "12", "properties": { - "color": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } + "text": "GitHub", + "size": "17" } - } - ] - } - } - }, - { - "ID": "2034", - "typeID": "__group__", - "zOrder": "162", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "1490", - "y": "2910", - "children": { - "controls": { - "control": [ + }, { - "ID": "0", + "ID": "2", "typeID": "Icon", - "zOrder": "0", + "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "0", + "x": "114", + "y": "13", "properties": { "color": "16777215", "icon": { @@ -8673,19 +7538,19 @@ } }, { - "ID": "1", + "ID": "3", "typeID": "Icon", - "zOrder": "1", + "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "0", + "x": "114", + "y": "13", "properties": { + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" - }, - "color": "10066329" + } } } ] @@ -8693,48 +7558,46 @@ } }, { - "ID": "2035", + "ID": "2522", "typeID": "__group__", - "zOrder": "163", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "1466", - "y": "2910", + "zOrder": "142", + "measuredW": "227", + "measuredH": "50", + "w": "227", + "h": "50", + "x": "1333", + "y": "1292", + "properties": { + "controlName": "105-repo-hosting-services" + }, "children": { "controls": { "control": [ { "ID": "0", - "typeID": "Icon", + "typeID": "TextArea", "zOrder": "0", - "measuredW": "24", - "measuredH": "24", + "w": "227", + "h": "50", + "measuredW": "200", + "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } + "color": "16776960" } }, { "ID": "1", - "typeID": "Icon", + "typeID": "Label", "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", + "measuredW": "172", + "measuredH": "25", + "x": "28", + "y": "12", "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" + "text": "Repo hosting services", + "size": "17" } } ] @@ -8742,17 +7605,17 @@ } }, { - "ID": "2036", + "ID": "2523", "typeID": "__group__", - "zOrder": "164", - "measuredW": "211", + "zOrder": "143", + "measuredW": "226", "measuredH": "50", - "w": "211", + "w": "226", "h": "50", - "x": "679", - "y": "2008", + "x": "1139", + "y": "1023", "properties": { - "controlName": "109-scaling-databases" + "controlName": "104-version-control-systems" }, "children": { "controls": { @@ -8761,7 +7624,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "211", + "w": "226", "h": "50", "measuredW": "200", "measuredH": "140", @@ -8775,13 +7638,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "144", + "measuredW": "186", "measuredH": "25", - "x": "34", + "x": "20", "y": "12", "properties": { - "size": "17", - "text": "Scaling Databases" + "text": "Version Control Systems", + "size": "17" } } ] @@ -8789,17 +7652,17 @@ } }, { - "ID": "2037", + "ID": "2524", "typeID": "__group__", - "zOrder": "165", - "measuredW": "153", - "measuredH": "40", - "w": "153", - "h": "40", - "x": "672", - "y": "1742", + "zOrder": "144", + "measuredW": "140", + "measuredH": "49", + "w": "140", + "h": "49", + "x": "1684", + "y": "1291", "properties": { - "controlName": "106-apis:graphql" + "controlName": "102-repo-hosting-services:bitbucket" }, "children": { "controls": { @@ -8808,11 +7671,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "146", - "h": "40", + "w": "131", + "h": "49", "measuredW": "200", "measuredH": "140", - "x": "7", + "x": "0", "y": "0", "properties": { "color": "16770457" @@ -8822,95 +7685,62 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "71", + "measuredW": "73", "measuredH": "25", - "x": "44", - "y": "7", + "x": "29", + "y": "12", "properties": { - "align": "center", - "size": "17", - "text": "GraphQL" + "color": "3355443", + "text": "Bitbucket", + "size": "17" } }, { - "ID": "4", + "ID": "3", "typeID": "Icon", "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "8", + "x": "116", + "y": "13", "properties": { "color": "16777215", "icon": { "ID": "circle", "size": "small" - } - } - }, - { - "ID": "5", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - }, - { - "ID": "2038", - "typeID": "__group__", - "zOrder": "166", - "measuredW": "144", - "measuredH": "40", - "w": "144", - "h": "40", - "x": "1673", - "y": "2653", - "properties": { - "controlName": "ext_link:roadmap.sh/kubernetes" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", + } + } + }, + { + "ID": "4", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "116", + "y": "13", "properties": { - "color": "4273622", - "borderColor": "4273622" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "90", - "measuredH": "25", - "x": "27", - "y": "7", + "ID": "5", + "typeID": "Icon", + "zOrder": "4", + "measuredW": "24", + "measuredH": "24", + "x": "116", + "y": "13", "properties": { - "size": "17", - "text": "Kubernetes", - "color": "16777215" + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -8918,17 +7748,17 @@ } }, { - "ID": "2039", + "ID": "2525", "typeID": "__group__", - "zOrder": "167", - "measuredW": "169", - "measuredH": "102", - "w": "169", - "h": "102", - "x": "1646", - "y": "3222", + "zOrder": "145", + "measuredW": "140", + "measuredH": "49", + "w": "140", + "h": "49", + "x": "1684", + "y": "1237", "properties": { - "controlName": "120-graph-databases" + "controlName": "101-repo-hosting-services:gitlab" }, "children": { "controls": { @@ -8937,115 +7767,76 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "169", - "h": "102", + "w": "131", + "h": "49", "measuredW": "200", "measuredH": "140", "x": "0", - "y": "0" + "y": "0", + "properties": { + "color": "16770457" + } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "85", + "w": "52", + "measuredW": "51", "measuredH": "25", - "x": "42", - "y": "64", + "x": "40", + "y": "12", "properties": { + "color": "3355443", "size": "17", - "text": "Graph DBs" + "text": "GitLab" } }, { - "ID": "2", - "typeID": "TextArea", + "ID": "3", + "typeID": "Icon", "zOrder": "2", - "w": "143", - "h": "43", - "measuredW": "200", - "measuredH": "140", - "x": "14", - "y": "15", + "measuredW": "24", + "measuredH": "24", + "x": "116", + "y": "13", "properties": { - "color": "16770457" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { - "ID": "3", - "typeID": "Label", + "ID": "4", + "typeID": "Icon", "zOrder": "3", - "measuredW": "47", - "measuredH": "25", - "x": "62", - "y": "24", + "measuredW": "24", + "measuredH": "24", + "x": "116", + "y": "13", "properties": { - "size": "17", - "text": "Neo4j" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { - "ID": "4", - "typeID": "__group__", + "ID": "5", + "typeID": "Icon", "zOrder": "4", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "5", - "y": "24", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "x": "116", + "y": "13", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" } } } @@ -9054,28 +7845,17 @@ } }, { - "ID": "2040", - "typeID": "TextArea", - "zOrder": "168", - "w": "271", - "h": "224", - "measuredW": "200", - "measuredH": "140", - "x": "1551", - "y": "1874" - }, - { - "ID": "2041", + "ID": "2526", "typeID": "__group__", - "zOrder": "169", - "measuredW": "86", - "measuredH": "42", - "w": "86", - "h": "42", - "x": "1567", - "y": "1938", + "zOrder": "146", + "measuredW": "212", + "measuredH": "40", + "w": "212", + "h": "40", + "x": "674", + "y": "2218", "properties": { - "controlName": "106-web-security-knowledge:cors" + "controlName": "100-more-about-databases:orms" }, "children": { "controls": { @@ -9084,11 +7864,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "86", - "h": "42", + "w": "205", + "h": "40", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "7", "y": "0", "properties": { "color": "16770457" @@ -9098,13 +7878,46 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "48", + "w": "49", + "measuredW": "49", "measuredH": "25", - "x": "25", - "y": "9", + "x": "85", + "y": "7", "properties": { - "text": "CORS", - "size": "17" + "size": "17", + "text": "ORMs" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -9112,17 +7925,17 @@ } }, { - "ID": "2042", + "ID": "2527", "typeID": "__group__", - "zOrder": "170", - "measuredW": "90", - "measuredH": "43", - "w": "90", - "h": "43", - "x": "1565", - "y": "1888", + "zOrder": "147", + "measuredW": "169", + "measuredH": "50", + "w": "169", + "h": "50", + "x": "984", + "y": "2008", "properties": { - "controlName": "105-web-security-knowledge:https" + "controlName": "113-ci-cd" }, "children": { "controls": { @@ -9131,27 +7944,28 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "90", - "h": "43", + "w": "169", + "h": "50", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "54", + "w": "62", + "measuredW": "59", "measuredH": "25", - "x": "21", - "y": "10", + "x": "54", + "y": "12", "properties": { - "text": "HTTPS", - "size": "17" + "size": "17", + "text": "CI / CD" } } ] @@ -9159,17 +7973,17 @@ } }, { - "ID": "2043", + "ID": "2528", "typeID": "__group__", - "zOrder": "171", - "measuredW": "87", - "measuredH": "44", - "w": "87", - "h": "44", - "x": "1568", - "y": "1988", + "zOrder": "148", + "measuredW": "271", + "measuredH": "40", + "w": "271", + "h": "40", + "x": "1561", + "y": "2208", "properties": { - "controlName": "105-web-security-knowledge:content-security-policy" + "controlName": "100-design-and-development-principles:gof-design-patterns" }, "children": { "controls": { @@ -9178,8 +7992,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "87", - "h": "44", + "w": "260", + "h": "40", "measuredW": "200", "measuredH": "140", "x": "0", @@ -9192,13 +8006,46 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "34", + "w": "168", + "measuredW": "164", "measuredH": "25", - "x": "27", - "y": "10", + "x": "46", + "y": "7", "properties": { "size": "17", - "text": "CSP" + "text": "GOF Design Patterns" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "247", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "247", + "y": "8", + "properties": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "10027263" } } ] @@ -9206,17 +8053,17 @@ } }, { - "ID": "2044", + "ID": "2529", "typeID": "__group__", - "zOrder": "172", - "measuredW": "147", - "measuredH": "43", - "w": "147", - "h": "43", - "x": "1660", - "y": "1888", + "zOrder": "149", + "measuredW": "271", + "measuredH": "40", + "w": "271", + "h": "40", + "x": "1561", + "y": "2252", "properties": { - "controlName": "108-web-security-knowledge:owasp" + "controlName": "101-design-and-development-principles:domain-driven-design" }, "children": { "controls": { @@ -9225,8 +8072,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "147", - "h": "43", + "w": "260", + "h": "40", "measuredW": "200", "measuredH": "140", "x": "0", @@ -9239,60 +8086,46 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "104", + "w": "175", + "measuredW": "172", "measuredH": "25", - "x": "22", - "y": "10", + "x": "42", + "y": "7", "properties": { "size": "17", - "text": "OWASP Risks" + "text": "Domain Driven Design" } - } - ] - } - } - }, - { - "ID": "2045", - "typeID": "__group__", - "zOrder": "173", - "measuredW": "149", - "measuredH": "43", - "w": "149", - "h": "43", - "x": "1659", - "y": "1938", - "properties": { - "controlName": "107-web-security-knowledge:ssl-tls" - }, - "children": { - "controls": { - "control": [ + }, { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "149", - "h": "43", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "247", + "y": "8", "properties": { - "color": "16770457" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "69", - "measuredH": "25", - "x": "40", - "y": "9", + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "247", + "y": "8", "properties": { - "text": "SSL/TLS", - "size": "17" + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "10027263" } } ] @@ -9300,17 +8133,17 @@ } }, { - "ID": "2048", + "ID": "2530", "typeID": "__group__", - "zOrder": "174", + "zOrder": "150", "measuredW": "271", "measuredH": "40", "w": "271", "h": "40", "x": "1561", - "y": "2340", + "y": "2296", "properties": { - "controlName": "103-design-and-development-principles:cqrs" + "controlName": "102-design-and-development-principles:test-driven-development" }, "children": { "controls": { @@ -9333,13 +8166,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "48", + "w": "196", + "measuredW": "194", "measuredH": "25", - "x": "106", + "x": "32", "y": "7", "properties": { "size": "17", - "text": "CQRS" + "text": "Test Driven Development" } }, { @@ -9379,17 +8213,17 @@ } }, { - "ID": "2049", + "ID": "2531", "typeID": "__group__", - "zOrder": "175", - "measuredW": "270", - "measuredH": "40", - "w": "270", - "h": "40", - "x": "1561", - "y": "2384", + "zOrder": "151", + "measuredW": "210", + "measuredH": "37", + "w": "210", + "h": "37", + "x": "1005", + "y": "2668", "properties": { - "controlName": "104-design-and-development-principles:event-sourcing" + "controlName": "104-architectural-patterns:serverless" }, "children": { "controls": { @@ -9398,8 +8232,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "260", - "h": "40", + "w": "202", + "h": "37", "measuredW": "200", "measuredH": "140", "x": "0", @@ -9412,13 +8246,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "116", + "w": "87", + "measuredW": "82", "measuredH": "25", - "x": "72", - "y": "7", + "x": "57", + "y": "6", "properties": { "size": "17", - "text": "Event Sourcing" + "text": "Serverless" } }, { @@ -9427,7 +8262,7 @@ "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "246", + "x": "186", "y": "7", "properties": { "color": "16777215", @@ -9443,14 +8278,14 @@ "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "246", + "x": "186", "y": "7", "properties": { + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" - }, - "color": "10027263" + } } } ] @@ -9458,17 +8293,17 @@ } }, { - "ID": "2050", + "ID": "2532", "typeID": "__group__", - "zOrder": "176", - "measuredW": "211", - "measuredH": "37", - "w": "211", - "h": "37", - "x": "1006", - "y": "2708", + "zOrder": "152", + "measuredW": "155", + "measuredH": "40", + "w": "155", + "h": "40", + "x": "670", + "y": "1697", "properties": { - "controlName": "105-architectural-patterns:service-mesh" + "controlName": "103-apis:grpc" }, "children": { "controls": { @@ -9477,11 +8312,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "202", - "h": "37", + "w": "145", + "h": "40", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "10", "y": "0", "properties": { "color": "16770457" @@ -9491,23 +8326,25 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "105", + "w": "90", + "measuredW": "45", "measuredH": "25", - "x": "48", - "y": "6", + "x": "38", + "y": "7", "properties": { + "align": "center", "size": "17", - "text": "Service Mesh" + "text": "gRPC" } }, { - "ID": "2", + "ID": "4", "typeID": "Icon", "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "187", - "y": "7", + "x": "0", + "y": "8", "properties": { "color": "16777215", "icon": { @@ -9517,15 +8354,15 @@ } }, { - "ID": "3", + "ID": "5", "typeID": "Icon", "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "187", - "y": "7", + "x": "0", + "y": "8", "properties": { - "color": "10027263", + "color": "10066329", "icon": { "ID": "check-circle", "size": "small" @@ -9537,17 +8374,17 @@ } }, { - "ID": "2051", + "ID": "2533", "typeID": "__group__", - "zOrder": "177", - "measuredW": "211", - "measuredH": "37", - "w": "211", - "h": "37", - "x": "1006", - "y": "2748", + "zOrder": "153", + "measuredW": "323", + "measuredH": "50", + "w": "323", + "h": "50", + "x": "1005", + "y": "2264", "properties": { - "controlName": "106-architectural-patterns:twelve-factor-apps" + "controlName": "ext_link:roadmap.sh/software-design-architecture" }, "children": { "controls": { @@ -9556,58 +8393,241 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "202", - "h": "37", + "w": "323", + "h": "50", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "4273622", + "borderColor": "4273622", + "textColor": "16777215" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "149", + "measuredW": "240", "measuredH": "25", - "x": "26", - "y": "6", + "x": "42", + "y": "12", "properties": { + "text": "Software Design & Architecture", "size": "17", - "text": "Twelve Factor Apps" + "color": "16777215" + } + } + ] + } + } + }, + { + "ID": "2534", + "typeID": "__group__", + "zOrder": "154", + "measuredW": "174", + "measuredH": "154", + "w": "174", + "h": "154", + "x": "1475", + "y": "2923", + "properties": { + "controlName": "100-nosql-databases:document-databases" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "174", + "h": "154", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + }, + { + "ID": "1", + "typeID": "TextArea", + "zOrder": "1", + "w": "137", + "h": "43", + "measuredW": "200", + "measuredH": "140", + "x": "21", + "y": "15", + "properties": { + "color": "16770457" } }, { "ID": "2", - "typeID": "Icon", + "typeID": "Label", "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "187", - "y": "7", + "measuredW": "78", + "measuredH": "25", + "x": "51", + "y": "24", "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } + "size": "17", + "text": "MongoDB" } }, { "ID": "3", - "typeID": "Icon", + "typeID": "TextArea", "zOrder": "3", + "w": "137", + "h": "43", + "measuredW": "200", + "measuredH": "140", + "x": "21", + "y": "63", + "properties": { + "color": "16770457" + } + }, + { + "ID": "4", + "typeID": "Label", + "zOrder": "4", + "measuredW": "74", + "measuredH": "25", + "x": "53", + "y": "72", + "properties": { + "size": "17", + "text": "CouchDB" + } + }, + { + "ID": "5", + "typeID": "Label", + "zOrder": "5", + "measuredW": "117", + "measuredH": "25", + "x": "31", + "y": "114", + "properties": { + "size": "17", + "text": "Document DBs" + } + }, + { + "ID": "6", + "typeID": "__group__", + "zOrder": "6", "measuredW": "24", "measuredH": "24", - "x": "187", - "y": "7", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" + "w": "24", + "h": "24", + "x": "12", + "y": "22", + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Icon", + "zOrder": "0", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "1", + "typeID": "Icon", + "zOrder": "1", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } + } + }, + { + "ID": "7", + "typeID": "__group__", + "zOrder": "7", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "11", + "y": "71", + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Icon", + "zOrder": "0", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "1", + "typeID": "Icon", + "zOrder": "1", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] } } } @@ -9616,17 +8636,17 @@ } }, { - "ID": "2052", + "ID": "2535", "typeID": "__group__", - "zOrder": "178", - "measuredW": "198", - "measuredH": "159", - "w": "198", - "h": "159", - "x": "1424", - "y": "2674", + "zOrder": "155", + "measuredW": "168", + "measuredH": "154", + "w": "168", + "h": "154", + "x": "1646", + "y": "2923", "properties": { - "controlName": "116-search-engines" + "controlName": "102-nosql-databases:timeseries-databases" }, "children": { "controls": { @@ -9635,8 +8655,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "198", - "h": "159", + "w": "168", + "h": "154", "measuredW": "200", "measuredH": "140", "x": "0", @@ -9644,95 +8664,182 @@ }, { "ID": "1", - "typeID": "Label", + "typeID": "TextArea", "zOrder": "1", - "w": "126", - "measuredW": "122", + "w": "137", + "h": "43", + "measuredW": "200", + "measuredH": "140", + "x": "17", + "y": "14", + "properties": { + "color": "16770457" + } + }, + { + "ID": "2", + "typeID": "Label", + "zOrder": "2", + "measuredW": "65", "measuredH": "25", - "x": "36", - "y": "116", + "x": "53", + "y": "23", "properties": { "size": "17", - "text": "Search Engines" + "text": "InfluxDB" } - } - ] - } - } - }, - { - "ID": "2053", - "typeID": "__group__", - "zOrder": "179", - "measuredW": "167", - "measuredH": "40", - "w": "167", - "h": "40", - "x": "1439", - "y": "2691", - "properties": { - "controlName": "100-search-engines:elasticsearch" - }, - "children": { - "controls": { - "control": [ + }, { - "ID": "0", + "ID": "3", "typeID": "TextArea", - "zOrder": "0", - "w": "160", - "h": "40", + "zOrder": "3", + "w": "137", + "h": "43", "measuredW": "200", "measuredH": "140", - "x": "7", - "y": "0", + "x": "17", + "y": "62", "properties": { "color": "16770457" } }, { - "ID": "1", + "ID": "4", "typeID": "Label", - "zOrder": "1", - "w": "106", - "measuredW": "104", + "zOrder": "4", + "measuredW": "81", "measuredH": "25", - "x": "39", - "y": "8", + "x": "45", + "y": "71", "properties": { "size": "17", - "text": "Elasticsearch" + "text": "TimeScale" } }, { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", + "ID": "5", + "typeID": "Label", + "zOrder": "5", + "measuredW": "91", + "measuredH": "25", + "x": "38", + "y": "113", + "properties": { + "size": "17", + "text": "Time Series" + } + }, + { + "ID": "6", + "typeID": "__group__", + "zOrder": "6", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" + "w": "24", + "h": "24", + "x": "137", + "y": "21", + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Icon", + "zOrder": "0", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "1", + "typeID": "Icon", + "zOrder": "1", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] } } }, { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", + "ID": "7", + "typeID": "__group__", + "zOrder": "7", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" + "w": "24", + "h": "24", + "x": "141", + "y": "70", + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Icon", + "zOrder": "0", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "1", + "typeID": "Icon", + "zOrder": "1", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] } } } @@ -9741,17 +8848,17 @@ } }, { - "ID": "2054", + "ID": "2536", "typeID": "__group__", - "zOrder": "180", - "measuredW": "167", - "measuredH": "40", - "w": "167", - "h": "40", - "x": "1439", - "y": "2737", + "zOrder": "156", + "measuredW": "174", + "measuredH": "154", + "w": "174", + "h": "154", + "x": "1475", + "y": "3072", "properties": { - "controlName": "101-search-engines:solr" + "controlName": "103-nosql-databases:realtime-databases" }, "children": { "controls": { @@ -9760,138 +8867,191 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "160", - "h": "40", + "w": "174", + "h": "154", "measuredW": "200", "measuredH": "140", - "x": "7", - "y": "0", - "properties": { - "color": "16770457" - } + "x": "0", + "y": "0" }, { "ID": "1", - "typeID": "Label", + "typeID": "TextArea", "zOrder": "1", - "w": "36", - "measuredW": "30", - "measuredH": "25", - "x": "69", - "y": "8", + "w": "137", + "h": "43", + "measuredW": "200", + "measuredH": "140", + "x": "21", + "y": "14", "properties": { - "size": "17", - "text": "Solr" + "color": "16770457" } }, { "ID": "2", - "typeID": "Icon", + "typeID": "Label", "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", + "measuredW": "68", + "measuredH": "25", + "x": "56", + "y": "23", "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } + "size": "17", + "text": "Firebase" } }, { "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - }, - { - "ID": "2055", - "typeID": "__group__", - "zOrder": "181", - "measuredW": "191", - "measuredH": "40", - "w": "191", - "h": "40", - "x": "1275", - "y": "2540", - "properties": { - "controlName": "100-message-brokers:rabbitmq" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", "typeID": "TextArea", - "zOrder": "0", - "w": "182", - "h": "40", + "zOrder": "3", + "w": "137", + "h": "43", "measuredW": "200", "measuredH": "140", - "x": "9", - "y": "0", + "x": "21", + "y": "62", "properties": { "color": "16770457" } }, { - "ID": "1", + "ID": "4", "typeID": "Label", - "zOrder": "1", - "measuredW": "78", + "zOrder": "4", + "measuredW": "83", "measuredH": "25", - "x": "61", - "y": "7", + "x": "48", + "y": "71", "properties": { "size": "17", - "text": "RabbitMQ" + "text": "RethinkDB" } }, { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", + "ID": "5", + "typeID": "Label", + "zOrder": "5", + "measuredW": "69", + "measuredH": "25", + "x": "55", + "y": "113", + "properties": { + "size": "17", + "text": "Realtime" + } + }, + { + "ID": "6", + "typeID": "__group__", + "zOrder": "6", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" + "w": "24", + "h": "24", + "x": "9", + "y": "23", + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Icon", + "zOrder": "0", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "1", + "typeID": "Icon", + "zOrder": "1", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] } } }, { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", + "ID": "7", + "typeID": "__group__", + "zOrder": "7", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" + "w": "24", + "h": "24", + "x": "10", + "y": "71", + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Icon", + "zOrder": "0", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "1", + "typeID": "Icon", + "zOrder": "1", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] } } } @@ -9900,17 +9060,17 @@ } }, { - "ID": "2056", + "ID": "2537", "typeID": "__group__", - "zOrder": "182", - "measuredW": "192", - "measuredH": "40", - "w": "192", - "h": "40", - "x": "1275", - "y": "2584", + "zOrder": "157", + "measuredW": "168", + "measuredH": "154", + "w": "168", + "h": "154", + "x": "1646", + "y": "3072", "properties": { - "controlName": "101-message-brokers:kafka" + "controlName": "101-nosql-databases:column-databases" }, "children": { "controls": { @@ -9919,153 +9079,192 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "183", - "h": "40", + "w": "168", + "h": "154", "measuredW": "200", "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } + "x": "0", + "y": "0" }, { "ID": "1", - "typeID": "Label", + "typeID": "TextArea", "zOrder": "1", - "measuredW": "44", - "measuredH": "25", - "x": "79", - "y": "7", + "w": "137", + "h": "43", + "measuredW": "200", + "measuredH": "140", + "x": "15", + "y": "14", "properties": { - "size": "17", - "text": "Kafka" + "color": "16770457" } }, { "ID": "2", - "typeID": "Icon", + "typeID": "Label", "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "7", + "measuredW": "83", + "measuredH": "25", + "x": "42", + "y": "23", "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } + "size": "17", + "text": "Cassandra" } }, { "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "7", - "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } - } - }, - { - "ID": "2057", - "typeID": "__group__", - "zOrder": "183", - "measuredW": "201", - "measuredH": "50", - "w": "201", - "h": "50", - "x": "674", - "y": "2973", - "properties": { - "controlName": "122-server-sent-events" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", "typeID": "TextArea", - "zOrder": "0", - "w": "201", - "h": "50", + "zOrder": "3", + "w": "137", + "h": "43", "measuredW": "200", "measuredH": "140", - "x": "0", - "y": "0", + "x": "15", + "y": "62", "properties": { "color": "16770457" } }, { - "ID": "1", + "ID": "4", "typeID": "Label", - "zOrder": "1", - "measuredW": "148", + "zOrder": "4", + "measuredW": "53", "measuredH": "25", - "x": "27", - "y": "12", + "x": "57", + "y": "71", "properties": { "size": "17", - "text": "Server Sent Events" - } - } - ] - } - } - }, - { - "ID": "2058", - "typeID": "__group__", - "zOrder": "184", - "measuredW": "213", - "measuredH": "50", - "w": "213", - "h": "50", - "x": "1188", - "y": "3224", - "properties": { - "controlName": "123-scalability" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "213", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" + "text": "HBase" } }, { - "ID": "1", + "ID": "5", "typeID": "Label", - "zOrder": "1", - "measuredW": "134", + "zOrder": "5", + "measuredW": "96", "measuredH": "25", - "x": "40", - "y": "13", + "x": "36", + "y": "113", "properties": { "size": "17", - "text": "Building for Scale" + "text": "Column DBs" + } + }, + { + "ID": "6", + "typeID": "__group__", + "zOrder": "6", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "137", + "y": "23", + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Icon", + "zOrder": "0", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "1", + "typeID": "Icon", + "zOrder": "1", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } + } + }, + { + "ID": "7", + "typeID": "__group__", + "zOrder": "7", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "137", + "y": "71", + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Icon", + "zOrder": "0", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "1", + "typeID": "Icon", + "zOrder": "1", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } } } ] @@ -10073,17 +9272,17 @@ } }, { - "ID": "2059", + "ID": "2538", "typeID": "__group__", - "zOrder": "185", - "measuredW": "232", - "measuredH": "282", - "w": "232", - "h": "282", - "x": "880", - "y": "3212", + "zOrder": "158", + "measuredW": "174", + "measuredH": "154", + "w": "174", + "h": "154", + "x": "1475", + "y": "3222", "properties": { - "controlName": "100-scalability:mitigation-strategies" + "controlName": "104-nosql-databases:key-value-databases" }, "children": { "controls": { @@ -10092,150 +9291,192 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "222", - "h": "274", + "w": "174", + "h": "154", "measuredW": "200", "measuredH": "140", "x": "0", - "y": "8" + "y": "0" }, { "ID": "1", - "typeID": "Label", + "typeID": "TextArea", "zOrder": "1", - "measuredW": "159", - "measuredH": "25", - "x": "31", - "y": "246", + "w": "143", + "h": "43", + "measuredW": "200", + "measuredH": "140", + "x": "18", + "y": "14", "properties": { - "size": "17", - "text": "Mitigation Strategies" + "color": "16770457" } }, { "ID": "2", - "typeID": "Icon", + "typeID": "Label", "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "208", - "y": "0", + "measuredW": "45", + "measuredH": "25", + "x": "64", + "y": "23", "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } + "size": "17", + "text": "Redis" } }, { "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "208", - "y": "0", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - }, - { - "ID": "2060", - "typeID": "__group__", - "zOrder": "186", - "measuredW": "197", - "measuredH": "40", - "w": "197", - "h": "40", - "x": "892", - "y": "3231", - "properties": { - "controlName": "100-scalability:mitigation-strategies:graceful-degradation" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", "typeID": "TextArea", - "zOrder": "0", - "w": "197", - "h": "40", + "zOrder": "3", + "w": "143", + "h": "43", "measuredW": "200", "measuredH": "140", - "x": "0", - "y": "0", + "x": "18", + "y": "61", "properties": { "color": "16770457" } }, { - "ID": "1", + "ID": "4", "typeID": "Label", - "zOrder": "1", - "measuredW": "166", + "zOrder": "4", + "measuredW": "88", "measuredH": "25", - "x": "17", - "y": "7", + "x": "43", + "y": "70", "properties": { "size": "17", - "text": "Graceful Degradation" - } - } - ] - } - } - }, - { - "ID": "2061", - "typeID": "__group__", - "zOrder": "187", - "measuredW": "197", - "measuredH": "40", - "w": "197", - "h": "40", - "x": "892", - "y": "3275", - "properties": { - "controlName": "101-scalability:mitigation-strategies:throttling" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "197", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" + "text": "DynamoDB" } }, { - "ID": "1", + "ID": "5", "typeID": "Label", - "zOrder": "1", - "measuredW": "73", + "zOrder": "5", + "measuredW": "76", "measuredH": "25", - "x": "62", - "y": "7", + "x": "52", + "y": "114", "properties": { "size": "17", - "text": "Throttling" + "text": "Key-Value" + } + }, + { + "ID": "6", + "typeID": "__group__", + "zOrder": "6", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "11", + "y": "21", + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Icon", + "zOrder": "0", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "1", + "typeID": "Icon", + "zOrder": "1", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } + } + }, + { + "ID": "7", + "typeID": "__group__", + "zOrder": "7", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "9", + "y": "70", + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Icon", + "zOrder": "0", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "1", + "typeID": "Icon", + "zOrder": "1", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } } } ] @@ -10243,93 +9484,48 @@ } }, { - "ID": "2062", + "ID": "2539", "typeID": "__group__", - "zOrder": "188", - "measuredW": "199", - "measuredH": "40", - "w": "199", - "h": "40", - "x": "892", - "y": "3319", - "properties": { - "controlName": "102-scalability:mitigation-strategies:backpressure" - }, + "zOrder": "159", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "1802", + "y": "3036", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "199", - "h": "40", - "measuredW": "200", - "measuredH": "140", + "measuredW": "24", + "measuredH": "24", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { "ID": "1", - "typeID": "Label", + "typeID": "Icon", "zOrder": "1", - "measuredW": "107", - "measuredH": "25", - "x": "46", - "y": "7", - "properties": { - "size": "17", - "text": "Backpressure" - } - } - ] - } - } - }, - { - "ID": "2063", - "typeID": "__group__", - "zOrder": "189", - "measuredW": "199", - "measuredH": "40", - "w": "199", - "h": "40", - "x": "892", - "y": "3363", - "properties": { - "controlName": "103-scalability:mitigation-strategies:loadshifting" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "199", - "h": "40", - "measuredW": "200", - "measuredH": "140", + "measuredW": "24", + "measuredH": "24", "x": "0", "y": "0", "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "94", - "measuredH": "25", - "x": "53", - "y": "7", - "properties": { - "size": "17", - "text": "Loadshifting" + "color": "10066329", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -10337,46 +9533,48 @@ } }, { - "ID": "2064", + "ID": "2540", "typeID": "__group__", - "zOrder": "190", - "measuredW": "197", - "measuredH": "40", - "w": "197", - "h": "40", - "x": "892", - "y": "3407", - "properties": { - "controlName": "104-scalability:mitigation-strategies:circuit-breaker" - }, + "zOrder": "160", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "1802", + "y": "3185", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "197", - "h": "40", - "measuredW": "200", - "measuredH": "140", + "measuredW": "24", + "measuredH": "24", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { "ID": "1", - "typeID": "Label", + "typeID": "Icon", "zOrder": "1", - "measuredW": "116", - "measuredH": "25", - "x": "41", - "y": "7", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", "properties": { - "size": "17", - "text": "Circuit Breaker" + "color": "10066329", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -10384,56 +9582,26 @@ } }, { - "ID": "2065", + "ID": "2541", "typeID": "__group__", - "zOrder": "191", - "measuredW": "215", - "measuredH": "40", - "w": "215", - "h": "40", - "x": "672", - "y": "2438", - "properties": { - "controlName": "105-more-about-databases:failure-modes" - }, + "zOrder": "161", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "1466", + "y": "3185", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "206", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "110", - "measuredH": "25", - "x": "57", - "y": "7", - "properties": { - "size": "17", - "text": "Failure Modes" - } - }, - { - "ID": "2", "typeID": "Icon", - "zOrder": "2", + "zOrder": "0", "measuredW": "24", "measuredH": "24", "x": "0", - "y": "8", + "y": "0", "properties": { "color": "16777215", "icon": { @@ -10443,15 +9611,15 @@ } }, { - "ID": "3", + "ID": "1", "typeID": "Icon", - "zOrder": "3", + "zOrder": "1", "measuredW": "24", "measuredH": "24", "x": "0", - "y": "8", + "y": "0", "properties": { - "color": "10027263", + "color": "10066329", "icon": { "ID": "check-circle", "size": "small" @@ -10463,56 +9631,26 @@ } }, { - "ID": "2066", + "ID": "2542", "typeID": "__group__", - "zOrder": "192", - "measuredW": "215", - "measuredH": "40", - "w": "215", - "h": "40", - "x": "672", - "y": "2482", - "properties": { - "controlName": "106-more-about-databases:profiling-performance" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "206", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "166", - "measuredH": "25", - "x": "29", - "y": "7", - "properties": { - "size": "17", - "text": "Profiling Performance" - } - }, + "zOrder": "162", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "1490", + "y": "2910", + "children": { + "controls": { + "control": [ { - "ID": "2", + "ID": "0", "typeID": "Icon", - "zOrder": "2", + "zOrder": "0", "measuredW": "24", "measuredH": "24", "x": "0", - "y": "8", + "y": "0", "properties": { "color": "16777215", "icon": { @@ -10522,19 +9660,19 @@ } }, { - "ID": "3", + "ID": "1", "typeID": "Icon", - "zOrder": "3", + "zOrder": "1", "measuredW": "24", "measuredH": "24", "x": "0", - "y": "8", + "y": "0", "properties": { - "color": "10027263", "icon": { "ID": "check-circle", "size": "small" - } + }, + "color": "10066329" } } ] @@ -10542,124 +9680,48 @@ } }, { - "ID": "2067", + "ID": "2543", "typeID": "__group__", - "zOrder": "3", - "measuredW": "211", - "measuredH": "196", - "w": "211", - "h": "196", - "x": "671", - "y": "3298", - "properties": { - "controlName": "101-scalability:instrumentation-monitoring-telemetry" - }, + "zOrder": "163", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "1466", + "y": "2910", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "211", - "h": "196", - "measuredW": "200", - "measuredH": "140", + "measuredW": "24", + "measuredH": "24", "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "151", - "measuredH": "25", - "x": "29", - "y": "156", - "properties": { - "size": "17", - "text": "Difference + Usage" - } - }, - { - "ID": "4", - "typeID": "TextArea", - "zOrder": "2", - "w": "187", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "15", - "properties": { - "color": "16770457" - } - }, - { - "ID": "5", - "typeID": "Label", - "zOrder": "3", - "measuredW": "121", - "measuredH": "25", - "x": "44", - "y": "22", - "properties": { - "size": "17", - "text": "Instrumentation" - } - }, - { - "ID": "6", - "typeID": "TextArea", - "zOrder": "4", - "w": "187", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "60", - "properties": { - "color": "16770457" - } - }, - { - "ID": "7", - "typeID": "Label", - "zOrder": "5", - "measuredW": "83", - "measuredH": "25", - "x": "63", - "y": "67", - "properties": { - "size": "17", - "text": "Monitoring" - } - }, - { - "ID": "8", - "typeID": "TextArea", - "zOrder": "6", - "w": "187", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "105", + "y": "0", "properties": { - "color": "16770457" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { - "ID": "9", - "typeID": "Label", - "zOrder": "7", - "measuredW": "76", - "measuredH": "25", - "x": "67", - "y": "112", + "ID": "1", + "typeID": "Icon", + "zOrder": "1", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", "properties": { - "size": "17", - "text": "Telemetry" + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "10027263" } } ] @@ -10667,41 +9729,17 @@ } }, { - "ID": "2068", - "typeID": "TextArea", - "zOrder": "193", - "w": "337", - "h": "124", - "measuredW": "200", - "measuredH": "140", - "x": "1133", - "y": "3683" - }, - { - "ID": "2069", - "typeID": "Label", - "zOrder": "194", - "measuredW": "285", - "measuredH": "25", - "x": "1154", - "y": "3703", - "properties": { - "size": "17", - "text": "Have a look at the DevOps Roadmap" - } - }, - { - "ID": "2070", + "ID": "2544", "typeID": "__group__", - "zOrder": "195", - "measuredW": "292", - "measuredH": "44", - "w": "292", - "h": "44", - "x": "1154", - "y": "3738", + "zOrder": "164", + "measuredW": "211", + "measuredH": "50", + "w": "211", + "h": "50", + "x": "679", + "y": "2008", "properties": { - "controlName": "ext_link:roadmap.sh/devops" + "controlName": "109-scaling-databases" }, "children": { "controls": { @@ -10710,27 +9748,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "292", - "h": "44", + "w": "211", + "h": "50", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "141", + "measuredW": "144", "measuredH": "25", - "x": "75", - "y": "9", + "x": "34", + "y": "12", "properties": { "size": "17", - "text": "DevOps Roadmap" + "text": "Scaling Databases" } } ] @@ -10738,17 +9776,17 @@ } }, { - "ID": "2071", + "ID": "2545", "typeID": "__group__", - "zOrder": "196", - "measuredW": "148", - "measuredH": "44", - "w": "148", - "h": "44", - "x": "1661", - "y": "1987", + "zOrder": "165", + "measuredW": "153", + "measuredH": "40", + "w": "153", + "h": "40", + "x": "672", + "y": "1742", "properties": { - "controlName": "106-web-security-knowledge:server-security" + "controlName": "106-apis:graphql" }, "children": { "controls": { @@ -10757,11 +9795,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "148", - "h": "44", + "w": "146", + "h": "40", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "7", "y": "0", "properties": { "color": "16770457" @@ -10771,13 +9809,46 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "117", + "measuredW": "71", "measuredH": "25", - "x": "15", - "y": "10", + "x": "44", + "y": "7", + "properties": { + "align": "center", + "size": "17", + "text": "GraphQL" + } + }, + { + "ID": "4", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "5", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", "properties": { - "size": "17", - "text": "Server Security" + "color": "10066329", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -10785,29 +9856,29 @@ } }, { - "ID": "2072", + "ID": "2546", "typeID": "__group__", - "zOrder": "197", - "measuredW": "242", - "measuredH": "47", - "w": "242", - "h": "47", - "x": "1568", - "y": "2039", + "zOrder": "166", + "measuredW": "144", + "measuredH": "40", + "w": "144", + "h": "40", + "x": "1673", + "y": "2653", "properties": { - "controlName": "ext_link:roadmap.sh/best-practices/api-security" + "controlName": "ext_link:roadmap.sh/kubernetes" }, "children": { "controls": { "control": [ { "ID": "0", - "typeID": "Canvas", + "typeID": "TextArea", "zOrder": "0", - "w": "242", - "h": "47", - "measuredW": "100", - "measuredH": "70", + "w": "144", + "h": "40", + "measuredW": "200", + "measuredH": "140", "x": "0", "y": "0", "properties": { @@ -10819,580 +9890,690 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "208", - "measuredH": "25", - "x": "17", - "y": "11", - "properties": { - "size": "17", - "color": "16777215", - "text": "API Security Best Practices" - } - } - ] - } - } - }, - { - "ID": "2085", - "typeID": "Arrow", - "zOrder": "0", - "w": "1", - "h": "101", - "measuredW": "150", - "measuredH": "100", - "x": "1254", - "y": "846", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.08262228161265739, - "y": -0.00765522788196904 - }, - "p1": { - "x": 0.4673783006670675, - "y": -0.003606051439574666 - }, - "p2": { - "x": 0.08262228161265739, - "y": 100.83103671353786 - } - } - }, - { - "ID": "2086", - "typeID": "Arrow", - "zOrder": "54", - "w": "173", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "1344", - "y": "965", - "properties": { - "color": "2848996", - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 172.29875220380154, - "y": 88.53446090344232 - }, - "p1": { - "x": 0.5173830120100056, - "y": -0.10475991954824762 - }, - "p2": { - "x": -0.4820084590012357, - "y": -0.42298043210348624 - } - } - }, - { - "ID": "2087", - "typeID": "Arrow", - "zOrder": "53", - "w": "189", - "h": "129", - "measuredW": "150", - "measuredH": "100", - "x": "1329", - "y": "971", - "properties": { - "color": "2848996", - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 189.29875220380154, - "y": 129.53446090344232 - }, - "p1": { - "x": 0.5173830120100052, - "y": -0.10475991954824745 - }, - "p2": { - "x": -0.0566612271975373, - "y": 0.20186173525848972 - } - } - }, - { - "ID": "2088", - "typeID": "Arrow", - "zOrder": "52", - "w": "257", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "909", - "y": "952", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.2658611453201729, - "y": 0.452028801972574 - }, - "p1": { - "x": 0.47345427259831346, - "y": -0.00011162392477927633 - }, - "p2": { - "x": 257.72987682295434, - "y": 0.452028801972574 - } - } - }, - { - "ID": "2089", - "typeID": "Arrow", - "zOrder": "51", - "w": "1", - "h": "99", - "measuredW": "150", - "measuredH": "100", - "x": "909", - "y": "954", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.08262228161265739, - "y": -0.00765522788196904 - }, - "p1": { - "x": 0.46737830066706765, - "y": -0.0036060514395746665 - }, - "p2": { - "x": 0.08262228161265739, - "y": 99.34990461054645 - } - } - }, - { - "ID": "2090", - "typeID": "Arrow", - "zOrder": "50", - "w": "140", - "h": "251", - "measuredW": "150", - "measuredH": "100", - "x": "1202", - "y": "1058", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 1.733821809662004, - "y": -0.012705872300330157 - }, - "p1": { - "x": 0.6281690675432272, - "y": -0.24735053069351437 - }, - "p2": { - "x": 139.53053889079024, - "y": 250.4063280539806 - } - } - }, - { - "ID": "2091", - "typeID": "Arrow", - "zOrder": "49", - "w": "107", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "846", - "y": "1321", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.4734542725983134, - "y": -0.00011162392477927755 - }, - "p2": { - "x": 107.31478788338131, - "y": -0.5 - }, - "stroke": "dotted" + "measuredW": "90", + "measuredH": "25", + "x": "27", + "y": "7", + "properties": { + "size": "17", + "text": "Kubernetes", + "color": "16777215" + } + } + ] + } } }, { - "ID": "2092", - "typeID": "Arrow", - "zOrder": "48", - "w": "97", - "h": "40", - "measuredW": "150", - "measuredH": "100", - "x": "859", - "y": "1335", + "ID": "2547", + "typeID": "__group__", + "zOrder": "167", + "measuredW": "169", + "measuredH": "102", + "w": "169", + "h": "102", + "x": "1646", + "y": "3222", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.24202910684186918, - "y": 39.70493912676557 - }, - "p1": { - "x": 0.41485764854624113, - "y": 0.109423049141837 - }, - "p2": { - "x": 96.96472475032601, - "y": -0.044113877406061874 + "controlName": "120-graph-databases" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "169", + "h": "102", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "85", + "measuredH": "25", + "x": "42", + "y": "64", + "properties": { + "size": "17", + "text": "Graph DBs" + } + }, + { + "ID": "2", + "typeID": "TextArea", + "zOrder": "2", + "w": "143", + "h": "43", + "measuredW": "200", + "measuredH": "140", + "x": "14", + "y": "15", + "properties": { + "color": "16770457" + } + }, + { + "ID": "3", + "typeID": "Label", + "zOrder": "3", + "measuredW": "47", + "measuredH": "25", + "x": "62", + "y": "24", + "properties": { + "size": "17", + "text": "Neo4j" + } + }, + { + "ID": "4", + "typeID": "__group__", + "zOrder": "4", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "5", + "y": "24", + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Icon", + "zOrder": "0", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "1", + "typeID": "Icon", + "zOrder": "1", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } + } + } + ] } } }, { - "ID": "2093", - "typeID": "Arrow", - "zOrder": "47", - "w": "115", - "h": "81", - "measuredW": "150", - "measuredH": "100", - "x": "863", - "y": "1344", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.216934407259032, - "y": 81.05373959871622 - }, - "p1": { - "x": 0.44045282407886405, - "y": 0.13711042381893543 - }, - "p2": { - "x": 115.48918811935664, - "y": 0.2306651569006135 - } - } + "ID": "2548", + "typeID": "TextArea", + "zOrder": "168", + "w": "271", + "h": "224", + "measuredW": "200", + "measuredH": "140", + "x": "1551", + "y": "1874" }, { - "ID": "2094", - "typeID": "Arrow", - "zOrder": "46", - "w": "151", - "h": "125", - "measuredW": "150", - "measuredH": "100", - "x": "862", - "y": "1340", + "ID": "2549", + "typeID": "__group__", + "zOrder": "169", + "measuredW": "86", + "measuredH": "42", + "w": "86", + "h": "42", + "x": "1567", + "y": "1938", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.1080340262133177, - "y": 124.80279260288762 - }, - "p1": { - "x": 0.4785842736801959, - "y": 0.11879950919024476 - }, - "p2": { - "x": 150.93836738963864, - "y": 0.25575985648356436 + "controlName": "106-web-security-knowledge:cors" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "86", + "h": "42", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "48", + "measuredH": "25", + "x": "25", + "y": "9", + "properties": { + "text": "CORS", + "size": "17" + } + } + ] } } }, { - "ID": "2095", - "typeID": "Arrow", - "zOrder": "45", - "w": "166", - "h": "168", - "measuredW": "150", - "measuredH": "100", - "x": "859", - "y": "1342", + "ID": "2550", + "typeID": "__group__", + "zOrder": "170", + "measuredW": "90", + "measuredH": "43", + "w": "90", + "h": "43", + "x": "1565", + "y": "1888", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.24202910684186918, - "y": 167.85171934094888 - }, - "p1": { - "x": 0.5187506526383378, - "y": 0.10092669429158865 - }, - "p2": { - "x": 165.86308329089002, - "y": -0.4192717100440859 + "controlName": "105-web-security-knowledge:https" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "90", + "h": "43", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "54", + "measuredH": "25", + "x": "21", + "y": "10", + "properties": { + "text": "HTTPS", + "size": "17" + } + } + ] } } }, { - "ID": "2097", - "typeID": "Arrow", - "zOrder": "44", - "w": "236", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1135", - "y": "1323", + "ID": "2551", + "typeID": "__group__", + "zOrder": "171", + "measuredW": "87", + "measuredH": "44", + "w": "87", + "h": "44", + "x": "1568", + "y": "1988", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0.5 - }, - "p1": { - "x": 0.47345427259831335, - "y": -0.00011162392477927807 - }, - "p2": { - "x": 235.68489507160098, - "y": -0.32512695598120445 + "controlName": "105-web-security-knowledge:content-security-policy" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "87", + "h": "44", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "34", + "measuredH": "25", + "x": "27", + "y": "10", + "properties": { + "size": "17", + "text": "CSP" + } + } + ] } } }, { - "ID": "2098", - "typeID": "Arrow", - "zOrder": "43", - "w": "1", - "h": "239", - "measuredW": "150", - "measuredH": "100", - "x": "1059", - "y": "1336", + "ID": "2552", + "typeID": "__group__", + "zOrder": "172", + "measuredW": "147", + "measuredH": "43", + "w": "147", + "h": "43", + "x": "1660", + "y": "1888", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.47345427259831346, - "y": -0.00011162392477927806 - }, - "p2": { - "x": 0, - "y": 238.3367674309227 + "controlName": "108-web-security-knowledge:owasp" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "147", + "h": "43", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "104", + "measuredH": "25", + "x": "22", + "y": "10", + "properties": { + "size": "17", + "text": "OWASP Risks" + } + } + ] } } }, { - "ID": "2099", - "typeID": "Arrow", - "zOrder": "42", - "w": "176", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "804", - "y": "1577", + "ID": "2553", + "typeID": "__group__", + "zOrder": "173", + "measuredW": "149", + "measuredH": "43", + "w": "149", + "h": "43", + "x": "1659", + "y": "1938", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 1.5 - }, - "p1": { - "x": 0.47345427259831363, - "y": -0.00011162392477927848 - }, - "p2": { - "x": 176.21279569788953, - "y": 0.03075605110257129 + "controlName": "107-web-security-knowledge:ssl-tls" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "149", + "h": "43", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "69", + "measuredH": "25", + "x": "40", + "y": "9", + "properties": { + "text": "SSL/TLS", + "size": "17" + } + } + ] } } }, { - "ID": "2100", - "typeID": "Arrow", - "zOrder": "41", + "ID": "2554", + "typeID": "__group__", + "zOrder": "174", + "measuredW": "271", + "measuredH": "40", + "w": "271", "h": "40", - "measuredW": "150", - "measuredH": "100", - "x": "817", - "y": "1591", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.3152579854152009, - "y": 39.90867964120662 - }, - "p1": { - "x": 0.4665558798140599, - "y": 0.0702975125629915 - }, - "p2": { - "x": 150.67744570222203, - "y": -0.2871527187319316 - } - } - }, - { - "ID": "2101", - "typeID": "Arrow", - "zOrder": "40", - "w": "186", - "h": "82", - "measuredW": "150", - "measuredH": "100", - "x": "808", - "y": "1591", + "x": "1561", + "y": "2340", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 81.5 - }, - "p1": { - "x": 0.4667037938257157, - "y": 0.05826324141902692 - }, - "p2": { - "x": 186.47466727551432, - "y": -0.2871527187319316 + "controlName": "103-design-and-development-principles:cqrs" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "260", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "48", + "measuredH": "25", + "x": "106", + "y": "7", + "properties": { + "size": "17", + "text": "CQRS" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "247", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "247", + "y": "8", + "properties": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "10027263" + } + } + ] } } }, { - "ID": "2102", - "typeID": "Arrow", - "zOrder": "39", - "w": "183", - "h": "125", - "measuredW": "150", - "measuredH": "100", - "x": "811", - "y": "1594", + "ID": "2555", + "typeID": "__group__", + "zOrder": "175", + "measuredW": "270", + "measuredH": "40", + "w": "270", + "h": "40", + "x": "1561", + "y": "2384", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.36031985801696464, - "y": 124.74401702033128 - }, - "p1": { - "x": 0.47415070546175875, - "y": 0.06172844723948579 - }, - "p2": { - "x": 183.47466727551432, - "y": -0.3096836550328135 + "controlName": "104-design-and-development-principles:event-sourcing" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "260", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "116", + "measuredH": "25", + "x": "72", + "y": "7", + "properties": { + "size": "17", + "text": "Event Sourcing" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "246", + "y": "7", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "246", + "y": "7", + "properties": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "10027263" + } + } + ] } } }, { - "ID": "2103", - "typeID": "Arrow", - "zOrder": "38", - "w": "214", - "h": "180", - "measuredW": "150", - "measuredH": "100", - "x": "816", - "y": "1586", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.17347654643435817, - "y": 180.38352203951763 - }, - "p1": { - "x": 0.4387031121915371, - "y": 0.07581196822794485 - }, - "p2": { - "x": 214.2042960399042, - "y": 0.24664368571939121 + "ID": "2556", + "typeID": "__group__", + "zOrder": "176", + "measuredW": "211", + "measuredH": "37", + "w": "211", + "h": "37", + "x": "1006", + "y": "2708", + "properties": { + "controlName": "105-architectural-patterns:service-mesh" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "202", + "h": "37", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "105", + "measuredH": "25", + "x": "48", + "y": "6", + "properties": { + "size": "17", + "text": "Service Mesh" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "187", + "y": "7", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "187", + "y": "7", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] } } }, { - "ID": "2105", + "ID": "2557", "typeID": "__group__", - "zOrder": "198", - "measuredW": "179", - "measuredH": "40", - "w": "179", - "h": "40", - "x": "975", - "y": "1729", + "zOrder": "177", + "measuredW": "211", + "measuredH": "37", + "w": "211", + "h": "37", + "x": "1006", + "y": "2748", "properties": { - "controlName": "102-apis:authentication:basic-authentication" + "controlName": "106-architectural-patterns:twelve-factor-apps" }, "children": { "controls": { "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "202", + "h": "37", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, { "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "149", + "measuredH": "25", + "x": "26", + "y": "6", + "properties": { + "size": "17", + "text": "Twelve Factor Apps" + } + }, + { + "ID": "2", "typeID": "Icon", "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "8", + "x": "187", + "y": "7", "properties": { "color": "16777215", "icon": { @@ -11402,13 +10583,13 @@ } }, { - "ID": "2", + "ID": "3", "typeID": "Icon", "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "8", + "x": "187", + "y": "7", "properties": { "color": "10027263", "icon": { @@ -11416,32 +10597,130 @@ "size": "small" } } + } + ] + } + } + }, + { + "ID": "2558", + "typeID": "__group__", + "zOrder": "178", + "measuredW": "198", + "measuredH": "159", + "w": "198", + "h": "159", + "x": "1424", + "y": "2674", + "properties": { + "controlName": "116-search-engines" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "198", + "h": "159", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" }, { - "ID": "3", - "typeID": "Canvas", + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "126", + "measuredW": "122", + "measuredH": "25", + "x": "36", + "y": "116", + "properties": { + "size": "17", + "text": "Search Engines" + } + } + ] + } + } + }, + { + "ID": "2559", + "typeID": "__group__", + "zOrder": "179", + "measuredW": "167", + "measuredH": "40", + "w": "167", + "h": "40", + "x": "1439", + "y": "2691", + "properties": { + "controlName": "100-search-engines:elasticsearch" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", "zOrder": "0", - "w": "169", + "w": "160", "h": "40", - "measuredW": "100", - "measuredH": "70", - "x": "10", + "measuredW": "200", + "measuredH": "140", + "x": "7", "y": "0", "properties": { "color": "16770457" } }, { - "ID": "4", + "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "82", + "w": "106", + "measuredW": "104", "measuredH": "25", - "x": "54", - "y": "7", + "x": "39", + "y": "8", "properties": { "size": "17", - "text": "Basic Auth" + "text": "Elasticsearch" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "7", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "7", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -11449,23 +10728,51 @@ } }, { - "ID": "2106", + "ID": "2560", "typeID": "__group__", - "zOrder": "199", - "measuredW": "179", + "zOrder": "180", + "measuredW": "167", "measuredH": "40", - "w": "179", + "w": "167", "h": "40", - "x": "975", - "y": "1766", + "x": "1439", + "y": "2737", "properties": { - "controlName": "103-apis:authentication:token-authentication" + "controlName": "101-search-engines:solr" }, "children": { "controls": { "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "160", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "7", + "y": "0", + "properties": { + "color": "16770457" + } + }, { "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "36", + "measuredW": "30", + "measuredH": "25", + "x": "69", + "y": "8", + "properties": { + "size": "17", + "text": "Solr" + } + }, + { + "ID": "2", "typeID": "Icon", "zOrder": "2", "measuredW": "24", @@ -11481,7 +10788,7 @@ } }, { - "ID": "2", + "ID": "3", "typeID": "Icon", "zOrder": "3", "measuredW": "24", @@ -11489,68 +10796,68 @@ "x": "0", "y": "8", "properties": { - "color": "10027263", + "color": "3700253", "icon": { "ID": "check-circle", "size": "small" } } - }, + } + ] + } + } + }, + { + "ID": "2561", + "typeID": "__group__", + "zOrder": "181", + "measuredW": "191", + "measuredH": "40", + "w": "191", + "h": "40", + "x": "1275", + "y": "2540", + "properties": { + "controlName": "100-message-brokers:rabbitmq" + }, + "children": { + "controls": { + "control": [ { - "ID": "3", - "typeID": "Canvas", + "ID": "0", + "typeID": "TextArea", "zOrder": "0", - "w": "169", + "w": "182", "h": "40", - "measuredW": "100", - "measuredH": "70", - "x": "10", + "measuredW": "200", + "measuredH": "140", + "x": "9", "y": "0", "properties": { "color": "16770457" } }, { - "ID": "4", + "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "85", + "measuredW": "78", "measuredH": "25", - "x": "52", + "x": "61", "y": "7", "properties": { "size": "17", - "text": "Token Auth" + "text": "RabbitMQ" } - } - ] - } - } - }, - { - "ID": "2107", - "typeID": "__group__", - "zOrder": "200", - "measuredW": "179", - "measuredH": "40", - "w": "179", - "h": "40", - "x": "975", - "y": "1803", - "properties": { - "controlName": "101-apis:authentication:oauth" - }, - "children": { - "controls": { - "control": [ + }, { - "ID": "1", + "ID": "2", "typeID": "Icon", "zOrder": "2", "measuredW": "24", "measuredH": "24", "x": "0", - "y": "8", + "y": "7", "properties": { "color": "16777215", "icon": { @@ -11560,13 +10867,13 @@ } }, { - "ID": "2", + "ID": "3", "typeID": "Icon", "zOrder": "3", "measuredW": "24", "measuredH": "24", "x": "0", - "y": "8", + "y": "7", "properties": { "color": "10027263", "icon": { @@ -11574,62 +10881,35 @@ "size": "small" } } - }, - { - "ID": "3", - "typeID": "Canvas", - "zOrder": "0", - "w": "169", - "h": "40", - "measuredW": "100", - "measuredH": "70", - "x": "10", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "4", - "typeID": "Label", - "zOrder": "1", - "measuredW": "47", - "measuredH": "25", - "x": "71", - "y": "7", - "properties": { - "size": "17", - "text": "OAuth" - } } ] } } }, { - "ID": "2108", + "ID": "2562", "typeID": "__group__", - "zOrder": "201", - "measuredW": "178", + "zOrder": "182", + "measuredW": "192", "measuredH": "40", - "w": "178", + "w": "192", "h": "40", - "x": "976", - "y": "1840", + "x": "1275", + "y": "2584", "properties": { - "controlName": "100-apis:authentication:cookie-based" + "controlName": "101-message-brokers:kafka" }, "children": { "controls": { "control": [ { - "ID": "3", - "typeID": "Canvas", + "ID": "0", + "typeID": "TextArea", "zOrder": "0", - "w": "169", + "w": "183", "h": "40", - "measuredW": "100", - "measuredH": "70", + "measuredW": "200", + "measuredH": "140", "x": "9", "y": "0", "properties": { @@ -11637,26 +10917,26 @@ } }, { - "ID": "4", + "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "108", + "measuredW": "44", "measuredH": "25", - "x": "40", + "x": "79", "y": "7", "properties": { "size": "17", - "text": "Cookie Based" + "text": "Kafka" } }, { - "ID": "5", + "ID": "2", "typeID": "Icon", "zOrder": "2", "measuredW": "24", "measuredH": "24", "x": "0", - "y": "8", + "y": "7", "properties": { "color": "16777215", "icon": { @@ -11666,19 +10946,113 @@ } }, { - "ID": "6", + "ID": "3", "typeID": "Icon", "zOrder": "3", "measuredW": "24", "measuredH": "24", "x": "0", - "y": "8", + "y": "7", + "properties": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "3700253" + } + } + ] + } + } + }, + { + "ID": "2563", + "typeID": "__group__", + "zOrder": "183", + "measuredW": "201", + "measuredH": "50", + "w": "201", + "h": "50", + "x": "674", + "y": "2973", + "properties": { + "controlName": "122-server-sent-events" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "201", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "148", + "measuredH": "25", + "x": "27", + "y": "12", + "properties": { + "size": "17", + "text": "Server Sent Events" + } + } + ] + } + } + }, + { + "ID": "2564", + "typeID": "__group__", + "zOrder": "184", + "measuredW": "213", + "measuredH": "50", + "w": "213", + "h": "50", + "x": "1188", + "y": "3224", + "properties": { + "controlName": "123-scalability" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "213", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "134", + "measuredH": "25", + "x": "40", + "y": "13", "properties": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" + "size": "17", + "text": "Building for Scale" } } ] @@ -11686,56 +11060,53 @@ } }, { - "ID": "2109", + "ID": "2565", "typeID": "__group__", - "zOrder": "202", - "measuredW": "179", - "measuredH": "40", - "w": "179", - "h": "40", - "x": "975", - "y": "1877", + "zOrder": "185", + "measuredW": "232", + "measuredH": "282", + "w": "232", + "h": "282", + "x": "880", + "y": "3212", "properties": { - "controlName": "105-apis:authentication:openid" + "controlName": "100-scalability:mitigation-strategies" }, "children": { "controls": { "control": [ { - "ID": "3", - "typeID": "Canvas", + "ID": "0", + "typeID": "TextArea", "zOrder": "0", - "w": "169", - "h": "40", - "measuredW": "100", - "measuredH": "70", - "x": "10", - "y": "0", - "properties": { - "color": "16770457" - } + "w": "222", + "h": "274", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "8" }, { - "ID": "4", + "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "61", + "measuredW": "159", "measuredH": "25", - "x": "64", - "y": "7", + "x": "31", + "y": "246", "properties": { "size": "17", - "text": "OpenID" + "text": "Mitigation Strategies" } }, { - "ID": "7", + "ID": "2", "typeID": "Icon", "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "8", + "x": "208", + "y": "0", "properties": { "color": "16777215", "icon": { @@ -11745,15 +11116,15 @@ } }, { - "ID": "8", + "ID": "3", "typeID": "Icon", "zOrder": "3", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "8", + "x": "208", + "y": "0", "properties": { - "color": "10066329", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -11765,686 +11136,1049 @@ } }, { - "ID": "2110", + "ID": "2566", "typeID": "__group__", - "zOrder": "203", - "measuredW": "179", + "zOrder": "186", + "measuredW": "197", "measuredH": "40", - "w": "179", + "w": "197", "h": "40", - "x": "975", - "y": "1913", + "x": "892", + "y": "3231", "properties": { - "controlName": "105-apis:authentication:saml" + "controlName": "100-scalability:mitigation-strategies:graceful-degradation" }, "children": { "controls": { "control": [ { - "ID": "3", - "typeID": "Canvas", + "ID": "0", + "typeID": "TextArea", "zOrder": "0", - "w": "169", + "w": "197", "h": "40", - "measuredW": "100", - "measuredH": "70", - "x": "10", + "measuredW": "200", + "measuredH": "140", + "x": "0", "y": "0", "properties": { "color": "16770457" } }, { - "ID": "4", + "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "46", - "measuredH": "25", - "x": "72", - "y": "7", - "properties": { - "size": "17", - "text": "SAML" - } - }, - { - "ID": "7", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "8", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - }, - { - "ID": "2111", - "typeID": "Arrow", - "zOrder": "37", - "w": "1", - "h": "129", - "measuredW": "150", - "measuredH": "100", - "x": "1058", - "y": "1587", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.21279569788953268, - "y": 129.33087955966835 - }, - "p1": { - "x": 0.4734542725983137, - "y": -0.00011162392477927875 - }, - "p2": { - "x": 0.21279569788953268, - "y": 0.03075605110257129 - } - } - }, - { - "ID": "2112", - "typeID": "Arrow", - "zOrder": "36", - "w": "1", - "h": "108", - "measuredW": "150", - "measuredH": "100", - "x": "1120", - "y": "1464", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.21279569788953268, - "y": 107.33087955966835 - }, - "p1": { - "x": 0.47345427259831363, - "y": -0.00011162392477927894 - }, - "p2": { - "x": 0.21279569788953268, - "y": -0.3596558928045397 - } - } - }, - { - "ID": "2113", - "typeID": "Arrow", - "zOrder": "35", - "w": "267", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1137", - "y": "1579", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.4734542725983135, - "y": -0.00011162392477927736 - }, - "p2": { - "x": 267.29850098875386, - "y": -0.5 - } - } - }, - { - "ID": "2114", - "typeID": "Arrow", - "zOrder": "34", - "w": "1", - "h": "93", - "measuredW": "150", - "measuredH": "100", - "x": "1391", - "y": "1486", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 1.2127956978895327, - "y": 93.40095678414946 - }, - "p1": { - "x": 0.47345427259831346, - "y": -0.00011162392477928008 - }, - "p2": { - "x": 0.14952920007272041, - "y": 0.38258659839470965 + "measuredW": "166", + "measuredH": "25", + "x": "17", + "y": "7", + "properties": { + "size": "17", + "text": "Graceful Degradation" + } + } + ] } } }, { - "ID": "2115", - "typeID": "Arrow", - "zOrder": "33", - "w": "1", - "h": "211", - "measuredW": "150", - "measuredH": "100", - "x": "1391", - "y": "1566", + "ID": "2567", + "typeID": "__group__", + "zOrder": "187", + "measuredW": "197", + "measuredH": "40", + "w": "197", + "h": "40", + "x": "892", + "y": "3275", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.47345427259831363, - "y": -0.00011162392477927808 - }, - "p2": { - "x": 0, - "y": 210.88680138292193 + "controlName": "101-scalability:mitigation-strategies:throttling" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "197", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "73", + "measuredH": "25", + "x": "62", + "y": "7", + "properties": { + "size": "17", + "text": "Throttling" + } + } + ] } } }, { - "ID": "2116", - "typeID": "Arrow", - "zOrder": "32", - "w": "223", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1391", - "y": "1780", + "ID": "2568", + "typeID": "__group__", + "zOrder": "188", + "measuredW": "199", + "measuredH": "40", + "w": "199", + "h": "40", + "x": "892", + "y": "3319", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.4734542725983135, - "y": -0.00011162392477927705 - }, - "p2": { - "x": 223.3987853999388, - "y": -0.5 + "controlName": "102-scalability:mitigation-strategies:backpressure" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "199", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "107", + "measuredH": "25", + "x": "46", + "y": "7", + "properties": { + "size": "17", + "text": "Backpressure" + } + } + ] } } }, { - "ID": "2117", - "typeID": "Arrow", - "zOrder": "31", - "w": "1", - "h": "206", - "measuredW": "150", - "measuredH": "100", - "x": "1688", - "y": "1690", + "ID": "2569", + "typeID": "__group__", + "zOrder": "189", + "measuredW": "199", + "measuredH": "40", + "w": "199", + "h": "40", + "x": "892", + "y": "3363", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.14952920007272041, - "y": 206.75343217305021 - }, - "p1": { - "x": 0.4734542725983135, - "y": -0.00011162392477928018 - }, - "p2": { - "x": 0.14952920007272041, - "y": 0.38258659839470965 + "controlName": "103-scalability:mitigation-strategies:loadshifting" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "199", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "94", + "measuredH": "25", + "x": "53", + "y": "7", + "properties": { + "size": "17", + "text": "Loadshifting" + } + } + ] } } }, { - "ID": "2118", - "typeID": "Arrow", - "zOrder": "30", - "w": "223", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1391", - "y": "1798", + "ID": "2570", + "typeID": "__group__", + "zOrder": "190", + "measuredW": "197", + "measuredH": "40", + "w": "197", + "h": "40", + "x": "892", + "y": "3407", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.4734542725983135, - "y": -0.00011162392477927705 - }, - "p2": { - "x": 223.3987853999388, - "y": -0.5 + "controlName": "104-scalability:mitigation-strategies:circuit-breaker" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "197", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "116", + "measuredH": "25", + "x": "41", + "y": "7", + "properties": { + "size": "17", + "text": "Circuit Breaker" + } + } + ] } } }, { - "ID": "2119", - "typeID": "Arrow", - "zOrder": "204", - "w": "1", - "h": "211", - "measuredW": "150", - "measuredH": "100", - "x": "1391", - "y": "1801", + "ID": "2571", + "typeID": "__group__", + "zOrder": "191", + "measuredW": "215", + "measuredH": "40", + "w": "215", + "h": "40", + "x": "672", + "y": "2438", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.47345427259831363, - "y": -0.00011162392477927808 - }, - "p2": { - "x": 0, - "y": 210.88680138292193 + "controlName": "105-more-about-databases:failure-modes" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "206", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "9", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "110", + "measuredH": "25", + "x": "57", + "y": "7", + "properties": { + "size": "17", + "text": "Failure Modes" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] } } }, { - "ID": "2120", - "typeID": "Arrow", - "zOrder": "29", - "w": "1", - "h": "75", - "measuredW": "150", - "measuredH": "100", - "x": "1391", - "y": "2039", + "ID": "2572", + "typeID": "__group__", + "zOrder": "192", + "measuredW": "215", + "measuredH": "40", + "w": "215", + "h": "40", + "x": "672", + "y": "2482", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.14952920007272041, - "y": 75.11122147525384 - }, - "p1": { - "x": 0.4734542725983133, - "y": -0.000111623924779281 - }, - "p2": { - "x": 0.14952920007272041, - "y": 0.044261593589453696 + "controlName": "106-more-about-databases:profiling-performance" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "206", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "9", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "166", + "measuredH": "25", + "x": "29", + "y": "7", + "properties": { + "size": "17", + "text": "Profiling Performance" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] } } }, { - "ID": "2121", - "typeID": "Arrow", - "zOrder": "28", - "w": "469", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "837", - "y": "2033", + "ID": "2573", + "typeID": "TextArea", + "zOrder": "193", + "w": "337", + "h": "124", + "measuredW": "200", + "measuredH": "140", + "x": "1133", + "y": "3683" + }, + { + "ID": "2574", + "typeID": "Label", + "zOrder": "194", + "measuredW": "285", + "measuredH": "25", + "x": "1154", + "y": "3703", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.23631528854207318, - "y": -0.5 - }, - "p1": { - "x": 0.4734542725983135, - "y": -0.000111623924779277 - }, - "p2": { - "x": 468.3987853999388, - "y": -0.5 + "size": "17", + "text": "Have a look at the DevOps Roadmap" + } + }, + { + "ID": "2575", + "typeID": "__group__", + "zOrder": "195", + "measuredW": "292", + "measuredH": "44", + "w": "292", + "h": "44", + "x": "1154", + "y": "3738", + "properties": { + "controlName": "ext_link:roadmap.sh/devops" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "292", + "h": "44", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "141", + "measuredH": "25", + "x": "75", + "y": "9", + "properties": { + "size": "17", + "text": "DevOps Roadmap" + } + } + ] } } }, { - "ID": "2122", - "typeID": "Arrow", - "zOrder": "27", - "w": "1", - "h": "91", - "measuredW": "150", - "measuredH": "100", - "x": "769", - "y": "1939", + "ID": "2576", + "typeID": "__group__", + "zOrder": "196", + "measuredW": "148", + "measuredH": "44", + "w": "148", + "h": "44", + "x": "1661", + "y": "1987", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.14952920007272041, - "y": 91.51893704138683 - }, - "p1": { - "x": 0.4734542725983133, - "y": -0.0001116239247792811 - }, - "p2": { - "x": 0.14952920007272041, - "y": 0.044261593589453696 + "controlName": "106-web-security-knowledge:server-security" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "148", + "h": "44", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "117", + "measuredH": "25", + "x": "15", + "y": "10", + "properties": { + "size": "17", + "text": "Server Security" + } + } + ] } } }, { - "ID": "2123", - "typeID": "Arrow", - "zOrder": "26", - "w": "1", - "h": "118", - "measuredW": "150", - "measuredH": "100", - "x": "768", - "y": "2031", + "ID": "2577", + "typeID": "__group__", + "zOrder": "197", + "measuredW": "242", + "measuredH": "47", + "w": "242", + "h": "47", + "x": "1568", + "y": "2039", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.47345427259831374, - "y": -0.0001116239247792781 - }, - "p2": { - "x": 0, - "y": 117.42746065827805 + "controlName": "ext_link:roadmap.sh/best-practices/api-security" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "242", + "h": "47", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "4273622", + "borderColor": "4273622" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "208", + "measuredH": "25", + "x": "17", + "y": "11", + "properties": { + "size": "17", + "color": "16777215", + "text": "API Security Best Practices" + } + } + ] } } }, { - "ID": "2124", - "typeID": "Arrow", - "zOrder": "25", - "w": "1", - "h": "91", - "measuredW": "150", - "measuredH": "100", - "x": "768", - "y": "2148", + "ID": "2578", + "typeID": "__group__", + "zOrder": "198", + "measuredW": "179", + "measuredH": "40", + "w": "179", + "h": "40", + "x": "975", + "y": "1729", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.14952920007272041, - "y": 91.51893704138683 - }, - "p1": { - "x": 0.4734542725983133, - "y": -0.0001116239247792811 - }, - "p2": { - "x": 0.14952920007272041, - "y": 0.044261593589453696 + "controlName": "102-apis:authentication:basic-authentication" + }, + "children": { + "controls": { + "control": [ + { + "ID": "1", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Canvas", + "zOrder": "0", + "w": "169", + "h": "40", + "measuredW": "100", + "measuredH": "70", + "x": "10", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "4", + "typeID": "Label", + "zOrder": "1", + "measuredW": "82", + "measuredH": "25", + "x": "54", + "y": "7", + "properties": { + "size": "17", + "text": "Basic Auth" + } + } + ] } } }, { - "ID": "2125", - "typeID": "Arrow", - "zOrder": "24", - "w": "219", - "h": "145", - "measuredW": "150", - "measuredH": "100", - "x": "868", - "y": "2155", + "ID": "2579", + "typeID": "__group__", + "zOrder": "199", + "measuredW": "179", + "measuredH": "40", + "w": "179", + "h": "40", + "x": "975", + "y": "1766", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.23631528854207318, - "y": 0.5 - }, - "p1": { - "x": 0.5857743945397229, - "y": 0.2432032446977395 - }, - "p2": { - "x": 219.0587868926923, - "y": 144.632126492103 + "controlName": "103-apis:authentication:token-authentication" + }, + "children": { + "controls": { + "control": [ + { + "ID": "1", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Canvas", + "zOrder": "0", + "w": "169", + "h": "40", + "measuredW": "100", + "measuredH": "70", + "x": "10", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "4", + "typeID": "Label", + "zOrder": "1", + "measuredW": "85", + "measuredH": "25", + "x": "52", + "y": "7", + "properties": { + "size": "17", + "text": "Token Auth" + } + } + ] } } }, { - "ID": "2126", - "typeID": "Arrow", - "zOrder": "22", - "w": "320", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1295", - "y": "2316", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.4734542725983135, - "y": -0.00011162392477927686 - }, - "p2": { - "x": 320.137094685658, - "y": -0.5 - }, - "stroke": "dotted" - } - }, - { - "ID": "2127", - "typeID": "Arrow", - "zOrder": "21", - "w": "280", - "h": "72", - "measuredW": "150", - "measuredH": "100", - "x": "1287", - "y": "2223", + "ID": "2580", + "typeID": "__group__", + "zOrder": "200", + "measuredW": "179", + "measuredH": "40", + "w": "179", + "h": "40", + "x": "975", + "y": "1803", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.03764989090200288, - "y": 72.32223961920909 - }, - "p1": { - "x": 0.531044448873829, - "y": -0.059547538369544246 - }, - "p2": { - "x": 280.42688459246074, - "y": 0.3899228633117673 + "controlName": "101-apis:authentication:oauth" + }, + "children": { + "controls": { + "control": [ + { + "ID": "1", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Canvas", + "zOrder": "0", + "w": "169", + "h": "40", + "measuredW": "100", + "measuredH": "70", + "x": "10", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "4", + "typeID": "Label", + "zOrder": "1", + "measuredW": "47", + "measuredH": "25", + "x": "71", + "y": "7", + "properties": { + "size": "17", + "text": "OAuth" + } + } + ] } - } - }, - { - "ID": "2128", - "typeID": "Arrow", - "zOrder": "20", - "w": "272", - "h": "35", - "measuredW": "150", - "measuredH": "100", - "x": "1299", - "y": "2269", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21829839384940897, - "y": 35.13027840564564 - }, - "p1": { - "x": 0.6266543897586216, - "y": -0.03388863281637455 - }, - "p2": { - "x": 271.362897521273, - "y": -0.10187674010012415 + } + }, + { + "ID": "2581", + "typeID": "__group__", + "zOrder": "201", + "measuredW": "178", + "measuredH": "40", + "w": "178", + "h": "40", + "x": "976", + "y": "1840", + "properties": { + "controlName": "100-apis:authentication:cookie-based" + }, + "children": { + "controls": { + "control": [ + { + "ID": "3", + "typeID": "Canvas", + "zOrder": "0", + "w": "169", + "h": "40", + "measuredW": "100", + "measuredH": "70", + "x": "9", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "4", + "typeID": "Label", + "zOrder": "1", + "measuredW": "108", + "measuredH": "25", + "x": "40", + "y": "7", + "properties": { + "size": "17", + "text": "Cookie Based" + } + }, + { + "ID": "5", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "6", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "10027263" + } + } + ] } } }, { - "ID": "2129", - "typeID": "Arrow", - "zOrder": "19", - "w": "280", - "h": "32", - "measuredW": "150", - "measuredH": "100", - "x": "1291", - "y": "2330", + "ID": "2582", + "typeID": "__group__", + "zOrder": "202", + "measuredW": "179", + "measuredH": "40", + "w": "179", + "h": "40", + "x": "975", + "y": "1877", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.4416692841202803, - "y": 1.288397997157972 - }, - "p1": { - "x": 0.6187498978609268, - "y": 0.05481031926139201 - }, - "p2": { - "x": 280.830903985679, - "y": 32.11653374968546 + "controlName": "105-apis:authentication:openid" + }, + "children": { + "controls": { + "control": [ + { + "ID": "3", + "typeID": "Canvas", + "zOrder": "0", + "w": "169", + "h": "40", + "measuredW": "100", + "measuredH": "70", + "x": "10", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "4", + "typeID": "Label", + "zOrder": "1", + "measuredW": "61", + "measuredH": "25", + "x": "64", + "y": "7", + "properties": { + "size": "17", + "text": "OpenID" + } + }, + { + "ID": "7", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "8", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "10066329", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] } } }, { - "ID": "2130", - "typeID": "Arrow", - "zOrder": "18", - "w": "283", - "h": "70", - "measuredW": "150", - "measuredH": "100", - "x": "1286", - "y": "2337", + "ID": "2583", + "typeID": "__group__", + "zOrder": "203", + "measuredW": "179", + "measuredH": "40", + "w": "179", + "h": "40", + "x": "975", + "y": "1913", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.4303565735040138, - "y": 0.1604238547820387 - }, - "p1": { - "x": 0.6318104821378916, - "y": 0.08459535307056273 - }, - "p2": { - "x": 282.89489105686675, - "y": 70.62473414627311 + "controlName": "105-apis:authentication:saml" + }, + "children": { + "controls": { + "control": [ + { + "ID": "3", + "typeID": "Canvas", + "zOrder": "0", + "w": "169", + "h": "40", + "measuredW": "100", + "measuredH": "70", + "x": "10", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "4", + "typeID": "Label", + "zOrder": "1", + "measuredW": "46", + "measuredH": "25", + "x": "72", + "y": "7", + "properties": { + "size": "17", + "text": "SAML" + } + }, + { + "ID": "7", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "8", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "10066329", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] } } }, { - "ID": "2131", + "ID": "2584", "typeID": "Arrow", - "zOrder": "17", + "zOrder": "204", "w": "1", - "h": "141", + "h": "211", "measuredW": "150", "measuredH": "100", - "x": "1086", - "y": "2351", + "x": "1391", + "y": "1801", "properties": { "color": "2848996", "direction": "bottom", @@ -12455,224 +12189,590 @@ "y": -0.5 }, "p1": { - "x": 0.4734542725983137, + "x": 0.47345427259831363, "y": -0.00011162392477927808 }, "p2": { "x": 0, - "y": 140.20697009709465 + "y": 210.88680138292193 } } }, { - "ID": "2132", - "typeID": "Arrow", - "zOrder": "16", - "w": "1", - "h": "95", - "measuredW": "150", - "measuredH": "100", - "x": "1086", - "y": "2494", + "ID": "2585", + "typeID": "__group__", + "zOrder": "205", + "measuredW": "195", + "measuredH": "50", + "w": "195", + "h": "50", + "x": "1293", + "y": "2008", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.14952920007272041, - "y": 95.46927069197682 - }, - "p1": { - "x": 0.47345427259831324, - "y": -0.00011162392477928106 - }, - "p2": { - "x": 0.14952920007272041, - "y": 0.044261593589453696 + "controlName": "112-testing" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "195", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "56", + "measuredH": "25", + "x": "70", + "y": "13", + "properties": { + "text": "Testing", + "size": "17" + } + } + ] } } }, { - "ID": "2133", - "typeID": "Arrow", - "zOrder": "15", - "w": "413", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1160", - "y": "2489", + "ID": "2586", + "typeID": "__group__", + "zOrder": "206", + "measuredW": "223", + "measuredH": "40", + "w": "223", + "h": "40", + "x": "1278", + "y": "2093", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.23631528854207318, - "y": -0.5 - }, - "p1": { - "x": 0.4734542725983137, - "y": -0.00011162392477927657 - }, - "p2": { - "x": 412.9689266111002, - "y": -0.5 + "controlName": "100-testing:integration-testing" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "212", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "150", + "measuredW": "144", + "measuredH": "25", + "x": "31", + "y": "7", + "properties": { + "size": "17", + "text": "Integration Testing" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "199", + "y": "7", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "199", + "y": "7", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } + } + }, + { + "ID": "2587", + "typeID": "__group__", + "zOrder": "207", + "measuredW": "224", + "measuredH": "37", + "w": "224", + "h": "37", + "x": "1276", + "y": "2136", + "properties": { + "controlName": "101-testing:unit-testing" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "214", + "h": "37", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "99", + "measuredW": "91", + "measuredH": "25", + "x": "47", + "y": "6", + "properties": { + "size": "17", + "text": "Unit Testing" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "200", + "y": "7", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "200", + "y": "7", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] } } }, { - "ID": "2134", - "typeID": "Arrow", - "zOrder": "14", - "w": "1", - "h": "68", - "measuredW": "150", - "measuredH": "100", - "x": "1379", - "y": "2491", + "ID": "2588", + "typeID": "__group__", + "zOrder": "208", + "measuredW": "225", + "measuredH": "37", + "w": "225", + "h": "37", + "x": "1276", + "y": "2175", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.14952920007272041, - "y": 68.46927069197682 - }, - "p1": { - "x": 0.47345427259831335, - "y": -0.00011162392477928112 - }, - "p2": { - "x": 0.14952920007272041, - "y": 0.11283757677028916 + "controlName": "102-testing:functional-testing" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "214", + "h": "37", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "151", + "measuredW": "140", + "measuredH": "25", + "x": "29", + "y": "6", + "properties": { + "size": "17", + "text": "Functional Testing" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "201", + "y": "7", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "201", + "y": "7", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] } } }, { - "ID": "2135", - "typeID": "Arrow", - "zOrder": "13", - "w": "1", - "h": "61", - "measuredW": "150", - "measuredH": "100", - "x": "1751", - "y": "2608", + "ID": "2589", + "typeID": "__group__", + "zOrder": "209", + "measuredW": "218", + "measuredH": "40", + "w": "218", + "h": "40", + "x": "670", + "y": "1852", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 61.303758754635055 - }, - "p1": { - "x": 0.5702216182256715, - "y": -0.004517251466967861 - }, - "p2": { - "x": 0, - "y": 0.4406451246140932 + "controlName": "101-scaling-databases:data-replication" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "208", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "10", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "129", + "measuredW": "128", + "measuredH": "25", + "x": "49", + "y": "7", + "properties": { + "size": "17", + "text": "Data Replication" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "10066329", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] } } }, { - "ID": "2136", - "typeID": "Arrow", - "zOrder": "12", - "w": "1", - "h": "260", - "measuredW": "150", - "measuredH": "100", - "x": "1567", - "y": "2502", + "ID": "2590", + "typeID": "__group__", + "zOrder": "210", + "measuredW": "215", + "measuredH": "40", + "w": "215", + "h": "40", + "x": "672", + "y": "1895", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.4734542725983138, - "y": -0.00011162392477927808 - }, - "p2": { - "x": 0, - "y": 259.3201595478108 + "controlName": "102-scaling-databases:sharding-strategies" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "208", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "7", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "155", + "measuredW": "151", + "measuredH": "25", + "x": "33", + "y": "7", + "properties": { + "size": "17", + "text": "Sharding Strategies" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "7", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "7", + "properties": { + "color": "10066329", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] } } }, { - "ID": "2137", - "typeID": "Arrow", - "zOrder": "11", - "w": "623", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "849", - "y": "2811", + "ID": "2591", + "typeID": "__group__", + "zOrder": "211", + "measuredW": "216", + "measuredH": "40", + "w": "216", + "h": "40", + "x": "672", + "y": "1938", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.27015691059352775, - "y": -0.5 - }, - "p1": { - "x": 0.47345427259831374, - "y": -0.00011162392477927636 - }, - "p2": { - "x": 622.4205322823302, - "y": -0.5 + "controlName": "103-scaling-databases:cap-theorem" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "208", + "h": "40", + "measuredW": "200", + "measuredH": "140", + "x": "8", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "109", + "measuredW": "107", + "measuredH": "25", + "x": "57", + "y": "7", + "properties": { + "size": "17", + "text": "CAP Theorem" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "8", + "properties": { + "color": "10066329", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] } } }, { - "ID": "2138", - "typeID": "Arrow", - "zOrder": "10", - "w": "1", - "h": "91", - "measuredW": "150", - "measuredH": "100", - "x": "747", - "y": "2729", + "ID": "2592", + "typeID": "__group__", + "zOrder": "212", + "measuredW": "200", + "measuredH": "50", + "w": "200", + "h": "50", + "x": "674", + "y": "3019", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.14952920007272041, - "y": 91.51893704138683 - }, - "p1": { - "x": 0.4734542725983133, - "y": -0.0001116239247792811 - }, - "p2": { - "x": 0.14952920007272041, - "y": 0.044261593589453696 + "controlName": "121-web-sockets" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "95", + "measuredH": "25", + "x": "52", + "y": "12", + "properties": { + "text": "WebSockets", + "size": "17" + } + } + ] } } }, { - "ID": "2139", + "ID": "2593", "typeID": "__group__", "zOrder": "213", "measuredW": "200", @@ -12718,7 +12818,7 @@ } }, { - "ID": "2140", + "ID": "2594", "typeID": "__group__", "zOrder": "214", "measuredW": "200", @@ -12764,46 +12864,64 @@ } }, { - "ID": "2144", - "typeID": "Arrow", - "zOrder": "8", - "w": "1", - "h": "141", - "measuredW": "150", - "measuredH": "100", - "x": "745", - "y": "2813", + "ID": "2595", + "typeID": "__group__", + "zOrder": "215", + "measuredW": "212", + "measuredH": "41", + "w": "212", + "h": "41", + "x": "671", + "y": "3220", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.4734542725983137, - "y": -0.00011162392477927808 - }, - "p2": { - "x": 0, - "y": 140.20697009709465 + "controlName": "103-scalability:horizontal-vertical-scaling" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "212", + "h": "41", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "125", + "measuredH": "25", + "x": "43", + "y": "8", + "properties": { + "size": "17", + "text": "Types of Scaling" + } + } + ] } } }, { - "ID": "2145", + "ID": "2596", "typeID": "__group__", - "zOrder": "9", - "measuredW": "200", - "measuredH": "50", - "w": "200", - "h": "50", - "x": "674", - "y": "2927", + "zOrder": "216", + "measuredW": "432", + "measuredH": "124", + "w": "432", + "h": "124", + "x": "670", + "y": "3491", "properties": { - "controlName": "120-real-time-data" + "controlName": "104-scalability:observability" }, "children": { "controls": { @@ -12812,23 +12930,53 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "h": "50", + "w": "432", + "h": "124", "measuredW": "200", "measuredH": "140", "x": "0", - "y": "0" + "y": "0", + "properties": { + "color": "16770457" + } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "120", + "measuredW": "105", + "measuredH": "26", + "x": "18", + "y": "18", + "properties": { + "text": "Observability", + "size": "18" + } + }, + { + "ID": "2", + "typeID": "Label", + "zOrder": "2", + "measuredW": "400", "measuredH": "25", - "x": "40", - "y": "12", + "x": "18", + "y": "50", "properties": { "size": "17", - "text": "Real-Time Data" + "text": "Metrics logging and other observable items that can" + } + }, + { + "ID": "3", + "typeID": "Label", + "zOrder": "3", + "measuredW": "283", + "measuredH": "25", + "x": "18", + "y": "79", + "properties": { + "size": "17", + "text": "help in debugging and solving issues" } } ] @@ -12836,155 +12984,7 @@ } }, { - "ID": "2146", - "typeID": "Arrow", - "zOrder": "7", - "w": "487", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "837", - "y": "2949", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.27015691059352775, - "y": -0.5 - }, - "p1": { - "x": 0.47345427259831374, - "y": -0.00011162392477927586 - }, - "p2": { - "x": 486.40782766206894, - "y": -0.5 - } - } - }, - { - "ID": "2147", - "typeID": "Arrow", - "zOrder": "6", - "w": "1", - "h": "95", - "measuredW": "150", - "measuredH": "100", - "x": "1051", - "y": "2946", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.14952920007272041, - "y": 95.70939424936978 - }, - "p1": { - "x": 0.4734542725983132, - "y": -0.00011162392477928113 - }, - "p2": { - "x": 0.14952920007272041, - "y": 0.28897406297528505 - } - } - }, - { - "ID": "2148", - "typeID": "Arrow", - "zOrder": "5", - "w": "276", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1264", - "y": "2948", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.14952920007272041, - "y": -0.2906057506302204 - }, - "p1": { - "x": 0.47345427259831324, - "y": -0.00011162392477928119 - }, - "p2": { - "x": 276.35388907392644, - "y": -0.2906057506302204 - } - } - }, - { - "ID": "2149", - "typeID": "Arrow", - "zOrder": "4", - "w": "1", - "h": "744", - "measuredW": "150", - "measuredH": "100", - "x": "1301", - "y": "2957", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.4734542725983139, - "y": -0.00011162392477927807 - }, - "p2": { - "x": 0, - "y": 743.8442967676933 - } - } - }, - { - "ID": "2150", - "typeID": "Arrow", - "zOrder": "1", - "w": "136", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1071", - "y": "3249", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.08928421577456902, - "y": -0.2906057506302204 - }, - "p1": { - "x": 0.4734542725983134, - "y": -0.00011162392477928117 - }, - "p2": { - "x": 136.35388907392644, - "y": -0.2906057506302204 - } - } - }, - { - "ID": "2151", + "ID": "2597", "typeID": "__group__", "zOrder": "217", "measuredW": "239", @@ -13033,7 +13033,7 @@ } }, { - "ID": "2152", + "ID": "2598", "typeID": "Arrow", "zOrder": "218", "w": "3", @@ -13062,7 +13062,7 @@ } }, { - "ID": "2153", + "ID": "2599", "typeID": "Arrow", "zOrder": "219", "w": "3", @@ -13091,7 +13091,7 @@ } }, { - "ID": "2154", + "ID": "2600", "typeID": "Arrow", "zOrder": "220", "w": "3", @@ -13118,17 +13118,66 @@ "y": 0.452028801972574 } } + }, + { + "ID": "2601", + "typeID": "__group__", + "zOrder": "221", + "measuredW": "410", + "measuredH": "47", + "w": "410", + "h": "47", + "x": "665", + "y": "831", + "properties": { + "controlName": "json:backend-beginner.json" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "410", + "h": "47", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "color": "3355443", + "borderColor": "3355443" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "210", + "measuredH": "26", + "x": "100", + "y": "11", + "properties": { + "color": "16777215", + "size": "18", + "text": "Visit the Beginner Version" + } + } + ] + } + } } ] }, "attributes": { - "name": "New Wireframe 1 copy 2", - "order": 1000018.3019863295, + "name": "New Wireframe 1 copy 6", + "order": 1000022.7193818908, "parentID": null, "notes": "" }, "branchID": "Master", - "resourceID": "7BDB8D3D-BEB5-4A58-BF91-F519F8754661", + "resourceID": "DAF9FB64-BA77-40D4-BCEF-EEE21C480971", "mockupH": "3227", "mockupW": "1203", "measuredW": "1851", diff --git a/src/data/roadmaps/backend/content/103-learn-a-language/100-go.md b/src/data/roadmaps/backend/content/103-learn-a-language/100-go.md index 84c2bdd7f1a6..690b765149df 100644 --- a/src/data/roadmaps/backend/content/103-learn-a-language/100-go.md +++ b/src/data/roadmaps/backend/content/103-learn-a-language/100-go.md @@ -7,7 +7,6 @@ Visit the following resources to learn more: - [Visit Dedicated Go Roadmap](/golang) - [A Tour of Go – Go Basics](https://go.dev/tour/welcome/1) - [Go Reference Documentation](https://go.dev/doc/) -- [Learn Go | Boot.dev](https://boot.dev/learn/learn-golang) - [Go by Example - annotated example programs](https://gobyexample.com/) - [Learn Go | Codecademy](https://www.codecademy.com/learn/learn-go) - [W3Schools Go Tutorial ](https://www.w3schools.com/go/) diff --git a/src/data/roadmaps/backend/content/103-learn-a-language/102-java.md b/src/data/roadmaps/backend/content/103-learn-a-language/102-java.md index 4c6f9c4b800b..3aea6b53e993 100644 --- a/src/data/roadmaps/backend/content/103-learn-a-language/102-java.md +++ b/src/data/roadmaps/backend/content/103-learn-a-language/102-java.md @@ -10,4 +10,4 @@ Visit the following resources to learn more: - [Codeacademy - Free Course](https://www.codecademy.com/learn/learn-java) - [W3 Schools Tutorials](https://www.w3schools.com/java/) - [Java Crash Course](https://www.youtube.com/watch?v=eIrMbAQSU34) -- [Complete Java course](https://www.youtube.com/watch?v=xk4_1vdrzzo) \ No newline at end of file +- [Complete Java course](https://www.youtube.com/watch?v=xk4_1vDrzzo) \ No newline at end of file diff --git a/src/data/roadmaps/blockchain/content/109-dapps/107-supporting-languages/102-go.md b/src/data/roadmaps/blockchain/content/109-dapps/107-supporting-languages/102-go.md index 54e7c86eab0d..831974b115ab 100644 --- a/src/data/roadmaps/blockchain/content/109-dapps/107-supporting-languages/102-go.md +++ b/src/data/roadmaps/blockchain/content/109-dapps/107-supporting-languages/102-go.md @@ -7,7 +7,6 @@ Visit the following resources to learn more: - [Visit Dedicated Go Roadmap](/golang) - [A Tour of Go – Go Basics](https://go.dev/tour/welcome/1) - [Go Reference Documentation](https://go.dev/doc/) -- [Learn Go | Boot.dev](https://boot.dev/learn/learn-golang) - [Go by Example - annotated example programs](https://gobyexample.com/) - [Learn Go | Codecademy](https://www.codecademy.com/learn/learn-go) - [W3Schools Go Tutorial ](https://www.w3schools.com/go/) diff --git a/src/data/roadmaps/computer-science/content/101-pick-a-language/104-go.md b/src/data/roadmaps/computer-science/content/101-pick-a-language/104-go.md index dcddf8de0c26..690b765149df 100644 --- a/src/data/roadmaps/computer-science/content/101-pick-a-language/104-go.md +++ b/src/data/roadmaps/computer-science/content/101-pick-a-language/104-go.md @@ -8,7 +8,6 @@ Visit the following resources to learn more: - [A Tour of Go – Go Basics](https://go.dev/tour/welcome/1) - [Go Reference Documentation](https://go.dev/doc/) - [Go by Example - annotated example programs](https://gobyexample.com/) -- [Learn Go | Boot.dev](https://boot.dev/learn/learn-golang) - [Learn Go | Codecademy](https://www.codecademy.com/learn/learn-go) - [W3Schools Go Tutorial ](https://www.w3schools.com/go/) - [Making a RESTful JSON API in Go](https://thenewstack.io/make-a-restful-json-api-go/) diff --git a/src/data/roadmaps/cpp/cpp.md b/src/data/roadmaps/cpp/cpp.md index 09d2f060d43c..67beccd37816 100644 --- a/src/data/roadmaps/cpp/cpp.md +++ b/src/data/roadmaps/cpp/cpp.md @@ -6,7 +6,7 @@ briefTitle: 'C++' briefDescription: 'Step by step guide to becoming a C++ Developer in 2024' title: 'C++ Developer Roadmap' description: 'Step by step guide to becoming a C++ developer in 2024' -isNew: true +isNew: false hasTopics: true dimensions: width: 1000 diff --git a/src/data/roadmaps/devops/content/100-language/103-go.md b/src/data/roadmaps/devops/content/100-language/103-go.md index c1ec6b90bef8..7198699cb0a2 100644 --- a/src/data/roadmaps/devops/content/100-language/103-go.md +++ b/src/data/roadmaps/devops/content/100-language/103-go.md @@ -7,7 +7,6 @@ Visit the following resources to learn more: - [Visit Dedicated Go Roadmap](/golang) - [A Tour of Go – Go Basics](https://go.dev/tour/welcome/1) - [Go Reference Documentation](https://go.dev/doc/) -- [Learn Go | Boot.dev](https://boot.dev/learn/learn-golang) - [Go by Example - annotated example programs](https://gobyexample.com/) - [Learn Go | Codecademy](https://www.codecademy.com/learn/learn-go) - [W3Schools Go Tutorial ](https://www.w3schools.com/go/) diff --git a/src/data/roadmaps/software-architect/content/104-programming-languages/103-go.md b/src/data/roadmaps/software-architect/content/104-programming-languages/103-go.md index 54e7c86eab0d..831974b115ab 100644 --- a/src/data/roadmaps/software-architect/content/104-programming-languages/103-go.md +++ b/src/data/roadmaps/software-architect/content/104-programming-languages/103-go.md @@ -7,7 +7,6 @@ Visit the following resources to learn more: - [Visit Dedicated Go Roadmap](/golang) - [A Tour of Go – Go Basics](https://go.dev/tour/welcome/1) - [Go Reference Documentation](https://go.dev/doc/) -- [Learn Go | Boot.dev](https://boot.dev/learn/learn-golang) - [Go by Example - annotated example programs](https://gobyexample.com/) - [Learn Go | Codecademy](https://www.codecademy.com/learn/learn-go) - [W3Schools Go Tutorial ](https://www.w3schools.com/go/) diff --git a/src/lib/guide.ts b/src/lib/guide.ts index a230333828da..8bdfb678d22a 100644 --- a/src/lib/guide.ts +++ b/src/lib/guide.ts @@ -9,6 +9,8 @@ export interface GuideFrontmatter { imageUrl: string; }; canonicalUrl?: string; + // alternate path where this guide has been published + excludedBySlug?: string; seo: { title: string; description: string; @@ -18,7 +20,7 @@ export interface GuideFrontmatter { date: string; sitemap: { priority: number; - changefreq: 'daily' | 'weekly' | 'monthly' | 'yealry'; + changefreq: 'daily' | 'weekly' | 'monthly' | 'yearly'; }; tags: string[]; } @@ -44,14 +46,15 @@ function guidePathToId(filePath: string): string { * @returns Promisifed guide files */ export async function getAllGuides(): Promise { + // @ts-ignore const guides = await import.meta.glob( '/src/data/guides/*.md', { eager: true, - } + }, ); - const guideFiles = Object.values(guides); + const guideFiles = Object.values(guides) as GuideFileType[]; const enrichedGuides = guideFiles.map((guideFile) => ({ ...guideFile, id: guidePathToId(guideFile.file), @@ -60,6 +63,19 @@ export async function getAllGuides(): Promise { return enrichedGuides.sort( (a, b) => new Date(b.frontmatter.date).valueOf() - - new Date(a.frontmatter.date).valueOf() + new Date(a.frontmatter.date).valueOf(), ); } + +/** + * Gets the guide by the given id + * @param id Guide identifier + * @returns Promisified guide file + */ +export async function getGuideById( + id: string, +): Promise { + const allGuides = await getAllGuides(); + + return allGuides.find((guide) => guide.id === id); +} diff --git a/src/pages/backend/languages.astro b/src/pages/backend/languages.astro new file mode 100644 index 000000000000..452a2c72f149 --- /dev/null +++ b/src/pages/backend/languages.astro @@ -0,0 +1,26 @@ +--- +import GuideHeader from '../../components/GuideHeader.astro'; +import MarkdownFile from '../../components/MarkdownFile.astro'; +import BaseLayout from '../../layouts/BaseLayout.astro'; +import { getGuideById } from '../../lib/guide'; + +const guideId = 'backend-languages'; +const guide = await getGuideById('backend-languages'); + +const { frontmatter: guideData } = guide; +--- + + + + +
+ + + +
+
diff --git a/src/pages/guides/[guideId].astro b/src/pages/guides/[guideId].astro index c89425391993..8962bbb979f9 100644 --- a/src/pages/guides/[guideId].astro +++ b/src/pages/guides/[guideId].astro @@ -9,7 +9,9 @@ export interface Props { } export async function getStaticPaths() { - const guides = await getAllGuides(); + const guides = (await getAllGuides()).filter( + (guide) => !guide.frontmatter.excludedBySlug, + ); return guides.map((guide) => ({ params: { guideId: guide.id }, diff --git a/src/pages/pages.json.ts b/src/pages/pages.json.ts index d123e87cd732..4eb74adc4d5f 100644 --- a/src/pages/pages.json.ts +++ b/src/pages/pages.json.ts @@ -2,7 +2,7 @@ import { getAllBestPractices } from '../lib/best-pratice'; import { getAllGuides } from '../lib/guide'; import { getRoadmapsByTag } from '../lib/roadmap'; import { getAllVideos } from '../lib/video'; -import {getAllQuestionGroups} from "../lib/question-group"; +import { getAllQuestionGroups } from '../lib/question-group'; export async function GET() { const guides = await getAllGuides(); @@ -36,7 +36,9 @@ export async function GET() { })), ...guides.map((guide) => ({ id: guide.id, - url: `/guides/${guide.id}`, + url: guide.frontmatter.excludedBySlug + ? guide.frontmatter.excludedBySlug + : `/guides/${guide.id}`, title: guide.frontmatter.title, group: 'Guides', })), @@ -52,6 +54,6 @@ export async function GET() { headers: { 'Content-Type': 'application/json', }, - } + }, ); }