From 5edf7b35a9c1b631aa1b237d91c44114df0683f0 Mon Sep 17 00:00:00 2001 From: Arik Chakma Date: Sat, 3 Jun 2023 05:23:19 +0600 Subject: [PATCH 01/48] chore: add resource link to cpp >> introduction:what-is-cpp --- .../100-introduction/100-what-is-cpp.md | 46 +------------------ 1 file changed, 1 insertion(+), 45 deletions(-) diff --git a/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md b/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md index c2d6694eb..82a067fee 100644 --- a/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md +++ b/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md @@ -1,45 +1 @@ -# What is C++? -C++ is a general-purpose programming language created by Bjarne Stroustrup as an extension of the C programming language. It was first introduced in 1985 and provides object-oriented features like classes and inheritance. C++ is widely used in various applications like game development, system programming, embedded systems, and high-performance computing. - -C++ is a statically-typed language, meaning that the type of a variable is determined during compilation, and has an extensive library called the C++ Standard Library, which provides a rich set of functions, algorithms, and data structures for various tasks. - -C++ builds upon the features of C, and thus, most C programs can be compiled and run with a C++ compiler. - -## Code Example - -Here's a simple example of a C++ program that demonstrates some essential features of the language: - -```cpp -#include - -// A simple function to add two numbers -int add(int a, int b) { - return a + b; -} - -class Calculator { -public: - // A member function to multiply two numbers - int multiply(int a, int b) { - return a * b; - } -}; - -int main() { - int x = 5; - int y = 3; - - // Using the standalone function 'add' - int sum = add(x, y); - std::cout << "Sum: " << sum << std::endl; - - // Using a class and member function - Calculator calc; - int product = calc.multiply(x, y); - std::cout << "Product: " << product << std::endl; - - return 0; -} -``` - -In the above program, we define a simple function `add` and a class `Calculator` with a member function `multiply`. The `main` function demonstrates how to use these to perform basic arithmetic. \ No newline at end of file +%23%20%20What%20is%20C%2B%2B%3F%0AC%2B%2B%20is%20a%20general-purpose%20programming%20language%20created%20by%20Bjarne%20Stroustrup%20as%20an%20extension%20of%20the%20C%20programming%20language.%20It%20was%20first%20introduced%20in%201985%20and%20provides%20object-oriented%20features%20like%20classes%20and%20inheritance.%20C%2B%2B%20is%20widely%20used%20in%20various%20applications%20like%20game%20development%2C%20system%20programming%2C%20embedded%20systems%2C%20and%20high-performance%20computing.%0A%0AC%2B%2B%20is%20a%20statically-typed%20language%2C%20meaning%20that%20the%20type%20of%20a%20variable%20is%20determined%20during%20compilation%2C%20and%20has%20an%20extensive%20library%20called%20the%20C%2B%2B%20Standard%20Library%2C%20which%20provides%20a%20rich%20set%20of%20functions%2C%20algorithms%2C%20and%20data%20structures%20for%20various%20tasks.%0A%0AC%2B%2B%20builds%20upon%20the%20features%20of%20C%2C%20and%20thus%2C%20most%20C%20programs%20can%20be%20compiled%20and%20run%20with%20a%20C%2B%2B%20compiler.%20%0A%0A%23%23%20Code%20Example%0A%0AHere's%20a%20simple%20example%20of%20a%20C%2B%2B%20program%20that%20demonstrates%20some%20essential%20features%20of%20the%20language%3A%0A%0A%60%60%60cpp%0A%23include%20%3Ciostream%3E%0A%0A%2F%2F%20A%20simple%20function%20to%20add%20two%20numbers%0Aint%20add(int%20a%2C%20int%20b)%20%7B%0A%20%20%20%20return%20a%20%2B%20b%3B%0A%7D%0A%0Aclass%20Calculator%20%7B%0Apublic%3A%0A%20%20%20%20%2F%2F%20A%20member%20function%20to%20multiply%20two%20numbers%0A%20%20%20%20int%20multiply(int%20a%2C%20int%20b)%20%7B%0A%20%20%20%20%20%20%20%20return%20a%20*%20b%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%0Aint%20main()%20%7B%0A%20%20%20%20int%20x%20%3D%205%3B%0A%20%20%20%20int%20y%20%3D%203%3B%0A%0A%20%20%20%20%2F%2F%20Using%20the%20standalone%20function%20'add'%0A%20%20%20%20int%20sum%20%3D%20add(x%2C%20y)%3B%0A%20%20%20%20std%3A%3Acout%20%3C%3C%20%22Sum%3A%20%22%20%3C%3C%20sum%20%3C%3C%20std%3A%3Aendl%3B%0A%0A%20%20%20%20%2F%2F%20Using%20a%20class%20and%20member%20function%0A%20%20%20%20Calculator%20calc%3B%0A%20%20%20%20int%20product%20%3D%20calc.multiply(x%2C%20y)%3B%0A%20%20%20%20std%3A%3Acout%20%3C%3C%20%22Product%3A%20%22%20%3C%3C%20product%20%3C%3C%20std%3A%3Aendl%3B%0A%0A%20%20%20%20return%200%3B%0A%7D%0A%60%60%60%0A%0AIn%20the%20above%20program%2C%20we%20define%20a%20simple%20function%20%60add%60%20and%20a%20class%20%60Calculator%60%20with%20a%20member%20function%20%60multiply%60.%20The%20%60main%60%20function%20demonstrates%20how%20to%20use%20these%20to%20perform%20basic%20arithmetic.%0A%0A-%20%5BC%2B%2B%20Tutorial%20for%20Beginners%20-%20Full%20Course%5D(https%3A%2F%2Fyoutu.be%2FvLnPwxZdW4Y) \ No newline at end of file From 706c9db70d328504ab27df15d6c3834034f3342b Mon Sep 17 00:00:00 2001 From: Arik Chakma Date: Sat, 3 Jun 2023 05:26:09 +0600 Subject: [PATCH 02/48] Revert "chore: add resource link to cpp >> introduction:what-is-cpp" This reverts commit 5edf7b35a9c1b631aa1b237d91c44114df0683f0. --- .../100-introduction/100-what-is-cpp.md | 46 ++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md b/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md index 82a067fee..c2d6694eb 100644 --- a/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md +++ b/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md @@ -1 +1,45 @@ -%23%20%20What%20is%20C%2B%2B%3F%0AC%2B%2B%20is%20a%20general-purpose%20programming%20language%20created%20by%20Bjarne%20Stroustrup%20as%20an%20extension%20of%20the%20C%20programming%20language.%20It%20was%20first%20introduced%20in%201985%20and%20provides%20object-oriented%20features%20like%20classes%20and%20inheritance.%20C%2B%2B%20is%20widely%20used%20in%20various%20applications%20like%20game%20development%2C%20system%20programming%2C%20embedded%20systems%2C%20and%20high-performance%20computing.%0A%0AC%2B%2B%20is%20a%20statically-typed%20language%2C%20meaning%20that%20the%20type%20of%20a%20variable%20is%20determined%20during%20compilation%2C%20and%20has%20an%20extensive%20library%20called%20the%20C%2B%2B%20Standard%20Library%2C%20which%20provides%20a%20rich%20set%20of%20functions%2C%20algorithms%2C%20and%20data%20structures%20for%20various%20tasks.%0A%0AC%2B%2B%20builds%20upon%20the%20features%20of%20C%2C%20and%20thus%2C%20most%20C%20programs%20can%20be%20compiled%20and%20run%20with%20a%20C%2B%2B%20compiler.%20%0A%0A%23%23%20Code%20Example%0A%0AHere's%20a%20simple%20example%20of%20a%20C%2B%2B%20program%20that%20demonstrates%20some%20essential%20features%20of%20the%20language%3A%0A%0A%60%60%60cpp%0A%23include%20%3Ciostream%3E%0A%0A%2F%2F%20A%20simple%20function%20to%20add%20two%20numbers%0Aint%20add(int%20a%2C%20int%20b)%20%7B%0A%20%20%20%20return%20a%20%2B%20b%3B%0A%7D%0A%0Aclass%20Calculator%20%7B%0Apublic%3A%0A%20%20%20%20%2F%2F%20A%20member%20function%20to%20multiply%20two%20numbers%0A%20%20%20%20int%20multiply(int%20a%2C%20int%20b)%20%7B%0A%20%20%20%20%20%20%20%20return%20a%20*%20b%3B%0A%20%20%20%20%7D%0A%7D%3B%0A%0Aint%20main()%20%7B%0A%20%20%20%20int%20x%20%3D%205%3B%0A%20%20%20%20int%20y%20%3D%203%3B%0A%0A%20%20%20%20%2F%2F%20Using%20the%20standalone%20function%20'add'%0A%20%20%20%20int%20sum%20%3D%20add(x%2C%20y)%3B%0A%20%20%20%20std%3A%3Acout%20%3C%3C%20%22Sum%3A%20%22%20%3C%3C%20sum%20%3C%3C%20std%3A%3Aendl%3B%0A%0A%20%20%20%20%2F%2F%20Using%20a%20class%20and%20member%20function%0A%20%20%20%20Calculator%20calc%3B%0A%20%20%20%20int%20product%20%3D%20calc.multiply(x%2C%20y)%3B%0A%20%20%20%20std%3A%3Acout%20%3C%3C%20%22Product%3A%20%22%20%3C%3C%20product%20%3C%3C%20std%3A%3Aendl%3B%0A%0A%20%20%20%20return%200%3B%0A%7D%0A%60%60%60%0A%0AIn%20the%20above%20program%2C%20we%20define%20a%20simple%20function%20%60add%60%20and%20a%20class%20%60Calculator%60%20with%20a%20member%20function%20%60multiply%60.%20The%20%60main%60%20function%20demonstrates%20how%20to%20use%20these%20to%20perform%20basic%20arithmetic.%0A%0A-%20%5BC%2B%2B%20Tutorial%20for%20Beginners%20-%20Full%20Course%5D(https%3A%2F%2Fyoutu.be%2FvLnPwxZdW4Y) \ No newline at end of file +# What is C++? +C++ is a general-purpose programming language created by Bjarne Stroustrup as an extension of the C programming language. It was first introduced in 1985 and provides object-oriented features like classes and inheritance. C++ is widely used in various applications like game development, system programming, embedded systems, and high-performance computing. + +C++ is a statically-typed language, meaning that the type of a variable is determined during compilation, and has an extensive library called the C++ Standard Library, which provides a rich set of functions, algorithms, and data structures for various tasks. + +C++ builds upon the features of C, and thus, most C programs can be compiled and run with a C++ compiler. + +## Code Example + +Here's a simple example of a C++ program that demonstrates some essential features of the language: + +```cpp +#include + +// A simple function to add two numbers +int add(int a, int b) { + return a + b; +} + +class Calculator { +public: + // A member function to multiply two numbers + int multiply(int a, int b) { + return a * b; + } +}; + +int main() { + int x = 5; + int y = 3; + + // Using the standalone function 'add' + int sum = add(x, y); + std::cout << "Sum: " << sum << std::endl; + + // Using a class and member function + Calculator calc; + int product = calc.multiply(x, y); + std::cout << "Product: " << product << std::endl; + + return 0; +} +``` + +In the above program, we define a simple function `add` and a class `Calculator` with a member function `multiply`. The `main` function demonstrates how to use these to perform basic arithmetic. \ No newline at end of file From 4a4348fb0b242d9c38bb454f3dfb32eff45438fd Mon Sep 17 00:00:00 2001 From: Arik Chakma Date: Sat, 3 Jun 2023 05:28:23 +0600 Subject: [PATCH 03/48] chore: add resource link to cpp >> introduction:what-is-cpp --- .../roadmaps/cpp/content/100-introduction/100-what-is-cpp.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md b/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md index c2d6694eb..127f773bb 100644 --- a/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md +++ b/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md @@ -42,4 +42,6 @@ int main() { } ``` -In the above program, we define a simple function `add` and a class `Calculator` with a member function `multiply`. The `main` function demonstrates how to use these to perform basic arithmetic. \ No newline at end of file +In the above program, we define a simple function `add` and a class `Calculator` with a member function `multiply`. The `main` function demonstrates how to use these to perform basic arithmetic. + +- [C++ Tutorial for Beginners - Full Course](https://youtu.be/vLnPwxZdW4Y) \ No newline at end of file From a388e4296b88f6ab1cd4b8565c009423b5125681 Mon Sep 17 00:00:00 2001 From: Arik Chakma Date: Sat, 3 Jun 2023 08:29:22 +0600 Subject: [PATCH 04/48] chore: add resource link to cpp >> introduction --- src/data/roadmaps/cpp/content/100-introduction/index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/data/roadmaps/cpp/content/100-introduction/index.md b/src/data/roadmaps/cpp/content/100-introduction/index.md index 828e9f871..93abb6ac2 100644 --- a/src/data/roadmaps/cpp/content/100-introduction/index.md +++ b/src/data/roadmaps/cpp/content/100-introduction/index.md @@ -127,4 +127,6 @@ int main() { } ``` -This basic introduction to C++ should provide you with a good foundation for further learning. Explore more topics such as classes, objects, inheritance, polymorphism, templates, and the Standard Template Library (STL) to deepen your understanding of C++ and start writing more advanced programs. \ No newline at end of file +This basic introduction to C++ should provide you with a good foundation for further learning. Explore more topics such as classes, objects, inheritance, polymorphism, templates, and the Standard Template Library (STL) to deepen your understanding of C++ and start writing more advanced programs. + +- [C++ Tutorial for Beginners - Full Course](https://youtu.be/vLnPwxZdW4Y) \ No newline at end of file From 5935c7d9efad22d5c404dd8850556ecbaf9846c9 Mon Sep 17 00:00:00 2001 From: Arik Chakma Date: Sat, 3 Jun 2023 08:31:18 +0600 Subject: [PATCH 05/48] chore: add resource link to frontend >> internet --- src/data/roadmaps/frontend/content/100-internet/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/roadmaps/frontend/content/100-internet/index.md b/src/data/roadmaps/frontend/content/100-internet/index.md index cf63ffffc..30446ef6b 100644 --- a/src/data/roadmaps/frontend/content/100-internet/index.md +++ b/src/data/roadmaps/frontend/content/100-internet/index.md @@ -11,3 +11,4 @@ Visit the following resources to learn more: - [Learn How the Web Works](https://internetfundamentals.com) - [How does the Internet work?](https://www.youtube.com/watch?v=x3c1ih2NJEg) - [How the Internet Works in 5 Minutes](https://www.youtube.com/watch?v=7_LPdttKXPc) +- [Hello](https://hello.com) \ No newline at end of file From 04573b7e09e88eab8bb2c72b439455aa9691538e Mon Sep 17 00:00:00 2001 From: Arik Chakma Date: Sat, 3 Jun 2023 08:32:12 +0600 Subject: [PATCH 06/48] chore: add resource link to cpp >> introduction:what-is-cpp --- .../roadmaps/cpp/content/100-introduction/100-what-is-cpp.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md b/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md index 127f773bb..c45143f76 100644 --- a/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md +++ b/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md @@ -44,4 +44,5 @@ int main() { In the above program, we define a simple function `add` and a class `Calculator` with a member function `multiply`. The `main` function demonstrates how to use these to perform basic arithmetic. +- [C++ Tutorial for Beginners - Full Course](https://youtu.be/vLnPwxZdW4Y) - [C++ Tutorial for Beginners - Full Course](https://youtu.be/vLnPwxZdW4Y) \ No newline at end of file From 2b7def7a5560c70368023d48e4655390e111098a Mon Sep 17 00:00:00 2001 From: Arik Chakma Date: Sat, 3 Jun 2023 08:33:46 +0600 Subject: [PATCH 07/48] Revert "chore: add resource link to cpp >> introduction:what-is-cpp" This reverts commit 04573b7e09e88eab8bb2c72b439455aa9691538e. --- .../roadmaps/cpp/content/100-introduction/100-what-is-cpp.md | 1 - 1 file changed, 1 deletion(-) diff --git a/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md b/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md index c45143f76..127f773bb 100644 --- a/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md +++ b/src/data/roadmaps/cpp/content/100-introduction/100-what-is-cpp.md @@ -44,5 +44,4 @@ int main() { In the above program, we define a simple function `add` and a class `Calculator` with a member function `multiply`. The `main` function demonstrates how to use these to perform basic arithmetic. -- [C++ Tutorial for Beginners - Full Course](https://youtu.be/vLnPwxZdW4Y) - [C++ Tutorial for Beginners - Full Course](https://youtu.be/vLnPwxZdW4Y) \ No newline at end of file From 3394f9a79059c6a0ef4f02327d568baa4ac29465 Mon Sep 17 00:00:00 2001 From: Arik Chakma Date: Sat, 3 Jun 2023 08:34:04 +0600 Subject: [PATCH 08/48] Revert "chore: add resource link to frontend >> internet" This reverts commit 5935c7d9efad22d5c404dd8850556ecbaf9846c9. --- src/data/roadmaps/frontend/content/100-internet/index.md | 1 - 1 file changed, 1 deletion(-) diff --git a/src/data/roadmaps/frontend/content/100-internet/index.md b/src/data/roadmaps/frontend/content/100-internet/index.md index 30446ef6b..cf63ffffc 100644 --- a/src/data/roadmaps/frontend/content/100-internet/index.md +++ b/src/data/roadmaps/frontend/content/100-internet/index.md @@ -11,4 +11,3 @@ Visit the following resources to learn more: - [Learn How the Web Works](https://internetfundamentals.com) - [How does the Internet work?](https://www.youtube.com/watch?v=x3c1ih2NJEg) - [How the Internet Works in 5 Minutes](https://www.youtube.com/watch?v=7_LPdttKXPc) -- [Hello](https://hello.com) \ No newline at end of file From 174ea05a920d04b1b62faa30b151d6c1fe0c4451 Mon Sep 17 00:00:00 2001 From: roadmap bot <135830415+roadmap-bot@users.noreply.github.com> Date: Fri, 9 Jun 2023 20:59:40 +0100 Subject: [PATCH 09/48] chore: add resource under devops:infrastructure-as-code:kubernetes --- .../devops/content/105-infrastructure-as-code/104-kubernetes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/104-kubernetes.md b/src/data/roadmaps/devops/content/105-infrastructure-as-code/104-kubernetes.md index d13d0efb3..d767eda20 100644 --- a/src/data/roadmaps/devops/content/105-infrastructure-as-code/104-kubernetes.md +++ b/src/data/roadmaps/devops/content/105-infrastructure-as-code/104-kubernetes.md @@ -11,3 +11,5 @@ Visit the following resources to learn more: - [Kubernetes Crash Course for Absolute Beginners](https://www.youtube.com/watch?v=s_o8dwzRlu4) - [Primer: How Kubernetes Came to Be, What It Is, and Why You Should Care](https://thenewstack.io/primer-how-kubernetes-came-to-be-what-it-is-and-why-you-should-care/) - [Kubernetes: An Overview](https://thenewstack.io/kubernetes-an-overview/) +- [Kubernetes Tutorials by Kubernetes](https://kubernetes.io/docs/tutorials/) +- [Fast Kubernetes course with practical labs](https://github.com/omerbsezer/fast-kubernetes) \ No newline at end of file From 52818f1e34e1996d4b288774940262edcc8dad35 Mon Sep 17 00:00:00 2001 From: roadmap bot <135830415+roadmap-bot@users.noreply.github.com> Date: Fri, 9 Jun 2023 21:01:17 +0100 Subject: [PATCH 10/48] chore: add resource under blockchain:blockchain-basics --- .../roadmaps/blockchain/content/100-blockchain-basics/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/roadmaps/blockchain/content/100-blockchain-basics/index.md b/src/data/roadmaps/blockchain/content/100-blockchain-basics/index.md index 2598730d3..780c86ec8 100644 --- a/src/data/roadmaps/blockchain/content/100-blockchain-basics/index.md +++ b/src/data/roadmaps/blockchain/content/100-blockchain-basics/index.md @@ -8,3 +8,4 @@ Visit the following resources to learn more: - [Blockchain Explained](https://www.investopedia.com/terms/b/blockchain.asp) - [How does a blockchain work?](https://youtu.be/SSo_EIwHSd4) - [What Is a Blockchain? | Blockchain Basics for Developers](https://youtu.be/4ff9esY_4aU) +- [An Elementary and Slightly Distilled Introduction to Blockchain](https://markpetherbridge.co.uk/blog/an-elementary-and-slightly-distilled-introduction-to-blockchain/) \ No newline at end of file From bf6169715474896d5f5cdb86f34aa556c662684b Mon Sep 17 00:00:00 2001 From: roadmap bot <135830415+roadmap-bot@users.noreply.github.com> Date: Fri, 9 Jun 2023 21:01:31 +0100 Subject: [PATCH 11/48] chore: add resource under react:hooks:common-hooks --- src/data/roadmaps/react/content/104-hooks/102-common-hooks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/roadmaps/react/content/104-hooks/102-common-hooks.md b/src/data/roadmaps/react/content/104-hooks/102-common-hooks.md index 0750b971e..d1bf9cf68 100644 --- a/src/data/roadmaps/react/content/104-hooks/102-common-hooks.md +++ b/src/data/roadmaps/react/content/104-hooks/102-common-hooks.md @@ -23,3 +23,4 @@ Visit the following resources to learn more: - [useContext Hook by Example](https://www.robinwieruch.de/react-usecontext-hook/) - [useReducer Hook by Example](https://www.robinwieruch.de/react-usereducer-hook/) - [useReducer vs useState Hook](https://www.robinwieruch.de/react-usereducer-vs-usestate/) +- [useDefferedValue Hook video](https://www.youtube.com/watch?v=jcgmedd6iwa) \ No newline at end of file From 311b4683d0e311a63983585e267ed55eca1ef5bc Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Wed, 7 Jun 2023 23:08:32 +0100 Subject: [PATCH 12/48] Rewrite devops roadmap --- scripts/roadmap-content.cjs | 7 +- scripts/roadmap-dirs.cjs | 3 +- .../103-windows.md} | 0 .../index.md | 0 .../linux/100-ubuntu.md} | 0 .../linux/101-suse-linux.md} | 0 .../linux/102-rhel.md} | 0 .../101-operating-systems/linux/index.md | 1 + .../unix/100-free-bsd.md} | 0 .../unix/101-open-bsd.md} | 0 .../unix/102-net-bsd.md} | 0 .../101-operating-systems/unix/index.md | 1 + .../content/101-os-concepts/100-networking.md | 11 - .../101-os-concepts/101-io-management.md | 9 - .../101-os-concepts/102-virtualization.md | 9 - .../101-os-concepts/103-memory-storage.md | 10 - .../101-os-concepts/104-file-system.md | 7 - .../content/101-os-concepts/105-sockets.md | 12 - .../content/101-os-concepts/106-posix.md | 15 - .../content/101-os-concepts/107-processes.md | 15 - .../101-os-concepts/108-startup-management.md | 11 - .../101-os-concepts/109-service-management.md | 11 - .../110-threads-concurrency.md | 19 - .../devops/content/101-os-concepts/index.md | 9 - .../102-editors.md} | 0 .../103-process-monitoring.md | 37 + .../104-performance-monitoring.md | 32 + .../105-networking-tools.md | 74 + .../106-text-manipulation.md | 80 + .../index.md | 0 .../scripting/100-bash-scripting.md | 1 + .../scripting/101-powershell.md | 1 + .../102-live-in-terminal/scripting/index.md | 1 + .../100-screen-multiplexer.md | 10 - .../100-terminal-multiplexers.md | 8 - .../101-tmux-multiplexer.md | 12 - .../101-live-in-terminal/102-ps.md | 11 - .../101-live-in-terminal/102-top.md | 10 - .../101-live-in-terminal/103-htop.md | 8 - .../101-live-in-terminal/104-atop.md | 8 - .../104-bash-scripting.md | 19 - .../101-live-in-terminal/105-lsof.md | 10 - .../106-compiling-apps.md | 21 - .../101-live-in-terminal/106-nmon.md | 8 - .../101-live-in-terminal/107-iostat.md | 8 - .../101-live-in-terminal/108-sar.md | 10 - .../101-live-in-terminal/109-vmstat.md | 10 - .../101-live-in-terminal/110-traceroute.md | 10 - .../101-live-in-terminal/111-mtr.md | 11 - .../101-live-in-terminal/112-ping.md | 10 - .../101-live-in-terminal/113-nmap.md | 8 - .../101-live-in-terminal/114-netstat.md | 10 - .../101-live-in-terminal/116-tcpdump.md | 10 - .../101-live-in-terminal/118-iptables.md | 8 - .../101-live-in-terminal/119-dig.md | 13 - .../101-live-in-terminal/120-awk.md | 13 - .../101-live-in-terminal/121-sed.md | 13 - .../101-live-in-terminal/122-grep.md | 13 - .../101-live-in-terminal/123-sort.md | 13 - .../101-live-in-terminal/124-cut.md | 10 - .../101-live-in-terminal/125-uniq.md | 10 - .../101-live-in-terminal/126-cat.md | 17 - .../101-live-in-terminal/127-echo.md | 10 - .../101-live-in-terminal/128-fmt.md | 9 - .../101-live-in-terminal/129-tr.md | 10 - .../101-live-in-terminal/130-nl.md | 10 - .../101-live-in-terminal/131-wc.md | 10 - .../101-live-in-terminal/134-strace.md | 8 - .../101-live-in-terminal/135-dtrace.md | 8 - .../101-live-in-terminal/136-systemtap.md | 1 - .../101-live-in-terminal/137-uname.md | 9 - .../101-live-in-terminal/138-df.md | 9 - .../101-live-in-terminal/139-history.md | 9 - .../101-live-in-terminal/140-du.md | 9 - .../101-live-in-terminal/141-scp.md | 9 - .../101-live-in-terminal/142-ufw.md | 9 - .../content/102-managing-servers/index.md | 7 - .../107-port-forwarding.md | 8 - .../103-version-control-systems/100-git.md | 9 + .../103-version-control-systems/index.md | 8 + .../content/104-vcs-hosting/100-github.md | 13 + .../content/104-vcs-hosting/101-gitlab.md | 8 + .../content/104-vcs-hosting/102-bitbucket.md | 14 + .../devops/content/104-vcs-hosting/index.md | 10 + .../105-infrastructure-as-code/100-docker.md | 11 - .../102-configuration-management/102-salt.md | 10 - .../104-kubernetes.md | 15 - .../105-infrastructure-as-code/104-nomad.md | 9 - .../105-infrastructure-as-code/index.md | 12 - .../100-reverse-proxy.md | 0 .../101-caching-server.md | 0 .../102-forward-proxy.md | 0 .../103-load-balancer.md | 0 .../104-firewall.md | 0 .../105-nginx.md | 0 .../106-apache.md | 0 .../107-tomcat.md | 0 .../108-iis.md | 0 .../index.md | 0 .../100-aws.md | 0 .../101-google-cloud.md | 0 .../102-azure.md | 0 .../103-heroku.md | 0 .../104-albaba-cloud.md | 0 .../104-digital-ocean.md | 0 .../105-linode.md | 0 .../106-vultr.md | 0 .../index.md | 0 .../101-nagios.md | 9 - .../102-monit.md | 13 - .../101-application-monitoring/103-instana.md | 8 - .../devops/content/107-monitoring/index.md | 8 - .../108-cloud-providers/108-IBM-Cloud.md | 14 - .../content/109-serverless/100-cloudflare.md | 2 + .../content/109-serverless/101-aws-lambda.md | 1 + .../109-serverless/102-azure-functions.md | 1 + .../109-serverless/103-gcp-functions.md | 1 + .../content/109-serverless/104-vercel.md | 1 + .../content/109-serverless/105-netlify.md | 1 + .../devops/content/109-serverless/index.md | 1 + .../100-aws-cdk.md} | 0 .../102-cloudformation.md | 0 .../103-pulumi.md | 0 .../103-terraform.md} | 0 .../index.md | 0 .../100-ansible.md | 0 .../101-chef.md | 0 .../102-puppet.md} | 0 .../index.md | 0 .../{106-ci-cd => 112-ci-cd}/100-gitlab-ci.md | 0 .../{106-ci-cd => 112-ci-cd}/101-jenkins.md | 0 .../102-github-actions.md | 0 .../{106-ci-cd => 112-ci-cd}/103-travis-ci.md | 0 .../{106-ci-cd => 112-ci-cd}/105-teamcity.md | 0 .../106-azure-devops-services.md | 0 .../{106-ci-cd => 112-ci-cd}/107-circle-ci.md | 0 .../{106-ci-cd => 112-ci-cd}/108-drone.md | 0 .../content/{106-ci-cd => 112-ci-cd}/index.md | 0 .../100-vault.md | 0 .../101-sops.md | 0 .../102-sealed-secrets.md | 0 .../103-cloud-specific-tools.md | 0 .../index.md | 0 .../100-prometheus.md | 0 .../102-datadog.md | 0 .../102-grafana.md | 0 .../102-zabbix.md | 0 .../index.md | 0 .../100-jaeger.md | 0 .../101-new-relic.md | 0 .../115-application-monitoring/102-datadog.md | 8 + .../104-open-telemetry.md | 0 .../105-app-dynamics.md} | 0 .../index.md | 0 .../100-elastic-stack.md | 0 .../101-graylog.md | 0 .../102-papertrail.md | 0 .../102-splunk.md | 0 .../103-loki.md | 0 .../index.md | 0 .../100-docker-swarm.md} | 0 .../101-lxc.md => 117-containers/100-lxc.md} | 0 .../content/117-containers/101-gke-eks-aks.md | 14 + .../content/117-containers/102-ecs-fargate.md | 5 + .../index.md} | 0 .../content/118-artifcats/100-artifactory.md | 1 + .../devops/content/118-artifcats/101-nexus.md | 1 + .../content/118-artifcats/102-cloud-smith.md | 1 + .../devops/content/118-artifcats/index.md | 1 + .../104-gitops => 119-gitops}/100-argo-cd.md | 0 .../104-gitops => 119-gitops}/101-flux-cd.md | 0 .../104-gitops => 119-gitops}/index.md | 0 .../100-istio.md} | 0 .../101-consul.md} | 0 .../102-linkerd.md} | 0 .../103-envoy.md} | 0 .../index.md | 0 src/data/roadmaps/devops/content/index.md | 1 + src/data/roadmaps/devops/devops.json | 16601 +++++++--------- 179 files changed, 7114 insertions(+), 10531 deletions(-) rename src/data/roadmaps/devops/content/{102-managing-servers/100-operating-system/100-windows.md => 101-operating-systems/103-windows.md} (100%) rename src/data/roadmaps/devops/content/{102-managing-servers/100-operating-system => 101-operating-systems}/index.md (100%) rename src/data/roadmaps/devops/content/{102-managing-servers/100-operating-system/102-ubuntu.md => 101-operating-systems/linux/100-ubuntu.md} (100%) rename src/data/roadmaps/devops/content/{102-managing-servers/100-operating-system/103-suse-linux.md => 101-operating-systems/linux/101-suse-linux.md} (100%) rename src/data/roadmaps/devops/content/{102-managing-servers/100-operating-system/104-rhel.md => 101-operating-systems/linux/102-rhel.md} (100%) create mode 100644 src/data/roadmaps/devops/content/101-operating-systems/linux/index.md rename src/data/roadmaps/devops/content/{102-managing-servers/100-operating-system/107-free-bsd.md => 101-operating-systems/unix/100-free-bsd.md} (100%) rename src/data/roadmaps/devops/content/{102-managing-servers/100-operating-system/108-open-bsd.md => 101-operating-systems/unix/101-open-bsd.md} (100%) rename src/data/roadmaps/devops/content/{102-managing-servers/100-operating-system/109-net-bsd.md => 101-operating-systems/unix/102-net-bsd.md} (100%) create mode 100644 src/data/roadmaps/devops/content/101-operating-systems/unix/index.md delete mode 100644 src/data/roadmaps/devops/content/101-os-concepts/100-networking.md delete mode 100644 src/data/roadmaps/devops/content/101-os-concepts/101-io-management.md delete mode 100644 src/data/roadmaps/devops/content/101-os-concepts/102-virtualization.md delete mode 100644 src/data/roadmaps/devops/content/101-os-concepts/103-memory-storage.md delete mode 100644 src/data/roadmaps/devops/content/101-os-concepts/104-file-system.md delete mode 100644 src/data/roadmaps/devops/content/101-os-concepts/105-sockets.md delete mode 100644 src/data/roadmaps/devops/content/101-os-concepts/106-posix.md delete mode 100644 src/data/roadmaps/devops/content/101-os-concepts/107-processes.md delete mode 100644 src/data/roadmaps/devops/content/101-os-concepts/108-startup-management.md delete mode 100644 src/data/roadmaps/devops/content/101-os-concepts/109-service-management.md delete mode 100644 src/data/roadmaps/devops/content/101-os-concepts/110-threads-concurrency.md delete mode 100644 src/data/roadmaps/devops/content/101-os-concepts/index.md rename src/data/roadmaps/devops/content/{102-managing-servers/101-live-in-terminal/105-editors.md => 102-live-in-terminal/102-editors.md} (100%) create mode 100644 src/data/roadmaps/devops/content/102-live-in-terminal/103-process-monitoring.md create mode 100644 src/data/roadmaps/devops/content/102-live-in-terminal/104-performance-monitoring.md create mode 100644 src/data/roadmaps/devops/content/102-live-in-terminal/105-networking-tools.md create mode 100644 src/data/roadmaps/devops/content/102-live-in-terminal/106-text-manipulation.md rename src/data/roadmaps/devops/content/{102-managing-servers/101-live-in-terminal => 102-live-in-terminal}/index.md (100%) create mode 100644 src/data/roadmaps/devops/content/102-live-in-terminal/scripting/100-bash-scripting.md create mode 100644 src/data/roadmaps/devops/content/102-live-in-terminal/scripting/101-powershell.md create mode 100644 src/data/roadmaps/devops/content/102-live-in-terminal/scripting/index.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/100-screen-multiplexer.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/100-terminal-multiplexers.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/101-tmux-multiplexer.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/102-ps.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/102-top.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/103-htop.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/104-atop.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/104-bash-scripting.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/105-lsof.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/106-compiling-apps.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/106-nmon.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/107-iostat.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/108-sar.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/109-vmstat.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/110-traceroute.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/111-mtr.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/112-ping.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/113-nmap.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/114-netstat.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/116-tcpdump.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/118-iptables.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/119-dig.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/120-awk.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/121-sed.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/122-grep.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/123-sort.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/124-cut.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/125-uniq.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/126-cat.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/127-echo.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/128-fmt.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/129-tr.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/130-nl.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/131-wc.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/134-strace.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/135-dtrace.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/136-systemtap.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/137-uname.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/138-df.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/139-history.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/140-du.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/141-scp.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/142-ufw.md delete mode 100644 src/data/roadmaps/devops/content/102-managing-servers/index.md delete mode 100644 src/data/roadmaps/devops/content/103-networking-protocols/107-port-forwarding.md create mode 100644 src/data/roadmaps/devops/content/103-version-control-systems/100-git.md create mode 100644 src/data/roadmaps/devops/content/103-version-control-systems/index.md create mode 100644 src/data/roadmaps/devops/content/104-vcs-hosting/100-github.md create mode 100644 src/data/roadmaps/devops/content/104-vcs-hosting/101-gitlab.md create mode 100644 src/data/roadmaps/devops/content/104-vcs-hosting/102-bitbucket.md create mode 100644 src/data/roadmaps/devops/content/104-vcs-hosting/index.md delete mode 100644 src/data/roadmaps/devops/content/105-infrastructure-as-code/100-docker.md delete mode 100644 src/data/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/102-salt.md delete mode 100644 src/data/roadmaps/devops/content/105-infrastructure-as-code/104-kubernetes.md delete mode 100644 src/data/roadmaps/devops/content/105-infrastructure-as-code/104-nomad.md delete mode 100644 src/data/roadmaps/devops/content/105-infrastructure-as-code/index.md rename src/data/roadmaps/devops/content/{104-setting-up-x => 105-setting-up-x}/100-reverse-proxy.md (100%) rename src/data/roadmaps/devops/content/{104-setting-up-x => 105-setting-up-x}/101-caching-server.md (100%) rename src/data/roadmaps/devops/content/{104-setting-up-x => 105-setting-up-x}/102-forward-proxy.md (100%) rename src/data/roadmaps/devops/content/{104-setting-up-x => 105-setting-up-x}/103-load-balancer.md (100%) rename src/data/roadmaps/devops/content/{104-setting-up-x => 105-setting-up-x}/104-firewall.md (100%) rename src/data/roadmaps/devops/content/{104-setting-up-x => 105-setting-up-x}/105-nginx.md (100%) rename src/data/roadmaps/devops/content/{104-setting-up-x => 105-setting-up-x}/106-apache.md (100%) rename src/data/roadmaps/devops/content/{104-setting-up-x => 105-setting-up-x}/107-tomcat.md (100%) rename src/data/roadmaps/devops/content/{104-setting-up-x => 105-setting-up-x}/108-iis.md (100%) rename src/data/roadmaps/devops/content/{104-setting-up-x => 105-setting-up-x}/index.md (100%) rename src/data/roadmaps/devops/content/{108-cloud-providers => 107-cloud-providers}/100-aws.md (100%) rename src/data/roadmaps/devops/content/{108-cloud-providers => 107-cloud-providers}/101-google-cloud.md (100%) rename src/data/roadmaps/devops/content/{108-cloud-providers => 107-cloud-providers}/102-azure.md (100%) rename src/data/roadmaps/devops/content/{108-cloud-providers => 107-cloud-providers}/103-heroku.md (100%) rename src/data/roadmaps/devops/content/{108-cloud-providers => 107-cloud-providers}/104-albaba-cloud.md (100%) rename src/data/roadmaps/devops/content/{108-cloud-providers => 107-cloud-providers}/104-digital-ocean.md (100%) rename src/data/roadmaps/devops/content/{108-cloud-providers => 107-cloud-providers}/105-linode.md (100%) rename src/data/roadmaps/devops/content/{108-cloud-providers => 107-cloud-providers}/106-vultr.md (100%) rename src/data/roadmaps/devops/content/{108-cloud-providers => 107-cloud-providers}/index.md (100%) delete mode 100644 src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/101-nagios.md delete mode 100644 src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-monit.md delete mode 100644 src/data/roadmaps/devops/content/107-monitoring/101-application-monitoring/103-instana.md delete mode 100644 src/data/roadmaps/devops/content/107-monitoring/index.md delete mode 100644 src/data/roadmaps/devops/content/108-cloud-providers/108-IBM-Cloud.md create mode 100644 src/data/roadmaps/devops/content/109-serverless/100-cloudflare.md create mode 100644 src/data/roadmaps/devops/content/109-serverless/101-aws-lambda.md create mode 100644 src/data/roadmaps/devops/content/109-serverless/102-azure-functions.md create mode 100644 src/data/roadmaps/devops/content/109-serverless/103-gcp-functions.md create mode 100644 src/data/roadmaps/devops/content/109-serverless/104-vercel.md create mode 100644 src/data/roadmaps/devops/content/109-serverless/105-netlify.md create mode 100644 src/data/roadmaps/devops/content/109-serverless/index.md rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/103-infrastructure-provisioning/101-aws-cdk.md => 110-infrastructure-provisioning/100-aws-cdk.md} (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/103-infrastructure-provisioning => 110-infrastructure-provisioning}/102-cloudformation.md (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/103-infrastructure-provisioning => 110-infrastructure-provisioning}/103-pulumi.md (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/103-infrastructure-provisioning/100-terraform.md => 110-infrastructure-provisioning/103-terraform.md} (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/103-infrastructure-provisioning => 110-infrastructure-provisioning}/index.md (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/102-configuration-management => 111-configuration-management}/100-ansible.md (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/102-configuration-management => 111-configuration-management}/101-chef.md (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/102-configuration-management/103-puppet.md => 111-configuration-management/102-puppet.md} (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/102-configuration-management => 111-configuration-management}/index.md (100%) rename src/data/roadmaps/devops/content/{106-ci-cd => 112-ci-cd}/100-gitlab-ci.md (100%) rename src/data/roadmaps/devops/content/{106-ci-cd => 112-ci-cd}/101-jenkins.md (100%) rename src/data/roadmaps/devops/content/{106-ci-cd => 112-ci-cd}/102-github-actions.md (100%) rename src/data/roadmaps/devops/content/{106-ci-cd => 112-ci-cd}/103-travis-ci.md (100%) rename src/data/roadmaps/devops/content/{106-ci-cd => 112-ci-cd}/105-teamcity.md (100%) rename src/data/roadmaps/devops/content/{106-ci-cd => 112-ci-cd}/106-azure-devops-services.md (100%) rename src/data/roadmaps/devops/content/{106-ci-cd => 112-ci-cd}/107-circle-ci.md (100%) rename src/data/roadmaps/devops/content/{106-ci-cd => 112-ci-cd}/108-drone.md (100%) rename src/data/roadmaps/devops/content/{106-ci-cd => 112-ci-cd}/index.md (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/105-secret-management => 113-secret-management}/100-vault.md (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/105-secret-management => 113-secret-management}/101-sops.md (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/105-secret-management => 113-secret-management}/102-sealed-secrets.md (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/105-secret-management => 113-secret-management}/103-cloud-specific-tools.md (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/105-secret-management => 113-secret-management}/index.md (100%) rename src/data/roadmaps/devops/content/{107-monitoring/100-infrastructure-monitoring => 114-infrastructure-monitoring}/100-prometheus.md (100%) rename src/data/roadmaps/devops/content/{107-monitoring/100-infrastructure-monitoring => 114-infrastructure-monitoring}/102-datadog.md (100%) rename src/data/roadmaps/devops/content/{107-monitoring/100-infrastructure-monitoring => 114-infrastructure-monitoring}/102-grafana.md (100%) rename src/data/roadmaps/devops/content/{107-monitoring/100-infrastructure-monitoring => 114-infrastructure-monitoring}/102-zabbix.md (100%) rename src/data/roadmaps/devops/content/{107-monitoring/100-infrastructure-monitoring => 114-infrastructure-monitoring}/index.md (100%) rename src/data/roadmaps/devops/content/{107-monitoring/101-application-monitoring => 115-application-monitoring}/100-jaeger.md (100%) rename src/data/roadmaps/devops/content/{107-monitoring/101-application-monitoring => 115-application-monitoring}/101-new-relic.md (100%) create mode 100644 src/data/roadmaps/devops/content/115-application-monitoring/102-datadog.md rename src/data/roadmaps/devops/content/{107-monitoring/101-application-monitoring => 115-application-monitoring}/104-open-telemetry.md (100%) rename src/data/roadmaps/devops/content/{107-monitoring/101-application-monitoring/102-app-dynamics.md => 115-application-monitoring/105-app-dynamics.md} (100%) rename src/data/roadmaps/devops/content/{107-monitoring/101-application-monitoring => 115-application-monitoring}/index.md (100%) rename src/data/roadmaps/devops/content/{107-monitoring/102-logs-management => 116-logs-management}/100-elastic-stack.md (100%) rename src/data/roadmaps/devops/content/{107-monitoring/102-logs-management => 116-logs-management}/101-graylog.md (100%) rename src/data/roadmaps/devops/content/{107-monitoring/102-logs-management => 116-logs-management}/102-papertrail.md (100%) rename src/data/roadmaps/devops/content/{107-monitoring/102-logs-management => 116-logs-management}/102-splunk.md (100%) rename src/data/roadmaps/devops/content/{107-monitoring/102-logs-management => 116-logs-management}/103-loki.md (100%) rename src/data/roadmaps/devops/content/{107-monitoring/102-logs-management => 116-logs-management}/index.md (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/104-docker-swarm.md => 117-containers/100-docker-swarm.md} (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/101-lxc.md => 117-containers/100-lxc.md} (100%) create mode 100644 src/data/roadmaps/devops/content/117-containers/101-gke-eks-aks.md create mode 100644 src/data/roadmaps/devops/content/117-containers/102-ecs-fargate.md rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/101-containers.md => 117-containers/index.md} (100%) create mode 100644 src/data/roadmaps/devops/content/118-artifcats/100-artifactory.md create mode 100644 src/data/roadmaps/devops/content/118-artifcats/101-nexus.md create mode 100644 src/data/roadmaps/devops/content/118-artifcats/102-cloud-smith.md create mode 100644 src/data/roadmaps/devops/content/118-artifcats/index.md rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/104-gitops => 119-gitops}/100-argo-cd.md (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/104-gitops => 119-gitops}/101-flux-cd.md (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/104-gitops => 119-gitops}/index.md (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/100-service-mesh/101-istio.md => 120-service-mesh/100-istio.md} (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/100-service-mesh/100-consul.md => 120-service-mesh/101-consul.md} (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/100-service-mesh/103-linkerd.md => 120-service-mesh/102-linkerd.md} (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/100-service-mesh/102-envoy.md => 120-service-mesh/103-envoy.md} (100%) rename src/data/roadmaps/devops/content/{105-infrastructure-as-code/100-service-mesh => 120-service-mesh}/index.md (100%) create mode 100644 src/data/roadmaps/devops/content/index.md diff --git a/scripts/roadmap-content.cjs b/scripts/roadmap-content.cjs index c31ead944..841734e94 100644 --- a/scripts/roadmap-content.cjs +++ b/scripts/roadmap-content.cjs @@ -3,7 +3,6 @@ const path = require('path'); const OPEN_AI_API_KEY = process.env.OPEN_AI_API_KEY; const ALL_ROADMAPS_DIR = path.join(__dirname, '../src/data/roadmaps'); -const ROADMAP_JSON_DIR = path.join(__dirname, '../public/jsons/roadmaps'); const roadmapId = process.argv[2]; @@ -139,7 +138,11 @@ async function writeFileForGroup(group, topicUrlToPathMapping) { async function run() { const topicUrlToPathMapping = getFilesInFolder(ROADMAP_CONTENT_DIR); - const roadmapJson = require(path.join(ROADMAP_JSON_DIR, `${roadmapId}.json`)); + const roadmapJson = require(path.join( + ALL_ROADMAPS_DIR, + `${roadmapId}/${roadmapId}` + )); + const groups = roadmapJson?.mockup?.controls?.control?.filter( (control) => control.typeID === '__group__' && diff --git a/scripts/roadmap-dirs.cjs b/scripts/roadmap-dirs.cjs index 92490bc72..8d9ef12ee 100644 --- a/scripts/roadmap-dirs.cjs +++ b/scripts/roadmap-dirs.cjs @@ -84,8 +84,9 @@ function prepareDirTree(control, dirTree, dirSortOrders) { const roadmap = require(path.join( __dirname, - `../public/jsons/roadmaps/${roadmapId}` + `../src/data/roadmaps/${roadmapId}/${roadmapId}` )); + const controls = roadmap.mockup.controls.control; // Prepare the dir tree that we will be creating and also calculate the sort orders diff --git a/src/data/roadmaps/devops/content/102-managing-servers/100-operating-system/100-windows.md b/src/data/roadmaps/devops/content/101-operating-systems/103-windows.md similarity index 100% rename from src/data/roadmaps/devops/content/102-managing-servers/100-operating-system/100-windows.md rename to src/data/roadmaps/devops/content/101-operating-systems/103-windows.md diff --git a/src/data/roadmaps/devops/content/102-managing-servers/100-operating-system/index.md b/src/data/roadmaps/devops/content/101-operating-systems/index.md similarity index 100% rename from src/data/roadmaps/devops/content/102-managing-servers/100-operating-system/index.md rename to src/data/roadmaps/devops/content/101-operating-systems/index.md diff --git a/src/data/roadmaps/devops/content/102-managing-servers/100-operating-system/102-ubuntu.md b/src/data/roadmaps/devops/content/101-operating-systems/linux/100-ubuntu.md similarity index 100% rename from src/data/roadmaps/devops/content/102-managing-servers/100-operating-system/102-ubuntu.md rename to src/data/roadmaps/devops/content/101-operating-systems/linux/100-ubuntu.md diff --git a/src/data/roadmaps/devops/content/102-managing-servers/100-operating-system/103-suse-linux.md b/src/data/roadmaps/devops/content/101-operating-systems/linux/101-suse-linux.md similarity index 100% rename from src/data/roadmaps/devops/content/102-managing-servers/100-operating-system/103-suse-linux.md rename to src/data/roadmaps/devops/content/101-operating-systems/linux/101-suse-linux.md diff --git a/src/data/roadmaps/devops/content/102-managing-servers/100-operating-system/104-rhel.md b/src/data/roadmaps/devops/content/101-operating-systems/linux/102-rhel.md similarity index 100% rename from src/data/roadmaps/devops/content/102-managing-servers/100-operating-system/104-rhel.md rename to src/data/roadmaps/devops/content/101-operating-systems/linux/102-rhel.md diff --git a/src/data/roadmaps/devops/content/101-operating-systems/linux/index.md b/src/data/roadmaps/devops/content/101-operating-systems/linux/index.md new file mode 100644 index 000000000..a1807970a --- /dev/null +++ b/src/data/roadmaps/devops/content/101-operating-systems/linux/index.md @@ -0,0 +1 @@ +# Linux \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/102-managing-servers/100-operating-system/107-free-bsd.md b/src/data/roadmaps/devops/content/101-operating-systems/unix/100-free-bsd.md similarity index 100% rename from src/data/roadmaps/devops/content/102-managing-servers/100-operating-system/107-free-bsd.md rename to src/data/roadmaps/devops/content/101-operating-systems/unix/100-free-bsd.md diff --git a/src/data/roadmaps/devops/content/102-managing-servers/100-operating-system/108-open-bsd.md b/src/data/roadmaps/devops/content/101-operating-systems/unix/101-open-bsd.md similarity index 100% rename from src/data/roadmaps/devops/content/102-managing-servers/100-operating-system/108-open-bsd.md rename to src/data/roadmaps/devops/content/101-operating-systems/unix/101-open-bsd.md diff --git a/src/data/roadmaps/devops/content/102-managing-servers/100-operating-system/109-net-bsd.md b/src/data/roadmaps/devops/content/101-operating-systems/unix/102-net-bsd.md similarity index 100% rename from src/data/roadmaps/devops/content/102-managing-servers/100-operating-system/109-net-bsd.md rename to src/data/roadmaps/devops/content/101-operating-systems/unix/102-net-bsd.md diff --git a/src/data/roadmaps/devops/content/101-operating-systems/unix/index.md b/src/data/roadmaps/devops/content/101-operating-systems/unix/index.md new file mode 100644 index 000000000..106aea125 --- /dev/null +++ b/src/data/roadmaps/devops/content/101-operating-systems/unix/index.md @@ -0,0 +1 @@ +# Unix \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/101-os-concepts/100-networking.md b/src/data/roadmaps/devops/content/101-os-concepts/100-networking.md deleted file mode 100644 index 6ffeb9103..000000000 --- a/src/data/roadmaps/devops/content/101-os-concepts/100-networking.md +++ /dev/null @@ -1,11 +0,0 @@ -# Networking - -Computer networking refers to interconnected computing devices that can exchange data and share resources with each other. These networked devices use a system of rules, called communications protocols, to transmit information over physical or wireless technologies. - -Begin by studying the [OSI Model](https://en.wikipedia.org/wiki/OSI_model). This model will assist in constructing an understanding of the linked topics, and help you contextualize the items linked to the Networking, Security, and Protocols node. Higher level networking concepts may be implemented and named differently across cloud providers. Don't let this confuse you - the basics of TCP/IP are useful and used in the same ways across all implementations. - -Visit the following resources to learn more: - -- [What is Computer Networking?](https://aws.amazon.com/what-is/computer-networking/) -- [Full Networking Course](https://youtu.be/IPvYjXCsTg8) -- [OSI Model Explained](https://www.youtube.com/watch?v=dV8mjZd1OtU) diff --git a/src/data/roadmaps/devops/content/101-os-concepts/101-io-management.md b/src/data/roadmaps/devops/content/101-os-concepts/101-io-management.md deleted file mode 100644 index f87ac2f68..000000000 --- a/src/data/roadmaps/devops/content/101-os-concepts/101-io-management.md +++ /dev/null @@ -1,9 +0,0 @@ -# I/O Management - -One of the important jobs of an Operating System is to manage various I/O devices including mouse, keyboards, touchpad, disk drives, display adapters, USB devices, Bit-mapped screens, LED, Analog-to-digital converter, On/off switch, network connections, audio I/O, printers, etc. - -Visit the following resources to learn more: - -- [Operating System - I/O Hardware](https://www.tutorialspoint.com/operating_system/os_io_hardware.htm) -- [IO Management](https://www.omscs-notes.com/operating-systems/io-management/) -- [Basics of OS (I/O Structure)](https://www.youtube.com/watch?v=F18RiREDkwE) diff --git a/src/data/roadmaps/devops/content/101-os-concepts/102-virtualization.md b/src/data/roadmaps/devops/content/101-os-concepts/102-virtualization.md deleted file mode 100644 index 8998150d7..000000000 --- a/src/data/roadmaps/devops/content/101-os-concepts/102-virtualization.md +++ /dev/null @@ -1,9 +0,0 @@ -# Virtualization - -Virtualization is the creation of a virtual -- rather than actual -- version of something, such as an operating system (OS), a server, a storage device or network resources. It uses software that simulates hardware functionality to create a virtual system. This practice allows IT organizations to operate multiple operating systems, more than one virtual system and various applications on a single server. - -Visit the following resources to learn more: - -- [What is Virtualization? and its types?](https://www.techtarget.com/searchitoperations/definition/virtualization) -- [What is Hypervisor and VM?](https://opensource.com/resources/virtualization) -- [Containers vs VM](https://www.atlassian.com/microservices/cloud-computing/containers-vs-vms) diff --git a/src/data/roadmaps/devops/content/101-os-concepts/103-memory-storage.md b/src/data/roadmaps/devops/content/101-os-concepts/103-memory-storage.md deleted file mode 100644 index 3768c5675..000000000 --- a/src/data/roadmaps/devops/content/101-os-concepts/103-memory-storage.md +++ /dev/null @@ -1,10 +0,0 @@ -# Memory Management - -The term Memory can be defined as a collection of data in a specific format. It is used to store instructions and process data. The memory comprises a large array or group of words or bytes, each with its own location. The primary motive of a computer system is to execute programs. These programs, along with the information they access, should be in the main memory during execution. The CPU fetches instructions from memory according to the value of the program counter. - -To achieve a degree of multiprogramming and proper utilization of memory, memory management is important. There are several memory management methods, reflecting various approaches, and the effectiveness of each algorithm depends on the situation. - -Visit the following resources to learn more: - -- [Demystifying memory management in modern programming languages](https://dev.to/deepu105/demystifying-memory-management-in-modern-programming-languages-ddd) -- [Memory Management in Operating System](https://www.geeksforgeeks.org/memory-management-in-operating-system/) diff --git a/src/data/roadmaps/devops/content/101-os-concepts/104-file-system.md b/src/data/roadmaps/devops/content/101-os-concepts/104-file-system.md deleted file mode 100644 index c94ef9cdd..000000000 --- a/src/data/roadmaps/devops/content/101-os-concepts/104-file-system.md +++ /dev/null @@ -1,7 +0,0 @@ -# File System - -A file is a named collection of related information recorded on secondary storage such as magnetic disks, magnetic tapes, and optical disks. Generally, a file is a sequence of bits, bytes, lines, or records whose meaning is defined by the file's creator and user. - -Visit the following resources to learn more: - -- [Operating System - File System](https://www.tutorialspoint.com/operating_system/os_file_system.htm) diff --git a/src/data/roadmaps/devops/content/101-os-concepts/105-sockets.md b/src/data/roadmaps/devops/content/101-os-concepts/105-sockets.md deleted file mode 100644 index 049ac30d7..000000000 --- a/src/data/roadmaps/devops/content/101-os-concepts/105-sockets.md +++ /dev/null @@ -1,12 +0,0 @@ -# Sockets - -Socket is an endpoint of a two way **communication** link between **two different processes** on the network (same or different machines). The socket mechanism provides a means of inter-process communication (IPC) by establishing named contact points between client and server. It is the combination of IP Address and Port Number. - -e.g. `http://192.168.0.1:8080` - -Visit the following resources to learn more: - -- [What are Sockets?](https://www.geeksforgeeks.org/socket-in-computer-network/) -- [Types of Sockets](https://www.tutorialspoint.com/unix_sockets/what_is_socket.htm) -- [Port vs Socket](https://www.baeldung.com/cs/port-vs-socket) -- [Socket.io Library Bidirectional and low-latency communication for every platform](https://socket.io/) diff --git a/src/data/roadmaps/devops/content/101-os-concepts/106-posix.md b/src/data/roadmaps/devops/content/101-os-concepts/106-posix.md deleted file mode 100644 index dc61acd18..000000000 --- a/src/data/roadmaps/devops/content/101-os-concepts/106-posix.md +++ /dev/null @@ -1,15 +0,0 @@ -# POSIX Basics - -POSIX (Portable Operating System Interface) is a family of standards for maintaining compatibility between operating systems. It describes utilities, APIs, and services that a compliant OS should provide to software, thus making it easier to port programs from one system to another. - -A practical example: in a Unix-like operating system, there are three _standard streams_, `stdin`, `stdout` and `stderr` - they are I/O connections that you will probably come across when using a terminal, as they manage the flow from the **standard input** (stdin), **standard output** (stdout) and **standard error** (stderr). - -So, in this case, when we want to interact with any of these streams (through a process, for example), the POSIX operating system API makes it easier - for example, in the `` C header where the stdin, stderr, and stdout are defined as `STDIN_FILENO`, `STDERR_FILENO` and `STDOUT_FILENO`. - -POSIX also adds a standard for exit codes, filesystem semantics, and several other command line utility API conventions. - -Visit the following resources to learn more: - -- [POSIX standard by IEEE](https://pubs.opengroup.org/onlinepubs/9699919799/) -- [Summary of some POSIX implementations](https://unix.stackexchange.com/a/220877) -- [A guide to POSIX](https://www.baeldung.com/linux/posix) diff --git a/src/data/roadmaps/devops/content/101-os-concepts/107-processes.md b/src/data/roadmaps/devops/content/101-os-concepts/107-processes.md deleted file mode 100644 index 97d050022..000000000 --- a/src/data/roadmaps/devops/content/101-os-concepts/107-processes.md +++ /dev/null @@ -1,15 +0,0 @@ -# Processes - -A process means program in execution. It generally takes an input, processes it and gives us the appropriate output. `ps` command can be used in linux to get the list of processes running in foreground. Each process will have a unique identifier called **PID**, which can be used to track it or `kill` it through shell. - -**Types of processes:** - -- Foreground processes -- Background processes - -Visit the following resources to learn more: - -- [Intro to Process Management](https://www.geeksforgeeks.org/introduction-of-process-management/) -- [Process Management in Linux](https://www.geeksforgeeks.org/process-management-in-linux/) -- [Process related commands in Linux](https://www.geeksforgeeks.org/processes-in-linuxunix/) -- [Process vs Thread](https://www.geeksforgeeks.org/difference-between-process-and-thread/) diff --git a/src/data/roadmaps/devops/content/101-os-concepts/108-startup-management.md b/src/data/roadmaps/devops/content/101-os-concepts/108-startup-management.md deleted file mode 100644 index 340413dc0..000000000 --- a/src/data/roadmaps/devops/content/101-os-concepts/108-startup-management.md +++ /dev/null @@ -1,11 +0,0 @@ -# Startup Management (init.d) - -`init.d` is a daemon which is the **first process** (PID = 1) of the Linux system. Then other processes, services, daemons, and threads are started by init. One can write their own scripts in _'/etc/init.d'_ location to start services automatically on system boot. Services can be started and stopped manually by using `service` command. - -It has following syntax: `$ service [service_name] [action]` e.g. `$ service ssh start` - -Visit the following resources to learn more: - -- [Linux Booting Process](https://www.freecodecamp.org/news/the-linux-booting-process-6-steps-described-in-detail/) -- [What is init.d?](https://www.geeksforgeeks.org/what-is-init-d-in-linux-service-management/) -- [What are Daemons in Linux?](https://itsfoss.com/linux-daemons/) diff --git a/src/data/roadmaps/devops/content/101-os-concepts/109-service-management.md b/src/data/roadmaps/devops/content/101-os-concepts/109-service-management.md deleted file mode 100644 index cb493f35d..000000000 --- a/src/data/roadmaps/devops/content/101-os-concepts/109-service-management.md +++ /dev/null @@ -1,11 +0,0 @@ -# Service Management (systemd) - -`systemd` is a **System** Management **D**aemon which replaces the sysvinit process to become the first process with PID = 1, which gets executed in user space during the Linux start-up process. It is a system that is designed specifically for the Linux kernel. It is now being used as a **replacement of init.d** to overcome shortcomings of it. It uses `systemctl` command to perform related operations. - -e.g. `$ systemctl start [service-name]`, `$ systemctl poweroff` - -Visit the following resources to learn more: - -- [What is systemd? and its commands](https://www.geeksforgeeks.org/linux-systemd-and-its-components/) -- [init.d vs systemd](https://uace.github.io/learning/init-vs-systemd-what-is-an-init-daemon) -- [Why Systemd as a replacement of init.d?](https://www.tecmint.com/systemd-replaces-init-in-linux/) diff --git a/src/data/roadmaps/devops/content/101-os-concepts/110-threads-concurrency.md b/src/data/roadmaps/devops/content/101-os-concepts/110-threads-concurrency.md deleted file mode 100644 index 432052881..000000000 --- a/src/data/roadmaps/devops/content/101-os-concepts/110-threads-concurrency.md +++ /dev/null @@ -1,19 +0,0 @@ -# Thread in OS - -`Thread` is an active entity which executes a **part of a process**. It is a sequential flow of tasks within a process. It is also called lightweight process as they **share common resources**. A process can contain multiple threads. Threads are used to increase the performance of the applications. -Each thread has its own program counter, stack, and set of registers. But the threads of a single process might share the same code and data/file. - -**Key Terminologies:** - -- `proc` -- `fork` -- `join` - -Visit the following resources to learn more: - -- [Process Synchronization](https://www.geeksforgeeks.org/introduction-of-process-synchronization/) -- [What is Thread in OS?](https://www.geeksforgeeks.org/thread-in-operating-system/) -- [Process vs Thread & Multi-Threading](https://www.scaler.com/topics/operating-system/threads-in-operating-system/) -- [What Concurrency in OS?](https://www.geeksforgeeks.org/concurrency-in-operating-system/) -- [Threads vs Concurrency](https://medium.com/@azizomarck/how-is-concurrency-different-from-parallelism-334b6d5c869a) -- [How Concurrency is achieved in Threads](https://medium.com/@akhandmishra/operating-system-threads-and-concurrency-aec2036b90f8) diff --git a/src/data/roadmaps/devops/content/101-os-concepts/index.md b/src/data/roadmaps/devops/content/101-os-concepts/index.md deleted file mode 100644 index 302c66687..000000000 --- a/src/data/roadmaps/devops/content/101-os-concepts/index.md +++ /dev/null @@ -1,9 +0,0 @@ -# Operating System - -An Operating System is a program that manages a computer’s resources, especially the allocation of those resources among other programs. Typical resources include the central processing unit (CPU), computer memory, file storage, input/output (I/O) devices, and network connections. - -Visit the following resources to learn more: - -- [What is an operating system?](https://edu.gcfglobal.org/en/computerbasics/understanding-operating-systems/1/) -- [Operating Systems: Crash Course Computer Science #18](https://www.youtube.com/watch?v=26QPDBe-NB8&ab_channel=CrashCourse) -- [Introduction to Operating System](https://www.youtube.com/watch?v=vBURTt97EkA&list=PL9hkZBQk8d1zEGbY7ShWCZ2n1gtxqkRrS&index=1) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/105-editors.md b/src/data/roadmaps/devops/content/102-live-in-terminal/102-editors.md similarity index 100% rename from src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/105-editors.md rename to src/data/roadmaps/devops/content/102-live-in-terminal/102-editors.md diff --git a/src/data/roadmaps/devops/content/102-live-in-terminal/103-process-monitoring.md b/src/data/roadmaps/devops/content/102-live-in-terminal/103-process-monitoring.md new file mode 100644 index 000000000..0f30d6b6f --- /dev/null +++ b/src/data/roadmaps/devops/content/102-live-in-terminal/103-process-monitoring.md @@ -0,0 +1,37 @@ +# Process Monitoring + +A process is an instance of a computer program that is being executed. Each process is identified by a unique number called a process ID (PID). A process is a running program. The operating system tracks processes through the use of process identifiers. A process identifier (PID) is a unique number that identifies a specific process. A PID is automatically assigned to each process when it is created on the system. + +There are several linux commands that can be used to monitor processes. The most common ones are: + +- `ps` - report a snapshot of the current processes. +- `top` - display Linux processes. +- `htop` - interactive process viewer. +- `atop` - advanced interactive monitor to view the load on a Linux system. +- `lsof` - list open files. + +The `ps` utility displays a header line, followed by lines containing information about all of your processes that have controlling terminals. + +- [ps Documentation](https://man7.org/linux/man-pages/man1/ps.1.html) +- [ps Cheat Sheet](https://www.sysadmin.md/ps-cheatsheet.html) +- [Linux Crash Course - The ps Command](https://www.youtube.com/watch?v=wYwGNgsfN3I) + +The `top` program periodically displays a sorted list of system processes. The default sorting key is pid, but other keys can be used instead. Various output options are available. + +- [top Documentation](https://man7.org/linux/man-pages/man1/top.1.html) +- [top Cheat Sheet](https://gist.github.com/ericandrewlewis/4983670c508b2f6b181703df43438c37) + +htop is a cross-platform ncurses-based process. It is similar to top, but allows you to scroll vertically and horizontally, and interact using a pointing device (mouse). You can observe all processes running on the system, along with their command line arguments, as well as view them in a tree format, select multiple processes and act on them all at once. + +- [htop Documentation](https://www.man7.org/linux/man-pages/man1/htop.1.html) +- [htop Cheat Sheet](https://www.maketecheasier.com/power-user-guide-htop/) + +The top program periodically displays a sorted list of system processes. The default sorting key is pid, but other keys can be used instead. Various output options are available. + +- [top Documentation](https://man7.org/linux/man-pages/man1/top.1.html) +- [top Cheat Sheet](https://gist.github.com/ericandrewlewis/4983670c508b2f6b181703df43438c37) + +Lsof lists on its standard output file information about files opened by processes. + +- [lsof Cheat Sheet](https://neverendingsecurity.wordpress.com/2015/04/13/lsof-commands-cheatsheet/) +- [lsof Documentation](https://man7.org/linux/man-pages/man8/lsof.8.html) diff --git a/src/data/roadmaps/devops/content/102-live-in-terminal/104-performance-monitoring.md b/src/data/roadmaps/devops/content/102-live-in-terminal/104-performance-monitoring.md new file mode 100644 index 000000000..0a0e52f82 --- /dev/null +++ b/src/data/roadmaps/devops/content/102-live-in-terminal/104-performance-monitoring.md @@ -0,0 +1,32 @@ +# Performance Monitoring + +There are many tools available to monitor the performance of your application. Some of the most popular are: + +- `nmon` - A system monitor tool for Linux and AIX systems. +- `iostat` - A tool that reports CPU statistics and input/output statistics for devices, partitions and network filesystems. +- `sar` - A system monitor command used to report on various system loads, including CPU activity, memory/paging, device load, network. +- `vmstat` - A tool that reports virtual memory statistics. + +Nmon is a fully interactive performance monitoring command-line utility tool for Linux. It is a benchmark tool that displays performance about the cpu, memory, network, disks, file system, nfs, top processes, resources, and power micro-partition. + +- [nmon Documentation](https://www.ibm.com/docs/en/aix/7.2?topic=n-nmon-command) +- [nmon Command Guide](https://www.geeksforgeeks.org/linux-nmon/) + +The iostat command in Linux is used for monitoring system input/output statistics for devices and partitions. It monitors system input/output by observing the time the devices are active in relation to their average transfer rates. The iostat produce reports may be used to change the system configuration to raised balance the input/output between the physical disks. + +- [iostat Documentation](https://man7.org/linux/man-pages/man1/iostat.1.html) +- [iostat Command Guide](https://www.geeksforgeeks.org/iostat-command-in-linux-with-examples/) + +Short for **S**ystem **A**ctivity **R**eport, `sar` is a command line tool for Unix and Unix-like operating systems that shows a report of different information about the usage and activity of resources in the operating system. + +- [SAR command in Linux to monitor system performance](https://www.geeksforgeeks.org/sar-command-linux-monitor-system-performance/) +- [SAR Man Page](https://man7.org/linux/man-pages/man1/sar.1.html) +- [SAR Man Page 2](https://linux.die.net/man/1/sar) +- [Sar tutorial for beginners](https://linuxhint.com/sar_linux_tutorial/) + +Short for **V**irtual **m**emory **stat**istic reporter, `vmstat` is a command line tool for Unix and Unix-like operating systems that reports various information about the operating system such as memory, paging, processes, I/O, CPU and disk usage. + +- [vmstat command in Linux with Examples](https://www.geeksforgeeks.org/vmstat-command-in-linux-with-examples/) +- [Linux commands: exploring virtual memory with vmstat](https://www.redhat.com/sysadmin/linux-commands-vmstat) +- [VMstat Man Page](https://man7.org/linux/man-pages/man8/vmstat.8.html) +- [vmstat tutorial](https://phoenixnap.com/kb/vmstat-command) diff --git a/src/data/roadmaps/devops/content/102-live-in-terminal/105-networking-tools.md b/src/data/roadmaps/devops/content/102-live-in-terminal/105-networking-tools.md new file mode 100644 index 000000000..f1c09f266 --- /dev/null +++ b/src/data/roadmaps/devops/content/102-live-in-terminal/105-networking-tools.md @@ -0,0 +1,74 @@ +# Networking Tools + +Networking tools are used to troubleshoot network issues. They are also used to monitor network traffic and to test network connectivity. Some of the most common networking tools are: + +- `traceroute` - Traces the route taken by packets over an IP network. +- `ping` - sends echo request packets to a host to test the Internet connection. +- `mtr` - Combines the functionality of `traceroute` and `ping` into a single diagnostic tool. +- `nmap` - Scans hosts for open ports. +- `netstat` - Displays network connections, routing tables, interface statistics, masquerade connections, and multicast memberships. +- `ufw` and `firewalld` - Firewall management tools. +- `iptables` and `nftables` - Firewall management tools. +- `tcpdump` - Dumps traffic on a network. +- `dig` - DNS lookup utility. +- `scp` - Secure copy. + +`traceroute` command is a command in Linux that prints the route a network packet takes from its source (e.g. your computer) to the destination host (e.g., roadmap.sh). It is quite valuable in investigating slow network connections as it can help us spot the slow leg of the network packet journey through the internet. + +- [How to Run Traceroute in Linux](https://linuxhint.com/run_traceroute_linux/) +- [Traceroute command in Linux with examples](https://www.geeksforgeeks.org/traceroute-command-in-linux-with-examples/) + +`ping` (**P**acket **In**ternet **G**roper) command is used to check the network connectivity between host and server/host. This command takes as input the IP address or the URL and sends a data packet to the specified address with the message “PING” and get a response from the server/host this time is recorded which is called latency. + +- [What is ping command?](https://linuxize.com/post/linux-ping-command/) +- [ping command with examples](https://www.geeksforgeeks.org/ping-command-in-linux-with-examples/) + +`mtr` combines the functionality of the traceroute and ping programs in a single network diagnostic tool. + +- [Javatpoint: Linux mtr Command](https://www.javatpoint.com/linux-mtr) +- [mtr Linux command](https://www.tutorialspoint.com/unix_commands/mtr.htm) +- [How to traceroute use mtr command in Linux](https://www.devopsroles.com/how-to-traceroute-use-mtr-command-in-linux/) + +NMAP stands for Network Mapper and is an open-source tool used to explore and audit the network's security, such as checking firewalls and scanning ports. + +- [NMAP Official Manual Book](https://nmap.org/book/man.html) +- [What is Nmap and How to Use it](https://www.freecodecamp.org/news/what-is-nmap-and-how-to-use-it-a-tutorial-for-the-greatest-scanning-tool-of-all-time/) + +Netstat is a command line utility to display all the network connections on a system. It displays all the tcp, udp and unix socket connections. Apart from connected sockets it also displays listening sockets that are waiting for incoming connections. + +- [netstat command in Linux with Examples](https://www.tutorialspoint.com/unix_commands/netstat.htm) +- [Netstat Tutorial](http://www.c-jump.com/CIS24/Slides/Networking/html_utils/netstat.html) +- [Netstat Commands - Network Administration Tutorial](https://www.youtube.com/watch?v=bxFwpm4IobU) +- [Linux Command Line Tutorial For Beginners - netstat command](https://www.youtube.com/watch?v=zGNcvBaN5wE) + +UFW, or _uncomplicated firewall_, is command-line based utility for managing firewall rules in Arch Linux, Debian and Ubuntu. It's aim is to make firewall configuration as simple as possible. It is a frontend for the `iptables` firewalling tool. + +- [ufw Documentation](https://manpages.ubuntu.com/manpages/trusty/man8/ufw.8.html) +- [Basic Introduction to UFW](https://www.linux.com/training-tutorials/introduction-uncomplicated-firewall-ufw/) +- [UFW Essentials](https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands) + +IPtables is a command-line firewall utility that uses policy chains to allow or block traffic that will be enforced by the linux kernel’s netfilter framework. Iptables packet filtering mechanism is organized into three different kinds of structures: tables, chains and targets. + +- [Iptables tutorial](https://www.hostinger.in/tutorials/iptables-tutorial) +- [Beginners to Advanced Guide Iptables](https://erravindrapawadia.medium.com/iptables-tutorial-beginners-to-advanced-guide-to-linux-firewall-839e10501759) + +`tcpdump` is a command line tool used for analysing network traffic passing through your system. It can be used to capture and filter packets and display them in a human-readable format. The captured information can be analysed at a later date as well. + +- [tcpdump Documentation](https://www.tcpdump.org/manpages/tcpdump.1.html) +- [Basic Introduction to Tcpdump](https://opensource.com/article/18/10/introduction-tcpdump) +- [50 ways to isolate traffic with Tcpdump](https://danielmiessler.com/study/tcpdump/) +- [Interpreting Tcpdump output and data](https://www.youtube.com/watch?v=7bsQP9sKHrs) + +`dig` command stands for **D**omain **I**nformation **G**roper. It is used for retrieving information about DNS name servers. It is mostly used by network administrators for verifying and troubleshooting DNS problems and to perform DNS lookups. It replaces older tools such as `nslookup` and the `host`. + +- [What is dig command?](https://www.geeksforgeeks.org/dig-command-in-linux-with-examples/) +- [More on dig](https://linuxize.com/post/how-to-use-dig-command-to-query-dns-in-linux/) +- [What is host command?](https://www.geeksforgeeks.org/host-command-in-linux-with-examples/) +- [What is nslookup command?](https://www.geeksforgeeks.org/nslookup-command-in-linux-with-examples/) +- [What is DNS?](https://www.cloudflare.com/en-gb/learning/dns/what-is-dns/) + +`SCP` is an acronym for Secure Copy Protocol.It is a command line utility that allows the user to securely copy files and directories between two locations usually between unix or linux systems.The protocol ensures the transmission of files is encrypted to prevent anyone with suspicious intentions from getting sensitive information.`SCP` uses encryption over an `SSH` (Secure Shell) connection, this ensures that the data being transferred is protected from suspicious attacks. + +- [SCP Linux Command](https://www.freecodecamp.org/news/scp-linux-command-example-how-to-ssh-file-transfer-from-remote-to-local/) +- [10 SCP command examples](https://www.tecmint.com/scp-commands-examples/) +- [SCP command explained](https://phoenixnap.com/kb/linux-scp-command) diff --git a/src/data/roadmaps/devops/content/102-live-in-terminal/106-text-manipulation.md b/src/data/roadmaps/devops/content/102-live-in-terminal/106-text-manipulation.md new file mode 100644 index 000000000..7137f8d46 --- /dev/null +++ b/src/data/roadmaps/devops/content/102-live-in-terminal/106-text-manipulation.md @@ -0,0 +1,80 @@ +# Text Manipulation + +Some of the most common commands you will use in the terminal are text manipulation commands. These commands allow you to search, replace, and manipulate text in files and streams. Here are some of the most common commands you will use: + +- `awk` - A programming language designed for text processing and typically used as a data extraction and reporting tool. +- `sed` - A stream editor for filtering and transforming text. +- `grep` - A command-line utility for searching plain-text data sets for lines that match a regular expression. +- `sort` - A command-line utility for sorting lines of text files. +- `cut` - A command-line utility for cutting sections from each line of files. +- `uniq` - A command-line utility for reporting or omitting repeated lines. +- `cat` - A command-line utility for concatenating files and printing on the standard output. +- `echo` - A command-line utility for displaying a line of text. +- `fmt` - A command-line utility for simple optimal text formatting. +- `tr` - A command-line utility for translating or deleting characters. +- `nl` - A command-line utility for numbering lines of files. +- `wc` - A command-line utility for printing newline, word, and byte counts for files. + +`awk` is a general-purpose scripting language used for manipulating data or text and generating reports in the Linux world. It is mostly used for pattern scanning and processing. It searches one or more files to see if they contain lines that match the specified patterns and then performs the associated actions. + +- [What is AWK? How to use it?](https://www.geeksforgeeks.org/awk-command-unixlinux-examples/) +- [How AWK works?](https://linuxize.com/post/awk-command/) +- [Linux Crash Course - awk](https://www.youtube.com/watch?v=oPEnvuj9QrI) + +`sed`(**S**tream **Ed**itor) command in UNIX can perform lots of functions on file like searching, finding and replacing, insertion or deletion. By using SED you can edit files even without opening them in editors like [VI Editor](https://www.redhat.com/sysadmin/introduction-vi-editor). + +- [What is SED? with examples](https://www.geeksforgeeks.org/sed-command-in-linux-unix-with-examples/) +- [Detailed Manual](https://www.gnu.org/software/sed/manual/sed.html) +- [Linux Crash Course - The sed Command](https://www.youtube.com/watch?v=nXLnx8ncZyE&t=218s) + +The `grep` command (**g**lobal search for **r**egular **e**xpression and **p**rint out) searches file(s) for a particular pattern of characters, and displays all lines that contain that pattern. It can be used with other commands like `ps` making it more useful. + +- [What is Grep? with examples](https://www.geeksforgeeks.org/grep-command-in-unixlinux/) +- [Detailed Manual](https://www.gnu.org/software/grep/manual/grep.html) +- [Linux Crash Course - The grep Command](https://www.youtube.com/watch?v=Tc_jntovCM0) + +`sort` command is used to sort the contents of a file in a particular order. By default, it sorts a file assuming the contents are in ASCII. But it also can also be used to sort numerically by using appropriate options. + +- [Sort command with examples](https://www.geeksforgeeks.org/sort-command-linuxunix-examples/) +- [Options]() +- [Linux Tutorials|sort command GeeksforGeeks](https://www.youtube.com/watch?v=fEx5rnbDKO4) + +The cut utility cuts out selected portions of each line (as specified by list) from each file and writes them to the standard output. + +- [cut Documentation](https://man7.org/linux/man-pages/man1/cut.1.html) +- [cut Cheat Sheet](https://bencane.com/2012/10/22/cheat-sheet-cutting-text-with-cut/) + +The uniq utility reads the specified input_file comparing adjacent lines, and writes a copy of each unique input line to the output_file. + +- [uniq Documentation](https://man7.org/linux/man-pages/man1/uniq.1.html) +- [uniq Cheat Sheet](https://www.geeksforgeeks.org/uniq-command-in-linux-with-examples/) + +`cat` (concatenate) command is very frequently used in Linux. It reads data from the file and gives its content as output. It helps us to create, view, and concatenate files. + +- [Cat Command with examples](https://www.tecmint.com/13-basic-cat-command-examples-in-linux/) +- [Options]() +- [Linux Tutorials|cat command|GeeksforGeeks](https://www.youtube.com/watch?v=exj5WMUJ11g) + +`echo` is a built-in command in Linux used to display lines of text/string that are passed as an argument. It is mostly used in shell scripts and batch files to output status text or `ENV` variables to the screen or a file. + +- [Echo command with Examples](https://www.tecmint.com/echo-command-in-linux/) +- [Linux Crash Course - The echo Command](https://www.youtube.com/watch?v=S_ySzMHxMjw) + +`fmt` command is for formatting and optimizing contents in text files. It will be really useful when it comes to beautify large text files by setting uniform column width and spaces. + +- [Fmt command with Examples](https://www.devopsroles.com/fmt-command-in-linux-with-example/) + +The tr utility copies the standard input to the standard output with substitution or deletion of selected characters. + +- [tr Documentation](https://linuxcommand.org/lc3_man_pages/tr1.html) +- [tr Cheat Sheet](https://linuxopsys.com/topics/tr-command-in-linux) + +The nl utility reads lines from the named file or the standard input if the file argument is omitted, applies a configurable line numbering filter operation and writes the result to the standard output. + +- [nl Documentation](https://man7.org/linux/man-pages/man1/nl.1.html) +- [nl Cheat Sheet](https://www.geeksforgeeks.org/nl-command-in-linux-with-examples/) + +The wc utility displays the number of lines, words, and bytes contained in each input file, or standard input (if no file is specified) to the standard output. + +- [wc Documentation](https://linux.die.net/man/1/wc) +- [wc Cheat Sheet](https://onecompiler.com/cheatsheets/wc) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/index.md b/src/data/roadmaps/devops/content/102-live-in-terminal/index.md similarity index 100% rename from src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/index.md rename to src/data/roadmaps/devops/content/102-live-in-terminal/index.md diff --git a/src/data/roadmaps/devops/content/102-live-in-terminal/scripting/100-bash-scripting.md b/src/data/roadmaps/devops/content/102-live-in-terminal/scripting/100-bash-scripting.md new file mode 100644 index 000000000..231792959 --- /dev/null +++ b/src/data/roadmaps/devops/content/102-live-in-terminal/scripting/100-bash-scripting.md @@ -0,0 +1 @@ +# Bash scripting \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/102-live-in-terminal/scripting/101-powershell.md b/src/data/roadmaps/devops/content/102-live-in-terminal/scripting/101-powershell.md new file mode 100644 index 000000000..977fd3c69 --- /dev/null +++ b/src/data/roadmaps/devops/content/102-live-in-terminal/scripting/101-powershell.md @@ -0,0 +1 @@ +# Powershell \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/102-live-in-terminal/scripting/index.md b/src/data/roadmaps/devops/content/102-live-in-terminal/scripting/index.md new file mode 100644 index 000000000..f3f3b5323 --- /dev/null +++ b/src/data/roadmaps/devops/content/102-live-in-terminal/scripting/index.md @@ -0,0 +1 @@ +# Scripting \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/100-screen-multiplexer.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/100-screen-multiplexer.md deleted file mode 100644 index a05f20f29..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/100-screen-multiplexer.md +++ /dev/null @@ -1,10 +0,0 @@ -# Screen - -Screen is a full-screen window manager that multiplexes a physical terminal between several processes (typically interactive shells). Each virtual terminal provides the functions of a DEC VT100 terminal and, in addition, several control functions from the ISO 6429 (ECMA 48, ANSI X3.64) and ISO 2022 standards (e.g. insert/delete line and support for multiple character sets). There is a scrollback history buffer for each virtual terminal and a copy-and-paste mechanism that allows moving text regions between windows. - -See `man screen` or `screen -h` for further information - -Visit the following resources to learn more: - -- [Screen Cheat Sheet](https://kapeli.com/cheat_sheets/screen.docset/Contents/Resources/Documents/index) -- [Screen Users Manual](https://www.gnu.org/software/screen/manual/screen.html) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/100-terminal-multiplexers.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/100-terminal-multiplexers.md deleted file mode 100644 index 1fedb6375..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/100-terminal-multiplexers.md +++ /dev/null @@ -1,8 +0,0 @@ -# Terminal multiplexers - -Terminal multiplexers are programs that allow us to [multiplex](https://en.wikipedia.org/wiki/Multiplexing) a terminal into several sub-processes or terminals inside a single terminal session, this means that we can have multiple open sessions using a single login session to a local or remote machine. - -Visit the following resources to learn more: - -- [Terminal Multiplexer](https://en.wikipedia.org/wiki/Terminal_multiplexer) -- [Terminal Multiplexers](https://linuxcommand.org/lc3_adv_termmux.php) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/101-tmux-multiplexer.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/101-tmux-multiplexer.md deleted file mode 100644 index 73266ba83..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/101-tmux-multiplexer.md +++ /dev/null @@ -1,12 +0,0 @@ -# Tmux - -Tmux is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen. Tmux may be detached from a screen and continue running in the background, then later reattached. - -When tmux is started it creates a new session with a single window and displays it on screen. A status line at the bottom of the screen shows information on the current session and is used to enter interactive commands. - -See `man tmux` further information - -Visit the following resources to learn more: - -- [Tmux Documentation](https://tmuxguide.readthedocs.io/en/latest/tmux/tmux.html) -- [Tmux Cheat Sheet](https://tmuxcheatsheet.com/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/102-ps.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/102-ps.md deleted file mode 100644 index 1ff624f75..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/102-ps.md +++ /dev/null @@ -1,11 +0,0 @@ -# ps - process status - -The ps utility displays a header line, followed by lines containing information about all of your processes that have controlling terminals. - -See `man ps` further information - -Visit the following resources to learn more: - -- [ps Documentation](https://man7.org/linux/man-pages/man1/ps.1.html) -- [ps Cheat Sheet](https://www.sysadmin.md/ps-cheatsheet.html) -- [Linux Crash Course - The ps Command](https://www.youtube.com/watch?v=wYwGNgsfN3I) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/102-top.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/102-top.md deleted file mode 100644 index 1803e8e4a..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/102-top.md +++ /dev/null @@ -1,10 +0,0 @@ -# top - -The top program periodically displays a sorted list of system processes. The default sorting key is pid, but other keys can be used instead. Various output options are available. - -See `man top` further information. - -Visit the following resources to learn more: - -- [top Documentation](https://man7.org/linux/man-pages/man1/top.1.html) -- [top Cheat Sheet](https://gist.github.com/ericandrewlewis/4983670c508b2f6b181703df43438c37) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/103-htop.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/103-htop.md deleted file mode 100644 index b95cf5da7..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/103-htop.md +++ /dev/null @@ -1,8 +0,0 @@ -# htop - -htop is a cross-platform ncurses-based process. It is similar to top, but allows you to scroll vertically and horizontally, and interact using a pointing device (mouse). You can observe all processes running on the system, along with their command line arguments, as well as view them in a tree format, select multiple processes and act on them all at once. - -Visit the following resources to learn more: - -- [htop Documentation](https://www.man7.org/linux/man-pages/man1/htop.1.html) -- [htop Cheat Sheet](https://www.maketecheasier.com/power-user-guide-htop/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/104-atop.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/104-atop.md deleted file mode 100644 index e4df181b3..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/104-atop.md +++ /dev/null @@ -1,8 +0,0 @@ -# atop - -The program atop is an interactive monitor to view the load on a Linux system. It shows the occupation of the most critical hardware resources (from a performance point of view) on system level, i.e. cpu, memory, disk and network. - -Visit the following resources to learn more: - -- [atop Documentation](https://linux.die.net/man/1/atop) -- [atop Command Guide](https://www.digitalocean.com/community/tutorials/atop-command-in-linux) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/104-bash-scripting.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/104-bash-scripting.md deleted file mode 100644 index 184045e5c..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/104-bash-scripting.md +++ /dev/null @@ -1,19 +0,0 @@ -# Bash scripting - -Bash is a command-line interface shell program used extensively in Linux and macOS. The name Bash is an acronym for "Bourne Again Shell," developed in 1989 as a successor to the Bourne Shell. - -"What's a shell?" you ask? A shell is a computer program that allows you to directly control a computer's operating system (OS) with a graphical user interface (GUI) or command-line interface (CLI). - -You actually use GUI shells all the time. For example, Windows 10 is based on the Windows shell that allows you to control your OS with a desktop, taskbar, and menus. - -With a CLI shell like Bash, you type commands into the program to directly control your computer's OS. Opening up the terminal on your Mac or command line in Linux will look similar to consoles and integrated development environments (IDEs) for other programming languages such as R, Ruby, or Python. You can type commands directly in the command line or run Bash scripts to perform longer and more complex tasks. - -Visit the following resources to learn more: - -- [The Shell Scripting Tutorial](https://www.shellscript.sh/) -- [Writing Shell Scripts](https://linuxcommand.org/lc3_writing_shell_scripts.php) -- [Shell Scripting for Beginners](https://www.freecodecamp.org/news/shell-scripting-crash-course-how-to-write-bash-scripts-in-linux/) -- [A guide to Bash](https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html) -- [The Bash Hackers Wiki](https://wiki.bash-hackers.org/) -- [Bash Shell Scripting Guide](https://rudrakshi.hashnode.dev/bash-shell-scripting-guide) -- [Codecademy - Learn Bash Scripting](https://www.codecademy.com/learn/bash-scripting) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/105-lsof.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/105-lsof.md deleted file mode 100644 index 31c241986..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/105-lsof.md +++ /dev/null @@ -1,10 +0,0 @@ -# lsof - -Lsof lists on its standard output file information about files opened by processes. - -See `man lsof` or `lsof --help` for further information. - -Visit the following resources to learn more: - -- [lsof Cheat Sheet](https://neverendingsecurity.wordpress.com/2015/04/13/lsof-commands-cheatsheet/) -- [lsof Documentation](https://man7.org/linux/man-pages/man8/lsof.8.html) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/106-compiling-apps.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/106-compiling-apps.md deleted file mode 100644 index 19fb27044..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/106-compiling-apps.md +++ /dev/null @@ -1,21 +0,0 @@ -# Compiling Apps - -# gcc - -The GNU Compiler Collection (GCC) is a compiler system produced by the GNU Project supporting various programming languages also known as GCC. GCC is a key component of the GNU tool chain and the standard compiler for most Unix-like operating systems. Compiler Collection is a set of compilers and development tools available for Linux and an array of other operating systems. It includes support primarily for C and C++. It provides all of the infrastructure for building software in those languages from source code to assembly. - -"What is GCC used for?" GCC is a toolchain that compiles code, links it with any library dependencies, converts that code to assembly, and then prepares executable files.It is responsible for the conversion of the “high level” source code in the respective language and ensuring that it is semantically valid, performing well formed optimizations, and converting it to assembly code (which is then handed off to the assembler). - -Visit the following resources to learn more: - -- [Intro to GCC](https://courses.cs.washington.edu/courses/cse451/99wi/Section/gccintro.html) -- [GCC Linux](https://www.javatpoint.com/gcc-linux) -- [GCC Commands](https://www.geeksforgeeks.org/gcc-command-in-linux-with-examples/) -- [Makefile Tutorial](https://makefiletutorial.com) -- [Documentation for make](https://www.gnu.org/software/make/manual/) -- [Using Make and writing Makefiles](https://www.cs.swarthmore.edu/~newhall/unixhelp/howto_makefiles.html) -- [Sbt Documentation](https://www.scala-sbt.org/1.x/docs/) -- [Sbt By Example](https://www.scala-sbt.org/1.x/docs/sbt-by-example.html) -- [Gradle Tutorial](https://www.tutorialspoint.com/gradle/index.htm) -- [Gradle for absolute beginners](https://tomgregory.com/gradle-tutorial-for-complete-beginners/) -- [Gradle Guides](https://gradle.org/guides/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/106-nmon.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/106-nmon.md deleted file mode 100644 index 9dada81b0..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/106-nmon.md +++ /dev/null @@ -1,8 +0,0 @@ -# Nmon - -Nmon is a fully interactive performance monitoring command-line utility tool for Linux. It is a benchmark tool that displays performance about the cpu, memory, network, disks, file system, nfs, top processes, resources, and power micro-partition. - -Visit the following resources to learn more: - -- [nmon Documentation](https://www.ibm.com/docs/en/aix/7.2?topic=n-nmon-command) -- [nmon Command Guide](https://www.geeksforgeeks.org/linux-nmon/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/107-iostat.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/107-iostat.md deleted file mode 100644 index 40b79a43b..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/107-iostat.md +++ /dev/null @@ -1,8 +0,0 @@ -# Iostat - -The iostat command in Linux is used for monitoring system input/output statistics for devices and partitions. It monitors system input/output by observing the time the devices are active in relation to their average transfer rates. The iostat produce reports may be used to change the system configuration to raised balance the input/output between the physical disks. - -Visit the following resources to learn more: - -- [iostat Documentation](https://man7.org/linux/man-pages/man1/iostat.1.html) -- [iostat Command Guide](https://www.geeksforgeeks.org/iostat-command-in-linux-with-examples/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/108-sar.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/108-sar.md deleted file mode 100644 index 1c110938f..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/108-sar.md +++ /dev/null @@ -1,10 +0,0 @@ -# Sar - -Short for **S**ystem **A**ctivity **R**eport, it is a command line tool for Unix and Unix-like operating systems that shows a report of different information about the usage and activity of resources in the operating system. - -Visit the following resources to learn more: - -- [SAR command in Linux to monitor system performance](https://www.geeksforgeeks.org/sar-command-linux-monitor-system-performance/) -- [SAR Man Page](https://man7.org/linux/man-pages/man1/sar.1.html) -- [SAR Man Page 2](https://linux.die.net/man/1/sar) -- [Sar tutorial for beginners](https://linuxhint.com/sar_linux_tutorial/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/109-vmstat.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/109-vmstat.md deleted file mode 100644 index e8f6fd18e..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/109-vmstat.md +++ /dev/null @@ -1,10 +0,0 @@ -# Vmstat - -Short for **V**irtual **m**emory **stat**istic reporter, it is a command line tool for Unix and Unix-like operating systems that reports various information about the operating system such as memory, paging, processes, I/O, CPU and disk usage. - -Visit the following resources to learn more: - -- [vmstat command in Linux with Examples](https://www.geeksforgeeks.org/vmstat-command-in-linux-with-examples/) -- [Linux commands: exploring virtual memory with vmstat](https://www.redhat.com/sysadmin/linux-commands-vmstat) -- [VMstat Man Page](https://man7.org/linux/man-pages/man8/vmstat.8.html) -- [vmstat tutorial](https://phoenixnap.com/kb/vmstat-command) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/110-traceroute.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/110-traceroute.md deleted file mode 100644 index fcc8540d3..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/110-traceroute.md +++ /dev/null @@ -1,10 +0,0 @@ -# Traceroute - -`traceroute` command is a command in Linux that prints the route a network packet takes from its source (e.g. your computer) to the destination host (e.g., roadmap.sh). It is quite valuable in investigating slow network connections as it can help us spot the slow leg of the network packet journey through the internet. - -It has the following syntax: `$ traceroute [OPTIONS] DESTINATION` e.g. `$ traceroute roadmap.sh` - -Visit the following resources to learn more: - -- [How to Run Traceroute in Linux](https://linuxhint.com/run_traceroute_linux/) -- [Traceroute command in Linux with examples](https://www.geeksforgeeks.org/traceroute-command-in-linux-with-examples/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/111-mtr.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/111-mtr.md deleted file mode 100644 index 553644ae1..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/111-mtr.md +++ /dev/null @@ -1,11 +0,0 @@ -# mtr - -`mtr` combines the functionality of the traceroute and ping programs in a single network diagnostic tool. - -As `mtr` starts, it investigates the network connection between the host `mtr` runs on and `HOSTNAME` by sending packets with purposely low TTLs. It continues sending packets with low TTL, noting the response time of the intervening routers. This allows `mtr` to print the internet route's response percentage and response times to HOSTNAME. A sudden packet loss or response time increase often indicates a bad (or simply overloaded) link. - -Visit the following resources to learn more: - -- [Javatpoint: Linux mtr Command](https://www.javatpoint.com/linux-mtr) -- [mtr Linux command](https://www.tutorialspoint.com/unix_commands/mtr.htm) -- [How to traceroute use mtr command in Linux](https://www.devopsroles.com/how-to-traceroute-use-mtr-command-in-linux/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/112-ping.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/112-ping.md deleted file mode 100644 index a7d76f177..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/112-ping.md +++ /dev/null @@ -1,10 +0,0 @@ -# ping - -`ping` (**P**acket **In**ternet **G**roper) command is used to check the network connectivity between host and server/host. This command takes as input the IP address or the URL and sends a data packet to the specified address with the message “PING” and get a response from the server/host this time is recorded which is called latency. - -It has the following syntax: `$ ping [OPTIONS] DESTINATION` e.g. `$ ping roadmap.sh` - -Visit the following resources to learn more: - -- [What is ping command?](https://linuxize.com/post/linux-ping-command/) -- [ping command with examples](https://www.geeksforgeeks.org/ping-command-in-linux-with-examples/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/113-nmap.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/113-nmap.md deleted file mode 100644 index 8a66ae147..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/113-nmap.md +++ /dev/null @@ -1,8 +0,0 @@ -# NMAP - -NMAP stands for Network Mapper and is an open-source tool used to explore and audit the network's security, such as checking firewalls and scanning ports. - -Visit the following resources to learn more: - -- [NMAP Official Manual Book](https://nmap.org/book/man.html) -- [What is Nmap and How to Use it](https://www.freecodecamp.org/news/what-is-nmap-and-how-to-use-it-a-tutorial-for-the-greatest-scanning-tool-of-all-time/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/114-netstat.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/114-netstat.md deleted file mode 100644 index 07833f673..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/114-netstat.md +++ /dev/null @@ -1,10 +0,0 @@ -# netstat - -Netstat is a command line utility to display all the network connections on a system. It displays all the tcp, udp and unix socket connections. Apart from connected sockets it also displays listening sockets that are waiting for incoming connections. - -Visit the following resources to learn more: - -- [netstat command in Linux with Examples](https://www.tutorialspoint.com/unix_commands/netstat.htm) -- [Netstat Tutorial](http://www.c-jump.com/CIS24/Slides/Networking/html_utils/netstat.html) -- [Netstat Commands - Network Administration Tutorial](https://www.youtube.com/watch?v=bxFwpm4IobU) -- [Linux Command Line Tutorial For Beginners - netstat command](https://www.youtube.com/watch?v=zGNcvBaN5wE) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/116-tcpdump.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/116-tcpdump.md deleted file mode 100644 index 7c2c0e023..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/116-tcpdump.md +++ /dev/null @@ -1,10 +0,0 @@ -# Tcpdump - -`tcpdump` is a command line tool used for analysing network traffic passing through your system. It can be used to capture and filter packets and display them in a human-readable format. The captured information can be analysed at a later date as well. - -Visit the following resources to learn more: - -- [tcpdump Documentation](https://www.tcpdump.org/manpages/tcpdump.1.html) -- [Basic Introduction to Tcpdump](https://opensource.com/article/18/10/introduction-tcpdump) -- [50 ways to isolate traffic with Tcpdump](https://danielmiessler.com/study/tcpdump/) -- [Interpreting Tcpdump output and data](https://www.youtube.com/watch?v=7bsQP9sKHrs) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/118-iptables.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/118-iptables.md deleted file mode 100644 index 342502ded..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/118-iptables.md +++ /dev/null @@ -1,8 +0,0 @@ -# Iptables - -IPtables is a command-line firewall utility that uses policy chains to allow or block traffic that will be enforced by the linux kernel’s netfilter framework. Iptables packet filtering mechanism is organized into three different kinds of structures: tables, chains and targets. - -Visit the following resources to learn more: - -- [Iptables tutorial](https://www.hostinger.in/tutorials/iptables-tutorial) -- [Beginners to Advanced Guide Iptables](https://erravindrapawadia.medium.com/iptables-tutorial-beginners-to-advanced-guide-to-linux-firewall-839e10501759) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/119-dig.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/119-dig.md deleted file mode 100644 index 77f786b68..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/119-dig.md +++ /dev/null @@ -1,13 +0,0 @@ -# dig - -`dig` command stands for **D**omain **I**nformation **G**roper. It is used for retrieving information about DNS name servers. It is mostly used by network administrators for verifying and troubleshooting DNS problems and to perform DNS lookups. It replaces older tools such as `nslookup` and the `host`. - -It has the following syntax: `$ dig [server] [name] [type]` e.g. `$ dig roadmap.sh` - -Visit the following resources to learn more: - -- [What is dig command?](https://www.geeksforgeeks.org/dig-command-in-linux-with-examples/) -- [More on dig](https://linuxize.com/post/how-to-use-dig-command-to-query-dns-in-linux/) -- [What is host command?](https://www.geeksforgeeks.org/host-command-in-linux-with-examples/) -- [What is nslookup command?](https://www.geeksforgeeks.org/nslookup-command-in-linux-with-examples/) -- [What is DNS?](https://www.cloudflare.com/en-gb/learning/dns/what-is-dns/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/120-awk.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/120-awk.md deleted file mode 100644 index fec57172e..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/120-awk.md +++ /dev/null @@ -1,13 +0,0 @@ -# awk - -`awk` is a general-purpose scripting language used for manipulating data or text and generating reports in the Linux world. It is mostly used for pattern scanning and processing. It searches one or more files to see if they contain lines that match the specified patterns and then performs the associated actions. - -It has the below syntax: - -`awk options 'selection_criteria {action}' input-file > output-file` e.g. `$ awk '{print}' file.txt` - -Visit the following resources to learn more: - -- [What is AWK? How to use it?](https://www.geeksforgeeks.org/awk-command-unixlinux-examples/) -- [How AWK works?](https://linuxize.com/post/awk-command/) -- [Linux Crash Course - awk](https://www.youtube.com/watch?v=oPEnvuj9QrI) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/121-sed.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/121-sed.md deleted file mode 100644 index bde7edf33..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/121-sed.md +++ /dev/null @@ -1,13 +0,0 @@ -# sed - -`sed`(**S**tream **Ed**itor) command in UNIX can perform lots of functions on file like searching, finding and replacing, insertion or deletion. By using SED you can edit files even without opening them in editors like [VI Editor](https://www.redhat.com/sysadmin/introduction-vi-editor). - -It has the following syntax: - -`$ sed [options].. [script] [input-file]` e.g. `$ sed 's/search-regex/replacement-txt/g' file.txt` - -Visit the following resources to learn more: - -- [What is SED? with examples](https://www.geeksforgeeks.org/sed-command-in-linux-unix-with-examples/) -- [Detailed Manual](https://www.gnu.org/software/sed/manual/sed.html) -- [Linux Crash Course - The sed Command](https://www.youtube.com/watch?v=nXLnx8ncZyE&t=218s) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/122-grep.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/122-grep.md deleted file mode 100644 index 20d3291cc..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/122-grep.md +++ /dev/null @@ -1,13 +0,0 @@ -# grep - -The `grep` command (**g**lobal search for **r**egular **e**xpression and **p**rint out) searches file(s) for a particular pattern of characters, and displays all lines that contain that pattern. It can be used with other commands like `ps` making it more useful. - -It has the following syntax: - -`$ grep [options] pattern [files]` e.g. `$ grep "search-regex" file-1.txt` - -Visit the following resources to learn more: - -- [What is Grep? with examples](https://www.geeksforgeeks.org/grep-command-in-unixlinux/) -- [Detailed Manual](https://www.gnu.org/software/grep/manual/grep.html) -- [Linux Crash Course - The grep Command](https://www.youtube.com/watch?v=Tc_jntovCM0) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/123-sort.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/123-sort.md deleted file mode 100644 index cec49507f..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/123-sort.md +++ /dev/null @@ -1,13 +0,0 @@ -# sort - -`sort` command is used to sort the contents of a file in a particular order. By default, it sorts a file assuming the contents are in ASCII. But it also can also be used to sort numerically by using appropriate options. - -It has the following syntax - -`$ sort [options].. input-file` e.g. `$ sort file.txt` - -Visit the following resources to learn more: - -- [Sort command with examples](https://www.geeksforgeeks.org/sort-command-linuxunix-examples/) -- [Options]() -- [Linux Tutorials|sort command GeeksforGeeks](https://www.youtube.com/watch?v=fEx5rnbDKO4) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/124-cut.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/124-cut.md deleted file mode 100644 index b3fe36dd9..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/124-cut.md +++ /dev/null @@ -1,10 +0,0 @@ -# cut - -The cut utility cuts out selected portions of each line (as specified by list) from each file and writes them to the standard output. - -See `man cut` for further information. - -Visit the following resources to learn more: - -- [cut Documentation](https://man7.org/linux/man-pages/man1/cut.1.html) -- [cut Cheat Sheet](https://bencane.com/2012/10/22/cheat-sheet-cutting-text-with-cut/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/125-uniq.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/125-uniq.md deleted file mode 100644 index a912c0ec3..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/125-uniq.md +++ /dev/null @@ -1,10 +0,0 @@ -# uniq - -The uniq utility reads the specified input_file comparing adjacent lines, and writes a copy of each unique input line to the output_file. - -See `man uniq` for further information. - -Visit the following resources to learn more: - -- [uniq Documentation](https://man7.org/linux/man-pages/man1/uniq.1.html) -- [uniq Cheat Sheet](https://www.geeksforgeeks.org/uniq-command-in-linux-with-examples/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/126-cat.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/126-cat.md deleted file mode 100644 index 36d928d77..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/126-cat.md +++ /dev/null @@ -1,17 +0,0 @@ -# cat - -`cat` (concatenate) command is very frequently used in Linux. It reads data from the file and gives its content as output. It helps us to create, view, and concatenate files. - -It has the following syntax: - -- View : `$ cat [option] [input-file]` -- Create : `$ cat [content] > [new-file]` -- Append : `$ cat [append_content] >> [existing-file]` - -e.g. `$ cat file.txt` - -Visit the following resources to learn more: - -- [Cat Command with examples](https://www.tecmint.com/13-basic-cat-command-examples-in-linux/) -- [Options]() -- [Linux Tutorials|cat command|GeeksforGeeks](https://www.youtube.com/watch?v=exj5WMUJ11g) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/127-echo.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/127-echo.md deleted file mode 100644 index f2ab2ec2f..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/127-echo.md +++ /dev/null @@ -1,10 +0,0 @@ -# echo - -`echo` is a built-in command in Linux used to display lines of text/string that are passed as an argument. It is mostly used in shell scripts and batch files to output status text or `ENV` variables to the screen or a file. - -It has the following syntax: `$ echo [options] [string]` e.g. `$ echo "Hello World!"` - -Visit the following resources to learn more: - -- [Echo command with Examples](https://www.tecmint.com/echo-command-in-linux/) -- [Linux Crash Course - The echo Command](https://www.youtube.com/watch?v=S_ySzMHxMjw) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/128-fmt.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/128-fmt.md deleted file mode 100644 index a4e06d323..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/128-fmt.md +++ /dev/null @@ -1,9 +0,0 @@ -# fmt - -`fmt` command is for formatting and optimizing contents in text files. It will be really useful when it comes to beautify large text files by setting uniform column width and spaces. - -It has the following syntax: `$ fmt [-width] [option] [file]` e.g. `$ fmt file.txt` - -Visit the following resources to learn more: - -- [Fmt command with Examples](https://www.devopsroles.com/fmt-command-in-linux-with-example/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/129-tr.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/129-tr.md deleted file mode 100644 index 5757e45a7..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/129-tr.md +++ /dev/null @@ -1,10 +0,0 @@ -# tr - -The tr utility copies the standard input to the standard output with substitution or deletion of selected characters. - -See `man tr` for further information. - -Visit the following resources to learn more: - -- [tr Documentation](https://linuxcommand.org/lc3_man_pages/tr1.html) -- [tr Cheat Sheet](https://linuxopsys.com/topics/tr-command-in-linux) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/130-nl.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/130-nl.md deleted file mode 100644 index 4caa6bd12..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/130-nl.md +++ /dev/null @@ -1,10 +0,0 @@ -# nl - -The nl utility reads lines from the named file or the standard input if the file argument is omitted, applies a configurable line numbering filter operation and writes the result to the standard output. - -See `man nl` for further information. - -Visit the following resources to learn more: - -- [nl Documentation](https://man7.org/linux/man-pages/man1/nl.1.html) -- [nl Cheat Sheet](https://www.geeksforgeeks.org/nl-command-in-linux-with-examples/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/131-wc.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/131-wc.md deleted file mode 100644 index aba86f683..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/131-wc.md +++ /dev/null @@ -1,10 +0,0 @@ -# wc - -The wc utility displays the number of lines, words, and bytes contained in each input file, or standard input (if no file is specified) to the standard output. - -See `man wc` for further information. - -Visit the following resources to learn more: - -- [wc Documentation](https://linux.die.net/man/1/wc) -- [wc Cheat Sheet](https://onecompiler.com/cheatsheets/wc) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/134-strace.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/134-strace.md deleted file mode 100644 index 3a37fd47d..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/134-strace.md +++ /dev/null @@ -1,8 +0,0 @@ -# strace - -`strac` is a useful diagnsotic, debugging tool for unix based operating systems. It traces the system calls and signals a process uses during its lifetime. And usually returns the name of the each system calls , its arguments and what it returned. - -Visit the following resources to learn more: - -- [Strace Official Website](https://strace.io/) -- [Strace — Linux manual page](https://man7.org/linux/man-pages/man1/strace.1.html) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/135-dtrace.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/135-dtrace.md deleted file mode 100644 index 40c42444a..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/135-dtrace.md +++ /dev/null @@ -1,8 +0,0 @@ -# DTrace - -DTrace is a comprehensive dynamic tracing framework ported from Solaris. DTrace provides a powerful infrastructure that permits administrators, developers, and service personnel to concisely answer arbitrary questions about the behavior of the operating system and user programs. - -Visit the following resources to learn more: - -- [df manual](https://man7.org/linux/man-pages/man1/dtrace.1.html) -- [Wikipedia - DTrace](https://en.wikipedia.org/wiki/DTrace) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/136-systemtap.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/136-systemtap.md deleted file mode 100644 index 301808f08..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/136-systemtap.md +++ /dev/null @@ -1 +0,0 @@ -# Systemtap diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/137-uname.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/137-uname.md deleted file mode 100644 index fab10ecec..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/137-uname.md +++ /dev/null @@ -1,9 +0,0 @@ -# Uname - -Uname is a short form of Unix name and it helps to print the system information for both hardware and software in the current running system. - -Visit the following resources to learn more: - -- [Uname Command Tutorial](https://www.tutorialspoint.com/unix_commands/uname.htm) -- [Uname Tutorial For Beginners](https://www.howtoforge.com/linux-uname-command/) -- [Uname Command In Linux](https://linuxize.com/post/uname-command-in-linux/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/138-df.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/138-df.md deleted file mode 100644 index b1c096c50..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/138-df.md +++ /dev/null @@ -1,9 +0,0 @@ -# df - -`df` is a standard Unix command used to display the amount of available disk space for file systems on which the invoking user has appropriate read access. df is typically implemented using the statfs or statvfs system calls. - -Visit the following resources to learn more: - -- [df manual](https://man7.org/linux/man-pages/man1/df.1.html) -- [Redhat - Check your disk space use with the Linux df command](https://www.redhat.com/sysadmin/Linux-df-command) -- [df command with examples](https://www.geeksforgeeks.org/df-command-linux-examples/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/139-history.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/139-history.md deleted file mode 100644 index 9a5eb2f97..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/139-history.md +++ /dev/null @@ -1,9 +0,0 @@ -# history - -`history` command is used to view the **previously executed command**. Every command executed is treated as the event and is associated with an event number using which they can be recalled and changed if required. These commands are saved in a history file. - -It has the below syntax: `$ history` - -Visit the following resources to learn more: - -- [What is history command? How to recall previous commands?](https://www.geeksforgeeks.org/history-command-in-linux-with-examples/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/140-du.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/140-du.md deleted file mode 100644 index 9c5c83eae..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/140-du.md +++ /dev/null @@ -1,9 +0,0 @@ -# Du - -The `du` utility, short for disk usage, displays the file system block usage for each file argument and for each directory in the file hierarchy rooted in each directory argument. If no file is specified, the block usage of the hierarchy rooted in the current directory is displayed. - -Visit the following resources to learn more: - -- [du manual](https://man7.org/linux/man-pages/man1/du.1.html) -- [Redhat - du and the options you should be using](https://www.redhat.com/sysadmin/du-command-options) -- [Du command with examples](https://linuxhint.com/linux-du-command-examples/) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/141-scp.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/141-scp.md deleted file mode 100644 index e7d6b1d4e..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/141-scp.md +++ /dev/null @@ -1,9 +0,0 @@ -# SCP - -`SCP` is an acronym for Secure Copy Protocol.It is a command line utility that allows the user to securely copy files and directories between two locations usually between unix or linux systems.The protocol ensures the transmission of files is encrypted to prevent anyone with suspicious intentions from getting sensitive information.`SCP` uses encryption over an `SSH` (Secure Shell) connection, this ensures that the data being transferred is protected from suspicious attacks. - -Visit the following resources to learn more: - -- [SCP Linux Command](https://www.freecodecamp.org/news/scp-linux-command-example-how-to-ssh-file-transfer-from-remote-to-local/) -- [10 SCP command examples](https://www.tecmint.com/scp-commands-examples/) -- [SCP command explained](https://phoenixnap.com/kb/linux-scp-command) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/142-ufw.md b/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/142-ufw.md deleted file mode 100644 index 096b8d91e..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/101-live-in-terminal/142-ufw.md +++ /dev/null @@ -1,9 +0,0 @@ -# UFW - -UFW, or _uncomplicated firewall_, is command-line based utility for managing firewall rules in Arch Linux, Debian and Ubuntu. It's aim is to make firewall configuration as simple as possible. It is a frontend for the `iptables` firewalling tool. - -Visit the following resources to learn more: - -- [ufw Documentation](https://manpages.ubuntu.com/manpages/trusty/man8/ufw.8.html) -- [Basic Introduction to UFW](https://www.linux.com/training-tutorials/introduction-uncomplicated-firewall-ufw/) -- [UFW Essentials](https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands) diff --git a/src/data/roadmaps/devops/content/102-managing-servers/index.md b/src/data/roadmaps/devops/content/102-managing-servers/index.md deleted file mode 100644 index 66d9e483c..000000000 --- a/src/data/roadmaps/devops/content/102-managing-servers/index.md +++ /dev/null @@ -1,7 +0,0 @@ -# Managing Servers - -Server management includes all of the monitoring and maintenance required for servers to operate reliably and at optimal performance levels. Server management also involves the management of hardware, software, security, and backups all in service of keeping the IT environment operational and efficient. The primary goals of an effective server management strategy are to: - -- Minimize server slowdowns and downtime while maximizing reliability. -- Build secure server environments. -- Scale servers and related operations to meet the needs of the organization over time. diff --git a/src/data/roadmaps/devops/content/103-networking-protocols/107-port-forwarding.md b/src/data/roadmaps/devops/content/103-networking-protocols/107-port-forwarding.md deleted file mode 100644 index 411430f27..000000000 --- a/src/data/roadmaps/devops/content/103-networking-protocols/107-port-forwarding.md +++ /dev/null @@ -1,8 +0,0 @@ -# Port Forwarding - -Port forwarding, sometimes called **port mapping**, allows computers or services in private networks to connect over the internet with other public or private computers or services. Since firewalls exist to keep unwanted visitors out, the visitors you want to get in are going to need a way to do so. Knowing the IP address isn’t enough, Requests need to be directed to the correct port as well. - -Visit the following resources to learn more: - -- [What is Port Forwarding?](https://learn.g2.com/port-forwarding) -- [Types of Port Forwarding](https://cybernews.com/what-is-vpn/port-forwarding/) diff --git a/src/data/roadmaps/devops/content/103-version-control-systems/100-git.md b/src/data/roadmaps/devops/content/103-version-control-systems/100-git.md new file mode 100644 index 000000000..eb35be86b --- /dev/null +++ b/src/data/roadmaps/devops/content/103-version-control-systems/100-git.md @@ -0,0 +1,9 @@ +# Git + +[Git](https://git-scm.com/) is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. + +Visit the following resources to learn more: + +- [Git & GitHub Crash Course For Beginners](https://www.youtube.com/watch?v=SWYqp7iY_Tc) +- [Learn Git with Tutorials, News and Tips - Atlassian](https://www.atlassian.com/git) +- [Git Cheat Sheet](https://cs.fyi/guide/git-cheatsheet) diff --git a/src/data/roadmaps/devops/content/103-version-control-systems/index.md b/src/data/roadmaps/devops/content/103-version-control-systems/index.md new file mode 100644 index 000000000..aacbc4656 --- /dev/null +++ b/src/data/roadmaps/devops/content/103-version-control-systems/index.md @@ -0,0 +1,8 @@ +# Version Control Systems + +Version control/source control systems allow developers to track and control changes to code over time. These services often include the ability to make atomic revisions to code, branch/fork off of specific points, and to compare versions of code. They are useful in determining the who, what, when, and why code changes were made. + +Visit the following resources to learn more: + +- [Git](https://git-scm.com/) +- [What is Version Control?](https://www.atlassian.com/git/tutorials/what-is-version-control) diff --git a/src/data/roadmaps/devops/content/104-vcs-hosting/100-github.md b/src/data/roadmaps/devops/content/104-vcs-hosting/100-github.md new file mode 100644 index 000000000..25068b826 --- /dev/null +++ b/src/data/roadmaps/devops/content/104-vcs-hosting/100-github.md @@ -0,0 +1,13 @@ +# GitHub + +GitHub is a provider of Internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features. + +Visit the following resources to learn more: + +- [GitHub Website](https://github.com) +- [GitHub Documentation](https://docs.github.com/en/get-started/quickstart) +- [How to Use Git in a Professional Dev Team](https://ooloo.io/project/github-flow) +- [What is GitHub?](https://www.youtube.com/watch?v=w3jLJU7DT5E) +- [Git vs. GitHub: Whats the difference?](https://www.youtube.com/watch?v=wpISo9TNjfU) +- [Git and GitHub for Beginners](https://www.youtube.com/watch?v=RGOj5yH7evk) +- [Git and GitHub - CS50 Beyond 2019](https://www.youtube.com/watch?v=eulnSXkhE7I) diff --git a/src/data/roadmaps/devops/content/104-vcs-hosting/101-gitlab.md b/src/data/roadmaps/devops/content/104-vcs-hosting/101-gitlab.md new file mode 100644 index 000000000..2421d64b6 --- /dev/null +++ b/src/data/roadmaps/devops/content/104-vcs-hosting/101-gitlab.md @@ -0,0 +1,8 @@ +# GitLab + +GitLab is a provider of internet hosting for software development and version control using Git. It offers the distributed version control and source code management functionality of Git, plus its own features. + +Visit the following resources to learn more: + +- [GitLab Website](https://gitlab.com/) +- [GitLab Documentation](https://docs.gitlab.com/) diff --git a/src/data/roadmaps/devops/content/104-vcs-hosting/102-bitbucket.md b/src/data/roadmaps/devops/content/104-vcs-hosting/102-bitbucket.md new file mode 100644 index 000000000..61d7a2118 --- /dev/null +++ b/src/data/roadmaps/devops/content/104-vcs-hosting/102-bitbucket.md @@ -0,0 +1,14 @@ +# Bitbucket + +Bitbucket is a Git based hosting and source code repository service that is Atlassian's alternative to other products like GitHub, GitLab etc + +Bitbucket offers hosting options via Bitbucket Cloud (Atlassian's servers), Bitbucket Server (customer's on-premise) or Bitbucket Data Centre (number of servers in customers on-premise or cloud environment) + +Visit the following resources to learn more: + +- [Bitbucket Website](https://bitbucket.org/product) +- [A brief overview of Bitbucket](https://bitbucket.org/product/guides/getting-started/overview#a-brief-overview-of-bitbucket) +- [Getting started with Bitbucket](https://bitbucket.org/product/guides/basics/bitbucket-interface) +- [Using Git with Bitbucket Cloud](https://www.atlassian.com/git/tutorials/learn-git-with-bitbucket-cloud) +- [Bitbucket tutorial | How to use Bitbucket Cloud](https://www.youtube.com/watch?v=M44nEyd_5To) +- [Bitbucket Tutorial | Bitbucket for Beginners](https://www.youtube.com/watch?v=i5T-DB8tb4A) diff --git a/src/data/roadmaps/devops/content/104-vcs-hosting/index.md b/src/data/roadmaps/devops/content/104-vcs-hosting/index.md new file mode 100644 index 000000000..1878fee65 --- /dev/null +++ b/src/data/roadmaps/devops/content/104-vcs-hosting/index.md @@ -0,0 +1,10 @@ +# Repo Hosting Services + +When working on a team, you often need a remote place to put your code so others can access it, create their own branches, and create or review pull requests. These services often include issue tracking, code review, and continuous integration features. A few popular choices are GitHub, GitLab, BitBucket, and AWS CodeCommit. + +Visit the following resources to learn more: + +- [GitHub](https://github.com/features/) +- [GitLab](https://about.gitlab.com/) +- [BitBucket](https://bitbucket.org/product/guides/getting-started/overview) +- [How to choose the best source code repository](https://bitbucket.org/product/code-repository) diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/100-docker.md b/src/data/roadmaps/devops/content/105-infrastructure-as-code/100-docker.md deleted file mode 100644 index b6327bc2f..000000000 --- a/src/data/roadmaps/devops/content/105-infrastructure-as-code/100-docker.md +++ /dev/null @@ -1,11 +0,0 @@ -# Docker - -Docker is a software platform that allows you to build, test, and deploy applications quickly. Docker packages software into standardized units called containers that have everything the software needs to run including libraries, system tools, code, and runtime. Using Docker, you can quickly deploy and scale applications into any environment and know your code will run. - -Visit the following resources to learn more: - -- [Docker Website](https://www.docker.com/) -- [Docker Documentation](https://docs.docker.com/) -- [Learn Docker | Boot.dev](https://boot.dev/learn/learn-docker) -- [Docker Tutorial for Beginners](https://www.youtube.com/watch?v=pTFZFxd4hOI) -- [Docker Full Course for Beginners](https://www.youtube.com/watch?v=3c-iBn73dDE) diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/102-salt.md b/src/data/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/102-salt.md deleted file mode 100644 index cb428968d..000000000 --- a/src/data/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/102-salt.md +++ /dev/null @@ -1,10 +0,0 @@ -# Salt - -Salt is an open-source event-driven IT automation, remote task execution, and configuration management software service. Built on python, Salt uses simple and human-readable YAML combined with event-driven automation to deploy and configure complex IT systems. - -Visit the following resources to learn more: - -- [Salt Project Website](https://docs.saltproject.io/en/latest/topics/about_salt_project.html) -- [Official Documentation](https://docs.saltproject.io/en/latest/) -- [Introduction to Salt](https://docs.saltproject.io/en/latest/topics/index.html) -- [Salt Installation](https://docs.saltproject.io/en/latest/topics/installation/index.html#installation) diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/104-kubernetes.md b/src/data/roadmaps/devops/content/105-infrastructure-as-code/104-kubernetes.md deleted file mode 100644 index d767eda20..000000000 --- a/src/data/roadmaps/devops/content/105-infrastructure-as-code/104-kubernetes.md +++ /dev/null @@ -1,15 +0,0 @@ -# Kubernetes - -Kubernetes is an [open source](https://github.com/kubernetes/kubernetes) container management platform, and the dominant product in this space. Using Kubernetes, teams can deploy images across multiple underlying hosts, defining their desired availability, deployment logic, and scaling logic in YAML. Kubernetes evolved from Borg, an internal Google platform used to provision and allocate compute resources. (similar to the Autopilot and Aquaman systems of Microsoft Azure) - -The popularity of Kubernetes has made it an increasingly important skill for the DevOps Engineer and has triggered the creation of Platform teams across the industry. These Platform engineering teams often exist with the sole purpose of making Kubernetes approachable and usable for their product development colleagues. - -Visit the following resources to learn more: - -- [Kubernetes Website](https://kubernetes.io/) -- [Kubernetes Documentation](https://kubernetes.io/docs/home/) -- [Kubernetes Crash Course for Absolute Beginners](https://www.youtube.com/watch?v=s_o8dwzRlu4) -- [Primer: How Kubernetes Came to Be, What It Is, and Why You Should Care](https://thenewstack.io/primer-how-kubernetes-came-to-be-what-it-is-and-why-you-should-care/) -- [Kubernetes: An Overview](https://thenewstack.io/kubernetes-an-overview/) -- [Kubernetes Tutorials by Kubernetes](https://kubernetes.io/docs/tutorials/) -- [Fast Kubernetes course with practical labs](https://github.com/omerbsezer/fast-kubernetes) \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/104-nomad.md b/src/data/roadmaps/devops/content/105-infrastructure-as-code/104-nomad.md deleted file mode 100644 index bcd58885c..000000000 --- a/src/data/roadmaps/devops/content/105-infrastructure-as-code/104-nomad.md +++ /dev/null @@ -1,9 +0,0 @@ -# Nomad - -[Nomad](https://github.com/hashicorp/nomad) is a simple and flexible scheduler and orchestrator to deploy and manage containers and non-containerized applications across on-prem and clouds at scale. Nomad runs as a single binary with a small resource footprint and supports a wide range of workloads beyond containers, including Windows, Java, VM, Docker, and more. - -Visit the following resources to learn more: - -- [Nomad Website](https://www.nomadproject.io/) -- [Nomad Documentation](https://www.nomadproject.io/docs) -- [Nomad Tutorials](https://learn.hashicorp.com/nomad) diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/index.md b/src/data/roadmaps/devops/content/105-infrastructure-as-code/index.md deleted file mode 100644 index 138409cfa..000000000 --- a/src/data/roadmaps/devops/content/105-infrastructure-as-code/index.md +++ /dev/null @@ -1,12 +0,0 @@ -# Infrastructure as Code - -Sometimes referred to as IaC, this section refers to the techniques and tools used to define infrastructure, typically in a markup language like YAML or JSON. Infrastructure as code allows DevOps Engineers to use the same workflows used by software developers to version, roll back, and otherwise manage changes. - -The term Infrastructure as Code encompasses everything from bootstrapping to configuration to orchestration, and it is considered a best practice in the industry to manage all infrastructure as code. This technique precipitated the explosion in system complexity seen in modern DevOps organizations. - -Visit the following resources to learn more: - -- [What is Infrastructure as Code?](https://www.youtube.com/watch?v=zWw2wuiKd5o) -- [What is Infrastructure as Code? Difference of Infrastructure as Code Tools](https://www.youtube.com/watch?v=POPP2WTJ8es) -- [GUIs, CLI, APIs: Learn Basic Terms of Infrastructure-as-Code](https://thenewstack.io/guis-cli-apis-learn-basic-terms-of-infrastructure-as-code/) -- [Understanding Infrastructure as Code (IaC) in less than 10 minutes](https://www.novatec-gmbh.de/en/blog/understanding-infrastructure-as-code-iac-in-less-than-10-minutes/) diff --git a/src/data/roadmaps/devops/content/104-setting-up-x/100-reverse-proxy.md b/src/data/roadmaps/devops/content/105-setting-up-x/100-reverse-proxy.md similarity index 100% rename from src/data/roadmaps/devops/content/104-setting-up-x/100-reverse-proxy.md rename to src/data/roadmaps/devops/content/105-setting-up-x/100-reverse-proxy.md diff --git a/src/data/roadmaps/devops/content/104-setting-up-x/101-caching-server.md b/src/data/roadmaps/devops/content/105-setting-up-x/101-caching-server.md similarity index 100% rename from src/data/roadmaps/devops/content/104-setting-up-x/101-caching-server.md rename to src/data/roadmaps/devops/content/105-setting-up-x/101-caching-server.md diff --git a/src/data/roadmaps/devops/content/104-setting-up-x/102-forward-proxy.md b/src/data/roadmaps/devops/content/105-setting-up-x/102-forward-proxy.md similarity index 100% rename from src/data/roadmaps/devops/content/104-setting-up-x/102-forward-proxy.md rename to src/data/roadmaps/devops/content/105-setting-up-x/102-forward-proxy.md diff --git a/src/data/roadmaps/devops/content/104-setting-up-x/103-load-balancer.md b/src/data/roadmaps/devops/content/105-setting-up-x/103-load-balancer.md similarity index 100% rename from src/data/roadmaps/devops/content/104-setting-up-x/103-load-balancer.md rename to src/data/roadmaps/devops/content/105-setting-up-x/103-load-balancer.md diff --git a/src/data/roadmaps/devops/content/104-setting-up-x/104-firewall.md b/src/data/roadmaps/devops/content/105-setting-up-x/104-firewall.md similarity index 100% rename from src/data/roadmaps/devops/content/104-setting-up-x/104-firewall.md rename to src/data/roadmaps/devops/content/105-setting-up-x/104-firewall.md diff --git a/src/data/roadmaps/devops/content/104-setting-up-x/105-nginx.md b/src/data/roadmaps/devops/content/105-setting-up-x/105-nginx.md similarity index 100% rename from src/data/roadmaps/devops/content/104-setting-up-x/105-nginx.md rename to src/data/roadmaps/devops/content/105-setting-up-x/105-nginx.md diff --git a/src/data/roadmaps/devops/content/104-setting-up-x/106-apache.md b/src/data/roadmaps/devops/content/105-setting-up-x/106-apache.md similarity index 100% rename from src/data/roadmaps/devops/content/104-setting-up-x/106-apache.md rename to src/data/roadmaps/devops/content/105-setting-up-x/106-apache.md diff --git a/src/data/roadmaps/devops/content/104-setting-up-x/107-tomcat.md b/src/data/roadmaps/devops/content/105-setting-up-x/107-tomcat.md similarity index 100% rename from src/data/roadmaps/devops/content/104-setting-up-x/107-tomcat.md rename to src/data/roadmaps/devops/content/105-setting-up-x/107-tomcat.md diff --git a/src/data/roadmaps/devops/content/104-setting-up-x/108-iis.md b/src/data/roadmaps/devops/content/105-setting-up-x/108-iis.md similarity index 100% rename from src/data/roadmaps/devops/content/104-setting-up-x/108-iis.md rename to src/data/roadmaps/devops/content/105-setting-up-x/108-iis.md diff --git a/src/data/roadmaps/devops/content/104-setting-up-x/index.md b/src/data/roadmaps/devops/content/105-setting-up-x/index.md similarity index 100% rename from src/data/roadmaps/devops/content/104-setting-up-x/index.md rename to src/data/roadmaps/devops/content/105-setting-up-x/index.md diff --git a/src/data/roadmaps/devops/content/108-cloud-providers/100-aws.md b/src/data/roadmaps/devops/content/107-cloud-providers/100-aws.md similarity index 100% rename from src/data/roadmaps/devops/content/108-cloud-providers/100-aws.md rename to src/data/roadmaps/devops/content/107-cloud-providers/100-aws.md diff --git a/src/data/roadmaps/devops/content/108-cloud-providers/101-google-cloud.md b/src/data/roadmaps/devops/content/107-cloud-providers/101-google-cloud.md similarity index 100% rename from src/data/roadmaps/devops/content/108-cloud-providers/101-google-cloud.md rename to src/data/roadmaps/devops/content/107-cloud-providers/101-google-cloud.md diff --git a/src/data/roadmaps/devops/content/108-cloud-providers/102-azure.md b/src/data/roadmaps/devops/content/107-cloud-providers/102-azure.md similarity index 100% rename from src/data/roadmaps/devops/content/108-cloud-providers/102-azure.md rename to src/data/roadmaps/devops/content/107-cloud-providers/102-azure.md diff --git a/src/data/roadmaps/devops/content/108-cloud-providers/103-heroku.md b/src/data/roadmaps/devops/content/107-cloud-providers/103-heroku.md similarity index 100% rename from src/data/roadmaps/devops/content/108-cloud-providers/103-heroku.md rename to src/data/roadmaps/devops/content/107-cloud-providers/103-heroku.md diff --git a/src/data/roadmaps/devops/content/108-cloud-providers/104-albaba-cloud.md b/src/data/roadmaps/devops/content/107-cloud-providers/104-albaba-cloud.md similarity index 100% rename from src/data/roadmaps/devops/content/108-cloud-providers/104-albaba-cloud.md rename to src/data/roadmaps/devops/content/107-cloud-providers/104-albaba-cloud.md diff --git a/src/data/roadmaps/devops/content/108-cloud-providers/104-digital-ocean.md b/src/data/roadmaps/devops/content/107-cloud-providers/104-digital-ocean.md similarity index 100% rename from src/data/roadmaps/devops/content/108-cloud-providers/104-digital-ocean.md rename to src/data/roadmaps/devops/content/107-cloud-providers/104-digital-ocean.md diff --git a/src/data/roadmaps/devops/content/108-cloud-providers/105-linode.md b/src/data/roadmaps/devops/content/107-cloud-providers/105-linode.md similarity index 100% rename from src/data/roadmaps/devops/content/108-cloud-providers/105-linode.md rename to src/data/roadmaps/devops/content/107-cloud-providers/105-linode.md diff --git a/src/data/roadmaps/devops/content/108-cloud-providers/106-vultr.md b/src/data/roadmaps/devops/content/107-cloud-providers/106-vultr.md similarity index 100% rename from src/data/roadmaps/devops/content/108-cloud-providers/106-vultr.md rename to src/data/roadmaps/devops/content/107-cloud-providers/106-vultr.md diff --git a/src/data/roadmaps/devops/content/108-cloud-providers/index.md b/src/data/roadmaps/devops/content/107-cloud-providers/index.md similarity index 100% rename from src/data/roadmaps/devops/content/108-cloud-providers/index.md rename to src/data/roadmaps/devops/content/107-cloud-providers/index.md diff --git a/src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/101-nagios.md b/src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/101-nagios.md deleted file mode 100644 index 1577a13d3..000000000 --- a/src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/101-nagios.md +++ /dev/null @@ -1,9 +0,0 @@ -# Nagios - -Nagios is a powerful tool that provides you with instant awareness of your organization’s mission-critical IT infrastructure. Nagios allows you to detect and repair problems and mitigate future issues before they affect end-users and customers. - -Visit the following resources to learn more: - -- [Nagios Website](https://www.nagios.org/) -- [Official Documentation](https://www.nagios.org/documentation/) -- [Nagios Support Knowledge Base](https://support.nagios.com/kb/) diff --git a/src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-monit.md b/src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-monit.md deleted file mode 100644 index 261b92ba6..000000000 --- a/src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-monit.md +++ /dev/null @@ -1,13 +0,0 @@ -# Monit - -Monit is a small Open Source utility for managing and monitoring Unix systems. Monit conducts automatic maintenance and repair and can execute meaningful causal actions in error situations. - -Monit has the ability to start a process if it is not running, restart a process if not responding, and stop a process if uses high resources. Additionally, you can also use Monit to monitor files, directories, and filesystems for changes, checksum changes, file size changes, or timestamp changes. - -With Monit, you can able to monitor remote hosts’ TCP/IP port, server protocols, and ping. Monit keeps its own log file and alerts about any critical error conditions and recovery status. - -Visit the following resources to learn more: - -- [Monit Website](https://mmonit.com/monit/) -- [Monit Official Documentation](https://mmonit.com/monit/documentation/monit.html) -- [Monit Tutorial](https://www.tecmint.com/monit-linux-services-monitoring/) diff --git a/src/data/roadmaps/devops/content/107-monitoring/101-application-monitoring/103-instana.md b/src/data/roadmaps/devops/content/107-monitoring/101-application-monitoring/103-instana.md deleted file mode 100644 index 4b69cd12b..000000000 --- a/src/data/roadmaps/devops/content/107-monitoring/101-application-monitoring/103-instana.md +++ /dev/null @@ -1,8 +0,0 @@ -# Instana - -Instana is particularly used in monitoring and managing the performance of software used in microservice architectures, and permits 3D visualisation of performance through graphs generated using machine learning algorithms, with notifications regarding performance also generated automatically. Instana's Application Performance Monitoring (APM) tool of the same name is especially purposed for monitoring software used in so-called "container orchestration" (a modular method of providing a software service). - -Visit the following resources to learn more: - -- [Instana Website](https://www.instana.com/) -- [Official Resources(White Papers and Ebooks) ](https://www.instana.com/resources/) diff --git a/src/data/roadmaps/devops/content/107-monitoring/index.md b/src/data/roadmaps/devops/content/107-monitoring/index.md deleted file mode 100644 index c5d93d63a..000000000 --- a/src/data/roadmaps/devops/content/107-monitoring/index.md +++ /dev/null @@ -1,8 +0,0 @@ -# Monitoring - -DevOps monitoring entails overseeing the entire development process from planning, development, integration and testing, deployment, and operations. It involves a complete and real-time view of the status of applications, services, and infrastructure in the production environment. Features such as real-time streaming, historical replay, and visualizations are critical components of application and service monitoring. - -Visit the following resources to learn more: - -- [DevOps Monitoring](https://www.atlassian.com/devops/devops-tools/devops-monitoring) -- [The Hows, Whys and Whats of Monitoring Microservices](https://thenewstack.io/the-hows-whys-and-whats-of-monitoring-microservices/) diff --git a/src/data/roadmaps/devops/content/108-cloud-providers/108-IBM-Cloud.md b/src/data/roadmaps/devops/content/108-cloud-providers/108-IBM-Cloud.md deleted file mode 100644 index fe660bee2..000000000 --- a/src/data/roadmaps/devops/content/108-cloud-providers/108-IBM-Cloud.md +++ /dev/null @@ -1,14 +0,0 @@ -# IBM Cloud - -IBM cloud computing is a set of cloud computing services that offers both platform as a service (PaaS) and infrastructure as a service (IaaS). IBM Cloud supports various languages and frameworks such as Go, Java™, Node.js, Python and Swift. - -Visit the following resources to learn more: - -- [IBM cloud](https://www.ibm.com/cloud) -- [IBM Cloud Documentation](https://cloud.ibm.com/docs) -- [IBM Cloud Essentials](https://www.coursera.org/learn/ibm-cloud-essentials) -- [IBM Cloud Training](https://www.ibm.com/training/cloud) -- [Introduction to IBM Cloud](https://www.youtube.com/watch?v=HzugDzl2cfg) -- [Developing in IBM Cloud](https://www.youtube.com/watch?v=Bsy6mhRc7ZA) -- [IBM Cloud Foundation Skills Series](https://youtube.com/playlist?list=PLmesOgYt3nKCfsXqx-A5k1bP7t146U4rz) -- [The Beginners Guide to IBM Cloud](https://developer.ibm.com/components/cloud-ibm/tutorials/) diff --git a/src/data/roadmaps/devops/content/109-serverless/100-cloudflare.md b/src/data/roadmaps/devops/content/109-serverless/100-cloudflare.md new file mode 100644 index 000000000..cdae8257f --- /dev/null +++ b/src/data/roadmaps/devops/content/109-serverless/100-cloudflare.md @@ -0,0 +1,2 @@ +# Cloudflare + diff --git a/src/data/roadmaps/devops/content/109-serverless/101-aws-lambda.md b/src/data/roadmaps/devops/content/109-serverless/101-aws-lambda.md new file mode 100644 index 000000000..9d4da0f59 --- /dev/null +++ b/src/data/roadmaps/devops/content/109-serverless/101-aws-lambda.md @@ -0,0 +1 @@ +# Aws lambda \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/109-serverless/102-azure-functions.md b/src/data/roadmaps/devops/content/109-serverless/102-azure-functions.md new file mode 100644 index 000000000..fc367f594 --- /dev/null +++ b/src/data/roadmaps/devops/content/109-serverless/102-azure-functions.md @@ -0,0 +1 @@ +# Azure functions \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/109-serverless/103-gcp-functions.md b/src/data/roadmaps/devops/content/109-serverless/103-gcp-functions.md new file mode 100644 index 000000000..52dd3b730 --- /dev/null +++ b/src/data/roadmaps/devops/content/109-serverless/103-gcp-functions.md @@ -0,0 +1 @@ +# Gcp functions \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/109-serverless/104-vercel.md b/src/data/roadmaps/devops/content/109-serverless/104-vercel.md new file mode 100644 index 000000000..784f05454 --- /dev/null +++ b/src/data/roadmaps/devops/content/109-serverless/104-vercel.md @@ -0,0 +1 @@ +# Vercel \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/109-serverless/105-netlify.md b/src/data/roadmaps/devops/content/109-serverless/105-netlify.md new file mode 100644 index 000000000..a8449ffd4 --- /dev/null +++ b/src/data/roadmaps/devops/content/109-serverless/105-netlify.md @@ -0,0 +1 @@ +# Netlify \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/109-serverless/index.md b/src/data/roadmaps/devops/content/109-serverless/index.md new file mode 100644 index 000000000..0ef70d396 --- /dev/null +++ b/src/data/roadmaps/devops/content/109-serverless/index.md @@ -0,0 +1 @@ +# Serverless \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/101-aws-cdk.md b/src/data/roadmaps/devops/content/110-infrastructure-provisioning/100-aws-cdk.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/101-aws-cdk.md rename to src/data/roadmaps/devops/content/110-infrastructure-provisioning/100-aws-cdk.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/102-cloudformation.md b/src/data/roadmaps/devops/content/110-infrastructure-provisioning/102-cloudformation.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/102-cloudformation.md rename to src/data/roadmaps/devops/content/110-infrastructure-provisioning/102-cloudformation.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/103-pulumi.md b/src/data/roadmaps/devops/content/110-infrastructure-provisioning/103-pulumi.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/103-pulumi.md rename to src/data/roadmaps/devops/content/110-infrastructure-provisioning/103-pulumi.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/100-terraform.md b/src/data/roadmaps/devops/content/110-infrastructure-provisioning/103-terraform.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/100-terraform.md rename to src/data/roadmaps/devops/content/110-infrastructure-provisioning/103-terraform.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/index.md b/src/data/roadmaps/devops/content/110-infrastructure-provisioning/index.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/103-infrastructure-provisioning/index.md rename to src/data/roadmaps/devops/content/110-infrastructure-provisioning/index.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/100-ansible.md b/src/data/roadmaps/devops/content/111-configuration-management/100-ansible.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/100-ansible.md rename to src/data/roadmaps/devops/content/111-configuration-management/100-ansible.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/101-chef.md b/src/data/roadmaps/devops/content/111-configuration-management/101-chef.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/101-chef.md rename to src/data/roadmaps/devops/content/111-configuration-management/101-chef.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/103-puppet.md b/src/data/roadmaps/devops/content/111-configuration-management/102-puppet.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/103-puppet.md rename to src/data/roadmaps/devops/content/111-configuration-management/102-puppet.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/index.md b/src/data/roadmaps/devops/content/111-configuration-management/index.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/102-configuration-management/index.md rename to src/data/roadmaps/devops/content/111-configuration-management/index.md diff --git a/src/data/roadmaps/devops/content/106-ci-cd/100-gitlab-ci.md b/src/data/roadmaps/devops/content/112-ci-cd/100-gitlab-ci.md similarity index 100% rename from src/data/roadmaps/devops/content/106-ci-cd/100-gitlab-ci.md rename to src/data/roadmaps/devops/content/112-ci-cd/100-gitlab-ci.md diff --git a/src/data/roadmaps/devops/content/106-ci-cd/101-jenkins.md b/src/data/roadmaps/devops/content/112-ci-cd/101-jenkins.md similarity index 100% rename from src/data/roadmaps/devops/content/106-ci-cd/101-jenkins.md rename to src/data/roadmaps/devops/content/112-ci-cd/101-jenkins.md diff --git a/src/data/roadmaps/devops/content/106-ci-cd/102-github-actions.md b/src/data/roadmaps/devops/content/112-ci-cd/102-github-actions.md similarity index 100% rename from src/data/roadmaps/devops/content/106-ci-cd/102-github-actions.md rename to src/data/roadmaps/devops/content/112-ci-cd/102-github-actions.md diff --git a/src/data/roadmaps/devops/content/106-ci-cd/103-travis-ci.md b/src/data/roadmaps/devops/content/112-ci-cd/103-travis-ci.md similarity index 100% rename from src/data/roadmaps/devops/content/106-ci-cd/103-travis-ci.md rename to src/data/roadmaps/devops/content/112-ci-cd/103-travis-ci.md diff --git a/src/data/roadmaps/devops/content/106-ci-cd/105-teamcity.md b/src/data/roadmaps/devops/content/112-ci-cd/105-teamcity.md similarity index 100% rename from src/data/roadmaps/devops/content/106-ci-cd/105-teamcity.md rename to src/data/roadmaps/devops/content/112-ci-cd/105-teamcity.md diff --git a/src/data/roadmaps/devops/content/106-ci-cd/106-azure-devops-services.md b/src/data/roadmaps/devops/content/112-ci-cd/106-azure-devops-services.md similarity index 100% rename from src/data/roadmaps/devops/content/106-ci-cd/106-azure-devops-services.md rename to src/data/roadmaps/devops/content/112-ci-cd/106-azure-devops-services.md diff --git a/src/data/roadmaps/devops/content/106-ci-cd/107-circle-ci.md b/src/data/roadmaps/devops/content/112-ci-cd/107-circle-ci.md similarity index 100% rename from src/data/roadmaps/devops/content/106-ci-cd/107-circle-ci.md rename to src/data/roadmaps/devops/content/112-ci-cd/107-circle-ci.md diff --git a/src/data/roadmaps/devops/content/106-ci-cd/108-drone.md b/src/data/roadmaps/devops/content/112-ci-cd/108-drone.md similarity index 100% rename from src/data/roadmaps/devops/content/106-ci-cd/108-drone.md rename to src/data/roadmaps/devops/content/112-ci-cd/108-drone.md diff --git a/src/data/roadmaps/devops/content/106-ci-cd/index.md b/src/data/roadmaps/devops/content/112-ci-cd/index.md similarity index 100% rename from src/data/roadmaps/devops/content/106-ci-cd/index.md rename to src/data/roadmaps/devops/content/112-ci-cd/index.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/105-secret-management/100-vault.md b/src/data/roadmaps/devops/content/113-secret-management/100-vault.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/105-secret-management/100-vault.md rename to src/data/roadmaps/devops/content/113-secret-management/100-vault.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/105-secret-management/101-sops.md b/src/data/roadmaps/devops/content/113-secret-management/101-sops.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/105-secret-management/101-sops.md rename to src/data/roadmaps/devops/content/113-secret-management/101-sops.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/105-secret-management/102-sealed-secrets.md b/src/data/roadmaps/devops/content/113-secret-management/102-sealed-secrets.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/105-secret-management/102-sealed-secrets.md rename to src/data/roadmaps/devops/content/113-secret-management/102-sealed-secrets.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/105-secret-management/103-cloud-specific-tools.md b/src/data/roadmaps/devops/content/113-secret-management/103-cloud-specific-tools.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/105-secret-management/103-cloud-specific-tools.md rename to src/data/roadmaps/devops/content/113-secret-management/103-cloud-specific-tools.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/105-secret-management/index.md b/src/data/roadmaps/devops/content/113-secret-management/index.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/105-secret-management/index.md rename to src/data/roadmaps/devops/content/113-secret-management/index.md diff --git a/src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/100-prometheus.md b/src/data/roadmaps/devops/content/114-infrastructure-monitoring/100-prometheus.md similarity index 100% rename from src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/100-prometheus.md rename to src/data/roadmaps/devops/content/114-infrastructure-monitoring/100-prometheus.md diff --git a/src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-datadog.md b/src/data/roadmaps/devops/content/114-infrastructure-monitoring/102-datadog.md similarity index 100% rename from src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-datadog.md rename to src/data/roadmaps/devops/content/114-infrastructure-monitoring/102-datadog.md diff --git a/src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-grafana.md b/src/data/roadmaps/devops/content/114-infrastructure-monitoring/102-grafana.md similarity index 100% rename from src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-grafana.md rename to src/data/roadmaps/devops/content/114-infrastructure-monitoring/102-grafana.md diff --git a/src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-zabbix.md b/src/data/roadmaps/devops/content/114-infrastructure-monitoring/102-zabbix.md similarity index 100% rename from src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/102-zabbix.md rename to src/data/roadmaps/devops/content/114-infrastructure-monitoring/102-zabbix.md diff --git a/src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/index.md b/src/data/roadmaps/devops/content/114-infrastructure-monitoring/index.md similarity index 100% rename from src/data/roadmaps/devops/content/107-monitoring/100-infrastructure-monitoring/index.md rename to src/data/roadmaps/devops/content/114-infrastructure-monitoring/index.md diff --git a/src/data/roadmaps/devops/content/107-monitoring/101-application-monitoring/100-jaeger.md b/src/data/roadmaps/devops/content/115-application-monitoring/100-jaeger.md similarity index 100% rename from src/data/roadmaps/devops/content/107-monitoring/101-application-monitoring/100-jaeger.md rename to src/data/roadmaps/devops/content/115-application-monitoring/100-jaeger.md diff --git a/src/data/roadmaps/devops/content/107-monitoring/101-application-monitoring/101-new-relic.md b/src/data/roadmaps/devops/content/115-application-monitoring/101-new-relic.md similarity index 100% rename from src/data/roadmaps/devops/content/107-monitoring/101-application-monitoring/101-new-relic.md rename to src/data/roadmaps/devops/content/115-application-monitoring/101-new-relic.md diff --git a/src/data/roadmaps/devops/content/115-application-monitoring/102-datadog.md b/src/data/roadmaps/devops/content/115-application-monitoring/102-datadog.md new file mode 100644 index 000000000..0ab8b6275 --- /dev/null +++ b/src/data/roadmaps/devops/content/115-application-monitoring/102-datadog.md @@ -0,0 +1,8 @@ +# Datadog + +Datadog is a monitoring and analytics platform for large-scale applications. It encompasses infrastructure monitoring, application performance monitoring, log management, and user-experience monitoring. Datadog aggregates data across your entire stack with 400+ integrations for troubleshooting, alerting, and graphing. + +Visit the following resources to learn more: + +- [Datadog Website](https://www.datadoghq.com/) +- [Official Documentation](https://docs.datadoghq.com/) diff --git a/src/data/roadmaps/devops/content/107-monitoring/101-application-monitoring/104-open-telemetry.md b/src/data/roadmaps/devops/content/115-application-monitoring/104-open-telemetry.md similarity index 100% rename from src/data/roadmaps/devops/content/107-monitoring/101-application-monitoring/104-open-telemetry.md rename to src/data/roadmaps/devops/content/115-application-monitoring/104-open-telemetry.md diff --git a/src/data/roadmaps/devops/content/107-monitoring/101-application-monitoring/102-app-dynamics.md b/src/data/roadmaps/devops/content/115-application-monitoring/105-app-dynamics.md similarity index 100% rename from src/data/roadmaps/devops/content/107-monitoring/101-application-monitoring/102-app-dynamics.md rename to src/data/roadmaps/devops/content/115-application-monitoring/105-app-dynamics.md diff --git a/src/data/roadmaps/devops/content/107-monitoring/101-application-monitoring/index.md b/src/data/roadmaps/devops/content/115-application-monitoring/index.md similarity index 100% rename from src/data/roadmaps/devops/content/107-monitoring/101-application-monitoring/index.md rename to src/data/roadmaps/devops/content/115-application-monitoring/index.md diff --git a/src/data/roadmaps/devops/content/107-monitoring/102-logs-management/100-elastic-stack.md b/src/data/roadmaps/devops/content/116-logs-management/100-elastic-stack.md similarity index 100% rename from src/data/roadmaps/devops/content/107-monitoring/102-logs-management/100-elastic-stack.md rename to src/data/roadmaps/devops/content/116-logs-management/100-elastic-stack.md diff --git a/src/data/roadmaps/devops/content/107-monitoring/102-logs-management/101-graylog.md b/src/data/roadmaps/devops/content/116-logs-management/101-graylog.md similarity index 100% rename from src/data/roadmaps/devops/content/107-monitoring/102-logs-management/101-graylog.md rename to src/data/roadmaps/devops/content/116-logs-management/101-graylog.md diff --git a/src/data/roadmaps/devops/content/107-monitoring/102-logs-management/102-papertrail.md b/src/data/roadmaps/devops/content/116-logs-management/102-papertrail.md similarity index 100% rename from src/data/roadmaps/devops/content/107-monitoring/102-logs-management/102-papertrail.md rename to src/data/roadmaps/devops/content/116-logs-management/102-papertrail.md diff --git a/src/data/roadmaps/devops/content/107-monitoring/102-logs-management/102-splunk.md b/src/data/roadmaps/devops/content/116-logs-management/102-splunk.md similarity index 100% rename from src/data/roadmaps/devops/content/107-monitoring/102-logs-management/102-splunk.md rename to src/data/roadmaps/devops/content/116-logs-management/102-splunk.md diff --git a/src/data/roadmaps/devops/content/107-monitoring/102-logs-management/103-loki.md b/src/data/roadmaps/devops/content/116-logs-management/103-loki.md similarity index 100% rename from src/data/roadmaps/devops/content/107-monitoring/102-logs-management/103-loki.md rename to src/data/roadmaps/devops/content/116-logs-management/103-loki.md diff --git a/src/data/roadmaps/devops/content/107-monitoring/102-logs-management/index.md b/src/data/roadmaps/devops/content/116-logs-management/index.md similarity index 100% rename from src/data/roadmaps/devops/content/107-monitoring/102-logs-management/index.md rename to src/data/roadmaps/devops/content/116-logs-management/index.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/104-docker-swarm.md b/src/data/roadmaps/devops/content/117-containers/100-docker-swarm.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/104-docker-swarm.md rename to src/data/roadmaps/devops/content/117-containers/100-docker-swarm.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/101-lxc.md b/src/data/roadmaps/devops/content/117-containers/100-lxc.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/101-lxc.md rename to src/data/roadmaps/devops/content/117-containers/100-lxc.md diff --git a/src/data/roadmaps/devops/content/117-containers/101-gke-eks-aks.md b/src/data/roadmaps/devops/content/117-containers/101-gke-eks-aks.md new file mode 100644 index 000000000..15da52503 --- /dev/null +++ b/src/data/roadmaps/devops/content/117-containers/101-gke-eks-aks.md @@ -0,0 +1,14 @@ +# GKE / EKS / AKS + +## GKE - Google Kubernetes Engine + +GKE is a managed Kubernetes service that lets you deploy, manage, and scale containerized applications on Google Cloud. + +## EKS - Amazon Elastic Kubernetes Service + +Amazon Elastic Kubernetes Service (Amazon EKS) is a fully managed Kubernetes service from AWS. + +## AKS - Azure Kubernetes Service + +Azure Kubernetes Service (AKS) manages your hosted Kubernetes environment, making it quick and easy to deploy and manage containerized applications without container orchestration expertise. + diff --git a/src/data/roadmaps/devops/content/117-containers/102-ecs-fargate.md b/src/data/roadmaps/devops/content/117-containers/102-ecs-fargate.md new file mode 100644 index 000000000..2b6e162b3 --- /dev/null +++ b/src/data/roadmaps/devops/content/117-containers/102-ecs-fargate.md @@ -0,0 +1,5 @@ +# ECS / Fargate + +ECS is a container orchestration service that allows you to run Docker containers on a cluster of EC2 instances. ECS is a good choice if you want to run Docker containers on EC2 instances and have full control over the underlying infrastructure. + +Fargate is a serverless container orchestration service that allows you to run Docker containers without having to manage servers, clusters, or any other infrastructure. Fargate is a good choice if you want to run Docker containers without having to manage servers or clusters. diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/101-containers.md b/src/data/roadmaps/devops/content/117-containers/index.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/101-containers.md rename to src/data/roadmaps/devops/content/117-containers/index.md diff --git a/src/data/roadmaps/devops/content/118-artifcats/100-artifactory.md b/src/data/roadmaps/devops/content/118-artifcats/100-artifactory.md new file mode 100644 index 000000000..5b3ad5209 --- /dev/null +++ b/src/data/roadmaps/devops/content/118-artifcats/100-artifactory.md @@ -0,0 +1 @@ +# Artifactory \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/118-artifcats/101-nexus.md b/src/data/roadmaps/devops/content/118-artifcats/101-nexus.md new file mode 100644 index 000000000..45b885765 --- /dev/null +++ b/src/data/roadmaps/devops/content/118-artifcats/101-nexus.md @@ -0,0 +1 @@ +# Nexus \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/118-artifcats/102-cloud-smith.md b/src/data/roadmaps/devops/content/118-artifcats/102-cloud-smith.md new file mode 100644 index 000000000..e408dddcd --- /dev/null +++ b/src/data/roadmaps/devops/content/118-artifcats/102-cloud-smith.md @@ -0,0 +1 @@ +# Cloud smith \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/118-artifcats/index.md b/src/data/roadmaps/devops/content/118-artifcats/index.md new file mode 100644 index 000000000..cf7b86d9d --- /dev/null +++ b/src/data/roadmaps/devops/content/118-artifcats/index.md @@ -0,0 +1 @@ +# Artifcats \ No newline at end of file diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/104-gitops/100-argo-cd.md b/src/data/roadmaps/devops/content/119-gitops/100-argo-cd.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/104-gitops/100-argo-cd.md rename to src/data/roadmaps/devops/content/119-gitops/100-argo-cd.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/104-gitops/101-flux-cd.md b/src/data/roadmaps/devops/content/119-gitops/101-flux-cd.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/104-gitops/101-flux-cd.md rename to src/data/roadmaps/devops/content/119-gitops/101-flux-cd.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/104-gitops/index.md b/src/data/roadmaps/devops/content/119-gitops/index.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/104-gitops/index.md rename to src/data/roadmaps/devops/content/119-gitops/index.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/101-istio.md b/src/data/roadmaps/devops/content/120-service-mesh/100-istio.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/101-istio.md rename to src/data/roadmaps/devops/content/120-service-mesh/100-istio.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/100-consul.md b/src/data/roadmaps/devops/content/120-service-mesh/101-consul.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/100-consul.md rename to src/data/roadmaps/devops/content/120-service-mesh/101-consul.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/103-linkerd.md b/src/data/roadmaps/devops/content/120-service-mesh/102-linkerd.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/103-linkerd.md rename to src/data/roadmaps/devops/content/120-service-mesh/102-linkerd.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/102-envoy.md b/src/data/roadmaps/devops/content/120-service-mesh/103-envoy.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/102-envoy.md rename to src/data/roadmaps/devops/content/120-service-mesh/103-envoy.md diff --git a/src/data/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/index.md b/src/data/roadmaps/devops/content/120-service-mesh/index.md similarity index 100% rename from src/data/roadmaps/devops/content/105-infrastructure-as-code/100-service-mesh/index.md rename to src/data/roadmaps/devops/content/120-service-mesh/index.md diff --git a/src/data/roadmaps/devops/content/index.md b/src/data/roadmaps/devops/content/index.md new file mode 100644 index 000000000..4e768b56d --- /dev/null +++ b/src/data/roadmaps/devops/content/index.md @@ -0,0 +1 @@ +# \ No newline at end of file diff --git a/src/data/roadmaps/devops/devops.json b/src/data/roadmaps/devops/devops.json index b4609e784..2e64bf867 100644 --- a/src/data/roadmaps/devops/devops.json +++ b/src/data/roadmaps/devops/devops.json @@ -3,1025 +3,1174 @@ "controls": { "control": [ { - "ID": "2719", + "ID": "3011", "typeID": "Arrow", - "zOrder": "0", - "w": "183", - "h": "5", + "zOrder": "15", + "w": "1", + "h": "62", "measuredW": "150", "measuredH": "100", - "x": "829", - "y": "347", + "x": "1177", + "y": "2699", "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", "stroke": "dotted", "p0": { - "x": -0.30749986718376476, - "y": 4.453524997133513 + "x": 0, + "y": 0.3939393939394904 }, "p1": { - "x": 0.6950719555100975, - "y": -0.0004300840236431132 + "x": 0.49956677529873256, + "y": 0 }, "p2": { - "x": 182.29125893020966, - "y": -0.1278058687508974 + "x": 0, + "y": 62.00523136030006 + } + } + }, + { + "ID": "3012", + "typeID": "__group__", + "zOrder": "16", + "measuredW": "151", + "measuredH": "47", + "w": "151", + "h": "47", + "x": "1109", + "y": "2611", + "properties": { + "controlName": "100-gitops:argo-cd" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "141", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "61", + "measuredH": "25", + "x": "40", + "y": "11", + "properties": { + "size": "17", + "text": "ArgoCD" + } + }, + { + "ID": "2", + "typeID": "__group__", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "127", + "y": "12", + "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": "3013", + "typeID": "__group__", + "zOrder": "17", + "measuredW": "151", + "measuredH": "47", + "w": "151", + "h": "47", + "x": "1108", + "y": "2661", + "properties": { + "controlName": "101-gitops:flux-cd" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "141", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "56", + "measuredH": "25", + "x": "43", + "y": "11", + "properties": { + "size": "17", + "text": "FluxCD" + } + }, + { + "ID": "2", + "typeID": "__group__", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "127", + "y": "10", + "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": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "3700253" + } + } + ] + } + } + } + ] } } }, { - "ID": "2720", + "ID": "3014", "typeID": "Arrow", - "zOrder": "1", - "w": "288", - "h": "263", + "zOrder": "18", + "w": "1", + "h": "64", "measuredW": "150", "measuredH": "100", - "x": "712", - "y": "1710", + "x": "1187", + "y": "2472", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", "stroke": "dotted", "p0": { - "x": 0.2314366161547241, - "y": -0.28873291892250563 + "x": 0, + "y": -0.49009958262422515 }, "p1": { - "x": 0.427902855085708, - "y": -0.14405582786408574 + "x": 0.49956677529873245, + "y": 0 }, "p2": { - "x": 288.4449904841407, - "y": 263.01747678763263 + "x": 0, + "y": 63.357582711558734 } } }, { - "ID": "2721", + "ID": "3015", "typeID": "Arrow", - "zOrder": "2", + "zOrder": "19", "w": "1", - "h": "98", + "h": "174", "measuredW": "150", "measuredH": "100", - "x": "646", - "y": "1605", + "x": "610", + "y": "2458", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", "stroke": "dotted", "p0": { "x": 0, - "y": 0.4651302239562938 + "y": -0.25411487053997917 }, "p1": { - "x": 0.6451475897218093, - "y": -0.002973030367381328 + "x": 0.5010051755986721, + "y": 0 }, "p2": { "x": 0, - "y": 98.31541085814911 + "y": 174 } } }, { - "ID": "2722", + "ID": "3016", "typeID": "Arrow", - "zOrder": "3", - "w": "173", - "h": "47", + "zOrder": "20", + "w": "1", + "h": "79", "measuredW": "150", "measuredH": "100", - "x": "835", - "y": "292", + "x": "560", + "y": "2285", "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", "stroke": "dotted", "p0": { - "x": 0.23725851265112397, - "y": 47.01848407544725 + "x": 0, + "y": 0 }, "p1": { - "x": 0.5110795793605537, - "y": -0.06338765929796168 + "x": 0.5010057587596869, + "y": 0 }, "p2": { - "x": 173.67335557827573, - "y": -0.10377625936393997 + "x": 0, + "y": 78 } } }, { - "ID": "2723", + "ID": "3017", "typeID": "Arrow", - "zOrder": "4", - "w": "175", - "h": "40", + "zOrder": "21", + "w": "97", + "h": "22", "measuredW": "150", "measuredH": "100", - "x": "829", - "y": "361", + "x": "1053", + "y": "2263", "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", "stroke": "dotted", "p0": { - "x": -0.30749986718376476, - "y": -0.3838132710976083 + "x": 96.64772784448883, + "y": -0.021310438334239734 }, "p1": { - "x": 0.6909921238996622, - "y": 0.07891984909656495 + "x": 0.5628712871287136, + "y": -0.0787128712871304 }, "p2": { - "x": 175.09202471239132, - "y": 39.53921284589518 + "x": -0.28952215735057507, + "y": 21.86774601369416 } } }, { - "ID": "2724", + "ID": "3018", "typeID": "Arrow", - "zOrder": "5", - "w": "70", - "h": "94", + "zOrder": "22", + "w": "89", + "h": "15", "measuredW": "150", "measuredH": "100", - "x": "268", - "y": "2330", + "x": "1054", + "y": "2233", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", - "stroke": "dotted", + "color": "10027263", "p0": { - "x": 70, - "y": 94 + "x": 0.2739818749371352, + "y": 0.27211294819881005 }, "p1": { - "x": 0.49680207433016427, - "y": -0.09127052722558338 + "x": 0.4960215211876767, + "y": -0.07358960597598453 }, "p2": { - "x": 0, - "y": 0 - } + "x": 89.39371171533776, + "y": 14.343649238788657 + }, + "stroke": "dotted" } }, { - "ID": "2725", + "ID": "3019", "typeID": "Arrow", - "zOrder": "6", - "h": "114", + "zOrder": "23", + "w": "1", + "h": "345", "measuredW": "150", "measuredH": "100", - "x": "422", - "y": "2629", + "x": "1293", + "y": "2022", "properties": { - "color": "2848996", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", "p0": { - "x": 149.5, - "y": 113.5 + "x": 0, + "y": 0.4145245849647381 }, "p1": { - "x": 0.5697543385170161, - "y": -0.1564119900833896 + "x": 0.5, + "y": 0 }, "p2": { "x": 0, - "y": 0 + "y": 345.0823548854628 } } }, { - "ID": "2726", + "ID": "3020", "typeID": "Arrow", - "zOrder": "7", - "w": "3", - "h": "66", + "zOrder": "24", + "w": "1", + "h": "251", "measuredW": "150", "measuredH": "100", - "x": "374", - "y": "2628", + "x": "344", + "y": "1771", "properties": { - "color": "2848996", - "curvature": "-1", "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", "p0": { - "x": 1, - "y": 0 + "x": 0, + "y": 0.4145245849647381 }, "p1": { - "x": 0.56842735383826, - "y": -0.01687523160685271 + "x": 0.5, + "y": 0 }, "p2": { - "x": 2, - "y": 65 - }, - "rightArrow": "false", - "stroke": "dotted" + "x": 0, + "y": 251.42830958144737 + } } }, { - "ID": "2727", + "ID": "3021", "typeID": "Arrow", - "zOrder": "8", - "w": "3", - "h": "66", + "zOrder": "25", + "w": "1", + "h": "90", "measuredW": "150", "measuredH": "100", - "x": "214", - "y": "2628", + "x": "345", + "y": "1667", "properties": { - "color": "2848996", - "curvature": "-1", "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", "p0": { - "x": 1, - "y": 0 + "x": 0, + "y": 0.3636363636362603 }, "p1": { - "x": 0.56842735383826, - "y": -0.01687523160685271 + "x": 0.4988928776156575, + "y": 0 }, "p2": { - "x": 2, - "y": 65 - }, - "rightArrow": "false", - "stroke": "dotted" + "x": 0, + "y": 90.24242424242425 + } } }, { - "ID": "2728", + "ID": "3022", "typeID": "Arrow", - "zOrder": "9", - "w": "192", - "h": "247", + "zOrder": "26", + "w": "1", + "h": "90", "measuredW": "150", "measuredH": "100", - "x": "434", - "y": "2369", + "x": "633", + "y": "1684", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", "p0": { - "x": 192.35091394754102, - "y": 0.47218084835731133 + "x": 0, + "y": 0.3636363636362603 }, "p1": { - "x": 0.5554094414478669, - "y": 0.21886655076598477 + "x": 0.4988928776156575, + "y": 0 }, "p2": { "x": 0, - "y": 247 + "y": 90.24242424242425 } } }, { - "ID": "2729", + "ID": "3023", "typeID": "Arrow", - "zOrder": "10", - "w": "90", - "h": "60", + "zOrder": "27", + "w": "1", + "h": "76", "measuredW": "150", "measuredH": "100", - "x": "507", - "y": "2373", + "x": "742", + "y": "1689", "properties": { - "color": "2848996", - "curvature": "-1", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", "stroke": "dotted", "p0": { "x": 0, - "y": 55.5 + "y": 0 }, "p1": { - "x": 0.3976647206005023, - "y": -0.21384487072560043 + "x": 0.4988928776156574, + "y": 0 }, "p2": { - "x": 90.03236052872, - "y": 0.4701654054692881 + "x": 0, + "y": 76.24242424242425 } } }, { - "ID": "2730", + "ID": "3026", "typeID": "Arrow", - "zOrder": "11", - "w": "3", + "zOrder": "28", + "w": "1", "h": "66", "measuredW": "150", "measuredH": "100", - "x": "895", - "y": "2450", + "x": "1158", + "y": "1368", "properties": { - "color": "2848996", - "curvature": "-1", "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", "p0": { - "x": 1, - "y": 0 + "x": 0, + "y": -0.24242424242424931 }, "p1": { - "x": 0.56842735383826, - "y": -0.01687523160685271 + "x": 0.49889287761565754, + "y": 0 }, "p2": { - "x": 2, - "y": 65 - }, - "rightArrow": "false", - "stroke": "dotted" + "x": 0, + "y": 66.09090909090901 + } } }, { - "ID": "2731", - "typeID": "Arrow", - "zOrder": "12", - "w": "3", - "h": "66", - "measuredW": "150", - "measuredH": "100", - "x": "765", - "y": "2450", + "ID": "3027", + "typeID": "__group__", + "zOrder": "29", + "measuredW": "154", + "measuredH": "47", + "w": "154", + "h": "47", + "x": "1063", + "y": "1414", "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "p0": { - "x": 1, - "y": 0 - }, - "p1": { - "x": 0.56842735383826, - "y": -0.01687523160685271 - }, - "p2": { - "x": 2, - "y": 65 - }, - "rightArrow": "false", - "stroke": "dotted" + "controlName": "100-networking-protocols:osi-model" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "154", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "81", + "measuredH": "25", + "x": "36", + "y": "12", + "properties": { + "text": "OSI Model", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "3028", + "typeID": "__group__", + "zOrder": "30", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "1054", + "y": "1426", + "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": "10066329", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } } }, { - "ID": "2732", + "ID": "3029", "typeID": "Arrow", - "zOrder": "13", - "w": "3", - "h": "79", + "zOrder": "31", + "w": "1", + "h": "78", "measuredW": "150", "measuredH": "100", - "x": "836", - "y": "2352", + "x": "1158", + "y": "1290", "properties": { - "color": "2848996", - "curvature": "-1", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", "stroke": "dotted", "p0": { - "x": 2.5, - "y": -0.5 + "x": 0, + "y": -0.24242424242424931 }, "p1": { - "x": 0.5684273538382602, - "y": -0.016875231606852704 + "x": 0.4988928776156576, + "y": 0 }, "p2": { - "x": 0.5, - "y": 78.5 + "x": 0, + "y": 78 } } }, { - "ID": "2733", + "ID": "3033", "typeID": "Arrow", - "zOrder": "14", - "w": "3", - "h": "66", + "zOrder": "32", + "w": "1", + "h": "71", "measuredW": "150", "measuredH": "100", - "x": "838", - "y": "2300", + "x": "546", + "y": "2770", "properties": { - "color": "2848996", - "curvature": "-1", "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", "p0": { - "x": 1, - "y": 0 + "x": 0, + "y": 0.3939393939394904 }, "p1": { - "x": 0.56842735383826, - "y": -0.01687523160685271 + "x": 0.49956677529873245, + "y": 0 }, "p2": { - "x": 2, - "y": 65 - }, - "rightArrow": "false", - "stroke": "dotted" + "x": 0, + "y": 71.12121212121247 + } } }, { - "ID": "2734", + "ID": "3034", "typeID": "Arrow", - "zOrder": "15", - "w": "92", - "h": "184", + "zOrder": "33", + "w": "1", + "h": "62", "measuredW": "150", "measuredH": "100", - "x": "966", - "y": "2301", + "x": "919", + "y": "2761", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", "stroke": "dotted", "p0": { - "x": -0.5, - "y": -0.5 + "x": 0, + "y": 0.3939393939394904 }, "p1": { - "x": 0.6466957628227236, - "y": -0.02001450843748885 + "x": 0.49956677529873256, + "y": 0 }, "p2": { - "x": 91, - "y": 183 + "x": 0, + "y": 62.00523136030006 } } }, { - "ID": "2735", + "ID": "3035", "typeID": "Arrow", - "zOrder": "16", - "w": "94", - "h": "132", + "zOrder": "34", + "w": "1", + "h": "62", "measuredW": "150", "measuredH": "100", - "x": "968", - "y": "2300", + "x": "814", + "y": "2761", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", "stroke": "dotted", "p0": { - "x": -0.5, - "y": -0.5 + "x": 0, + "y": 0.3939393939394904 }, "p1": { - "x": 0.6816916015287408, - "y": -0.06264764063070156 + "x": 0.49956677529873256, + "y": 0 }, "p2": { - "x": 93, - "y": 131 + "x": 0, + "y": 62.00523136030006 } } }, { - "ID": "2736", + "ID": "3036", "typeID": "Arrow", - "zOrder": "17", - "w": "94", - "h": "82", + "zOrder": "35", + "w": "1", + "h": "217", "measuredW": "150", "measuredH": "100", - "x": "974", - "y": "2302", + "x": "1352", + "y": "2545", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", - "stroke": "dotted", + "color": "2848996", "p0": { - "x": -0.5, - "y": -0.5 + "x": 0, + "y": 0.3056128276207346 }, "p1": { - "x": 0.6469984607491023, - "y": -0.08209338122113903 + "x": 0.5, + "y": 0 }, "p2": { - "x": 93, - "y": 81 + "x": 0, + "y": 216.99049199060255 } } }, { - "ID": "2737", + "ID": "3037", "typeID": "Arrow", - "zOrder": "18", - "w": "97", - "h": "31", + "zOrder": "36", + "w": "1", + "h": "191", "measuredW": "150", "measuredH": "100", - "x": "968", - "y": "2302", + "x": "869", + "y": "2455", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", "stroke": "dotted", "p0": { - "x": -0.5, - "y": -0.5 + "x": 0, + "y": -0.49009958262422515 }, "p1": { - "x": 0.5697996021155806, - "y": -0.04716386044931828 + "x": 0.4995667752987324, + "y": 0 }, "p2": { - "x": 96, - "y": 30 + "x": 0, + "y": 190.36636900398753 } } }, { - "ID": "2738", + "ID": "3038", "typeID": "Arrow", - "zOrder": "19", - "w": "97", - "h": "20", + "zOrder": "37", + "w": "1", + "h": "170", "measuredW": "150", "measuredH": "100", - "x": "966", - "y": "2272", + "x": "500", + "y": "2471", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", "stroke": "dotted", "p0": { - "x": -0.5, - "y": 19.5 + "x": 0, + "y": 0 }, "p1": { - "x": 0.5540000000000003, - "y": -0.07800000000000004 + "x": 0.501001905617902, + "y": 0 }, "p2": { - "x": 96, - "y": 0 + "x": 0, + "y": 170 } } }, { - "ID": "2739", + "ID": "3039", "typeID": "Arrow", - "zOrder": "20", - "w": "95", - "h": "69", + "zOrder": "38", + "w": "1", + "h": "175", "measuredW": "150", "measuredH": "100", - "x": "964", - "y": "2222", + "x": "343", + "y": "2370", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", - "stroke": "dotted", + "color": "2848996", "p0": { - "x": -0.5, - "y": 68.5 + "x": 0, + "y": 0.2654294557892172 }, "p1": { - "x": 0.554, - "y": -0.07800000000000008 + "x": 0.5, + "y": 0 }, "p2": { - "x": 94, - "y": 0 + "x": 0, + "y": 175.738606905285 } } }, { - "ID": "2740", + "ID": "3040", "typeID": "Arrow", - "zOrder": "21", - "w": "286", - "h": "362", + "zOrder": "39", + "w": "1", + "h": "180", "measuredW": "150", "measuredH": "100", - "x": "418", - "y": "1995", + "x": "925", + "y": "1271", "properties": { - "color": "2848996", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", "p0": { - "x": 285.64528205170564, - "y": 362.4782271770214 + "x": 0, + "y": 0 }, "p1": { - "x": 0.4365971463723128, - "y": 0.20879511032103928 + "x": 0.4988928776156576, + "y": 0 }, "p2": { "x": 0, - "y": 0 + "y": 180 } } }, { - "ID": "2741", + "ID": "3041", "typeID": "Arrow", - "zOrder": "22", - "w": "302", - "h": "265", + "zOrder": "40", + "w": "1", + "h": "180", "measuredW": "150", "measuredH": "100", - "x": "254", - "y": "1709", + "x": "766", + "y": "1271", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", "p0": { - "x": 302.26401960528983, - "y": -0.4747969266095424 + "x": 0, + "y": 0 }, "p1": { - "x": 0.5253269208128037, - "y": 0.1629774877603306 + "x": 0.4988928776156576, + "y": 0 }, "p2": { "x": 0, - "y": 264.5 + "y": 180 } } }, { - "ID": "2742", + "ID": "3042", "typeID": "Arrow", - "zOrder": "23", - "w": "82", - "h": "223", + "zOrder": "41", + "w": "1", + "h": "237", "measuredW": "150", "measuredH": "100", - "x": "607", - "y": "1689", + "x": "327", + "y": "1125", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", - "stroke": "dotted", + "color": "2848996", "p0": { - "x": 82.10318846625466, - "y": -0.044853053448150604 + "x": 0, + "y": 0.42424242424237946 }, "p1": { - "x": 0.4520111009254957, - "y": -0.1095023419938969 + "x": 0.4999999999999999, + "y": 0 }, "p2": { "x": 0, - "y": 223 + "y": 237.121212121212 } } }, { - "ID": "2743", + "ID": "3043", "typeID": "Arrow", - "zOrder": "24", - "w": "195", - "h": "285", + "zOrder": "42", + "w": "1", + "h": "86", "measuredW": "150", "measuredH": "100", - "x": "697", - "y": "1716", + "x": "621", + "y": "1052", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", - "stroke": "dotted", + "color": "2848996", "p0": { - "x": 0.9986685239084636, - "y": -0.35841288048663955 + "x": 0, + "y": 0.030303030303002743 }, "p1": { - "x": 0.4553405970648267, - "y": -0.16048434330533035 + "x": 0.49999999999999983, + "y": 0 }, "p2": { - "x": 194.9201337807633, - "y": 284.2969489644379 - } + "x": 0, + "y": 86.060606060606 + }, + "stroke": "dotted" } }, { - "ID": "2744", + "ID": "3044", "typeID": "Arrow", - "zOrder": "25", - "w": "59", - "h": "31", + "zOrder": "43", + "w": "76", + "h": "19", "measuredW": "150", "measuredH": "100", - "x": "673", - "y": "1573", + "x": "400", + "y": "1227", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", "stroke": "dotted", "p0": { - "x": 0, - "y": 31 + "x": 76, + "y": 0 }, "p1": { - "x": 0.6609756097560976, - "y": -0.08211382113821152 + "x": 0.4776674685401831, + "y": 0.08562699251407613 }, "p2": { - "x": 59, - "y": 0 + "x": 0, + "y": 19 } } }, { - "ID": "2745", + "ID": "3047", "typeID": "Arrow", - "zOrder": "26", - "w": "50", - "h": "23", + "zOrder": "44", + "w": "979", + "h": "1", "measuredW": "150", "measuredH": "100", - "x": "681", - "y": "1610", + "x": "329", + "y": "1361", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", - "stroke": "dotted", + "color": "10027263", "p0": { "x": 0, "y": 0 }, "p1": { - "x": 0.6188208934322924, - "y": 0.07043831396163001 + "x": 0.5, + "y": 0 }, "p2": { - "x": 50, - "y": 23 + "x": 979.3333333333333, + "y": 0 } } }, { - "ID": "2746", + "ID": "3048", "typeID": "Arrow", - "zOrder": "27", - "w": "272", - "h": "173", + "zOrder": "45", + "w": "1", + "h": "81", "measuredW": "150", "measuredH": "100", - "x": "722", - "y": "1703", + "x": "793", + "y": "1041", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", "stroke": "dotted", "p0": { - "x": -0.280051322347731, - "y": -0.4051169650456359 + "x": -0.030303030303002743, + "y": -0.0909090909092356 }, "p1": { - "x": 0.46693873123906865, - "y": -0.14334910584758043 + "x": 0.4999999999999998, + "y": 0 }, "p2": { - "x": 271.3286064380177, - "y": 172.76022815728356 + "x": -0.030303030303002743, + "y": 80.81818181818176 } } }, { - "ID": "2747", + "ID": "3052", "typeID": "Arrow", - "zOrder": "28", - "w": "332", - "h": "1", + "zOrder": "46", + "w": "1", + "h": "269", "measuredW": "150", "measuredH": "100", - "x": "709", - "y": "1700", + "x": "809", + "y": "237", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", - "stroke": "dotted", + "color": "2848996", "p0": { - "x": 0.26627659693679107, - "y": 0.35025083893128794 + "x": 0, + "y": 0 }, "p1": { - "x": 0.6451475897218095, - "y": -0.0029730303673813283 + "x": 0.4999999999999999, + "y": 0 }, "p2": { - "x": 332.3641987493486, - "y": 0.35025083893128794 + "x": 0, + "y": 268.8181818181818 } } }, { - "ID": "2748", + "ID": "3053", "typeID": "Arrow", - "zOrder": "29", - "w": "163", - "h": "220", + "zOrder": "10", + "w": "1", + "h": "47", "measuredW": "150", "measuredH": "100", - "x": "392", - "y": "1484", + "x": "1140", + "y": "522", "properties": { - "color": "2848996", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", "p0": { - "x": 163.07795559760268, - "y": 219.78094704264163 + "x": 0, + "y": 0 }, "p1": { - "x": 0.5476470211266105, - "y": -0.16651357528891536 + "x": 0.5020600744284955, + "y": -0.0018326094960089672 }, "p2": { "x": 0, - "y": 0 + "y": 47 } } }, { - "ID": "2749", - "typeID": "TextArea", - "zOrder": "30", - "w": "162", - "h": "164", - "measuredW": "200", - "measuredH": "140", - "x": "256", - "y": "1642" - }, - { - "ID": "2750", + "ID": "3054", "typeID": "Label", - "zOrder": "31", - "measuredW": "90", - "measuredH": "25", - "x": "292", - "y": "1655", + "zOrder": "47", + "measuredW": "116", + "measuredH": "40", + "x": "752", + "y": "179", "properties": { - "text": "Web Server", - "size": "17" - } - }, - { - "ID": "2751", - "typeID": "__group__", - "zOrder": "32", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "404", - "y": "1652", - "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" - } - } - } - ] - } + "size": "32", + "text": "DevOps" } }, { - "ID": "2752", + "ID": "3055", "typeID": "__group__", - "zOrder": "33", - "measuredW": "113", - "measuredH": "46", - "w": "113", - "h": "46", - "x": "342", - "y": "1696", - "properties": { - "controlName": "106-setting-up-x:apache" - }, + "zOrder": "48", + "measuredW": "420", + "measuredH": "130", + "w": "420", + "h": "130", + "x": "162", + "y": "71", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Canvas", "zOrder": "0", - "w": "102", - "h": "46", - "measuredW": "200", - "measuredH": "140", + "w": "420", + "h": "130", + "measuredW": "100", + "measuredH": "70", "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } + "y": "0" }, { "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "59", - "measuredH": "25", - "x": "22", - "y": "10", - "properties": { - "text": "Apache", - "size": "17" - } - }, - { - "ID": "2", "typeID": "__group__", - "zOrder": "2", + "zOrder": "1", "measuredW": "24", "measuredH": "24", "w": "24", "h": "24", - "x": "89", - "y": "11", + "x": "23", + "y": "21", "children": { "controls": { "control": [ @@ -1050,23 +1199,7 @@ "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", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -1076,64 +1209,44 @@ ] } } - } - ] - } - } - }, - { - "ID": "2753", - "typeID": "__group__", - "zOrder": "34", - "measuredW": "115", - "measuredH": "47", - "w": "115", - "h": "47", - "x": "221", - "y": "1695", - "properties": { - "controlName": "105-setting-up-x:nginx" - }, - "children": { - "controls": { - "control": [ + }, { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "103", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "12", - "y": "0", + "ID": "2", + "typeID": "Label", + "zOrder": "2", + "measuredW": "269", + "measuredH": "24", + "x": "59", + "y": "21", "properties": { - "color": "16770457" + "size": "16", + "text": "Personal Recommendation / Opinion" } }, { - "ID": "1", + "ID": "5", "typeID": "Label", - "zOrder": "1", - "measuredW": "45", - "measuredH": "25", - "x": "41", - "y": "10", + "zOrder": "3", + "w": "324", + "measuredW": "315", + "measuredH": "24", + "x": "60", + "y": "86", "properties": { - "text": "Nginx", - "size": "17" + "size": "16", + "text": "Order in roadmap not strict (Learn anytime)" } }, { - "ID": "2", + "ID": "6", "typeID": "__group__", - "zOrder": "2", + "zOrder": "4", "measuredW": "24", "measuredH": "24", "w": "24", "h": "24", - "x": "0", - "y": "11", + "x": "23", + "y": "86", "children": { "controls": { "control": [ @@ -1162,7 +1275,7 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", + "color": "10066329", "icon": { "ID": "check-circle", "size": "small" @@ -1172,64 +1285,30 @@ ] } } - } - ] - } - } - }, - { - "ID": "2754", - "typeID": "__group__", - "zOrder": "35", - "measuredW": "115", - "measuredH": "46", - "w": "115", - "h": "46", - "x": "221", - "y": "1746", - "properties": { - "controlName": "107-setting-up-x:tomcat" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "104", - "h": "46", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } }, { - "ID": "1", + "ID": "7", "typeID": "Label", - "zOrder": "1", - "measuredW": "57", - "measuredH": "25", - "x": "36", - "y": "10", + "zOrder": "5", + "measuredW": "272", + "measuredH": "24", + "x": "59", + "y": "54", "properties": { - "text": "Tomcat", - "size": "17" + "size": "16", + "text": "Alternative Option - Pick this or purple" } }, { - "ID": "2", + "ID": "8", "typeID": "__group__", - "zOrder": "2", + "zOrder": "6", "measuredW": "24", "measuredH": "24", "w": "24", "h": "24", - "x": "0", - "y": "11", + "x": "23", + "y": "53", "children": { "controls": { "control": [ @@ -1290,58 +1369,68 @@ } }, { - "ID": "2755", + "ID": "3056", + "typeID": "Canvas", + "zOrder": "49", + "w": "420", + "h": "180", + "measuredW": "100", + "measuredH": "70", + "x": "162", + "y": "217" + }, + { + "ID": "3057", + "typeID": "Label", + "zOrder": "50", + "measuredW": "263", + "measuredH": "28", + "x": "181", + "y": "237", + "properties": { + "size": "20", + "text": "Featured DevOps Resources" + } + }, + { + "ID": "3058", "typeID": "__group__", - "zOrder": "36", - "measuredW": "111", - "measuredH": "46", - "w": "111", - "h": "46", - "x": "342", - "y": "1746", + "zOrder": "51", + "measuredW": "287", + "measuredH": "27", + "w": "287", + "h": "27", + "x": "178", + "y": "274", "properties": { - "controlName": "108-setting-up-x:iis" + "controlName": "ext_link:www.digistore24.com/redir/350808/Roadmap/CAMPAIGNKEY" }, "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Label", "zOrder": "0", - "w": "104", - "h": "46", - "measuredW": "200", - "measuredH": "140", - "x": "0", + "measuredW": "212", + "measuredH": "25", + "x": "34", "y": "0", "properties": { - "color": "16770457" + "size": "17", + "text": "DevOps Bootcamp by Nana" } }, { "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "21", - "measuredH": "25", - "x": "42", - "y": "10", - "properties": { - "text": "IIS", - "size": "17" - } - }, - { - "ID": "2", "typeID": "__group__", - "zOrder": "2", + "zOrder": "1", "measuredW": "24", "measuredH": "24", "w": "24", "h": "24", - "x": "87", - "y": "11", + "x": "0", + "y": "3", "children": { "controls": { "control": [ @@ -1370,23 +1459,7 @@ "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", + "color": "10066329", "icon": { "ID": "check-circle", "size": "small" @@ -1396,346 +1469,101 @@ ] } } + }, + { + "ID": "2", + "typeID": "Label", + "zOrder": "2", + "measuredW": "34", + "measuredH": "25", + "x": "253", + "y": "0", + "properties": { + "color": "10027263", + "size": "17", + "text": "Paid" + } } ] } } }, { - "ID": "2756", - "typeID": "Arrow", - "zOrder": "37", - "w": "139", - "h": "480", - "measuredW": "150", - "measuredH": "100", - "x": "349", - "y": "1003", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 117, - "y": 0 - }, - "p1": { - "x": 0.49741931596810796, - "y": 0.1414255015765269 - }, - "p2": { - "x": 0, - "y": 480 - } - } + "ID": "3059", + "typeID": "Canvas", + "zOrder": "52", + "w": "420", + "h": "89", + "measuredW": "100", + "measuredH": "70", + "x": "162", + "y": "346" }, { - "ID": "2757", - "typeID": "Arrow", - "zOrder": "38", - "w": "48", - "h": "232", - "measuredW": "150", - "measuredH": "100", - "x": "437", - "y": "767", + "ID": "3060", + "typeID": "Label", + "zOrder": "53", + "measuredW": "372", + "measuredH": "25", + "x": "181", + "y": "392", "properties": { - "color": "2848996", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 29, - "y": 231 - }, - "p1": { - "x": 0.5363141434032203, - "y": 0.16738097996061624 - }, - "p2": { - "x": 48.5, - "y": -0.5 - } + "size": "17", + "text": "from these help offset roadmap.sh running costs." } }, { - "ID": "2758", - "typeID": "Arrow", - "zOrder": "39", - "w": "113", - "h": "546", - "measuredW": "150", - "measuredH": "100", - "x": "622", - "y": "861", + "ID": "3061", + "typeID": "Label", + "zOrder": "54", + "measuredW": "337", + "measuredH": "25", + "x": "181", + "y": "364", "properties": { - "color": "2848996", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 113, - "y": -0.5 - }, - "p1": { - "x": 0.7098591549295775, - "y": -0.1464788732394366 - }, - "p2": { - "x": 68.28925247394181, - "y": 545.0788811131581 - } + "size": "17", + "text": "These are affiliate links. Revenue generated" } }, { - "ID": "2759", - "typeID": "Arrow", - "zOrder": "40", - "w": "55", - "h": "506", - "measuredW": "150", - "measuredH": "100", - "x": "841", - "y": "867", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.5, - "y": 0 - }, - "p1": { - "x": 0.6869181773640373, - "y": -0.04489777738185382 - }, - "p2": { - "x": 54.5, - "y": 506 - } - } - }, - { - "ID": "2760", - "typeID": "Arrow", - "zOrder": "41", - "w": "138", - "h": "179", - "measuredW": "150", - "measuredH": "100", - "x": "867", - "y": "867", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.6360848858314251, - "y": -0.2072096577168263 - }, - "p2": { - "x": 138, - "y": 177 - } - } - }, - { - "ID": "2761", - "typeID": "Arrow", - "zOrder": "42", - "w": "88", - "h": "261", - "measuredW": "150", - "measuredH": "100", - "x": "853", - "y": "863", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.6466552428656166, - "y": -0.08776115468265999 - }, - "p2": { - "x": 88, - "y": 260.5 - } - } - }, - { - "ID": "2762", - "typeID": "Arrow", - "zOrder": "43", - "w": "62", - "h": "376", - "measuredW": "150", - "measuredH": "100", - "x": "848", - "y": "868", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.672219801492509, - "y": -0.052769994127099214 - }, - "p2": { - "x": 61.5, - "y": 376 - } - } - }, - { - "ID": "2763", - "typeID": "Arrow", - "zOrder": "44", - "w": "1", - "h": "77", - "measuredW": "150", - "measuredH": "100", - "x": "827", - "y": "724", - "properties": { - "color": "2848996", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.3856209150326797, - "y": 0.0065359477124183 - }, - "p2": { - "x": 0, - "y": 76.5 - } - } - }, - { - "ID": "2764", - "typeID": "Arrow", - "zOrder": "45", - "w": "119", - "h": "65", - "measuredW": "150", - "measuredH": "100", - "x": "881", - "y": "806", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.5, - "y": 0 - }, - "p1": { - "x": 0.6294505494505496, - "y": 0.12131868131868125 - }, - "p2": { - "x": 118, - "y": 64.5 - } - } - }, - { - "ID": "2765", - "typeID": "TextArea", - "zOrder": "46", - "w": "264", - "h": "155", - "measuredW": "200", - "measuredH": "140", - "x": "933", - "y": "851" - }, - { - "ID": "2766", + "ID": "3062", "typeID": "__group__", - "zOrder": "47", - "measuredW": "122", - "measuredH": "47", - "w": "122", - "h": "47", - "x": "1066", - "y": "889", + "zOrder": "55", + "measuredW": "298", + "measuredH": "27", + "w": "298", + "h": "27", + "x": "179", + "y": "304", "properties": { - "controlName": "108-managing-servers:operating-system:open-bsd" + "controlName": "ext_link:kodekloud.com?aff=kamranahmed.se" }, "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Label", "zOrder": "0", - "w": "113", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", + "measuredW": "220", + "measuredH": "25", + "x": "34", "y": "0", "properties": { - "color": "16770457" + "size": "17", + "text": "KodeCloud DevOps Courses" } }, { "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "77", - "measuredW": "77", - "measuredH": "25", - "x": "18", - "y": "11", - "properties": { - "text": "OpenBSD", - "size": "17" - } - }, - { - "ID": "2", "typeID": "__group__", - "zOrder": "2", + "zOrder": "1", "measuredW": "24", "measuredH": "24", "w": "24", "h": "24", - "x": "98", - "y": "10", + "x": "0", + "y": "3", "children": { "controls": { "control": [ @@ -1764,23 +1592,7 @@ "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", + "color": "10066329", "icon": { "ID": "check-circle", "size": "small" @@ -1790,98 +1602,175 @@ ] } } + }, + { + "ID": "2", + "typeID": "Label", + "zOrder": "2", + "measuredW": "34", + "measuredH": "25", + "x": "264", + "y": "0", + "properties": { + "color": "10027263", + "size": "17", + "text": "Paid" + } } ] } } }, { - "ID": "2767", + "ID": "3063", + "typeID": "Canvas", + "zOrder": "56", + "w": "350", + "h": "141", + "measuredW": "100", + "measuredH": "70", + "x": "1020", + "y": "51" + }, + { + "ID": "3064", + "typeID": "Label", + "zOrder": "57", + "measuredW": "314", + "measuredH": "25", + "x": "1034", + "y": "68", + "properties": { + "size": "17", + "text": "Find the detailed version of this roadmap" + } + }, + { + "ID": "3065", + "typeID": "Label", + "zOrder": "58", + "measuredW": "319", + "measuredH": "25", + "x": "1034", + "y": "96", + "properties": { + "size": "17", + "text": "along with resources and other roadmaps" + } + }, + { + "ID": "3066", "typeID": "__group__", - "zOrder": "48", - "measuredW": "122", - "measuredH": "47", - "w": "122", - "h": "47", - "x": "939", - "y": "889", + "zOrder": "59", + "measuredW": "320", + "measuredH": "45", + "w": "320", + "h": "45", + "x": "1035", + "y": "132", "properties": { - "controlName": "107-managing-servers:operating-system:free-bsd" + "controlName": "ext_link:roadmap.sh" }, "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Canvas", "zOrder": "0", - "w": "113", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", + "w": "320", + "h": "45", + "measuredW": "100", + "measuredH": "70", + "x": "0", "y": "0", "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "71", - "measuredW": "71", - "measuredH": "25", - "x": "30", - "y": "11", - "properties": { - "text": "FreeBSD", - "size": "17" + "borderColor": "4273622", + "color": "4273622" } }, { - "ID": "2", + "ID": "1", "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", + "zOrder": "1", + "measuredW": "181", + "measuredH": "29", + "w": "181", + "h": "29", + "x": "65", + "y": "8", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "Icon", + "typeID": "Label", "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", + "measuredW": "105", + "measuredH": "28", + "x": "76", "y": "0", "properties": { "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } + "size": "20", + "text": "roadmap.sh" } }, { "ID": "1", - "typeID": "Icon", + "typeID": "Label", "zOrder": "1", - "measuredW": "24", - "measuredH": "24", + "measuredW": "45", + "measuredH": "28", "x": "0", "y": "0", "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } + "color": "16777215", + "size": "20", + "text": "https" + } + }, + { + "ID": "2", + "typeID": "Label", + "zOrder": "2", + "measuredW": "5", + "measuredH": "28", + "x": "48", + "y": "0", + "properties": { + "bold": "true", + "color": "16777215", + "size": "20", + "text": ":" + } + }, + { + "ID": "3", + "typeID": "Label", + "zOrder": "3", + "measuredW": "10", + "measuredH": "28", + "x": "55", + "y": "1", + "properties": { + "color": "16777215", + "size": "20", + "text": "/" + } + }, + { + "ID": "4", + "typeID": "Label", + "zOrder": "4", + "measuredW": "10", + "measuredH": "28", + "x": "63", + "y": "1", + "properties": { + "color": "16777215", + "size": "20", + "text": "/" } } ] @@ -1893,30 +1782,157 @@ } }, { - "ID": "2768", - "typeID": "Label", - "zOrder": "49", - "measuredW": "34", - "measuredH": "25", - "x": "1043", - "y": "859", + "ID": "3067", + "typeID": "Arrow", + "zOrder": "60", + "w": "127", + "h": "5", + "measuredW": "150", + "measuredH": "100", + "x": "971", + "y": "344", "properties": { - "text": "Unix", - "size": "17" + "color": "2848996", + "curvature": "-1", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0, + "y": 4 + }, + "p1": { + "x": 0.6967712512585971, + "y": -0.0004234795649128249 + }, + "p2": { + "x": 126, + "y": 0 + } + } + }, + { + "ID": "3068", + "typeID": "Arrow", + "zOrder": "61", + "w": "120", + "h": "47", + "measuredW": "150", + "measuredH": "100", + "x": "975", + "y": "289", + "properties": { + "color": "2848996", + "curvature": "-1", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0, + "y": 47 + }, + "p1": { + "x": 0.4946393327644539, + "y": -0.08428379340236354 + }, + "p2": { + "x": 121, + "y": 0 + } + } + }, + { + "ID": "3069", + "typeID": "Arrow", + "zOrder": "62", + "w": "122", + "h": "40", + "measuredW": "150", + "measuredH": "100", + "x": "971", + "y": "358", + "properties": { + "color": "2848996", + "curvature": "-1", + "direction": "bottom", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.6732262460018726, + "y": 0.10948951153457914 + }, + "p2": { + "x": 122, + "y": 40 + } } }, { - "ID": "2769", + "ID": "3070", "typeID": "__group__", - "zOrder": "50", - "measuredW": "241", + "zOrder": "63", + "measuredW": "332", + "measuredH": "50", + "w": "332", + "h": "50", + "x": "646", + "y": "323", + "properties": { + "controlName": "100-language" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "332", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "249", + "measuredH": "25", + "x": "41", + "y": "12", + "properties": { + "size": "17", + "text": "Learn a Programming Language" + } + } + ] + } + } + }, + { + "ID": "3071", + "typeID": "__group__", + "zOrder": "64", + "measuredW": "113", "measuredH": "47", - "w": "241", + "w": "113", "h": "47", - "x": "948", - "y": "942", + "x": "1194", + "y": "268", "properties": { - "controlName": "109-managing-servers:operating-system:net-bsd" + "controlName": "101-language:ruby" }, "children": { "controls": { @@ -1925,7 +1941,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "232", + "w": "104", "h": "47", "measuredW": "200", "measuredH": "140", @@ -1939,14 +1955,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "63", - "measuredW": "63", + "w": "45", + "measuredW": "39", "measuredH": "25", - "x": "81", + "x": "26", "y": "11", "properties": { - "text": "NetBSD", - "size": "17" + "size": "17", + "text": "Ruby" } }, { @@ -1957,7 +1973,7 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "217", + "x": "89", "y": "12", "children": { "controls": { @@ -2019,63 +2035,110 @@ } }, { - "ID": "2770", + "ID": "3072", "typeID": "__group__", - "zOrder": "51", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "1182", - "y": "842", + "zOrder": "65", + "measuredW": "109", + "measuredH": "47", + "w": "109", + "h": "47", + "x": "1080", + "y": "268", + "properties": { + "controlName": "100-language:python" + }, "children": { "controls": { "control": [ { "ID": "0", - "typeID": "Icon", + "typeID": "TextArea", "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", + "w": "97", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "12", "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": "53", + "measuredH": "25", + "x": "35", + "y": "11", "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } + "text": "Python", + "size": "17" } }, { "ID": "2", - "typeID": "Icon", + "typeID": "__group__", "zOrder": "2", "measuredW": "24", "measuredH": "24", + "w": "24", + "h": "24", "x": "0", - "y": "0", - "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" + "y": "12", + "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": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "10027263" + } + } + ] } } } @@ -2084,134 +2147,17 @@ } }, { - "ID": "2771", - "typeID": "Arrow", - "zOrder": "52", - "w": "137", - "h": "12", - "measuredW": "150", - "measuredH": "100", - "x": "871", - "y": "796", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.5, - "y": 0 - }, - "p1": { - "x": 0.6326041194809348, - "y": 0.013003277465426736 - }, - "p2": { - "x": 136, - "y": 11.5 - } - } - }, - { - "ID": "2772", - "typeID": "Arrow", - "zOrder": "53", - "w": "169", - "h": "3", - "measuredW": "150", - "measuredH": "100", - "x": "514", - "y": "795", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.3811746122917864, - "y": -0.010697874784606603 - }, - "p2": { - "x": 168.5, - "y": 2.5 - } - } - }, - { - "ID": "2773", - "typeID": "Arrow", - "zOrder": "54", - "w": "177", - "h": "54", - "measuredW": "150", - "measuredH": "100", - "x": "490", - "y": "810", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.6008584576652427, - "y": 0.09670030334922308 - }, - "p2": { - "x": 176.5, - "y": 53.5 - } - } - }, - { - "ID": "2774", - "typeID": "TextArea", - "zOrder": "55", - "w": "208", - "h": "191", - "measuredW": "200", - "measuredH": "140", - "x": "985", - "y": "641" - }, - { - "ID": "2775", - "typeID": "Label", - "zOrder": "56", - "measuredW": "41", - "measuredH": "25", - "x": "1040", - "y": "794", - "properties": { - "text": "Linux", - "size": "17" - } - }, - { - "ID": "2776", + "ID": "3073", "typeID": "__group__", - "zOrder": "57", - "measuredW": "243", - "measuredH": "40", - "w": "243", - "h": "40", - "x": "935", - "y": "744", + "zOrder": "66", + "measuredW": "216", + "measuredH": "47", + "w": "216", + "h": "47", + "x": "1090", + "y": "369", "properties": { - "controlName": "104-managing-servers:operating-system:rhel" + "controlName": "102-language:javascript" }, "children": { "controls": { @@ -2220,27 +2166,28 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "234", - "h": "40", + "w": "207", + "h": "47", "measuredW": "200", "measuredH": "140", - "x": "9", + "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16770457", + "textColor": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "147", + "measuredW": "155", "measuredH": "25", - "x": "52", - "y": "7", + "x": "25", + "y": "11", "properties": { "size": "17", - "text": "RHEL / Derivatives" + "text": "JavaScript / Node.js" } }, { @@ -2251,8 +2198,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "0", - "y": "8", + "x": "192", + "y": "12", "children": { "controls": { "control": [ @@ -2281,7 +2228,23 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", + "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" @@ -2297,17 +2260,17 @@ } }, { - "ID": "2777", + "ID": "3074", "typeID": "__group__", - "zOrder": "58", - "measuredW": "245", - "measuredH": "40", - "w": "245", - "h": "40", - "x": "933", - "y": "653", + "zOrder": "67", + "measuredW": "107", + "measuredH": "47", + "w": "107", + "h": "47", + "x": "1082", + "y": "318", "properties": { - "controlName": "102-managing-servers:operating-system:ubuntu" + "controlName": "103-language:go" }, "children": { "controls": { @@ -2316,58 +2279,76 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "234", - "h": "40", + "w": "97", + "h": "47", "measuredW": "200", "measuredH": "140", - "x": "11", + "x": "10", "y": "0", "properties": { - "color": "16770457" + "color": "16770457", + "textColor": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "128", + "measuredW": "23", "measuredH": "25", - "x": "64", - "y": "8", + "x": "47", + "y": "11", "properties": { "size": "17", - "text": "Ubuntu / Debian" + "text": "Go" } }, { "ID": "2", - "typeID": "Icon", + "typeID": "__group__", "zOrder": "2", "measuredW": "24", "measuredH": "24", + "w": "24", + "h": "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" + "y": "12", + "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" + } + } + } + ] } } } @@ -2376,17 +2357,17 @@ } }, { - "ID": "2778", + "ID": "3075", "typeID": "__group__", - "zOrder": "59", - "measuredW": "246", - "measuredH": "40", - "w": "246", - "h": "40", - "x": "932", - "y": "699", + "zOrder": "68", + "measuredW": "112", + "measuredH": "47", + "w": "112", + "h": "47", + "x": "1194", + "y": "319", "properties": { - "controlName": "103-managing-servers:operating-system:suse-linux" + "controlName": "104-language:rust" }, "children": { "controls": { @@ -2395,75 +2376,170 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "234", - "h": "40", + "w": "104", + "h": "47", "measuredW": "200", "measuredH": "140", - "x": "12", + "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16770457", + "textColor": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "90", + "measuredW": "36", "measuredH": "25", - "x": "84", - "y": "7", + "x": "32", + "y": "11", "properties": { - "text": "SUSE Linux", - "size": "17" + "size": "17", + "text": "Rust" } }, { "ID": "2", - "typeID": "Icon", + "typeID": "__group__", "zOrder": "2", "measuredW": "24", "measuredH": "24", - "x": "0", - "y": "8", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" + "w": "24", + "h": "24", + "x": "88", + "y": "11", + "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": "3076", + "typeID": "Arrow", + "zOrder": "69", + "w": "1", + "h": "115", + "measuredW": "150", + "measuredH": "100", + "x": "809", + "y": "44", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", + "p0": { + "x": 0, + "y": -0.06060606060606233 + }, + "p1": { + "x": 0.5, + "y": 0 + }, + "p2": { + "x": 0, + "y": 114.9603156901461 + } + } + }, + { + "ID": "3077", + "typeID": "__group__", + "zOrder": "239", + "measuredW": "251", + "measuredH": "49", + "w": "251", + "h": "49", + "x": "913", + "y": "482", + "properties": { + "controlName": "101-operating-systems" + }, + "children": { + "controls": { + "control": [ { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "251", + "h": "49", + "measuredW": "200", + "measuredH": "140", "x": "0", - "y": "8", + "y": "0", "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } + "color": "16776960" } }, { - "ID": "4", - "typeID": "Icon", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "8", + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "146", + "measuredH": "25", + "x": "53", + "y": "12", "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } + "size": "17", + "text": "Operating Systems" } } ] @@ -2471,3353 +2547,59 @@ } }, { - "ID": "2779", + "ID": "3079", "typeID": "__group__", - "zOrder": "60", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "1181", - "y": "812", + "zOrder": "70", + "measuredW": "147", + "measuredH": "43", + "w": "147", + "h": "43", + "x": "1072", + "y": "654", + "properties": { + "controlName": "101-operating-systems:unix:open-bsd" + }, "children": { "controls": { "control": [ { "ID": "0", - "typeID": "Icon", + "typeID": "TextArea", "zOrder": "0", - "measuredW": "24", - "measuredH": "24", + "w": "137", + "h": "43", + "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", - "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - }, - { - "ID": "2780", - "typeID": "Arrow", - "zOrder": "61", - "w": "74", - "h": "41", - "measuredW": "150", - "measuredH": "100", - "x": "856", - "y": "555", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.3811746122917864, - "y": -0.010697874784606631 - }, - "p2": { - "x": 73.5, - "y": 40.5 - } - } - }, - { - "ID": "2781", - "typeID": "Arrow", - "zOrder": "62", - "w": "79", - "h": "43", - "measuredW": "150", - "measuredH": "100", - "x": "846", - "y": "502", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 42.5 - }, - "p1": { - "x": 0.38117461229178634, - "y": -0.010697874784606655 - }, - "p2": { - "x": 79, - "y": -0.5 - } - } - }, - { - "ID": "2782", - "typeID": "Arrow", - "zOrder": "63", - "w": "96", - "h": "3", - "measuredW": "150", - "measuredH": "100", - "x": "842", - "y": "547", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.38117461229178634, - "y": -0.010697874784606601 - }, - "p2": { - "x": 96, - "y": 2 - } - } - }, - { - "ID": "2783", - "typeID": "Arrow", - "zOrder": "64", - "w": "1", - "h": "77", - "measuredW": "150", - "measuredH": "100", - "x": "819", - "y": "555", - "properties": { - "color": "2848996", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.3856209150326797, - "y": 0.0065359477124183 - }, - "p2": { - "x": 0, - "y": 76.5 - } - } - }, - { - "ID": "2784", - "typeID": "Arrow", - "zOrder": "65", - "w": "224", - "h": "188", - "measuredW": "150", - "measuredH": "100", - "x": "506", - "y": "543", - "properties": { - "color": "2848996", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 224, - "y": -0.5 - }, - "p1": { - "x": 0.5071028305356263, - "y": 0.24829052104046045 - }, - "p2": { - "x": 0, - "y": 185.5 - } - } - }, - { - "ID": "2785", - "typeID": "Arrow", - "zOrder": "66", - "w": "1", - "h": "77", - "measuredW": "150", - "measuredH": "100", - "x": "819", - "y": "465", - "properties": { - "color": "2848996", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.3856209150326797, - "y": 0.0065359477124183 - }, - "p2": { - "x": 0, - "y": 76.5 - } - } - }, - { - "ID": "2786", - "typeID": "Arrow", - "zOrder": "67", - "w": "108", - "h": "54", - "measuredW": "150", - "measuredH": "100", - "x": "427", - "y": "567", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.5, - "y": 53.5 - }, - "p1": { - "x": 0.42592592592592593, - "y": -0.05555555555555556 - }, - "p2": { - "x": 107.5, - "y": -0.5 - } - } - }, - { - "ID": "2787", - "typeID": "Arrow", - "zOrder": "68", - "w": "115", - "h": "12", - "measuredW": "150", - "measuredH": "100", - "x": "419", - "y": "562", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.5, - "y": 11.5 - }, - "p1": { - "x": 0.3983843219388136, - "y": -0.015483581419702295 - }, - "p2": { - "x": 114.5, - "y": -0.5 - } - } - }, - { - "ID": "2788", - "typeID": "Arrow", - "zOrder": "69", - "w": "119", - "h": "28", - "measuredW": "150", - "measuredH": "100", - "x": "418", - "y": "529", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.5, - "y": 0.5 - }, - "p1": { - "x": 0.4252927400468384, - "y": 0.049648711943793916 - }, - "p2": { - "x": 118.5, - "y": 28.5 - } - } - }, - { - "ID": "2789", - "typeID": "Arrow", - "zOrder": "70", - "w": "109", - "h": "66", - "measuredW": "150", - "measuredH": "100", - "x": "426", - "y": "486", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.5, - "y": 1.5 - }, - "p1": { - "x": 0.32020599818236906, - "y": 0.08966979703120266 - }, - "p2": { - "x": 108.5, - "y": 66.5 - } - } - }, - { - "ID": "2790", - "typeID": "Arrow", - "zOrder": "71", - "w": "1", - "h": "77", - "measuredW": "150", - "measuredH": "100", - "x": "602", - "y": "560", - "properties": { - "color": "2848996", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.3856209150326797, - "y": 0.0065359477124183 - }, - "p2": { - "x": 0, - "y": 76.5 - } - } - }, - { - "ID": "2791", - "typeID": "Arrow", - "zOrder": "72", - "w": "1", - "h": "77", - "measuredW": "150", - "measuredH": "100", - "x": "602", - "y": "470", - "properties": { - "color": "2848996", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.3856209150326797, - "y": 0.0065359477124183 - }, - "p2": { - "x": 0, - "y": 76.5 - } - } - }, - { - "ID": "2792", - "typeID": "Arrow", - "zOrder": "73", - "w": "44", - "h": "180", - "measuredW": "150", - "measuredH": "100", - "x": "693", - "y": "360", - "properties": { - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.5, - "y": 0 - }, - "p1": { - "x": 0.4520505316193087, - "y": 0.11905308783758752 - }, - "p2": { - "x": 38.5, - "y": 179.5 - }, - "color": "2848996" - } - }, - { - "ID": "2793", - "typeID": "__group__", - "zOrder": "74", - "measuredW": "341", - "measuredH": "53", - "w": "341", - "h": "53", - "x": "522", - "y": "524", - "properties": { - "controlName": "101-os-concepts" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "341", - "h": "53", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "265", - "measuredH": "25", - "x": "38", - "y": "14", - "properties": { - "size": "17", - "text": "Understand different OS Concepts" - } - } - ] - } - } - }, - { - "ID": "2794", - "typeID": "__group__", - "zOrder": "75", - "measuredW": "116", - "measuredH": "40", - "w": "116", - "h": "40", - "x": "623", - "y": "149", - "properties": { - "controlName": "ext_link:roadmap.sh/devops" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "116", - "measuredH": "40", - "x": "0", - "y": "0", - "properties": { - "size": "32", - "text": "DevOps" - } - } - ] - } - } - }, - { - "ID": "2795", - "typeID": "Arrow", - "zOrder": "76", - "w": "14", - "h": "71", - "measuredW": "150", - "measuredH": "100", - "x": "700", - "y": "64", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "p0": { - "x": 10, - "y": 0 - }, - "p1": { - "x": 0.46601941747572834, - "y": 0.1067961165048544 - }, - "p2": { - "x": 0, - "y": 71 - }, - "rightArrow": "false", - "stroke": "dotted" - } - }, - { - "ID": "2796", - "typeID": "Arrow", - "zOrder": "77", - "w": "40", - "h": "140", - "measuredW": "150", - "measuredH": "100", - "x": "620", - "y": "200", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 40, - "y": 0 - }, - "p1": { - "x": 0.543, - "y": -0.201 - }, - "p2": { - "x": 20, - "y": 140 - } - } - }, - { - "ID": "2797", - "typeID": "__group__", - "zOrder": "78", - "measuredW": "302", - "measuredH": "50", - "w": "302", - "h": "50", - "x": "540", - "y": "326", - "properties": { - "controlName": "100-language" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "302", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "249", - "measuredH": "25", - "x": "26", - "y": "11", - "properties": { - "size": "17", - "text": "Learn a Programming Language" - } - } - ] - } - } - }, - { - "ID": "2798", - "typeID": "__group__", - "zOrder": "79", - "measuredW": "108", - "measuredH": "47", - "w": "108", - "h": "47", - "x": "1099", - "y": "271", - "properties": { - "controlName": "101-language:ruby" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "98", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "w": "45", - "measuredW": "39", - "measuredH": "25", - "x": "26", - "y": "11", - "properties": { - "size": "17", - "text": "Ruby" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "84", - "y": "12", - "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": "2799", - "typeID": "__group__", - "zOrder": "80", - "measuredW": "109", - "measuredH": "47", - "w": "109", - "h": "47", - "x": "985", - "y": "271", - "properties": { - "controlName": "100-language:python" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "97", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "12", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "53", - "measuredH": "25", - "x": "35", - "y": "11", - "properties": { - "text": "Python", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "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": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "10027263" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "2800", - "typeID": "__group__", - "zOrder": "81", - "measuredW": "216", - "measuredH": "47", - "w": "216", - "h": "47", - "x": "995", - "y": "372", - "properties": { - "controlName": "102-language:javascript" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "207", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457", - "textColor": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "155", - "measuredH": "25", - "x": "25", - "y": "11", - "properties": { - "size": "17", - "text": "JavaScript / Node.js" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "192", - "y": "12", - "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": "2801", - "typeID": "__group__", - "zOrder": "82", - "measuredW": "107", - "measuredH": "47", - "w": "107", - "h": "47", - "x": "987", - "y": "321", - "properties": { - "controlName": "103-language:go" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "97", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "10", - "y": "0", - "properties": { - "color": "16770457", - "textColor": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "23", - "measuredH": "25", - "x": "47", - "y": "11", - "properties": { - "size": "17", - "text": "Go" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "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": "2802", - "typeID": "__group__", - "zOrder": "83", - "measuredW": "110", - "measuredH": "47", - "w": "110", - "h": "47", - "x": "1099", - "y": "322", - "properties": { - "controlName": "104-language:rust" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "100", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457", - "textColor": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "36", - "measuredH": "25", - "x": "32", - "y": "11", - "properties": { - "size": "17", - "text": "Rust" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "86", - "y": "11", - "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": "2803", - "typeID": "Canvas", - "zOrder": "84", - "w": "350", - "h": "141", - "measuredW": "100", - "measuredH": "70", - "x": "873", - "y": "61" - }, - { - "ID": "2804", - "typeID": "Label", - "zOrder": "85", - "measuredW": "314", - "measuredH": "25", - "x": "887", - "y": "78", - "properties": { - "size": "17", - "text": "Find the detailed version of this roadmap" - } - }, - { - "ID": "2805", - "typeID": "Label", - "zOrder": "86", - "measuredW": "319", - "measuredH": "25", - "x": "887", - "y": "106", - "properties": { - "size": "17", - "text": "along with resources and other roadmaps" - } - }, - { - "ID": "2806", - "typeID": "__group__", - "zOrder": "87", - "measuredW": "320", - "measuredH": "45", - "w": "320", - "h": "45", - "x": "888", - "y": "142", - "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": "__group__", - "zOrder": "1", - "measuredW": "181", - "measuredH": "29", - "w": "181", - "h": "29", - "x": "65", - "y": "8", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "105", - "measuredH": "28", - "x": "76", - "y": "0", - "properties": { - "color": "16777215", - "size": "20", - "text": "roadmap.sh" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "45", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "size": "20", - "text": "https" - } - }, - { - "ID": "2", - "typeID": "Label", - "zOrder": "2", - "measuredW": "5", - "measuredH": "28", - "x": "48", - "y": "0", - "properties": { - "bold": "true", - "color": "16777215", - "size": "20", - "text": ":" - } - }, - { - "ID": "3", - "typeID": "Label", - "zOrder": "3", - "measuredW": "10", - "measuredH": "28", - "x": "55", - "y": "1", - "properties": { - "color": "16777215", - "size": "20", - "text": "/" - } - }, - { - "ID": "4", - "typeID": "Label", - "zOrder": "4", - "measuredW": "10", - "measuredH": "28", - "x": "63", - "y": "1", - "properties": { - "color": "16777215", - "size": "20", - "text": "/" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "2807", - "typeID": "__group__", - "zOrder": "88", - "measuredW": "420", - "measuredH": "130", - "w": "420", - "h": "130", - "x": "59", - "y": "51", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "420", - "h": "130", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "__group__", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "23", - "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": "2", - "typeID": "Label", - "zOrder": "2", - "measuredW": "269", - "measuredH": "24", - "x": "59", - "y": "21", - "properties": { - "size": "16", - "text": "Personal Recommendation / Opinion" - } - }, - { - "ID": "5", - "typeID": "Label", - "zOrder": "3", - "w": "324", - "measuredW": "315", - "measuredH": "24", - "x": "60", - "y": "86", - "properties": { - "size": "16", - "text": "Order in roadmap not strict (Learn anytime)" - } - }, - { - "ID": "6", - "typeID": "__group__", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "23", - "y": "86", - "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": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - }, - { - "ID": "7", - "typeID": "Label", - "zOrder": "5", - "measuredW": "272", - "measuredH": "24", - "x": "59", - "y": "54", - "properties": { - "size": "16", - "text": "Alternative Option - Pick this or purple" - } - }, - { - "ID": "8", - "typeID": "__group__", - "zOrder": "6", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "23", - "y": "53", - "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": "2808", - "typeID": "__group__", - "zOrder": "89", - "measuredW": "208", - "measuredH": "47", - "w": "208", - "h": "47", - "x": "230", - "y": "552", - "properties": { - "controlName": "103-os-concepts:memory-storage" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "131", - "measuredH": "25", - "x": "50", - "y": "11", - "properties": { - "text": "Memory/Storage", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "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": "2809", - "typeID": "__group__", - "zOrder": "90", - "measuredW": "208", - "measuredH": "47", - "w": "208", - "h": "47", - "x": "230", - "y": "452", - "properties": { - "controlName": "101-os-concepts:io-management" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "133", - "measuredH": "25", - "x": "46", - "y": "11", - "properties": { - "text": "I/O Management", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "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": "2810", - "typeID": "__group__", - "zOrder": "91", - "measuredW": "208", - "measuredH": "47", - "w": "208", - "h": "47", - "x": "230", - "y": "502", - "properties": { - "controlName": "102-os-concepts:virtualization" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "99", - "measuredH": "25", - "x": "64", - "y": "11", - "properties": { - "text": "Virtualization", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "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": "2811", - "typeID": "__group__", - "zOrder": "92", - "measuredW": "208", - "measuredH": "47", - "w": "208", - "h": "47", - "x": "230", - "y": "603", - "properties": { - "controlName": "104-os-concepts:file-system" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "8", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "97", - "measuredH": "25", - "x": "65", - "y": "11", - "properties": { - "text": "File Systems", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "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": "2812", - "typeID": "__group__", - "zOrder": "93", - "measuredW": "284", - "measuredH": "47", - "w": "284", - "h": "47", - "x": "917", - "y": "478", - "properties": { - "controlName": "108-os-concepts:startup-management" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "274", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "212", - "measuredH": "25", - "x": "25", - "y": "11", - "properties": { - "text": "Startup Management (initd)", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "260", - "y": "12", - "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": "2813", - "typeID": "__group__", - "zOrder": "94", - "measuredW": "285", - "measuredH": "47", - "w": "285", - "h": "47", - "x": "917", - "y": "531", - "properties": { - "controlName": "109-os-concepts:service-management" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "274", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "191", - "measuredH": "25", - "x": "41", - "y": "11", - "properties": { - "size": "17", - "text": "Service Mgmt. (systemd)" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "261", - "y": "12", - "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": "2814", - "typeID": "__group__", - "zOrder": "95", - "measuredW": "285", - "measuredH": "47", - "w": "285", - "h": "47", - "x": "918", - "y": "585", - "properties": { - "controlName": "110-os-concepts:threads-concurrency" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "274", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "200", - "measuredH": "25", - "x": "37", - "y": "11", - "properties": { - "text": "Threads and Concurrency", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "261", - "y": "12", - "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": "2815", - "typeID": "__group__", - "zOrder": "96", - "measuredW": "165", - "measuredH": "47", - "w": "165", - "h": "47", - "x": "512", - "y": "438", - "properties": { - "controlName": "100-os-concepts:networking" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "156", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "87", - "measuredH": "25", - "x": "43", - "y": "11", - "properties": { - "text": "Networking", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "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": "2816", - "typeID": "__group__", - "zOrder": "97", - "measuredW": "165", - "measuredH": "47", - "w": "165", - "h": "47", - "x": "512", - "y": "621", - "properties": { - "controlName": "105-os-concepts:sockets" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "156", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "61", - "measuredH": "25", - "x": "56", - "y": "11", - "properties": { - "text": "Sockets", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "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": "2817", - "typeID": "__group__", - "zOrder": "98", - "measuredW": "127", - "measuredH": "47", - "w": "127", - "h": "47", - "x": "765", - "y": "436", - "properties": { - "controlName": "106-os-concepts:posix" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "117", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "49", - "measuredH": "25", - "x": "34", - "y": "11", - "properties": { - "text": "POSIX", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "103", - "y": "12", - "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": "2818", - "typeID": "__group__", - "zOrder": "99", - "measuredW": "415", - "measuredH": "132", - "w": "415", - "h": "132", - "x": "122", - "y": "698", - "properties": { - "controlName": "102-managing-servers" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "415", - "h": "132", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "252", - "measuredH": "26", - "x": "82", - "y": "14", - "properties": { - "text": "Learn about Managing Servers", - "size": "18" - } - }, - { - "ID": "2", - "typeID": "Label", - "zOrder": "2", - "measuredW": "375", - "measuredH": "24", - "x": "20", - "y": "47", - "properties": { - "text": "Get some administration knowledge in some OS. Go", - "size": "16" - } - }, - { - "ID": "3", - "typeID": "Label", - "zOrder": "3", - "measuredW": "367", - "measuredH": "24", - "x": "24", - "y": "71", - "properties": { - "text": "with any Linux distro. Pick Ubuntu if you have a little", - "size": "16" - } - }, - { - "ID": "4", - "typeID": "Label", - "zOrder": "4", - "measuredW": "201", - "measuredH": "24", - "x": "107", - "y": "96", - "properties": { - "text": "to no experience with Linux.", - "size": "16" - } - } - ] - } - } - }, - { - "ID": "2819", - "typeID": "__group__", - "zOrder": "100", - "measuredW": "127", - "measuredH": "47", - "w": "127", - "h": "47", - "x": "765", - "y": "621", - "properties": { - "controlName": "107-os-concepts:processes" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "117", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "81", - "measuredH": "25", - "x": "18", - "y": "11", - "properties": { - "text": "Processes", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "103", - "y": "12", - "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": "2820", - "typeID": "__group__", - "zOrder": "101", - "measuredW": "238", - "measuredH": "49", - "w": "238", - "h": "49", - "x": "653", - "y": "777", - "properties": { - "controlName": "100-managing-servers:operating-system" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "238", - "h": "49", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "137", - "measuredH": "25", - "x": "50", - "y": "12", - "properties": { - "text": "Operating System", - "size": "17" - } - } - ] - } - } - }, - { - "ID": "2821", - "typeID": "__group__", - "zOrder": "102", - "measuredW": "238", - "measuredH": "49", - "w": "238", - "h": "49", - "x": "653", - "y": "846", - "properties": { - "controlName": "101-managing-servers:live-in-terminal" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "238", - "h": "49", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "182", - "measuredH": "25", - "x": "28", - "y": "12", - "properties": { - "text": "Learn to live in Terminal", - "size": "17" - } - } - ] - } - } - }, - { - "ID": "2822", - "typeID": "TextArea", - "zOrder": "103", - "w": "213", - "h": "89", - "measuredW": "200", - "measuredH": "140", - "x": "987", - "y": "1019" - }, - { - "ID": "2823", - "typeID": "Label", - "zOrder": "104", - "measuredW": "159", - "measuredH": "25", - "x": "1015", - "y": "1026", - "properties": { - "text": "terminal multiplexers", - "size": "17" - } - }, - { - "ID": "2824", - "typeID": "__group__", - "zOrder": "105", - "measuredW": "98", - "measuredH": "40", - "w": "98", - "h": "40", - "x": "995", - "y": "1058", - "properties": { - "controlName": "100-managing-servers:live-in-terminal:screen-multiplexer" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "89", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "9", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "50", - "measuredH": "24", - "x": "30", - "y": "8", - "properties": { - "text": "screen", - "size": "16" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "8", - "properties": { - "controlName": "100-managing-servers:live-in-terminal:terminal-multiplexers" - }, - "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": "2825", - "typeID": "__group__", - "zOrder": "106", - "measuredW": "91", - "measuredH": "40", - "w": "91", - "h": "40", - "x": "1103", - "y": "1058", - "properties": { - "controlName": "101-managing-servers:live-in-terminal:tmux-multiplexer" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "80", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "35", - "measuredH": "24", - "x": "23", - "y": "8", - "properties": { - "text": "tmux", - "size": "16" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "67", - "y": "8", - "properties": { - "controlName": "100-managing-servers:live-in-terminal:terminal-multiplexers" - }, - "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": "2826", - "typeID": "__group__", - "zOrder": "107", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "1181", - "y": "1013", - "properties": { - "controlName": "100-managing-servers:live-in-terminal:terminal-multiplexers" - }, - "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": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - }, - { - "ID": "2827", - "typeID": "__group__", - "zOrder": "108", - "measuredW": "161", - "measuredH": "42", - "w": "161", - "h": "42", - "x": "742", - "y": "707", - "properties": { - "controlName": "100-managing-servers:operating-system:windows" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "149", - "h": "42", - "measuredW": "200", - "measuredH": "140", - "x": "12", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "68", - "measuredH": "25", - "x": "53", - "y": "8", - "properties": { - "text": "Windows", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "8", - "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": "2828", - "typeID": "__group__", - "zOrder": "109", - "measuredW": "311", - "measuredH": "47", - "w": "311", - "h": "47", - "x": "513", - "y": "919", - "properties": { - "controlName": "104-managing-servers:live-in-terminal:bash-scripting" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "300", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "161", - "measuredH": "25", - "x": "80", - "y": "11", - "properties": { - "text": "Learn Bash Scripting", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "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": "2829", - "typeID": "__group__", - "zOrder": "110", - "measuredW": "314", - "measuredH": "47", - "w": "314", - "h": "47", - "x": "511", - "y": "973", - "properties": { - "controlName": "105-managing-servers:live-in-terminal:editors" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "302", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "12", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "231", - "measuredH": "25", - "x": "47", - "y": "11", - "properties": { - "text": "Vim/Nano/PowerShell/Emacs", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", + "w": "77", + "measuredW": "77", + "measuredH": "25", + "x": "30", + "y": "9", + "properties": { + "text": "OpenBSD", + "size": "17" + } + }, + { + "ID": "2", + "typeID": "__group__", + "zOrder": "2", "measuredW": "24", "measuredH": "24", "w": "24", "h": "24", - "x": "0", - "y": "12", + "x": "123", + "y": "9", "children": { "controls": { "control": [ @@ -5846,7 +2628,23 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", + "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" @@ -5862,17 +2660,17 @@ } }, { - "ID": "2830", + "ID": "3080", "typeID": "__group__", - "zOrder": "111", - "measuredW": "312", - "measuredH": "76", - "w": "312", - "h": "76", - "x": "513", - "y": "1027", + "zOrder": "71", + "measuredW": "147", + "measuredH": "43", + "w": "147", + "h": "43", + "x": "1072", + "y": "608", "properties": { - "controlName": "106-managing-servers:live-in-terminal:compiling-apps" + "controlName": "100-operating-systems:unix:free-bsd" }, "children": { "controls": { @@ -5881,11 +2679,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "302", - "h": "76", + "w": "137", + "h": "43", "measuredW": "200", "measuredH": "140", - "x": "10", + "x": "0", "y": "0", "properties": { "color": "16770457" @@ -5895,38 +2693,26 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "216", + "w": "71", + "measuredW": "71", "measuredH": "25", - "x": "51", - "y": "14", + "x": "33", + "y": "9", "properties": { - "text": "Compiling apps from source", + "text": "FreeBSD", "size": "17" } }, { "ID": "2", - "typeID": "Label", - "zOrder": "2", - "measuredW": "264", - "measuredH": "25", - "x": "29", - "y": "36", - "properties": { - "text": "(gcc, make and other related stuff)", - "size": "17" - } - }, - { - "ID": "3", "typeID": "__group__", - "zOrder": "3", + "zOrder": "2", "measuredW": "24", "measuredH": "24", "w": "24", "h": "24", - "x": "0", - "y": "26", + "x": "123", + "y": "10", "children": { "controls": { "control": [ @@ -5955,227 +2741,15 @@ "x": "0", "y": "0", "properties": { - "color": "10066329", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" } } } - ] - } - } - } - ] - } - } - }, - { - "ID": "2831", - "typeID": "TextArea", - "zOrder": "112", - "w": "294", - "h": "195", - "measuredW": "200", - "measuredH": "140", - "x": "532", - "y": "1121" - }, - { - "ID": "2832", - "typeID": "Label", - "zOrder": "113", - "measuredW": "180", - "measuredH": "25", - "x": "589", - "y": "1277", - "properties": { - "size": "17", - "text": "Text Manipulation Tools" - } - }, - { - "ID": "2833", - "typeID": "__group__", - "zOrder": "114", - "measuredW": "61", - "measuredH": "40", - "w": "61", - "h": "40", - "x": "548", - "y": "1136", - "properties": { - "controlName": "120-managing-servers:live-in-terminal:awk" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "61", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "28", - "measuredH": "24", - "x": "16", - "y": "8", - "properties": { - "text": "awk", - "size": "16" - } - } - ] - } - } - }, - { - "ID": "2834", - "typeID": "__group__", - "zOrder": "115", - "measuredW": "61", - "measuredH": "40", - "w": "61", - "h": "40", - "x": "615", - "y": "1136", - "properties": { - "controlName": "121-managing-servers:live-in-terminal:sed" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "61", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "27", - "measuredH": "24", - "x": "17", - "y": "8", - "properties": { - "text": "sed", - "size": "16" - } - } - ] - } - } - }, - { - "ID": "2835", - "typeID": "__group__", - "zOrder": "116", - "measuredW": "61", - "measuredH": "40", - "w": "61", - "h": "40", - "x": "683", - "y": "1136", - "properties": { - "controlName": "122-managing-servers:live-in-terminal:grep" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "61", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "34", - "measuredH": "24", - "x": "14", - "y": "8", - "properties": { - "text": "grep", - "size": "16" - } - } - ] - } - } - }, - { - "ID": "2836", - "typeID": "__group__", - "zOrder": "117", - "measuredW": "61", - "measuredH": "40", - "w": "61", - "h": "40", - "x": "751", - "y": "1137", - "properties": { - "controlName": "123-managing-servers:live-in-terminal:sort" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "61", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "28", - "measuredH": "24", - "x": "16", - "y": "8", - "properties": { - "text": "sort", - "size": "16" + ] + } } } ] @@ -6183,17 +2757,31 @@ } }, { - "ID": "2837", + "ID": "3081", + "typeID": "Label", + "zOrder": "72", + "w": "37", + "measuredW": "34", + "measuredH": "25", + "x": "1124", + "y": "577", + "properties": { + "text": "Unix", + "size": "17" + } + }, + { + "ID": "3082", "typeID": "__group__", - "zOrder": "118", - "measuredW": "61", + "zOrder": "73", + "measuredW": "148", "measuredH": "40", - "w": "61", + "w": "148", "h": "40", - "x": "615", - "y": "1182", + "x": "1071", + "y": "701", "properties": { - "controlName": "125-managing-servers:live-in-terminal:uniq" + "controlName": "102-operating-systems:unix:net-bsd" }, "children": { "controls": { @@ -6202,7 +2790,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "61", + "w": "139", "h": "40", "measuredW": "200", "measuredH": "140", @@ -6216,13 +2804,79 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "32", + "w": "63", + "measuredW": "63", + "measuredH": "25", + "x": "32", + "y": "7", + "properties": { + "text": "NetBSD", + "size": "17" + } + }, + { + "ID": "2", + "typeID": "__group__", + "zOrder": "2", + "measuredW": "24", "measuredH": "24", - "x": "15", + "w": "24", + "h": "24", + "x": "124", "y": "8", - "properties": { - "text": "uniq", - "size": "16" + "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" + } + } + } + ] + } } } ] @@ -6230,17 +2884,17 @@ } }, { - "ID": "2838", + "ID": "3084", "typeID": "__group__", - "zOrder": "119", - "measuredW": "61", - "measuredH": "40", - "w": "61", - "h": "40", - "x": "683", - "y": "1182", + "zOrder": "74", + "measuredW": "152", + "measuredH": "44", + "w": "152", + "h": "44", + "x": "672", + "y": "610", "properties": { - "controlName": "126-managing-servers:live-in-terminal:cat" + "controlName": "103-operating-systems:windows" }, "children": { "controls": { @@ -6249,11 +2903,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "61", - "h": "40", + "w": "143", + "h": "44", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "9", "y": "0", "properties": { "color": "16770457" @@ -6263,13 +2917,78 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "23", - "measuredH": "24", - "x": "19", - "y": "8", + "measuredW": "68", + "measuredH": "25", + "x": "47", + "y": "9", "properties": { - "text": "cat", - "size": "16" + "text": "Windows", + "size": "17" + } + }, + { + "ID": "2", + "typeID": "__group__", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "0", + "y": "10", + "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" + } + } + } + ] + } } } ] @@ -6277,17 +2996,17 @@ } }, { - "ID": "2839", + "ID": "3085", "typeID": "__group__", - "zOrder": "120", - "measuredW": "61", - "measuredH": "40", - "w": "61", - "h": "40", - "x": "548", - "y": "1182", + "zOrder": "75", + "measuredW": "194", + "measuredH": "47", + "w": "194", + "h": "47", + "x": "765", + "y": "827", "properties": { - "controlName": "124-managing-servers:live-in-terminal:cut" + "controlName": "100-live-in-terminal:scripting:bash-scripting" }, "children": { "controls": { @@ -6296,8 +3015,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "61", - "h": "40", + "w": "194", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", @@ -6310,13 +3029,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "23", - "measuredH": "24", - "x": "19", - "y": "8", + "w": "119", + "measuredW": "112", + "measuredH": "25", + "x": "38", + "y": "11", "properties": { - "text": "cut", - "size": "16" + "text": "Bash Scripting", + "size": "17" } } ] @@ -6324,17 +3044,17 @@ } }, { - "ID": "2840", + "ID": "3086", "typeID": "__group__", - "zOrder": "121", - "measuredW": "61", - "measuredH": "40", - "w": "61", - "h": "40", - "x": "751", - "y": "1182", + "zOrder": "76", + "measuredW": "194", + "measuredH": "47", + "w": "194", + "h": "47", + "x": "765", + "y": "878", "properties": { - "controlName": "127-managing-servers:live-in-terminal:echo" + "controlName": "101-live-in-terminal:scripting:powershell" }, "children": { "controls": { @@ -6343,8 +3063,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "61", - "h": "40", + "w": "194", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", @@ -6357,13 +3077,14 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "36", - "measuredH": "24", - "x": "13", - "y": "8", + "w": "94", + "measuredW": "89", + "measuredH": "25", + "x": "50", + "y": "11", "properties": { - "text": "echo", - "size": "16" + "text": "Power Shell", + "size": "17" } } ] @@ -6371,17 +3092,30 @@ } }, { - "ID": "2841", + "ID": "3088", + "typeID": "Label", + "zOrder": "11", + "measuredW": "41", + "measuredH": "25", + "x": "934", + "y": "579", + "properties": { + "text": "Linux", + "size": "17" + } + }, + { + "ID": "3089", "typeID": "__group__", - "zOrder": "122", - "measuredW": "61", + "zOrder": "12", + "measuredW": "205", "measuredH": "40", - "w": "61", + "w": "205", "h": "40", - "x": "548", - "y": "1226", + "x": "852", + "y": "699", "properties": { - "controlName": "128-managing-servers:live-in-terminal:fmt" + "controlName": "102-operating-systems:linux:rhel" }, "children": { "controls": { @@ -6390,7 +3124,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "61", + "w": "205", "h": "40", "measuredW": "200", "measuredH": "140", @@ -6404,13 +3138,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "18", - "y": "8", + "measuredW": "147", + "measuredH": "25", + "x": "29", + "y": "7", "properties": { - "text": "fmt", - "size": "16" + "size": "17", + "text": "RHEL / Derivatives" } } ] @@ -6418,17 +3152,17 @@ } }, { - "ID": "2842", + "ID": "3090", "typeID": "__group__", - "zOrder": "123", - "measuredW": "61", + "zOrder": "13", + "measuredW": "204", "measuredH": "40", - "w": "61", + "w": "204", "h": "40", - "x": "615", - "y": "1227", + "x": "853", + "y": "612", "properties": { - "controlName": "129-managing-servers:live-in-terminal:tr" + "controlName": "100-operating-systems:linux:ubuntu" }, "children": { "controls": { @@ -6437,7 +3171,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "61", + "w": "204", "h": "40", "measuredW": "200", "measuredH": "140", @@ -6451,13 +3185,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "11", - "measuredH": "24", - "x": "25", + "measuredW": "128", + "measuredH": "25", + "x": "38", "y": "8", "properties": { - "text": "tr", - "size": "16" + "size": "17", + "text": "Ubuntu / Debian" } } ] @@ -6465,17 +3199,17 @@ } }, { - "ID": "2843", + "ID": "3091", "typeID": "__group__", - "zOrder": "124", - "measuredW": "61", + "zOrder": "14", + "measuredW": "204", "measuredH": "40", - "w": "61", + "w": "204", "h": "40", - "x": "683", - "y": "1227", + "x": "853", + "y": "656", "properties": { - "controlName": "130-managing-servers:live-in-terminal:nl" + "controlName": "101-operating-systems:linux:suse-linux" }, "children": { "controls": { @@ -6484,7 +3218,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "61", + "w": "204", "h": "40", "measuredW": "200", "measuredH": "140", @@ -6498,13 +3232,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "13", - "measuredH": "24", - "x": "24", - "y": "8", + "measuredW": "90", + "measuredH": "25", + "x": "59", + "y": "7", "properties": { - "text": "nl", - "size": "16" + "text": "SUSE Linux", + "size": "17" } } ] @@ -6512,17 +3246,17 @@ } }, { - "ID": "2844", + "ID": "3093", "typeID": "__group__", - "zOrder": "125", - "measuredW": "59", - "measuredH": "40", - "w": "59", - "h": "40", - "x": "752", - "y": "1227", + "zOrder": "77", + "measuredW": "332", + "measuredH": "49", + "w": "332", + "h": "49", + "x": "1013", + "y": "775", "properties": { - "controlName": "131-managing-servers:live-in-terminal:wc" + "controlName": "102-live-in-terminal" }, "children": { "controls": { @@ -6531,27 +3265,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "59", - "h": "40", + "w": "332", + "h": "49", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "20", - "measuredH": "24", - "x": "20", - "y": "8", + "measuredW": "182", + "measuredH": "25", + "x": "75", + "y": "12", "properties": { - "text": "wc", - "size": "16" + "text": "Learn to live in Terminal", + "size": "17" } } ] @@ -6559,15 +3293,15 @@ } }, { - "ID": "2845", + "ID": "3094", "typeID": "__group__", - "zOrder": "126", + "zOrder": "78", "measuredW": "24", "measuredH": "24", "w": "24", "h": "24", - "x": "810", - "y": "1278", + "x": "943", + "y": "891", "children": { "controls": { "control": [ @@ -6596,11 +3330,11 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", "icon": { "ID": "check-circle", "size": "small" - } + }, + "color": "3700253" } } ] @@ -6608,39 +3342,15 @@ } }, { - "ID": "2846", - "typeID": "TextArea", - "zOrder": "127", - "w": "294", - "h": "96", - "measuredW": "200", - "measuredH": "140", - "x": "909", - "y": "1118" - }, - { - "ID": "2847", - "typeID": "Label", - "zOrder": "128", - "measuredW": "149", - "measuredH": "25", - "x": "980", - "y": "1130", - "properties": { - "text": "Process Monitoring", - "size": "17" - } - }, - { - "ID": "2848", + "ID": "3095", "typeID": "__group__", - "zOrder": "129", + "zOrder": "79", "measuredW": "24", "measuredH": "24", "w": "24", "h": "24", - "x": "1187", - "y": "1110", + "x": "943", + "y": "837", "children": { "controls": { "control": [ @@ -6681,64 +3391,30 @@ } }, { - "ID": "2849", - "typeID": "__group__", - "zOrder": "130", - "measuredW": "48", - "measuredH": "40", - "w": "48", - "h": "40", - "x": "922", - "y": "1162", + "ID": "3096", + "typeID": "Label", + "zOrder": "80", + "measuredW": "68", + "measuredH": "25", + "x": "829", + "y": "787", "properties": { - "controlName": "102-managing-servers:live-in-terminal:ps" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "48", - "h": "40", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "18", - "measuredH": "24", - "x": "15", - "y": "9", - "properties": { - "size": "16", - "text": "ps" - } - } - ] - } + "size": "17", + "text": "Scripting" } }, { - "ID": "2850", + "ID": "3097", "typeID": "__group__", - "zOrder": "131", - "measuredW": "48", - "measuredH": "40", - "w": "48", - "h": "40", - "x": "976", - "y": "1162", + "zOrder": "240", + "measuredW": "190", + "measuredH": "47", + "w": "190", + "h": "47", + "x": "567", + "y": "825", "properties": { - "controlName": "102-managing-servers:live-in-terminal:top" + "controlName": "102-live-in-terminal:editors" }, "children": { "controls": { @@ -6747,8 +3423,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "48", - "h": "40", + "w": "190", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", @@ -6761,13 +3437,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "12", - "y": "9", + "measuredW": "138", + "measuredH": "25", + "x": "25", + "y": "11", "properties": { - "size": "16", - "text": "top" + "text": "Vim/Nano/Emacs", + "size": "17" } } ] @@ -6775,46 +3451,48 @@ } }, { - "ID": "2851", + "ID": "3098", "typeID": "__group__", - "zOrder": "132", - "measuredW": "48", - "measuredH": "40", - "w": "48", - "h": "40", - "x": "1030", - "y": "1163", - "properties": { - "controlName": "103-managing-servers:live-in-terminal:htop" - }, + "zOrder": "241", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "554", + "y": "837", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "48", - "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": "32", + "measuredW": "24", "measuredH": "24", - "x": "8", - "y": "8", + "x": "0", + "y": "0", "properties": { - "size": "16", - "text": "htop" + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -6822,46 +3500,48 @@ } }, { - "ID": "2852", + "ID": "3106", "typeID": "__group__", - "zOrder": "133", - "measuredW": "48", - "measuredH": "40", - "w": "48", - "h": "40", - "x": "1085", - "y": "1163", - "properties": { - "controlName": "104-managing-servers:live-in-terminal:atop" - }, + "zOrder": "82", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "1229", + "y": "865", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "48", - "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": "33", + "measuredW": "24", "measuredH": "24", - "x": "8", - "y": "8", + "x": "0", + "y": "0", "properties": { - "size": "16", - "text": "atop" + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -6869,17 +3549,17 @@ } }, { - "ID": "2853", + "ID": "3114", "typeID": "__group__", - "zOrder": "134", - "measuredW": "48", - "measuredH": "40", - "w": "48", - "h": "40", - "x": "1142", - "y": "1163", + "zOrder": "243", + "measuredW": "225", + "measuredH": "49", + "w": "225", + "h": "49", + "x": "756", + "y": "1099", "properties": { - "controlName": "105-managing-servers:live-in-terminal:lsof" + "controlName": "103-version-control-systems" }, "children": { "controls": { @@ -6888,27 +3568,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "48", - "h": "40", + "w": "225", + "h": "49", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "26", - "measuredH": "24", - "x": "10", - "y": "8", + "measuredW": "186", + "measuredH": "25", + "x": "20", + "y": "12", "properties": { - "size": "16", - "text": "lsof" + "size": "17", + "text": "Version Control Systems" } } ] @@ -6916,90 +3596,81 @@ } }, { - "ID": "2854", - "typeID": "TextArea", - "zOrder": "135", - "w": "298", - "h": "98", - "measuredW": "200", - "measuredH": "140", - "x": "904", - "y": "1235" - }, - { - "ID": "2855", - "typeID": "Label", - "zOrder": "136", - "measuredW": "160", - "measuredH": "25", - "x": "974", - "y": "1246", + "ID": "3122", + "typeID": "Icon", + "zOrder": "98", + "measuredW": "24", + "measuredH": "24", + "x": "554", + "y": "1023", "properties": { - "text": "System Performance", - "size": "17" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { - "ID": "2856", - "typeID": "__group__", - "zOrder": "137", + "ID": "3123", + "typeID": "Icon", + "zOrder": "99", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "1188", - "y": "1226", - "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": "554", + "y": "1023", + "properties": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "3700253" + } + }, + { + "ID": "3124", + "typeID": "Icon", + "zOrder": "100", + "measuredW": "24", + "measuredH": "24", + "x": "556", + "y": "922", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3125", + "typeID": "Icon", + "zOrder": "101", + "measuredW": "24", + "measuredH": "24", + "x": "556", + "y": "922", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" } } }, { - "ID": "2857", + "ID": "3131", "typeID": "__group__", - "zOrder": "138", - "measuredW": "69", - "measuredH": "40", - "w": "69", - "h": "40", - "x": "917", - "y": "1279", + "zOrder": "102", + "measuredW": "166", + "measuredH": "46", + "w": "166", + "h": "46", + "x": "308", + "y": "798", "properties": { - "controlName": "106-managing-servers:live-in-terminal:nmon" + "controlName": "106-setting-up-x:apache" }, "children": { "controls": { @@ -7008,8 +3679,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "69", - "h": "40", + "w": "166", + "h": "46", "measuredW": "200", "measuredH": "140", "x": "0", @@ -7022,13 +3693,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "41", - "measuredH": "24", - "x": "15", - "y": "9", + "measuredW": "59", + "measuredH": "25", + "x": "53", + "y": "10", "properties": { - "size": "16", - "text": "nmon" + "text": "Apache", + "size": "17" } } ] @@ -7036,17 +3707,17 @@ } }, { - "ID": "2858", + "ID": "3132", "typeID": "__group__", - "zOrder": "139", - "measuredW": "59", - "measuredH": "40", - "w": "59", - "h": "40", - "x": "994", - "y": "1280", + "zOrder": "103", + "measuredW": "166", + "measuredH": "47", + "w": "166", + "h": "47", + "x": "309", + "y": "697", "properties": { - "controlName": "107-managing-servers:live-in-terminal:iostat" + "controlName": "105-setting-up-x:nginx" }, "children": { "controls": { @@ -7055,8 +3726,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "59", - "h": "40", + "w": "166", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", @@ -7069,13 +3740,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "40", - "measuredH": "24", - "x": "9", - "y": "8", + "measuredW": "45", + "measuredH": "25", + "x": "60", + "y": "10", "properties": { - "size": "16", - "text": "iostat" + "text": "Nginx", + "size": "17" } } ] @@ -7083,17 +3754,17 @@ } }, { - "ID": "2859", + "ID": "3133", "typeID": "__group__", - "zOrder": "140", - "measuredW": "48", - "measuredH": "40", - "w": "48", - "h": "40", - "x": "1061", - "y": "1280", + "zOrder": "104", + "measuredW": "166", + "measuredH": "46", + "w": "166", + "h": "46", + "x": "308", + "y": "748", "properties": { - "controlName": "108-managing-servers:live-in-terminal:sar" + "controlName": "107-setting-up-x:tomcat" }, "children": { "controls": { @@ -7102,8 +3773,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "48", - "h": "40", + "w": "166", + "h": "46", "measuredW": "200", "measuredH": "140", "x": "0", @@ -7116,13 +3787,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "23", - "measuredH": "24", - "x": "12", - "y": "8", + "measuredW": "57", + "measuredH": "25", + "x": "54", + "y": "10", "properties": { - "size": "16", - "text": "sar" + "text": "Tomcat", + "size": "17" } } ] @@ -7130,17 +3801,17 @@ } }, { - "ID": "2860", + "ID": "3134", "typeID": "__group__", - "zOrder": "141", - "measuredW": "72", - "measuredH": "40", - "w": "72", - "h": "40", - "x": "1118", - "y": "1280", + "zOrder": "105", + "measuredW": "166", + "measuredH": "46", + "w": "166", + "h": "46", + "x": "308", + "y": "847", "properties": { - "controlName": "109-managing-servers:live-in-terminal:vmstat" + "controlName": "108-setting-up-x:iis" }, "children": { "controls": { @@ -7149,8 +3820,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "72", - "h": "40", + "w": "166", + "h": "46", "measuredW": "200", "measuredH": "140", "x": "0", @@ -7163,13 +3834,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "48", - "measuredH": "24", - "x": "11", - "y": "8", + "measuredW": "21", + "measuredH": "25", + "x": "72", + "y": "10", "properties": { - "size": "16", - "text": "vmstat" + "text": "IIS", + "size": "17" } } ] @@ -7177,41 +3848,17 @@ } }, { - "ID": "2861", - "typeID": "TextArea", - "zOrder": "142", - "w": "333", - "h": "189", - "measuredW": "200", - "measuredH": "140", - "x": "870", - "y": "1350" - }, - { - "ID": "2862", - "typeID": "Label", - "zOrder": "143", - "measuredW": "108", - "measuredH": "25", - "x": "983", - "y": "1502", - "properties": { - "size": "17", - "text": "Network Tools" - } - }, - { - "ID": "2863", + "ID": "3135", "typeID": "__group__", - "zOrder": "144", - "measuredW": "106", - "measuredH": "40", - "w": "106", - "h": "40", - "x": "886", - "y": "1363", + "zOrder": "256", + "measuredW": "309", + "measuredH": "49", + "w": "309", + "h": "49", + "x": "160", + "y": "1097", "properties": { - "controlName": "110-managing-servers:live-in-terminal:traceroute" + "controlName": "105-setting-up-x" }, "children": { "controls": { @@ -7220,27 +3867,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "106", - "h": "40", + "w": "309", + "h": "49", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "76", - "measuredH": "24", - "x": "14", - "y": "8", + "measuredW": "272", + "measuredH": "25", + "x": "17", + "y": "12", "properties": { - "size": "16", - "text": "traceroute" + "size": "17", + "text": "What is and how to setup a _____?" } } ] @@ -7248,17 +3895,17 @@ } }, { - "ID": "2864", + "ID": "3136", "typeID": "__group__", - "zOrder": "145", - "measuredW": "49", - "measuredH": "40", - "w": "49", - "h": "40", - "x": "998", - "y": "1363", + "zOrder": "106", + "measuredW": "144", + "measuredH": "47", + "w": "144", + "h": "47", + "x": "158", + "y": "962", "properties": { - "controlName": "111-managing-servers:live-in-terminal:mtr" + "controlName": "102-setting-up-x:forward-proxy" }, "children": { "controls": { @@ -7267,8 +3914,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "49", - "h": "40", + "w": "144", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", @@ -7281,13 +3928,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "12", - "y": "8", + "measuredW": "108", + "measuredH": "25", + "x": "23", + "y": "11", "properties": { - "size": "16", - "text": "mtr" + "text": "Forward Proxy", + "size": "17" } } ] @@ -7295,17 +3942,17 @@ } }, { - "ID": "2865", + "ID": "3137", "typeID": "__group__", - "zOrder": "146", - "measuredW": "61", - "measuredH": "40", - "w": "61", - "h": "40", - "x": "1052", - "y": "1363", + "zOrder": "107", + "measuredW": "161", + "measuredH": "46", + "w": "161", + "h": "46", + "x": "309", + "y": "964", "properties": { - "controlName": "112-managing-servers:live-in-terminal:ping" + "controlName": "101-setting-up-x:caching-server" }, "children": { "controls": { @@ -7314,8 +3961,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "61", - "h": "40", + "w": "161", + "h": "46", "measuredW": "200", "measuredH": "140", "x": "0", @@ -7328,13 +3975,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "32", - "measuredH": "24", - "x": "15", - "y": "8", + "measuredW": "119", + "measuredH": "25", + "x": "21", + "y": "10", "properties": { - "size": "16", - "text": "ping" + "text": "Caching Server", + "size": "17" } } ] @@ -7342,17 +3989,17 @@ } }, { - "ID": "2866", + "ID": "3138", "typeID": "__group__", - "zOrder": "147", - "measuredW": "92", - "measuredH": "40", - "w": "92", - "h": "40", - "x": "1097", - "y": "1408", + "zOrder": "108", + "measuredW": "143", + "measuredH": "46", + "w": "143", + "h": "46", + "x": "159", + "y": "912", "properties": { - "controlName": "116-managing-servers:live-in-terminal:tcpdump" + "controlName": "100-setting-up-x:reverse-proxy" }, "children": { "controls": { @@ -7361,8 +4008,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "92", - "h": "40", + "w": "143", + "h": "46", "measuredW": "200", "measuredH": "140", "x": "0", @@ -7375,13 +4022,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "64", - "measuredH": "24", - "x": "13", - "y": "8", + "measuredW": "111", + "measuredH": "25", + "x": "21", + "y": "10", "properties": { - "size": "16", - "text": "tcpdump" + "text": "Reverse Proxy", + "size": "17" } } ] @@ -7389,17 +4036,17 @@ } }, { - "ID": "2867", + "ID": "3139", "typeID": "__group__", - "zOrder": "148", - "measuredW": "79", - "measuredH": "40", - "w": "79", - "h": "40", - "x": "886", - "y": "1408", + "zOrder": "109", + "measuredW": "161", + "measuredH": "47", + "w": "161", + "h": "47", + "x": "309", + "y": "1014", "properties": { - "controlName": "114-managing-servers:live-in-terminal:netstat" + "controlName": "103-setting-up-x:load-balancer" }, "children": { "controls": { @@ -7408,8 +4055,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "79", - "h": "40", + "w": "161", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", @@ -7422,13 +4069,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "51", - "measuredH": "24", - "x": "14", - "y": "8", + "measuredW": "113", + "measuredH": "25", + "x": "26", + "y": "11", "properties": { - "size": "16", - "text": "netstat" + "text": "Load Balancer", + "size": "17" } } ] @@ -7436,17 +4083,17 @@ } }, { - "ID": "2868", + "ID": "3140", "typeID": "__group__", - "zOrder": "149", - "measuredW": "53", - "measuredH": "40", - "w": "53", - "h": "40", - "x": "1074", - "y": "1452", + "zOrder": "110", + "measuredW": "144", + "measuredH": "47", + "w": "144", + "h": "47", + "x": "158", + "y": "1013", "properties": { - "controlName": "119-managing-servers:live-in-terminal:dig" + "controlName": "104-setting-up-x:firewall" }, "children": { "controls": { @@ -7455,8 +4102,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "53", - "h": "40", + "w": "144", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", @@ -7469,13 +4116,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "23", - "measuredH": "24", - "x": "15", - "y": "8", + "measuredW": "59", + "measuredH": "25", + "x": "55", + "y": "11", "properties": { - "size": "16", - "text": "dig" + "text": "Firewall", + "size": "17" } } ] @@ -7483,46 +4130,48 @@ } }, { - "ID": "2869", + "ID": "3141", "typeID": "__group__", - "zOrder": "150", - "measuredW": "54", - "measuredH": "40", - "w": "54", - "h": "40", - "x": "1134", - "y": "1452", - "properties": { - "controlName": "141-managing-servers:live-in-terminal:scp" - }, + "zOrder": "111", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "147", + "y": "923", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "54", - "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": "26", + "measuredW": "24", "measuredH": "24", - "x": "14", - "y": "8", + "x": "0", + "y": "0", "properties": { - "size": "16", - "text": "scp" + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -7530,46 +4179,48 @@ } }, { - "ID": "2870", + "ID": "3142", "typeID": "__group__", - "zOrder": "151", - "measuredW": "182", - "measuredH": "40", - "w": "182", - "h": "40", - "x": "886", - "y": "1452", - "properties": { - "controlName": "118-managing-servers:live-in-terminal:iptables" - }, + "zOrder": "112", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "147", + "y": "974", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "182", - "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": "131", + "measuredW": "24", "measuredH": "24", - "x": "25", - "y": "8", + "x": "0", + "y": "0", "properties": { - "size": "16", - "text": "iptables / nftables" + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -7577,46 +4228,48 @@ } }, { - "ID": "2871", + "ID": "3143", "typeID": "__group__", - "zOrder": "152", - "measuredW": "122", - "measuredH": "40", - "w": "122", - "h": "40", - "x": "971", - "y": "1408", - "properties": { - "controlName": "142-managing-servers:live-in-terminal:ufw" - }, + "zOrder": "113", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "147", + "y": "1024", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "122", - "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": "100", + "measuredW": "24", "measuredH": "24", - "x": "11", - "y": "8", + "x": "0", + "y": "0", "properties": { - "size": "16", - "text": "ufw / firewalld" + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -7624,15 +4277,15 @@ } }, { - "ID": "2872", + "ID": "3144", "typeID": "__group__", - "zOrder": "153", + "zOrder": "114", "measuredW": "24", "measuredH": "24", "w": "24", "h": "24", - "x": "1187", - "y": "1522", + "x": "458", + "y": "975", "children": { "controls": { "control": [ @@ -7673,46 +4326,48 @@ } }, { - "ID": "2873", + "ID": "3145", "typeID": "__group__", - "zOrder": "154", - "measuredW": "70", - "measuredH": "40", - "w": "70", - "h": "40", - "x": "1119", - "y": "1363", - "properties": { - "controlName": "113-managing-servers:live-in-terminal:nmap" - }, + "zOrder": "115", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "459", + "y": "1026", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "70", - "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": "41", + "measuredW": "24", "measuredH": "24", - "x": "14", - "y": "8", + "x": "0", + "y": "0", "properties": { - "size": "16", - "text": "nmap" + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -7720,44 +4375,17 @@ } }, { - "ID": "2874", - "typeID": "TextArea", - "zOrder": "155", - "w": "301", - "h": "143", - "measuredW": "200", - "measuredH": "140", - "x": "530", - "y": "1327", - "properties": { - "bold": "true" - } - }, - { - "ID": "2875", - "typeID": "Label", - "zOrder": "156", - "measuredW": "53", - "measuredH": "25", - "x": "660", - "y": "1433", - "properties": { - "size": "17", - "text": "Others" - } - }, - { - "ID": "2876", + "ID": "3146", "typeID": "__group__", - "zOrder": "157", - "measuredW": "77", - "measuredH": "40", - "w": "77", - "h": "40", - "x": "542", - "y": "1339", + "zOrder": "116", + "measuredW": "167", + "measuredH": "47", + "w": "167", + "h": "47", + "x": "244", + "y": "1231", "properties": { - "controlName": "134-managing-servers:live-in-terminal:strace" + "controlName": "106-containers" }, "children": { "controls": { @@ -7766,28 +4394,28 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "77", - "h": "40", + "w": "167", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457", - "bold": "true" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "46", - "measuredH": "24", - "x": "15", - "y": "8", + "w": "85", + "measuredW": "85", + "measuredH": "25", + "x": "41", + "y": "11", "properties": { - "size": "16", - "text": "strace" + "text": "Containers", + "size": "17" } } ] @@ -7795,17 +4423,17 @@ } }, { - "ID": "2877", + "ID": "3148", "typeID": "__group__", - "zOrder": "158", - "measuredW": "77", - "measuredH": "40", - "w": "77", - "h": "40", - "x": "628", - "y": "1339", + "zOrder": "118", + "measuredW": "178", + "measuredH": "47", + "w": "178", + "h": "47", + "x": "465", + "y": "1207", "properties": { - "controlName": "135-managing-servers:live-in-terminal:dtrace" + "controlName": "100-containers:lxc" }, "children": { "controls": { @@ -7814,28 +4442,92 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "77", - "h": "40", + "w": "167", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457", - "bold": "true" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "47", - "measuredH": "24", - "x": "15", - "y": "8", + "measuredW": "32", + "measuredH": "25", + "x": "68", + "y": "11", "properties": { - "size": "16", - "text": "dtrace" + "text": "LXC", + "size": "17" + } + }, + { + "ID": "2", + "typeID": "__group__", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "154", + "y": "11", + "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" + } + } + } + ] + } } } ] @@ -7843,17 +4535,17 @@ } }, { - "ID": "2878", + "ID": "3151", "typeID": "__group__", - "zOrder": "159", - "measuredW": "105", - "measuredH": "40", - "w": "105", - "h": "40", - "x": "713", - "y": "1339", + "zOrder": "119", + "measuredW": "159", + "measuredH": "47", + "w": "159", + "h": "47", + "x": "271", + "y": "1648", "properties": { - "controlName": "136-managing-servers:live-in-terminal:systemtap" + "controlName": "103-infrastructure-provisioning:terraform" }, "children": { "controls": { @@ -7862,28 +4554,28 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "105", - "h": "40", + "w": "159", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457", - "bold": "true" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "74", - "measuredH": "24", - "x": "15", - "y": "8", + "w": "75", + "measuredW": "75", + "measuredH": "25", + "x": "42", + "y": "11", "properties": { - "size": "16", - "text": "systemtap" + "text": "Terraform", + "size": "17" } } ] @@ -7891,17 +4583,17 @@ } }, { - "ID": "2879", + "ID": "3152", "typeID": "__group__", - "zOrder": "160", - "measuredW": "75", - "measuredH": "40", - "w": "75", - "h": "40", - "x": "542", - "y": "1384", + "zOrder": "120", + "measuredW": "158", + "measuredH": "47", + "w": "158", + "h": "47", + "x": "270", + "y": "1495", "properties": { - "controlName": "137-managing-servers:live-in-terminal:uname" + "controlName": "100-infrastructure-provisioning:aws-cdk" }, "children": { "controls": { @@ -7910,28 +4602,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "75", - "h": "40", + "w": "158", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457", - "bold": "true" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "50", - "measuredH": "24", - "x": "13", - "y": "8", + "measuredW": "76", + "measuredH": "25", + "x": "41", + "y": "11", "properties": { - "size": "16", - "text": "uname" + "size": "17", + "text": "AWS CDK" } } ] @@ -7939,17 +4630,17 @@ } }, { - "ID": "2880", + "ID": "3153", "typeID": "__group__", - "zOrder": "161", - "measuredW": "47", - "measuredH": "40", - "w": "47", - "h": "40", - "x": "629", - "y": "1384", + "zOrder": "121", + "measuredW": "158", + "measuredH": "47", + "w": "158", + "h": "47", + "x": "271", + "y": "1597", "properties": { - "controlName": "138-managing-servers:live-in-terminal:df" + "controlName": "103-infrastructure-provisioning:pulumi" }, "children": { "controls": { @@ -7958,28 +4649,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "47", - "h": "40", + "w": "158", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457", - "bold": "true" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "15", - "measuredH": "24", - "x": "16", - "y": "8", + "measuredW": "52", + "measuredH": "25", + "x": "53", + "y": "11", "properties": { - "size": "16", - "text": "df" + "text": "Pulumi", + "size": "17" } } ] @@ -7987,17 +4677,17 @@ } }, { - "ID": "2881", + "ID": "3154", "typeID": "__group__", - "zOrder": "162", - "measuredW": "79", - "measuredH": "40", - "w": "79", - "h": "40", - "x": "682", - "y": "1384", + "zOrder": "122", + "measuredW": "159", + "measuredH": "47", + "w": "159", + "h": "47", + "x": "270", + "y": "1546", "properties": { - "controlName": "139-managing-servers:live-in-terminal:history" + "controlName": "102-infrastructure-provisioning:cloudformation" }, "children": { "controls": { @@ -8006,28 +4696,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "79", - "h": "40", + "w": "159", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457", - "bold": "true" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "48", - "measuredH": "24", - "x": "15", - "y": "8", + "measuredW": "123", + "measuredH": "25", + "x": "20", + "y": "11", "properties": { - "size": "16", - "text": "history" + "size": "17", + "text": "CloudFormation" } } ] @@ -8035,47 +4724,48 @@ } }, { - "ID": "2882", + "ID": "3155", "typeID": "__group__", - "zOrder": "163", - "measuredW": "51", - "measuredH": "40", - "w": "51", - "h": "40", - "x": "767", - "y": "1384", - "properties": { - "controlName": "140-managing-servers:live-in-terminal:du" - }, + "zOrder": "123", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "260", + "y": "1660", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "51", - "h": "40", - "measuredW": "200", - "measuredH": "140", + "measuredW": "24", + "measuredH": "24", "x": "0", "y": "0", "properties": { - "color": "16770457", - "bold": "true" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { "ID": "1", - "typeID": "Label", + "typeID": "Icon", "zOrder": "1", - "measuredW": "19", + "measuredW": "24", "measuredH": "24", - "x": "16", - "y": "8", + "x": "0", + "y": "0", "properties": { - "size": "16", - "text": "du" + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -8083,15 +4773,15 @@ } }, { - "ID": "2883", + "ID": "3156", "typeID": "__group__", - "zOrder": "164", + "zOrder": "124", "measuredW": "24", "measuredH": "24", "w": "24", "h": "24", - "x": "817", - "y": "1432", + "x": "260", + "y": "1506", "children": { "controls": { "control": [ @@ -8120,207 +4810,92 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", + "color": "16777215", "icon": { - "ID": "check-circle", + "ID": "circle", "size": "small" } } - } - ] - } - } - }, - { - "ID": "2884", - "typeID": "Arrow", - "zOrder": "165", - "w": "23", - "h": "130", - "measuredW": "150", - "measuredH": "100", - "x": "115", - "y": "940", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 23, - "y": -0.5 - }, - "p1": { - "x": 0.5076923076923077, - "y": -0.17692307692307693 - }, - "p2": { - "x": 23, - "y": 129.5 - } - } - }, - { - "ID": "2885", - "typeID": "Arrow", - "zOrder": "166", - "w": "1", - "h": "216", - "measuredW": "150", - "measuredH": "100", - "x": "252", - "y": "1087", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.5331695331695332, - "y": 0 - }, - "p2": { - "x": 0, - "y": 215.5 - } - } - }, - { - "ID": "2886", - "typeID": "Arrow", - "zOrder": "167", - "w": "2", - "h": "49", - "measuredW": "150", - "measuredH": "100", - "x": "180", - "y": "1079", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.5409978308026031, - "y": 0.0321041214750543 - }, - "p2": { - "x": 0.5, - "y": 48.5 - } - } - }, - { - "ID": "2887", - "typeID": "Arrow", - "zOrder": "168", - "w": "33", - "h": "51", - "measuredW": "150", - "measuredH": "100", - "x": "205", - "y": "1012", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "p0": { - "x": 33, - "y": -0.5 - }, - "p1": { - "x": 0.5409978308026031, - "y": 0.032104121475054294 - }, - "p2": { - "x": 0, - "y": 50.5 - }, - "rightArrow": "false", - "stroke": "dotted" - } - }, - { - "ID": "2888", - "typeID": "Arrow", - "zOrder": "169", - "w": "1", - "h": "51", - "measuredW": "150", - "measuredH": "100", - "x": "341", - "y": "938", - "properties": { - "color": "2848996", - "leftArrow": "false", - "p0": { - "x": 0, - "y": 50.5 - }, - "p1": { - "x": 0.4034892942109438, - "y": -0.01554321966693101 - }, - "p2": { - "x": 0, - "y": -0.5 - }, - "rightArrow": "false", - "stroke": "dotted" + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } } }, { - "ID": "2889", + "ID": "3157", "typeID": "__group__", - "zOrder": "170", - "measuredW": "125", - "measuredH": "47", - "w": "125", - "h": "47", - "x": "286", - "y": "863", - "properties": { - "controlName": "101-networking-protocols:dns" - }, + "zOrder": "125", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "260", + "y": "1558", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "125", - "h": "47", - "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": "36", - "measuredH": "25", - "x": "45", - "y": "11", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", "properties": { - "text": "DNS", - "size": "17" + "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" + } } } ] @@ -8328,46 +4903,64 @@ } }, { - "ID": "2890", + "ID": "3158", "typeID": "__group__", - "zOrder": "171", - "measuredW": "125", - "measuredH": "47", - "w": "125", - "h": "47", - "x": "286", - "y": "914", - "properties": { - "controlName": "100-networking-protocols:osi-model" - }, + "zOrder": "126", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "260", + "y": "1610", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "125", - "h": "47", - "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": "81", - "measuredH": "25", - "x": "22", - "y": "11", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", "properties": { - "text": "OSI Model", - "size": "17" + "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" + } } } ] @@ -8375,48 +4968,45 @@ } }, { - "ID": "2891", + "ID": "3159", "typeID": "Arrow", - "zOrder": "172", - "w": "1", - "h": "63", + "zOrder": "127", + "w": "947", + "h": "1", "measuredW": "150", "measuredH": "100", - "x": "340", - "y": "1017", + "x": "346", + "y": "2370", "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", "p0": { - "x": 1, - "y": 63 + "x": 0.35062613569874657, + "y": 0 }, "p1": { - "x": 0.521922991319831, - "y": 0.015579790785666594 + "x": 0.49999999999999983, + "y": 0 }, "p2": { - "x": 1, + "x": 947.3333333333333, "y": 0 - }, - "rightArrow": "false", - "stroke": "dotted" + } } }, { - "ID": "2892", + "ID": "3160", "typeID": "__group__", - "zOrder": "173", - "measuredW": "156", - "measuredH": "48", - "w": "156", - "h": "48", - "x": "273", - "y": "1047", + "zOrder": "128", + "measuredW": "238", + "measuredH": "47", + "w": "238", + "h": "47", + "x": "1135", + "y": "2231", "properties": { - "controlName": "102-networking-protocols:http" + "controlName": "114-infrastructure-monitoring" }, "children": { "controls": { @@ -8425,94 +5015,45 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "150", - "h": "40", + "w": "238", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", - "y": "8", + "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "44", + "measuredW": "191", "measuredH": "25", - "x": "52", - "y": "17", + "x": "23", + "y": "11", "properties": { - "text": "HTTP", + "text": "Infrastructure Monitoring", "size": "17" } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "132", - "y": "0", - "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": "2893", + "ID": "3161", "typeID": "__group__", - "zOrder": "174", - "measuredW": "156", - "measuredH": "44", - "w": "156", - "h": "44", - "x": "273", - "y": "1095", + "zOrder": "129", + "measuredW": "140", + "measuredH": "47", + "w": "140", + "h": "47", + "x": "928", + "y": "2260", "properties": { - "controlName": "103-networking-protocols:https" + "controlName": "102-infrastructure-monitoring:grafana" }, "children": { "controls": { @@ -8521,12 +5062,12 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "150", - "h": "40", + "w": "130", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", - "y": "4", + "y": "0", "properties": { "color": "16770457" } @@ -8535,12 +5076,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "54", + "measuredW": "62", "measuredH": "25", - "x": "49", - "y": "13", + "x": "33", + "y": "11", "properties": { - "text": "HTTPS", + "text": "Grafana", "size": "17" } }, @@ -8552,8 +5093,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "132", - "y": "0", + "x": "116", + "y": "12", "children": { "controls": { "control": [ @@ -8598,17 +5139,17 @@ } }, { - "ID": "2894", + "ID": "3162", "typeID": "__group__", - "zOrder": "175", - "measuredW": "157", - "measuredH": "45", - "w": "157", - "h": "45", - "x": "272", - "y": "1138", + "zOrder": "130", + "measuredW": "140", + "measuredH": "47", + "w": "140", + "h": "47", + "x": "783", + "y": "2259", "properties": { - "controlName": "104-networking-protocols:ftp" + "controlName": "102-infrastructure-monitoring:datadog" }, "children": { "controls": { @@ -8617,12 +5158,12 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "151", - "h": "40", + "w": "130", + "h": "47", "measuredW": "200", "measuredH": "140", - "x": "0", - "y": "5", + "x": "10", + "y": "0", "properties": { "color": "16770457" } @@ -8631,13 +5172,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "89", + "measuredW": "66", "measuredH": "25", - "x": "31", - "y": "13", + "x": "42", + "y": "11", "properties": { - "size": "17", - "text": "FTP / SFTP" + "text": "Datadog", + "size": "17" } }, { @@ -8648,8 +5189,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "133", - "y": "0", + "x": "0", + "y": "12", "children": { "controls": { "control": [ @@ -8678,12 +5219,28 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", + "color": "16777215", "icon": { - "ID": "check-circle", + "ID": "circle", "size": "small" } } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", + "properties": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "10027263" + } } ] } @@ -8694,17 +5251,17 @@ } }, { - "ID": "2895", + "ID": "3163", "typeID": "__group__", - "zOrder": "176", - "measuredW": "157", - "measuredH": "41", - "w": "157", - "h": "41", - "x": "272", - "y": "1186", + "zOrder": "131", + "measuredW": "139", + "measuredH": "47", + "w": "139", + "h": "47", + "x": "783", + "y": "2208", "properties": { - "controlName": "105-networking-protocols:ssl-tls" + "controlName": "102-infrastructure-monitoring:zabbix" }, "children": { "controls": { @@ -8713,12 +5270,12 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "151", - "h": "40", + "w": "129", + "h": "47", "measuredW": "200", "measuredH": "140", - "x": "0", - "y": "1", + "x": "10", + "y": "0", "properties": { "color": "16770457" } @@ -8727,12 +5284,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "77", + "measuredW": "52", "measuredH": "25", - "x": "39", - "y": "10", + "x": "49", + "y": "11", "properties": { - "text": "SSL / TLS", + "text": "Zabbix", "size": "17" } }, @@ -8744,8 +5301,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "133", - "y": "0", + "x": "0", + "y": "12", "children": { "controls": { "control": [ @@ -8774,7 +5331,23 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", + "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" @@ -8790,17 +5363,17 @@ } }, { - "ID": "2896", + "ID": "3164", "typeID": "__group__", - "zOrder": "177", - "measuredW": "157", - "measuredH": "44", - "w": "157", - "h": "44", - "x": "272", - "y": "1227", + "zOrder": "132", + "measuredW": "140", + "measuredH": "47", + "w": "140", + "h": "47", + "x": "928", + "y": "2208", "properties": { - "controlName": "106-networking-protocols:ssh" + "controlName": "100-infrastructure-monitoring:prometheus" }, "children": { "controls": { @@ -8809,12 +5382,12 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "151", - "h": "40", + "w": "130", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", - "y": "4", + "y": "0", "properties": { "color": "16770457" } @@ -8823,12 +5396,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "33", + "measuredW": "93", "measuredH": "25", - "x": "59", - "y": "13", + "x": "16", + "y": "11", "properties": { - "text": "SSH", + "text": "Prometheus", "size": "17" } }, @@ -8840,8 +5413,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "133", - "y": "0", + "x": "116", + "y": "12", "children": { "controls": { "control": [ @@ -8886,17 +5459,17 @@ } }, { - "ID": "2897", + "ID": "3165", "typeID": "__group__", - "zOrder": "178", - "measuredW": "158", - "measuredH": "43", - "w": "158", - "h": "43", - "x": "272", - "y": "1272", + "zOrder": "133", + "measuredW": "235", + "measuredH": "49", + "w": "235", + "h": "49", + "x": "443", + "y": "2344", "properties": { - "controlName": "107-networking-protocols:port-forwarding" + "controlName": "115-application-monitoring" }, "children": { "controls": { @@ -8905,75 +5478,105 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "152", - "h": "40", + "w": "235", + "h": "49", "measuredW": "200", "measuredH": "140", "x": "0", - "y": "3", + "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "122", + "measuredW": "172", "measuredH": "25", - "x": "19", + "x": "32", "y": "12", "properties": { - "text": "Port Forwarding", + "text": "Application Monitoring", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "3166", + "typeID": "__group__", + "zOrder": "134", + "measuredW": "153", + "measuredH": "47", + "w": "153", + "h": "47", + "x": "405", + "y": "2155", + "properties": { + "controlName": "100-application-monitoring:jaeger" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "143", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "10", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "55", + "measuredH": "25", + "x": "58", + "y": "11", + "properties": { + "text": "Jaeger", "size": "17" } }, { "ID": "2", - "typeID": "__group__", + "typeID": "Icon", "zOrder": "2", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "134", - "y": "0", - "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": "0", + "y": "12", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "12", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" } } } @@ -8982,66 +5585,46 @@ } }, { - "ID": "2898", + "ID": "3167", "typeID": "__group__", - "zOrder": "179", - "measuredW": "368", - "measuredH": "56", - "w": "368", - "h": "56", - "x": "128", - "y": "971", + "zOrder": "135", + "measuredW": "149", + "measuredH": "47", + "w": "149", + "h": "47", + "x": "565", + "y": "2155", "properties": { - "controlName": "103-networking-protocols" + "controlName": "101-application-monitoring:new-relic" }, "children": { "controls": { "control": [ { "ID": "0", - "typeID": "__group__", + "typeID": "TextArea", "zOrder": "0", - "measuredW": "364", - "measuredH": "49", - "w": "364", - "h": "49", - "x": "4", - "y": "7", - "properties": { - "controlName": "103-networking-protocols" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "364", - "h": "49", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - } - ] - } + "w": "139", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "265", + "measuredW": "78", "measuredH": "25", - "x": "53", - "y": "19", + "x": "23", + "y": "11", "properties": { "size": "17", - "text": "Networking, Security and Protocols" + "text": "New Relic" } }, { @@ -9052,8 +5635,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "0", - "y": "0", + "x": "125", + "y": "12", "children": { "controls": { "control": [ @@ -9098,17 +5681,17 @@ } }, { - "ID": "2899", + "ID": "3168", "typeID": "__group__", - "zOrder": "180", - "measuredW": "166", + "zOrder": "136", + "measuredW": "154", "measuredH": "47", - "w": "166", + "w": "154", "h": "47", - "x": "99", - "y": "1055", + "x": "404", + "y": "2207", "properties": { - "controlName": "103-networking-protocols:emails" + "controlName": "102-monitoring:application-monitoring:app-dynamics" }, "children": { "controls": { @@ -9117,7 +5700,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "155", + "w": "143", "h": "47", "measuredW": "200", "measuredH": "140", @@ -9131,12 +5714,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "52", + "measuredW": "105", "measuredH": "25", - "x": "65", + "x": "30", "y": "11", "properties": { - "text": "Emails", + "text": "AppDynamics", "size": "17" } }, @@ -9149,7 +5732,7 @@ "w": "24", "h": "24", "x": "0", - "y": "10", + "y": "12", "children": { "controls": { "control": [ @@ -9178,7 +5761,23 @@ "x": "0", "y": "0", "properties": { - "color": "10066329", + "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" @@ -9194,17 +5793,17 @@ } }, { - "ID": "2900", + "ID": "3169", "typeID": "__group__", - "zOrder": "181", - "measuredW": "129", + "zOrder": "137", + "measuredW": "298", "measuredH": "47", - "w": "129", + "w": "298", "h": "47", - "x": "111", - "y": "1121", + "x": "406", + "y": "2259", "properties": { - "controlName": "101-networking-protocols:emails:smtp" + "controlName": "104-application-monitoring:open-telemetry" }, "children": { "controls": { @@ -9213,11 +5812,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "129", + "w": "289", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "9", "y": "0", "properties": { "color": "16770457" @@ -9227,60 +5826,78 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "46", + "measuredW": "119", "measuredH": "25", - "x": "43", + "x": "94", "y": "11", "properties": { - "text": "SMTP", - "size": "17" - } - } - ] - } - } - }, - { - "ID": "2901", - "typeID": "__group__", - "zOrder": "182", - "measuredW": "129", - "measuredH": "47", - "w": "129", - "h": "47", - "x": "111", - "y": "1171", - "properties": { - "controlName": "102-networking-protocols:emails:imaps" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "129", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" + "size": "17", + "text": "OpenTelemetry" } }, { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "52", - "measuredH": "25", - "x": "40", - "y": "11", - "properties": { - "text": "IMAPS", - "size": "17" + "ID": "2", + "typeID": "__group__", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "0", + "y": "8", + "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" + } + } + } + ] + } } } ] @@ -9288,17 +5905,17 @@ } }, { - "ID": "2902", + "ID": "3170", "typeID": "__group__", - "zOrder": "183", - "measuredW": "129", + "zOrder": "138", + "measuredW": "149", "measuredH": "47", - "w": "129", + "w": "149", "h": "47", - "x": "111", - "y": "1222", + "x": "565", + "y": "2207", "properties": { - "controlName": "103-networking-protocols:emails:pop3s" + "controlName": "102-application-monitoring:datadog" }, "children": { "controls": { @@ -9307,7 +5924,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "129", + "w": "139", "h": "47", "measuredW": "200", "measuredH": "140", @@ -9321,13 +5938,62 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "56", + "measuredW": "66", "measuredH": "25", - "x": "39", + "x": "37", "y": "11", "properties": { - "text": "POP3S", - "size": "17" + "size": "17", + "text": "Datadog" + } + }, + { + "ID": "2", + "typeID": "__group__", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "125", + "y": "12", + "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" + } + } + } + ] + } } } ] @@ -9335,17 +6001,17 @@ } }, { - "ID": "2903", + "ID": "3183", "typeID": "__group__", - "zOrder": "184", - "measuredW": "129", - "measuredH": "47", - "w": "129", - "h": "47", - "x": "136", - "y": "1289", + "zOrder": "142", + "measuredW": "304", + "measuredH": "49", + "w": "304", + "h": "49", + "x": "696", + "y": "1337", "properties": { - "controlName": "104-networking-protocols:emails:dmarc" + "controlName": "107-cloud-providers" }, "children": { "controls": { @@ -9354,27 +6020,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "129", - "h": "47", + "w": "304", + "h": "49", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "62", + "measuredW": "122", "measuredH": "25", - "x": "37", - "y": "11", + "x": "91", + "y": "12", "properties": { - "text": "DMARC", - "size": "17" + "size": "17", + "text": "Cloud Providers" } } ] @@ -9382,17 +6048,17 @@ } }, { - "ID": "2904", + "ID": "3184", "typeID": "__group__", - "zOrder": "185", - "measuredW": "129", - "measuredH": "47", - "w": "129", - "h": "47", - "x": "136", - "y": "1339", + "zOrder": "143", + "measuredW": "152", + "measuredH": "46", + "w": "152", + "h": "46", + "x": "690", + "y": "1208", "properties": { - "controlName": "105-networking-protocols:emails:spf" + "controlName": "100-cloud-providers:aws" }, "children": { "controls": { @@ -9401,11 +6067,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "129", - "h": "47", + "w": "141", + "h": "46", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "11", "y": "0", "properties": { "color": "16770457" @@ -9415,31 +6081,80 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "32", + "measuredW": "36", "measuredH": "25", - "x": "50", - "y": "11", + "x": "64", + "y": "10", "properties": { - "text": "SPF", + "text": "AWS", "size": "17" } + }, + { + "ID": "2", + "typeID": "__group__", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "0", + "y": "11", + "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": "2905", + "ID": "3185", "typeID": "__group__", - "zOrder": "186", - "measuredW": "129", + "zOrder": "144", + "measuredW": "161", "measuredH": "47", - "w": "129", + "w": "161", "h": "47", - "x": "136", - "y": "1390", + "x": "849", + "y": "1207", "properties": { - "controlName": "106-networking-protocols:emails:domain-keys" + "controlName": "101-cloud-providers:google-cloud" }, "children": { "controls": { @@ -9448,7 +6163,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "129", + "w": "149", "h": "47", "measuredW": "200", "measuredH": "140", @@ -9462,31 +6177,96 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "101", + "measuredW": "105", "measuredH": "25", - "x": "19", + "x": "16", "y": "11", "properties": { - "text": "Domain Keys", + "text": "Google Cloud", "size": "17" } + }, + { + "ID": "2", + "typeID": "__group__", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "137", + "y": "12", + "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": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "10027263" + } + } + ] + } + } } ] } } }, { - "ID": "2906", + "ID": "3186", "typeID": "__group__", - "zOrder": "187", - "measuredW": "164", + "zOrder": "145", + "measuredW": "155", "measuredH": "47", - "w": "164", + "w": "155", "h": "47", - "x": "105", - "y": "915", + "x": "689", + "y": "1258", "properties": { - "controlName": "100-networking-protocols:emails:white-grey-listing" + "controlName": "102-cloud-providers:azure" }, "children": { "controls": { @@ -9495,11 +6275,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "164", + "w": "144", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "11", "y": "0", "properties": { "color": "16770457" @@ -9509,89 +6289,96 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "142", + "measuredW": "44", "measuredH": "25", - "x": "11", + "x": "64", "y": "11", "properties": { - "text": "White/Grey Listing", + "text": "Azure", "size": "17" } - } - ] - } - } - }, - { - "ID": "2907", - "typeID": "Arrow", - "zOrder": "188", - "w": "30", - "h": "54", - "measuredW": "150", - "measuredH": "100", - "x": "305", - "y": "1497", - "properties": { - "color": "2848996", - "leftArrow": "false", - "p0": { - "x": 30, - "y": 54 - }, - "p1": { - "x": 0.31900452488687786, - "y": -0.0067873303167421736 - }, - "p2": { - "x": 0, - "y": 0 - }, - "rightArrow": "false", - "stroke": "dotted" - } - }, - { - "ID": "2908", - "typeID": "Arrow", - "zOrder": "189", - "w": "45", - "h": "66", - "measuredW": "150", - "measuredH": "100", - "x": "199", - "y": "1486", - "properties": { - "color": "2848996", - "leftArrow": "false", - "p0": { - "x": 0, - "y": 66 - }, - "p1": { - "x": 0.31900452488687786, - "y": -0.006787330316742089 - }, - "p2": { - "x": 45, - "y": 0 - }, - "rightArrow": "false", - "stroke": "dotted" + }, + { + "ID": "2", + "typeID": "__group__", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "0", + "y": "12", + "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": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "10027263" + } + } + ] + } + } + } + ] + } } }, { - "ID": "2909", + "ID": "3187", "typeID": "__group__", - "zOrder": "190", - "measuredW": "313", - "measuredH": "49", - "w": "313", - "h": "49", - "x": "105", - "y": "1459", + "zOrder": "146", + "measuredW": "160", + "measuredH": "47", + "w": "160", + "h": "47", + "x": "850", + "y": "1258", "properties": { - "controlName": "104-setting-up-x" + "controlName": "104-cloud-providers:digital-ocean" }, "children": { "controls": { @@ -9600,27 +6387,76 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "313", - "h": "49", + "w": "149", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16776960" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "272", + "measuredW": "105", "measuredH": "25", - "x": "21", - "y": "12", + "x": "22", + "y": "11", "properties": { - "size": "17", - "text": "What is and how to setup a _____?" + "text": "Digital Ocean", + "size": "17" + } + }, + { + "ID": "2", + "typeID": "__group__", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "136", + "y": "12", + "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": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "3700253" + } + } + ] + } } } ] @@ -9628,17 +6464,17 @@ } }, { - "ID": "2910", + "ID": "3188", "typeID": "__group__", - "zOrder": "191", - "measuredW": "153", + "zOrder": "147", + "measuredW": "160", "measuredH": "47", - "w": "153", + "w": "160", "h": "47", - "x": "98", - "y": "1590", + "x": "685", + "y": "1465", "properties": { - "controlName": "102-setting-up-x:forward-proxy" + "controlName": "103-cloud-providers:heroku" }, "children": { "controls": { @@ -9647,26 +6483,26 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "144", + "w": "149", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "9", + "x": "11", "y": "0", "properties": { - "color": "16776960" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "108", + "measuredW": "56", "measuredH": "25", - "x": "30", + "x": "58", "y": "11", "properties": { - "text": "Forward Proxy", + "text": "Heroku", "size": "17" } }, @@ -9708,7 +6544,23 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", + "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" @@ -9724,17 +6576,17 @@ } }, { - "ID": "2911", + "ID": "3189", "typeID": "__group__", - "zOrder": "192", - "measuredW": "170", - "measuredH": "46", - "w": "170", - "h": "46", - "x": "257", - "y": "1540", + "zOrder": "148", + "measuredW": "160", + "measuredH": "47", + "w": "160", + "h": "47", + "x": "851", + "y": "1413", "properties": { - "controlName": "101-setting-up-x:caching-server" + "controlName": "105-cloud-providers:linode" }, "children": { "controls": { @@ -9743,26 +6595,26 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "161", - "h": "46", + "w": "149", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16776960" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "119", + "measuredW": "53", "measuredH": "25", - "x": "21", - "y": "10", + "x": "48", + "y": "11", "properties": { - "text": "Caching Server", + "text": "Linode", "size": "17" } }, @@ -9774,8 +6626,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "146", - "y": "11", + "x": "136", + "y": "12", "children": { "controls": { "control": [ @@ -9804,7 +6656,23 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", + "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" @@ -9820,17 +6688,17 @@ } }, { - "ID": "2912", + "ID": "3190", "typeID": "__group__", - "zOrder": "193", - "measuredW": "153", - "measuredH": "46", - "w": "153", - "h": "46", - "x": "98", - "y": "1540", + "zOrder": "149", + "measuredW": "160", + "measuredH": "47", + "w": "160", + "h": "47", + "x": "851", + "y": "1465", "properties": { - "controlName": "100-setting-up-x:reverse-proxy" + "controlName": "106-cloud-providers:vultr" }, "children": { "controls": { @@ -9839,26 +6707,26 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "143", - "h": "46", + "w": "149", + "h": "47", "measuredW": "200", "measuredH": "140", - "x": "10", + "x": "0", "y": "0", "properties": { - "color": "16776960" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "111", + "measuredW": "35", "measuredH": "25", - "x": "28", - "y": "10", + "x": "57", + "y": "11", "properties": { - "text": "Reverse Proxy", + "text": "Vultr", "size": "17" } }, @@ -9870,8 +6738,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "0", - "y": "11", + "x": "136", + "y": "12", "children": { "controls": { "control": [ @@ -9900,7 +6768,23 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", + "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" @@ -9916,17 +6800,17 @@ } }, { - "ID": "2913", + "ID": "3191", "typeID": "__group__", - "zOrder": "194", - "measuredW": "174", - "measuredH": "47", - "w": "174", - "h": "47", - "x": "256", - "y": "1590", + "zOrder": "150", + "measuredW": "160", + "measuredH": "46", + "w": "160", + "h": "46", + "x": "685", + "y": "1413", "properties": { - "controlName": "103-setting-up-x:load-balancer" + "controlName": "104-cloud-providers:albaba-cloud" }, "children": { "controls": { @@ -9935,26 +6819,26 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "161", - "h": "47", + "w": "149", + "h": "46", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "11", "y": "0", "properties": { - "color": "16776960" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "113", + "measuredW": "106", "measuredH": "25", - "x": "26", - "y": "11", + "x": "35", + "y": "10", "properties": { - "text": "Load Balancer", + "text": "Alibaba Cloud", "size": "17" } }, @@ -9966,8 +6850,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "150", - "y": "12", + "x": "0", + "y": "11", "children": { "controls": { "control": [ @@ -9996,7 +6880,23 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", + "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" @@ -10012,17 +6912,179 @@ } }, { - "ID": "2914", + "ID": "3192", + "typeID": "Arrow", + "zOrder": "151", + "w": "1", + "h": "411", + "measuredW": "150", + "measuredH": "100", + "x": "1297", + "y": "1356", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "p0": { + "x": 0, + "y": 0.060606060606005485 + }, + "p1": { + "x": 0.5, + "y": 0 + }, + "p2": { + "x": 0, + "y": 411.42424242424227 + } + } + }, + { + "ID": "3193", + "typeID": "Arrow", + "zOrder": "152", + "w": "102", + "h": "45", + "measuredW": "150", + "measuredH": "100", + "x": "472", + "y": "1908", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", + "p0": { + "x": 101.78787878787875, + "y": 45.24242424242402 + }, + "p1": { + "x": 0.5588677785233922, + "y": -0.08999009399049802 + }, + "p2": { + "x": 0.27272727272725206, + "y": -0.21212121212124657 + } + } + }, + { + "ID": "3194", + "typeID": "Arrow", + "zOrder": "153", + "w": "103", + "h": "44", + "measuredW": "150", + "measuredH": "100", + "x": "471", + "y": "1841", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", + "p0": { + "x": 102.78787878787875, + "y": 0.12121212121201097 + }, + "p1": { + "x": 0.46166514181152746, + "y": 0.08252516010978925 + }, + "p2": { + "x": -0.24242424242424931, + "y": 44.060606060606005 + } + } + }, + { + "ID": "3195", + "typeID": "Arrow", + "zOrder": "154", + "w": "109", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "467", + "y": "1896", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", + "p0": { + "x": 108.34848484848499, + "y": 0.3030303030302548 + }, + "p1": { + "x": 0.49956677529873256, + "y": 0 + }, + "p2": { + "x": -0.30303030303031164, + "y": 0.3030303030302548 + } + } + }, + { + "ID": "3196", "typeID": "__group__", - "zOrder": "195", - "measuredW": "153", + "zOrder": "155", + "measuredW": "251", + "measuredH": "49", + "w": "251", + "h": "49", + "x": "236", + "y": "1872", + "properties": { + "controlName": "111-configuration-management" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "251", + "h": "49", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "210", + "measuredH": "25", + "x": "21", + "y": "12", + "properties": { + "size": "17", + "text": "Configuration Management" + } + } + ] + } + } + }, + { + "ID": "3197", + "typeID": "__group__", + "zOrder": "156", + "measuredW": "154", "measuredH": "47", - "w": "153", + "w": "154", "h": "47", - "x": "98", - "y": "1641", + "x": "562", + "y": "1823", "properties": { - "controlName": "104-setting-up-x:firewall" + "controlName": "100-configuration-management:ansible" }, "children": { "controls": { @@ -10031,76 +7093,74 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "144", + "w": "154", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "9", + "x": "0", "y": "0", "properties": { - "color": "16776960" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "59", + "measuredW": "56", "measuredH": "25", - "x": "54", + "x": "46", "y": "11", "properties": { - "text": "Firewall", + "text": "Ansible", "size": "17" } - }, + } + ] + } + } + }, + { + "ID": "3198", + "typeID": "__group__", + "zOrder": "157", + "measuredW": "154", + "measuredH": "47", + "w": "154", + "h": "47", + "x": "562", + "y": "1873", + "properties": { + "controlName": "101-configuration-management:chef" + }, + "children": { + "controls": { + "control": [ { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "154", + "h": "47", + "measuredW": "200", + "measuredH": "140", "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "37", + "measuredH": "25", + "x": "56", "y": "11", - "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" - } - } - } - ] - } + "properties": { + "text": "Chef", + "size": "17" } } ] @@ -10108,17 +7168,17 @@ } }, { - "ID": "2915", + "ID": "3199", "typeID": "__group__", - "zOrder": "196", - "measuredW": "233", - "measuredH": "49", - "w": "233", - "h": "49", - "x": "505", - "y": "1679", + "zOrder": "158", + "measuredW": "154", + "measuredH": "47", + "w": "154", + "h": "47", + "x": "562", + "y": "1923", "properties": { - "controlName": "105-infrastructure-as-code" + "controlName": "102-configuration-management:puppet" }, "children": { "controls": { @@ -10127,27 +7187,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "233", - "h": "49", + "w": "154", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16776960" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "174", + "measuredW": "56", "measuredH": "25", - "x": "30", - "y": "12", + "x": "47", + "y": "11", "properties": { - "size": "17", - "text": "Infrastructure as Code" + "text": "Puppet", + "size": "17" } } ] @@ -10155,46 +7215,48 @@ } }, { - "ID": "2916", + "ID": "3200", "typeID": "__group__", - "zOrder": "197", - "measuredW": "117", - "measuredH": "47", - "w": "117", - "h": "47", - "x": "575", - "y": "1579", - "properties": { - "controlName": "101-infrastructure-as-code:containers" - }, + "zOrder": "159", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "703", + "y": "1835", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "117", - "h": "47", - "measuredW": "200", - "measuredH": "140", + "measuredW": "24", + "measuredH": "24", "x": "0", "y": "0", "properties": { - "color": "16776960" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { "ID": "1", - "typeID": "Label", + "typeID": "Icon", "zOrder": "1", - "measuredW": "85", - "measuredH": "25", - "x": "16", - "y": "11", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", "properties": { - "size": "17", - "text": "Containers" + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -10202,94 +7264,63 @@ } }, { - "ID": "2917", + "ID": "3201", "typeID": "__group__", - "zOrder": "198", - "measuredW": "104", - "measuredH": "47", - "w": "104", - "h": "47", - "x": "727", - "y": "1550", - "properties": { - "controlName": "100-infrastructure-as-code:docker" - }, + "zOrder": "160", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "703", + "y": "1885", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "94", - "h": "47", - "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": "56", - "measuredH": "25", - "x": "19", - "y": "11", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", "properties": { - "text": "Docker", - "size": "17" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { "ID": "2", - "typeID": "__group__", + "typeID": "Icon", "zOrder": "2", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "80", - "y": "10", - "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": "0", + "y": "0", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" } } } @@ -10298,110 +7329,63 @@ } }, { - "ID": "2918", + "ID": "3202", "typeID": "__group__", - "zOrder": "199", - "measuredW": "103", - "measuredH": "47", - "w": "103", - "h": "47", - "x": "728", - "y": "1605", - "properties": { - "controlName": "101-infrastructure-as-code:lxc" - }, + "zOrder": "161", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "703", + "y": "1934", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "93", - "h": "47", - "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": "32", - "measuredH": "25", - "x": "31", - "y": "11", - "properties": { - "text": "LXC", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "79", - "y": "10", - "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": "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" } } } @@ -10410,41 +7394,92 @@ } }, { - "ID": "2919", - "typeID": "TextArea", - "zOrder": "200", - "w": "240", - "h": "205", - "measuredW": "200", - "measuredH": "140", - "x": "963", - "y": "1961" + "ID": "3203", + "typeID": "Arrow", + "zOrder": "162", + "w": "1008", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "343", + "y": "2546", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0.43913392152268216, + "y": 0 + }, + "p1": { + "x": 0.49999999999999983, + "y": 0 + }, + "p2": { + "x": 1008.339748009606, + "y": 0 + } + } }, { - "ID": "2920", - "typeID": "Label", - "zOrder": "201", - "measuredW": "186", - "measuredH": "25", - "x": "981", - "y": "1974", + "ID": "3204", + "typeID": "__group__", + "zOrder": "163", + "measuredW": "210", + "measuredH": "49", + "w": "210", + "h": "49", + "x": "442", + "y": "2522", "properties": { - "size": "17", - "text": "Container Orchestration" + "controlName": "116-logs-management" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "210", + "h": "49", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "145", + "measuredH": "25", + "x": "32", + "y": "12", + "properties": { + "text": "Logs Management", + "size": "17" + } + } + ] + } } }, { - "ID": "2921", + "ID": "3205", "typeID": "__group__", - "zOrder": "202", - "measuredW": "203", - "measuredH": "46", - "w": "203", - "h": "46", - "x": "981", - "y": "2007", + "zOrder": "164", + "measuredW": "160", + "measuredH": "47", + "w": "160", + "h": "47", + "x": "410", + "y": "2445", "properties": { - "controlName": "104-infrastructure-as-code:kubernetes" + "controlName": "100-logs-management:elastic-stack" }, "children": { "controls": { @@ -10453,11 +7488,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "193", - "h": "46", + "w": "149", + "h": "47", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "11", "y": "0", "properties": { "color": "16770457" @@ -10467,12 +7502,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "90", + "measuredW": "98", "measuredH": "25", - "x": "56", - "y": "10", + "x": "39", + "y": "11", "properties": { - "text": "Kubernetes", + "text": "Elastic Stack", "size": "17" } }, @@ -10484,8 +7519,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "179", - "y": "11", + "x": "0", + "y": "12", "children": { "controls": { "control": [ @@ -10530,17 +7565,17 @@ } }, { - "ID": "2922", + "ID": "3206", "typeID": "__group__", - "zOrder": "203", - "measuredW": "202", - "measuredH": "46", - "w": "202", - "h": "46", - "x": "981", - "y": "2056", + "zOrder": "165", + "measuredW": "161", + "measuredH": "47", + "w": "161", + "h": "47", + "x": "410", + "y": "2612", "properties": { - "controlName": "104-infrastructure-as-code:docker-swarm" + "controlName": "101-logs-management:graylog" }, "children": { "controls": { @@ -10549,11 +7584,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "193", - "h": "46", + "w": "149", + "h": "47", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "12", "y": "0", "properties": { "color": "16770457" @@ -10563,12 +7598,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "111", + "w": "59", + "measuredW": "59", "measuredH": "25", - "x": "45", - "y": "10", + "x": "53", + "y": "11", "properties": { - "text": "Docker Swarm", + "text": "Graylog", "size": "17" } }, @@ -10580,8 +7616,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "178", - "y": "11", + "x": "0", + "y": "12", "children": { "controls": { "control": [ @@ -10642,17 +7678,17 @@ } }, { - "ID": "2923", + "ID": "3207", "typeID": "__group__", - "zOrder": "204", - "measuredW": "200", - "measuredH": "46", - "w": "200", - "h": "46", - "x": "981", - "y": "2106", + "zOrder": "166", + "measuredW": "98", + "measuredH": "47", + "w": "98", + "h": "47", + "x": "575", + "y": "2612", "properties": { - "controlName": "104-infrastructure-as-code:nomad" + "controlName": "102-logs-management:splunk" }, "children": { "controls": { @@ -10661,8 +7697,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "194", - "h": "46", + "w": "86", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", @@ -10675,12 +7711,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "56", + "w": "53", + "measuredW": "52", "measuredH": "25", - "x": "74", - "y": "10", + "x": "14", + "y": "11", "properties": { - "text": "Nomad", + "text": "Splunk", "size": "17" } }, @@ -10692,8 +7729,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "176", - "y": "10", + "x": "74", + "y": "12", "children": { "controls": { "control": [ @@ -10754,94 +7791,17 @@ } }, { - "ID": "2924", - "typeID": "Arrow", - "zOrder": "205", - "w": "2", - "h": "66", - "measuredW": "150", - "measuredH": "100", - "x": "606", - "y": "1929", - "properties": { - "color": "2848996", - "curvature": "-1", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 2, - "y": 0 - }, - "p1": { - "x": 0.5684273538382603, - "y": -0.0168752316068527 - }, - "p2": { - "x": 1.264771935838894, - "y": 66.13386083375576 - } - } - }, - { - "ID": "2925", - "typeID": "__group__", - "zOrder": "206", - "measuredW": "253", - "measuredH": "49", - "w": "253", - "h": "49", - "x": "470", - "y": "1912", - "properties": { - "controlName": "103-infrastructure-as-code:infrastructure-provisioning" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "253", - "h": "49", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "203", - "measuredH": "25", - "x": "23", - "y": "12", - "properties": { - "size": "17", - "text": "Infrastructure Provisioning" - } - } - ] - } - } - }, - { - "ID": "2926", + "ID": "3208", "typeID": "__group__", - "zOrder": "207", - "measuredW": "183", + "zOrder": "167", + "measuredW": "252", "measuredH": "47", - "w": "183", + "w": "252", "h": "47", - "x": "512", - "y": "1982", + "x": "410", + "y": "2663", "properties": { - "controlName": "100-infrastructure-as-code:infrastructure-provisioning:terraform" + "controlName": "102-logs-management:papertrail" }, "children": { "controls": { @@ -10850,11 +7810,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "174", + "w": "240", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "12", "y": "0", "properties": { "color": "16770457" @@ -10864,13 +7824,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "75", + "w": "79", "measuredW": "75", "measuredH": "25", - "x": "49", + "x": "92", "y": "11", "properties": { - "text": "Terraform", + "text": "Papertrail", "size": "17" } }, @@ -10882,7 +7842,7 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "159", + "x": "0", "y": "12", "children": { "controls": { @@ -10912,7 +7872,23 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", + "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" @@ -10928,17 +7904,17 @@ } }, { - "ID": "2927", + "ID": "3209", "typeID": "__group__", - "zOrder": "208", - "measuredW": "184", + "zOrder": "168", + "measuredW": "98", "measuredH": "47", - "w": "184", + "w": "98", "h": "47", - "x": "512", - "y": "2034", + "x": "574", + "y": "2445", "properties": { - "controlName": "101-infrastructure-as-code:infrastructure-provisioning:aws-cdk" + "controlName": "103-logs-management:loki" }, "children": { "controls": { @@ -10947,7 +7923,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "174", + "w": "88", "h": "47", "measuredW": "200", "measuredH": "140", @@ -10961,24 +7937,24 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "76", + "measuredW": "32", "measuredH": "25", - "x": "49", + "x": "28", "y": "11", "properties": { "size": "17", - "text": "AWS CDK" + "text": "Loki" } }, { - "ID": "2", + "ID": "3", "typeID": "__group__", "zOrder": "2", "measuredW": "24", "measuredH": "24", "w": "24", "h": "24", - "x": "160", + "x": "74", "y": "12", "children": { "controls": { @@ -11008,23 +7984,7 @@ "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", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -11040,17 +8000,17 @@ } }, { - "ID": "2928", + "ID": "3210", "typeID": "__group__", - "zOrder": "209", - "measuredW": "185", + "zOrder": "169", + "measuredW": "239", "measuredH": "47", - "w": "185", + "w": "239", "h": "47", - "x": "512", - "y": "2137", + "x": "754", + "y": "2523", "properties": { - "controlName": "103-infrastructure-as-code:infrastructure-provisioning:pulumi" + "controlName": "117-containers" }, "children": { "controls": { @@ -11059,26 +8019,73 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "174", + "w": "239", "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "52", + "measuredW": "186", "measuredH": "25", - "x": "61", + "x": "27", "y": "11", "properties": { - "text": "Pulumi", + "text": "Container Orchestration", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "3211", + "typeID": "__group__", + "zOrder": "170", + "measuredW": "202", + "measuredH": "46", + "w": "202", + "h": "46", + "x": "769", + "y": "2610", + "properties": { + "controlName": "100-containers:docker-swarm" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "193", + "h": "46", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "111", + "measuredH": "25", + "x": "45", + "y": "10", + "properties": { + "text": "Docker Swarm", "size": "17" } }, @@ -11090,8 +8097,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "161", - "y": "12", + "x": "178", + "y": "11", "children": { "controls": { "control": [ @@ -11152,17 +8159,139 @@ } }, { - "ID": "2929", + "ID": "3220", + "typeID": "Arrow", + "zOrder": "174", + "w": "1009", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "343", + "y": "2759", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": -0.16288012565826193, + "y": 0 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 1008.6363636363635, + "y": 0 + } + } + }, + { + "ID": "3221", "typeID": "__group__", - "zOrder": "210", - "measuredW": "185", + "zOrder": "175", + "measuredW": "141", + "measuredH": "47", + "w": "141", + "h": "47", + "x": "1111", + "y": "2736", + "properties": { + "controlName": "119-gitops" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "141", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "54", + "measuredH": "25", + "x": "44", + "y": "11", + "properties": { + "size": "17", + "text": "GitOps" + } + } + ] + } + } + }, + { + "ID": "3222", + "typeID": "__group__", + "zOrder": "176", + "measuredW": "207", + "measuredH": "47", + "w": "207", + "h": "47", + "x": "761", + "y": "2733", + "properties": { + "controlName": "120-service-mesh" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "207", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "105", + "measuredH": "25", + "x": "51", + "y": "11", + "properties": { + "text": "Service Mesh", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "3223", + "typeID": "__group__", + "zOrder": "177", + "measuredW": "110", "measuredH": "47", - "w": "185", + "w": "110", "h": "47", - "x": "512", - "y": "2086", + "x": "868", + "y": "2818", "properties": { - "controlName": "102-infrastructure-as-code:infrastructure-provisioning:cloudformation" + "controlName": "101-service-mesh:consul" }, "children": { "controls": { @@ -11171,7 +8300,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "174", + "w": "99", "h": "47", "measuredW": "200", "measuredH": "140", @@ -11185,13 +8314,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "123", + "measuredW": "54", "measuredH": "25", "x": "25", "y": "11", "properties": { - "size": "17", - "text": "CloudFormation" + "text": "Consul", + "size": "17" } }, { @@ -11202,7 +8331,7 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "161", + "x": "86", "y": "12", "children": { "controls": { @@ -11232,23 +8361,7 @@ "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", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -11260,81 +8373,21 @@ } } ] - } - } - }, - { - "ID": "2930", - "typeID": "Arrow", - "zOrder": "211", - "w": "21", - "h": "46", - "measuredW": "150", - "measuredH": "100", - "x": "194", - "y": "1995", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "p0": { - "x": 21, - "y": 0 - }, - "p1": { - "x": 0.56842735383826, - "y": -0.016875231606852847 - }, - "p2": { - "x": 0, - "y": 46 - }, - "rightArrow": "false", - "stroke": "dotted" - } - }, - { - "ID": "2931", - "typeID": "Arrow", - "zOrder": "212", - "w": "23", - "h": "46", - "measuredW": "150", - "measuredH": "100", - "x": "297", - "y": "1995", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.5684273538382602, - "y": -0.01687523160685285 - }, - "p2": { - "x": 23, - "y": 46 - }, - "rightArrow": "false", - "stroke": "dotted" + } } }, { - "ID": "2932", + "ID": "3224", "typeID": "__group__", - "zOrder": "213", - "measuredW": "318", - "measuredH": "56", - "w": "318", - "h": "56", - "x": "119", - "y": "1951", + "zOrder": "178", + "measuredW": "107", + "measuredH": "47", + "w": "107", + "h": "47", + "x": "756", + "y": "2818", "properties": { - "controlName": "106-ci-cd" + "controlName": "100-service-mesh:istio" }, "children": { "controls": { @@ -11343,27 +8396,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "311", - "h": "49", + "w": "99", + "h": "47", "measuredW": "200", "measuredH": "140", - "x": "7", - "y": "7", + "x": "8", + "y": "0", "properties": { - "color": "16776960" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "182", + "measuredW": "33", "measuredH": "25", - "x": "72", - "y": "19", + "x": "40", + "y": "9", "properties": { - "size": "17", - "text": "Learn some CI/CD Tool" + "text": "Istio", + "size": "17" } }, { @@ -11375,7 +8428,7 @@ "w": "24", "h": "24", "x": "0", - "y": "0", + "y": "10", "children": { "controls": { "control": [ @@ -11420,17 +8473,17 @@ } }, { - "ID": "2933", + "ID": "3225", "typeID": "__group__", - "zOrder": "214", - "measuredW": "134", - "measuredH": "46", - "w": "134", - "h": "46", - "x": "274", - "y": "2033", + "zOrder": "179", + "measuredW": "109", + "measuredH": "47", + "w": "109", + "h": "47", + "x": "868", + "y": "2870", "properties": { - "controlName": "101-ci-cd:jenkins" + "controlName": "103-service-mesh:envoy" }, "children": { "controls": { @@ -11439,8 +8492,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "124", - "h": "46", + "w": "99", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", @@ -11453,12 +8506,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "59", + "measuredW": "47", "measuredH": "25", - "x": "32", - "y": "10", + "x": "29", + "y": "11", "properties": { - "text": "Jenkins", + "text": "Envoy", "size": "17" } }, @@ -11470,8 +8523,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "110", - "y": "11", + "x": "85", + "y": "12", "children": { "controls": { "control": [ @@ -11500,7 +8553,23 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", + "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" @@ -11516,17 +8585,17 @@ } }, { - "ID": "2934", + "ID": "3226", "typeID": "__group__", - "zOrder": "215", - "measuredW": "147", - "measuredH": "46", - "w": "147", - "h": "46", - "x": "119", - "y": "2033", + "zOrder": "180", + "measuredW": "108", + "measuredH": "47", + "w": "108", + "h": "47", + "x": "755", + "y": "2869", "properties": { - "controlName": "100-ci-cd:gitlab-ci" + "controlName": "102-service-mesh:linkerd" }, "children": { "controls": { @@ -11535,11 +8604,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "137", - "h": "46", + "w": "99", + "h": "47", "measuredW": "200", "measuredH": "140", - "x": "10", + "x": "9", "y": "0", "properties": { "color": "16770457" @@ -11549,12 +8618,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "67", + "measuredW": "58", "measuredH": "25", - "x": "45", - "y": "10", + "x": "32", + "y": "11", "properties": { - "text": "Gitlab CI", + "text": "Linkerd", "size": "17" } }, @@ -11567,7 +8636,7 @@ "w": "24", "h": "24", "x": "0", - "y": "11", + "y": "12", "children": { "controls": { "control": [ @@ -11596,7 +8665,23 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", + "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" @@ -11612,17 +8697,169 @@ } }, { - "ID": "2935", + "ID": "3227", + "typeID": "Arrow", + "zOrder": "181", + "w": "1", + "h": "315", + "measuredW": "150", + "measuredH": "100", + "x": "342", + "y": "2760", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "p0": { + "x": 0, + "y": 0.4145245849647381 + }, + "p1": { + "x": 0.49999999999999983, + "y": 0 + }, + "p2": { + "x": 0, + "y": 315.12848853367905 + } + } + }, + { + "ID": "3228", + "typeID": "Arrow", + "zOrder": "182", + "w": "572", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "342", + "y": "3075", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": -0.09090909090912191, + "y": 0 + }, + "p1": { + "x": 0.5000000000000001, + "y": 0 + }, + "p2": { + "x": 572.0387075579786, + "y": 0 + } + } + }, + { + "ID": "3229", + "typeID": "__group__", + "zOrder": "183", + "measuredW": "254", + "measuredH": "47", + "w": "254", + "h": "47", + "x": "419", + "y": "2737", + "properties": { + "controlName": "ext_link:bit.ly/cloud-arch-patterns" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "254", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "4273622", + "borderColor": "4273622" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "172", + "measuredH": "25", + "x": "42", + "y": "11", + "properties": { + "size": "17", + "text": "Cloud Design Patterns", + "color": "16777215" + } + } + ] + } + } + }, + { + "ID": "3230", "typeID": "__group__", - "zOrder": "216", - "measuredW": "120", - "measuredH": "46", - "w": "120", - "h": "46", - "x": "289", - "y": "2084", + "zOrder": "184", + "measuredW": "255", + "measuredH": "47", + "w": "255", + "h": "47", + "x": "419", + "y": "2819", "properties": { - "controlName": "103-ci-cd:travis-ci" + "controlName": "109-availability" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "255", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "80", + "measuredH": "25", + "x": "88", + "y": "11", + "properties": { + "text": "Availability", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "3231", + "typeID": "__group__", + "zOrder": "185", + "measuredW": "254", + "measuredH": "47", + "w": "254", + "h": "47", + "x": "420", + "y": "2872", + "properties": { + "controlName": "110-data-management" }, "children": { "controls": { @@ -11631,8 +8868,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "109", - "h": "46", + "w": "254", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", @@ -11645,96 +8882,31 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "68", + "measuredW": "144", "measuredH": "25", - "x": "18", - "y": "10", + "x": "55", + "y": "11", "properties": { - "text": "Travis CI", + "text": "Data Management", "size": "17" } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "96", - "y": "11", - "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": "2936", + "ID": "3232", "typeID": "__group__", - "zOrder": "217", - "measuredW": "162", - "measuredH": "46", - "w": "162", - "h": "46", - "x": "119", - "y": "2084", + "zOrder": "186", + "measuredW": "255", + "measuredH": "47", + "w": "255", + "h": "47", + "x": "419", + "y": "2924", "properties": { - "controlName": "102-ci-cd:github-actions" + "controlName": "111-design-and-implementation" }, "children": { "controls": { @@ -11743,11 +8915,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "151", - "h": "46", + "w": "255", + "h": "47", "measuredW": "200", "measuredH": "140", - "x": "11", + "x": "0", "y": "0", "properties": { "color": "16770457" @@ -11757,80 +8929,31 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "114", + "measuredW": "212", "measuredH": "25", - "x": "30", - "y": "10", + "x": "22", + "y": "11", "properties": { - "text": "GitHub Actions", + "text": "Design and Implementation", "size": "17" } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "11", - "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": "2937", + "ID": "3233", "typeID": "__group__", - "zOrder": "218", - "measuredW": "276", + "zOrder": "187", + "measuredW": "255", "measuredH": "47", - "w": "276", + "w": "255", "h": "47", - "x": "132", - "y": "2136", + "x": "419", + "y": "2976", "properties": { - "controlName": "105-ci-cd:teamcity" + "controlName": "112-management-and-monitoring" }, "children": { "controls": { @@ -11839,7 +8962,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "267", + "w": "255", "h": "47", "measuredW": "200", "measuredH": "140", @@ -11853,96 +8976,98 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "72", + "measuredW": "223", "measuredH": "25", - "x": "98", + "x": "16", "y": "11", "properties": { - "text": "TeamCity", + "text": "Management and Monitoring", "size": "17" } - }, + } + ] + } + } + }, + { + "ID": "3234", + "typeID": "__group__", + "zOrder": "188", + "measuredW": "316", + "measuredH": "49", + "w": "316", + "h": "49", + "x": "1065", + "y": "1337", + "properties": { + "controlName": "108-networking-protocols" + }, + "children": { + "controls": { + "control": [ { - "ID": "2", + "ID": "0", "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "252", - "y": "12", + "zOrder": "0", + "measuredW": "316", + "measuredH": "49", + "w": "316", + "h": "49", + "x": "0", + "y": "0", + "properties": { + "controlName": "103-networking-protocols" + }, "children": { "controls": { "control": [ { "ID": "0", - "typeID": "Icon", + "typeID": "TextArea", "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", + "w": "316", + "h": "49", + "measuredW": "200", + "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "3700253", - "icon": { - "ID": "check-circle", - "size": "small" - } + "color": "16776960" } } ] } } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "265", + "measuredH": "25", + "x": "25", + "y": "12", + "properties": { + "size": "17", + "text": "Networking, Security and Protocols" + } } ] } } }, { - "ID": "2938", + "ID": "3235", "typeID": "__group__", - "zOrder": "219", - "measuredW": "136", + "zOrder": "189", + "measuredW": "114", "measuredH": "47", - "w": "136", + "w": "114", "h": "47", - "x": "120", - "y": "2241", + "x": "1233", + "y": "1156", "properties": { - "controlName": "107-ci-cd:circle-ci" + "controlName": "101-networking-protocols:dns" }, "children": { "controls": { @@ -11951,11 +9076,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "125", + "w": "114", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "11", + "x": "0", "y": "0", "properties": { "color": "16770457" @@ -11965,12 +9090,59 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "67", + "measuredW": "36", "measuredH": "25", - "x": "41", + "x": "22", "y": "11", "properties": { - "text": "Circle CI", + "text": "DNS", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "3236", + "typeID": "__group__", + "zOrder": "190", + "measuredW": "159", + "measuredH": "47", + "w": "159", + "h": "47", + "x": "1066", + "y": "1207", + "properties": { + "controlName": "102-networking-protocols:http" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "149", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "10", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "44", + "measuredH": "25", + "x": "63", + "y": "11", + "properties": { + "text": "HTTP", "size": "17" } }, @@ -12028,17 +9200,17 @@ } }, { - "ID": "2939", + "ID": "3237", "typeID": "__group__", - "zOrder": "220", - "measuredW": "148", + "zOrder": "191", + "measuredW": "124", "measuredH": "47", - "w": "148", + "w": "124", "h": "47", - "x": "263", - "y": "2241", + "x": "1233", + "y": "1207", "properties": { - "controlName": "108-ci-cd:drone" + "controlName": "103-networking-protocols:https" }, "children": { "controls": { @@ -12047,7 +9219,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "137", + "w": "116", "h": "47", "measuredW": "200", "measuredH": "140", @@ -12061,13 +9233,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "48", + "measuredW": "54", "measuredH": "25", - "x": "42", + "x": "19", "y": "11", "properties": { - "size": "17", - "text": "Drone" + "text": "HTTPS", + "size": "17" } }, { @@ -12078,7 +9250,7 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "124", + "x": "100", "y": "12", "children": { "controls": { @@ -12108,23 +9280,7 @@ "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", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -12140,17 +9296,17 @@ } }, { - "ID": "2940", + "ID": "3238", "typeID": "__group__", - "zOrder": "221", - "measuredW": "281", + "zOrder": "192", + "measuredW": "160", "measuredH": "47", - "w": "281", + "w": "160", "h": "47", - "x": "119", - "y": "2188", + "x": "1066", + "y": "1156", "properties": { - "controlName": "106-ci-cd:azure-devops-services" + "controlName": "104-networking-protocols:ftp" }, "children": { "controls": { @@ -12159,11 +9315,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "269", + "w": "151", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "12", + "x": "9", "y": "0", "properties": { "color": "16770457" @@ -12173,13 +9329,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "181", + "measuredW": "89", "measuredH": "25", - "x": "61", + "x": "38", "y": "11", "properties": { - "text": "Azure DevOps Services", - "size": "17" + "size": "17", + "text": "FTP / SFTP" } }, { @@ -12220,23 +9376,7 @@ "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", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -12252,111 +9392,17 @@ } }, { - "ID": "2941", - "typeID": "__group__", - "zOrder": "222", - "measuredW": "426", - "measuredH": "50", - "w": "426", - "h": "50", - "x": "550", - "y": "2343", - "properties": { - "controlName": "107-monitoring" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "426", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "373", - "measuredH": "25", - "x": "26", - "y": "12", - "properties": { - "size": "17", - "text": "Learn how to monitor software and infrastructure" - } - } - ] - } - } - }, - { - "ID": "2942", - "typeID": "__group__", - "zOrder": "223", - "measuredW": "238", - "measuredH": "47", - "w": "238", - "h": "47", - "x": "740", - "y": "2266", - "properties": { - "controlName": "100-monitoring:infrastructure-monitoring" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "238", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "191", - "measuredH": "25", - "x": "23", - "y": "11", - "properties": { - "text": "Infrastructure Monitoring", - "size": "17" - } - } - ] - } - } - }, - { - "ID": "2943", + "ID": "3239", "typeID": "__group__", - "zOrder": "224", - "measuredW": "140", + "zOrder": "193", + "measuredW": "159", "measuredH": "47", - "w": "140", + "w": "159", "h": "47", - "x": "1053", - "y": "2254", + "x": "1068", + "y": "1258", "properties": { - "controlName": "101-monitoring:infrastructure-monitoring:nagios" + "controlName": "105-networking-protocols:ssl-tls" }, "children": { "controls": { @@ -12365,11 +9411,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "130", + "w": "151", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "8", "y": "0", "properties": { "color": "16770457" @@ -12379,12 +9425,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "55", + "measuredW": "77", "measuredH": "25", - "x": "37", + "x": "47", "y": "11", "properties": { - "text": "Nagios", + "text": "SSL / TLS", "size": "17" } }, @@ -12396,7 +9442,7 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "116", + "x": "0", "y": "12", "children": { "controls": { @@ -12426,23 +9472,7 @@ "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", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -12458,17 +9488,17 @@ } }, { - "ID": "2944", + "ID": "3240", "typeID": "__group__", - "zOrder": "225", - "measuredW": "140", + "zOrder": "194", + "measuredW": "127", "measuredH": "47", - "w": "140", + "w": "127", "h": "47", - "x": "1053", - "y": "2306", + "x": "1233", + "y": "1258", "properties": { - "controlName": "102-monitoring:infrastructure-monitoring:grafana" + "controlName": "106-networking-protocols:ssh" }, "children": { "controls": { @@ -12477,7 +9507,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "130", + "w": "116", "h": "47", "measuredW": "200", "measuredH": "140", @@ -12491,12 +9521,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "62", + "measuredW": "33", "measuredH": "25", - "x": "34", + "x": "39", "y": "11", "properties": { - "text": "Grafana", + "text": "SSH", "size": "17" } }, @@ -12508,7 +9538,7 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "116", + "x": "103", "y": "12", "children": { "controls": { @@ -12554,17 +9584,66 @@ } }, { - "ID": "2945", + "ID": "3241", "typeID": "__group__", - "zOrder": "226", - "measuredW": "139", + "zOrder": "195", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "1332", + "y": "1168", + "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": "3242", + "typeID": "__group__", + "zOrder": "196", + "measuredW": "166", "measuredH": "47", - "w": "139", + "w": "166", "h": "47", - "x": "1053", - "y": "2462", + "x": "1051", + "y": "1465", "properties": { - "controlName": "102-monitoring:infrastructure-monitoring:datadog" + "controlName": "103-networking-protocols:emails" }, "children": { "controls": { @@ -12573,11 +9652,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "130", + "w": "155", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "11", "y": "0", "properties": { "color": "16770457" @@ -12587,13 +9666,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "66", + "measuredW": "43", "measuredH": "25", - "x": "32", + "x": "67", "y": "11", "properties": { - "text": "Datadog", - "size": "17" + "size": "17", + "text": "Email" } }, { @@ -12604,8 +9683,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "115", - "y": "12", + "x": "0", + "y": "10", "children": { "controls": { "control": [ @@ -12634,27 +9713,11 @@ "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": "10066329", "icon": { "ID": "check-circle", "size": "small" - }, - "color": "10027263" + } } } ] @@ -12666,17 +9729,64 @@ } }, { - "ID": "2946", + "ID": "3243", "typeID": "__group__", - "zOrder": "227", - "measuredW": "139", + "zOrder": "197", + "measuredW": "129", "measuredH": "47", - "w": "139", + "w": "129", "h": "47", - "x": "1053", - "y": "2358", + "x": "954", + "y": "1588", + "properties": { + "controlName": "101-networking-protocols:emails:smtp" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "129", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "46", + "measuredH": "25", + "x": "43", + "y": "11", + "properties": { + "text": "SMTP", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "3244", + "typeID": "__group__", + "zOrder": "198", + "measuredW": "129", + "measuredH": "47", + "w": "129", + "h": "47", + "x": "954", + "y": "1638", "properties": { - "controlName": "102-monitoring:infrastructure-monitoring:zabbix" + "controlName": "102-networking-protocols:emails:imaps" }, "children": { "controls": { @@ -12701,76 +9811,58 @@ "zOrder": "1", "measuredW": "52", "measuredH": "25", - "x": "39", + "x": "40", "y": "11", "properties": { - "text": "Zabbix", + "text": "IMAPS", "size": "17" } + } + ] + } + } + }, + { + "ID": "3245", + "typeID": "__group__", + "zOrder": "199", + "measuredW": "129", + "measuredH": "47", + "w": "129", + "h": "47", + "x": "954", + "y": "1689", + "properties": { + "controlName": "103-networking-protocols:emails:pop3s" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "129", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } }, { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "115", - "y": "12", - "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": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "56", + "measuredH": "25", + "x": "39", + "y": "11", + "properties": { + "text": "POP3S", + "size": "17" } } ] @@ -12778,17 +9870,17 @@ } }, { - "ID": "2947", + "ID": "3246", "typeID": "__group__", - "zOrder": "228", - "measuredW": "139", + "zOrder": "200", + "measuredW": "129", "measuredH": "47", - "w": "139", + "w": "129", "h": "47", - "x": "1053", - "y": "2410", + "x": "1088", + "y": "1589", "properties": { - "controlName": "102-monitoring:infrastructure-monitoring:monit" + "controlName": "104-networking-protocols:emails:dmarc" }, "children": { "controls": { @@ -12811,96 +9903,31 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "44", + "measuredW": "62", "measuredH": "25", - "x": "43", + "x": "37", "y": "11", "properties": { - "text": "Monit", + "text": "DMARC", "size": "17" } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "115", - "y": "12", - "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": "2948", + "ID": "3247", "typeID": "__group__", - "zOrder": "229", - "measuredW": "140", + "zOrder": "201", + "measuredW": "129", "measuredH": "47", - "w": "140", + "w": "129", "h": "47", - "x": "1053", - "y": "2203", + "x": "1088", + "y": "1639", "properties": { - "controlName": "100-monitoring:infrastructure-monitoring:prometheus" + "controlName": "105-networking-protocols:emails:spf" }, "children": { "controls": { @@ -12909,7 +9936,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "130", + "w": "129", "h": "47", "measuredW": "200", "measuredH": "140", @@ -12923,80 +9950,31 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "93", + "measuredW": "32", "measuredH": "25", - "x": "18", + "x": "50", "y": "11", "properties": { - "text": "Prometheus", + "text": "SPF", "size": "17" } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "116", - "y": "12", - "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": "2949", + "ID": "3248", "typeID": "__group__", - "zOrder": "230", - "measuredW": "289", - "measuredH": "49", - "w": "289", - "h": "49", - "x": "685", - "y": "2419", + "zOrder": "202", + "measuredW": "129", + "measuredH": "47", + "w": "129", + "h": "47", + "x": "1088", + "y": "1690", "properties": { - "controlName": "101-monitoring:application-monitoring" + "controlName": "106-networking-protocols:emails:domain-keys" }, "children": { "controls": { @@ -13005,26 +9983,26 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "289", - "h": "49", + "w": "129", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16776960" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "172", + "measuredW": "101", "measuredH": "25", - "x": "59", - "y": "12", + "x": "19", + "y": "11", "properties": { - "text": "Application Monitoring", + "text": "Domain Keys", "size": "17" } } @@ -13033,17 +10011,17 @@ } }, { - "ID": "2950", + "ID": "3249", "typeID": "__group__", - "zOrder": "231", - "measuredW": "153", + "zOrder": "203", + "measuredW": "264", "measuredH": "47", - "w": "153", + "w": "264", "h": "47", - "x": "675", - "y": "2504", + "x": "954", + "y": "1538", "properties": { - "controlName": "100-monitoring:application-monitoring:jaeger" + "controlName": "100-networking-protocols:emails:white-grey-listing" }, "children": { "controls": { @@ -13052,11 +10030,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "143", + "w": "264", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "10", + "x": "0", "y": "0", "properties": { "color": "16770457" @@ -13066,45 +10044,88 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "55", + "measuredW": "142", "measuredH": "25", - "x": "58", + "x": "61", "y": "11", "properties": { - "text": "Jaeger", + "text": "White/Grey Listing", "size": "17" } - }, + } + ] + } + } + }, + { + "ID": "3250", + "typeID": "Arrow", + "zOrder": "204", + "w": "1032", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "265", + "y": "1770", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": -0.30303030303031164, + "y": 0 + }, + "p1": { + "x": 0.5000000000000002, + "y": 0 + }, + "p2": { + "x": 1031.2121212121212, + "y": 0 + } + } + }, + { + "ID": "3271", + "typeID": "__group__", + "zOrder": "212", + "measuredW": "253", + "measuredH": "49", + "w": "253", + "h": "49", + "x": "235", + "y": "1746", + "properties": { + "controlName": "110-infrastructure-provisioning" + }, + "children": { + "controls": { + "control": [ { - "ID": "2", - "typeID": "Icon", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "253", + "h": "49", + "measuredW": "200", + "measuredH": "140", "x": "0", - "y": "12", + "y": "0", "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } + "color": "16776960" } }, { - "ID": "3", - "typeID": "Icon", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "x": "0", + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "203", + "measuredH": "25", + "x": "23", "y": "12", "properties": { - "color": "10027263", - "icon": { - "ID": "check-circle", - "size": "small" - } + "size": "17", + "text": "Infrastructure Provisioning" } } ] @@ -13112,17 +10133,103 @@ } }, { - "ID": "2951", + "ID": "3272", + "typeID": "Arrow", + "zOrder": "213", + "w": "1027", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "344", + "y": "2024", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": -0.30303030303031164, + "y": 0 + }, + "p1": { + "x": 0.5000000000000001, + "y": 0 + }, + "p2": { + "x": 1026.9071308398989, + "y": 0 + } + } + }, + { + "ID": "3273", + "typeID": "Arrow", + "zOrder": "214", + "w": "1", + "h": "79", + "measuredW": "150", + "measuredH": "100", + "x": "1320", + "y": "1946", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.5010057587596869, + "y": 0 + }, + "p2": { + "x": 0, + "y": 78 + } + } + }, + { + "ID": "3274", + "typeID": "Arrow", + "zOrder": "215", + "w": "1", + "h": "79", + "measuredW": "150", + "measuredH": "100", + "x": "1202", + "y": "1946", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.5010057587596869, + "y": 0 + }, + "p2": { + "x": 0, + "y": 78 + } + } + }, + { + "ID": "3275", "typeID": "__group__", - "zOrder": "232", - "measuredW": "149", + "zOrder": "216", + "measuredW": "237", "measuredH": "47", - "w": "149", + "w": "237", "h": "47", - "x": "835", - "y": "2504", + "x": "1137", + "y": "2001", "properties": { - "controlName": "101-monitoring:application-monitoring:new-relic" + "controlName": "113-secret-management" }, "children": { "controls": { @@ -13131,76 +10238,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "139", + "w": "237", "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "78", + "measuredW": "158", "measuredH": "25", - "x": "23", + "x": "40", "y": "11", "properties": { "size": "17", - "text": "New Relic" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "125", - "y": "12", - "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" - } - } - } - ] - } + "text": "Secret Management" } } ] @@ -13208,17 +10266,17 @@ } }, { - "ID": "2952", + "ID": "3276", "typeID": "__group__", - "zOrder": "233", - "measuredW": "154", + "zOrder": "217", + "measuredW": "133", "measuredH": "47", - "w": "154", + "w": "133", "h": "47", - "x": "674", - "y": "2556", + "x": "1128", + "y": "1924", "properties": { - "controlName": "102-monitoring:application-monitoring:app-dynamics" + "controlName": "100-secret-management:vault" }, "children": { "controls": { @@ -13227,11 +10285,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "143", + "w": "124", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "11", + "x": "9", "y": "0", "properties": { "color": "16770457" @@ -13241,13 +10299,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "105", + "measuredW": "38", "measuredH": "25", - "x": "30", + "x": "50", "y": "11", "properties": { - "text": "AppDynamics", - "size": "17" + "size": "17", + "text": "Vault" } }, { @@ -13288,23 +10346,7 @@ "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", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -13320,17 +10362,17 @@ } }, { - "ID": "2953", + "ID": "3277", "typeID": "__group__", - "zOrder": "234", - "measuredW": "148", + "zOrder": "218", + "measuredW": "240", "measuredH": "47", - "w": "148", + "w": "240", "h": "47", - "x": "835", - "y": "2556", + "x": "1135", + "y": "1822", "properties": { - "controlName": "103-monitoring:application-monitoring:instana" + "controlName": "102-secret-management:sealed-secrets" }, "children": { "controls": { @@ -13339,7 +10381,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "139", + "w": "240", "h": "47", "measuredW": "200", "measuredH": "140", @@ -13353,78 +10395,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "58", + "measuredW": "117", "measuredH": "25", - "x": "35", + "x": "62", "y": "11", "properties": { - "text": "Instana", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "124", - "y": "12", - "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" - } - } - } - ] - } + "size": "17", + "text": "Sealed Secrets" } } ] @@ -13432,17 +10409,17 @@ } }, { - "ID": "2954", + "ID": "3278", "typeID": "__group__", - "zOrder": "235", - "measuredW": "298", + "zOrder": "219", + "measuredW": "122", "measuredH": "47", - "w": "298", + "w": "122", "h": "47", - "x": "676", - "y": "2609", + "x": "1266", + "y": "1924", "properties": { - "controlName": "104-monitoring:application-monitoring:open-telemetry" + "controlName": "101-secret-management:sops" }, "children": { "controls": { @@ -13451,11 +10428,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "289", + "w": "110", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "9", + "x": "0", "y": "0", "properties": { "color": "16770457" @@ -13465,13 +10442,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "119", + "measuredW": "45", "measuredH": "25", - "x": "94", + "x": "32", "y": "11", "properties": { "size": "17", - "text": "OpenTelemetry" + "text": "SOPS" } }, { @@ -13482,8 +10459,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "0", - "y": "8", + "x": "98", + "y": "12", "children": { "controls": { "control": [ @@ -13512,27 +10489,11 @@ "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" - } + }, + "color": "3700253" } } ] @@ -13544,137 +10505,220 @@ } }, { - "ID": "2955", - "typeID": "Arrow", - "zOrder": "236", - "w": "65", - "h": "113", - "measuredW": "150", - "measuredH": "100", - "x": "267", - "y": "2437", + "ID": "3279", + "typeID": "__group__", + "zOrder": "220", + "measuredW": "242", + "measuredH": "47", + "w": "242", + "h": "47", + "x": "1135", + "y": "1873", "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 65, - "y": 0 - }, - "p1": { - "x": 0.5357516138948663, - "y": 0.13107900399631106 - }, - "p2": { - "x": 0, - "y": 113 + "controlName": "103-secret-management:cloud-specific-tools" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "242", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "154", + "measuredH": "25", + "x": "44", + "y": "11", + "properties": { + "size": "17", + "text": "Cloud Specific Tools" + } + } + ] } } }, { - "ID": "2956", - "typeID": "Arrow", - "zOrder": "237", - "w": "84", - "h": "22", - "measuredW": "150", - "measuredH": "100", - "x": "254", - "y": "2421", - "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 84, - "y": 0 - }, - "p1": { - "x": 0.47002652519893895, - "y": 0.06737400530503979 - }, - "p2": { - "x": 0, - "y": 22 + "ID": "3280", + "typeID": "__group__", + "zOrder": "221", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "1361", + "y": "1834", + "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": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "3700253" + } + } + ] + } + } + }, + { + "ID": "3281", + "typeID": "__group__", + "zOrder": "222", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "1362", + "y": "1885", + "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": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "3700253" + } + } + ] } } }, { - "ID": "2957", + "ID": "3282", "typeID": "Arrow", - "zOrder": "238", - "w": "67", - "h": "36", + "zOrder": "223", + "w": "1", + "h": "172", "measuredW": "150", "measuredH": "100", - "x": "264", - "y": "2384", + "x": "1001", + "y": "1929", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", "stroke": "dotted", "p0": { - "x": 67, - "y": 36 + "x": 0, + "y": 0.10981084062700575 }, "p1": { - "x": 0.4968020743301642, - "y": -0.0912705272255834 + "x": 0.49956677529873256, + "y": 0 }, "p2": { "x": 0, - "y": 0 + "y": 172.07603692056045 } } }, { - "ID": "2958", + "ID": "3283", "typeID": "Arrow", - "zOrder": "239", - "w": "75", - "h": "76", + "zOrder": "224", + "w": "1", + "h": "171", "measuredW": "150", "measuredH": "100", - "x": "267", - "y": "2422", + "x": "870", + "y": "1929", "properties": { - "color": "2848996", "leftArrow": "false", "rightArrow": "false", + "color": "2848996", "stroke": "dotted", "p0": { "x": 0, - "y": 76 + "y": 0.10981084062700575 }, "p1": { - "x": 0.30409613191825274, - "y": -0.08148408034382948 + "x": 0.4995667752987326, + "y": 0 }, "p2": { - "x": 75, - "y": 0 + "x": 0, + "y": 170.6390207091033 } } }, { - "ID": "2959", + "ID": "3284", "typeID": "__group__", - "zOrder": "240", - "measuredW": "210", + "zOrder": "225", + "measuredW": "260", "measuredH": "49", - "w": "210", + "w": "260", "h": "49", - "x": "322", - "y": "2403", + "x": "798", + "y": "2000", "properties": { - "controlName": "102-monitoring:logs-management" + "controlName": "112-ci-cd" }, "children": { "controls": { @@ -13683,7 +10727,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "210", + "w": "260", "h": "49", "measuredW": "200", "measuredH": "140", @@ -13697,13 +10741,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "145", + "measuredW": "182", "measuredH": "25", - "x": "32", + "x": "39", "y": "12", "properties": { - "text": "Logs Management", - "size": "17" + "size": "17", + "text": "Learn some CI/CD Tool" } } ] @@ -13711,17 +10755,17 @@ } }, { - "ID": "2960", + "ID": "3285", "typeID": "__group__", - "zOrder": "241", - "measuredW": "160", - "measuredH": "47", - "w": "160", - "h": "47", - "x": "118", - "y": "2309", + "zOrder": "226", + "measuredW": "121", + "measuredH": "46", + "w": "121", + "h": "46", + "x": "953", + "y": "1824", "properties": { - "controlName": "100-monitoring:logs-management:elastic-stack" + "controlName": "101-ci-cd:jenkins" }, "children": { "controls": { @@ -13730,11 +10774,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "149", - "h": "47", + "w": "111", + "h": "46", "measuredW": "200", "measuredH": "140", - "x": "11", + "x": "0", "y": "0", "properties": { "color": "16770457" @@ -13744,12 +10788,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "98", + "measuredW": "59", "measuredH": "25", - "x": "39", - "y": "11", + "x": "26", + "y": "10", "properties": { - "text": "Elastic Stack", + "text": "Jenkins", "size": "17" } }, @@ -13761,8 +10805,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "0", - "y": "12", + "x": "97", + "y": "11", "children": { "controls": { "control": [ @@ -13807,17 +10851,17 @@ } }, { - "ID": "2961", + "ID": "3286", "typeID": "__group__", - "zOrder": "242", - "measuredW": "161", - "measuredH": "47", - "w": "161", - "h": "47", - "x": "118", - "y": "2362", + "zOrder": "227", + "measuredW": "163", + "measuredH": "46", + "w": "163", + "h": "46", + "x": "785", + "y": "1824", "properties": { - "controlName": "101-monitoring:logs-management:graylog" + "controlName": "100-ci-cd:gitlab-ci" }, "children": { "controls": { @@ -13826,11 +10870,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "149", - "h": "47", + "w": "153", + "h": "46", "measuredW": "200", "measuredH": "140", - "x": "12", + "x": "10", "y": "0", "properties": { "color": "16770457" @@ -13840,13 +10884,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "59", - "measuredW": "59", + "measuredW": "67", "measuredH": "25", "x": "53", - "y": "11", + "y": "10", "properties": { - "text": "Graylog", + "text": "Gitlab CI", "size": "17" } }, @@ -13859,7 +10902,7 @@ "w": "24", "h": "24", "x": "0", - "y": "12", + "y": "11", "children": { "controls": { "control": [ @@ -13888,23 +10931,7 @@ "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", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -13920,17 +10947,17 @@ } }, { - "ID": "2962", + "ID": "3287", "typeID": "__group__", - "zOrder": "243", - "measuredW": "161", - "measuredH": "47", - "w": "161", - "h": "47", - "x": "118", - "y": "2416", + "zOrder": "228", + "measuredW": "122", + "measuredH": "46", + "w": "122", + "h": "46", + "x": "953", + "y": "1873", "properties": { - "controlName": "102-monitoring:logs-management:splunk" + "controlName": "103-ci-cd:travis-ci" }, "children": { "controls": { @@ -13939,11 +10966,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "149", - "h": "47", + "w": "111", + "h": "46", "measuredW": "200", "measuredH": "140", - "x": "12", + "x": "0", "y": "0", "properties": { "color": "16770457" @@ -13953,13 +10980,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "53", - "measuredW": "52", + "measuredW": "68", "measuredH": "25", - "x": "61", - "y": "11", + "x": "20", + "y": "10", "properties": { - "text": "Splunk", + "text": "Travis CI", "size": "17" } }, @@ -13971,8 +10997,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "0", - "y": "12", + "x": "98", + "y": "11", "children": { "controls": { "control": [ @@ -14033,17 +11059,17 @@ } }, { - "ID": "2963", + "ID": "3288", "typeID": "__group__", - "zOrder": "244", - "measuredW": "161", - "measuredH": "47", - "w": "161", - "h": "47", - "x": "119", - "y": "2469", + "zOrder": "229", + "measuredW": "163", + "measuredH": "46", + "w": "163", + "h": "46", + "x": "785", + "y": "1873", "properties": { - "controlName": "102-monitoring:logs-management:papertrail" + "controlName": "102-ci-cd:github-actions" }, "children": { "controls": { @@ -14052,11 +11078,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "149", - "h": "47", + "w": "152", + "h": "46", "measuredW": "200", "measuredH": "140", - "x": "12", + "x": "11", "y": "0", "properties": { "color": "16770457" @@ -14066,13 +11092,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "w": "79", - "measuredW": "75", + "measuredW": "114", "measuredH": "25", - "x": "51", - "y": "11", + "x": "30", + "y": "10", "properties": { - "text": "Papertrail", + "text": "GitHub Actions", "size": "17" } }, @@ -14085,7 +11110,7 @@ "w": "24", "h": "24", "x": "0", - "y": "12", + "y": "11", "children": { "controls": { "control": [ @@ -14114,23 +11139,7 @@ "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", + "color": "10027263", "icon": { "ID": "check-circle", "size": "small" @@ -14146,17 +11155,17 @@ } }, { - "ID": "2964", + "ID": "3289", "typeID": "__group__", - "zOrder": "245", - "measuredW": "304", - "measuredH": "49", - "w": "304", - "h": "49", - "x": "144", - "y": "2595", + "zOrder": "230", + "measuredW": "276", + "measuredH": "47", + "w": "276", + "h": "47", + "x": "796", + "y": "2077", "properties": { - "controlName": "108-cloud-providers" + "controlName": "105-ci-cd:teamcity" }, "children": { "controls": { @@ -14165,59 +11174,12 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "304", - "h": "49", + "w": "267", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "122", - "measuredH": "25", - "x": "91", - "y": "12", - "properties": { - "size": "17", - "text": "Cloud Providers" - } - } - ] - } - } - }, - { - "ID": "2965", - "typeID": "__group__", - "zOrder": "246", - "measuredW": "160", - "measuredH": "46", - "w": "160", - "h": "46", - "x": "133", - "y": "2680", - "properties": { - "controlName": "100-cloud-providers:aws" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "149", - "h": "46", - "measuredW": "200", - "measuredH": "140", - "x": "11", - "y": "0", "properties": { "color": "16770457" } @@ -14226,12 +11188,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "36", + "measuredW": "72", "measuredH": "25", - "x": "68", - "y": "10", + "x": "98", + "y": "11", "properties": { - "text": "AWS", + "text": "TeamCity", "size": "17" } }, @@ -14243,8 +11205,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "0", - "y": "11", + "x": "252", + "y": "12", "children": { "controls": { "control": [ @@ -14273,7 +11235,23 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", + "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" @@ -14289,17 +11267,17 @@ } }, { - "ID": "2966", + "ID": "3290", "typeID": "__group__", - "zOrder": "247", - "measuredW": "160", + "zOrder": "231", + "measuredW": "163", "measuredH": "47", - "w": "160", + "w": "163", "h": "47", - "x": "133", - "y": "2730", + "x": "785", + "y": "1923", "properties": { - "controlName": "101-cloud-providers:google-cloud" + "controlName": "107-ci-cd:circle-ci" }, "children": { "controls": { @@ -14308,7 +11286,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "149", + "w": "152", "h": "47", "measuredW": "200", "measuredH": "140", @@ -14322,12 +11300,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "105", + "measuredW": "67", "measuredH": "25", - "x": "33", + "x": "53", "y": "11", "properties": { - "text": "Google Cloud", + "text": "Circle CI", "size": "17" } }, @@ -14369,27 +11347,11 @@ "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": "10027263", "icon": { "ID": "check-circle", "size": "small" - }, - "color": "10027263" + } } } ] @@ -14401,17 +11363,17 @@ } }, { - "ID": "2967", + "ID": "3291", "typeID": "__group__", - "zOrder": "248", - "measuredW": "160", + "zOrder": "232", + "measuredW": "123", "measuredH": "47", - "w": "160", + "w": "123", "h": "47", - "x": "133", - "y": "2782", + "x": "953", + "y": "1923", "properties": { - "controlName": "102-cloud-providers:azure" + "controlName": "108-ci-cd:drone" }, "children": { "controls": { @@ -14420,11 +11382,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "149", + "w": "112", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "11", + "x": "0", "y": "0", "properties": { "color": "16770457" @@ -14434,13 +11396,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "44", + "measuredW": "48", "measuredH": "25", - "x": "64", + "x": "32", "y": "11", "properties": { - "text": "Azure", - "size": "17" + "size": "17", + "text": "Drone" } }, { @@ -14451,7 +11413,7 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "0", + "x": "99", "y": "12", "children": { "controls": { @@ -14513,17 +11475,17 @@ } }, { - "ID": "2968", + "ID": "3292", "typeID": "__group__", - "zOrder": "249", - "measuredW": "160", + "zOrder": "233", + "measuredW": "279", "measuredH": "47", - "w": "160", + "w": "279", "h": "47", - "x": "299", - "y": "2730", + "x": "795", + "y": "2139", "properties": { - "controlName": "104-cloud-providers:digital-ocean" + "controlName": "106-ci-cd:azure-devops-services" }, "children": { "controls": { @@ -14532,7 +11494,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "149", + "w": "269", "h": "47", "measuredW": "200", "measuredH": "140", @@ -14546,12 +11508,12 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "105", + "measuredW": "181", "measuredH": "25", - "x": "22", + "x": "49", "y": "11", "properties": { - "text": "Digital Ocean", + "text": "Azure DevOps Services", "size": "17" } }, @@ -14563,7 +11525,7 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "136", + "x": "255", "y": "12", "children": { "controls": { @@ -14593,7 +11555,23 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", + "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" @@ -14609,110 +11587,324 @@ } }, { - "ID": "2969", - "typeID": "__group__", - "zOrder": "250", - "measuredW": "160", - "measuredH": "47", - "w": "160", - "h": "47", - "x": "133", - "y": "2834", + "ID": "3295", + "typeID": "Arrow", + "zOrder": "235", + "w": "1", + "h": "94", + "measuredW": "150", + "measuredH": "100", + "x": "913", + "y": "3076", "properties": { - "controlName": "103-cloud-providers:heroku" - }, + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "p0": { + "x": 0, + "y": 0.4145245849647381 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 0, + "y": 93.99315759031742 + } + } + }, + { + "ID": "3296", + "typeID": "Label", + "zOrder": "236", + "measuredW": "187", + "measuredH": "36", + "x": "825", + "y": "3187", + "properties": { + "size": "28", + "text": "Keep Learning" + } + }, + { + "ID": "3297", + "typeID": "Arrow", + "zOrder": "237", + "w": "1", + "h": "73", + "measuredW": "150", + "measuredH": "100", + "x": "913", + "y": "3244", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "p0": { + "x": 0, + "y": 0.4145245849647381 + }, + "p1": { + "x": 0.49999999999999994, + "y": 0 + }, + "p2": { + "x": 0, + "y": 73.58743309002512 + }, + "stroke": "dotted" + } + }, + { + "ID": "3299", + "typeID": "Arrow", + "zOrder": "238", + "w": "496", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "811", + "y": "506", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "p0": { + "x": 495.530303030303, + "y": -0.42424242424249314 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 0, + "y": -0.42424242424249314 + } + } + }, + { + "ID": "3300", + "typeID": "Arrow", + "zOrder": "9", + "w": "1", + "h": "616", + "measuredW": "150", + "measuredH": "100", + "x": "1308", + "y": "508", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.4999999999999998, + "y": 0 + }, + "p2": { + "x": 0, + "y": 616.2424242424242 + } + } + }, + { + "ID": "3301", + "typeID": "Arrow", + "zOrder": "8", + "w": "1", + "h": "67", + "measuredW": "150", + "measuredH": "100", + "x": "1118", + "y": "807", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", + "p0": { + "x": -0.17226529262484291, + "y": 0.12121212121212466 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": -0.17226529262484291, + "y": 67.5 + } + } + }, + { + "ID": "3303", + "typeID": "Arrow", + "zOrder": "242", + "w": "979", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "329", + "y": "1125", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "p0": { + "x": 978.5454545454545, + "y": -0.3574432865241306 + }, + "p1": { + "x": 0.5000000000000002, + "y": 0 + }, + "p2": { + "x": -0.21212121212124657, + "y": -0.3574432865241306 + } + } + }, + { + "ID": "3306", + "typeID": "Label", + "zOrder": "245", + "measuredW": "98", + "measuredH": "25", + "x": "343", + "y": "922", + "properties": { + "size": "17", + "text": "Web Servers" + } + }, + { + "ID": "3307", + "typeID": "__group__", + "zOrder": "246", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "458", + "y": "856", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "149", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "11", + "measuredW": "24", + "measuredH": "24", + "x": "0", "y": "0", "properties": { - "color": "16770457" + "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": "3308", + "typeID": "__group__", + "zOrder": "247", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "458", + "y": "809", + "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": "Label", + "typeID": "Icon", "zOrder": "1", - "measuredW": "56", - "measuredH": "25", - "x": "58", - "y": "11", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", "properties": { - "text": "Heroku", - "size": "17" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { "ID": "2", - "typeID": "__group__", + "typeID": "Icon", "zOrder": "2", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", "x": "0", - "y": "12", - "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" - } - } - } - ] + "y": "0", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" } } } @@ -14721,110 +11913,272 @@ } }, { - "ID": "2970", - "typeID": "__group__", + "ID": "3309", + "typeID": "Arrow", + "zOrder": "7", + "w": "1", + "h": "92", + "measuredW": "150", + "measuredH": "100", + "x": "219", + "y": "1032", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", + "p0": { + "x": 0, + "y": 0.030303030303002743 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 0, + "y": 92.24242424242425 + } + } + }, + { + "ID": "3310", + "typeID": "Arrow", + "zOrder": "6", + "w": "1", + "h": "98", + "measuredW": "150", + "measuredH": "100", + "x": "383", + "y": "1026", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", + "p0": { + "x": 0, + "y": 0.030303030303002743 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 0, + "y": 97.5454545454545 + } + } + }, + { + "ID": "3311", + "typeID": "Arrow", + "zOrder": "5", + "w": "80", + "h": "28", + "measuredW": "150", + "measuredH": "100", + "x": "395", + "y": "1262", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", + "p0": { + "x": 80, + "y": 28 + }, + "p1": { + "x": 0.39237507110558384, + "y": -0.1516838766281981 + }, + "p2": { + "x": 0, + "y": 0 + } + } + }, + { + "ID": "3312", + "typeID": "Arrow", + "zOrder": "4", + "w": "1", + "h": "78", + "measuredW": "150", + "measuredH": "100", + "x": "1296", + "y": "1278", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", + "p0": { + "x": 0, + "y": -0.24242424242424931 + }, + "p1": { + "x": 0.4988928776156576, + "y": 0 + }, + "p2": { + "x": 0, + "y": 78 + } + } + }, + { + "ID": "3313", + "typeID": "Arrow", + "zOrder": "3", + "w": "1", + "h": "75", + "measuredW": "150", + "measuredH": "100", + "x": "1158", + "y": "1492", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", + "p0": { + "x": 0, + "y": -0.24242424242424931 + }, + "p1": { + "x": 0.4988928776156576, + "y": 0 + }, + "p2": { + "x": 0, + "y": 74.66666666666652 + } + } + }, + { + "ID": "3314", + "typeID": "Icon", + "zOrder": "248", + "measuredW": "24", + "measuredH": "24", + "x": "843", + "y": "620", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3315", + "typeID": "Icon", + "zOrder": "249", + "measuredW": "24", + "measuredH": "24", + "x": "843", + "y": "620", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + }, + { + "ID": "3316", + "typeID": "Icon", + "zOrder": "250", + "measuredW": "24", + "measuredH": "24", + "x": "842", + "y": "664", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3317", + "typeID": "Icon", "zOrder": "251", - "measuredW": "160", - "measuredH": "47", - "w": "160", - "h": "47", - "x": "299", - "y": "2782", + "measuredW": "24", + "measuredH": "24", + "x": "842", + "y": "664", "properties": { - "controlName": "105-cloud-providers:linode" - }, + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3318", + "typeID": "Icon", + "zOrder": "252", + "measuredW": "24", + "measuredH": "24", + "x": "842", + "y": "664", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + }, + { + "ID": "3319", + "typeID": "__group__", + "zOrder": "253", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "842", + "y": "707", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "149", - "h": "47", - "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": "53", - "measuredH": "25", - "x": "48", - "y": "11", - "properties": { - "text": "Linode", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "136", - "y": "12", - "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": "0", + "y": "0", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" } } } @@ -14833,110 +12187,147 @@ } }, { - "ID": "2971", - "typeID": "__group__", - "zOrder": "252", - "measuredW": "160", - "measuredH": "47", - "w": "160", + "ID": "3320", + "typeID": "Arrow", + "zOrder": "2", + "w": "1", "h": "47", - "x": "299", - "y": "2834", + "measuredW": "150", + "measuredH": "100", + "x": "953", + "y": "522", "properties": { - "controlName": "106-cloud-providers:vultr" - }, + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.5020600744284955, + "y": -0.0018326094960089672 + }, + "p2": { + "x": 0, + "y": 47 + } + } + }, + { + "ID": "3618", + "typeID": "Label", + "zOrder": "254", + "measuredW": "55", + "measuredH": "25", + "x": "631", + "y": "787", + "properties": { + "size": "17", + "text": "Editors" + } + }, + { + "ID": "3620", + "typeID": "Arrow", + "zOrder": "1", + "w": "236", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "911", + "y": "799", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "p0": { + "x": 236.530303030303, + "y": -0.42424242424249314 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 0.4393939393939945, + "y": -0.42424242424249314 + }, + "stroke": "dotted" + } + }, + { + "ID": "3621", + "typeID": "Arrow", + "zOrder": "255", + "w": "114", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "701", + "y": "799", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", + "p0": { + "x": 114.07575757575762, + "y": -0.42424242424249314 + }, + "p1": { + "x": 0.4999999999999998, + "y": 0 + }, + "p2": { + "x": 0.0454545454546178, + "y": -0.42424242424249314 + } + } + }, + { + "ID": "3622", + "typeID": "__group__", + "zOrder": "257", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "458", + "y": "708", "children": { "controls": { "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "149", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "35", - "measuredH": "25", - "x": "57", - "y": "11", - "properties": { - "text": "Vultr", - "size": "17" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "136", - "y": "12", - "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": "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" } } } @@ -14945,110 +12336,63 @@ } }, { - "ID": "2972", + "ID": "3623", "typeID": "__group__", - "zOrder": "253", - "measuredW": "161", - "measuredH": "46", - "w": "161", - "h": "46", - "x": "299", - "y": "2680", - "properties": { - "controlName": "104-cloud-providers:albaba-cloud" - }, + "zOrder": "258", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "458", + "y": "759", "children": { "controls": { "control": [ { "ID": "0", - "typeID": "TextArea", + "typeID": "Icon", "zOrder": "0", - "w": "149", - "h": "46", - "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": "106", - "measuredH": "25", - "x": "22", - "y": "10", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "0", "properties": { - "text": "Alibaba Cloud", - "size": "17" + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } } }, { "ID": "2", - "typeID": "__group__", + "typeID": "Icon", "zOrder": "2", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "137", - "y": "11", - "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": "0", + "y": "0", + "properties": { + "color": "3700253", + "icon": { + "ID": "check-circle", + "size": "small" } } } @@ -15057,175 +12401,230 @@ } }, { - "ID": "2973", + "ID": "3624", "typeID": "Arrow", - "zOrder": "254", + "zOrder": "0", "w": "1", - "h": "149", + "h": "45", "measuredW": "150", "measuredH": "100", - "x": "668", - "y": "2745", + "x": "391", + "y": "870", "properties": { - "color": "2848996", - "direction": "bottom", "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", "p0": { "x": 0, - "y": 148.5 + "y": 0.09090909090912191 }, "p1": { - "x": 0.46874741514792245, - "y": -0.0047699137004053056 + "x": 0.4999999999999999, + "y": 0 }, "p2": { "x": 0, - "y": -0.5 - }, - "rightArrow": "false" + "y": 45.545454545454504 + } } }, { - "ID": "2974", - "typeID": "Arrow", - "zOrder": "255", - "w": "153", - "h": "101", - "measuredW": "150", - "measuredH": "100", - "x": "789", - "y": "2755", + "ID": "3625", + "typeID": "Canvas", + "zOrder": "259", + "w": "420", + "h": "151", + "measuredW": "100", + "measuredH": "70", + "x": "161", + "y": "456" + }, + { + "ID": "3626", + "typeID": "__group__", + "zOrder": "260", + "measuredW": "374", + "measuredH": "47", + "w": "374", + "h": "47", + "x": "181", + "y": "545", "properties": { - "color": "2848996", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.4988, - "y": 0.03159999999999985 - }, - "p2": { - "x": 152.5, - "y": 100 + "controlName": "json:devops-beginner.json" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "374", + "h": "47", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "borderColor": "4273622", + "color": "4273622" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "210", + "measuredH": "26", + "x": "82", + "y": "11", + "properties": { + "color": "16777215", + "size": "18", + "text": "Visit the Beginner Version" + } + } + ] } } }, { - "ID": "2975", - "typeID": "Arrow", - "zOrder": "256", - "w": "155", - "h": "62", - "measuredW": "150", - "measuredH": "100", - "x": "793", - "y": "2748", + "ID": "3627", + "typeID": "Label", + "zOrder": "261", + "measuredW": "385", + "measuredH": "26", + "x": "181", + "y": "479", "properties": { - "color": "2848996", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.49879999999999997, - "y": 0.031599999999999934 - }, - "p2": { - "x": 154.5, - "y": 61 + "color": "4985136", + "size": "18", + "text": "If you are just getting started, visit the simplified" + } + }, + { + "ID": "3628", + "typeID": "Label", + "zOrder": "262", + "measuredW": "305", + "measuredH": "26", + "x": "181", + "y": "509", + "properties": { + "color": "4985136", + "size": "18", + "text": "version listing learning tips and ideas." + } + }, + { + "ID": "3637", + "typeID": "Icon", + "zOrder": "84", + "measuredW": "24", + "measuredH": "24", + "x": "1230", + "y": "918", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" } } }, { - "ID": "2976", - "typeID": "Arrow", - "zOrder": "257", - "w": "160", - "h": "29", - "measuredW": "150", - "measuredH": "100", - "x": "783", - "y": "2738", + "ID": "3638", + "typeID": "Icon", + "zOrder": "85", + "measuredW": "24", + "measuredH": "24", + "x": "1230", + "y": "918", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + }, + { + "ID": "3641", + "typeID": "Icon", + "zOrder": "87", + "measuredW": "24", + "measuredH": "24", + "x": "1231", + "y": "971", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3642", + "typeID": "Icon", + "zOrder": "88", + "measuredW": "24", + "measuredH": "24", + "x": "1231", + "y": "971", "properties": { - "color": "2848996", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.4988, - "y": 0.03159999999999997 - }, - "p2": { - "x": 159.5, - "y": 28 + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" } } }, { - "ID": "2977", - "typeID": "Arrow", - "zOrder": "258", - "w": "158", - "h": "7", - "measuredW": "150", - "measuredH": "100", - "x": "790", - "y": "2719", + "ID": "3645", + "typeID": "Icon", + "zOrder": "90", + "measuredW": "24", + "measuredH": "24", + "x": "1231", + "y": "1022", "properties": { - "color": "2848996", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.5, - "y": 7 - }, - "p1": { - "x": 0.49880000000000013, - "y": 0.03159999999999997 - }, - "p2": { - "x": 157.5, - "y": 4 + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" } } }, { - "ID": "2978", - "typeID": "Label", - "zOrder": "259", - "measuredW": "161", - "measuredH": "32", - "x": "588", - "y": "2902", + "ID": "3646", + "typeID": "Icon", + "zOrder": "91", + "measuredW": "24", + "measuredH": "24", + "x": "1231", + "y": "1022", "properties": { - "size": "24", - "text": "Keep Learning" + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } } }, { - "ID": "2979", + "ID": "3647", "typeID": "__group__", - "zOrder": "260", - "measuredW": "289", - "measuredH": "95", - "w": "289", - "h": "95", - "x": "522", - "y": "2690", + "zOrder": "81", + "measuredW": "233", + "measuredH": "47", + "w": "233", + "h": "47", + "x": "1012", + "y": "853", "properties": { - "controlName": "ext_link:bit.ly/cloud-arch-patterns" + "controlName": "103-live-in-terminal:process-monitoring" }, "children": { "controls": { @@ -15234,138 +12633,74 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "289", - "h": "83", + "w": "233", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", - "y": "12", + "y": "0", "properties": { - "color": "16776960" + "color": "16770457" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "172", + "measuredW": "149", "measuredH": "25", - "x": "59", - "y": "30", + "x": "42", + "y": "11", "properties": { "size": "17", - "text": "Cloud Design Patterns" - } - }, - { - "ID": "2", - "typeID": "Label", - "zOrder": "2", - "measuredW": "213", - "measuredH": "23", - "x": "38", - "y": "56", - "properties": { - "size": "15", - "text": "http://bit.ly/cloud-arch-patterns" + "text": "Process Monitoring" } - }, + } + ] + } + } + }, + { + "ID": "3648", + "typeID": "__group__", + "zOrder": "83", + "measuredW": "233", + "measuredH": "47", + "w": "233", + "h": "47", + "x": "1012", + "y": "906", + "properties": { + "controlName": "104-live-in-terminal:performance-monitoring" + }, + "children": { + "controls": { + "control": [ { - "ID": "3", - "typeID": "__group__", - "zOrder": "3", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "265", + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "233", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "0", "y": "0", - "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" - } - } - } - ] - } + "properties": { + "color": "16770457" } }, { - "ID": "4", - "typeID": "__group__", - "zOrder": "4", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "240", - "y": "0", - "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": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "186", + "measuredH": "25", + "x": "26", + "y": "11", + "properties": { + "size": "17", + "text": "Performance Monitoring" } } ] @@ -15373,17 +12708,17 @@ } }, { - "ID": "2980", + "ID": "3649", "typeID": "__group__", - "zOrder": "261", - "measuredW": "255", + "zOrder": "86", + "measuredW": "233", "measuredH": "47", - "w": "255", + "w": "233", "h": "47", - "x": "933", - "y": "2684", + "x": "1012", + "y": "959", "properties": { - "controlName": "109-availability" + "controlName": "105-live-in-terminal:networking-tools" }, "children": { "controls": { @@ -15392,7 +12727,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "255", + "w": "233", "h": "47", "measuredW": "200", "measuredH": "140", @@ -15406,13 +12741,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "80", + "measuredW": "131", "measuredH": "25", - "x": "88", + "x": "51", "y": "11", "properties": { - "text": "Availability", - "size": "17" + "size": "17", + "text": "Networking Tools" } } ] @@ -15420,17 +12755,17 @@ } }, { - "ID": "2981", + "ID": "3650", "typeID": "__group__", - "zOrder": "262", - "measuredW": "254", + "zOrder": "89", + "measuredW": "233", "measuredH": "47", - "w": "254", + "w": "233", "h": "47", - "x": "934", - "y": "2738", + "x": "1012", + "y": "1011", "properties": { - "controlName": "110-data-management" + "controlName": "106-live-in-terminal:text-manipulation" }, "children": { "controls": { @@ -15439,7 +12774,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "254", + "w": "233", "h": "47", "measuredW": "200", "measuredH": "140", @@ -15453,13 +12788,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "144", + "measuredW": "135", "measuredH": "25", - "x": "55", + "x": "49", "y": "11", "properties": { - "text": "Data Management", - "size": "17" + "size": "17", + "text": "Text Manipulation" } } ] @@ -15467,17 +12802,17 @@ } }, { - "ID": "2982", + "ID": "3657", "typeID": "__group__", - "zOrder": "263", - "measuredW": "255", + "zOrder": "92", + "measuredW": "83", "measuredH": "47", - "w": "255", + "w": "83", "h": "47", - "x": "933", - "y": "2793", + "x": "741", + "y": "1012", "properties": { - "controlName": "111-design-and-implementation" + "controlName": "100-version-control-systems:git" }, "children": { "controls": { @@ -15486,11 +12821,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "255", + "w": "70", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "13", "y": "0", "properties": { "color": "16770457" @@ -15500,13 +12835,45 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "212", + "measuredW": "22", "measuredH": "25", - "x": "22", + "x": "37", "y": "11", "properties": { - "text": "Design and Implementation", - "size": "17" + "size": "17", + "text": "Git" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "12", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "12", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } } } ] @@ -15514,17 +12881,17 @@ } }, { - "ID": "2983", + "ID": "3662", "typeID": "__group__", - "zOrder": "264", - "measuredW": "255", - "measuredH": "47", - "w": "255", - "h": "47", - "x": "933", - "y": "2847", + "zOrder": "244", + "measuredW": "168", + "measuredH": "50", + "w": "168", + "h": "50", + "x": "536", + "y": "1099", "properties": { - "controlName": "112-management-and-monitoring" + "controlName": "104-vcs-hosting" }, "children": { "controls": { @@ -15533,27 +12900,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "255", - "h": "47", + "w": "168", + "h": "50", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "223", + "measuredW": "97", "measuredH": "25", - "x": "16", - "y": "11", + "x": "35", + "y": "13", "properties": { - "text": "Management and Monitoring", - "size": "17" + "size": "17", + "text": "VCS Hosting" } } ] @@ -15561,46 +12928,49 @@ } }, { - "ID": "2984", - "typeID": "Arrow", - "zOrder": "265", - "w": "1", - "h": "77", - "measuredW": "150", - "measuredH": "100", - "x": "668", - "y": "2951", + "ID": "3669", + "typeID": "Icon", + "zOrder": "95", + "measuredW": "24", + "measuredH": "24", + "x": "554", + "y": "973", "properties": { - "color": "2848996", - "direction": "bottom", - "leftArrow": "false", - "p0": { - "x": 0, - "y": 76 - }, - "p1": { - "x": 0.4687474151479224, - "y": -0.0047699137004053056 - }, - "p2": { - "x": 0, - "y": -0.5 + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" + } + } + }, + { + "ID": "3670", + "typeID": "Icon", + "zOrder": "96", + "measuredW": "24", + "measuredH": "24", + "x": "554", + "y": "973", + "properties": { + "icon": { + "ID": "check-circle", + "size": "small" }, - "rightArrow": "false" + "color": "3700253" } }, { - "ID": "2985", + "ID": "3671", "typeID": "__group__", - "zOrder": "266", - "measuredW": "160", + "zOrder": "93", + "measuredW": "108", "measuredH": "47", - "w": "160", + "w": "108", "h": "47", - "x": "119", - "y": "2523", + "x": "567", + "y": "910", "properties": { - "controlName": "103-monitoring:logs-management:loki" + "controlName": "100-vcs-hosting:github" }, "children": { "controls": { @@ -15609,11 +12979,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "149", + "w": "108", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "11", + "x": "0", "y": "0", "properties": { "color": "16770457" @@ -15623,62 +12993,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "32", + "measuredW": "54", "measuredH": "25", - "x": "70", + "x": "27", "y": "11", "properties": { - "text": "Loki", - "size": "17" - } - }, - { - "ID": "3", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "12", - "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" - } - } - } - ] - } + "size": "17", + "text": "GitHub" } } ] @@ -15686,17 +13007,17 @@ } }, { - "ID": "2986", + "ID": "3674", "typeID": "__group__", - "zOrder": "267", - "measuredW": "89", - "measuredH": "160", - "w": "89", - "h": "160", - "x": "853", - "y": "1564", + "zOrder": "94", + "measuredW": "112", + "measuredH": "47", + "w": "112", + "h": "47", + "x": "565", + "y": "961", "properties": { - "controlName": "104-infrastructure-as-code:gitops" + "controlName": "101-vcs-hosting:gitlab" }, "children": { "controls": { @@ -15705,24 +13026,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "89", - "h": "160", + "w": "112", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", - "y": "0" + "y": "0", + "properties": { + "color": "16770457" + } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "54", + "measuredW": "51", "measuredH": "25", - "x": "18", - "y": "123", + "x": "30", + "y": "11", "properties": { "size": "17", - "text": "GitOps" + "text": "GitLab" } } ] @@ -15730,17 +13054,17 @@ } }, { - "ID": "2987", + "ID": "3675", "typeID": "__group__", - "zOrder": "268", - "measuredW": "108", + "zOrder": "97", + "measuredW": "112", "measuredH": "47", - "w": "108", + "w": "112", "h": "47", - "x": "867", - "y": "1575", + "x": "565", + "y": "1012", "properties": { - "controlName": "100-infrastructure-as-code:gitops:argo-cd" + "controlName": "102-vcs-hosting:bitbucket" }, "children": { "controls": { @@ -15749,7 +13073,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "99", + "w": "112", "h": "47", "measuredW": "200", "measuredH": "140", @@ -15763,62 +13087,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "61", + "measuredW": "73", "measuredH": "25", - "x": "15", + "x": "21", "y": "11", "properties": { "size": "17", - "text": "ArgoCD" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "84", - "y": "12", - "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" - } - } - } - ] - } + "text": "Bitbucket" } } ] @@ -15826,17 +13101,17 @@ } }, { - "ID": "2988", + "ID": "3683", "typeID": "__group__", - "zOrder": "269", - "measuredW": "108", + "zOrder": "117", + "measuredW": "179", "measuredH": "47", - "w": "108", + "w": "179", "h": "47", - "x": "868", - "y": "1628", + "x": "466", + "y": "1259", "properties": { - "controlName": "101-infrastructure-as-code:gitops:flux-cd" + "controlName": "ext_link:roadmap.sh/docker" }, "children": { "controls": { @@ -15845,14 +13120,15 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "99", + "w": "167", "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "4273622", + "borderColor": "4273622" } }, { @@ -15861,78 +13137,62 @@ "zOrder": "1", "measuredW": "56", "measuredH": "25", - "x": "16", + "x": "56", "y": "11", "properties": { + "text": "Docker", "size": "17", - "text": "FluxCD" + "color": "16777215" } }, { "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "84", - "y": "10", - "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": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] + "typeID": "Icon", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "x": "155", + "y": "11", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" } } + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "155", + "y": "11", + "properties": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "4273622" + } } ] } } }, { - "ID": "2989", + "ID": "3684", "typeID": "__group__", - "zOrder": "270", - "measuredW": "140", - "measuredH": "162", - "w": "140", - "h": "162", - "x": "1027", - "y": "1563", + "zOrder": "205", + "measuredW": "226", + "measuredH": "47", + "w": "226", + "h": "47", + "x": "561", + "y": "1747", "properties": { - "controlName": "100-infrastructure-as-code:service-mesh" + "controlName": "109-serverless" }, "children": { "controls": { @@ -15941,23 +13201,26 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "140", - "h": "162", + "w": "226", + "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", - "y": "0" + "y": "0", + "properties": { + "color": "16776960" + } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "105", + "measuredW": "82", "measuredH": "25", - "x": "17", - "y": "122", + "x": "72", + "y": "11", "properties": { - "text": "Service Mesh", + "text": "Serverless", "size": "17" } } @@ -15966,17 +13229,17 @@ } }, { - "ID": "2990", + "ID": "3685", "typeID": "__group__", - "zOrder": "271", - "measuredW": "110", + "zOrder": "206", + "measuredW": "179", "measuredH": "47", - "w": "110", + "w": "179", "h": "47", - "x": "1101", - "y": "1575", + "x": "506", + "y": "1567", "properties": { - "controlName": "100-infrastructure-as-code:service-mesh:consul" + "controlName": "100-serverless:cloudflare" }, "children": { "controls": { @@ -15985,11 +13248,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "99", + "w": "168", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "11", "y": "0", "properties": { "color": "16770457" @@ -15999,13 +13262,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "54", + "measuredW": "79", "measuredH": "25", - "x": "25", + "x": "55", "y": "11", "properties": { - "text": "Consul", - "size": "17" + "size": "17", + "text": "Cloudflare" } }, { @@ -16016,7 +13279,7 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "86", + "x": "0", "y": "12", "children": { "controls": { @@ -16062,17 +13325,17 @@ } }, { - "ID": "2991", + "ID": "3686", "typeID": "__group__", - "zOrder": "272", - "measuredW": "107", + "zOrder": "207", + "measuredW": "159", "measuredH": "47", - "w": "107", + "w": "159", "h": "47", - "x": "989", - "y": "1575", + "x": "689", + "y": "1567", "properties": { - "controlName": "101-infrastructure-as-code:service-mesh:istio" + "controlName": "101-serverless:aws-lambda" }, "children": { "controls": { @@ -16081,11 +13344,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "99", + "w": "151", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "8", + "x": "0", "y": "0", "properties": { "color": "16770457" @@ -16095,13 +13358,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "33", + "measuredW": "102", "measuredH": "25", - "x": "40", - "y": "9", + "x": "19", + "y": "11", "properties": { - "text": "Istio", - "size": "17" + "size": "17", + "text": "AWS Lambda" } }, { @@ -16112,8 +13375,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "0", - "y": "10", + "x": "135", + "y": "13", "children": { "controls": { "control": [ @@ -16158,17 +13421,17 @@ } }, { - "ID": "2992", + "ID": "3687", "typeID": "__group__", - "zOrder": "273", - "measuredW": "109", + "zOrder": "208", + "measuredW": "179", "measuredH": "47", - "w": "109", + "w": "179", "h": "47", - "x": "1101", - "y": "1627", + "x": "506", + "y": "1617", "properties": { - "controlName": "102-infrastructure-as-code:service-mesh:envoy" + "controlName": "102-serverless:azure-functions" }, "children": { "controls": { @@ -16177,11 +13440,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "99", + "w": "168", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "11", "y": "0", "properties": { "color": "16770457" @@ -16191,13 +13454,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "47", + "measuredW": "124", "measuredH": "25", - "x": "29", + "x": "33", "y": "11", "properties": { - "text": "Envoy", - "size": "17" + "size": "17", + "text": "Azure Functions" } }, { @@ -16208,7 +13471,7 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "85", + "x": "0", "y": "12", "children": { "controls": { @@ -16238,27 +13501,11 @@ "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" - } + }, + "color": "3700253" } } ] @@ -16270,17 +13517,17 @@ } }, { - "ID": "2993", + "ID": "3688", "typeID": "__group__", - "zOrder": "274", - "measuredW": "108", + "zOrder": "209", + "measuredW": "159", "measuredH": "47", - "w": "108", + "w": "159", "h": "47", - "x": "988", - "y": "1626", + "x": "689", + "y": "1617", "properties": { - "controlName": "103-infrastructure-as-code:service-mesh:linkerd" + "controlName": "103-serverless:gcp-functions" }, "children": { "controls": { @@ -16289,11 +13536,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "99", + "w": "151", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "9", + "x": "0", "y": "0", "properties": { "color": "16770457" @@ -16303,13 +13550,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "58", + "measuredW": "116", "measuredH": "25", - "x": "32", + "x": "13", "y": "11", "properties": { - "text": "Linkerd", - "size": "17" + "size": "17", + "text": "GCP Functions" } }, { @@ -16320,8 +13567,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "0", - "y": "12", + "x": "135", + "y": "13", "children": { "controls": { "control": [ @@ -16350,27 +13597,11 @@ "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" - } + }, + "color": "3700253" } } ] @@ -16382,61 +13613,17 @@ } }, { - "ID": "2994", - "typeID": "__group__", - "zOrder": "275", - "measuredW": "237", - "measuredH": "202", - "w": "237", - "h": "202", - "x": "964", - "y": "1740", - "properties": { - "controlName": "105-infrastructure-as-code:secret-management" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "237", - "h": "202", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "158", - "measuredH": "25", - "x": "39", - "y": "10", - "properties": { - "size": "17", - "text": "Secret Management" - } - } - ] - } - } - }, - { - "ID": "2995", + "ID": "3689", "typeID": "__group__", - "zOrder": "276", - "measuredW": "108", + "zOrder": "210", + "measuredW": "179", "measuredH": "47", - "w": "108", + "w": "179", "h": "47", - "x": "971", - "y": "1783", + "x": "506", + "y": "1667", "properties": { - "controlName": "100-infrastructure-as-code:secret-management:vault" + "controlName": "104-serverless:vercel" }, "children": { "controls": { @@ -16445,11 +13632,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "99", + "w": "168", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "9", + "x": "11", "y": "0", "properties": { "color": "16770457" @@ -16459,13 +13646,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "38", + "measuredW": "48", "measuredH": "25", - "x": "40", + "x": "72", "y": "11", "properties": { "size": "17", - "text": "Vault" + "text": "Vercel" } }, { @@ -16506,11 +13693,11 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", "icon": { "ID": "check-circle", "size": "small" - } + }, + "color": "3700253" } } ] @@ -16522,17 +13709,17 @@ } }, { - "ID": "2996", + "ID": "3690", "typeID": "__group__", - "zOrder": "277", - "measuredW": "216", + "zOrder": "211", + "measuredW": "161", "measuredH": "47", - "w": "216", + "w": "161", "h": "47", - "x": "979", - "y": "1834", + "x": "689", + "y": "1667", "properties": { - "controlName": "102-infrastructure-as-code:secret-management:sealed-secrets" + "controlName": "105-serverless:netlify" }, "children": { "controls": { @@ -16541,7 +13728,7 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "205", + "w": "152", "h": "47", "measuredW": "200", "measuredH": "140", @@ -16555,13 +13742,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "117", + "measuredW": "49", "measuredH": "25", - "x": "44", - "y": "11", + "x": "51", + "y": "10", "properties": { "size": "17", - "text": "Sealed Secrets" + "text": "Netlify" } }, { @@ -16572,7 +13759,7 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "192", + "x": "137", "y": "12", "children": { "controls": { @@ -16606,55 +13793,11 @@ "ID": "check-circle", "size": "small" }, - "color": "3700253" - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "2997", - "typeID": "__group__", - "zOrder": "278", - "measuredW": "194", - "measuredH": "206", - "w": "194", - "h": "206", - "x": "747", - "y": "1962", - "properties": { - "controlName": "102-infrastructure-as-code:configuration-management" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "194", - "h": "206", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "155", - "measuredH": "25", - "x": "19", - "y": "12", - "properties": { - "size": "17", - "text": "Configuration Mgmt." + "color": "3700253" + } + } + ] + } } } ] @@ -16662,57 +13805,30 @@ } }, { - "ID": "2998", + "ID": "3691", "typeID": "__group__", - "zOrder": "279", - "measuredW": "163", + "zOrder": "171", + "measuredW": "200", "measuredH": "47", - "w": "163", + "w": "200", "h": "47", - "x": "764", - "y": "2008", + "x": "770", + "y": "2660", "properties": { - "controlName": "100-infrastructure-as-code:configuration-management:ansible" + "controlName": "ext_link:roadmap.sh/kubernetes" }, "children": { "controls": { "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "154", - "h": "47", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, { "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "56", - "measuredH": "25", - "x": "46", - "y": "11", - "properties": { - "text": "Ansible", - "size": "17" - } - }, - { - "ID": "2", "typeID": "__group__", "zOrder": "2", "measuredW": "24", "measuredH": "24", "w": "24", "h": "24", - "x": "139", + "x": "176", "y": "12", "children": { "controls": { @@ -16742,33 +13858,62 @@ "x": "0", "y": "0", "properties": { - "color": "10027263", "icon": { "ID": "check-circle", "size": "small" - } + }, + "color": "4273622" } } ] } } + }, + { + "ID": "2", + "typeID": "TextArea", + "zOrder": "0", + "w": "192", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "4273622", + "borderColor": "4273622" + } + }, + { + "ID": "3", + "typeID": "Label", + "zOrder": "1", + "measuredW": "90", + "measuredH": "25", + "x": "51", + "y": "11", + "properties": { + "size": "17", + "color": "16777215", + "text": "Kubernetes" + } } ] } } }, { - "ID": "2999", + "ID": "3692", "typeID": "__group__", - "zOrder": "280", - "measuredW": "162", - "measuredH": "47", - "w": "162", - "h": "47", - "x": "764", - "y": "2058", + "zOrder": "172", + "measuredW": "202", + "measuredH": "46", + "w": "202", + "h": "46", + "x": "773", + "y": "2396", "properties": { - "controlName": "101-infrastructure-as-code:configuration-management:chef" + "controlName": "101-containers:gke-eks-aks" }, "children": { "controls": { @@ -16777,8 +13922,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "154", - "h": "47", + "w": "193", + "h": "46", "measuredW": "200", "measuredH": "140", "x": "0", @@ -16791,13 +13936,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "37", + "measuredW": "133", "measuredH": "25", - "x": "56", - "y": "11", + "x": "30", + "y": "10", "properties": { - "text": "Chef", - "size": "17" + "size": "17", + "text": "GKE / EKS / AKS" } }, { @@ -16808,8 +13953,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "138", - "y": "12", + "x": "178", + "y": "11", "children": { "controls": { "control": [ @@ -16870,17 +14015,17 @@ } }, { - "ID": "3000", + "ID": "3693", "typeID": "__group__", - "zOrder": "281", - "measuredW": "163", - "measuredH": "47", - "w": "163", - "h": "47", - "x": "764", - "y": "2108", + "zOrder": "173", + "measuredW": "202", + "measuredH": "46", + "w": "202", + "h": "46", + "x": "773", + "y": "2446", "properties": { - "controlName": "103-infrastructure-as-code:configuration-management:puppet" + "controlName": "102-containers:ecs-fargate" }, "children": { "controls": { @@ -16889,8 +14034,8 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "154", - "h": "47", + "w": "193", + "h": "46", "measuredW": "200", "measuredH": "140", "x": "0", @@ -16903,13 +14048,13 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "56", + "measuredW": "150", "measuredH": "25", - "x": "47", - "y": "11", + "x": "16", + "y": "10", "properties": { - "text": "Puppet", - "size": "17" + "size": "17", + "text": "AWS ECS / Fargate" } }, { @@ -16920,8 +14065,8 @@ "measuredH": "24", "w": "24", "h": "24", - "x": "139", - "y": "12", + "x": "178", + "y": "11", "children": { "controls": { "control": [ @@ -16982,17 +14127,17 @@ } }, { - "ID": "3001", + "ID": "3694", "typeID": "__group__", - "zOrder": "282", - "measuredW": "113", + "zOrder": "234", + "measuredW": "235", "measuredH": "47", - "w": "113", + "w": "235", "h": "47", - "x": "1083", - "y": "1783", + "x": "1070", + "y": "2524", "properties": { - "controlName": "101-infrastructure-as-code:secret-management:sops" + "controlName": "118-artifcats" }, "children": { "controls": { @@ -17001,76 +14146,27 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "101", + "w": "235", "h": "47", "measuredW": "200", "measuredH": "140", "x": "0", "y": "0", "properties": { - "color": "16770457" + "color": "16776960" } }, { "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "45", + "measuredW": "162", "measuredH": "25", - "x": "29", + "x": "37", "y": "11", "properties": { "size": "17", - "text": "SOPS" - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "89", - "y": "12", - "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": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] - } + "text": "Artifact Management" } } ] @@ -17078,17 +14174,17 @@ } }, { - "ID": "3002", + "ID": "3695", "typeID": "__group__", - "zOrder": "283", - "measuredW": "216", + "zOrder": "139", + "measuredW": "126", "measuredH": "47", - "w": "216", + "w": "126", "h": "47", - "x": "979", - "y": "1885", + "x": "1060", + "y": "2398", "properties": { - "controlName": "103-infrastructure-as-code:secret-management:cloud-specific-tools" + "controlName": "100-artifcats:artifactory" }, "children": { "controls": { @@ -17097,11 +14193,11 @@ "ID": "0", "typeID": "TextArea", "zOrder": "0", - "w": "205", + "w": "116", "h": "47", "measuredW": "200", "measuredH": "140", - "x": "0", + "x": "10", "y": "0", "properties": { "color": "16770457" @@ -17111,182 +14207,124 @@ "ID": "1", "typeID": "Label", "zOrder": "1", - "measuredW": "154", + "measuredW": "79", "measuredH": "25", - "x": "25", + "x": "28", "y": "11", "properties": { "size": "17", - "text": "Cloud Specific Tools" + "text": "Artifactory" } }, { "ID": "2", - "typeID": "__group__", + "typeID": "Icon", "zOrder": "2", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "192", - "y": "12", - "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": { - "icon": { - "ID": "check-circle", - "size": "small" - }, - "color": "3700253" - } - } - ] + "x": "0", + "y": "11", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" } } - } - ] - } - } - }, - { - "ID": "3003", - "typeID": "Canvas", - "zOrder": "284", - "w": "420", - "h": "180", - "measuredW": "100", - "measuredH": "70", - "x": "59", - "y": "197" - }, - { - "ID": "3004", - "typeID": "Label", - "zOrder": "285", - "measuredW": "263", - "measuredH": "28", - "x": "78", - "y": "217", - "properties": { - "size": "20", - "text": "Featured DevOps Resources" + }, + { + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "0", + "y": "11", + "properties": { + "color": "10027263", + "icon": { + "ID": "check-circle", + "size": "small" + } + } + } + ] + } } }, { - "ID": "3005", + "ID": "3696", "typeID": "__group__", - "zOrder": "286", - "measuredW": "287", - "measuredH": "27", - "w": "287", - "h": "27", - "x": "75", - "y": "254", + "zOrder": "140", + "measuredW": "102", + "measuredH": "47", + "w": "102", + "h": "47", + "x": "1192", + "y": "2398", "properties": { - "controlName": "ext_link:www.digistore24.com/redir/350808/Roadmap/CAMPAIGNKEY" + "controlName": "101-artifcats:nexus" }, "children": { "controls": { "control": [ { "ID": "0", - "typeID": "Label", + "typeID": "TextArea", "zOrder": "0", - "measuredW": "212", - "measuredH": "25", - "x": "34", + "w": "90", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "0", "y": "0", "properties": { - "size": "17", - "text": "DevOps Bootcamp by Nana" + "color": "16770457" } }, { "ID": "1", - "typeID": "__group__", + "typeID": "Label", "zOrder": "1", + "measuredW": "49", + "measuredH": "25", + "x": "18", + "y": "11", + "properties": { + "size": "17", + "text": "Nexus" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "3", - "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": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "x": "78", + "y": "11", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" } } }, { - "ID": "2", - "typeID": "Label", - "zOrder": "2", - "measuredW": "34", - "measuredH": "25", - "x": "253", - "y": "0", + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "78", + "y": "11", "properties": { - "color": "10027263", - "size": "17", - "text": "Paid" + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "3700253" } } ] @@ -17294,163 +14332,78 @@ } }, { - "ID": "3006", - "typeID": "Canvas", - "zOrder": "287", - "w": "420", - "h": "89", - "measuredW": "100", - "measuredH": "70", - "x": "59", - "y": "326" - }, - { - "ID": "3007", - "typeID": "Label", - "zOrder": "288", - "measuredW": "372", - "measuredH": "25", - "x": "78", - "y": "372", - "properties": { - "size": "17", - "text": "from these help offset roadmap.sh running costs." - } - }, - { - "ID": "3008", - "typeID": "Label", - "zOrder": "289", - "measuredW": "337", - "measuredH": "25", - "x": "78", - "y": "344", - "properties": { - "size": "17", - "text": "These are affiliate links. Revenue generated" - } - }, - { - "ID": "3009", - "typeID": "Arrow", - "zOrder": "290", - "w": "96", - "h": "3", - "measuredW": "150", - "measuredH": "100", - "x": "40", - "y": "436", - "properties": { - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0, - "y": -0.5 - }, - "p1": { - "x": 0.38117461229178634, - "y": -0.010697874784606601 - }, - "p2": { - "x": 96, - "y": 2 - }, - "color": "16777215" - } - }, - { - "ID": "3010", + "ID": "3697", "typeID": "__group__", - "zOrder": "291", - "measuredW": "298", - "measuredH": "27", - "w": "298", - "h": "27", - "x": "76", - "y": "284", + "zOrder": "141", + "measuredW": "222", + "measuredH": "47", + "w": "222", + "h": "47", + "x": "1071", + "y": "2450", "properties": { - "controlName": "ext_link:kodekloud.com?aff=kamranahmed.se" + "controlName": "102-artifcats:cloud-smith" }, "children": { "controls": { "control": [ { "ID": "0", - "typeID": "Label", + "typeID": "TextArea", "zOrder": "0", - "measuredW": "220", - "measuredH": "25", - "x": "34", + "w": "213", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "0", "y": "0", "properties": { - "size": "17", - "text": "KodeCloud DevOps Courses" + "color": "16770457" } }, { "ID": "1", - "typeID": "__group__", + "typeID": "Label", "zOrder": "1", + "measuredW": "92", + "measuredH": "25", + "x": "54", + "y": "11", + "properties": { + "size": "17", + "text": "Cloud Smith" + } + }, + { + "ID": "2", + "typeID": "Icon", + "zOrder": "2", "measuredW": "24", "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "3", - "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": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] + "x": "198", + "y": "12", + "properties": { + "color": "16777215", + "icon": { + "ID": "circle", + "size": "small" } } }, { - "ID": "2", - "typeID": "Label", - "zOrder": "2", - "measuredW": "34", - "measuredH": "25", - "x": "264", - "y": "0", + "ID": "3", + "typeID": "Icon", + "zOrder": "3", + "measuredW": "24", + "measuredH": "24", + "x": "198", + "y": "12", "properties": { - "color": "10027263", - "size": "17", - "text": "Paid" + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "3700253" } } ] @@ -17460,17 +14413,17 @@ ] }, "attributes": { - "name": "New Wireframe 9 copy", - "order": 1000116.0868550346, + "name": "New Wireframe 9 copy 9", + "order": 1000122.1496095511, "parentID": null, "notes": null }, "branchID": "Master", - "resourceID": "73A38172-E66F-4B8C-9525-DB6AC79E153D", - "mockupH": "2977", - "mockupW": "1183", - "measuredW": "1223", - "measuredH": "3028", + "resourceID": "79F28487-0686-45F5-AAE9-1EB0FBE95283", + "mockupH": "3273", + "mockupW": "1241", + "measuredW": "1388", + "measuredH": "3317", "version": "1.0" }, "groupOffset": { From 9c936974c709c63d8f75c1e514cdcddc5b28ddd7 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Sat, 10 Jun 2023 04:01:41 +0100 Subject: [PATCH 13/48] Add devops beginner roadmap --- .../101-operating-systems/linux/100-ubuntu.md | 7 +- .../content/103-networking-protocols/index.md | 36 +- .../content/117-containers/103-docker.md | 9 + src/data/roadmaps/devops/devops-beginner.json | 2448 +++++++++++++++++ .../roadmaps/frontend/frontend-beginner.json | 2 +- 5 files changed, 2493 insertions(+), 9 deletions(-) create mode 100644 src/data/roadmaps/devops/content/117-containers/103-docker.md create mode 100644 src/data/roadmaps/devops/devops-beginner.json diff --git a/src/data/roadmaps/devops/content/101-operating-systems/linux/100-ubuntu.md b/src/data/roadmaps/devops/content/101-operating-systems/linux/100-ubuntu.md index 83665b68c..b1aafb4fb 100644 --- a/src/data/roadmaps/devops/content/101-operating-systems/linux/100-ubuntu.md +++ b/src/data/roadmaps/devops/content/101-operating-systems/linux/100-ubuntu.md @@ -7,10 +7,7 @@ Ubuntu is a free and open-source Linux distribution based on Debian. Ubuntu is a Visit the following resources to learn more: - [Debian Website](https://www.debian.org/) -- [Official Debian Documentation](https://www.debian.org/doc/) -- [Debian Installation Guide](https://www.debian.org/releases/stable/installmanual) - [Ubuntu Website](https://ubuntu.com/) -- [Ubuntu Documentation](https://help.ubuntu.com/) -- [Install Ubuntu Desktop Documentation](https://ubuntu.com/tutorials/install-ubuntu-desktop#1-overview) -- [Getting Started with Ubuntu Tutorials](https://itsfoss.com/getting-started-with-ubuntu/) +- [Learn the ways of Linux-fu, for free](https://linuxjourney.com/) +- [Linux Operating System - Crash Course for Beginners](https://www.youtube.com/watch?v=ROjZy1WbCIA) - [The Linux Command Line by William Shotts](https://linuxcommand.org/tlcl.php) diff --git a/src/data/roadmaps/devops/content/103-networking-protocols/index.md b/src/data/roadmaps/devops/content/103-networking-protocols/index.md index 6c08dc469..061ad0beb 100644 --- a/src/data/roadmaps/devops/content/103-networking-protocols/index.md +++ b/src/data/roadmaps/devops/content/103-networking-protocols/index.md @@ -1,7 +1,37 @@ # Networking Protocols -A network protocol is an established set of rules that determine how data is transmitted between different devices in the same network. Essentially, it allows connected devices to communicate with each other, regardless of any differences in their internal processes, structure or design. Network protocols are the reason you can easily communicate with people all over the world, and thus play a critical role in modern digital communications. +As a DevOps engineer you will need to understand the basics of networking protocols, how they work, and how they are used in the real world. To get you started, you should learn about, [TCP/IP](https://en.wikipedia.org/wiki/Internet_protocol_suite), [HTTP](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol), [HTTPS](https://en.wikipedia.org/wiki/HTTPS), [FTP](https://en.wikipedia.org/wiki/File_Transfer_Protocol), [SSH](https://en.wikipedia.org/wiki/Secure_Shell), [SMTP](https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol), [DNS](https://en.wikipedia.org/wiki/Domain_Name_System), [DHCP](https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol), [NTP](https://en.wikipedia.org/wiki/Network_Time_Protocol). + +Here are some of the resources to learn about SSH: + +- [SSH Intro](https://www.baeldung.com/cs/ssh-intro) +- [What is SSH?](https://www.ssh.com/academy/ssh/protocol) +- [SFTP using SSH](https://www.goanywhere.com/blog/how-sftp-works) + +Visit the following to learn about SSL/TLS: + +- [Cloudflare - What is SSL?](https://www.cloudflare.com/learning/ssl/what-is-ssl/) +- [Cloudflare - What is TLS?](https://www.cloudflare.com/en-gb/learning/ssl/transport-layer-security-tls/) +- [Wikipedia - SSL/TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) +- [SSH vs SSL vs TLS](https://www.youtube.com/watch?v=k3rFFLmQCuY) + +Learn about HTTP and HTTPS: + +- [Everything you need to know about HTTP](https://cs.fyi/guide/http-in-depth) +- [What is HTTP?](https://www.cloudflare.com/en-gb/learning/ddos/glossary/hypertext-transfer-protocol-http/) +- [An overview of HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview) +- [HTTP/3 From A To Z: Core Concepts](https://www.smashingmagazine.com/2021/08/http3-core-concepts-part1/) +- [HTTP Crash Course & Exploration](https://www.youtube.com/watch?v=iYM2zFP3Zn0) +- [What is HTTPS?](https://www.cloudflare.com/en-gb/learning/ssl/what-is-https/) +- [Why HTTPS Matters](https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https) +- [Enabling HTTPS on Your Servers](https://developers.google.com/web/fundamentals/security/encrypt-in-transit/enable-https) +- [How HTTPS works (comic)](https://howhttps.works/) + +Here are some resources to learn about DNS: + +- [What is DNS?](https://www.cloudflare.com/en-gb/learning/dns/what-is-dns/) +- [HOw DNS works (comic)](https://howdns.works/) +- [DNS and How does it Work?](https://www.youtube.com/watch?v=Wj0od2ag5sk) +- [DNS Records](https://www.youtube.com/watch?v=7lxgpKh_fRY) -Visit the following resources to learn more: -- [What Is a Network Protocol, and How Does It Work?](https://www.comptia.org/content/guides/what-is-a-network-protocol) diff --git a/src/data/roadmaps/devops/content/117-containers/103-docker.md b/src/data/roadmaps/devops/content/117-containers/103-docker.md new file mode 100644 index 000000000..42b0608cb --- /dev/null +++ b/src/data/roadmaps/devops/content/117-containers/103-docker.md @@ -0,0 +1,9 @@ +# Docker + +Docker is a platform for working with containerized applications. Among its features are a daemon and client for managing and interacting with containers, registries for storing images, and a desktop application to package all these features together. + +Visit the following resources to learn more: + +- [Docker Documentation](https://docs.docker.com/) +- [Docker Tutorial](https://www.youtube.com/watch?v=RqTEHSBrYFw) +- [Docker simplified in 55 seconds](https://youtu.be/vP_4DlOH1G4) diff --git a/src/data/roadmaps/devops/devops-beginner.json b/src/data/roadmaps/devops/devops-beginner.json new file mode 100644 index 000000000..cdd71636a --- /dev/null +++ b/src/data/roadmaps/devops/devops-beginner.json @@ -0,0 +1,2448 @@ +{ + "mockup": { + "controls": { + "control": [ + { + "ID": "4658", + "typeID": "Arrow", + "zOrder": "8", + "w": "1", + "h": "274", + "measuredW": "150", + "measuredH": "100", + "x": "839", + "y": "237", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "3700253", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.49999999999999994, + "y": 0 + }, + "p2": { + "x": 0, + "y": 273.8013976527985 + } + } + }, + { + "ID": "4659", + "typeID": "Label", + "zOrder": "9", + "measuredW": "116", + "measuredH": "40", + "x": "782", + "y": "179", + "properties": { + "size": "32", + "text": "DevOps" + } + }, + { + "ID": "4668", + "typeID": "Canvas", + "zOrder": "10", + "w": "350", + "h": "141", + "measuredW": "100", + "measuredH": "70", + "x": "1050", + "y": "51" + }, + { + "ID": "4669", + "typeID": "Label", + "zOrder": "11", + "measuredW": "314", + "measuredH": "25", + "x": "1064", + "y": "68", + "properties": { + "size": "17", + "text": "Find the detailed version of this roadmap" + } + }, + { + "ID": "4670", + "typeID": "Label", + "zOrder": "12", + "measuredW": "319", + "measuredH": "25", + "x": "1064", + "y": "96", + "properties": { + "size": "17", + "text": "along with resources and other roadmaps" + } + }, + { + "ID": "4671", + "typeID": "__group__", + "zOrder": "13", + "measuredW": "320", + "measuredH": "45", + "w": "320", + "h": "45", + "x": "1065", + "y": "132", + "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": "__group__", + "zOrder": "1", + "measuredW": "181", + "measuredH": "29", + "w": "181", + "h": "29", + "x": "65", + "y": "8", + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "105", + "measuredH": "28", + "x": "76", + "y": "0", + "properties": { + "color": "16777215", + "size": "20", + "text": "roadmap.sh" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "45", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "color": "16777215", + "size": "20", + "text": "https" + } + }, + { + "ID": "2", + "typeID": "Label", + "zOrder": "2", + "measuredW": "5", + "measuredH": "28", + "x": "48", + "y": "0", + "properties": { + "bold": "true", + "color": "16777215", + "size": "20", + "text": ":" + } + }, + { + "ID": "3", + "typeID": "Label", + "zOrder": "3", + "measuredW": "10", + "measuredH": "28", + "x": "55", + "y": "1", + "properties": { + "color": "16777215", + "size": "20", + "text": "/" + } + }, + { + "ID": "4", + "typeID": "Label", + "zOrder": "4", + "measuredW": "10", + "measuredH": "28", + "x": "63", + "y": "1", + "properties": { + "color": "16777215", + "size": "20", + "text": "/" + } + } + ] + } + } + } + ] + } + } + }, + { + "ID": "4675", + "typeID": "__group__", + "zOrder": "14", + "measuredW": "332", + "measuredH": "50", + "w": "332", + "h": "50", + "x": "676", + "y": "323", + "properties": { + "controlName": "100-language" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "332", + "h": "50", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "249", + "measuredH": "25", + "x": "41", + "y": "12", + "properties": { + "size": "17", + "text": "Learn a Programming Language" + } + } + ] + } + } + }, + { + "ID": "4677", + "typeID": "__group__", + "zOrder": "15", + "measuredW": "163", + "measuredH": "49", + "w": "163", + "h": "49", + "x": "1107", + "y": "296", + "properties": { + "controlName": "100-language:python" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "153", + "h": "49", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "53", + "measuredH": "25", + "x": "50", + "y": "12", + "properties": { + "text": "Python", + "size": "17" + } + }, + { + "ID": "2", + "typeID": "__group__", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "139", + "y": "13", + "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": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "3700253" + } + } + ] + } + } + } + ] + } + } + }, + { + "ID": "4679", + "typeID": "__group__", + "zOrder": "16", + "measuredW": "164", + "measuredH": "47", + "w": "164", + "h": "47", + "x": "1107", + "y": "350", + "properties": { + "controlName": "103-language:go" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "152", + "h": "47", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457", + "textColor": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "23", + "measuredH": "25", + "x": "64", + "y": "11", + "properties": { + "size": "17", + "text": "Go" + } + }, + { + "ID": "2", + "typeID": "__group__", + "zOrder": "2", + "measuredW": "24", + "measuredH": "24", + "w": "24", + "h": "24", + "x": "140", + "y": "12", + "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": { + "icon": { + "ID": "check-circle", + "size": "small" + }, + "color": "3700253" + } + } + ] + } + } + } + ] + } + } + }, + { + "ID": "4681", + "typeID": "Arrow", + "zOrder": "17", + "w": "1", + "h": "115", + "measuredW": "150", + "measuredH": "100", + "x": "839", + "y": "44", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "stroke": "dotted", + "p0": { + "x": 0, + "y": -0.06060606060606233 + }, + "p1": { + "x": 0.5, + "y": 0 + }, + "p2": { + "x": 0, + "y": 114.9603156901461 + } + } + }, + { + "ID": "4850", + "typeID": "Arrow", + "zOrder": "6", + "h": "26", + "measuredW": "150", + "measuredH": "100", + "x": "972", + "y": "354", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "p0": { + "x": 150.42424242424227, + "y": 25.545454545454504 + }, + "p1": { + "x": 0.32960554306205536, + "y": -0.04777244271561415 + }, + "p2": { + "x": 0.42424242424237946, + "y": -0.21212121212124657 + }, + "stroke": "dotted" + } + }, + { + "ID": "4871", + "typeID": "Canvas", + "zOrder": "18", + "w": "420", + "h": "151", + "measuredW": "100", + "measuredH": "70", + "x": "194", + "y": "51" + }, + { + "ID": "4872", + "typeID": "__group__", + "zOrder": "19", + "measuredW": "374", + "measuredH": "47", + "w": "374", + "h": "47", + "x": "214", + "y": "140", + "properties": { + "controlName": "json:devops.json" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Canvas", + "zOrder": "0", + "w": "374", + "h": "47", + "measuredW": "100", + "measuredH": "70", + "x": "0", + "y": "0", + "properties": { + "borderColor": "3355443", + "color": "3355443" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "203", + "measuredH": "26", + "x": "85", + "y": "11", + "properties": { + "color": "16777215", + "size": "18", + "text": "Visit the Detailed Version" + } + } + ] + } + } + }, + { + "ID": "4873", + "typeID": "Label", + "zOrder": "20", + "measuredW": "370", + "measuredH": "26", + "x": "214", + "y": "74", + "properties": { + "color": "4985136", + "size": "18", + "text": "If you already have some DevOps experience," + } + }, + { + "ID": "4874", + "typeID": "Label", + "zOrder": "21", + "measuredW": "338", + "measuredH": "26", + "x": "214", + "y": "104", + "properties": { + "color": "4985136", + "size": "18", + "text": "visit the detailed version with more topics." + } + }, + { + "ID": "4875", + "typeID": "Arrow", + "zOrder": "7", + "w": "142", + "h": "25", + "measuredW": "150", + "measuredH": "100", + "x": "971", + "y": "319", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "2848996", + "p0": { + "x": 142.33333333333326, + "y": -0.06060606060606233 + }, + "p1": { + "x": 0.4364276286845581, + "y": 0.06401231852177729 + }, + "p2": { + "x": -0.09090909090912191, + "y": 24.181818181818187 + }, + "stroke": "dotted" + } + }, + { + "ID": "4877", + "typeID": "Label", + "zOrder": "22", + "measuredW": "438", + "measuredH": "26", + "x": "898", + "y": "493", + "properties": { + "color": "4985136", + "size": "18", + "text": "You can pick any programming language. The purpose" + } + }, + { + "ID": "4878", + "typeID": "Label", + "zOrder": "23", + "measuredW": "431", + "measuredH": "26", + "x": "898", + "y": "525", + "properties": { + "color": "4985136", + "size": "18", + "text": "behind the language is to be able to write automation" + } + }, + { + "ID": "4879", + "typeID": "Label", + "zOrder": "24", + "measuredW": "288", + "measuredH": "26", + "x": "898", + "y": "557", + "properties": { + "color": "4985136", + "size": "18", + "text": "scripts to automate repetitive tasks." + } + }, + { + "ID": "4880", + "typeID": "Label", + "zOrder": "25", + "measuredW": "356", + "measuredH": "32", + "x": "898", + "y": "445", + "properties": { + "color": "4985136", + "size": "24", + "text": "Pick any Programming Language" + } + }, + { + "ID": "4881", + "typeID": "Arrow", + "zOrder": "26", + "w": "1", + "h": "79", + "measuredW": "150", + "measuredH": "100", + "x": "839", + "y": "529", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 0, + "y": 79.12121212121212 + } + } + }, + { + "ID": "4882", + "typeID": "Arrow", + "zOrder": "27", + "w": "72", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "766", + "y": "567", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0.27272727272725206, + "y": -0.36363636363637397 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 72, + "y": -0.36363636363637397 + } + } + }, + { + "ID": "4883", + "typeID": "Label", + "zOrder": "28", + "measuredW": "451", + "measuredH": "26", + "x": "173", + "y": "307", + "properties": { + "color": "4985136", + "size": "18", + "text": "DevOps is all about bringing developers and operations" + } + }, + { + "ID": "4884", + "typeID": "Label", + "zOrder": "29", + "measuredW": "473", + "measuredH": "26", + "x": "151", + "y": "338", + "properties": { + "color": "4985136", + "size": "18", + "text": "teams together to improve software delivery. The key focus" + } + }, + { + "ID": "4885", + "typeID": "Label", + "zOrder": "30", + "measuredW": "422", + "measuredH": "26", + "x": "202", + "y": "369", + "properties": { + "color": "4985136", + "size": "18", + "text": "areas are automation, infrastructure and monitoring." + } + }, + { + "ID": "4886", + "typeID": "Label", + "zOrder": "31", + "measuredW": "185", + "measuredH": "32", + "x": "439", + "y": "259", + "properties": { + "color": "4985136", + "size": "24", + "text": "What is DevOps?" + } + }, + { + "ID": "4888", + "typeID": "Label", + "zOrder": "32", + "measuredW": "400", + "measuredH": "26", + "x": "224", + "y": "418", + "properties": { + "size": "18", + "color": "3700253", + "text": "For further details, have a look at the FAQs below." + } + }, + { + "ID": "4889", + "typeID": "__group__", + "zOrder": "33", + "measuredW": "102", + "measuredH": "49", + "w": "102", + "h": "49", + "x": "676", + "y": "543", + "properties": { + "controlName": "100-operating-systems:linux:ubuntu" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "102", + "h": "49", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "41", + "measuredH": "25", + "x": "30", + "y": "12", + "properties": { + "size": "17", + "text": "Linux" + } + } + ] + } + } + }, + { + "ID": "4890", + "typeID": "Label", + "zOrder": "34", + "measuredW": "473", + "measuredH": "26", + "x": "151", + "y": "496", + "properties": { + "color": "4985136", + "size": "18", + "text": "Learn about the file system, package managers, managing" + } + }, + { + "ID": "4891", + "typeID": "Label", + "zOrder": "35", + "measuredW": "469", + "measuredH": "26", + "x": "155", + "y": "526", + "properties": { + "color": "4985136", + "size": "18", + "text": "services, checking logs, bash scripting, permissions, pipes" + } + }, + { + "ID": "4892", + "typeID": "Label", + "zOrder": "36", + "measuredW": "437", + "measuredH": "26", + "x": "187", + "y": "556", + "properties": { + "color": "4985136", + "size": "18", + "text": "output redirection, common tools for text manipulation" + } + }, + { + "ID": "4894", + "typeID": "Label", + "zOrder": "37", + "measuredW": "429", + "measuredH": "26", + "x": "197", + "y": "586", + "properties": { + "color": "4985136", + "size": "18", + "text": "process monitoring, networking tools, CLI editors etc." + } + }, + { + "ID": "4895", + "typeID": "Label", + "zOrder": "38", + "measuredW": "388", + "measuredH": "26", + "x": "236", + "y": "633", + "properties": { + "size": "18", + "color": "10027263", + "text": "Pick Ubuntu if you have a little to no experience." + } + }, + { + "ID": "4896", + "typeID": "Arrow", + "zOrder": "39", + "w": "1", + "h": "97", + "measuredW": "150", + "measuredH": "100", + "x": "839", + "y": "624", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "3700253", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.5, + "y": 0 + }, + "p2": { + "x": 0, + "y": 97.35494995908607 + } + } + }, + { + "ID": "4897", + "typeID": "Arrow", + "zOrder": "40", + "w": "72", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "840", + "y": "656", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0.27272727272725206, + "y": -0.36363636363637397 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 72, + "y": -0.36363636363637397 + }, + "color": "3700253" + } + }, + { + "ID": "4898", + "typeID": "__group__", + "zOrder": "41", + "measuredW": "238", + "measuredH": "49", + "w": "238", + "h": "49", + "x": "898", + "y": "632", + "properties": { + "controlName": "108-networking-protocols" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "__group__", + "zOrder": "0", + "measuredW": "238", + "measuredH": "49", + "w": "238", + "h": "49", + "x": "0", + "y": "0", + "properties": { + "controlName": "103-networking-protocols" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "238", + "h": "49", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + } + ] + } + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "197", + "measuredH": "25", + "x": "20", + "y": "12", + "properties": { + "size": "17", + "text": "Networking and Protocols" + } + } + ] + } + } + }, + { + "ID": "4899", + "typeID": "Label", + "zOrder": "42", + "measuredW": "467", + "measuredH": "26", + "x": "898", + "y": "742", + "properties": { + "color": "4985136", + "size": "18", + "text": "Learn about DNS, TCP/IP Protocols, SSH, ports, gateways," + } + }, + { + "ID": "4900", + "typeID": "Label", + "zOrder": "43", + "measuredW": "338", + "measuredH": "26", + "x": "898", + "y": "771", + "properties": { + "color": "4985136", + "size": "18", + "text": "routing, ip addressing, and subnetting etc." + } + }, + { + "ID": "4901", + "typeID": "Label", + "zOrder": "44", + "measuredW": "474", + "measuredH": "26", + "x": "898", + "y": "818", + "properties": { + "size": "18", + "color": "3700253", + "text": "This will come in handy with deployments / troubleshooting" + } + }, + { + "ID": "4902", + "typeID": "Arrow", + "zOrder": "45", + "w": "1", + "h": "117", + "measuredW": "150", + "measuredH": "100", + "x": "839", + "y": "738", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.49999999999999994, + "y": 0 + }, + "p2": { + "x": 0, + "y": 117.34935324061723 + } + } + }, + { + "ID": "4903", + "typeID": "Arrow", + "zOrder": "46", + "w": "72", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "766", + "y": "788", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0.27272727272725206, + "y": -0.36363636363637397 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 72, + "y": -0.36363636363637397 + } + } + }, + { + "ID": "4904", + "typeID": "__group__", + "zOrder": "47", + "measuredW": "102", + "measuredH": "49", + "w": "102", + "h": "49", + "x": "676", + "y": "764", + "properties": { + "controlName": "103-containers:docker" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "102", + "h": "49", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "56", + "measuredH": "25", + "x": "23", + "y": "12", + "properties": { + "size": "17", + "text": "Docker" + } + } + ] + } + } + }, + { + "ID": "4905", + "typeID": "Label", + "zOrder": "48", + "measuredW": "425", + "measuredH": "26", + "x": "199", + "y": "725", + "properties": { + "color": "4985136", + "size": "18", + "text": "Learn about containerization. Be comfortable writing" + } + }, + { + "ID": "4906", + "typeID": "Label", + "zOrder": "49", + "measuredW": "472", + "measuredH": "26", + "x": "152", + "y": "755", + "properties": { + "color": "4985136", + "size": "18", + "text": "Docker files. Learn about troubleshooting. Get familiar with" + } + }, + { + "ID": "4907", + "typeID": "Label", + "zOrder": "50", + "measuredW": "442", + "measuredH": "26", + "x": "182", + "y": "785", + "properties": { + "color": "4985136", + "size": "18", + "text": "Alpine Linux. Learn about networking, storage, security." + } + }, + { + "ID": "4908", + "typeID": "Label", + "zOrder": "51", + "measuredW": "457", + "measuredH": "26", + "x": "167", + "y": "831", + "properties": { + "size": "18", + "color": "10027263", + "text": "Learn docker networking, storage, security, performance." + } + }, + { + "ID": "4909", + "typeID": "Arrow", + "zOrder": "52", + "w": "1", + "h": "107", + "measuredW": "150", + "measuredH": "100", + "x": "839", + "y": "870", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "3700253", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.49999999999999983, + "y": 0 + }, + "p2": { + "x": 0, + "y": 106.92694925075432 + } + } + }, + { + "ID": "4910", + "typeID": "__group__", + "zOrder": "53", + "measuredW": "102", + "measuredH": "49", + "w": "102", + "h": "49", + "x": "676", + "y": "909", + "properties": { + "controlName": "100-version-control-systems:git" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "102", + "h": "49", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "22", + "measuredH": "25", + "x": "40", + "y": "12", + "properties": { + "size": "17", + "text": "Git" + } + } + ] + } + } + }, + { + "ID": "4911", + "typeID": "Arrow", + "zOrder": "5", + "w": "79", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "759", + "y": "933", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "3700253", + "p0": { + "x": -0.35538425356764947, + "y": -0.36363636363637397 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 79, + "y": -0.36363636363637397 + } + } + }, + { + "ID": "4912", + "typeID": "Label", + "zOrder": "54", + "measuredW": "424", + "measuredH": "26", + "x": "200", + "y": "903", + "properties": { + "color": "4985136", + "size": "18", + "text": "DevOps teams usually practice \"git ops,\" i.e., making " + } + }, + { + "ID": "4914", + "typeID": "Label", + "zOrder": "55", + "measuredW": "454", + "measuredH": "26", + "x": "170", + "y": "933", + "properties": { + "color": "4985136", + "size": "18", + "text": "changes to your CI/CD pipeline, infrastructure, or server" + } + }, + { + "ID": "4915", + "typeID": "Label", + "zOrder": "56", + "measuredW": "432", + "measuredH": "26", + "x": "192", + "y": "964", + "properties": { + "color": "4985136", + "size": "18", + "text": "provisioning will involve making a pull request against" + } + }, + { + "ID": "4916", + "typeID": "Label", + "zOrder": "57", + "measuredW": "239", + "measuredH": "26", + "x": "385", + "y": "994", + "properties": { + "color": "4985136", + "size": "18", + "text": "the appropriate git repository." + } + }, + { + "ID": "4917", + "typeID": "Label", + "zOrder": "58", + "measuredW": "342", + "measuredH": "26", + "x": "282", + "y": "1044", + "properties": { + "size": "18", + "color": "3700253", + "text": "Learn about git, create your GitHub profile." + } + }, + { + "ID": "4919", + "typeID": "__group__", + "zOrder": "59", + "measuredW": "105", + "measuredH": "49", + "w": "105", + "h": "49", + "x": "898", + "y": "990", + "properties": { + "controlName": "100-cloud-providers:aws" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "105", + "h": "49", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "36", + "measuredH": "25", + "x": "35", + "y": "12", + "properties": { + "text": "AWS", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "4920", + "typeID": "Arrow", + "zOrder": "60", + "w": "1", + "h": "133", + "measuredW": "150", + "measuredH": "100", + "x": "839", + "y": "988", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.5, + "y": 0 + }, + "p2": { + "x": 0, + "y": 133.20096811109102 + } + } + }, + { + "ID": "4921", + "typeID": "Arrow", + "zOrder": "4", + "w": "72", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "840", + "y": "1015", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0.27272727272725206, + "y": -0.36363636363637397 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 72, + "y": -0.36363636363637397 + }, + "color": "10027263" + } + }, + { + "ID": "4924", + "typeID": "Label", + "zOrder": "61", + "measuredW": "415", + "measuredH": "26", + "x": "898", + "y": "1067", + "properties": { + "color": "4985136", + "size": "18", + "text": "Pick one of the cloud providers AWS, GCP or Azure." + } + }, + { + "ID": "4925", + "typeID": "Label", + "zOrder": "62", + "measuredW": "436", + "measuredH": "26", + "x": "898", + "y": "1096", + "properties": { + "color": "4985136", + "size": "18", + "text": "Start with core services e.g. in AWS VPC, EC2, S3, IAM" + } + }, + { + "ID": "4926", + "typeID": "Label", + "zOrder": "63", + "measuredW": "414", + "measuredH": "26", + "x": "898", + "y": "1124", + "properties": { + "color": "4985136", + "size": "18", + "text": "and later RDS, Route53, Cloudwatch, ECS, EKS etc." + } + }, + { + "ID": "4927", + "typeID": "Label", + "zOrder": "64", + "measuredW": "420", + "measuredH": "26", + "x": "898", + "y": "1165", + "properties": { + "size": "18", + "color": "10027263", + "text": "Create and deploy some dummy application to AWS." + } + }, + { + "ID": "4928", + "typeID": "__group__", + "zOrder": "65", + "measuredW": "123", + "measuredH": "49", + "w": "123", + "h": "49", + "x": "664", + "y": "1157", + "properties": { + "controlName": "103-infrastructure-provisioning:terraform" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "123", + "h": "49", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "w": "75", + "measuredW": "75", + "measuredH": "25", + "x": "24", + "y": "12", + "properties": { + "text": "Terraform", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "4930", + "typeID": "Arrow", + "zOrder": "66", + "w": "1", + "h": "110", + "measuredW": "150", + "measuredH": "100", + "x": "839", + "y": "1134", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "3700253", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.4999999999999997, + "y": 0 + }, + "p2": { + "x": 0, + "y": 110.23786879464456 + } + } + }, + { + "ID": "4931", + "typeID": "Arrow", + "zOrder": "3", + "w": "79", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "758", + "y": "1181", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "3700253", + "p0": { + "x": -0.35538425356764947, + "y": -0.36363636363637397 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 79, + "y": -0.36363636363637397 + } + } + }, + { + "ID": "4933", + "typeID": "Label", + "zOrder": "67", + "measuredW": "460", + "measuredH": "26", + "x": "164", + "y": "1141", + "properties": { + "color": "4985136", + "size": "18", + "text": "Learn what “Infrastructure as Code” means. Learn about" + } + }, + { + "ID": "4934", + "typeID": "Label", + "zOrder": "68", + "measuredW": "439", + "measuredH": "26", + "x": "185", + "y": "1171", + "properties": { + "color": "4985136", + "size": "18", + "text": "terraform and how to automate infrastructure creation." + } + }, + { + "ID": "4936", + "typeID": "Label", + "zOrder": "69", + "measuredW": "437", + "measuredH": "26", + "x": "187", + "y": "1223", + "properties": { + "size": "18", + "color": "3700253", + "text": "If you deployed an application to AWS in previous step" + } + }, + { + "ID": "4937", + "typeID": "Label", + "zOrder": "70", + "measuredW": "444", + "measuredH": "26", + "x": "180", + "y": "1253", + "properties": { + "size": "18", + "color": "3700253", + "text": "destroy the infrastructure and create it using terraform." + } + }, + { + "ID": "4938", + "typeID": "Arrow", + "zOrder": "71", + "w": "1", + "h": "75", + "measuredW": "150", + "measuredH": "100", + "x": "839", + "y": "1254", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.49999999999999994, + "y": 0 + }, + "p2": { + "x": 0, + "y": 75.17754491730079 + } + } + }, + { + "ID": "4940", + "typeID": "__group__", + "zOrder": "72", + "measuredW": "108", + "measuredH": "49", + "w": "108", + "h": "49", + "x": "898", + "y": "1259", + "properties": { + "controlName": "100-configuration-management:ansible" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "108", + "h": "49", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "56", + "measuredH": "25", + "x": "26", + "y": "11", + "properties": { + "text": "Ansible", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "4941", + "typeID": "Arrow", + "zOrder": "2", + "w": "72", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "839", + "y": "1284", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0.27272727272725206, + "y": -0.36363636363637397 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 72, + "y": -0.36363636363637397 + }, + "color": "10027263" + } + }, + { + "ID": "4942", + "typeID": "Label", + "zOrder": "73", + "measuredW": "436", + "measuredH": "26", + "x": "898", + "y": "1343", + "properties": { + "color": "4985136", + "size": "18", + "text": "Learn what is configuration management. Understand" + } + }, + { + "ID": "4943", + "typeID": "Label", + "zOrder": "74", + "measuredW": "458", + "measuredH": "26", + "x": "898", + "y": "1373", + "properties": { + "color": "4985136", + "size": "18", + "text": "roles, playbooks, inventory management and automation." + } + }, + { + "ID": "4944", + "typeID": "Label", + "zOrder": "75", + "measuredW": "382", + "measuredH": "26", + "x": "898", + "y": "1418", + "properties": { + "size": "18", + "color": "10027263", + "text": "Write some automation scripts e.g. db backups." + } + }, + { + "ID": "4945", + "typeID": "Arrow", + "zOrder": "76", + "w": "1", + "h": "110", + "measuredW": "150", + "measuredH": "100", + "x": "839", + "y": "1341", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "3700253", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.4999999999999997, + "y": 0 + }, + "p2": { + "x": 0, + "y": 110.23786879464456 + } + } + }, + { + "ID": "4946", + "typeID": "__group__", + "zOrder": "77", + "measuredW": "152", + "measuredH": "49", + "w": "152", + "h": "49", + "x": "655", + "y": "1361", + "properties": { + "controlName": "102-ci-cd:github-actions" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "152", + "h": "49", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "114", + "measuredH": "25", + "x": "19", + "y": "12", + "properties": { + "text": "GitHub Actions", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "4947", + "typeID": "Arrow", + "zOrder": "1", + "w": "79", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "758", + "y": "1385", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "3700253", + "p0": { + "x": -0.35538425356764947, + "y": -0.36363636363637397 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 79, + "y": -0.36363636363637397 + } + } + }, + { + "ID": "4949", + "typeID": "Label", + "zOrder": "78", + "measuredW": "470", + "measuredH": "26", + "x": "154", + "y": "1336", + "properties": { + "color": "4985136", + "size": "18", + "text": "Learn about the concepts of CI/CD and how to implement" + } + }, + { + "ID": "4950", + "typeID": "Label", + "zOrder": "79", + "measuredW": "465", + "measuredH": "26", + "x": "159", + "y": "1367", + "properties": { + "color": "4985136", + "size": "18", + "text": "in your projects using some CI/CD tool. There are several" + } + }, + { + "ID": "4951", + "typeID": "Label", + "zOrder": "80", + "measuredW": "423", + "measuredH": "26", + "x": "201", + "y": "1398", + "properties": { + "color": "4985136", + "size": "18", + "text": "options available in this space, you can pick any one." + } + }, + { + "ID": "4952", + "typeID": "Label", + "zOrder": "81", + "measuredW": "428", + "measuredH": "26", + "x": "198", + "y": "1448", + "properties": { + "size": "18", + "color": "3700253", + "text": "Integrate CI/CD into your apps using GitHub Actions." + } + }, + { + "ID": "4953", + "typeID": "__group__", + "zOrder": "82", + "measuredW": "107", + "measuredH": "49", + "w": "107", + "h": "49", + "x": "898", + "y": "1501", + "properties": { + "controlName": "105-setting-up-x:nginx" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "107", + "h": "49", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16776960" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "45", + "measuredH": "25", + "x": "31", + "y": "12", + "properties": { + "text": "Nginx", + "size": "17" + } + } + ] + } + } + }, + { + "ID": "4954", + "typeID": "Arrow", + "zOrder": "83", + "w": "1", + "h": "390", + "measuredW": "150", + "measuredH": "100", + "x": "839", + "y": "1463", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "color": "10027263", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 0, + "y": 390.42124399183035 + } + } + }, + { + "ID": "4955", + "typeID": "Arrow", + "zOrder": "0", + "w": "72", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "842", + "y": "1525", + "properties": { + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0.27272727272725206, + "y": -0.36363636363637397 + }, + "p1": { + "x": 0.4999999999999999, + "y": 0 + }, + "p2": { + "x": 72, + "y": -0.36363636363637397 + }, + "color": "10027263" + } + }, + { + "ID": "4956", + "typeID": "Label", + "zOrder": "84", + "measuredW": "467", + "measuredH": "26", + "x": "898", + "y": "1586", + "properties": { + "color": "4985136", + "size": "18", + "text": "nginx is commonly used for web serving, reverse proxying," + } + }, + { + "ID": "4957", + "typeID": "Label", + "zOrder": "85", + "measuredW": "424", + "measuredH": "26", + "x": "898", + "y": "1616", + "properties": { + "color": "4985136", + "size": "18", + "text": "caching, load balancing, media streaming, and more." + } + }, + { + "ID": "4958", + "typeID": "Label", + "zOrder": "86", + "measuredW": "369", + "measuredH": "26", + "x": "898", + "y": "1664", + "properties": { + "size": "18", + "color": "10027263", + "text": "Learn the basic config options, TLS setup etc." + } + }, + { + "ID": "4959", + "typeID": "Arrow", + "zOrder": "87", + "w": "1", + "h": "71", + "measuredW": "150", + "measuredH": "100", + "x": "835", + "y": "1978", + "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": "4960", + "typeID": "Arrow", + "zOrder": "88", + "w": "2", + "h": "89", + "measuredW": "150", + "measuredH": "100", + "x": "834", + "y": "2131", + "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": "4961", + "typeID": "TextArea", + "zOrder": "89", + "w": "499", + "h": "118", + "measuredW": "200", + "measuredH": "140", + "x": "585", + "y": "2044" + }, + { + "ID": "4962", + "typeID": "Label", + "zOrder": "90", + "measuredW": "431", + "measuredH": "25", + "x": "619", + "y": "2063", + "properties": { + "size": "17", + "text": "Look at the detailed version for what else you don’t know" + } + }, + { + "ID": "4963", + "typeID": "__group__", + "zOrder": "91", + "measuredW": "430", + "measuredH": "44", + "w": "430", + "h": "44", + "x": "620", + "y": "2098", + "properties": { + "controlName": "json:devops.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": "141", + "measuredH": "25", + "x": "144", + "y": "9", + "properties": { + "size": "17", + "text": "DevOps Roadmap" + } + } + ] + } + } + }, + { + "ID": "4964", + "typeID": "TextArea", + "zOrder": "92", + "w": "613", + "h": "246", + "measuredW": "200", + "measuredH": "140", + "x": "532", + "y": "1731" + }, + { + "ID": "4965", + "typeID": "Label", + "zOrder": "93", + "measuredW": "532", + "measuredH": "26", + "x": "564", + "y": "1797", + "properties": { + "color": "4985136", + "size": "18", + "text": "At this point, you should have enough knowledge to find a junior to" + } + }, + { + "ID": "4966", + "typeID": "Label", + "zOrder": "94", + "measuredW": "516", + "measuredH": "26", + "x": "564", + "y": "1827", + "properties": { + "color": "4985136", + "size": "18", + "text": "mid-level (maybe even senior) DevOps position at any company" + } + }, + { + "ID": "4967", + "typeID": "Label", + "zOrder": "95", + "measuredW": "350", + "measuredH": "26", + "x": "564", + "y": "1857", + "properties": { + "color": "4985136", + "size": "18", + "text": "depending on the depth of your knowledge." + } + }, + { + "ID": "4968", + "typeID": "Label", + "zOrder": "96", + "measuredW": "116", + "measuredH": "32", + "x": "564", + "y": "1753", + "properties": { + "color": "4985136", + "size": "24", + "text": "Job Ready" + } + }, + { + "ID": "4969", + "typeID": "Label", + "zOrder": "97", + "measuredW": "536", + "measuredH": "26", + "x": "564", + "y": "1899", + "properties": { + "size": "18", + "color": "10027263", + "text": "Deepen your pool of knowledge and keep building projects till you" + } + }, + { + "ID": "4970", + "typeID": "Label", + "zOrder": "98", + "measuredW": "360", + "measuredH": "26", + "x": "564", + "y": "1928", + "properties": { + "size": "18", + "color": "10027263", + "text": "find a job. Your job will teach you a lot as well." + } + } + ] + }, + "attributes": { + "name": "New Wireframe 9 copy 3", + "order": 1000127.6123092113, + "parentID": null, + "notes": null + }, + "branchID": "Master", + "resourceID": "A1A5999B-9C79-4DA0-ACC2-6623475C4F5B", + "mockupH": "2176", + "mockupW": "1249", + "measuredW": "1400", + "measuredH": "2220", + "version": "1.0" + }, + "groupOffset": { + "x": 0, + "y": 0 + }, + "dependencies": [], + "projectID": "file:///Users/kamranahmed/Desktop/AWS%20Roadmap.bmpr" +} diff --git a/src/data/roadmaps/frontend/frontend-beginner.json b/src/data/roadmaps/frontend/frontend-beginner.json index 0cd4d5d63..7b3666c32 100644 --- a/src/data/roadmaps/frontend/frontend-beginner.json +++ b/src/data/roadmaps/frontend/frontend-beginner.json @@ -1675,7 +1675,7 @@ "x": "574", "y": "1640", "properties": { - "controlName": "json:jsons/roadmaps/frontend.json" + "controlName": "json:frontend.json" }, "children": { "controls": { From 55989d8480ef0680298e316bbddb3d2ab8e68a20 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Sat, 10 Jun 2023 04:03:38 +0100 Subject: [PATCH 14/48] Add updated devops roadmap pdf --- public/pdfs/roadmaps/devops.pdf | Bin 148450 -> 126830 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/pdfs/roadmaps/devops.pdf b/public/pdfs/roadmaps/devops.pdf index a295620ad7f9661eb7447ad6d5f447431c1a74e5..99051e94c20f6d5ff99cd2cf121fac290d01720b 100644 GIT binary patch delta 118207 zcmV)VK(D{zhY9Z92arF1FflbXHXuGe3UhRFWnpa!cmce zUwznZzWU&owwn)MZGQ1r5PtXJ$^Y=H-)y$8cjxPQe>w5D<7IogUibX%dOPlRm-FT~ zzoNsP-~O}RW`8GkfkJMrS?uzh{l@`t}3Pp^-s=X;&P>riM&Ir`Nah=^zQ6 z_OG|cv)g3+`y+qu8`__)v~%twziyxQ*Vo6}fhNA)Tr`#E-EDJzeY;%`r}O4`czxa8 zn4v%0zdjs}x675Dc#0R`=0W>MB+E34&vC$q{p-_~KfHZDz25G&;+R#)?C%~-G;3+E zMcUSjr^SnZqWyS7}8q#sc9@t;CjL*BXXQ9{{H`mzcmNnnjq9wL0 zDNXUX>^@;FK4mRxnY7)zXZQ9^x!YXW9{bCV)yHOkU}^sH%grtu#{bzJULUR}2J+>% zPrvx`OP2BG%ip3QUj6#r`!6=9&8r{(^9xkPmw&VQi!a%v(k~Zga(}vIcd}SF$8FOv zrA?j?5h~)kJ=~-$&eAK-y!Bgi-guYh;YrpOyT-G*M{I}d6B=y&q(^z#U0&Z%Ap0}> zLvzo6(w45_Z=Li_NT(v*4!fr!?fv4F^?uoibgmbzqRt}i*?4Du9`}d-bANe#Ih_0g zou6+{^aP1zsWv8lzS;a9z9oHDa2`Ay&1F%R#!m-S^<__UrT4zsFk>{#G!3*H;|t@O z(HosEl*{Yu5yBPGU2f+?afbSWcHO>4xxvDJ_4RId73F+Z!i4SwEfZh zW{=XsoED88%Z@mLS5C)j?{JR1c1-@>Bh&cDO_<@YDH2(RO7E8o8bhOEIcpPt0z0lu zT}VhA+JVKgV`iWseE4Aq=fmsWmYz(@99?AZc6&62g_PlUAw_IW|Dd2`2E-i-P}0m2 z=%UO|zf|fm3j$4IIY_N~b$ftT79wri9>`=$|D7UKPo|q1NZYLk!&57E7B0Io*9zC1 zqnWHZnXc0%n!C5hUyh#NvDc=5%m>~&NdjOgg7&_7vN_ULJr+-N;Jw6Fy&@uH&iGJU z+Lv&#You;mvI$G&OFf==QS+?z`%xTzhq)V0z*@5s;S!a*I}0T|Z>={gYyFS^?Js`4 z`Nih{{bI8_ZeG3p{@oWFjMS@t=l5>&>dg=DzIYmbzx{A;)1`neh*Y+J6Or86bfNra z)1SIcfB4qgQkPAa8U(MV{XI5anBlhuxXt>PO~1ybV^X_KFVoyenjA<{ts-ejYepey zzBF-d&e2L5kY?$SRSQ!0&t}v8^Vn@Voy(@P0lQ6~_^H*3ve3%(gR$wIa%q6!bY#PW zUff}}$Q4fZ#d)MH9T=N`t`V$lx?1lx9ixcZbcfxh-wtOMj7Gdzb-cCkwHWo=o@L=z zL%T>3-rSl@hgR+7jHh>!X>z9}to0x>^lnDmbjW6wQE#NOVI`o+sJny3sP{qIsFx6I z@(_!RkV$K!E>Z+~$4xOQjdsC7SsQf}?_|`^S9v_q&t=rtq!{&oE68p#>gbZms9(@0 zlTp8H@v+uMT{1#bj7GgkOoN9bMI_Q-)N3fEUb;~itH_}l_45@KzBcOG)RR#cX)x;A zmV;400~IHuz9!kItK-S27cVsk5EDu<>=oA-o#0^k?J??&B6wOxeXpe~YzeIyb#@f4 zq}s#lD5K88l|yWQ+G5nthg-edj5@}eSVEpt7$Zg$LFXKPb3TqEf6~!X! zMx6<;ax0q-b`6NuQ)SbESX*sX%f8!mOut6Zr|7cRzPxIrl2L4WlTk^n^bhdXMpW!J zn_ki=NlMeXnVr^}c8skV%`}@1#fVkoE1M4QvgymjUFgVvHoZu0Y9KY6KC!cKX`9{_ zxNJHG);1k0*KB%k@7Qg6C$;UV0d(G)ewY2xN-Uf1pDdQL>B54NIXku4^mA<@?z-T~RSj#3$PHfBM%S-~WICmlHnN_J4i%2G9I|KCNAHjr`zn z%uk!|#U;Ogd+XlO9?bWF*)crm=6mJ5ug&-Q%nVvHY2t#KLPDG-*)xJ<^BqzaC_B~) zSynqQUclMbzLzX&c1gM9UgIc_a>;GJC2dIMl9%}|elnL&iz?E)cFFrT>y4NBR&$Xo zs-v6lqBT1uoOlsz8?nFGSeftQY%<^Hi(G^&P01;LxB2#)-jedkW4;$!nQyhWyEEVQ znD%KOQU*Dh?OWwLB=Ov3qj`Fav9CHv|F%U**m-G zy=!}|GT&$7447{m0b4}~M_|V2lhYF3(rmt0q-Z$eo0xAVU*n2TPLOqFzG(~RaWdcM zGw^bMZN4R==!p(JCerOlTRb(G?>3ZW3LH@o_u5kBlb?wo&*qy=jrsO6lhu|yA&usn zZQ0GY{`GukzE>p7cf>ZE@8TtMvSP24d0S3&IGS&@M(|`d-_X|PJG|YQZ=PG5@3ePk zzIkqKzS~$Q^UZUkPoCCBir$mR2J>B{xa8e`eCw%|`Bq!Vem38kBB`}9-)U|#-zBxh zFk-&L+-Sbxel*|xrEb2V%;sAoj&|%Ovd`sWz8{lj^G#c@!*WX$W>B75^P~AbvUCZQ zOPM!YO|Yc7hpk+-JbZGXs1$b9Pw1jkOD%{M!BWxkOb&dOxImpv$c5=iKO zJM~$YT=q_>v5&dr1}g_3#76_@PhWn!cFBM9Prvz#&EqKgqeR>o!rwg+2LGG{+-{5C zUIFBzGjNqrVe6i@yAb@kb?8%Tg_I@Omuv5M(GD=2} zRN)W^Xh`Cjw;lunZp7|CGxPKv1ijI_xrW*r-PC{3S1do5Caw*@$VlM@SX zM|01Ma)*c?32W_)Id)sdKvL4I;r3UjPQ|WiN-nbJy+b8vF^A`TfCCMy-tEJxfoAwS z){jH{eNM>GG7!i3J52)-Eph@+)Yxv0^1G9Bm}VsDv<92s3cz7in>OQo&-$ZKQeY zJ|szUHKWubP(s0*&`=0}l8Uye64<6)J+j>vBzj>PX%Yg2*pci~Cb~_Q6`f)PX-(so zOeVQC9mT-VHR4W6(n=~nB}+G@pC#<5P%n(Vz(yKY_FX%GF*glLgsL`0O`X&x!Gb5v z`kKUxa^EdzJ+)$I;j$@wFL$X@{GrR~>3qec?-)Tev*How3;Ribxy6yxcdTqcq;MlzS?pI_2maP4bg#1oP_@O5jloa1tB_QOo zl51d}3WxYVn5rv(%jrmEfPl>*l>x8*uP>gy{9h>sP!@pVo}baMN)B4X|MwT0)^LCb zTOu_W6Ac?82&R!I4^3gOFVW~ zLMLfKDW?~b_gInktX_n?EW&zm03v8BkZQvUr0LH}3pOBslGSGtK*URT;-_sNUJ{oB z5Gl&i_znCay`v5_7Mc@g6cA}7Ry7(PM_X;h@UBQB5OHx%x&(;0F_f}^h{n7C5m`vK zEUYa+1pVvh1{&p3h|cc{Be*?mwSdU*?hO+*4zyc5G{3gbGEI!*CLq#jYSFaFX#pZQ z>#dV!)CfF(xYG_q^m~#Aky_I_5RqFV7Dga4vDMk-Icm8CM9|0lKhHfW0?3hfd%+55P`M;5$1qB8zACk%I^S? zHnkp4(b}*LM37hqBDCG4SZ2!OY0|Ep5g?MqMz0-+6lDM+;0ps0`Yl6@dPTnqh(Hq% z@nQyW8HhkzfC#fDAOdXxB19PkL_~}IH6$<)fhHi5@zS<{NYTc9`iK-DlBcl70wR*8 zJQL}E0h}ZQ5z#sjVXzYV2t?SW0wT*~-AG^pW34u@W?Yw z{Y)T&&P7t61Vmo_%~zF!rd$IhL9c1q;{L9qlFt~S;NHP`Y}WFB+w{v7S%#cxTS zQ*RSoQ>S@$%7s^SLJ~ zieuZ_d8X`mk9)XN5~F6M@uo6K@}eqCSCWM~H2oE+T(Pw+9yl&AA{Ti7uId_j`_y*M zUXJK^$E-k-wi2L<0LxW5s8f0m3Prem<5sWE=xdPX!B0zh0C)o$mrq^8{sYu{QaMHFd%i3nP>A z#1oL>Owat3O{6Lr`_gM4a&HrVSB={%+UJU$#ko-6&)h>n1UMJ%O`%;@OIti1k5KVU6WZck zbmFyeVp6Ek&=+woEDM|qdevwh<`m7k@uqVkfXyZ!SsBR@=#tS6qkz`<6AapMOommU zcnnd;WmNp`^U}wGR6JTgr(l*Vp*(tT6z%tvLV2w6F02EROohgOq-f7NoBCA0v8t(t z@;e@nEbTy(cVU?&q3Y+l9K}=3)W~P?-}aDtO-i*>=p%_hjyk;t?I1Jt3%u6e*WTb{ zQD{l23OR0XY->N4lgG~CrLjRe*t z3$6wW7G>@%%Pcp4VDtHAaWfd?E|Fl2saMlu)D8h~7#4<#lM8;;Q>CGTjV}fk7LrS% zx{yk2rJ~SWaxOdw#Sx^V)P6+iwu%MGIvP}JNDU{aDxI3;&O4<*A<4O*8CJ3PowTN+ zocE+Wm7J=cTCuZm+4a3vyYxL0vP2CTyby9JfD5njU zbXTe-7>jq6b}kK;4CGv}(Nz5JFsBSlGe6#sPwITdbjI?z6;axR^q_K?PpWeM`!6`d z`06)*z4_bkzJB}7D#9s8V~zZE0K}8aVnnC_Gm5ES>SqM_8+9tknIlYpEWo{^isa>O zKNI8pJg0(x%IlvxglTNVu_-2zPSBfc-M&7~~>Wa0c|83+Oo`sK8U&a5f>`EZlByOIl>)C@!$6(4{GquWoa^8(f2G(Ln}I@!aOBOdQZ;Rnl0#s3(=L{bP-%2O zdsC15Kj=aU?o`PwW}}Y1wi7fy`}*&H|A+NSnWsN;I%fmmi^z|p-0=M8#GYDn)C=o> z%d=6$N4yo@n{rGj1KCwosC%6dy~z31PWi?Zd>&H-XhIPmd-MTzA7oP|8;bKvJOf+) z6~8aPh~?VtQ?HnM{vC?J^~47)3SMhvx*NSHpRW^~QKA=R5pPPfyDzPDcp(o#l;hfI zw06Yh568}+@YF(4LP-pBHiNPgmV?=Uvcq>!!e!4UhQ?I7MwUg)nsSd$9jQl(#_;3n z)$#!eo3M%VX1QXniO{5|2Og8))6i zk6~7K8e{!h$p8pUqmb<99d#0)^oU83=N&hVN%c+1i*mHz(lk7?+}I(y96)`45o6~N z#$l)Vuv;aL<(W(*Azu7KothFP)KiKz5IIDVaCD-EdKFictQ>1#dP=gyW7cffQ%y#3 z>C9XYa zr;aw54gy5wzh$V}r7IHeM{Mzb=vHD|=0pJ6k_>6sFzPSvoR^o{YTg_RiZg!Hy_tqL z$MA8r7>Shy&&8V)^f=()`LQ^2#PXDQL2_y?&K%Hk z>uXxvZi*;R#~U`n?`H6pP!a5vS&lN;m#`L3P6}+1qJNc;8L&e~ZZmG22wu~S+Fl%I zWbMS!L^d=pVc%JN&rssR@r*n;cO1?8`zN&GptIw^K~Zw(fTzuF)K=)NYknO1=#;h_ zS3G5ZdNoVEIq>9PtQU}fhFVn35voO-G8+JjJh#K1kq8_aDA{|K^*`Kfe9yyKldLef$1vj?jKbnegWC z|M2cTe;a+zp-)K%1x}xZIUey;{hGtQ;_=P*?>BGW|JM)izJ2>Yz8E>u#7$|pk}=wosVnAQ>I@In zK98K?&usdqr*B7pO!yN;`RCv0#FQuSy-q!kr=Z_5c_mBDWhVO1@}JE=y!-0kHb4CS z-G|M0-*5i#W>jjVA$<{FJRa|I~bm1VDKiftiiCJiahVQX>gIgT{TNNOasIF8)e;lCjs=Dz%VNi z*L?+sCz61}UOx5FnT-yHsmvr|5@5~f1%_2Pccl_0qc<2$hSHs*kls3A6VY8Z@p{MxSus{RDkkIgdD==)*0*3ji)R{6g0>k`7$*vIn zL;_buY-=#gQ`x0zXJT*MFz#;z!)`vQjShxQo4~MXYcOom1cptUz;I}5Fl^cchDTb! z@Et`0lDtMR9MTF5hqMO6&~QiAVA!+?4Ex;?42Lj-VW?Ocr!`Pu{uL?a7t6cCx$B-rKMHz*#{cb(b^`v`Z2y|_J`Q3M5Cqd0XsIT69`-jcH!tdtQe|Um`6)z%<%1z6=5rCzvso9c&gV2e0?kJi>wCFXCBX*UAK#F-KHyib!kc%0 zUymYbu!tKnJ1imq`!Q5>t*ftuideEddJl@YB{4C_Z?#pFp6isXbwH6RD^P?5!~?du zs|X!e<{rQ78^4)$SR3T|iO2s6$495JS5i6qz=GqJdTr2#V5z z+QAD2GrNiq@(_%!K@l{HB3%;FB7}Z_tipUPLfB~Nj0TGQ<^+m{$NGpQ8x=rk+zp0w zaV(&ylQaTH2;EpZ;C4Mn2-E&qXZ~Y_8IZ?Vzbu28=-h#0v5cSyN$dCu3n2!W(s!n_ z7D;1LYFG&e;(7}xa&>LJr5M&;l_C=+Dw5e_48}wxoUT+dWmpOjqMiv-^~fK8Q7E>O zOiI8-;)7r*o#<7pwZTTSxrRhDi7g32;NMzC)5}CAuL?!qY zBob$BetLWm8WQs0Yx|inL81(FfkY)mW>t`Ad7~ha2x~~>vBqgie2|yg3@a8wNsEtS(C&E`;u;ui0z3I)(Nix0O=k=5X3^MohQn`(*lX~@7#QU$RG`guWt#!y#4TY z^ZU2o{9ywYsRL|7sWTx+4KaPRuwJ*-#KxVkP(5VbX)B9O5s2f3!^yRWJm0q`qk#yg z_I7ShVD7`)AJ);j#G77!fB608`yb!GfA{`(o3Fn6@WY4KeJqBX4Y_$N@cfDL`jVr5 zgr+R2Hw`{+7F>2Ouk>*@KC-T|4AbzMxQ0;AB(7(gqdJq5EM%nD;*YpC|MK+en|E(o zbZ+y_yZ8V0;WY?1XcxrEJ%w-U%Hg-0I>-3-{o5K~e^X$q-+i=yFos)UkK+?j@c&0Z zkd7%Q`c(pc-~IRqi2n*0{$T~cSp)jBj$;$tf(xZz{^T*%&ujXpps#>n6WgB#`X=L3 zj^%;l4csB|Ecm4$6$cF;Pe$`V4pA3Etl_Uq;+!E*`5h3GF0986`(BY}lEQ)_MH8FE z=7r=WISN(vuTp@2kenq)hdNEBp8>)3Q|WHmGI#DoxsDuKanJnl6maC}N~B4S7#3D2 z5wx{XTI07Phq^5vbr_uBV_lqJ2~W`AiBzD^lG9jA6c41zmVe40v2!p#! z`98FkE$0vd5kKV{^<1UKIW|S+wb*SmTviTg9n(|JT?Ys8=q(xkX~{I|h%c?xb55V{sg1x9 zZZwAsovTBC@Av1FK<6eMc0r?ck;Ndd2Qku|L#OVJ>woj^GN?XIRFSjPu&f2=!73(+ z8&cKLk`ZZi=A_0Cz zmQ^!hFDfs3Yvw^cnDvySgB^Irj)cRvmu(K3ta{R^4!euI=P#Rk8 z(xm7GDc97a$TbluUFdEoX0?;XExY0^yBJbfr9dJ>&R8CX7H4DlAhd`(A@!txIP;{>yjozZQhveEqg?)|+>g z#{7CyS3#55R`L^cO(pejlkxoiiznS3k%aSOs2Y|iX8bryL>bp#k$6+63MBj=?|uLl z=bDOjT$3dB*Ww6G@e208Z%>7x4_`bjH(5xexcE#Om5tIK67ww*E%~W}8zOnP z;APfY!&9pli6?lsa1usMW4WD(te>Qe4myU>O7M9ClHtZ3KUrA}&2YmH8g48UH?G#O z-h^Thkvc3*>%5Xm^9I@;z#h)!x@miVQEb^r00kfV(Z_zmS3wOG5UX}`$9NNVqas=B zBabyy!QOIV6C;9Ty+-Z)RfTzavw(&I`+N~$e03R+#G@Uqun(Lu7Mql+8I?%`y4Y$i zGZdQVkprHr6Ay~N3TQ}b4QTXEJxa!{e_qQWLxNU7gK}vd#PV~^fX!TWZY64eOb-Ud zjKVwwsv0?yW0tVFHeRYIE}X$=Vjx44%sfI@G|4)(IYRJGg;TN4VW6~!BwP&!!qmrx z>fIP-oh~^BVU7}Om|`5mNQ=l+KNg(9cBwJJTA!3Y42i^J^)77*N>5xi2s^jo4A=FmVVYKaPP>U-6PD|Xk3O)C z+D(+Rp*1w^&KXTA_+$prNe9@g{R1Qa3!=kmAQcLz*rm4dx-x7;WM+ z^?WQ$PqOr4tCD+B7PCd{T%y*4UXP)JjxHjKpXy_cW?udNhaXgX-!76^0zI4?^dfv= zdmQd{@bCY5rY&zuCgG#wpLqMl^wzt$k zQccOhrt5)k;!)*b5?JZLEm6{_xpv_0q6fZFLyR5ZzO*Q%PaVkRwB4VdxF~=-p0Ss7 zx}|NpM`viYp{dA`KWNYipYc4uSVUdvi#$)Xi(=L}R%!JUstFLm_v%;*IAW^UOpDqG z`d5P9xfDVNSP4RZ4cXVW6?|^wnP-ReYkdxJbE2rwp>&OykK%2P&wZ2(rm{zU6`_qG z-DD>>(l_EV)>|ZL$s$P+qPPkS&}(}UPt}T0cOUWuW%!1W^%KqMh?P61{(&bTF@ZEY z^AiP#VlssEgNBd`r8lngwOn+r<|5B;xOWe|eUpJ(Xw0yGHMs653_4jT;1z*4EQ0)0 zDxKV+bspbBVlstBHR6ECi;%#UM30{fiquyvSXL_%mP||5ZwB9;XpMtJt2dV+Nk9!m z>Z4A^kZn5fF=e4SGD~}{(##~!23wkGL?Ppe8$fCZ0gzhT;nY58epv`o;1Y|_qvc}s zhz}C*C{oOS*c~^SA6?|drd3ViL6Hyf3<2ryIH*nIa+`sU24vmWrCjF+WDv$!?nXh%p2M-3CFjs(~mNllHUz{ERt+Kdm% zTnn57oV+ZU$o^5;qkP(-J-NGD^8=}EPqEv7c?(R0RD5ZpJk?K38xJu>10Wy);Te&?Ma?-x~@lzJHnGsj<(N}J@?uJ^UkAx zGDDz?^q>oSKn-JcI!M6Rf$}H|Rxu(4Q}j6At||dD3q`{xGtG=^d)UN>W*e_18;4&f zsq?NhxtB2qvt{n2qHN{sHxJs(b2o{2P-aRm$Igc~@|7jbyE=SUkJ{2Nr1ZcNrhXGH zr!wO8R<#fuI`VRL50YK22fQqQZ#T&^OODv? zL8&K;IH4nM(6d>B#xyu|#2|!CtV{cJZLuBt7LMO-0%%I9MAvi``@~rx@f=iuNNWs% z1?_i4F1fKqt&wOdz#t?mE{(I|&f3Y?Te#>GD^=uR&U3VY1FKfYw2CbjN)`a`cT*5} z;Ab61!hvR&dS-h!)L!O)Iv+nq*Q@=ik#rWjb?~ghXITPU6jgiqN*@o^u_WzhVb+p} zgGpT4Xfsi?ZlP-Lt}Iz-&jN)P-#@DTV=AlUR>kDrpU3XX2ST8t#gEgJ`(s*v*rYOl_9)!}`*^eCV_i71ZG=#TIZ_2WDF)5h$Bl7jL*H8sk|@|mRDcZs zNMoIoXj7-W8c?F^mXEqkw7n{MP2=ne3NWY4NJBZosu*;q%NkAEK{R)Q^N}i~EoCV) z@`;II8iFPAa}vgce7J8_$Ok>gb6FJVtck16tvFqfkDr5ovLGK(q~xq+nudgTXHukj z2HK2#G)5=P2IS*$=PX}GK6y^k<%M={q2x0mpVcV3MrC9w%-Jr;XG_t1A5|Zz#{s>J zk$ng~w;&(25AxAi7gGu!&X^6zr|f=5KJ~k!oMk*V`mqqSGa?@^T+!|ft=!FU8h%|v5k-7oOj#TGqtGg#Z2jXzRM)UA#2EFKZjvXQ3pg)pu~Tuxylv6~YlU^}0Pa-_$K-{4{%nJj4dsTIFL zCCjt(bG_t;=bTKCawuFwd)&yT_KYti8&v!S7iM_156U7EBX+VBI}wKA$u>!N=_qf1 z@->|XhB2*p>Cqbw++bSLNsHbzek&g0pB9E-ndJk9;T32tdIRDK2Tg7A+{9Jm7Np8C zI6~<4fjK<~h4?&KaK_{}6-{7?wzXs4lY>~(65f^#s=ylK&QjDNj268?78bY<7gqE` z&q=!aOlOPUSZ2_WBib>e9Y#?Y#v_Y=&@i}Omx_R>EstuPmp%?w94MfklfBQ~%W5n8 zgzes=H_W^xEaTmxH(cY9)TJ`8n8_$}SR1Pw$>SC>dE=Tb+%R4(m>#DCd zdQI?Vp$NgN*oo~)K@Kq#c%zajcQ30h_hQ*XYq1+3fi89QbFJ!!<3l&ZU|Pd}Fj`a; zzlBzpFDn*AIjU(@^~0x;a0IH~POEKd5v+HvC0C=Renb;5Qr4TC3h+=!3Ek*!ZmuT~ zO#sR}!KqJAgQrR`OseF_9`LJ)+$=(h*qVky(>R+0bA@26{P>wLSae~@TB^|nOKvzp z8&gn7kXo)=Bq10`?ZAX}0AZ7Vds3ci2xeku;gSY;GCRPEl)b<_aBfbqNX@yljPpfQ zc!R-Lq`o^>tTh8*8N+GrUbelGljlHq=k_7OPq>&uPnImjNMr#b? ztY6ZM-$Ni4jZ^?-wQjv5AV(zcau|n9LqVVl3Id4|=zxJ`@ni}Teqh0UZNgz;0JB+Hp-fA3L zaTUg43_XFRX99tL*z7={##uw+`bpQikg=4kT1m(pN2v6Iwc`FiuG8Fb=eTyD*Mv!K(s64&(UU27Ux?Mtbv-UEjVSUn3#&9(h0{)5j(lEx3GJ&Z%4j1W~EV*X~= zLWO2dR;i7Ds%UAsDv=V#>AO_?teB3(6-^Mvp-h$3Bpu;*xGwXbH(b{Fs}B@4e^_kZ z5FlZY=JHb#Rj>YvGfE!~;RMy7!ao<)JQH>KymlwRp-iC$ov;gP;$>l%=U%%99c<&o zJA!FQUB9S^1`XRaXDgy9nlu9wU&wi)OD>H>{B*QOBA>8Oa0~`!(9=L zXmNCxlxXK6Hm&8W{klRhG*@*s^a#AMUhhRTv650yOA*aLBN*ARQxC#4l7cX5Ojkgs zh(>+RMKlb(1z`xTq=<&+?uuwaGjqL&hIbn}=tVTkyM0{hwinIHwXY(YWyV}M5__6i z6x+;yM8-xkyLtDmh(^7%FpP?5^t-|^O1OZHMsXN}h}Oa|`e$3}rU~!4D$A@g65njF zDxz`CYYW3jucv^vuc9jckd9l?5{5yIO+_>)%pnZZifDC_eLjJu_P`*trxPD74ATma zkYnMElC31LrUip&9k`G{MKpa>eWb%UYA0oX^q8F%hGDFQL54645EDyimC(a5b{i@T zqq+3&Aq?a3NR6y$RZ;6OjF&FsP8bF`76#E6ySzgicNR^yI857F?j_L!NSJwwXiSR{ z?nN}FwLnZ2(U>+B(U>+B(S#Nh(u!zI>p_V^JPOTyu(<*A#ifH_96F@XjNWHQaT?jhi`gG_m7-QY%-vJ`+cZ=az&jyNs zg$k6Rdb98~+3O-2n(7m)?h1`OrcFgOjV(r6?m{b~sl{&)tvH!HWE7MUiAR-g^r16D zl19@=`+jXjG!soL2lk9gG+KVEDtldjMC1J&Tw;k7Fv0TVFrKXuI&IviD~s_H@tN7h ze-NL+To?!AoPEOSZ%SxBaOV3X=%mLjeg-^Q0MwtNwa*E%99XVNJRA$B2mDCkGQAHiUxtt z^f6Ls#F#1?L~z$SQ>?Y*7hVkC7!JFk>0)Zm=Bl}NxG2FoR*So+$EI;Mg^2=mLaa@R z!Ke#V)M92%*cmr0bAk_7fdF)%6JqACqCupQ(rJd8pB9FVkt{E^ibtS-1&M9x#0fFc znjB}YI=A>*XN>=q>SS@M=b#XT1L4|*hhk)KX1W`mmq)26#zc#7$*dfijT&RtA_vFh z)UXl}PRj-o|_M3dJl+3NVI+T-qnHY$F{ zkd5PzGVo~i99yA~m_~1ZB&Pk|O*_lk5{A~IL7s(nRX35I{AMT3<6$!nG$S#|tP)~c z16_{d$-EEp&g_Z*zK7_w5@K!r(MJU^6gs7vTw}s-PeM$aSGw;g4 zP~J=jkOIS8HWNL`95^8+yueUB2G14D-AJ*XPBi0pD;U(J)K0WVns`sjh-nlR46?rC zXE1HFVF^20HN!!iMqpB^S?>}=Dhl|UBQBcaOr3A>Rz~cOq`p;9tWBY(R_ruQIw*WC zcY;AY>5Lem6d%}s$jgRaXAKpJtVnIoirvmzvjLVAtY)RyWO2rTn*-biirM>0dzX(L zMF<96`eyl-vt=Q51LPg~Bo@1w$|jY_A4Y>-k`mLoHciu~q{LqR{U6@G|K)GEM*Cx+ z%h;I4Ie$S+=;gTOVOdY$?$2xOqo8a30oAFy&o5Z^tk;!)cOBkrUIcGeZ#`GC>}~5L zI)}sPjAIISS+O;|xsYOxf;Mo$Htvhm7M$$5NQs+vcys9`ruz1Rm*qtlf!RCqhStvk z-ds>-D|n-3A=#hr>v-v$b=A!WD1aHLg2xXdV zN17_f^xOz<+Ng$k2~5*HX*Dl4@q{bZ@J2AyAMkEt2)u!|f;TFf&1tQ`8(mi4CQV5` zL50vVxj-55E;-)8o8oB&Z#pdoxj7B~IG>VTwf@w{9lU{7=6!)T(C*+3w3h7Z@CMop zZ$z?xQTKPx18<<+!JE)B+=4gbV@0yylG*F5C zEzseOb`-7)#V{k5!HHkNn{m%B@CHUkcq6`lavzcn9RbK0-e~Xgb;JSQa71o~H;u*c zV|cTWG?<6*<^>TYaBTL`rv#MrsgibC-&@0+kDttHKu0dnX9Asv$*&GVKDFT?`}H8o zhJ}*G*QuPBpJ{*fPw(IT=YscK%1rcuZ|)}UsoRT>+j&MFhHmcOx<@Q3Wd;gh;7-_o z1L<2~C+-P&4%+}$9J<*z?X1r;1UZM~1*llG>8Ia`zvgt+BGrJ zXn1Jh9GAu448dSF5^z2yR5!}#DhYRg*{}^xDb^GkC~gVeaH~e1BmQC?j9us3W1S{t zLFk4%y7FqGDhlv(pJ;W_LN{$xl956cg>8uP*@pF50`CCI9fl~HZ5Xr?QxDyMrDUcx zj#kLyt*zgM7AzkNBbHYwDYFl)VH+)aSy6q@paldbt~$3GCpDWF>b?`qaOj4AsUY^@ z9(4Dhl4vLJ4vWV^V>}Ky6fMu$@z8TpkM%A|DX&GOd?8-b#_iAzhfrL?nFUR$2PtxS^Lr0rtxNMBU;Bck_UUX zV;jq7!8Y*j@o;f-@DAY}$xO3~8_)*@W#m;55sn;sxsa>T$nmuNFbLXb| z7_kjGO7wwf4coAqIpP!Af^C4C_3nUeys`A|0B#5p8+NWDxF#*&=A>#{PeOqkMZmZ>(X=Y$(Pc%Bfmlpsf3nwt zYf6d*so0I!D{#{WRl@YoNSk#lO{?vyh8wtXAefIeX@sRhIV_=&rsgII9?~Iy#>h(yfq^rBcqw9<-$ilr?roUZl)sTb$2h1I}NBw@aCjXlqg}N<;s_hx#8~x@aDl=_n^h_M(dIG z9gNYJBKU~x{gV#eoOF|cmJJ%m+;9;S`IkgsLPD>Yl+X=IjA%oVv??!He~+wedTlQ% zI4)zvZP9uHzuWMpezNThZ``@yjR1KNmwJ2bfA3yECNhvw6OgKd;+A@5NG z2(~#BHQC)1$+njfDX_iIe|$f}uLgE-4;ZRYr&ET<)`NsG?cg&XCO5QMW{ArhgKQc} zLx`qSYw1DWyaV*^z@J28oYkKPnO_!y#w@WoV59JrLCqPz&6q}EpC&wWqo791P=!f} zm+JMmV*R~9Tsh_w44$jmd)a*#A&4X z9&x6Q4*#Lr3o4Q1PA44z)4N5heK}Lan?#m%M2*Tp*ZY|!tE+U%@zNAt(oTHwSF`EI z5Wb-cF$r$PY>Dg45m&HjotX`UWazR8DPn8FEa)Qc0$osMe-T@WQhK1tI{MK@8{Pw5 zq(rm2#Yw5hf(O2i&}&2ru;MZ;;k+URx`>ptQ?avf*|j+P?~h(Spy?-#8H7)eC&aGzJW%%#mu`Qqcr7jAM!zaMbZe{~i*pnN>uz?cgQ_;`}S_nQvUT#yuy zNz<#=f2^&D;=sHG(Y|)C$_+kGK`3N-tc^&NB}Buwe*$Bc34-gum`38_TaijWfiYKQ zp=6=mfnkhmBK%XT%fC)d2>KZqW0GOa)hRlZf=H2Paq~p0SuUBLt8QJz4aQ#Tgq5Fy z0I*DPvk11dN9t~}Sj4gI@tR~s&!_HLNMTZ0e*`T&%s~!Ud8krV+^NC{1$IO-jNuzA zRo3jMWOv1A)a6Q&11Um6m3je=Ln#=u;y!yMPf`7sSd5-9jM1Ksi4+5dF(L)VME>l` zz?k~kFiQ;rj#aE|%OH|rjARrTW0KIHNXwjb;f7>r*|rQF2FCOSMhCIIX9|~2;B}f4 ze@eF<=Ynm47l{s9V2r>MZnT6BEigvN51>-d1;%LgbG1G&M$ZMtTx^&XA`vZ+g}bL{ zS$@Ju%f6f`YOBGRE1vx6q6my>(jgai5+01!z8-V+45$Xw6?Pkp@jc=EpPFlP7RT=f(ILnL6>EiB}!>Je>W4rg(SQoX*e)O3Nx!)Vz6Qm$xxvtQ<@f) zXc)81?}`){Ba&fEV`t&AEAzk@J!u$2@e^ARfep>Ee_XdbklOZKvBr*#5nzN`cJfJO z6ZBK4%MJ%)F^bVn)pCs0Fp4=6qfW)Lnl*}9wxv2BndZfxgJN(&!{sNUm|wo(e=Di^ z@YHyeoGXFn+kZ1~`E1>I&**B%v9#-Ao_T9+l6_rFj5ok9?RVpSe_hNXI_)vI!M}=t z5kZkM4bh>(iwZ(K`6(|?9oUSg*^Kv*($ZRq&R3eq z@2Y-e(L}xRGTz!!&DeC~y^w6Bf4tXQ^+>1C_+-4*9l8x2(T(?!@!lD4y%|G|@XB~E zv}U~ZDyCH%VKLtQu|6VoYS%y`UrbJ)ASrM=gf&65XOafRyR-3D2W1On1@*HV@1w7> zQ<<8DptCb3t&O)xu?lzGjK-Tx_h7tf3FAK-Z;n2#j5iFeNKtP@QdY)We{Cs4BtO(c zwed#Hu8cQrQT~uKNh=u*mRg^bm)Hi9jkm6=7>sufrH!sZ4_M6}iSZ`lf$^63yYbdZ zU2NaMbg(ww zYL0l?Y`meZjkj7;7DCE++s%`lQ7Yf4r-?AO<>Zy1e0v zkyOiWFy2B_qwz*??9|zK5q0bSLdK-BiVh?+J*Wk51L?#km#Zq zM@Sw#``GQKRdn=;e*{!o<)b`y>(@5k>4U4nPjb5nhBd9EU>)3a5}HXQc|UrJg)3zx zlGY}dJ2qv^-AQ?o8{e`vuZl+#C#=fP`iU26%k9o(xv3m4%YDaB=J86*N^Z9wRQiA~ zoi<8qTnRLPl*b)Lt5F%qV_~5v6i~$N=H4OHD{GnKjg6$-f4V68^r^zp?$3U=4|ehO zrwq7CBXmabLdmwDi|M9E@aIg!cI&G=Jl9T~=%d&ED$nrlGA2n#jL3Gw9vW0m#4<!*dmyha$AHfT2C(6DvpK$kVKHvHVg zRp*wib0W*Wf5l2tEnx1UNOROjpQUaD+VvHuC<>lZB|j0EiDq4QA|${#!<{s?W|S(8 z3lZBkZrO4?NT5O^rIdi8dMkbRV7w!V$tRh|5Mv&GEiywMS6}Q2m$osDv(iU_OfptI zhpwy22#r0PgyF@an~zjRK#%mG5SP3Iepo+5xje^q@-IvLKImdXgESd|egDT=2W z`la$NXG#%NHp{Zl#}4qbZDly;%0> zI({Ncwy2oC?Dk^>L;3mbWcWXzg#<4cYcRt zzx)K^K3dJ%tTf}}9r+}FR$ON=534?3VA}aOp4d{%_2m_gRDF(L?WwOwf4BMOT|V;o z?_Y2=Bes6??mgCC-|hL5E8tL`n18+7C*YmL_&lVN`VOaZ%TpTdxn z@Z$Q(LUveLCsc@j>uGIv%!v3>KwKnkf5Eb+A~j?O$zBI%So_XyFZ#v8YQb&?{u;KpQxoTy$bGVA3@|O(&uMS^9o3$W9i)l-9U!x!lUxSpDWgx>-*FGZ2r{g-zP-Rs53^9blb;}fmRw61~hbaxNGb@hEX!O;o$5}ru z2^m^TLb%S-39cinA6zF|1j}<1SD7d1*ic1XiOvY?_&F$&Q(0QxG}1T%ySLywQajR=EbTd zZ^_kYDHb9K6Plr&?z408tsg6BM=T-9AWcGQUill}mREC`EC$Or;BiOnRU4%f2 zw-hR>tw=d@ns5A;e->-fHst4sNJt*ch(x3W>0vs1rg!dKNz;~o*RiHfX^k(4L~fIj z)PP7j4U9w$V?i0=>ykIjf=A$3H;n=>NmPjywN9v>l+K0~p> ziZmU<S~OZ*?S)8X{3A&A17X==Xp~B8k{9gkwY^+Kfn`e?_n~-4IFVpzO44GXJL@r+bDA~_HRoe_z4?Tko78xe{2>xf7Wtne9;Of(}B^*m2?Hv|xS10vDS0g)^(NqxkrzL|d$c36V5*7B0JX)q0nNY3CxwRrksPS*m=KBf z?uoWk~GrW?|(}$iH{3>_x-nT-hcJBunDK) zM4Bo>9zckLo;!O+K&TAttk6lQNf|h)wR^dKR1bBKntN6Vf!cI|DXp zq*^h;erykirQW^A(1 zFeNjH(aXe#_q9OAIn;eL=jM$_`HO@=02|TZ` z332{AY{IU+!zR#H*o6JM!X`R?-zKe%XH5$>q5nHwUx~ z#5LB@k^|?TW^6(a9f;5u!7z2&N%=Wqe-njy*3ps!dw0Sn)ECUyq;V)OxUfkleNugD zYDoU*ViE-#ZaOa@rauvza76e&T-fs6_x}b2nbKX~efQ0WpN^PdV(A;y^>I}4=@F9` zHvEE!2?q+T<3A0R+`si4Dk0Zg?Y|^qa!{Q*VTKWv6lp{ykY-du{jhDwn8e~3!> zIieE9PuDpd4AvYmY5cV9B*#NDs&`kYq&L2x5=eKbq|+8uf~z(~Ow|00O4Q?oN>uh) zH=j^CV6i5d&3qY~bnQAvNQ+X?mfAY#%avO*<&iWpY8V7z{ZO4La+a70X&aiZ(> z(~?-D647Q<0__f!bPfho!U?1`e=6DIIMHdd`nKkKA_g-mnP^5Od_eCGmGDu=J5<8$ z{P(DY^wS+Gf#W+=5?bTWv1UyE8kJ;JWz~&d`Zz{Zg0;OvCEB$!DiLi&CEBkeD&fxk zJ5(~!j7lW48I_18o<>wswBo<5HubtjCF)~FC8Eu!M6?-|h&H1V(PmU)f7*mfM4M5` zKx?SvAxV;3qY_JVjY>?KP>CmDLM1g>D^y}Jtx!o5TvJe$G!c6PD$&mYl`JncR3gfR zN<6|fDp}^Pqmnz)W-ro&N*X&0mq8`9-Un2&*VQ_zMXMgv92;t#!%+`S*;mA5MG6lC zDj~Z%qY~}i8I|BDP7xDne>;aq22|2WKNFRZ;S|2(p@7hS( zXsKqWE=MLWnB=UAyaP8t1e3UPrJhal_vh~T$!0o}{s<<~yTT+3r8iDGmYOR!XWNNV zIja;|33>5QW2t)$$RQUb@l_iJJhuy*OD}v?u_?& zHA-r+q)1<5DjKcULhoJ-wF{Zmv{Rbe(7_&Jz~v(%1$tQi+LT5f zw4p&ze3WoV4T7PrNHD9Xbi2HdS<-A5+cGCzxFHE1W`n3XO^cbX1*Q%HI!Nl1v(ud+ zq9qc*85V@8e=~Zb1$3M#06!lkJJA9*-*$3=cZ9y#CMeeEI z4d~ESs9UgR8?3@3Z5NJDv7uSi5t-`Se1$ESoD|K?vk7nh$b=s=c^13#hF9FdhgQ{kWHYWNn?BDPurIvSv|5pfsDe_>swpG}nRF0zJG^iAU($e}GN zidVP95M=?$(FV%$8`c?746O>$5dlFLR8p!q-!TaB2Az6a@i#dOB<*=K#Y zZirdJe+T>MbtCIa&{uz@B9V{WaDSF!pyQoFQMD2+L!iqc&S;429XiCp=QY@wI^CcV2T`0T6u9L64xS5oIC5;^cIC4Xez#~wb}Cfm)!2J(Qm1-O zf1i$17xmaQ%8dP_tEOdD+I(;;5z5i$j~WSh{9&V{dtr=*c~aL zq$~wN91F&XLigPGq?$QZmL>No>PUu>|p(f+$3=(Nh*Y%S9a9G_Fb3xk^YU z+oGp@q_Gl0{D#QD|4kT8RN83Xy^+EPw6GAPRnhZiJ_5c3OUAMKYq0 zjDjfCY!_Qw(H5@SVt{Pj^`=pWK@@G%sLz^@ybNI(yw8Ym)KAk;MD?s@nlAdgBS*$$`BqT4w0T^5(ib546FlMMM!=6D3n9 zJfSfJPgs}fX9-f8t|ZM;lX}#4e-tGl3{!+BEQZpKIx=KZn>Xn{ zgRU-78LCJrL#19TctWIZTe1VyIZR78dY{(f{oFECs?{Z81#Mq`z({!Ff4}|suM4D5 z??;&pl)HBn2ifWv?|6OM;PSV_BoE$td`$R>a%i<5pPi6tGtverE2m#l3*;hLuKmrt zk~)ghACe|kq?AWgA|fO&Lr{0kB1PEsVoO9|>0pGS02^s0);|?!*9LRvcKQKR%}7uD zEX&WDL=VbH(-iAeyP!4Be;8RNdxsUEMOVp4b3>x$t<$W%{bmclFBI%>jIh(AR+jV)6QQ>`#ruRI|}i5nl9dwTNSk4J|1f>=I57!g@@OXJ&$@ zvhp~v&}=kAb;LsVrT7@5Uc~FCEve$%W(cXvs2Suzk^?D1V#Z^mhoKBp(7DehIr%Ak z=4PW=`rZv}>Sm)ce_;;m$c=PTAo6EhHXAJ&ksfb0+Jl%$vC+t=+2}!R%bcv(oA!)c zTYLR|&nPAD2=h^wrXP303QF8N(ysG(d_+(77+SN@I_EBzS+vDQv)YTc*ys!QZl%4& zNZ+nWN^7k0@C68WR~@F$_(KcKoGEI{i3Yz%3;LF5XtC0&f4s3O&|_t#fjhXLdJN&0 zmDWA#+$wBZv(jKecuR9N{H9n+Y)zPiZfvC)f3wmhwkAqTBC?Lk%z|K3!(CClx@n?( z81!n@7_e@=Mx+yCrJ3@~?~2r{^u*4>W!L7caKNNqj+JJr?e!1MwM4@}YI{*Czq7{n zj1`ceU@IP%fA_OZzQUb)Ay!(SyW`(Nir0^}D=RHa!a%J*nw1_@en?U&FSXM1C8Jze z7A`;T_1|4Gik<%T7kr?dqypCZqenyRvd{_6&*z5#a7Lax)Vn?}vhMA(Zv0OLfAvIz4t@o5C{|ErR2z|>Bjx}A z&X_|aYkaN#?3&`IZKg8Ees_gATH_<;fL7ae!5p2|5r+I_-)z26fTk1XP=^!d=$VEA zbMP3zL84kPM`+r69djhpAku<4mdBd5Q=k2-Ewi-T}8O`4O2Fx251b1dQU1#^ft zV-C?~%puy0IYgT=hiS331O|dRM4K_kNDJneDGBhkyO?tAFE;5#1+7-r*&%gAY;t{|Gy(x6gtd z4^FP=(4b64YB65k>Q7})KDXT|d$QA4f9n-!luFxC)_XkP-`WPCzFqm&!M+7%9=!Do zNZRQmC^FY+pKIBV_fPtkkDd0sZzU@~fcitWwXqI2f~x^`u1N~ah$IzJBx!+@PRHkH zBvInLNN_YDY3J+d_!*FtpKP6gBzLaB%t<7Jq&t4HV{p72hVg?A%ydd?e8cC{e_wOs z5|UMLHpYU#S}hMGk|Ne#C-$b3Cr_OM7lse2PU1$3;>!@}KmhRUFWYIn$(=|W@F`b9 z#bPTMY0p&? za~TfCP{kO2h~EH>d}&++LnK{mp0%PeI0sN97MX`7$5mG<^TlQJs4@$+O{M1%-@cv_ zL?T#)qb-kKFS;1xMAnSE8(LdUMA5}7K@KEAB#;2hI?XR5VQf#o^=LZtf0BX*$V2p9 z2uUsHc)1d1E}9Taxyl2QGbdVQ*^`ON)K4Oq&Ybiy@KLaVWP~IUB`Tw*3@m*=JiKV| zgKRTNGBIs2NeKiYEfn^eqcViPltRW!R;NKoz88?Rh*-twvB6ot%6Fei$koZ0UUpZ2IOz&c+fAlUof!v0YgdUjZ%iF+LVl1@UmBUk}s4c}oGgMY4UVz$y z=H{t3JfEEX70C$67>G2g9z*y>NPFFJ$A#-^uFcVo5IdiSs#(eK7a>J#P5Xd^8oxnE zXtE5mMCoglO4d=1(v9LX2uT{$_}>FGLK4X^q$bmP7F4QG*D}9Se~6tFge206orTM; z%7c*fq@yzVYJ|4^&>ryQh0s|yn zzDPKyNDj(Kd1MEQn~`Up`Z)k8_q(uNJ_R7X`tv`$`Rey?zj$iZ7zzp5f}U6_+ETXA zAFGyJEVLBU>aF|Rf3!rOO6WueQ^7Rj=OBuyz&v(S*V z3U#+_w64T$3$0tevCy7Yy~NMdH?S$x271(~6L&5PZBkk2H9wg$pe0M)Tq0)D3rQkkJi2#WNZR2JIR4Sa>FBc3~M8k6Y5GqH|jPW%)EOms3QB4Fh(?1PD} zH2s=nEq200esV1Xlj|WK(qkR@tEX`?gu>?pWzHkzmWJyKt|rSW+)Xm?_xEq|G2!9_@^ZeX2dS2i2%pNm1R z>IQudwV7>Xq$)*q+-&q9wyg0I?!sQUZW}~upxJ0Ge=u63gJz?_VAyD}wb*DK1Z}jk z(a1G6TF*5bO_B~9o%WiIrb5p3$$GBYX!e_Jv}lQ99J~=^^G2HXWm;=bWv6Nc%|^3l zZKF+#jVAnJ8*NhAX!2LsXf?LjXxs#Bw7Ohuv@Tnajkb^+#hAs`gbCuh)mWR2F7}&^ z_RnV6f2Bn2zYI1SiU6pGT-uQ&mGVGsVac%RB&HTdt+k2NY_!=)Td>1=3oILyr&hSs zBq+?POf`$Klf8%bVUty-EGH|Yfi*}m0>u{lN^D7PnCR3uXuvkoXLhO(t)Ea7LpxPi zC}3c)EzL+zOlK?)Gbghf`{3qGfdSZ(ZvWWlf7zyb$-n#EyZ6&K;sGf%g#PI^`YbQ^ znev8qGu1P1J*Yv9{N#Tb19UI?z6NoDF<8OqA0enX!$p#`A=#UOWE+jugydDI3uW3Q z){DfSMlYJ5%|@e0^)Q>rF%B!HZsKm`fK9@Tuvtpo16PA8QD{jWKI= zasK)Q$^6EP4yi11CW8QBc~{MgRtIIHwS4t+@uI0iYCr`c=uCsYM?8DckeWSUl~}2* zrbqLS4~6a_x9he^FvwmOXpXIB0m$ZKU?1sfwGuXl|#_4TwP~ zT|~_u53ECSTaXO?3DS&SbVjmFfW2sOnjMni65vmsp}c5B$Bv%7Xpx$Qmh|Otqddf+ ze=g>@MFPk|W1(xL_M+8sv(OcLXuPPMLAIHs)rR4pQIWbfs|BJ|(XjHO#nxh>e*t^3 z(9mWtTF+sjVQ%rFMQawCzG9(8V|R{Tw4N*5YanS09hwJQdvJNG?MjPm?L}LRYcJX) zfBb#%qAmQD7p74d&E(sCZCM;kppCHL9&STb1>FNOx9$qO?j~cc@y^EDZ%)Q~pfzKySL5z3#(H_IX;XJf&|t9@IWEvA zs2l5&Q7LvURJ}VHYj?01e{28j#(ENhKQ<=0tV7;6 zdBbUTNQR3}n2fb{^kl3>8jQ8}8)zQ->;FwU-)Z|4w>{X?Ml zmjmd=FvYqLxFu0Myk$4KQIw8~7cEL~n<%~*0FNWO)+M@le^V*|h*@@FFu!7z^Gmg8 z-ct0cAh&L+vja`F)tZkiH?o9smi?GR+?~+cRjD{P%7Xx^mYsc044O5fuK*QIyM^x{ zXt$_RKc3@4sTwwB0llf&b$>R=J0YRHP9v)TKPH)xzvc)N(M~-V|CzF+3p%%k6dGu8 ztFzNpx({Oje}(NZ>M&z#zWB<8+wxYZm z1njW^Vx>j0NtTRal1)l+d}42zlP=s?X(=_YCbibe^xE>G`B)KBJ zX&cTEk;B`Q%u4f=>#RY=8t0%x6Jvfw%GQuse+aJ6V{O1#7PW>J&|aRYW;OH0KiO%1 zOtBe8TJ3Z~*yzl4r5%r%=jt$k@-hlw^v2mQ3Y(~@-d*YJfu%-~0AbMKY+D=UxqJ;G zLvqkbo0656L8c;4ACPh^+w);7&^8;ru2{_gKG*hIb;94rO>f;os4BHDf4jj?{>yyf zf9t#Na}VO1@AG}nuQ&Ze5bejlT5eIbZtj zt$Po7Nlte(z`?VRl#f+v;J{X49XUc)34|gU8(M?HGf%~2D;W`OrJY@Y?@CU~La|Dv z)07R;&*n?lWHw)#&ST`zbLC5~`Jr?4e^5_OOY5$a(@Wz@PH(k+-C^ws9mv1p;WZjO z>B`HPZfqLaqLIQfv!AIC>FMK=yhewWo@T-B^CIKidBsvfgavLZw7hB7yFXrR6A>C( z@~DsF=rmkRtG(%C&IHnHNh|5;Hp(n+8L~2$OXL;w5yKRc0-z0$_yeOJC(Okzf6+m_ zX%*F&Esrw4R#J%g1VeH=AX940T9?pm zMV*Pk#0Z(>?ihnlKGARUriolA<#NDvZ3SdJ72B;Sn@pz$U)LNp>5@Yjq_)gRmu*N1Kh0tPaW$}Pe>lJ|Uth|* zjaJ*z!}qMVjmiirIjy>*ix1a|X4ZVDoYe{&kdmCneY+ja28_d_SYt~csNLeZK1ZCZ zC0^OyZQk@+Y*_+I-`24{`z%(I#eVaq{WG$b;!AA6@WFC0#fw`5EN|KwU}2cHy?UPb z8B+76*X%GwnQ|*nZC3)Zf9T{PIqd{mdDE4h))Bo{K-NiZFN$44-{Gz4ccU^MtD8&eCrtXUs36N_#(NC*Z{B|Y@7yD(4|-zTmtuQyWmlM3iFTU2f4jBmekKh5_@zgV zw%C^}-8#VFxgfZXm%41S&N_VyV{x>(bgOi=DAJvxV70XiN>3g8!8ml7-E-fe6JzB! znnRr1X5>tIx6!K%wk}G*V5`N6kE}#imK<$A7Du}gTD$rN^X;NL2h}sfr7hh&NnMcJ zPh_9 zF~(HK_tfTAz{FW2lzu@1>nL-EK|1EgfC5qUo8 zmyxuwu^eqz;Z#!41jsg!^^K`k%d7my|~x14EB-bVw8IwnpSytuT`(iT851&LnD62S^VGYR?y$e9 ze;f2$^*0cYC8(QStzGq+?Viu?IvOL6ebi`8veDkF9w1EGb7tA>k#(#7F8`Wu{8nsS zZROq^7D222ZvHil#%Ql3IgspMZxtHIkuYtZ3}u*t&V6=C1}x=X)!!&7DQoTOm4h7; zR-3jEv3{yBu{+p01*p@k2vA5nd>TvB~`&@O^mc_xY%V8%6 zThGl7wrI11Em{nBbFkCi>|pD;=1eySd!)s|o+-3tkvUzBm5zgL+SzbNA2Hm` z!B%r^jur>oLRwXSo8p+fku$o=HdEZibfe8O%)!B4UXsqtg22OHJJ=pz>Bq8_f0|z= z)4H|{c#+td-RBl*aI}A`pe6O1KRrR;;`_D39bVd#8p=tAhHArSn z21uNudu$c-lZpn%%Qaxza_v+t$JmW{*xW*yh`CJ(1GWCh9$Y-^zEdUfpET!+LgQi2 z_vZMfa&h?y_FO^px-{pzH(zglfBB|v<>!-z_x?3uQcbh=-X|rp?_at%-83zk#uo2h zl*racU10_PTFD_B*ibMs${-abW?K|H7bx_G&DvX_welRL@Ik|#WdnH3)|AK=Me34? zY%8wyYAjiaY`>_|GJIP(+)KMdB0CNt3v5Va4^Cpic?|fJ$foh`UsobqfBkj;x)Rw8 z^)8XES3TGvk=PW28rGx78~pCU}JIJwO(RdGfRkloSb-^Y{^w3Tl!&2Wcy1ZNu4wg zdrc~1t%VmRcfJ_vj3^t$-_Nt^uii!Z+%64~!6b^W$7+23H8mvHxkds(FD5NfWL`O{s?@|n#J zx3WCXE9#ot_x|L(ermHX;k7;%@TcbWlbiiGuf8x?Mh`Ijf2S1e=eGM(+@em{9c14B z#N2*fy92j^;3#N<6~s|wzI1Oe$9?b4KoYIeU5^i*eH@|UNj%}LPrInq6A`NWQjr{{ zkYg^FX3M47WzLD6SX(s`R#hZHU6D}xvhpHHxq~{IPlI`@7yIcR!6SXewhBP<6R?^H zl{(kg7q-TUfA*ecehPJ=C4Cl}tX>%R#m-XC zodVhu(&D}v!qDW%)1f0&1V}OW#MU+73Q!T#p`Mt4hWHBNB?GDBUw*FB1Uq!WxLz$p zN-6XCOz>uWwGT-GYM9p^VdU0kNM0#%ezg}89E((~f29Z6ZP$O8H)CGLS^asC`PFW> zwh$Dc+5#nmd1YN)yeU!yddE#!URCjJi8_OM@rwNv1Xb@QO%FOWETguzc}9v>D66z4 z86Iretzcf+Ql84n6ED7=z(ZA5X{(bX#=Ln7Be=!R2lM(V1@R;!EUeo?T1}E=hUIPx z^KO-Vf8^iP<1!R}+T9wtM-CpLo+22T0F?%u-N053<`n}j-qh|6=8gQ>mchLIWD0$M zhTQpO5G#@~uVj<}m7eNiTjoT_!;%ci&Qe=WbXWnZPHBmy9Yqtj6BTIYqe>vO(8;%i zx1e4w+#t>)X~J7TFZVLPKHgN-Bw9eP7XR+1e>96}2EELQB&*fxaTyN*Ahvf>j zwtPU5#2nUTL0z-*B}K=lh{ICr;ie!ZK80@LfV$ajiKQKf^vLUa*4h;9a1d|0a0)gW z=I?r?q*nR|wPf5Yek(rZmBi1APvxgYUFxwhRq-j9%Hq}l6Q6=)q^ar6#PP}Rpx+|7 zf2n~~@u``eh0CtYwZKV#@}!eYTSetugt7D>ed)X47E;@tQtzF$3R%Te!KqO2Q>+n= zYsIH5bBR};LE=-841~8Ni7P$@soR!pL2(Gv%t1D4?YWo6r(zm0q%H>m2I>PF5*}E% zfD}tdnA!hf#t+xi^{}b{QGDuG-@WI|f1}DZ-@JSO_WKVb5Qdj0XJ5DSM7p6K>rosn zLj!a1lkWRN3RissNwM)8#l@HZP20O|*?JpUdiVJhdAWHZDbI&X6(!4-s=KP18eJat z@C8M&RCI}?B#JGUAJ)&}Z_XKk!@pMM&b_y~Il8o0Bz_~~rESDLt>iJ$%I2b*+XJnXygFyjUs;u%h}MI@(*obZzgi<>`Y-QUWQH7K-ImFo}! zWRHIr=RIjI+1cUo5l9ZA+#I7t=9kZ_ex^D&)12OB6V%8&nR%^_9{X~=2 z=%}mQHg`pEWs+jn1t3SYe?x3@Og8q`HKXb@EMD0?!JIcDg?_8M^<&nd#jGp$SZ198 zg%-1}S86cp;VotzTiRxwVlnHQ{AJcfvsw4mxR~`+7hjg{#*-Ok^+?6>Xh~saa;t;Uj*wzI8QzSg^q-wtyaacSgjtvNpw!0B zwUn01wmStl>rj;+}Of5NO+b)(VJ$Vy;5n~C8f1i!%^yN*DG@fzhV6?;K>n^VS(jmjlJ|XO2$(Kzf7l=?-@$OBNYY9o32ung za08MSlr|z`KGuh1Cb6JAky*<;)Y6DR+4t8nCcOxi7a({Mwd1`Oz2M&L#jv#_d57EpT;WbYv6`&-%3sL0$xt966K4^eGaN+O!?GiE_Z)@*%gIHQb;S zYm$C9+^`Np8L{_lxKSaXofM5sQftEv?G~lyalka(f1sZ^O-w%UA)W#^ba7E3Ky40K zmJK)j6Z}=9Q=MQ3vXFoq5nIEJMQn3S0yh-ea7%)K%IeVyQG*RPM4>hsC?lyee1RL# z8g4Mre*-t5HQXR;(~tpD!wu{_UW8QFa04;Ki$J-88yFpV5yXi4WoV(K<#-V$jVO#! z!-3Kg3*6w`N8pB}7`OrCj~78CdlB>=fZ&E$llMcjT_?cHi;y7_4P#kwLo#yg>?pO& z0I4PHd-~dNqq@{^!#^YHXiUQmDvlRHIy948e;tf=gcP_j22Ksd@}DQgi%{%Dq_D$s z&xkL|yx|54(6fN)Sa4&s!1AdG>L7V_N*ArHwR+e7Tx=EG@J|4#vt0B+`QsF@lUqzA z;D#1z-*G6?uq|1Fo5l}GeL3qzI6BzR1k`T5@qx<^gd6|(zsHC0`RYD6184l;pajpt zfB8tbvBC+w5~H$@j2Yw1@LkW zHlY3jN9g|HLa{Sw@s;RO27wn4l)Z4u>Vhv#uqH7LO`;l;0$xmFc|sbOKYE9&Qrth3 z<#~PkoSzi}@lO_Sg+SCe+Kf6N8N3|%f1z=Kmup|MRs|7*xRe6kDi z3wq&(3urv6zR<4qA}*Qp{xs-?qdpufWXsgW;B55C5^D6Kd!U70DCi-g^9r|1hYu3H zvVZPRZ9y-}l@oeN1GbNJy?(0l{PH>VpZo+gzrKw?DfEZJlfrMO9QA%R{H5~#ydaDVGc_bzT-vnn~Lhw3nsFz7{93%x+XAR4`h z0ihR@Dh6WtYneDnHv_<(LqRXI6B|kB#SK>sgldP_=9tJ{xKv2e|6@AQV8uYZXjB`n zk9fazBM{e`>szdQvQ(AfaD$uJw2FZ+Cpg4pwZ#|AWrPlReCEE2)ED@o*^dJ{pMO@4 zuC^#-=exFm7v+N~`D&+WS*EToRSVSua|nb87fg80AVh~ibdZmPx2_Us3@ZvrMyhOE4L0YwqkE9+m9Y9a$ zsp!zmZH;cuyi-Wvg<6@lMxDMS$A6mQJgGt;VMibK{eBtnMVV`UOHC@N*-MfBJID-0 z@Q5|W>d7P+q%2OWqJ_1rSGrW38ocD^9X2K@y7Wch#p^WSMKTb0VNpiUmmz7}k`=gV z{E$8cyl~JVTz(*U>H8nQ{!66=efe)(WbuUe%ebe7!zNxAyRk;R@%}}*h zdW}d2hc#KV;-P4$fbgx2HGg*NLg{UxV4!U>aEtPST=QDiTb>P^VD4~bFrfP$A9;nx zeZqPR95}HD@vBcU=!)xNOY>zLZ^92Pj4CxcB=N|hsaY(QZreS_$M8csr%5)%qX%g~ zkHXn@n++eZp_|23Y`1@v3^3)$K(^+I(J$LAzj9=kxLvFy+*~Y8hkr?Zc#SD5+YQeU z(C%%!QQ$H!j~KbK-Aqo55J#mplJ(mo=Ud8lQ_8mci7Oouq z8e+Rus%6xMdXeNplFH#O{$aakSC%0d+-HdZYt$J$N+bC0+RoFkss)68~Q_ zL-N<6Y}>7$vc-+80)Ieuk^&u;QQ2-jA7ZQdOcfh@`-)M6ZM(B#)Ii&A@*=ocN~1uI zP1$bj&8-lrXl1*>t85_63C6N)H?rp8jg)KK%_6(yQW1Y!#v8rDjS5w+?Xu!>WEi+y z)3OND{lH04sLLXY^#&RdKjS;mY`wXH3^;AsYg?=M4e6!Gn18DUJRWVm>EP3?tLrhs z0JGjTmn@`ozgA(3t%ZqDh;*3Ww%%aTMU-01^CRidObDhyS#KyprtV-VN1d2430ZoM zu zy*+$59Ljp5BY(VUsKfRJ;8v!s z_PaLMEq@R8d6-d~q9WN6I9bbWwzSYF&9f`ryMKlIED@J_fH};y#83aS)n;+Fxn`1k zs|^Wror$MK-+=<=p?=DH?sP+U70j`dY_27?HrI>T=9moOhBQ}af(eswmqEW))^ zQ-36~ND%SbTw9DW*9-#YIvs6uEpM32wNz}IYp@mOI<$ zrA8AC8{H#75@=6DBTe?YHL(5(q+hqx3@rY(_J|k4nvF-})OJ7x%Ol>DQ8`;`dBj!S z*aIqi&>r!H)<&8f_Jfg@D>!>;uYv4Q8)%V{HGrpFMKnSZ9fA_;nwnTC<0nHF!0nI65=Cvrl{HNd^A zrmHs7pt7Tx#_@SH(=f{7FIze!c{J1H$E{{MU0INl?Vwmi4muTJV?JJ47=LE^k@a~n z(;_WqTI;fR)q)@LLat^Sv2CR6s+Fnl^g#`@(M|Cp>mLk6U16`dZm*LXJnX7zpv^S9 zYJ0@hXq#!)ARh7XHh0zWh^t(iY2pNU#KZ73)Aop~*xXd>>Ei0vFw*vjr>m=xK1Y$j z+DOYIuDYPLk&Z{)q_L-#M}J(5A^P%&<9V=0e2$R!)Of^GU3 z6w~R;*>L__jI?5w;u0hML5BizQN{N^{(ju~{Oy;2{pS1cvcFC$9?FsbwgkUx(nAHt z*rX-A|Gosj3*RlhXA?f?%)&?3TX2J3>(1(T%b~-Uxs@?|o!djLOYY;JX~<_RxaiGY z|CGuIZN8k0a8@AI+JDFU zo%3-zpHF7Ur&RW;K+evPYVGY~xy+Ee%fB(bf9(nGgShyzt}p)Z!{yID|Ka-b^Dq2* zxYp_ypN}NppXf-&^W`)5N&^kxuIN0wA<()*_nayFLShWYS+xebag_g+$l8_e6;f!e&Y6O6XeS%0 zdGypI?E^%Lug)ZGM*(7GJ7~5)^mbH6=ZYOLMF>@8BT&Dws@Vy+eI>`N=YtPCVRXC~ z;1W`dZWYaDV1JTk3j}=St#_-zt{nIyUe9HVO%rEC=DnTvSy=n*781r&`vKB$2{aL6 z4tw4YkQR%`=pVq!Rj6~_1krumcdmN6Wpuzvt8i3MUJ%&#Dn)U z&1dnSWhB_ zC)r6@#NIa0s1D`0WBeoA2JWvyXGz=4;kx2N<7e*3_qQzoE2SyAAyKyS3dTtWwQ-2< z<9F>G>UTuW-CbzO%n#PS!*QmxaIGHpP|J^rr0QvjBa25SAf`3P>p62UF$~EVM&v*y%2_6z|Uij*acaVsq z>W`1?n(*g~SB5;w%o`QpX_4;u_EL!ik$;i?7?L$GB<47p$fdk$q~x6dsW@kS*!$nC zHF6jO3hF02c4GoJ&bQxJ zRne4~$8(PUG+^LKM~0NIu@swqN-xv*XT_zg^2ZQ8liUIlP<9v_>L)cc;2j%9dTul9wF0aw8%BIDJa}!&{|1?dGz#WC_ynVH?{pfemq zijf~9Ck+@IACjwDNHOs$wXrj~9O^sTihHH-h=lJOh0Lf z7f{B0<-KE&FMM?dWq&*v5y(ZT`i(N=zWuk;7~}(5p{6AY#VCVjdLD%INAX*#o^u!W zJzSX7#yXRbR_nuYg9)c*8HI7lNPc3ZgEHKBPzEHc_!EAzdT`|w%FwsU6B?9RIq|(h z8PKACojKwoGGd}=lndiBp$dN}G8hW`ZrNX+p&clL28}Wv^?!C*p$rV4QO2XpT%im; zjpATf8)Xa{o0dWuC}E_GNYRarGP>C4lO-fZWa1tvStz52NRHS-89hWM6$DBP3MCfG zpaG+d7(HrFF9Rto1t}j%VUUb6xLv1FM&q^l zPeCqig(uXavYxtk3-`<-P)16jaf32cb)gJYrh|oIpiqYXp+T>ogz9}Nho3TUeP7A! z#6~KVVaxA2+NXfndPbW))zu_ToH3nH1VI^-!u+;*d4JGUE0h6ZvY92HW}pnb2&@dI zD;T>`hTI!EmGh`uo(g4v26+7v8neGq1~hM>S?mL4^z9@LI2Fnmv|fhp{)#N&}%N%dF!=#y=z# zB;^LPEq_Y?^hZowDM%|7cn``j#jXT((8@xjLK!`B(tw3BOmbBVDJVmwHg+bLL!Ad@ zsAN!v?=ab_!&?)Su{GM-d|_>nvRZ>OV4j~yIw(VZDU`udGRhFCPzE#9C_|(|8D5qQ zmKraV(WFmtA&|=zEY_WfkP|90EOOM?^_^CT>yT~l_h5!BQHUgldoQcEF6uLO1oy`UMG=Wfh>wBs5C3F zCsmWO{A@QwIzSfPs?jsLAd3P8wIsEw^)rqUFLJE?5we)HLzdb2s(thA3R#xQ(Rg<} zpnrGa21}W&EtWaW>Rg_%{WGcb+nj?EHz|_ z8Uw%fbP>nd;cuis7G(ezWRas=8)$rEag4aDf-KmJ0a;WE4N9>AS#k}E#nzBz;k_XX zqzFkvu9KFakI@x=1~o3+BL_nk^^Z)ChAdc1TPW6NLl*f%WX2#hWI^J(nS*h2OMh3u z4Dz+&7*W3x2-!%1EXXL1kxguKOt2BEtC8ipXw={Vvgi)A30dq^fHV;ccf-0m?SUJy zaPz246y+MRXrdRX0Sh5o-682>4OkR2d6tvW-7*y6Ur+LVth8E|OQ}JTzzq55AIDP7 z8ngy1#Bn?rkP5H}bLs4|MLz(`jepJ&i5O=V!stJ~rSYxr?KnlnL*6HIU; zo%!m8B#%UMSTIs*i=V}iu5(y?bz6DT(9*GpQpfFYE0VOUNU|Iv8MK5HE7>!BL~{zX z$Pg-WI&npQ3J0vw990V`7Jnn2y}?hc#zlKrU2u!$%*vUj_OqnHsPh@kQ8}3#IfSzT znxJJ+ggj)QFr1a?fZ^6|=Mwv+7<(7dhat zgBE%8o!2pk$Rt@?{zMDzXGL?|z>Mbjr+cYr&Or)0XsKw9U|@rm6Mt@+NtStm7J#oy zp*;p@nE{8P1!q`dBdwrCLqUHIpv7I)?I#noq?EcdK#NPs&mtKGp=`V_BxP}26DC-q zIo*}+UB{xNv<>YO%^9FYRj;7M@@G=-pe4~9)+Ic-Z&Lg+Vl_JI>In(Z5;$^<<`gf; zh{of@8YDxl4uO^d)_>C01PgqKv0b7$@Dan^(VXyh63wC99?eO8C(#_r?a`d>t6<9# z&2j%j)51(`hiHyPwnlSQSHYGgnj?~7OGk55S>J!ML~{mi0g2eplIqg^)-{dwG6ke4 zDIM;DTN1v3{fM%D1|UXf2E{gRkrvJDR+oL*f=KbRjFD4A@qe?NCmo|X)CD`tw+y)h zBXiPg%sZMxTf`j1S+_87%Oue#xW&q7VJ%PwZY8L~E!3l*1GlIz2izhOeip6N#w{Y* z&oY;#8sETH`f@g!^M=dYo}4xWml%Yy&>&trGxR@w1$?;`gidf*aDw`uE1L8Dw_pGD z-@pEGy8>RN4uAfO4!L|1@Hpca`Ph07p&a32-bt6X;`&a^Ehi)n$Jx{+gMl+;9hTYP zLT;u@5vtP&Rxbjo5r%{<`Xl9GbBx7+4TgCm@V2Z3SHJ-!s35bjQ7)(#CEe4>pn?B z_J>PZ+<${gh~QY2Pu!)(Wj2r_=pIj54!lkjjLN%uaJ zfxs&bx8^Fy;#n^1Jdf_a;tqKxoQOX~ekqY;lz$mB(gnS-Eg``>UN2^->RLo8l0Fnk zQj#Wm@ElybLWv%O=3a7e59u%;;|=M0geEw z{ee5NljIJOi~ts0N?s(9mN9|7i-jbvdyUW_-jH?G&;Zs@wcQeNd1fKPmJgAcMvlzQ zJ%83pG=PO^2=?*Hz40M3(eAWL@IU%nfQ4zwGq~p@kG=(1n5LBp2i4bFbJ(0`EfdNC zBUG-};TeiVRube0HAdM|y!T=yDV4>F56iSCcZ;i<$@ApT7Jfhv=go=qaISqBBfTxk zPj%I}N^Bg(Rw@W(C69>sl@7EHQe9J&Qh#(Y>(5Fn4pK|0g3TOBL~2}#Ie898Z1 zA&Vxts!0M^n8_nMlgrlUp5fBxiQqgFlawyp>cfZU2|CPf#czLoIc{~oQ4TS22CYD@=aYp!a)#ADCVHOv>eMdV zg7c)b>Sx$p|8>VRHd}8Ct~V|N%h0}*Mm5n)fwz#5r%84V2ncy>Ok!+USh%GfQ`bY* zL481Pjjj$SYj4KS#53wAS(J7SxPNhZHFaxYTmwgbGMHR`hEa24`c|uFQo8b6nJ!p@XZdo?g!+fxY1aTcDe;U+;q;(Y4td334)acfb`AI?7$q*N!x(Ta1R^L8 z@@KmP31{3Yao?F5>QvFVJ0_73oe~LSD8I*N1q-W~g|&Aw^Y~7?a(f19IDfcOe0T=N z2$@s@5>`+*+cO|Oy!WJ^)t)<o*;Wj5$Fjw&7?kLZB6u;_3)f?X&|tzDp=c0`a>NctEHKqE9~VCcOhWq&h=mOcL+hV%ZO z$Jt%3Y4HrGwv|E|i_Al)>-2n)jA;sJ+@c!p9tqf{7&90eH$q@l6pxhf4SbLz(8Ag# zW2Ei_OgUKMfE_|I@H>jFg^9@I84!2UfYLxEjuNGRmaL;PtsbEyq9Ki0vzrb^Jwmc) zK;xUi%%j7u`79}(0e_VeoM?8KZ?but_S6g)m)H@jPCxGAPBW@HEusV1iD+z%qRgd? zR@Pd-_Z(A1LnTy)u!Zk8m#`V+`p_E%F^>n6zUIy$`iw3})G#)mLMTi~89Z!;SA4)9*IY>219#kGhr+ncE8Uxv!WbNo1M^q~3jG*k+++9du8<{F z8D!ACdnu4B%qlbk3RMO^kr#Z>BnH3;_oC+0fQ&okHa&r8`cq4*`(z|VW!|BZb9w+7 z_hem1f((%|^#;grDd$WKkdaax&6ps=rFM`} zyi+~AN5PrI78O#1jC&n%sIDwSFu2buNvQ!cRL=@BEMBEbXl?{#4Ebv@q5paSY*Ov% za94*dZhw-T1eQ@ihWa(c7Q3_wHzbY8SRynSkTEE<8OwNwpX2sg*Qv>P#>(C)U0cugxSt}QG3 z;mvcw923d=#uI+BUdDF9-)^3ZQF(hVq=tG$E}n})8-5DX91flf?bKJ#MR9iUTxgf- zM9jr=p)cLz#d9%fEJZvQVvG$SLS}C@Jr|?cv6H1L_$HuYj8N^$#a#vsZ6s%gRDUbA z6>Q;em52#%i|0b^P0vMyAblo>PK=-ck~DUCE~K38<`(J5O*5&rjPEgtm@Y-YlK|%C zxljzWXUo`v?JymsKM29p|~`x9XuCKDz#m0&qa7UdM;FM_gtjD zqvt~9lGD(hi|(rc!}MIJ-0r71N0G=@&xPtzIFzcU=fb4Tb0O9c{=suG$A73j7pZRd zT(sC)m}SSs-Qu~>&&6|5A2HdaAGIJwIe0GI!Kgp8apHLHD z@rSUjBTBB-N`DPqF0>ba5#`7s)6JapQd<`BE)v2z0Thqr1|*D{oGpD}PlF#S`1@Ko?b=bWCL- zIOrk<0$m^lxdmw%4CT+!?iNo^}dWf)#V7kN^6h{1Jf$c2KG1_(T=VumgpWo68-d_PDZ zdnFG^TE|U#jAUE&cmRjl^X&n;l-MRHaL`5lTA>R+SLiZ6l8rWWfpUZ{d~*o8^u$_$ z#Td+qH6R_KOW0w(3uAA}Tr+$Ly72TRv&5ZlBs7k_ZhtMXJf(~Vs-n?W@6vu^EBjDG zmvQV>AJ`+JmAXL}tyBSeVOEv0(|j(=6Q%hq0wK_*0kH6clHh?GMn<&Ozz_s7gA4 znty6kGaNGNUrkSAeAdAvKX(P?Og=8unNq8b`LqMG7G)gIUj z*FBxeNiY@-gFpinoTw;|*cyS35#808UdkMg9xEy|PX0%}H-M_)Fk=_t=aYfLjs zRoo{6i~KsuW7;0&G0B*wqda1)-7y{I5r1dHWj3Nb7SR^vF~vYiYfx$_m9o#W$$Wfkh$4L3Eq(hWP?ZXbUt+_n7WAt&Z^58y4 zW16M9cE>CvFHWhVm9?x_Nc2#X&X}ftwmU{21k((6j7Ui&8SWU7hHc5BRO1`d>3_?| zVwyX{Te$o{O!N9x9=Im--xg1**o=0|AM2WVE#~vV^&T=wo|%wj5lCG*i2b%qk~3eu zkV&E&fONjA>c4v#V?47<(g;5Tz+IX{h`I$DmDnU^oJl%w5}2-Sw@Iv`XWdtr)O}jb zhX8UGQA#Np-Is6hlca8bGR=S(`G0Hhv`IN{a>7q$oYJ`2h2>kFH*tQrD5G)?H?UO` z5)#dQflE$O-t#KmO7k9EoNM`U;Dr7S61>%k6YLjk<8pDEIdK9kW=}~VTb%}Fs1IBh z!{&>lHVl_cZsc!!atT!4xUg3ODz^CC*ekF z2et;gB+%=|evElor5vY&QDE2hF;g455uNp<7kF|O1e*4f&x00DG^Wr{T*zCQh%V=0 zR(3M}i|)4$py1sCbc8p)(0>6G02cYHGDrThMTUaQ@GYXdT8W`kBXMf{F1A>@_!|qN4 zBpMLJ>wxa@bWmtO5SP;vtvC1|Rj!Vs=tTpLlbQquQ88H7NNO^uyW1jdQi|DMs4jpT z>q`#HFy5x+K#DJpBqSUf2U0u;T-|byw(uYXAd%N@5Y%I({^R?jhbo4Ys{dJ}LvAfi z;0*Bwv4;lIK1k|LKYv@6{uyDrYQHF;YU(_SbSks`!aZyS3J|D8(K-#4Ef}IvKSKhA zSkRObDjMueE?eJwx{FKJkyI&nF|%5Mw&A6Bla zDq}#3vX&JKm&LF6lX|SEkggJlXT^4(Avw zL7~0->o?qGOZZu6p!;&{&WIAsJyZ9I1YN3G9hIc-qUf(u$ zz$NlXht4Ij~3)U+d+yubO0%$ zEg&V;A&Uu8!kbF%AjP#6u4_QDidMAd&f2s(jkZMSNa+xdjAbz!x&HJ;1_TuduVmxOXFuK`n- zx~fqIDKJGn)!R8YhGT&#>M1ktrzky_E12Ttar>B_G)$r3Pwy}Q>0L01PHPBxH7%0! z;yp{6I7P|Q+y-WG0#iH;at5*?FfHe1VMN;{F@FM93{0V8?xbnLla5M=Dl*Vz{76{VrfA8Oebg099ZmBu#q_c4-wAJHQod%oVSMGlrxvOaT^` z+t?ZtU|Iq%2&+~gC|9y9m}RyzLCd5~)B(6*+^70*bjB%Xj-Fxrp zAZPfEQ00)`x?Nxjn&rK&Colv16N0CToKW-Q4FcW(%%QoDdT~yG(4G%vJ8N5YLx*$I z#(U1_ocZcS&k8d`H}R+bkxlC?9*-5z+<*BTun)Cs9_0v2_5*Q{G>Mg9pNV!M(pB0u z6iI81RX$*KfX@>??crHr&Ri?0IDM%rJ)Zd(h3vz~?hJw6En39Yyw5hCD!T)Y4-j`yx{$Kf$2UUDMK! zcC83)$hBf-25Ld2i{XJ<^gH4ZvzCyy{-Tv@1#4{7BATQt1$n~OV3$tmb?$PlxZI^5 z2r1W!D4;cFX{JwV^XZd83nz3^>VKQgwrfS56l!_m!ijRNxZj|bC+thPR#FO+#Gb!h zD=t
b+EVWWZco&dt_TESN~`!xDFd*K=9VWAv%ceHCoJvC}!y|-&cd>FMrYu5@g z_nMukMZfj*Nj!L?KZ7PD>68^qtX(Un3AG^EUInYPi>7JSlTF*(cCBPp(SJs}1Gwn? z;ZAcNTDulB{mCgXtz9eLL2H6ju3Rg4B4t1|%Gl+&R`8j~SCev$S%ix?R+#R_wIax( zHx!zd36fPxZS8^SwM-YBN%OwO zN_vjd&KOV?LrU#hDJhlQT7O5O*aTQ$Z@5;{sg|YGUkO`PW4okupbXcFXZwXa9k8N8 z#wv3-rLzr7&Xa~~#q7AQ(%BjFsbD?b0o{xKQ_yf{Q4$XaZehIl>m)J%_2#$Ub zn|VIsK83T4CC-<ML#@+^`ai${K_meoXh zD{I$W>RX|wK^c`l$nra~uLe=SeEY~IZKJ`H?iLN>olh|+uwf&hTMk*F-Jr8d03GN~ zW&Ekfi34C;B)uv}2{kF_I!y!3SgiZ-WIlx-G2ndEUmqlS$^Dmm190V z9^cyhI#;$y^a|m-SM-4v+)w_67O-@aRYFJWr=Vqik@%5>VM_s}43mA#hijoEz6+Bg z(GzZ(N%an>!wqAMj!QvcDzPb3TXX_dL`_5=GF`;6oF@m8PzWF56=W%-UjiX)9k7*y ziJSfO2+h-c1LoqUk1UOS!I)0Q_OOa#zx|hVSi~C-ZD6uKS z$S*>Us((ydKu@$lQ9P+NuvzG=3#XIxj1otLsWYoG$quBXlcNEMR}yw*pKc`g>)T4h;E39Y=9Vvmu6FG4sj0R!a4KM|742SOWOq1-H1BqWa1 zK(IVCQKVs2vLH{mPG>$AZam!E=t<#!(8VMR+06$l0tGwM8ku2)$rUXe~?LP(sO<~BNP*?pE|neyTzQzHb`Z=5B&7x zG=GY(Zk_dQ#%Td?x@)WX_2 zS?iK34sE*mxJT%bK(kEuAgK%9Zkds^z<+%tHr*y+y3@~UPo|q*^NSSKm~IOJ{TGst zxp2#-Om|2TXmN9~G%e+!+aGT5R-zEm8!p5IWI#y!c2n`h6Q*yVCx&IYn`HLr14<4O zq6TrMTb_8z2ff41SUtskKyyGsPKb3W$x`Q@?{%l>CZec{O^^!-wL@>T4@~v5Cx6U6 zkg>j#Z8WEnf;vc{c|KPqycTA%q1u<}_A0mOzOcNtC}XrAhi#dr@hceg|?-DsIG-AT`29 z@m>@svs;@m>XZ3qA!;w9HNP|g#=*0*k$P>a1A-Q2q%69JUz5&?FQy2%DD|(vRR4dXyd)}3^x+^S>t`&(Vn^TLqlekUpL+-fsCJjcEOBz_pe{P z$32h~P=?jH7O!mAUyEOyxqoQM!g|fpu!FT=E$SQ zS+{V+?&l{cB%s2LbFCnaw?p8BpUgAuH4GvAtsDY_GAqZarkyy|<$p+t+9zJ^-T6X$ zQmUxt`#5GYDAXQ@fWotQ=8Lm91jyvzP9%S5hXB?4K@x1KtP-EbA;69tQ?S#}=LDn0 zSvv%@Rk~6re*N^&%k*7)z(OfKMBcl*zA;25Rc%2PBy%*XfVXTqWh}-q6S_U5fKIa% zf+~hXfXzXn3TM@-%YR31nn}Tt95X?mxfD|nSdqiCA`H`)=^~C-SfR@0t7%w4T*6%C zgp)N^!V)eOSfLnNwyElUm~kSAP_H)HR@nkzP%wHg|K; zOk9D{#bs02Af}a5RU{GJGWk_3u;NkiZc;(TeV;OU1ZC?%c$3N{K<+E~3q_(h(gZ9$ zT|IR_Wya*E)*%gl*bacK$@Dyhn$no!i7hA>i<>WKuAJpW=C>PcQ1PVPCXy|wy)nh3 zJU20~15-R|YkzZdExy_p(ki9p)vAY`J$rC-tF3{=SU-a)>ZgH-@GSaM%U{(5Q<$=2 z3Xz80E_8@0UNMEMT1deZQji-vlS?^vS>2xP=8`RYV~RXUKU-jkjfYg-XtdS%!rCCw zA5AXBAEf*BQ+UTXoW95-;3cX>9vKW!kpP5xJj_ZKUw1{im_4$ilTfV z+K^~FA(Cyy2|t;^@;7?r`P;-Vib7k{2Le8|1!&_+>O6^Tyc~)0XqvajHPd?gUkZlW z%LgJI$pf$9tb8ES-MGe}IT@7x=z(xTxYen0cz@sodDN!O-?kHk<8SQE{poaqT!B~C zV#i*VCISQ)uJm}IFWGeC1W|n%H57zM>J@!xCx{a&ssY0lx?Vry1Tkoyo*<-8- zynhZKP;plUSFUh{2d<=)#s+{@PuxdFkhB#vT-kUpjVVU0YPAqN1s{1(r@KOjZTMI2 zkpplgrO4w=1VdG4ImrHdlP#VCS0E*V5&5$&+YKUr0TI{0mD!1n6u5$n+6}UZZH@`T zRb9>~Dz3+LqQQ<})S{t*+P-7I88Y=4+JAI|kkBks4sE(YZm+-yrcFNxmul3v?FV7c z`z%neZ_5v&H|ROx(tQ;g!AXIuMYEq`?FOk;c!uIcPtQKwYCNc+s-VRW0>tH{nyQiy zHhvIl$HOifvLAks`$u-@rgaztxT$nef7_0bmQkeE3JC0D&;oY>Em3CtY)6RHKz~FH z(vZsZdW6!B5T8d;A-Y_S5SFN+=NLFCz*6)cOINj!+7WVKXL32TxhA-@dCsG-7WMMl zRvpwh2aK`FO=o)PYXv7c9mmA)s14^r|Mbh40YO`f4NO3{PQa;%gD<5*!_uypBTy$_2gCytc?QV1cn zV+C5_NV#Y^_Z#Ur$$#W1ua@Eg6i7pQA~!~7=_t1s|!Y{>PDlrgIHM`Bnhf8igZ6e2S!m}z$gsDz$hXe zFp5YAj3RzErqh>y0TtNcaD$7JSL2wN92PueGpNAf+=;fo=6~|_Xw6Ax=P$nb!#98Z zjMD4IC5=TbT81%@7OFtFu8S>(>RR5|re+kC4AN+}IOJGMz7m?8JUgZz~WxP-Ie zBymg!8s162LMJDQp@+-0lY~?*S)rAtHHHNIX*)^Sp?{1f_|(!$l4tj_veA>s1fS9Ra7p6co8-c!@nvwQd2YYje{srP`sc*|pG zK`T^(EGvSoyW9jLvXc~ezz&>R4LDP}`j}+(Nd6Ic@QA~3{x~%xG?LP}c31%~a{HRv z>#a|pIRyQ|s;I32mRUOE#_~wdAYX@P5Muof^=pm2E3b^6HQoLT&s*wiyLR-?~Je7v;2DhjP`E`&O(-5$_N{0O3FkPHf?S{(?_A2K+!Ljz)5N@hsTP zHNk}cF#p334maUd$LTYH;ZBo(;s_q1)e>O5sJ%t*shtA5F&3y(wqU)Phf1G%9=a;R zHnY-@YaGlj&w};37yG!L^)(Q`+ap-o@dtYHSC(p#zEQ!2nNYA!XtuI#c~N~YN#g|w z3$90%k%CJOMm}Yn%2)uV?1s;t>fuA|C8k=oTm=~S&FSd-MWwO&?XZl zyG?t{pwJ+#wIske>5+(%U{Wp$jb$%;F2t>AtwpyHy8K_gml5`Wqrahs0b1d4R|^tm z{?fP&GE4pxSdR!bcth7=hAn_r`NOIqm5ORjWh8(j*z9+>iDvX|{4Z1h(LPd|RGq!= zw{mvUs2JXW@Zmjo7I~P-?%yN6y`cAiL&2tAvHQ^yGE@eG{k1Z|=;fp_IZnvwy^Mmc@F)SPSp>mbm{n@tiVqIC#MTE%hmq8bW@HNjlm)m z3l%9ue5;kpPbe0mjR+&)YwOkll*#a|?vQdR>!A4}nr?2*6Tj~qa3A zt`<3m(6*66#tXGUXGUr|+=-XaDg1=cl@@})OVJ*LG8j2n43TNuAgyeZRe+D4)(xg@ z$~32j=_d%GHDZ~!Y2X!2{r7Me?GD3oVayE`8Ko1hX6X(n4pPlU>8#2MLS>rUxOcs> zrStJXCQ8=y$=!nT&$loj%|Sbg7HHb3NNsf*z}<6z?Jc9*#5Y`<`MG} zO1$=#-k>|(s#Ma6H~!jD*_(~)i=e51K+gT1*bys6Bi^4fV_Oe7WyL=X)>}imt}&$63pXm5nlo0e_T7qsj6yL$wXbfft8)TULNFP zf&Mb)r@5^?`ifJ#{m--aq8Qeec-2xeBP)`l(YU6+#>kjB5n+`SbpNb8YNU1b?Y?M# zvr^w&31d+)WaZM-Y{WaSN5b7G8w{FehD~EV=9B_toNq9gQU}WCaD1vkCs@B0Ca22k zP9RmrhF09?1O{eS4reEHjQS$DSdTIDbELQ>Wt7y(V-iedADjd{){h$-Gd;O!nUJW9 zhF#lq*?Q_^^h&4H-D=b;5pms?0bjr2@_hbI{R>q$Dw)gMSJh7zN2YKud66D+|DHnWCD8DO9(F=`D!vl!%?e(@W~n zaW*Oh5adk8*;zP(s-wI21PoZx4UU^=ICc}PLZc<-0XFID=}Xi9z#I+3zANxAE_95Y zu$WGvR1ae10#s7%ly=hop~59_tKum*pDTeJ^btDM^35BS^*z@)?=Di-2>2Xz7I@m= z^s>k_p-$-HlwX+J!&L^w3~i*)GS|yw3?Bi|UJ+Hzv~t?*QtG>_56x@@oSJO6cx4=B zxk&a%#n$XwsP%=?O@Ghy5xpe5^0Xu$(}v@WG5Vl#VSNRLPFUJZw#LxX+mwe=H)J5) zq8PNp<*ZiX-s+2!^M@;e3(lMRW2EH_R?Bh!h1~Csuy1Wn?w%-Z>+o?xETcmWqN>86 zJ~qBxC_@S`#Ft#?v462#%ZnAvCpMwU&|}HzrD39j2bmvN)s*_w3MwdQO5~~CcgDfeP@ z&Gs&vIos5cpZ387@#gySbq?t4e|tmTxruvRzM%gQIrTS>kA2Vh`LD4{^(B5zE^|&L zBxkL^BcX<+?Qx|etNSkVy)OE89p2ox^AUNBzfP&Mo7>Q&voS1k7(rrTwJbiRR6&! zj{6TB-LZwG=$=K}7$+Z8gdp>5pmF&Q(3+jRCLJY>b(;t;iO5|*z64YUHjXUS)%0#F zl(kxil++JlDyhNX(Pl&8x9c zuaPx$FN5mfiRvKc{>z;8y#OzWGH^nOw3hoiF3-&}XfEYRgeSFAr`?!ig~1iq+=?6* zwt*$?vYSE8vJ~WSRkHB>#WI5|~C31mum=kQlXy|ouk)6a;r zS#*i&(QK7RhF|jr0VDLWj;s#;1(HsOMRKV--TBmj;JSMIvGVUxn8-UUjg|-(Yjois zF!F$?^)VqjYDT3BPXj@=O zi8Lmjh}Extm`)&%zIh%Zlw1<#7`U*A`5Vu?@9NiCPMTwx z>+9CjQhwU8Y&wwNh?V-bQ=MOfc~m-|AlkSagl^hRB4dseg0h6nLfCJwAS7#J0iih3 zHR^DksieIec6nnZBRqW;phSj^D9D#qKsR@vzl7af7u3hCvs$|DtFnh7%T*6^OL9-9m<_1KGs^n?5jC4!n%HbvBJ5rMhb*_yP`|9$D8G zE&yuhX#ZPg!g(duiQ;g^c~O|lBC@lg>~CY)mBL!=V9uk5<(76MHU?9-PmEVJakTI# z-9z=-w*fvg_h`&Y>uX*Dq*2#9=<q3FKfCdX0hyDAFpZ--TY2lJR1ps z_$v9kL8D_jB@MZ*nm=myazMh#z>@VN+|6#0KA8c#f}N`&&$>BUN+T;*yKU<0e!PgG zfqtirgPlr--~FS{SnxAv!Ff4_g2XzMlF@n?*ZmM4RfhD)3~U9b8K?MQfHjG65)EvQ z4Z@e?atciIB3wY`KGNbl&8t7P4D>XRO?X^mGKAM1I!r&Xqh*22djLlI0EuCX8>WUC z%JXX^$QC%I8iFM8{l^8t5)S{5Tq~m-XE(7JS<8rj3oNlRP>dW!QkC$Aa~Ehtika-ju}M)(9D(@a$O&dVickE9wXDe{K~7D zyjj2mbcts#Nq>+f)3CbWO-1)zSW}0_M6%B%s>uwZE>YPYDDJ4&9@I%&L*j)lN2x_G z0}cAvwU*Q!^q_E0ny~;MNPLE`4=uEeN7|)HQ;Jzb0&seZ**V)6Egd9OuqGV63A7s0 zNb@xkM7JovWRdzY>@5BZ1`1&3iPh=Y>vQmRi4K`y`fw zAKQ8!E{=j%Yi(hPkr0|EP&311m9=7+VIOFfiyoP=i_FOe%?Tu>@b+RJ+(C;+DgK@t z_;ZlAH)hmE`nT|jD8Cvqwoi2Y?S_QJxo%7vY)o%*6%b&;f*;UOwQcm?Sz{Ga?e@

IkX8(F2mNWYe8t#7t>M&^fe5Ih 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

gjG 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

IV+xd5SOYI!1!B;^8xo&ijJ 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⪚$|+rq&6E(ce=6 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 Kww1HB#J>UDlDXFa delta 140009 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%0D0s%o5k&APC+mgq`CP*iGB;3?H}?m^Jud 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 of9Z>M)(hXS|$e9^xCnG?f30!%MoJwp?0E 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 Date: Sat, 10 Jun 2023 11:40:24 +0100 Subject: [PATCH 15/48] Add links to beginner versions --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index cbeb71619..5e50fb9e7 100644 --- a/readme.md +++ b/readme.md @@ -30,9 +30,9 @@ Roadmaps are now interactive, you can click the nodes to read more about the top Here is the list of available roadmaps with more being actively worked upon. -- [Frontend Roadmap](https://roadmap.sh/frontend) +- [Frontend Roadmap](https://roadmap.sh/frontend) / [Frontend Beginner Roadmap](https://roadmap.sh/frontend?r=frontend-beginner) - [Backend Roadmap](https://roadmap.sh/backend) -- [DevOps Roadmap](https://roadmap.sh/devops) +- [DevOps Roadmap](https://roadmap.sh/devops) / [DevOps Beginner Roadmap](https://roadmap.sh/devops?r=devops-beginner) - [Full Stack Roadmap](https://roadmap.sh/full-stack) - [Computer Science Roadmap](https://roadmap.sh/computer-science) - [QA Roadmap](https://roadmap.sh/qa) From 9023ea6298f7b0f27e29e983c0c509bebd9efd59 Mon Sep 17 00:00:00 2001 From: roadmap bot <135830415+roadmap-bot@users.noreply.github.com> Date: Sat, 10 Jun 2023 14:06:00 +0100 Subject: [PATCH 16/48] chore: add resource under angular:typescript-basics:union-types --- .../angular/content/100-typescript-basics/104-union-types.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/roadmaps/angular/content/100-typescript-basics/104-union-types.md b/src/data/roadmaps/angular/content/100-typescript-basics/104-union-types.md index ec65e2baa..6ac053e0f 100644 --- a/src/data/roadmaps/angular/content/100-typescript-basics/104-union-types.md +++ b/src/data/roadmaps/angular/content/100-typescript-basics/104-union-types.md @@ -6,3 +6,4 @@ Visit the following resources to learn more: - [Union Types - typescriptlang](https://www.typescriptlang.org/docs/handbook/unions-and-intersections.html) - [Union Type video for Beginners](https://www.youtube.com/watch?v=uxjpm4W5pCo) +- [Union Types - typescriptlang](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#union-types) \ No newline at end of file From 45b729d70894ba198aa68d4b0ee0a86a6a3225d3 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Sat, 10 Jun 2023 12:21:01 +0100 Subject: [PATCH 17/48] Update the schema updated date --- src/data/roadmaps/devops/devops.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/roadmaps/devops/devops.md b/src/data/roadmaps/devops/devops.md index f3213011e..9c7dce18d 100644 --- a/src/data/roadmaps/devops/devops.md +++ b/src/data/roadmaps/devops/devops.md @@ -16,7 +16,7 @@ schema: description: 'Learn to become a DevOps, SRE or get any other operations role with this interactive step by step guide in 2023. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.' imageUrl: 'https://roadmap.sh/roadmaps/devops.png' datePublished: '2023-01-05' - dateModified: '2023-01-20' + dateModified: '2023-06-10' seo: title: 'DevOps Roadmap: Learn to become a DevOps Engineer or SRE' description: 'Community driven, articles, resources, guides, interview questions, quizzes for DevOps. Learn to become a modern DevOps engineer by following the steps, skills, resources and guides listed in this roadmap.' From 14060bda94f40eeb3256434b8c187953faa0046d Mon Sep 17 00:00:00 2001 From: roadmap bot <135830415+roadmap-bot@users.noreply.github.com> Date: Sun, 11 Jun 2023 02:08:21 +0100 Subject: [PATCH 18/48] chore: add resource under javascript:javascript-control-flow:exception-handling:throw-statement --- .../100-exception-handling/100-throw-statement.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/data/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/100-throw-statement.md b/src/data/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/100-throw-statement.md index 7cfa0f1b7..d980b4600 100644 --- a/src/data/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/100-throw-statement.md +++ b/src/data/roadmaps/javascript/content/107-javascript-control-flow/100-exception-handling/100-throw-statement.md @@ -3,3 +3,6 @@ The throw statement throws a user-defined exception. Execution of the current function will stop (the statements after throw won't be executed), and control will be passed to the first catch block in the call stack. If no catch block exists among caller functions, the program will terminate. (excerpt from MDN) Visit the following resources to learn more: + +- [throw statement - w3schools](https://www.w3schools.com/jsref/jsref_throw.asp) +- [JavaScript MDN Docs](https://developer.mozilla.org/en-us/docs/web/javascript/reference/statements/throw) \ No newline at end of file From 93e16d899a339f7981450aa1512c86110b748582 Mon Sep 17 00:00:00 2001 From: roadmap bot <135830415+roadmap-bot@users.noreply.github.com> Date: Sun, 11 Jun 2023 02:09:49 +0100 Subject: [PATCH 19/48] chore: add resource under devops:artifcats:nexus --- .../roadmaps/devops/content/118-artifcats/101-nexus.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/data/roadmaps/devops/content/118-artifcats/101-nexus.md b/src/data/roadmaps/devops/content/118-artifcats/101-nexus.md index 45b885765..ed326aa90 100644 --- a/src/data/roadmaps/devops/content/118-artifcats/101-nexus.md +++ b/src/data/roadmaps/devops/content/118-artifcats/101-nexus.md @@ -1 +1,6 @@ -# Nexus \ No newline at end of file +# Nexus + +- [Repository Management Basics](https://learn.sonatype.com/courses/nxrm-admin-100/) +- [Nexus Installation and Configuration](https://learn.sonatype.com/courses/nxrm-config-100/) +- [Nexus Repository Security Essentials](https://learn.sonatype.com/courses/nxrm-sec-100/) +- [Nexus Best Practices](https://help.sonatype.com/repomanager3/nexus-repository-best-practices) \ No newline at end of file From 78cf88fbd9318a97cfe2ed4082a98c91551af751 Mon Sep 17 00:00:00 2001 From: roadmap bot <135830415+roadmap-bot@users.noreply.github.com> Date: Sun, 11 Jun 2023 02:10:16 +0100 Subject: [PATCH 20/48] chore: add resource under flutter:design-principles:design-patterns --- .../flutter/content/106-design-principles/101-design-patterns.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/roadmaps/flutter/content/106-design-principles/101-design-patterns.md b/src/data/roadmaps/flutter/content/106-design-principles/101-design-patterns.md index fb1d2d282..5aeb5f446 100644 --- a/src/data/roadmaps/flutter/content/106-design-principles/101-design-patterns.md +++ b/src/data/roadmaps/flutter/content/106-design-principles/101-design-patterns.md @@ -18,3 +18,4 @@ Learn more from the following links: - [Flutter - Design](https://dart.dev/guides/language/effective-dart/design) - [Design Patterns Explained in 10 Minutes](https://www.youtube.com/watch?v=tv-_1er1mWI) - [Cookbook Designs in Flutter](https://docs.flutter.dev/cookbook/design) +- [Flutter Design Patterns](https://www.youtube.com/watch?v=sk5hwzfndqs&list=pllzmawv2ytgb-1ldoo-9vctgre-1dywkp&index=1) \ No newline at end of file From ba65dec596854940213a1e7cda613a4d9f47bf79 Mon Sep 17 00:00:00 2001 From: roadmap bot <135830415+roadmap-bot@users.noreply.github.com> Date: Sun, 11 Jun 2023 18:42:48 +0100 Subject: [PATCH 21/48] chore: add resource under cpp:libraries:poco --- src/data/roadmaps/cpp/content/libraries/102-poco.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/data/roadmaps/cpp/content/libraries/102-poco.md b/src/data/roadmaps/cpp/content/libraries/102-poco.md index 45a4cb390..b22e371e3 100644 --- a/src/data/roadmaps/cpp/content/libraries/102-poco.md +++ b/src/data/roadmaps/cpp/content/libraries/102-poco.md @@ -68,4 +68,6 @@ int main() } ``` -In the above example, Poco is used to send an HTTP GET request and process the response. It manages tasks like connecting to the server, handling exceptions, and managing HTTP headers. \ No newline at end of file +In the above example, Poco is used to send an HTTP GET request and process the response. It manages tasks like connecting to the server, handling exceptions, and managing HTTP headers. + +- [Official Docs for Poco Library](https://docs.pocoproject.org/) \ No newline at end of file From 7032bc0726d5cfe46cb6dad6f981b5ad00ab8cc8 Mon Sep 17 00:00:00 2001 From: roadmap bot <135830415+roadmap-bot@users.noreply.github.com> Date: Sun, 11 Jun 2023 18:43:29 +0100 Subject: [PATCH 22/48] chore: add resource under backend:repo-hosting-services:github --- .../backend/content/105-repo-hosting-services/100-github.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/roadmaps/backend/content/105-repo-hosting-services/100-github.md b/src/data/roadmaps/backend/content/105-repo-hosting-services/100-github.md index 25068b826..3d9380c7e 100644 --- a/src/data/roadmaps/backend/content/105-repo-hosting-services/100-github.md +++ b/src/data/roadmaps/backend/content/105-repo-hosting-services/100-github.md @@ -11,3 +11,4 @@ Visit the following resources to learn more: - [Git vs. GitHub: Whats the difference?](https://www.youtube.com/watch?v=wpISo9TNjfU) - [Git and GitHub for Beginners](https://www.youtube.com/watch?v=RGOj5yH7evk) - [Git and GitHub - CS50 Beyond 2019](https://www.youtube.com/watch?v=eulnSXkhE7I) +- [Learn Git Branching](https://learngitbranching.js.org/?locale=en_us) \ No newline at end of file From 8b8ef52d98a67ff5920ffb1a4506644f78a93b37 Mon Sep 17 00:00:00 2001 From: roadmap bot <135830415+roadmap-bot@users.noreply.github.com> Date: Sun, 11 Jun 2023 18:43:37 +0100 Subject: [PATCH 23/48] chore: add resource under python:python-basics --- src/data/roadmaps/python/content/100-python-basics/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/roadmaps/python/content/100-python-basics/index.md b/src/data/roadmaps/python/content/100-python-basics/index.md index ff1f89a83..6fb142a64 100644 --- a/src/data/roadmaps/python/content/100-python-basics/index.md +++ b/src/data/roadmaps/python/content/100-python-basics/index.md @@ -9,3 +9,4 @@ Visit the following resources to learn more: - [Python Wikipedia]() - [Googles Python Class](https://developers.google.com/edu/python) - [W3Schools - Python Tutorial](https://www.w3schools.com/python) +- [Python](https://www.kaggle.com/learn/python) \ No newline at end of file From ff5858f965fa0470716a8fce685881b0b9fd4167 Mon Sep 17 00:00:00 2001 From: roadmap bot <135830415+roadmap-bot@users.noreply.github.com> Date: Sun, 11 Jun 2023 18:43:59 +0100 Subject: [PATCH 24/48] chore: add resource under flutter:widgets:inherited-widgets --- .../flutter/content/102-widgets/103-inherited-widgets.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/data/roadmaps/flutter/content/102-widgets/103-inherited-widgets.md b/src/data/roadmaps/flutter/content/102-widgets/103-inherited-widgets.md index 719f5f88e..34b997147 100644 --- a/src/data/roadmaps/flutter/content/102-widgets/103-inherited-widgets.md +++ b/src/data/roadmaps/flutter/content/102-widgets/103-inherited-widgets.md @@ -1 +1,3 @@ # Inherited Widgets + +- [InheritedWidget Official Guide](https://api.flutter.dev/flutter/widgets/inheritedwidget-class.html) \ No newline at end of file From 502b8e20d510b2c7955db194b79cea93fa68ebc3 Mon Sep 17 00:00:00 2001 From: roadmap bot <135830415+roadmap-bot@users.noreply.github.com> Date: Sun, 11 Jun 2023 18:44:23 +0100 Subject: [PATCH 25/48] chore: add resource under computer-science:common-algorithms:graph-algorithms:breadth-first-search --- .../102-graph-algorithms/100-breadth-first-search.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/100-breadth-first-search.md b/src/data/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/100-breadth-first-search.md index 267554742..222d74794 100644 --- a/src/data/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/100-breadth-first-search.md +++ b/src/data/roadmaps/computer-science/content/104-common-algorithms/102-graph-algorithms/100-breadth-first-search.md @@ -6,3 +6,4 @@ Visit the following resources to learn more: - [Breadth First Search or BFS for a Graph](https://www.geeksforgeeks.org/breadth-first-search-or-bfs-for-a-graph/) - [Graph Algorithms II - DFS, BFS, Kruskals Algorithm, Union Find Data Structure - Lecture 7](https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7) +- [Breadth-first search in 4 minutes](https://www.youtube.com/watch?v=hz5ytanv5qe) \ No newline at end of file From 43f351a94395584e475fdb00d045b5480424a4b4 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Tue, 13 Jun 2023 03:16:18 +0100 Subject: [PATCH 26/48] Add progress loading on homepage roadmaps --- .../FeaturedItems/FeaturedItem.astro | 4 +- src/components/Navigation/Navigation.astro | 20 ++++--- src/layouts/BaseLayout.astro | 2 +- src/lib/home-progress.ts | 57 +++++++++++++++++++ src/pages/404.astro | 2 +- src/pages/index.astro | 27 ++++++--- 6 files changed, 91 insertions(+), 21 deletions(-) create mode 100644 src/lib/home-progress.ts diff --git a/src/components/FeaturedItems/FeaturedItem.astro b/src/components/FeaturedItems/FeaturedItem.astro index e4afd2332..d238ebacc 100644 --- a/src/components/FeaturedItems/FeaturedItem.astro +++ b/src/components/FeaturedItems/FeaturedItem.astro @@ -13,14 +13,14 @@ const { isUpcoming = false, isNew = false, text, url } = Astro.props; - + {text} diff --git a/src/components/Navigation/Navigation.astro b/src/components/Navigation/Navigation.astro index 845c8ad1c..a87b1d361 100644 --- a/src/components/Navigation/Navigation.astro +++ b/src/components/Navigation/Navigation.astro @@ -5,7 +5,11 @@ import AccountDropdown from './AccountDropdown.astro';