From 532dd5f47b297a6a8d485c0380b67ddbd6eff58e Mon Sep 17 00:00:00 2001 From: Arindam Date: Wed, 3 Jul 2024 03:49:48 +0530 Subject: [PATCH 1/8] Code+ DOC ( Signed Commit ) | Adding Major Changes in Blogs Website with landing and markdown pages. --- README.md | 86 ++- TuxTechBlogs/docs/CHANGELOG.md | 73 ++ TuxTechBlogs/docs/blog/index.md | 2 + TuxTechBlogs/docs/contacts.md | 10 + TuxTechBlogs/docs/foundations.md | 0 TuxTechBlogs/docs/img/site.png | Bin 2228 -> 230634 bytes TuxTechBlogs/docs/index-script.js | 652 ++++++++++++++++++ TuxTechBlogs/docs/index-style.css | 545 +++++++++++++++ TuxTechBlogs/docs/index.html | 57 ++ TuxTechBlogs/docs/index.md | 63 -- TuxTechBlogs/docs/readme.md | 93 +++ TuxTechBlogs/docs/study/.markdownlint.json | 46 +- .../{ => study/interview_prep}/interview.md | 0 TuxTechBlogs/docs/stylesheet/extra.css | 70 +- .../docs/topic/1.0. Agile/00. Introduction.md | 98 +-- ... Understanding the four values of agile.md | 84 +-- .../02. Using agile in everyday work.md | 90 +-- .../topic/11.0. Kanban/00. Introduction.md | 216 +++--- .../11.0. Kanban/01. Kanban Using Jira.md | 186 ++--- .../01. Introduction.md | 32 +- .../02. Event Determination.md | 106 +-- .../03. Running Effective Meeting.md | 160 ++--- .../04. Preparation.md | 112 +-- .../05. Facilitation.md | 140 ++-- .../06. Participation.md | 96 +-- .../07. Follow-up.md | 90 +-- .../docs/topic/13.2. Miscellaneous/acronym.md | 508 +++++++------- .../docs/topic/13.2. Miscellaneous/ports.md | 214 +++--- .../topic/13.2. Miscellaneous/status_codes.md | 614 ++++++++--------- .../topic/19.0. Scrum/00. Introduction.md | 276 ++++---- .../topic/19.0. Scrum/01. Scrum With Jira.md | 188 ++--- .../topic/4.0. DevOps/00. Introduction.md | 442 ++++++------ .../docs/topic/9.0. ITSM/00. Introduction.md | 62 +- .../docs/topic/9.0. ITSM/01. Key Terms.md | 60 +- .../02. ITSM Library and Practices.md | 82 +-- .../9.0. ITSM/03. Core ITSM Practices.md | 102 +-- .../topic/9.0. ITSM/04. Maturity Matters.md | 30 +- .../05. The Atlassian ITSM Solution.md | 70 +- .../docs/topic/9.0. ITSM/06. Key Takeaways.md | 20 +- TuxTechBlogs/mkdocs.yml | 265 +++++-- 40 files changed, 3797 insertions(+), 2243 deletions(-) create mode 100644 TuxTechBlogs/docs/CHANGELOG.md create mode 100644 TuxTechBlogs/docs/blog/index.md delete mode 100644 TuxTechBlogs/docs/foundations.md create mode 100644 TuxTechBlogs/docs/index-script.js create mode 100644 TuxTechBlogs/docs/index-style.css create mode 100644 TuxTechBlogs/docs/index.html delete mode 100644 TuxTechBlogs/docs/index.md create mode 100644 TuxTechBlogs/docs/readme.md rename TuxTechBlogs/docs/{ => study/interview_prep}/interview.md (100%) diff --git a/README.md b/README.md index 15ea5f2..5f45c8b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@
- + # **TuxTechBlogs** @@ -13,41 +13,83 @@
-

Tech Stack

+
-![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) ![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white) ![GitHub Actions](https://img.shields.io/badge/github%20actions-%232671E5.svg?style=for-the-badge&logo=githubactions&logoColor=white) ![GitHub Pages](https://img.shields.io/badge/GitHub%20Pages-121011.svg?logo=github&style=for-the-badge) -![Alpine-Linux](https://img.shields.io/badge/Alpine_Linux-0D597F?style=for-the-badge&logo=alpine-linux&logoColor=white ) -![vs-code](https://img.shields.io/badge/Visual_Studio_Code-0078D4?style=for-the-badge&logo=visual%20studio%20code&logoColor=white) -![Material-UI](https://img.shields.io/badge/Material--UI-0081CB?style=for-the-badge&logo=material-ui&logoColor=white) -![Html](https://img.shields.io/badge/HTML5-E34F26?style=for-the-badge&logo=html5&logoColor=white) -![Css](https://img.shields.io/badge/CSS3-1572B6?style=for-the-badge&logo=css3&logoColor=white)![Mark-down](https://img.shields.io/badge/Markdown-000000?style=for-the-badge&logo=markdown&logoColor=white) -![Python](https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white) -![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white) +

+🛠️ Tech Stack +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
COMPONENTDETAILS
Source Code Management
Operating Systems
Integrated Development Environment
FrameworksMkdocs, Mkdocs-Material
Programming & Scripting Languagues
+
+
- +

+ 💫 TuxTechBlog GitHub Repo Stats +

-![PRs](https://img.shields.io/badge/PRs-welcome-E87A90.svg?style=flat-square) -[![Contributors](https://img.shields.io/github/contributors/TuxTechLab/Blogs.svg?style=flat-square)](https://github.com/i-Am-GhOsT/GhostVerse/graphs/contributors/) -[![License](https://img.shields.io/github/license/TuxTechLab/Blogs.svg?style=flat-square)](./LICENSE) -![Github Action Badge](https://github.com/TuxTechLab/Blogs/actions/workflows/pages/pages-build-deployment/badge.svg) +
-## 🌐 Connect With Me +> `WORKFLOWS` -[![Gmail](https://img.shields.io/badge/Gmail-D14836?style=for-the-badge&logo=gmail&logoColor=white)](mailto:arindamtanti123@gmail.com) -[![LinkedId](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/arindam-tanti/) +[![ci_cd_prod](https://github.com/TuxTechLab/Blogs/actions/workflows/ci_cd_prod.yml/badge.svg)](https://github.com/TuxTechLab/Blogs/actions/workflows/ci_cd_prod.yml) +[![ci_cd_stage](https://github.com/TuxTechLab/Blogs/actions/workflows/ci_cd_stage.yml/badge.svg)](https://github.com/TuxTechLab/Blogs/actions/workflows/ci_cd_stage.yml) -
+> `REPOSITORY` + +[![License](https://img.shields.io/github/license/TuxTechLab/Blogs.svg?style=for-the-badge)](https://raw.githubusercontent.com/TuxTechLab/Blogs/master/LICENSE) +[![Website Status](https://img.shields.io/website-up-down-green-red/http/shields.io.svg?style=for-the-badge)](http://blogs.tuxtechlab.com) +[![Issues](https://img.shields.io/github/issues/TuxTechLab/Blogs?color=0088ff&style=for-the-badge&logo=github)](https://github.com/TuxTechLab/Blogs/issues) +[![Pull Requests](https://img.shields.io/github/issues-pr/TuxTechLab/Blogs?color=0088ff&style=for-the-badge&logo=github)](https://github.com/TuxTechLab/Blogs/pulls) +[![Contributors](https://img.shields.io/github/contributors/TuxTechLab/Blogs.svg)](https://github.com/TuxTechLab/Blogs/graphs/contributors/) +[![Stars](https://img.shields.io/github/stars/TuxTechLab/blogs)](https://github.com/TuxTechLab/Blogs/stargazers)
-

📊 Repo Stats

+

+✅ Code of Conduct +

+ +Learn more from CODE OF CONDUCT of TuxTechBlogs + +
+ +
+

+📞 Conect Us +

-![Alt](https://repobeats.axiom.co/api/embed/6e50266512168c31ef7c3b5e68a67dacda98ef22.svg "Repobeats analytics image") +Please visit Contact Us of TuxTechBlogs to know more. -

© 2023 Arindam Tanti All rights reserved.

+

© 2023 TuxTechBlog All rights reserved.

\ No newline at end of file diff --git a/TuxTechBlogs/docs/CHANGELOG.md b/TuxTechBlogs/docs/CHANGELOG.md new file mode 100644 index 0000000..923fc0c --- /dev/null +++ b/TuxTechBlogs/docs/CHANGELOG.md @@ -0,0 +1,73 @@ + + +# Changelog + +All notable changes to this project will be documented in this file. Dates are displayed in UTC. + +Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). + +## [Unreleased](https://github.com/TuxTechLab/Blogs/compare/1.0...HEAD) + +- #6 [Doc] (feat) added new docs and formattted the folders placement with names ( *.md). [`9221039`](https://github.com/TuxTechLab/Blogs/commit/92210397c731e28a4d59b8c6302385d3f58531c5) +- #5 [Dependency] (fix) added new latest dependency in the repo. [`a5adbcf`](https://github.com/TuxTechLab/Blogs/commit/a5adbcffe913524a590f88393a2be7b0086af7d9) +- #16 [Doc] (✨) Added DevOPs intro documents in the repo and added DevOPs topic. [`1f2613b`](https://github.com/TuxTechLab/Blogs/commit/1f2613b8002f542f70ba2ee60b5c5b876315e005) +- #24 [Feat] Adding new scripts to manage the application via docker stack/ compose. Also adding script to check all the dependencies are installed in the system. [`a1dc190`](https://github.com/TuxTechLab/Blogs/commit/a1dc190dc014b5d704140586d82d9430f31c04b6) +- #18 [Doc] (🔧) Fixed the devops document reference in mkdocs.yml and DevOPs intro makrdown. [`a9642f6`](https://github.com/TuxTechLab/Blogs/commit/a9642f6a953bf1809ad44e1e05d6b299046c9c0f) +- #17 [Doc] (🔧) Fixed the devops document reference in mkdocs.yml and DevOPs intro makrdown. [`fbe9e0f`](https://github.com/TuxTechLab/Blogs/commit/fbe9e0f075e3d4f4c5280eab7302c16ef16d9a56) +- #4 [Code] (feat) Modifed devcontainer setup to use dockerfile with workspace mount & port forward works. [`85b7489`](https://github.com/TuxTechLab/Blogs/commit/85b748905167cdddedc6b7df977e09103c9a432a) +- #10 [Code] (style) Adding new logo, favicon, extra css, markdown lint, and new mkdocs config. [`51d78c8`](https://github.com/TuxTechLab/Blogs/commit/51d78c886875b659969575edaa87209f2edfa2f1) +- #7 [Feat] (fix) Adding Markdown Linting. (.markdownlist.json) [`7744845`](https://github.com/TuxTechLab/Blogs/commit/7744845a6faffa82ba70b57f978234065468bed4) +- #23 [Code] Added ( .gitignore, example.env ) Modified ( .makrdownlintrc, settings.json ). [`baec2f7`](https://github.com/TuxTechLab/Blogs/commit/baec2f72f37e893efa3d44c29fd01da3ce85e88b) +- #20 [Doc] (🔧) Fixed the miscellanceous document for ports and assets. [`245969e`](https://github.com/TuxTechLab/Blogs/commit/245969e97e93b84d968017b328b0db8cb3be751d) +- #3 [Code] (fix) Modifed dockerfile to use slim python image. [`5bc9f03`](https://github.com/TuxTechLab/Blogs/commit/5bc9f0328ca6ef7ecf524d9c37e2322569812ec7) +- #13 [Doc] (🔧) Modified Kanban Documents and removed image assets. [`097656a`](https://github.com/TuxTechLab/Blogs/commit/097656a6bc6c6b10d304caa5d8d1f7dc7077e80c) +- #11 [Doc] (fix) Modified SCRUM Documents and removed image assets. [`c4da16e`](https://github.com/TuxTechLab/Blogs/commit/c4da16e813900c701ebbf8690c98b7bf780602b8) +- #9 [Doc] (fix) Modified ITSM Documents and removed image assets. [`f0f7389`](https://github.com/TuxTechLab/Blogs/commit/f0f7389e076f2cfecacaf10a1d12564e1271b394) +- #20 [Doc] (🔧) Fixed the miscellanceous document for ports and assets. [`95f7e79`](https://github.com/TuxTechLab/Blogs/commit/95f7e7976cd2bbc412708a3776efbdddd1a8dbb5) +- #14 [Doc] (🔧) Modified Meeting Related Documents and removed image assets. [`8959055`](https://github.com/TuxTechLab/Blogs/commit/8959055bdf5319baec93268480eb95e26eee1252) +- #8 [Doc] (fix) Modified Agile Documents and removed image assets. [`667ff75`](https://github.com/TuxTechLab/Blogs/commit/667ff751bcc66ea2e0ed04c5e644f5cfe9a4b80b) +- #25 [Fix] Modified the blogs stack yml, added deployment specification for the blogs service. [`ba84bcb`](https://github.com/TuxTechLab/Blogs/commit/ba84bcb363733b24db52982034715dc7998b34ce) +- #19 [Doc] (🔧) Fixed the miscellanceous documents reference in mkdocs.yml and assets. [`3ef7b5a`](https://github.com/TuxTechLab/Blogs/commit/3ef7b5a4c64b50bb9a2471f4948ed8c51b843591) +- #21 [Config] (🔧) Added new site changes in the mkdocs.yml file. [`c6a8c03`](https://github.com/TuxTechLab/Blogs/commit/c6a8c035fe6e3c627eee9740f54a2a70f6c8b9e0) +- #12 [Code] (🔧) Added mkdocs config and social media changes. [`8cd7540`](https://github.com/TuxTechLab/Blogs/commit/8cd754018e28143521f58f1cab3d47ee16335e89) +- #25 [Doc] (✨) Modified the license. [`5a617ab`](https://github.com/TuxTechLab/Blogs/commit/5a617aba071e388a20a3317f0c1912da36782a85) +- #22 [Feat] (✨) Added CNAME file for automatic github page deployment with custom DNS name. [`b5c4417`](https://github.com/TuxTechLab/Blogs/commit/b5c44173ae720f39c29955ed0649f2e24806696f) +- #26 [Feat] (✨) Adding SCRUM module assets. [`ecc7f80`](https://github.com/TuxTechLab/Blogs/commit/ecc7f80681718cc9364d3c35fdfc9cb1876c7ff6) +- #15 [Doc] (🔧) Agile related assets removed. [`dc42dc6`](https://github.com/TuxTechLab/Blogs/commit/dc42dc6d7769f9ddc9f9695316cacfb57acf3c12) + +## [1.0](https://github.com/TuxTechLab/Blogs/compare/v1.0.0...1.0) + +> 24 February 2024 + +## v1.0.0 + +> 15 June 2024 + +- #1 [Code] (feat) Initial Commit. Adding All Source Code to master TuxTechLab/Blogs [`2609966`](https://github.com/TuxTechLab/Blogs/commit/2609966c5aca6278c37ea903bc511c9994044237) +- #6 [Doc] (feat) added new docs and formattted the folders placement with names ( *.md). [`9221039`](https://github.com/TuxTechLab/Blogs/commit/92210397c731e28a4d59b8c6302385d3f58531c5) +- #5 [Dependency] (fix) added new latest dependency in the repo. [`a5adbcf`](https://github.com/TuxTechLab/Blogs/commit/a5adbcffe913524a590f88393a2be7b0086af7d9) +- #16 [Doc] (✨) Added DevOPs intro documents in the repo and added DevOPs topic. [`1f2613b`](https://github.com/TuxTechLab/Blogs/commit/1f2613b8002f542f70ba2ee60b5c5b876315e005) +- #24 [Feat] Adding new scripts to manage the application via docker stack/ compose. Also adding script to check all the dependencies are installed in the system. [`a1dc190`](https://github.com/TuxTechLab/Blogs/commit/a1dc190dc014b5d704140586d82d9430f31c04b6) +- #18 [Doc] (🔧) Fixed the devops document reference in mkdocs.yml and DevOPs intro makrdown. [`a9642f6`](https://github.com/TuxTechLab/Blogs/commit/a9642f6a953bf1809ad44e1e05d6b299046c9c0f) +- #17 [Doc] (🔧) Fixed the devops document reference in mkdocs.yml and DevOPs intro makrdown. [`fbe9e0f`](https://github.com/TuxTechLab/Blogs/commit/fbe9e0f075e3d4f4c5280eab7302c16ef16d9a56) +- #4 [Code] (feat) Modifed devcontainer setup to use dockerfile with workspace mount & port forward works. [`85b7489`](https://github.com/TuxTechLab/Blogs/commit/85b748905167cdddedc6b7df977e09103c9a432a) +- #10 [Code] (style) Adding new logo, favicon, extra css, markdown lint, and new mkdocs config. [`51d78c8`](https://github.com/TuxTechLab/Blogs/commit/51d78c886875b659969575edaa87209f2edfa2f1) +- #7 [Feat] (fix) Adding Markdown Linting. (.markdownlist.json) [`7744845`](https://github.com/TuxTechLab/Blogs/commit/7744845a6faffa82ba70b57f978234065468bed4) +- #23 [Code] Added ( .gitignore, example.env ) Modified ( .makrdownlintrc, settings.json ). [`baec2f7`](https://github.com/TuxTechLab/Blogs/commit/baec2f72f37e893efa3d44c29fd01da3ce85e88b) +- #20 [Doc] (🔧) Fixed the miscellanceous document for ports and assets. [`245969e`](https://github.com/TuxTechLab/Blogs/commit/245969e97e93b84d968017b328b0db8cb3be751d) +- #3 [Code] (fix) Modifed dockerfile to use slim python image. [`5bc9f03`](https://github.com/TuxTechLab/Blogs/commit/5bc9f0328ca6ef7ecf524d9c37e2322569812ec7) +- #13 [Doc] (🔧) Modified Kanban Documents and removed image assets. [`097656a`](https://github.com/TuxTechLab/Blogs/commit/097656a6bc6c6b10d304caa5d8d1f7dc7077e80c) +- #11 [Doc] (fix) Modified SCRUM Documents and removed image assets. [`c4da16e`](https://github.com/TuxTechLab/Blogs/commit/c4da16e813900c701ebbf8690c98b7bf780602b8) +- #9 [Doc] (fix) Modified ITSM Documents and removed image assets. [`f0f7389`](https://github.com/TuxTechLab/Blogs/commit/f0f7389e076f2cfecacaf10a1d12564e1271b394) +- #20 [Doc] (🔧) Fixed the miscellanceous document for ports and assets. [`95f7e79`](https://github.com/TuxTechLab/Blogs/commit/95f7e7976cd2bbc412708a3776efbdddd1a8dbb5) +- #14 [Doc] (🔧) Modified Meeting Related Documents and removed image assets. [`8959055`](https://github.com/TuxTechLab/Blogs/commit/8959055bdf5319baec93268480eb95e26eee1252) +- #8 [Doc] (fix) Modified Agile Documents and removed image assets. [`667ff75`](https://github.com/TuxTechLab/Blogs/commit/667ff751bcc66ea2e0ed04c5e644f5cfe9a4b80b) +- #25 [Fix] Modified the blogs stack yml, added deployment specification for the blogs service. [`ba84bcb`](https://github.com/TuxTechLab/Blogs/commit/ba84bcb363733b24db52982034715dc7998b34ce) +- #19 [Doc] (🔧) Fixed the miscellanceous documents reference in mkdocs.yml and assets. [`3ef7b5a`](https://github.com/TuxTechLab/Blogs/commit/3ef7b5a4c64b50bb9a2471f4948ed8c51b843591) +- #21 [Config] (🔧) Added new site changes in the mkdocs.yml file. [`c6a8c03`](https://github.com/TuxTechLab/Blogs/commit/c6a8c035fe6e3c627eee9740f54a2a70f6c8b9e0) +- #12 [Code] (🔧) Added mkdocs config and social media changes. [`8cd7540`](https://github.com/TuxTechLab/Blogs/commit/8cd754018e28143521f58f1cab3d47ee16335e89) +- #2 [Code] (fix) Fixing Contributors badge in ReadMe.md file. Changed Project Path in badge. [`1e91007`](https://github.com/TuxTechLab/Blogs/commit/1e91007250f35d327ecf300b421086fe290c4036) +- #25 [Doc] (✨) Modified the license. [`5a617ab`](https://github.com/TuxTechLab/Blogs/commit/5a617aba071e388a20a3317f0c1912da36782a85) +- #22 [Feat] (✨) Added CNAME file for automatic github page deployment with custom DNS name. [`b5c4417`](https://github.com/TuxTechLab/Blogs/commit/b5c44173ae720f39c29955ed0649f2e24806696f) +- #26 [Feat] (✨) Adding SCRUM module assets. [`ecc7f80`](https://github.com/TuxTechLab/Blogs/commit/ecc7f80681718cc9364d3c35fdfc9cb1876c7ff6) +- #15 [Doc] (🔧) Agile related assets removed. [`dc42dc6`](https://github.com/TuxTechLab/Blogs/commit/dc42dc6d7769f9ddc9f9695316cacfb57acf3c12) diff --git a/TuxTechBlogs/docs/blog/index.md b/TuxTechBlogs/docs/blog/index.md new file mode 100644 index 0000000..c58f16c --- /dev/null +++ b/TuxTechBlogs/docs/blog/index.md @@ -0,0 +1,2 @@ +# Blog + diff --git a/TuxTechBlogs/docs/contacts.md b/TuxTechBlogs/docs/contacts.md index e69de29..7815a5e 100644 --- a/TuxTechBlogs/docs/contacts.md +++ b/TuxTechBlogs/docs/contacts.md @@ -0,0 +1,10 @@ +
+ + +## 📞 Contact Us + +[![Gmail](https://img.shields.io/badge/Gmail-D14836?logo=gmail&logoColor=white&style=for-the-badge)](mailto:support@tuxtechlab.com) [![LinkedId](https://img.shields.io/badge/LinkedIn-0077B5?logo=linkedin&logoColor=white&style=for-the-badge)](https://inkedin.com/company/tuxtechlab)[![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white)](https://github.com/TuxTechLab) + +Discord Banner 3 +
+ diff --git a/TuxTechBlogs/docs/foundations.md b/TuxTechBlogs/docs/foundations.md deleted file mode 100644 index e69de29..0000000 diff --git a/TuxTechBlogs/docs/img/site.png b/TuxTechBlogs/docs/img/site.png index 42b03346d2581d44906000903c8b24c13e36f2c0..1c843b57ce699d2defe886f6dfba3ba3591ee5b8 100644 GIT binary patch literal 230634 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

yy?I*&xUGB45^3yW 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

hs$8EqrrKM9}_!!hg4_nbN+= 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 literal 2228 zcmcImdrXs86fY0uVL@F7QW(f&`Oww5zAQ^C3=m2oZ6{3nFq5=cszo}?z*QIw6nqpa z6DqUttpUyw) zI1_UElhq%$-e6=wiTy>jd-47dG=UCz{I5rRx->+gS#TQ(g`yszQm9e3{eR^C^zh-a zsfdZ$uauQ%Hi6Vm#7PXTG?49EZ6MnLMMmdr$PCw;E)M3nMGw;@Rc|}5AEcydtgJ_t zCn;Weym+-KvHnUVWNwiYv50F5BcC^?i4WVjYIOKkI+t1~5}0nr2qA%^ow8s~(`Y%y zN7yzbLf2mj9pl)Tn~5Ei)-FY#wG>K`7*xXy=Sp!Pk-fZXdVeABPL;aRvF|Kt!)HeR znP(a~a7$(8?#XSbeKYf?+r;!YK9%vZ zNXa@ZXa1=T<7~zsQSL;mV%xe&{Vs7PkEBDFd}&f2xRqd|bz{eSZV2aD8}(uyw!eHg z?d8F=9vPWr$~te3><$uI^~4>HNLhAZhXri7(-%8|56hDsJgYGNShgxf`hM4C2E5Tl zw2Kb~6mj6$XcLo4Jw@(C5IRt>7}^Aow6b|v1wgbwNE8FOWvdijpaK^?dFzsnH8rBk zq;p4_`8%1L2Sd-@1<2&{wj=g*RDjG_jv6tly#j!|yLdCOY&tp>hwUlgA-PL!z{W5~Tba#az$?TGtxnJiB7blZhx=7LngJfcojJr(J@E~?hpT^FBe z%s4%a<1p8!hD4DHMVUOV4UN&q=fk@rc>6*4p*lJUKbQk593P}@H}X}D4p8XKf$~?R zv5;VO2W0_J_x^CqPV=>(aZn37{3Fhrx8BQh*4=!nL2G?&R_p5R76u!NnmaSn#@mcF z_@^2;u+Om=>G*@8pr%!L9Kcta#4~UgHr5F4v7Br4K1iCxt5;GM>cFLhaloa7Xe;fm zosP7ByS{q4RTV+S<<1PD?P4#X$;kiEk}UmrDTx8!4k!Y-%8^`R4vc_KqMl_eB;H}b zVd>xYrAU*ela;`8TN9INcV#_kW2Vv>iaS8SnfvXDEa`6nX88qSmNkG`4j%{f z<3Z@>Frc6Bt^)e;E|p@=`IH!Ui+maAwx&5vbrlA4f2oFyF4+$-vjsuVB-w&6Ry+bB zS`;XBmwFE { + audio.volume += 0.01; + if ( audio.volume >= 0.2 ) { audio.volume = 0.2; return; } + sto = setTimeout( fadeIn, 100 ); + }; + + let fadeOut = () => { + audio.volume -= 0.02; + if ( audio.volume <= 0.01 ) { audio.volume = 0; audio.pause(); return; } + sto = setTimeout( fadeOut, 100 ); + }; + + let play = () => { + if ( sto ) clearTimeout( sto ); + active = true; + button.textContent = 'Stop Music'; + audio.play(); + fadeIn(); + }; + + let stop = () => { + if ( sto ) clearTimeout( sto ); + active = false; + button.textContent = 'Play Music'; + fadeOut(); + }; + + button.addEventListener( 'click', e => { + e.stopPropagation(); + e.preventDefault(); + if ( active ) { stop(); } + else { play(); } + }); + + audio.preload = 'auto'; + audio.muted = false; + audio.volume = 0; + return { play, stop }; +})(); + + +/** + * Loader Helper + */ +const LoaderHelper = { + _base: 'https://raw.githubusercontent.com/rainner/codepen-assets/master/', + _data: {}, + _loaded: 0, + _cb: null, + + // get loaded resource by name + get( name ) { + return this._data[ name ] || null; + }, + + // complete handler + onReady( cb ) { + this._cb = cb; + }, + + // common error handler + onError( err ) { + console.error( err.message || err ); + }, + + // when a resource is loaded + onData( name, data ) { + this._loaded += 1; + this._data[ name ] = data; + let total = Object.keys( this._data ).length; + let loaded = ( total && this._loaded === total ); + let hascb = ( typeof this._cb === 'function' ); + if ( loaded && hascb ) this._cb( total ); + }, + + // custom .obj file + loadGeometry( name, file ) { + if ( !name || !file ) return; + this._data[ name ] = new THREE.Object3D(); + const path = this._base +'/'+ file; + const loader = new THREE.OBJLoader2(); + loader.load( path, data => { this.onData( name, data ) }, null, this.onError ); + }, + + // load image file + loadTexture( name, file ) { + if ( !name || !file ) return; + this._data[ name ] = new THREE.Texture(); + const path = this._base +'/'+ file; + const loader = new THREE.TextureLoader(); + loader.load( path, data => { this.onData( name, data ) }, null, this.onError ); + }, +}; + + +/** + * Helper for adding easing effect + */ +const addEase = ( pos, to, ease ) => { + pos.x += ( to.x - pos.x ) / ease; + pos.y += ( to.y - pos.y ) / ease; + pos.z += ( to.z - pos.z ) / ease; +}; + +/** + * Shooting star object + */ +const shootingStar = { + scene: null, + stars: [], + spread: 1000, + + // create + create( scene ) { + this.scene = scene; + let geometry = new THREE.CylinderGeometry( 0, 2, 120, 10 ); + let material = new THREE.MeshBasicMaterial({ + color: 0xffffcc, + opacity: .4, + blending: THREE.AdditiveBlending, + side: THREE.FrontSide, + transparent: false, + depthTest: true, + }); + + let randx = THREE.Math.randInt( -this.spread, this.spread ); + let cylinder = new THREE.Mesh( geometry, material ); + cylinder.position.set( randx, 300, 200 ); + cylinder.rotation.set( Math.PI / 2, 0, 0 ); + this.stars.push( cylinder ); + this.scene.add( cylinder ); + }, + + // update + update( mouse ) { + for ( let i = 0; i < this.stars.length; i++ ) { + let cylinder = this.stars[ i ]; + + if ( cylinder.position.z < -3000 ) { + this.stars.splice( i, 1 ); + this.scene.remove( cylinder ); + continue; + } + cylinder.position.z -= 20; + } + }, +}; + + +/** + * Starfield object + */ +const starField = { + group: null, + total: 400, + spread: 8000, + zoom: 1000, + ease: 12, + move: { x: 0, y: 1200, z: -1000 }, + look: { x: 0, y:0, z: 0 }, + + // create + create( scene ) { + this.group = new THREE.Object3D(); + this.group.position.set( this.move.x, this.move.y, this.move.z ); + this.group.rotation.set( this.look.x, this.look.y, this.look.z ); + + let geometry = new THREE.Geometry(); + let material = new THREE.PointsMaterial({ + size: 64, + color: 0xffffff, + opacity: 1, + map: LoaderHelper.get( 'starTexture' ), + blending: THREE.AdditiveBlending, + vertexColors: false, + transparent: false, + depthTest: false, + }); + + for ( let i = 0; i < this.total; i++ ) { + let angle = ( Math.random() * Math.PI * 2 ); + let radius = THREE.Math.randInt( 0, this.spread ); + + geometry.vertices.push( new THREE.Vector3( + Math.cos( angle ) * radius, + Math.sin( angle ) * radius / 10, + THREE.Math.randInt( -this.spread, 0 ) + )); + } + this.group.add( new THREE.Points( geometry, material ) ); + scene.add( this.group ); + }, + + // update + update( mouse ) { + this.move.x = -( mouse.x * 0.005 ); + addEase( this.group.position, this.move, this.ease ); + addEase( this.group.rotation, this.look, this.ease ); + }, +}; + + +/** + * Mountains object + */ +const mountains = { + group: null, + simplex: null, + geometry: null, + factor: 1000, // smoothness + scale: 500, // terrain size + speed: 0.0005, // move speed + cycle: 0, + ease: 18, + move: { x: 0, y: 0, z: -3500 }, + look: { x: 0, y: 0, z: 0 }, + + create( scene ) { + this.group = new THREE.Object3D(); + this.group.position.set( this.move.x, this.move.y, this.move.z ); + this.group.rotation.set( this.look.x, this.look.y, this.look.z ); + + this.simplex = new SimplexNoise(); + this.geometry = new THREE.PlaneGeometry( 10000, 1000, 128, 32 ); + + let texture = LoaderHelper.get( 'mountainTexture' ); + texture.wrapT = THREE.RepeatWrapping; + texture.wrapS = THREE.RepeatWrapping; + + let material = new THREE.MeshPhongMaterial({ + color: 0xffffff, + opacity: 1, + map: texture, + blending: THREE.NoBlending, + side: THREE.BackSide, + transparent: false, + depthTest: false, + }); + + let terrain = new THREE.Mesh( this.geometry, material ); + terrain.position.set( 0, -500, -3000 ); + terrain.rotation.x = ( Math.PI / 2 ) + 1.35; + + let light = new THREE.PointLight( 0xffffff, 8, 5500 ); + light.position.set( 0, 1200, -3500 ); + light.castShadow = false; + light.color = commonColor; + + this.movePlain(); + this.group.add( terrain ); + this.group.add( light ); + scene.add( this.group ); + }, + + // make new mointain plain + movePlain() { + for ( let vertex of this.geometry.vertices ) { + let xoff = ( vertex.x / this.factor ); + let yoff = ( vertex.y / this.factor ) + this.cycle; + let rand = this.simplex.noise2D( xoff, yoff ) * this.scale; + vertex.z = rand; + } + this.geometry.verticesNeedUpdate = true; + this.cycle -= this.speed; + }, + + // update + update( mouse ) { + this.move.x = -( mouse.x * 0.02 ); + this.movePlain(); + addEase( this.group.position, this.move, this.ease ); + addEase( this.group.rotation, this.look, this.ease ); + }, +}; + + +/** + * Ground object + */ +const groundPlain = { + group: null, + geometry: null, + material: null, + plane: null, + simplex: null, + factor: 300, // smoothness + scale: 30, // terrain size + speed: 0.015, // move speed + cycle: 0, + ease: 12, + move: { x: 0, y: -300, z: -1000 }, + look: { x: 29.8, y: 0, z: 0 }, + + // create + create( scene ) { + this.group = new THREE.Object3D(); + this.group.position.set( this.move.x, this.move.y, this.move.z ); + this.group.rotation.set( this.look.x, this.look.y, this.look.z ); + + this.geometry = new THREE.PlaneGeometry( 4000, 2000, 128, 64 ); + this.material = new THREE.MeshLambertMaterial({ + color: 0xffffff, + opacity: 1, + blending: THREE.NoBlending, + side: THREE.FrontSide, + transparent: false, + depthTest: false, + wireframe: true, + }); + + this.plane = new THREE.Mesh( this.geometry, this.material ); + this.plane.position.set( 0, 0, 0 ); + + this.simplex = new SimplexNoise(); + this.moveNoise(); + + this.group.add( this.plane ); + scene.add( this.group ); + }, + + // change noise values over time + moveNoise() { + for ( let vertex of this.geometry.vertices ) { + let xoff = ( vertex.x / this.factor ); + let yoff = ( vertex.y / this.factor ) + this.cycle; + let rand = this.simplex.noise2D( xoff, yoff ) * this.scale; + vertex.z = rand; + } + this.geometry.verticesNeedUpdate = true; + this.cycle += this.speed; + }, + + // update + update( mouse ) { + this.moveNoise(); + this.move.x = -( mouse.x * 0.04 ); + addEase( this.group.position, this.move, this.ease ); + addEase( this.group.rotation, this.look, this.ease ); + }, +}; + + +/** + * Ship object + */ +const gunShip = { + scene: null, + group: null, + engineTexture: null, + gunSound: 'https://raw.githubusercontent.com/rainner/codepen-assets/master/audio/effects/lazer.mp3', + shots: [], + ease: 12, + move: { x: 0, y: 0, z: -40 }, + look: { x: 0, y: 0, z: 0 }, + + // create + create( scene ) { + this.scene = scene; + this.group = new THREE.Object3D(); + this.group.position.set( this.move.x, this.move.y, this.move.z ); + this.group.rotation.set( this.look.x, this.look.y, this.look.z ); + + let material = new THREE.MeshPhongMaterial({ + color: 0xffffff, + blending: THREE.NoBlending, + side: THREE.FrontSide, + transparent: false, + depthTest: true, + wireframe: false, + }); + + let light = new THREE.PointLight( 0xffffff, .4, 600 ); + light.position.set( 0, 0, 600 ); + + // let ship = LoaderHelper.get( 'shipGeometry' ); + // ship.position.set( 0, 0, 300 ); + // ship.rotation.set( 0, Math.PI, 0 ); + // ship.traverse( child => { + // if ( child instanceof THREE.Mesh ) { + // child.material = material; + // } + // }); + + this.setupEngine(); + this.playGunSound( false ); + // this.group.add( ship ); + this.group.add( light ); + scene.add( this.group ); + }, + + // create jet engine effect + setupEngine() { + this.engineTexture = LoaderHelper.get( 'engineTexture' ); + this.engineTexture.wrapT = THREE.RepeatWrapping; + this.engineTexture.wrapS = THREE.RepeatWrapping; + + let material = new THREE.MeshBasicMaterial({ + color: 0x0099ff, + opacity: 1, + alphaMap: this.engineTexture, + blending: THREE.AdditiveBlending, + side: THREE.FrontSide, + transparent: true, + depthTest: true, + }); + + let cylinder = new THREE.Mesh( new THREE.CylinderGeometry( 0, .4, 8, 32, 32, true ), material ); + cylinder.position.set( 0, .4, 307 ); + cylinder.rotation.x = Math.PI / 2; + this.group.add( cylinder ); + }, + + // update engine burn effect + updateEngine() { + this.engineTexture.offset.y -= 0.06; + this.engineTexture.needsUpdate = true; + }, + + // move ship on scroll + onScroll( e ) { + let z = this.move.z; + let d = z + ( e.deltaY | 0 ); + d = ( d < -130 ) ? -130 : d; + d = ( d > -30 ) ? -30 : d; + this.move.z = d; + }, + + // add gun fire on click + onClick( e ) { + let p = this.group.position; + + let color = new THREE.Color(); + color.setHSL( Math.random(), 1, .5 ); + + let geometry = new THREE.CylinderGeometry( .3, 0, 20, 10 ); + let material = new THREE.MeshBasicMaterial({ + color, + opacity: .8, + blending: THREE.AdditiveBlending, + side: THREE.FrontSide, + transparent: false, + depthTest: true, + }); + + let cylinder = new THREE.Mesh( geometry, material ); + cylinder.position.set( p.x, p.y, p.z + 290 ); + cylinder.rotation.set( 11, 0, 0 ); + + this.shots.push( cylinder ); + this.scene.add( cylinder ); + this.playGunSound( true ); + }, + + // gun sound + playGunSound( play ) { + let audio = new Audio( this.gunSound ); + if ( play ) { + audio.volume = 0.5; + audio.play(); + } + }, + + // update gun shots + updateShots() { + for ( let i = 0; i < this.shots.length; i++ ) { + let cylinder = this.shots[ i ]; + + if ( cylinder.position.z < -300 ) { + this.shots.splice( i, 1 ); + this.scene.remove( cylinder ); + continue; + } + cylinder.position.z -= 6; + } + }, + + // update + update( mouse ) { + this.move.x = ( mouse.x * 0.05 ); + this.move.y = -( mouse.y * 0.04 ) - 4; + this.look.z = ( mouse.x * 0.0004 ); + + this.updateShots(); + this.updateEngine(); + + addEase( this.group.position, this.move, this.ease ); + addEase( this.group.rotation, this.look, this.ease ); + }, +}; + +/** + * Setup scene + */ +const setupScene = () => { + const scene = new THREE.Scene(); + + // track mouse movement + let mouse = { + x: deviceInfo.screenCenterX(), + y: deviceInfo.screenCenterY(), + }; + + // setup renderer + const renderer = new THREE.WebGLRenderer( { alpha: true, antialias: true, precision: 'mediump' } ); + renderer.setSize( deviceInfo.screenWidth(), deviceInfo.screenHeight() ); + renderer.setPixelRatio( window.devicePixelRatio ); + renderer.setClearColor( 0x000000, 0 ); + renderer.sortObjects = true; + renderer.domElement.setAttribute( 'id', 'stageElement' ); + document.body.appendChild( renderer.domElement ); + + // setup camera + const camera = new THREE.PerspectiveCamera( 60, deviceInfo.screenRatio(), 0.1, 20000 ); + camera.position.set( 0, 0, 300 ); + camera.rotation.set( 0, 0, 0 ); + camera.lookAt( scene.position ); + + // setup light source + const light = new THREE.PointLight( 0xffffff, 4, 1000 ); + light.position.set( 0, 200, -500 ); + light.castShadow = false; + light.target = scene; + light.color = commonColor; + scene.add( light ); + + // setup objects + starField.create( scene ); + mountains.create( scene ); + groundPlain.create( scene ); + gunShip.create( scene ); + + // on page resize + window.addEventListener( 'resize', e => { + camera.aspect = deviceInfo.screenRatio(); + camera.updateProjectionMatrix(); + renderer.setSize( deviceInfo.screenWidth(), deviceInfo.screenHeight() ); + }); + + // on mouse move + window.addEventListener( 'mousemove', e => { + mouse.x = deviceInfo.mouseCenterX( e ); + mouse.y = deviceInfo.mouseCenterY( e ); + }); + + // on mouse wheel + window.addEventListener( 'wheel', e => { + gunShip.onScroll( e ); + }); + + // on mouse click + window.addEventListener( 'click', e => { + gunShip.onClick( e ); + }); + + // autostart music + const isff = ( typeof InstallTrigger !== 'undefined' ); + if ( startMusic && isff ) musicHelper.play(); + + // animation loop + const loop = () => { + requestAnimationFrame( loop ); + + // add random shooting stars + if ( Math.random() > 0.99 ) shootingStar.create( scene ); + + // update light hue + if ( cycleColor ) { + commonHue += 0.001; + if ( commonHue >= 1 ) commonHue = 0; + commonColor.setHSL( commonHue, .8, .5 ); + } + // update objects + shootingStar.update( mouse ); + starField.update( mouse ); + mountains.update( mouse ); + groundPlain.update( mouse ); + gunShip.update( mouse ); + + // render scene + renderer.render( scene, camera ); + }; + + loop(); +}; + +// init +LoaderHelper.onReady( setupScene ); +LoaderHelper.loadTexture( 'starTexture', 'images/star.png' ); +LoaderHelper.loadTexture( 'mountainTexture', 'images/terrain2.jpg' ); +LoaderHelper.loadTexture( 'engineTexture', 'images/water.jpg' ); +LoaderHelper.loadGeometry( 'shipGeometry', 'models/SpaceFighter03/SpaceFighter03.obj' ); \ No newline at end of file diff --git a/TuxTechBlogs/docs/index-style.css b/TuxTechBlogs/docs/index-style.css new file mode 100644 index 0000000..004cc29 --- /dev/null +++ b/TuxTechBlogs/docs/index-style.css @@ -0,0 +1,545 @@ +*, *:before, *:after { + margin: 0; + padding: 0; + border: 0; +} + +html, body { + display: block; + max-width: 100vw; + min-height: 100vh; +} + +body { + overflow: hidden; + position: relative; + background-color: black; + background-image: url("https://raw.githubusercontent.com/rainner/codepen-assets/master/images/pinkish_sunset.jpg"); + background-position: center top; + background-repeat: no-repeat; + background-size: 170vh; + font-family: "Denk One", Arial, sans-serif; + font-weight: normal; + font-size: 18px; + line-height: 1.2em; + color: #f0f0f0; +} + +#stageElement { + display: block; + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: -1; +} + +.player, +.instructions { + display: flex; + position: fixed; + flex-direction: row; + align-items: center; + justify-content: center; + z-index: 100; +} +.player > .fa, +.instructions > .fa { + font-size: 320%; + color: inherit; +} +.player > .content, +.instructions > .content { + margin-left: 1em; +} + +.player { + left: 1em; + bottom: 1em; +} +.player button { + display: inline-block; + background: none; + border: 2px solid rgba(255, 255, 255, 0.8); + font: inherit; + font-size: 80%; + line-height: 1.2em; + color: inherit; + margin: 2px 0; + padding: 2px 6px; + border-radius: 4px; + cursor: pointer; +} +.player button:hover { + border-color: rgba(255, 255, 255, 0.6); +} + +.instructions { + right: 1em; + bottom: 1em; +} + +*, *:before, *:after { + margin: 0; + padding: 0; + border: 0; +} + +html, body { + display: block; + max-width: 100vw; + min-height: 100vh; +} + +body { + overflow: hidden; + position: relative; + background-color: black; + background-image: url("https://raw.githubusercontent.com/rainner/codepen-assets/master/images/pinkish_sunset.jpg"); + background-position: center top; + background-repeat: no-repeat; + background-size: 170vh; + font-family: "Denk One", Arial, sans-serif; + font-weight: normal; + font-size: 18px; + line-height: 1.2em; + color: #f0f0f0; +} + +#stageElement { + display: block; + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: -1; +} + +.player, +.instructions { + display: flex; + position: fixed; + flex-direction: row; + align-items: right; + justify-content: center; + z-index: 100; +} +.player > .fa, +.instructions > .fa { + font-size: 320%; + color: inherit; +} +.player > .content, +.instructions > .content { + margin-left: 1em; +} + +.player { + left: 1em; + bottom: 1em; +} +.player button { + display: inline-block; + background: none; + border: 2px solid rgba(255, 255, 255, 0.8); + font: inherit; + font-size: 80%; + line-height: 1.2em; + color: inherit; + margin: 2px 0; + padding: 2px 6px; + border-radius: 4px; + cursor: pointer; +} +.player button:hover { + border-color: rgba(255, 255, 255, 0.6); +} + +.instructions { + right: 1em; + bottom: 1em; +} + +.container { + position: absolute; + transform: translate(-50%, -50%); + top: 40%; + left: 50%; +} + +.glitch, .glow { + color: #dfbfbf; + position: relative; + font-size: 9vw; + animation: glitch 5s 5s infinite; +} + +.glitch::before, .glow::before { + content: attr(data-text); + position: absolute; + left: -2px; + text-shadow: -5px 0 magenta; + background: black; + overflow: hidden; + top: 0; + animation: noise-1 3s linear infinite alternate-reverse, glitch 5s 5.05s infinite; +} + +.glitch::after, .glow::after { + content: attr(data-text); + position: absolute; + left: 2px; + text-shadow: -5px 0 lightgreen; + background: black; + overflow: hidden; + top: 0; + animation: noise-2 3s linear infinite alternate-reverse, glitch 5s 5s infinite; +} + +@keyframes glitch { + 1% { + transform: rotateX(10deg) skewX(90deg); + } + 2% { + transform: rotateX(0deg) skewX(0deg); + } +} +@keyframes noise-1 { + 3.3333333333% { + clip-path: inset(95px 0 6px 0); + } + 6.6666666667% { + clip-path: inset(22px 0 73px 0); + } + 10% { + clip-path: inset(10px 0 11px 0); + } + 13.3333333333% { + clip-path: inset(95px 0 3px 0); + } + 16.6666666667% { + clip-path: inset(15px 0 28px 0); + } + 20% { + clip-path: inset(56px 0 34px 0); + } + 23.3333333333% { + clip-path: inset(90px 0 5px 0); + } + 26.6666666667% { + clip-path: inset(87px 0 4px 0); + } + 30% { + clip-path: inset(90px 0 11px 0); + } + 33.3333333333% { + clip-path: inset(40px 0 28px 0); + } + 36.6666666667% { + clip-path: inset(13px 0 65px 0); + } + 40% { + clip-path: inset(28px 0 50px 0); + } + 43.3333333333% { + clip-path: inset(84px 0 4px 0); + } + 46.6666666667% { + clip-path: inset(22px 0 52px 0); + } + 50% { + clip-path: inset(53px 0 13px 0); + } + 53.3333333333% { + clip-path: inset(53px 0 5px 0); + } + 56.6666666667% { + clip-path: inset(43px 0 26px 0); + } + 60% { + clip-path: inset(35px 0 12px 0); + } + 63.3333333333% { + clip-path: inset(98px 0 3px 0); + } + 66.6666666667% { + clip-path: inset(98px 0 3px 0); + } + 70% { + clip-path: inset(81px 0 12px 0); + } + 73.3333333333% { + clip-path: inset(50px 0 51px 0); + } + 76.6666666667% { + clip-path: inset(6px 0 93px 0); + } + 80% { + clip-path: inset(89px 0 9px 0); + } + 83.3333333333% { + clip-path: inset(53px 0 31px 0); + } + 86.6666666667% { + clip-path: inset(3px 0 21px 0); + } + 90% { + clip-path: inset(73px 0 24px 0); + } + 93.3333333333% { + clip-path: inset(60px 0 20px 0); + } + 96.6666666667% { + clip-path: inset(98px 0 1px 0); + } + 100% { + clip-path: inset(35px 0 16px 0); + } +} +@keyframes noise-2 { + 0% { + clip-path: inset(28px 0 57px 0); + } + 3.3333333333% { + clip-path: inset(72px 0 11px 0); + } + 6.6666666667% { + clip-path: inset(69px 0 13px 0); + } + 10% { + clip-path: inset(42px 0 37px 0); + } + 13.3333333333% { + clip-path: inset(80px 0 1px 0); + } + 16.6666666667% { + clip-path: inset(14px 0 34px 0); + } + 20% { + clip-path: inset(66px 0 33px 0); + } + 23.3333333333% { + clip-path: inset(86px 0 11px 0); + } + 26.6666666667% { + clip-path: inset(35px 0 65px 0); + } + 30% { + clip-path: inset(70px 0 21px 0); + } + 33.3333333333% { + clip-path: inset(61px 0 19px 0); + } + 36.6666666667% { + clip-path: inset(36px 0 27px 0); + } + 40% { + clip-path: inset(44px 0 4px 0); + } + 43.3333333333% { + clip-path: inset(66px 0 15px 0); + } + 46.6666666667% { + clip-path: inset(59px 0 33px 0); + } + 50% { + clip-path: inset(31px 0 54px 0); + } + 53.3333333333% { + clip-path: inset(16px 0 60px 0); + } + 56.6666666667% { + clip-path: inset(16px 0 17px 0); + } + 60% { + clip-path: inset(64px 0 23px 0); + } + 63.3333333333% { + clip-path: inset(78px 0 7px 0); + } + 66.6666666667% { + clip-path: inset(40px 0 46px 0); + } + 70% { + clip-path: inset(9px 0 9px 0); + } + 73.3333333333% { + clip-path: inset(63px 0 6px 0); + } + 76.6666666667% { + clip-path: inset(5px 0 7px 0); + } + 80% { + clip-path: inset(47px 0 24px 0); + } + 83.3333333333% { + clip-path: inset(93px 0 2px 0); + } + 86.6666666667% { + clip-path: inset(74px 0 10px 0); + } + 90% { + clip-path: inset(75px 0 26px 0); + } + 93.3333333333% { + clip-path: inset(88px 0 13px 0); + } + 96.6666666667% { + clip-path: inset(87px 0 14px 0); + } + 100% { + clip-path: inset(10px 0 18px 0); + } +} +.scanlines { + overflow: hidden; + mix-blend-mode: difference; +} + +.scanlines::before { + content: ""; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + background: repeating-linear-gradient(to bottom, transparent 0%, rgba(255, 255, 255, 0.05) 0.5%, transparent 1%); + animation: fudge 7s ease-in-out alternate infinite; +} + +@keyframes fudge { + from { + transform: translate(0px, 0px); + } + to { + transform: translate(0px, 2%); + } +} +.glow { + text-shadow: 0 0 1000px #dfbfbf; + color: transparent; + position: absolute; + top: 0; +} + +@keyframes glitch-2 { + 1% { + transform: rotateX(10deg) skewX(70deg); + } + 2% { + transform: rotateX(0deg) skewX(0deg); + } +} + +.label{ + text-align: center; + font-size: 150%; + margin: 10px; +} + +button { + margin: 20px; +} +.custom-btn { + width: 130px; + height: 40px; + color: #fff; + border-radius: 5px; + padding: 10px 25px; + font-family: 'Lato', sans-serif; + font-weight: 500; + background: transparent; + cursor: pointer; + transition: all 0.3s ease; + position: relative; + display: inline-block; + box-shadow:inset 2px 2px 2px 0px rgba(255,255,255,.5), + 7px 7px 20px 0px rgba(0,0,0,.1), + 4px 4px 5px 0px rgba(0,0,0,.1); + outline: none; +} + +/* 15 */ +.btn-15 { + background: #b621fe; + border: none; + z-index: 1; +} +.btn-15:after { + position: absolute; + content: ""; + width: 0; + height: 100%; + top: 0; + right: 0; + z-index: -1; + background-color: #663dff; + border-radius: 5px; + box-shadow:inset 2px 2px 2px 0px rgba(255,255,255,.5), + 7px 7px 20px 0px rgba(0,0,0,.1), + 4px 4px 5px 0px rgba(0,0,0,.1); + transition: all 0.3s ease; +} +.btn-15:hover { + color: #fff; +} +.btn-15:hover:after { + left: 0; + width: 100%; +} +.btn-15:active { + top: 2px; +} + +/* 16 */ +.btn-16 { + background: red; + border: none; + z-index: 1; +} +.btn-16:after { + position: absolute; + content: ""; + width: 0; + height: 100%; + top: 0; + right: 0; + z-index: -1; + background-color: orange; + border-radius: 5px; + box-shadow:inset 2px 2px 2px 0px rgba(255,255,255,.5), + 7px 7px 20px 0px rgba(0,0,0,.1), + 4px 4px 5px 0px rgba(0,0,0,.1); + transition: all 0.3s ease; +} +.btn-16:hover { + color: #fff; +} +.btn-16:hover:after { + left: 0; + width: 100%; +} +.btn-16:active { + top: 2px; +} + +a{ + color: whitesmoke; + text-decoration: none; +} + +.lrn-more-btn{ + margin: 25% 25% 25% 25%; + flex: content; +} + +.custom_landing_logo_clr{ + color: #feffac; + opacity: 30%; +} + +.readme_body{ + max-width: 1440px; +} \ No newline at end of file diff --git a/TuxTechBlogs/docs/index.html b/TuxTechBlogs/docs/index.html new file mode 100644 index 0000000..ea43ea9 --- /dev/null +++ b/TuxTechBlogs/docs/index.html @@ -0,0 +1,57 @@ + + + + + + + Home - TuxTechBlogs + + + + + + + + +

+ +
+

🔎Explore 📝Articles, 🎓Tutorials & 📊Insights In-Depth On 💻Technology

+
+ +
+
+ 🎵Music Player
+ 📍Destination: 🚀Mars
+ +
+
+
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/TuxTechBlogs/docs/index.md b/TuxTechBlogs/docs/index.md deleted file mode 100644 index 2ca1165..0000000 --- a/TuxTechBlogs/docs/index.md +++ /dev/null @@ -1,63 +0,0 @@ -🙏 Welcome To [**TuxTechBlogs**](./index.md), This website is created to share study materials & notes related to Computer Science Engineering and its' domains which are popular these days. - -🏹 **TuxTechBlogs** is to be a one-stop shop for programmers, both experienced and amateurs alike to brush up their programming & Computer Science skills. The repository contains well documented mini-blogs for a vast variety of programming problems. - - -🔥 Programming problems from some of the best online judges [Leetcode](https://www.leetcode.com), [Codechef](https://www.codechef.com), [InterviewBit](https://https://www.interviewbit.com) etc. - -🎉 Each problem has an intuition section, followed by the algorithm and the pseudo-code, and finally the implementation. Additionally, the problems are embellished with explanatory images and animations to provide clarity of thought. - -✏️ For now, we are accepting solutions in Python,Java & C++ for the problem solving questions. Contributions are always welcome for solutions in other programming languages. Looking for **JS, Go, Kotlin** contributors. - ---- - -
-
    -
      🤝 Help Others
    -
      📝 Maintain Documentation
    -
      🗣️ Share Knowledge & Experience
    -
-
- ---- - -
- -

A Tweet Of Different Thought

- - - -
- ---- -## 📚 CSE Foundation - -- ⚙️ [`DevOps Overview And Study Meterials`](devops.md) -- 💿 [`Operating System`]() -- 📶 [`Computer Network And Systems`]() -- 👻 [`Hacking`]() -- 🌐 [`Distributed Systems And Hardwares`]() -- 📋 [`Database & Database Management Systems`]() - -## 📊 Data Science -- 🔜 Work in progress - -## ☁️ Cloud -- 🔜 Work in Progress - -## 🛸 Web3.0 -- 🔜 Work in Progress - -## 🦸 Interview -- `Interview Experience` -- `Problem Solving` -- `System Design (HLD, LLD)` -- `HR Discussions/ Behavioural Round` - - -## 🚀 Projects layout - mkdocs.yml # The configuration file. - docs/ - index.md # The documentation homepage. - devops.md # Other markdown pages, images and other - * # More to be added diff --git a/TuxTechBlogs/docs/readme.md b/TuxTechBlogs/docs/readme.md new file mode 100644 index 0000000..d4a7e0b --- /dev/null +++ b/TuxTechBlogs/docs/readme.md @@ -0,0 +1,93 @@ + + +🙏 Welcome To **TuxTechBlog**'s [README.md](./readme.md). A one-stop solution for programmers and tech enthusiasts. Our goal is to talk about trending technology & strategies. For more details, please check the [Code-of-Conduct](./CODE_OF_CONDUCT.md) section. + + +
+ +

+🛠️ Tech Stack +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
COMPONENTDETAILS
Source Code Management
Operating Systems
Integrated Development Environment
FrameworksMkdocs, Mkdocs-Material
Programming & Scripting Languagues
+
+ +
+ +

+ 💫 TuxTechBlog GitHub Repo Stats +

+ +
+ +> `WORKFLOWS` + +[![ci_cd_prod](https://github.com/TuxTechLab/Blogs/actions/workflows/ci_cd_prod.yml/badge.svg)](https://github.com/TuxTechLab/Blogs/actions/workflows/ci_cd_prod.yml) +[![ci_cd_stage](https://github.com/TuxTechLab/Blogs/actions/workflows/ci_cd_stage.yml/badge.svg)](https://github.com/TuxTechLab/Blogs/actions/workflows/ci_cd_stage.yml) + +> `REPOSITORY` + +[![License](https://img.shields.io/github/license/TuxTechLab/Blogs.svg?style=for-the-badge)](https://raw.githubusercontent.com/TuxTechLab/Blogs/master/LICENSE) +[![Website Status](https://img.shields.io/website-up-down-green-red/http/shields.io.svg?style=for-the-badge)](http://blogs.tuxtechlab.com) +[![Issues](https://img.shields.io/github/issues/TuxTechLab/Blogs?color=0088ff&style=for-the-badge&logo=github)](https://github.com/TuxTechLab/Blogs/issues) +[![Pull Requests](https://img.shields.io/github/issues-pr/TuxTechLab/Blogs?color=0088ff&style=for-the-badge&logo=github)](https://github.com/TuxTechLab/Blogs/pulls) +[![Contributors](https://img.shields.io/github/contributors/TuxTechLab/Blogs.svg)](https://github.com/TuxTechLab/Blogs/graphs/contributors/) +[![Stars](https://img.shields.io/github/stars/TuxTechLab/blogs)](https://github.com/TuxTechLab/Blogs/stargazers) + + +
+ +

+✅ Code of Conduct +

+ +Learn more from CODE OF CONDUCT of TuxTechBlogs + +
+ +
+ +

+📞 Conect Us +

+ +Please visit Contact Us of TuxTechBlogs to know more. + +

© 2023 TuxTechBlog All rights reserved.

+ +
\ No newline at end of file diff --git a/TuxTechBlogs/docs/study/.markdownlint.json b/TuxTechBlogs/docs/study/.markdownlint.json index 25e80d5..451640a 100644 --- a/TuxTechBlogs/docs/study/.markdownlint.json +++ b/TuxTechBlogs/docs/study/.markdownlint.json @@ -1,23 +1,23 @@ -{ - "extends": "./.markdownlint.json", - "no-hard-tabs": true, - "rules": { - "markdown/allow-inline-html": true - }, - "fenced-code-language": { - "allowed_languages": [ - "bash", - "html", - "C++", - "java", - "javascript", - "json", - "markdown", - "python", - "text" - ], - "language_only": true - } -} - - +{ + "extends": "./.markdownlint.json", + "no-hard-tabs": true, + "rules": { + "markdown/allow-inline-html": true + }, + "fenced-code-language": { + "allowed_languages": [ + "bash", + "html", + "C++", + "java", + "javascript", + "json", + "markdown", + "python", + "text" + ], + "language_only": true + } +} + + diff --git a/TuxTechBlogs/docs/interview.md b/TuxTechBlogs/docs/study/interview_prep/interview.md similarity index 100% rename from TuxTechBlogs/docs/interview.md rename to TuxTechBlogs/docs/study/interview_prep/interview.md diff --git a/TuxTechBlogs/docs/stylesheet/extra.css b/TuxTechBlogs/docs/stylesheet/extra.css index e8df08d..dea8aae 100644 --- a/TuxTechBlogs/docs/stylesheet/extra.css +++ b/TuxTechBlogs/docs/stylesheet/extra.css @@ -1,35 +1,35 @@ -/* -Copyright (c) 2019-2024 Arindam Tanti - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS -*/ - -/* Expanding the grid width of the website */ - -.md-grid { - max-width: 1600px; - } - -/* @import url('https://fonts.googleapis.com/css2?family=Readex+Pro:wght@300;400;500;600;700&display=swap'); -* {font-family: 'Readex Pro';} */ - -@font-face { -font-family: "Readex Pro"; -src: "https://fonts.googleapis.com/css2?family=Readex+Pro:wght@300;400;500;600;700&display=swap"; -} \ No newline at end of file +/* +Copyright (c) 2019-2024 TuxTechLabs + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS +*/ + +/* Expanding the grid width of the website */ + +.md-grid { + max-width: 1440px; + } + +.h1#changelog{ + font-size: 50rem; +} + +.ul{ + font-size: 20%; +} diff --git a/TuxTechBlogs/docs/topic/1.0. Agile/00. Introduction.md b/TuxTechBlogs/docs/topic/1.0. Agile/00. Introduction.md index e3b032b..d8a7280 100644 --- a/TuxTechBlogs/docs/topic/1.0. Agile/00. Introduction.md +++ b/TuxTechBlogs/docs/topic/1.0. Agile/00. Introduction.md @@ -1,50 +1,50 @@ -- [**What comes to mind when you think of the word "agility?"**](#what-comes-to-mind-when-you-think-of-the-word-agility) -- [**How is agile different from traditional project management?**](#how-is-agile-different-from-traditional-project-management) -- [**Where did agile come from?**](#where-did-agile-come-from) ---- - -## **What comes to mind when you think of the word "agility?"** - -- Agility is the ability to move with quick, effortless grace. -- You can be agile in the way you work, too. Every day, you can approach your tasks with grace and efficiency. -- Agile is a set of ideas, frameworks, and tools to help you manage work more efficiently. -- The agile ideas encourage you to: - 1. **Be flexible** and ready for unpredictable change - 2. **Communicate** often with stakeholders - 3. **Ship work** in short increments (instead of all at once) - 4. **Always be learning.** -- Agile isn't just about following a process. It's about having the right **attitude** and **mindset.** - -Being agile allows your team to **prioritize the most critical work** and **get it done efficiently**, ultimately **delivering value to customers more quickly.** - -![Agile_Banner](https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExYWw4OGFxNjdjeGdxZXUyYWwwaWR1aGgwdGxvMjVqd2xpajRteWFpdCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/9hUOqSkJUe7WjmxcN4/giphy.gif) - ---- - -## **How is agile different from traditional project management?** - -A typical method of managing projects is called the waterfall approach. You've probably used this method in your work experience before. - -![Agile_vs_WaterFall](https://i.postimg.cc/J0tk19s6/agile-vs-waterfall.png) - -||| -|:----|:----| -|➡️ Waterfall is a linear approach to managing projects.|🔄 Agile is a continuous approach to managing projects.| -| First, you define requirements thoroughly before the project begins. Then, you complete each phase of the project in sequential order. At the end, one significant deliverable is completed and shipped.|You stay flexible and respond quickly to changing requirements. You prioritize the work items that create the most value for your customers. Deliverables are completed and shipped continuously, in small increments.| - ---- - -## **Where did agile come from?** - -- Agile was created to solve a problem. In 2001, a group of tech professionals were frustrated with how software was being built. They felt the traditional waterfall approach was too slow, rigid, and inefficient.The group spent a weekend in the mountains and came up with a new approach to managing software projects. They called it _The Agile Manifesto_. -- This short, **68-word document** provided new guidelines for building software. It suggested teams prioritize **flexibility**, **constant communication** with stakeholders, and **continuous delivery of work** in short increments. - -
- -> ## **See it for yourself!** Click here to go to website ➡️ **[AGILE MANIFESTO](http://agilemanifesto.org/)** - -
- -- Twenty years later, the ways of working suggested in _The Agile Manifesto_ continue to drive many of the world's highest-performing teams, including a majority of software developers. -- **But, agile isn't only for software teams.** Remote work has fueled a boom in agile adoption across various teams and organizations, from law firms to marketing agencies. +- [**What comes to mind when you think of the word "agility?"**](#what-comes-to-mind-when-you-think-of-the-word-agility) +- [**How is agile different from traditional project management?**](#how-is-agile-different-from-traditional-project-management) +- [**Where did agile come from?**](#where-did-agile-come-from) +--- + +## **What comes to mind when you think of the word "agility?"** + +- Agility is the ability to move with quick, effortless grace. +- You can be agile in the way you work, too. Every day, you can approach your tasks with grace and efficiency. +- Agile is a set of ideas, frameworks, and tools to help you manage work more efficiently. +- The agile ideas encourage you to: + 1. **Be flexible** and ready for unpredictable change + 2. **Communicate** often with stakeholders + 3. **Ship work** in short increments (instead of all at once) + 4. **Always be learning.** +- Agile isn't just about following a process. It's about having the right **attitude** and **mindset.** + +Being agile allows your team to **prioritize the most critical work** and **get it done efficiently**, ultimately **delivering value to customers more quickly.** + +![Agile_Banner](https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExYWw4OGFxNjdjeGdxZXUyYWwwaWR1aGgwdGxvMjVqd2xpajRteWFpdCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/9hUOqSkJUe7WjmxcN4/giphy.gif) + +--- + +## **How is agile different from traditional project management?** + +A typical method of managing projects is called the waterfall approach. You've probably used this method in your work experience before. + +![Agile_vs_WaterFall](https://i.postimg.cc/J0tk19s6/agile-vs-waterfall.png) + +||| +|:----|:----| +|➡️ Waterfall is a linear approach to managing projects.|🔄 Agile is a continuous approach to managing projects.| +| First, you define requirements thoroughly before the project begins. Then, you complete each phase of the project in sequential order. At the end, one significant deliverable is completed and shipped.|You stay flexible and respond quickly to changing requirements. You prioritize the work items that create the most value for your customers. Deliverables are completed and shipped continuously, in small increments.| + +--- + +## **Where did agile come from?** + +- Agile was created to solve a problem. In 2001, a group of tech professionals were frustrated with how software was being built. They felt the traditional waterfall approach was too slow, rigid, and inefficient.The group spent a weekend in the mountains and came up with a new approach to managing software projects. They called it _The Agile Manifesto_. +- This short, **68-word document** provided new guidelines for building software. It suggested teams prioritize **flexibility**, **constant communication** with stakeholders, and **continuous delivery of work** in short increments. + +
+ +> ## **See it for yourself!** Click here to go to website ➡️ **[AGILE MANIFESTO](http://agilemanifesto.org/)** + +
+ +- Twenty years later, the ways of working suggested in _The Agile Manifesto_ continue to drive many of the world's highest-performing teams, including a majority of software developers. +- **But, agile isn't only for software teams.** Remote work has fueled a boom in agile adoption across various teams and organizations, from law firms to marketing agencies. - **Agile project management can help any team be more nimble, efficient, and flexible** depending on your team structure and deliverables. \ No newline at end of file diff --git a/TuxTechBlogs/docs/topic/1.0. Agile/01. Understanding the four values of agile.md b/TuxTechBlogs/docs/topic/1.0. Agile/01. Understanding the four values of agile.md index 3a5afbc..d7a3226 100644 --- a/TuxTechBlogs/docs/topic/1.0. Agile/01. Understanding the four values of agile.md +++ b/TuxTechBlogs/docs/topic/1.0. Agile/01. Understanding the four values of agile.md @@ -1,43 +1,43 @@ -## **Why are the values so important?** - -> **The four values are the foundation of agile.** - -- They are simple and direct guidelines that can help you navigate complex projects and deliver more value to stakeholders. -- Once you understand the four values, everything else you learn about agile will be easier to grasp. -- Knowing the values will make it easier to: - 1. Approach your work with an **agile mindset** - 2. Understand agile frameworks like **kanban and scrum** - 3. Start using agile tools like **Jira Software** - -
- -> ## 👇 Let's take a closer look at the four values. - -
- -![individual-interactions](https://i.postimg.cc/BZknR8Cf/individual-interactions.png) - -1. Successful teams prioritize finding the **right people** and making sure they **communicate frequently**. -2. Good tools and processes help, but focusing on the individuals and their interactions will yield the best results. - - > **For Example:** the world's best guitar is useless to someone that doesn't know how to play it. Making a beautiful song (or product) requires **highly skilled people** that can **collaborate effectively**. -3. Your team should do the same: **prioritize people** and **communicate often**. Frequent discussions across the team help uncover critical information to keep the work moving forward. - -![working_software](https://i.postimg.cc/9F9nCfv7/working-software.png) - -1. Successful teams prioritize **delivering a product that works, not to make it perfect.** This value applies to any work you deliver to customers, not just software. -2. Before agile, teams would try to build against the full scope of project requirements, allowing very little flexibility. -3. Instead, your team should look for a few critical features to deliver as a **minimum viable product (or MVP)**. Then, the team should prioritize building the MVP and get it in the customers' hands as quickly as possible. -4. This practice gives customers a working product, and it allows your team to get real-time feedback to improve future iterations. - -![customer_collaboration](https://i.postimg.cc/x1rqNkk3/customer-collab.png) - -1. Successful teams prioritize **frequent collaboration with stakeholders and customers.** Think of your customers as partners, working closely to design the best solution -2. Before agile, teams would spend a lot of time detailing a final product before the work started. The problem was that these original details rarely ended up providing much value in the end. -3. Instead, you should **partner closely with your customer** throughout the process and **be ready to adapt to changing needs and requirements**. Gather feedback frequently to help your customers quickly solve their highest priority problems. - -![respond_to_change](https://i.postimg.cc/J7fBZYvX/respond-to-change.png) - -1. Successful teams **stay flexible and ready to adapt to unforeseen changes.** Starting with a plan is always a good idea, but don't be overly rigid in sticking to it. -2. It's important to recognize in work (and life) that change is the only constant. Markets, teams, projects, and situations are constantly in flux. +## **Why are the values so important?** + +> **The four values are the foundation of agile.** + +- They are simple and direct guidelines that can help you navigate complex projects and deliver more value to stakeholders. +- Once you understand the four values, everything else you learn about agile will be easier to grasp. +- Knowing the values will make it easier to: + 1. Approach your work with an **agile mindset** + 2. Understand agile frameworks like **kanban and scrum** + 3. Start using agile tools like **Jira Software** + +
+ +> ## 👇 Let's take a closer look at the four values. + +
+ +![individual-interactions](https://i.postimg.cc/BZknR8Cf/individual-interactions.png) + +1. Successful teams prioritize finding the **right people** and making sure they **communicate frequently**. +2. Good tools and processes help, but focusing on the individuals and their interactions will yield the best results. + + > **For Example:** the world's best guitar is useless to someone that doesn't know how to play it. Making a beautiful song (or product) requires **highly skilled people** that can **collaborate effectively**. +3. Your team should do the same: **prioritize people** and **communicate often**. Frequent discussions across the team help uncover critical information to keep the work moving forward. + +![working_software](https://i.postimg.cc/9F9nCfv7/working-software.png) + +1. Successful teams prioritize **delivering a product that works, not to make it perfect.** This value applies to any work you deliver to customers, not just software. +2. Before agile, teams would try to build against the full scope of project requirements, allowing very little flexibility. +3. Instead, your team should look for a few critical features to deliver as a **minimum viable product (or MVP)**. Then, the team should prioritize building the MVP and get it in the customers' hands as quickly as possible. +4. This practice gives customers a working product, and it allows your team to get real-time feedback to improve future iterations. + +![customer_collaboration](https://i.postimg.cc/x1rqNkk3/customer-collab.png) + +1. Successful teams prioritize **frequent collaboration with stakeholders and customers.** Think of your customers as partners, working closely to design the best solution +2. Before agile, teams would spend a lot of time detailing a final product before the work started. The problem was that these original details rarely ended up providing much value in the end. +3. Instead, you should **partner closely with your customer** throughout the process and **be ready to adapt to changing needs and requirements**. Gather feedback frequently to help your customers quickly solve their highest priority problems. + +![respond_to_change](https://i.postimg.cc/J7fBZYvX/respond-to-change.png) + +1. Successful teams **stay flexible and ready to adapt to unforeseen changes.** Starting with a plan is always a good idea, but don't be overly rigid in sticking to it. +2. It's important to recognize in work (and life) that change is the only constant. Markets, teams, projects, and situations are constantly in flux. 3. You and your team will be most successful if you prepare your mind for constant changes and are ready to make intelligent pivots on a whim. \ No newline at end of file diff --git a/TuxTechBlogs/docs/topic/1.0. Agile/02. Using agile in everyday work.md b/TuxTechBlogs/docs/topic/1.0. Agile/02. Using agile in everyday work.md index 04b45fa..81a371e 100644 --- a/TuxTechBlogs/docs/topic/1.0. Agile/02. Using agile in everyday work.md +++ b/TuxTechBlogs/docs/topic/1.0. Agile/02. Using agile in everyday work.md @@ -1,46 +1,46 @@ -> # **Your goal is to build and cultivate an agile mindset.** - -## Agile mindset...what does that even mean? - -1. **It means you approach your day-to-day work with the agile ideas and concepts in mind.** Using agile in practice starts with the way you think. This way of thinking helps you become a more efficient, flexible, and high-performing team member. It allows your mind to be open to continuous learning and improvement. -2. **As you start building your mindset, remember to be patient with yourself.** Establishing a new way of thinking requires forming new habits, which take time and energy. -3. Your agile mindset is a long journey that will be developed and refined over many years. This is just the beginning. - -## **How do you build an agile mindset?** - -1. **Show respect for all the team members.** - - **Healthy, high-performing teams create a culture of trust and mutual respect.** That's the backbone of agility. - - Having an agile mindset means you embrace different ways of thinking and working, even if you don't always agree with them. Focus on keeping an open mind and seeking to understand new and unexpected ideas. -2. **Communicate Openly and Clearly.** - - **Share updates. Ask questions. Be open and transparent at all times.** With each interaction, challenge yourself to communicate clearly and concisely. - - Encourage your team to engage in frequent discussions. Quality discussions can reveal critical information that moves the work forward and helps the team feel more connected. -3. **Look for ways to innovate** - - **Agility is all about delivering maximum value to customers.** When a customer's needs change, you need to respond quickly with an innovative solution. - - **Having an agile mindset means you're constantly looking for opportunities to innovate.** This could mean improving your team's internal processes. Or enhancing features of the product you're building. - - As you complete your daily tasks, think if there are ways to improve what you're doing. Analyzing and improving your team's work will be valuable for your future career. -4. **Actively improve your skills** - - Agile is all about continuous improvement. **In your daily work, always look for opportunities to learn and grow your skillset.** - - Pause for a minute and think about your current skills: _Which skills seem to be most valuable? Which skills mesh well with your natural tendencies?_ Use these questions as a starting point to help you plan which skills to sharpen. - - Prioritizing your skill development is always a good idea. Not only does it help your team, but it also improves your future career opportunities. -5. **Your work doesn't have to be prefect.** - - **Your goal is to deliver something that works: an MVP. Not to make every detail perfect.** - - Shift your mindset to focus on doing "good enough" work, and then get immediate feedback to improve the next version. Try to adopt this approach for both large and small tasks. - - "Good enough" is different for every team and every project. If the parameters are not clear, you may want to discuss them with your team leader. -6. **Have a plan, but always ready to pivot.** - - **An agile mindset is about being flexible and ready for any unpredictable change.** Yes, you should always have a Plan A (and B and C, if time allows). But, you'll be most successful at work if your mind is always prepared to pivot. - - Change will come. It always does. Your job is to prepare your brain to stay calm and collected so that you can handle each emotional wave with ease. If everyone on the team is ready for change, you'll be able to bounce back quickly and refocus energy on solving new problems. - -> # **Frameworks and mindsets.** - -## **What's the difference?** - -1. Your agile mindset will help you think about your work in an agile way, regardless of how your team is structured. Most teams looking to take full advantage of agile use a specific agile framework to put the ideas into practice. -2. An agile framework provides specific guidelines for how teams should be organized and structure their work. Kanban and scrum are the two most common agile frameworks. - - ![scrum_vs_kanban](https://i.postimg.cc/c1XbJYbP/scrum-vs-kanban.jpg) - - ||| - |:----|:----| - |Kanban is a framework that helps your team visualize work and continuously improve. Using a visual board to track work, kanban allows team members to see the status of every work item, at any time.|Scrum is a framework that focuses on iterative and incremental deliveries. Work gets completed in short, time-boxed increments. Teams are encouraged to reflect and learn from experience, always focused on continuous improvement.| - +> # **Your goal is to build and cultivate an agile mindset.** + +## Agile mindset...what does that even mean? + +1. **It means you approach your day-to-day work with the agile ideas and concepts in mind.** Using agile in practice starts with the way you think. This way of thinking helps you become a more efficient, flexible, and high-performing team member. It allows your mind to be open to continuous learning and improvement. +2. **As you start building your mindset, remember to be patient with yourself.** Establishing a new way of thinking requires forming new habits, which take time and energy. +3. Your agile mindset is a long journey that will be developed and refined over many years. This is just the beginning. + +## **How do you build an agile mindset?** + +1. **Show respect for all the team members.** + - **Healthy, high-performing teams create a culture of trust and mutual respect.** That's the backbone of agility. + - Having an agile mindset means you embrace different ways of thinking and working, even if you don't always agree with them. Focus on keeping an open mind and seeking to understand new and unexpected ideas. +2. **Communicate Openly and Clearly.** + - **Share updates. Ask questions. Be open and transparent at all times.** With each interaction, challenge yourself to communicate clearly and concisely. + - Encourage your team to engage in frequent discussions. Quality discussions can reveal critical information that moves the work forward and helps the team feel more connected. +3. **Look for ways to innovate** + - **Agility is all about delivering maximum value to customers.** When a customer's needs change, you need to respond quickly with an innovative solution. + - **Having an agile mindset means you're constantly looking for opportunities to innovate.** This could mean improving your team's internal processes. Or enhancing features of the product you're building. + - As you complete your daily tasks, think if there are ways to improve what you're doing. Analyzing and improving your team's work will be valuable for your future career. +4. **Actively improve your skills** + - Agile is all about continuous improvement. **In your daily work, always look for opportunities to learn and grow your skillset.** + - Pause for a minute and think about your current skills: _Which skills seem to be most valuable? Which skills mesh well with your natural tendencies?_ Use these questions as a starting point to help you plan which skills to sharpen. + - Prioritizing your skill development is always a good idea. Not only does it help your team, but it also improves your future career opportunities. +5. **Your work doesn't have to be prefect.** + - **Your goal is to deliver something that works: an MVP. Not to make every detail perfect.** + - Shift your mindset to focus on doing "good enough" work, and then get immediate feedback to improve the next version. Try to adopt this approach for both large and small tasks. + - "Good enough" is different for every team and every project. If the parameters are not clear, you may want to discuss them with your team leader. +6. **Have a plan, but always ready to pivot.** + - **An agile mindset is about being flexible and ready for any unpredictable change.** Yes, you should always have a Plan A (and B and C, if time allows). But, you'll be most successful at work if your mind is always prepared to pivot. + - Change will come. It always does. Your job is to prepare your brain to stay calm and collected so that you can handle each emotional wave with ease. If everyone on the team is ready for change, you'll be able to bounce back quickly and refocus energy on solving new problems. + +> # **Frameworks and mindsets.** + +## **What's the difference?** + +1. Your agile mindset will help you think about your work in an agile way, regardless of how your team is structured. Most teams looking to take full advantage of agile use a specific agile framework to put the ideas into practice. +2. An agile framework provides specific guidelines for how teams should be organized and structure their work. Kanban and scrum are the two most common agile frameworks. + + ![scrum_vs_kanban](https://i.postimg.cc/c1XbJYbP/scrum-vs-kanban.jpg) + + ||| + |:----|:----| + |Kanban is a framework that helps your team visualize work and continuously improve. Using a visual board to track work, kanban allows team members to see the status of every work item, at any time.|Scrum is a framework that focuses on iterative and incremental deliveries. Work gets completed in short, time-boxed increments. Teams are encouraged to reflect and learn from experience, always focused on continuous improvement.| + 3. **Agile itself is not a framework.** This is important to understand. Agile is a set of ideas, but it does not provide instructions on how to apply those ideas to your work. That's what agile frameworks, like kanban and scrum, are meant to accomplish. \ No newline at end of file diff --git a/TuxTechBlogs/docs/topic/11.0. Kanban/00. Introduction.md b/TuxTechBlogs/docs/topic/11.0. Kanban/00. Introduction.md index 9a72b02..1b06b7b 100644 --- a/TuxTechBlogs/docs/topic/11.0. Kanban/00. Introduction.md +++ b/TuxTechBlogs/docs/topic/11.0. Kanban/00. Introduction.md @@ -1,109 +1,109 @@ -- [**What is kanban**](#what-is-kanban) -- [**Kanban Principles**](#kanban-principles) -- [**How do different teams use kanban?**](#how-do-different-teams-use-kanban) -- [**Understanding from Examples**](#understanding-from-examples) -- [**Getting Started with Kanban And Terminologies**](#getting-started-with-kanban-and-terminologies) - ---- - -## **What is kanban** - -> ### **Adopted by millions of teams across the world, kanban can help any team manage complex projects.** - -- **Kanban** is an agile framework that helps your team visualize work and continuously improve. In Japanese, kanban roughly translates to _"visual signal."_ - -- Kanban is a **more flexible** approach than scrum. It suggests you build a process starting from what you currently have. - ---- - -## **Kanban Principles** - -> ### **Kanban has four principles.** - -- **Visualize your workflow** using a kanban board to make work items visible to everyone. This allows team members and stakeholders to have constant insight on work progress. - -- **Set limits on your works in progress** (WIP), the number of work items that can be "in progress" at any given time. This helps your team reduce workloads, improve flow, and deliver in shorter increments. - -- **Manage the flow of work** with a system that flows freely and is as predictable as possible. Address blockers immediately, so you can reduce lead times and deliver maximum value to customers. - -- **Continuously improve** by reviewing and monitoring your system frequently. Prioritize small improvements that make the biggest impact on outcomes. - ---- - -## **How do different teams use kanban?** - -> ### **Any team in any industry can use kanban.** - -- While the framework was originally created to improve manufacturing practices, kanban has been adopted by all types of business teams, from software development to marketing. - ---- - -## **Understanding from Examples** - -> ### **Example1: Software Development Team** - - - **Payton is a software developer at NotDog, LLC**. They make an iOS app where users can vote if an image is a hotdog or not a hotdog. - - - Payton is on a support team that fixes bugs submitted by customers. Tickets are submitted every few minutes, so the support team has a long backlog of bugs to fix. - - ![KANBAN_sw_dev](https://i.postimg.cc/tggDdb7p/KANBAN-sw-dev.jpg) - - - To keep the tickets organized, Payton's team uses a kanban board. Their workflow is: **New Request, In Progress, Code Review, Complete.** - - - A customer just submitted a bug about an error message blocking the hotdog photos. When submitted, a new card is created in the **New Request** column. The work item gets assigned to Payton. He reads the details, begins the work, and moves the card to **In Progress** on the board. - - - After a few hours, Payton fixes the bug! He pulls the card to **Code Review** so another team member can check the work. Once approved, the team member moves the card to **Complete**. Payton is ready to pull his next card from the backlog. - -> ### **Example2: Marketing team** - - - Camila is a graphic designer at Rental Chickens, Inc. They supply rentable backyard chickens and coops to aspiring farmers. - - - With National Chicken Month coming in September, Camila's marketing team is launching a campaign to help boost chicken rentals. - - ![KANBAN_marketing](https://i.postimg.cc/Mp5djH69/KANBAN-marketing.jpg) - - - The team has tasks such as: create a social media strategy, conduct keyword research, write copy, and design the artwork. Their tasks are organized on a kanban board with the workflow: **To Do, In Progress, Waiting Approval, Complete.** - - - Camila's task is to design the artwork based on the social media strategy. As soon as she begins the work, she moves her card from **To Do** to **In Progress.** - - - She creates a set of farm-inspired art for the social media campaign and pulls the card into **Waiting Approval**. Camila pulls a new card from the backlog to keep her work flowing as she waits. Once the social media artwork is approved, Camila's task is complete! She can now focus her energy fully on her new item. - ---- - -## **Getting Started with Kanban And Terminologies** - -1. ### **Understand Kanban Basics** - - - Knowing the fundamentals of the framework gives you a significant advantage as you start working on a kanban team. - - - Make sure you know **why your team uses kanban and how your team is organizing the work.** - -2. ### **Know your team's workflow** - - - As you saw in the examples above, every team has a different workflow. So as you get started in kanban, **make it a priority to understand your team's workflow** - - - Knowing your workflow will help you plan your daily work and understand how you fit into the bigger picture. - -3. ### **Don't work on too many things at once** - - - One of the big ideas behind kanban is to **focus your work on just a couple of tasks at one time**. - - - It's easy to slip into bad habits of multitasking. To follow the kanban framework properly, always remember to minimize the number of tasks you have in progress. It's often better to complete one task before moving on to the next. - -4. ### **Communicate Often** - - - The benefit of a visual system is that **everyone across the team can see the work**. It's your job to update your work on the board and add relevant information for your teammates and stakeholders. - - - Always opt for over-communication, especially as you get started. Many teams schedule a daily meeting to go through their board and discuss blockers. Add comments and mention relevant people when you have questions or updates. - -5. ### **Know your team's working agreements** - - - Every team has different processes and best practices. You'll be most successful if you **focus on understanding what your team has agreed upon**. - - - Having a firm grasp of your team's working agreements will help you better prioritize your work and collaborate more effectively with the group. - -6. **Use your agile mindset** - - - The best way to provide long-term value to your team is to approach your work with an agile mindset. - +- [**What is kanban**](#what-is-kanban) +- [**Kanban Principles**](#kanban-principles) +- [**How do different teams use kanban?**](#how-do-different-teams-use-kanban) +- [**Understanding from Examples**](#understanding-from-examples) +- [**Getting Started with Kanban And Terminologies**](#getting-started-with-kanban-and-terminologies) + +--- + +## **What is kanban** + +> ### **Adopted by millions of teams across the world, kanban can help any team manage complex projects.** + +- **Kanban** is an agile framework that helps your team visualize work and continuously improve. In Japanese, kanban roughly translates to _"visual signal."_ + +- Kanban is a **more flexible** approach than scrum. It suggests you build a process starting from what you currently have. + +--- + +## **Kanban Principles** + +> ### **Kanban has four principles.** + +- **Visualize your workflow** using a kanban board to make work items visible to everyone. This allows team members and stakeholders to have constant insight on work progress. + +- **Set limits on your works in progress** (WIP), the number of work items that can be "in progress" at any given time. This helps your team reduce workloads, improve flow, and deliver in shorter increments. + +- **Manage the flow of work** with a system that flows freely and is as predictable as possible. Address blockers immediately, so you can reduce lead times and deliver maximum value to customers. + +- **Continuously improve** by reviewing and monitoring your system frequently. Prioritize small improvements that make the biggest impact on outcomes. + +--- + +## **How do different teams use kanban?** + +> ### **Any team in any industry can use kanban.** + +- While the framework was originally created to improve manufacturing practices, kanban has been adopted by all types of business teams, from software development to marketing. + +--- + +## **Understanding from Examples** + +> ### **Example1: Software Development Team** + + - **Payton is a software developer at NotDog, LLC**. They make an iOS app where users can vote if an image is a hotdog or not a hotdog. + + - Payton is on a support team that fixes bugs submitted by customers. Tickets are submitted every few minutes, so the support team has a long backlog of bugs to fix. + + ![KANBAN_sw_dev](https://i.postimg.cc/tggDdb7p/KANBAN-sw-dev.jpg) + + - To keep the tickets organized, Payton's team uses a kanban board. Their workflow is: **New Request, In Progress, Code Review, Complete.** + + - A customer just submitted a bug about an error message blocking the hotdog photos. When submitted, a new card is created in the **New Request** column. The work item gets assigned to Payton. He reads the details, begins the work, and moves the card to **In Progress** on the board. + + - After a few hours, Payton fixes the bug! He pulls the card to **Code Review** so another team member can check the work. Once approved, the team member moves the card to **Complete**. Payton is ready to pull his next card from the backlog. + +> ### **Example2: Marketing team** + + - Camila is a graphic designer at Rental Chickens, Inc. They supply rentable backyard chickens and coops to aspiring farmers. + + - With National Chicken Month coming in September, Camila's marketing team is launching a campaign to help boost chicken rentals. + + ![KANBAN_marketing](https://i.postimg.cc/Mp5djH69/KANBAN-marketing.jpg) + + - The team has tasks such as: create a social media strategy, conduct keyword research, write copy, and design the artwork. Their tasks are organized on a kanban board with the workflow: **To Do, In Progress, Waiting Approval, Complete.** + + - Camila's task is to design the artwork based on the social media strategy. As soon as she begins the work, she moves her card from **To Do** to **In Progress.** + + - She creates a set of farm-inspired art for the social media campaign and pulls the card into **Waiting Approval**. Camila pulls a new card from the backlog to keep her work flowing as she waits. Once the social media artwork is approved, Camila's task is complete! She can now focus her energy fully on her new item. + +--- + +## **Getting Started with Kanban And Terminologies** + +1. ### **Understand Kanban Basics** + + - Knowing the fundamentals of the framework gives you a significant advantage as you start working on a kanban team. + + - Make sure you know **why your team uses kanban and how your team is organizing the work.** + +2. ### **Know your team's workflow** + + - As you saw in the examples above, every team has a different workflow. So as you get started in kanban, **make it a priority to understand your team's workflow** + + - Knowing your workflow will help you plan your daily work and understand how you fit into the bigger picture. + +3. ### **Don't work on too many things at once** + + - One of the big ideas behind kanban is to **focus your work on just a couple of tasks at one time**. + + - It's easy to slip into bad habits of multitasking. To follow the kanban framework properly, always remember to minimize the number of tasks you have in progress. It's often better to complete one task before moving on to the next. + +4. ### **Communicate Often** + + - The benefit of a visual system is that **everyone across the team can see the work**. It's your job to update your work on the board and add relevant information for your teammates and stakeholders. + + - Always opt for over-communication, especially as you get started. Many teams schedule a daily meeting to go through their board and discuss blockers. Add comments and mention relevant people when you have questions or updates. + +5. ### **Know your team's working agreements** + + - Every team has different processes and best practices. You'll be most successful if you **focus on understanding what your team has agreed upon**. + + - Having a firm grasp of your team's working agreements will help you better prioritize your work and collaborate more effectively with the group. + +6. **Use your agile mindset** + + - The best way to provide long-term value to your team is to approach your work with an agile mindset. + - As you go through your daily work, challenge yourself to pause and consider how best to shift your mindset toward **flexibility**, **efficiency**, and **openness**. \ No newline at end of file diff --git a/TuxTechBlogs/docs/topic/11.0. Kanban/01. Kanban Using Jira.md b/TuxTechBlogs/docs/topic/11.0. Kanban/01. Kanban Using Jira.md index b326970..5b18021 100644 --- a/TuxTechBlogs/docs/topic/11.0. Kanban/01. Kanban Using Jira.md +++ b/TuxTechBlogs/docs/topic/11.0. Kanban/01. Kanban Using Jira.md @@ -1,93 +1,93 @@ -- [**What's a kanban board?**](#whats-a-kanban-board) -- [**5 Components of Kanban Board**](#5-components-of-kanban-board) -- [**How can you see your kanban board?**](#how-can-you-see-your-kanban-board) - ---- - -## **What's a kanban board?** - -> ### **why is kanban board an important part of kanban?** - -- A kanban board is a physical or virtual board that shows tasks visually moving through a workflow from beginning to end. - -- The board allows everyone on the team to have full transparency of the project and see how the work is organized. It also helps identify blockers and dependencies so work can continue mov - -- The most basic kanban board has three columns: To Do, In Progress, and Complete. Columns can be added or changed based on your team's needs. Here's an example of a simple kanban board. - - ![KANBAN_simple_board](https://i.postimg.cc/sx8Rzm8Z/KANBAN-simple-board.gif) - - ```shell - Kanban is a "pull" system. That means the team pulls new work items to the board when they have capacity. - - This is different than a "push" system, where tasks are pushed to the team at a whim. Pull systems prevent anyone from being overwhelmed with too many tasks at one time. - ``` - ---- - -## **5 Components of Kanban Board** - -- **The board is the foundation of the kanban framework**. It's where all your work is organized and documented. You can think of the board as the source of truth for all work across your team. - -- _Below are the five components of Kanban:_ - - 1. **Cards** - - - A card represents an individual work item. Cards are the key "visual - signals" on a kanban board. They help your team track the progress of work. - - - Each card provides additional information about the work item, such as the due date, assignee, and attachments. - - - Cards are assigned an owner responsible for the work. The owner moves the card across the board as they complete the work (To Do, In Progress, Complete, etc.). - This system allows everyone to track the progress of work visually. - - 2. **Columns** - - - **The columns on a board represent a workflow**. Cards move across columns on the board. - - - The most basic kanban board has three columns: **To Do**, **In Progress**, and **Complete**. Your team can customize these columns based on your workflow. - - ![KANBAN_columns](https://i.postimg.cc/sxf2xTw6/KANBAN-columns.gif) - - 3. **Work in Progress Limits** - - - **A work-in-progress limit sets the maximum amount of work that can be in one column at any given time.** When a column reaches its maximum, this is a warning sign that the team has over-committed too much work. - - - For example, a team could set maximum for the **In Progress** column to two. The team determines both minimum and maximum limits based on how much work they can handle. - - - **Why have limits?** Many reasons! First, it prevents multitasking and improves focus by having the team work on a smaller set of tasks. It also makes it easier to identify blockers and inefficiencies in the workflow. - - - It's almost always better to complete your original work item first than start dozens of new ones. - - ![KANBAN_WIP_limit](https://i.postimg.cc/mZVDJGg0/KANBAN-WIP-limit.gif) - - 4. **Commitment Point** - - - Kanban teams often have a backlog of work items, which they can choose to take on when they have capacity. - - - **The commitment point is the moment when an item moves from the backlog to the board**. This is a big deal. You're committing to your customer that you will complete this work item. - - - Before pulling any backlog item to the board, make sure you and your team fully understand the task. For example, has the team reviewed the item in detail? Do they have all the information they need? - - - Before you cross the commitment point, make sure you understand what you're taking on. - - 5. **Delivery Point** - - - The delivery point is when an item of work is complete. - - - How do you know for sure that a task is complete? Each card has agreed-upon exit criteria, the requirements for the card to move to the next stage in the workflow. Once the requirements are met, the team can move the card to the delivery point. - - - In kanban, the team’s goal is to move cards from the commitment point to the delivery point as fast as possible. The elapsed time between the two is the lead time. This is the total time your customer is waiting for their project to be delivered. - ---- - -## **How can you see your kanban board?** - -> ### **If your team uses kanban, your kanban board will be your home base in Jira Software.** - - - To view your board in Jira, navigate to the left sidebar and select **Board** or **Kanban board.** - - ![KANBAN_board-nav](https://i.postimg.cc/8cyz6LY1/KANBAN-board-nav.gif) - - > **💡Tip** - > - > If you don't see a Board or Kanban board option in your sidebar, you might be in a scrum board. You may need to change to a different board, or your team may not have a kanban board yet. +- [**What's a kanban board?**](#whats-a-kanban-board) +- [**5 Components of Kanban Board**](#5-components-of-kanban-board) +- [**How can you see your kanban board?**](#how-can-you-see-your-kanban-board) + +--- + +## **What's a kanban board?** + +> ### **why is kanban board an important part of kanban?** + +- A kanban board is a physical or virtual board that shows tasks visually moving through a workflow from beginning to end. + +- The board allows everyone on the team to have full transparency of the project and see how the work is organized. It also helps identify blockers and dependencies so work can continue mov + +- The most basic kanban board has three columns: To Do, In Progress, and Complete. Columns can be added or changed based on your team's needs. Here's an example of a simple kanban board. + + ![KANBAN_simple_board](https://i.postimg.cc/sx8Rzm8Z/KANBAN-simple-board.gif) + + ```shell + Kanban is a "pull" system. That means the team pulls new work items to the board when they have capacity. + + This is different than a "push" system, where tasks are pushed to the team at a whim. Pull systems prevent anyone from being overwhelmed with too many tasks at one time. + ``` + +--- + +## **5 Components of Kanban Board** + +- **The board is the foundation of the kanban framework**. It's where all your work is organized and documented. You can think of the board as the source of truth for all work across your team. + +- _Below are the five components of Kanban:_ + + 1. **Cards** + + - A card represents an individual work item. Cards are the key "visual + signals" on a kanban board. They help your team track the progress of work. + + - Each card provides additional information about the work item, such as the due date, assignee, and attachments. + + - Cards are assigned an owner responsible for the work. The owner moves the card across the board as they complete the work (To Do, In Progress, Complete, etc.). + This system allows everyone to track the progress of work visually. + + 2. **Columns** + + - **The columns on a board represent a workflow**. Cards move across columns on the board. + + - The most basic kanban board has three columns: **To Do**, **In Progress**, and **Complete**. Your team can customize these columns based on your workflow. + + ![KANBAN_columns](https://i.postimg.cc/sxf2xTw6/KANBAN-columns.gif) + + 3. **Work in Progress Limits** + + - **A work-in-progress limit sets the maximum amount of work that can be in one column at any given time.** When a column reaches its maximum, this is a warning sign that the team has over-committed too much work. + + - For example, a team could set maximum for the **In Progress** column to two. The team determines both minimum and maximum limits based on how much work they can handle. + + - **Why have limits?** Many reasons! First, it prevents multitasking and improves focus by having the team work on a smaller set of tasks. It also makes it easier to identify blockers and inefficiencies in the workflow. + + - It's almost always better to complete your original work item first than start dozens of new ones. + + ![KANBAN_WIP_limit](https://i.postimg.cc/mZVDJGg0/KANBAN-WIP-limit.gif) + + 4. **Commitment Point** + + - Kanban teams often have a backlog of work items, which they can choose to take on when they have capacity. + + - **The commitment point is the moment when an item moves from the backlog to the board**. This is a big deal. You're committing to your customer that you will complete this work item. + + - Before pulling any backlog item to the board, make sure you and your team fully understand the task. For example, has the team reviewed the item in detail? Do they have all the information they need? + + - Before you cross the commitment point, make sure you understand what you're taking on. + + 5. **Delivery Point** + + - The delivery point is when an item of work is complete. + + - How do you know for sure that a task is complete? Each card has agreed-upon exit criteria, the requirements for the card to move to the next stage in the workflow. Once the requirements are met, the team can move the card to the delivery point. + + - In kanban, the team’s goal is to move cards from the commitment point to the delivery point as fast as possible. The elapsed time between the two is the lead time. This is the total time your customer is waiting for their project to be delivered. + +--- + +## **How can you see your kanban board?** + +> ### **If your team uses kanban, your kanban board will be your home base in Jira Software.** + + - To view your board in Jira, navigate to the left sidebar and select **Board** or **Kanban board.** + + ![KANBAN_board-nav](https://i.postimg.cc/8cyz6LY1/KANBAN-board-nav.gif) + + > **💡Tip** + > + > If you don't see a Board or Kanban board option in your sidebar, you might be in a scrum board. You may need to change to a different board, or your team may not have a kanban board yet. diff --git a/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/01. Introduction.md b/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/01. Introduction.md index d5d9161..9f320b4 100644 --- a/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/01. Introduction.md +++ b/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/01. Introduction.md @@ -1,16 +1,16 @@ -# **Introduction** - -- [**Introduction**](#introduction) - - [**Brief**](#brief) - ---- - -## **Brief** - -1. Now, most of us have a lot of meetings on our calendar. And in some way it makes sense, right? Meetings can be a helpful tool for us all to communicate. - -2. But the problem that we've all experienced is that most meetings are painful expensive and really just a waste of time. So why are our meetings like this? - -3. Well, the truth is that running effective meetings is a skill you can build over time. It's a skill that's valuable for anyone to learn at any level in organization. Because we all have to spend time in meetings, right? So we might as well use that time to be productive, efficient, and hey, maybe even enjoy our time together. - -4. Well, that's what you're about to learn the best practices to make your meetings the most valuable and effective they can be. Following this chapter you'll be able to lead highly focused and efficient meetings, create clear meeting goals and agendas, keep your attendees actively involved and engaged, and use the Playbooks to improve meeting success. +# **Introduction** + +- [**Introduction**](#introduction) + - [**Brief**](#brief) + +--- + +## **Brief** + +1. Now, most of us have a lot of meetings on our calendar. And in some way it makes sense, right? Meetings can be a helpful tool for us all to communicate. + +2. But the problem that we've all experienced is that most meetings are painful expensive and really just a waste of time. So why are our meetings like this? + +3. Well, the truth is that running effective meetings is a skill you can build over time. It's a skill that's valuable for anyone to learn at any level in organization. Because we all have to spend time in meetings, right? So we might as well use that time to be productive, efficient, and hey, maybe even enjoy our time together. + +4. Well, that's what you're about to learn the best practices to make your meetings the most valuable and effective they can be. Following this chapter you'll be able to lead highly focused and efficient meetings, create clear meeting goals and agendas, keep your attendees actively involved and engaged, and use the Playbooks to improve meeting success. diff --git a/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/02. Event Determination.md b/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/02. Event Determination.md index 8443c66..673ce11 100644 --- a/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/02. Event Determination.md +++ b/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/02. Event Determination.md @@ -1,53 +1,53 @@ -# **Event Determination** - -- [**Event Determination**](#event-determination) - - [**Determine, do you really the meeting ?**](#determine-do-you-really-the-meeting-) - - [**So, how do you determine if you really need that meeting or if there's some better way to spend that time?**](#so-how-do-you-determine-if-you-really-need-that-meeting-or-if-theres-some-better-way-to-spend-that-time) - ---- - -## **Determine, do you really the meeting ?** - -1. Now, most of our calendars are packed with meetings. Sometimes being double booked or even triple booked. _But do we really need all these meetings on the calendar? Is this the most effective way to get things done? - -2. Meetings have become this thing where we just have a lot of them, and they don't always feel great. And so there's that question of going **does this need to be in a meeting?** - ---- - -## **So, how do you determine if you really need that meeting or if there's some better way to spend that time?** - -- When determining whether or not you need a meeting, there's **three things I like to think about:** - - 1. One, **what are you trying to solve, really? What's the outcome you're trying to get to? Are you trying to collaborate on a problem? Are you trying to share information with soemone else?** Really getting to kind of the crux of what it means to actually succeed in this meeting. What's the outcome we want to get to? - - 2. Number two, **what's the best way to achieve this?** You always default to a meeting, so you have to change that behavior. Maybe it could be an instant message. It could be Confluence page. - - 3. Suppose you work with a team right now that actually spends most of its time in different parts of the globe which is really hard for you to collaborate. So what you done is kind of come up with new ways to collaborate that doesn't involve a meeting. - - 4. You use things like Confluence to actually co-create documentation around the globe around, you know around the clock. And then use tools like Loom/ Youtube/ Diagram/ Confluence KB to allow us to kind of go and express maybe our thoughts on what's going on. - - 5. **What have I done in the last week or what have I done since yesterday and be able to share that back** because it's a lot easier than maybe writing something down or trying to articulate an idea. That's just too complex. - - 6. These Loom videos and Confluence pages to give an opportunity to kind of figure out how do you want to work the next day and then that way we have only certain touch points. - - 7. You need to worry about with each other versus trying to have a daily meeting to stay in sync. And finally the third thing you need to think about: **who actually needs to be at that meeting?** - - 8. **Are you meeting with a person or are you meeting with a group?** If you're meeting with a person, is this something that you need to have a meeting for or is it best done through an instant message or some sort of other collaboration means? - - 9. If it's a group, **what are you trying to share? Are you just trying to share information?** If you're just trying to share information, maybe that's also done better through sharing out something like a Confluence page and a Loom. - - 10. Again, when you're thinking about the meetings that you have today, don't default to just have the meeting. Think about **how could do this a little differently?** - - 11. If I need help answering these questions, Atlassian has actually come up with kind of a cheeky, fun view of how we can better identify whether or not we need to have a meeting. They call it the **"why do I want to call this meeting?" decision tree.** So if you walk through it, it kind of gives you these fun areas to say maybe I'm trying to share information or maybe I want to build relationships. - - ![MEETING_decision_tree](https://i.postimg.cc/c4ZRMW52/MEETING-decision-tree.jpg) - - 12. And it starts asking me some questions like is this a one-on-one is this just trying to push information out there and it helps you kind of determine whether or not you actually need to hold this meeting. - - - For example, you probably don't need to have a meeting to let's say read through the contents of a Confluence page you just sent. Or if you just don't know any other way to collaborate. Trust me, there are other ways to collaborate that don't involve a meeting. - - 13. Now the thing is, is this chart is great. It's fun. It's something that Atlassian use. But based on your organizational behaviors your cultural behaviors in your organization, you may actually want to come up with your own. - - 14. Work with the organization or even just your own team to create a meeting decision tree of your own in order to improve your meeting culture. You can then use your decision tree as a working agreement to eliminate unnecessary meetings and promote better meeting behaviors. - - 15. Again, find what works best for you. I usually try to lead with if I couldn't have a meeting for this how else could I get it accomplished? Put it into a decision tree to help you kind of think through that. +# **Event Determination** + +- [**Event Determination**](#event-determination) + - [**Determine, do you really the meeting ?**](#determine-do-you-really-the-meeting-) + - [**So, how do you determine if you really need that meeting or if there's some better way to spend that time?**](#so-how-do-you-determine-if-you-really-need-that-meeting-or-if-theres-some-better-way-to-spend-that-time) + +--- + +## **Determine, do you really the meeting ?** + +1. Now, most of our calendars are packed with meetings. Sometimes being double booked or even triple booked. _But do we really need all these meetings on the calendar? Is this the most effective way to get things done? + +2. Meetings have become this thing where we just have a lot of them, and they don't always feel great. And so there's that question of going **does this need to be in a meeting?** + +--- + +## **So, how do you determine if you really need that meeting or if there's some better way to spend that time?** + +- When determining whether or not you need a meeting, there's **three things I like to think about:** + + 1. One, **what are you trying to solve, really? What's the outcome you're trying to get to? Are you trying to collaborate on a problem? Are you trying to share information with soemone else?** Really getting to kind of the crux of what it means to actually succeed in this meeting. What's the outcome we want to get to? + + 2. Number two, **what's the best way to achieve this?** You always default to a meeting, so you have to change that behavior. Maybe it could be an instant message. It could be Confluence page. + + 3. Suppose you work with a team right now that actually spends most of its time in different parts of the globe which is really hard for you to collaborate. So what you done is kind of come up with new ways to collaborate that doesn't involve a meeting. + + 4. You use things like Confluence to actually co-create documentation around the globe around, you know around the clock. And then use tools like Loom/ Youtube/ Diagram/ Confluence KB to allow us to kind of go and express maybe our thoughts on what's going on. + + 5. **What have I done in the last week or what have I done since yesterday and be able to share that back** because it's a lot easier than maybe writing something down or trying to articulate an idea. That's just too complex. + + 6. These Loom videos and Confluence pages to give an opportunity to kind of figure out how do you want to work the next day and then that way we have only certain touch points. + + 7. You need to worry about with each other versus trying to have a daily meeting to stay in sync. And finally the third thing you need to think about: **who actually needs to be at that meeting?** + + 8. **Are you meeting with a person or are you meeting with a group?** If you're meeting with a person, is this something that you need to have a meeting for or is it best done through an instant message or some sort of other collaboration means? + + 9. If it's a group, **what are you trying to share? Are you just trying to share information?** If you're just trying to share information, maybe that's also done better through sharing out something like a Confluence page and a Loom. + + 10. Again, when you're thinking about the meetings that you have today, don't default to just have the meeting. Think about **how could do this a little differently?** + + 11. If I need help answering these questions, Atlassian has actually come up with kind of a cheeky, fun view of how we can better identify whether or not we need to have a meeting. They call it the **"why do I want to call this meeting?" decision tree.** So if you walk through it, it kind of gives you these fun areas to say maybe I'm trying to share information or maybe I want to build relationships. + + ![MEETING_decision_tree](https://i.postimg.cc/c4ZRMW52/MEETING-decision-tree.jpg) + + 12. And it starts asking me some questions like is this a one-on-one is this just trying to push information out there and it helps you kind of determine whether or not you actually need to hold this meeting. + + - For example, you probably don't need to have a meeting to let's say read through the contents of a Confluence page you just sent. Or if you just don't know any other way to collaborate. Trust me, there are other ways to collaborate that don't involve a meeting. + + 13. Now the thing is, is this chart is great. It's fun. It's something that Atlassian use. But based on your organizational behaviors your cultural behaviors in your organization, you may actually want to come up with your own. + + 14. Work with the organization or even just your own team to create a meeting decision tree of your own in order to improve your meeting culture. You can then use your decision tree as a working agreement to eliminate unnecessary meetings and promote better meeting behaviors. + + 15. Again, find what works best for you. I usually try to lead with if I couldn't have a meeting for this how else could I get it accomplished? Put it into a decision tree to help you kind of think through that. diff --git a/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/03. Running Effective Meeting.md b/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/03. Running Effective Meeting.md index ba49e5c..b742632 100644 --- a/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/03. Running Effective Meeting.md +++ b/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/03. Running Effective Meeting.md @@ -1,80 +1,80 @@ -# **Running Effective Meeting** - -- [**Running Effective Meeting**](#running-effective-meeting) - - [**What is a Effective Meeting?**](#what-is-a-effective-meeting) - - [**Typical Problems with Meetings**](#typical-problems-with-meetings) - - [**What is an effective meeting then and what makes it effective?**](#what-is-an-effective-meeting-then-and-what-makes-it-effective) - - [**Four principles to an effective meeting**](#four-principles-to-an-effective-meeting) - ---- - -## **What is a Effective Meeting?** - -- I think we've all been in a meeting, probably in the last week, where you kind of came out of it thinking it wasn't the best use of my time or that wasn't that effective. - -- The stats today tell us that **only 50% of the time we spend in meetings is considered effective.** That means half the time we're spending a meetings, we don't feel like we're adding any value. And along those lines, at least **in the US, 37 billion dollars is spent on bad meetings**. - -- So, bad meetings are rampant in society today and for us there's actually ten core areas that we think bad meetings fall into. We essentially call it **"Bad Meeting Bingo."** - ---- - -## **Typical Problems with Meetings** - -- For us there's a couple of these that really resonate out there. Specifically areas like **focus;** do meetings have fluid borders. You really have no purpose coming in, you just show up. You're like, so what are we talking about today? - - ![MEETING*problem*focus](https://i.postimg.cc/43rtKR98/MEETING-problem-focus.png) - -- Things like **loops**. Do we have like this Groundhog's Day feeling where we just kind of keep going back to the same topic over and over again, like "*Oh we talked about this last time we're gonna talk about it again?"* - - ![MEETING*problem*loops](https://i.postimg.cc/sxzhcPK7/MEETING-problem-loops.png) - -- Even things like **readiness**. And not just on you the facilitators part, but on your participants. Are we coming into the meeting ready to have this meeting? Have we done the pre-work? Have we actually come in prepared to actually have a good conversation? - - ![MEETING*problem*readiness](https://i.postimg.cc/qBcn7YML/MEETING-problem-readiness.png) - -- And ultimately one of the worst problems out there is **results**. Do we leave a meeting not making any decisions? Not coming to any kind of conclusion on how we want to move forward? Do we not hit an outcome? - - ![MEETING*problem*results](https://i.postimg.cc/c4XnRn3t/MEETING-problem-results.png) - -So for us these are some of those core areas why meetings may not be as effective, as they could be. - ---- - -## **What is an effective meeting then and what makes it effective?** - -- There's a couple things that kind of go into an effective meeting. One, they need to have a pre-established goal. **What is it that we're trying to accomplish?** - -- Two, they provide value to the people who are attending that meeting. There's an outcome we're going for that people feel like this was a good use of my time. - -- And finally all participants are engaged and they actually leave feeling like hey, I actually got value out of this. This was a good use of my time. - -- Think about this as a sort of a Venn diagram around business outcomes and cultural outcomes. - - ![Meeeting*ven*diagram](https://i.postimg.cc/ZnzrQzY9/Meeeting-ven-diagram.png) - - 1. Ultimately, it comes down to the **"intent."** Effective meetings are actually created and run intently. - - 2. **What are the things you're trying to achieve around those spaces?** And typically meetings are built around those when we think of our business outcomes. - - 3. Think about things like is the intent of this meeting to impact a desired outcome. Are we actually trying to make it change happen? Maybe we want to produce actionable information. We want to go into a meeting and come out with stuff that we can make decisions on or we've actually made a decision on. - - 4. And **ultimately we may even want to provide visibility to leadership on how things are going.** Or maybe we want **to get visibility with leadership to showoff some of the great things we're doing.** - - 5. Then there's the cultural outcomes. We need to think about things like **why are we holding this meeting?** Because it's a critical touch point in an async world for our team. - - 6. How do we prevent things like the **Lone Wolf** syndrome where people don't feel so isolated and disengaged from their work. Is this meeting in place to help us rapidly accelerate on some sort of idea as a team. - - 7. Or maybe the intent of this meeting is to help us leverage the wisdom of crowds. How do we help bring about this diverse set of experience and knowledge to create something better than any one of us can do ourselves - - 8. Understanding the intent of an effective meeting is about balancing this business outcome with this cultural outcome. Ultimately in the end, we want to achieve both. And that allows both you and your participants to get the most out of your time together. - ---- - -## **Four principles to an effective meeting** - - 1. `Preparation` - 2. `Facilitation` - 3. `Participation` - 4. `Follow-up` - -We will be talking about these principles in the next doc. +# **Running Effective Meeting** + +- [**Running Effective Meeting**](#running-effective-meeting) + - [**What is a Effective Meeting?**](#what-is-a-effective-meeting) + - [**Typical Problems with Meetings**](#typical-problems-with-meetings) + - [**What is an effective meeting then and what makes it effective?**](#what-is-an-effective-meeting-then-and-what-makes-it-effective) + - [**Four principles to an effective meeting**](#four-principles-to-an-effective-meeting) + +--- + +## **What is a Effective Meeting?** + +- I think we've all been in a meeting, probably in the last week, where you kind of came out of it thinking it wasn't the best use of my time or that wasn't that effective. + +- The stats today tell us that **only 50% of the time we spend in meetings is considered effective.** That means half the time we're spending a meetings, we don't feel like we're adding any value. And along those lines, at least **in the US, 37 billion dollars is spent on bad meetings**. + +- So, bad meetings are rampant in society today and for us there's actually ten core areas that we think bad meetings fall into. We essentially call it **"Bad Meeting Bingo."** + +--- + +## **Typical Problems with Meetings** + +- For us there's a couple of these that really resonate out there. Specifically areas like **focus;** do meetings have fluid borders. You really have no purpose coming in, you just show up. You're like, so what are we talking about today? + + ![MEETING*problem*focus](https://i.postimg.cc/43rtKR98/MEETING-problem-focus.png) + +- Things like **loops**. Do we have like this Groundhog's Day feeling where we just kind of keep going back to the same topic over and over again, like "*Oh we talked about this last time we're gonna talk about it again?"* + + ![MEETING*problem*loops](https://i.postimg.cc/sxzhcPK7/MEETING-problem-loops.png) + +- Even things like **readiness**. And not just on you the facilitators part, but on your participants. Are we coming into the meeting ready to have this meeting? Have we done the pre-work? Have we actually come in prepared to actually have a good conversation? + + ![MEETING*problem*readiness](https://i.postimg.cc/qBcn7YML/MEETING-problem-readiness.png) + +- And ultimately one of the worst problems out there is **results**. Do we leave a meeting not making any decisions? Not coming to any kind of conclusion on how we want to move forward? Do we not hit an outcome? + + ![MEETING*problem*results](https://i.postimg.cc/c4XnRn3t/MEETING-problem-results.png) + +So for us these are some of those core areas why meetings may not be as effective, as they could be. + +--- + +## **What is an effective meeting then and what makes it effective?** + +- There's a couple things that kind of go into an effective meeting. One, they need to have a pre-established goal. **What is it that we're trying to accomplish?** + +- Two, they provide value to the people who are attending that meeting. There's an outcome we're going for that people feel like this was a good use of my time. + +- And finally all participants are engaged and they actually leave feeling like hey, I actually got value out of this. This was a good use of my time. + +- Think about this as a sort of a Venn diagram around business outcomes and cultural outcomes. + + ![Meeeting*ven*diagram](https://i.postimg.cc/ZnzrQzY9/Meeeting-ven-diagram.png) + + 1. Ultimately, it comes down to the **"intent."** Effective meetings are actually created and run intently. + + 2. **What are the things you're trying to achieve around those spaces?** And typically meetings are built around those when we think of our business outcomes. + + 3. Think about things like is the intent of this meeting to impact a desired outcome. Are we actually trying to make it change happen? Maybe we want to produce actionable information. We want to go into a meeting and come out with stuff that we can make decisions on or we've actually made a decision on. + + 4. And **ultimately we may even want to provide visibility to leadership on how things are going.** Or maybe we want **to get visibility with leadership to showoff some of the great things we're doing.** + + 5. Then there's the cultural outcomes. We need to think about things like **why are we holding this meeting?** Because it's a critical touch point in an async world for our team. + + 6. How do we prevent things like the **Lone Wolf** syndrome where people don't feel so isolated and disengaged from their work. Is this meeting in place to help us rapidly accelerate on some sort of idea as a team. + + 7. Or maybe the intent of this meeting is to help us leverage the wisdom of crowds. How do we help bring about this diverse set of experience and knowledge to create something better than any one of us can do ourselves + + 8. Understanding the intent of an effective meeting is about balancing this business outcome with this cultural outcome. Ultimately in the end, we want to achieve both. And that allows both you and your participants to get the most out of your time together. + +--- + +## **Four principles to an effective meeting** + + 1. `Preparation` + 2. `Facilitation` + 3. `Participation` + 4. `Follow-up` + +We will be talking about these principles in the next doc. diff --git a/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/04. Preparation.md b/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/04. Preparation.md index 12aae2f..ac26ef5 100644 --- a/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/04. Preparation.md +++ b/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/04. Preparation.md @@ -1,56 +1,56 @@ -# **Phase: Preparation** - -- [**Phase: Preparation**](#phase-preparation) - - [**Preparation Principles**](#preparation-principles) - ---- - -## **Preparation Principles** - - 1. It's one of the most important stages in the entire process. This stage is all about doing the right pre-work and sharing that out with your participants before the meeting ever starts. - - 2. Pre-work is essential for transforming your meetings and preventing unnecessary waste. - - 3. And so as we think about preparing for a meeting, there's a couple things you need to keep in mind. **When you actually say "I need this meeting," the first thing you do is not set up the meeting.** - - 4. The first thing you need to do before you send anything out: build an agenda. **What are the topics you want to cover in this agenda?** This goes back to that idea being very intentful with your time, thinking about the outcomes. - - 5. **Focus on time boxing the agendas**. Focus in on doing things like maybe setting aside 10 to 15 minute increments for each item on your agenda. Anything more than that and people might find themselves kind of drifting off or you might start wandering off topic. - - 6. Within your agenda, make sure you've identify what's the outcome for each one of those topics? **Yes, I want to present on something, but why am I presenting it? Again am I information sharing? Am I trying to make a decision with this group? Am I trying to gather ideas?** - - 7. Be very explicit and then also **identify who's going to own that topic. Who is going to help drive that conversation. Even though you may be the facilitator, someone is presenting that topic and your role is to help ensure that we hit that outcome and maintain that time box.** - - ![MEETING_kickoff_agenda](https://i.postimg.cc/Hs2Q6Nqx/MEETING-kickoff-agenda.png) - - 8. Now this goes back down to again the intent of the meeting. **What are you trying to do? Don't blast out that invite to multiple people and just hope you get the right folks. For every person you add to the invite, make sure you ask yourself the question what's in it for this person to spend time in my meeting versus going somewhere else or doing something else.** - - 9. The thing is if you say well they just need to be here, that's not a good enough answer. Go through and say well, **what is their role gonna be in this meeting? Are they gonna help me make a decision? Do I need their expertise in something? Or are they part of a team that I need to share information with?** - - 10. Again be very explicit with **who you're bringing and why. And at that point, that's when you can invite them. That way they recognize this is the role I'm going to play versus "Hey, should I be here?"** - - 11. And so **once you've actually built out your agenda, you've actually figured out who needs to attend then and only then should you go ahead and send out an invite.** - - 12. In that invite make sure that in the description. Either **included the actual copy and paste agenda or you've included a link to something like a Confluence page.** - - 13. **Never ever ever send a meeting invite with that says "Agenda to come."** That is just a way to cop out of actually putting together that agenda doing that preparation. - - 14. As you're getting prepared for your meeting, **are there any other tools or tips to use?** - - 15. To me all goes back to again, w**hat do you want to try to achieve in the meeting? What's the intent of the meeting?** - - 16. If you're having a **one-way information sharing meeting, tools like PowerPoint and Keynote are great for that. They help convey information very well to an audience.** - - 17. Now if you're in a more of **a collaborative meeting, maybe you're trying to make a decision or maybe you're just trying to brainstorm things. There's other tools out there.** - - 18. [**Confluence**](https://www.atlassian.com/software/confluence) is really good for sharing information and allowing people to kind of review and collaborate on it. Tools like [**Mural**](https://www.mural.co/)/ [**draw.io**](https://app.diagrams.net/) are really great whiteboarding tools that **allow you to go in and actually have some rapid brainstorming.** - - 19. You can even use polling tools like [**Slido**](https://www.slido.com/) or [**Mentimeter**](https://www.mentimeter.com/). These are great tools that I've found in my meetings that I like to employ at certain times to kind of get the poll of the room. Especially in a large group on a certain question that I have. - - 20. So think creatively about how you can use tools to one engage your audience. But then also make sure when you're using those tools you're using them with intent. - - 21. You're not just using them because you can. And another pro tip here is if you're going to use these tools, make sure you get those tools prepped beforehand. - - 22. I hate going into a meeting and someone's like, "Oh look, we're gonna review this Confluence page and I don't know where it is." Be prepared. Link that in your agenda. What are we going to review, where we gonna do it? - - 23. At the end, sharing Minutes of Meeting (**MoM**) to the attendees helps to keep the context with target audience. Also if any to-do/ pending action to be taken by you/ someone else can be specified in follow up mail once the meeting is over. +# **Phase: Preparation** + +- [**Phase: Preparation**](#phase-preparation) + - [**Preparation Principles**](#preparation-principles) + +--- + +## **Preparation Principles** + + 1. It's one of the most important stages in the entire process. This stage is all about doing the right pre-work and sharing that out with your participants before the meeting ever starts. + + 2. Pre-work is essential for transforming your meetings and preventing unnecessary waste. + + 3. And so as we think about preparing for a meeting, there's a couple things you need to keep in mind. **When you actually say "I need this meeting," the first thing you do is not set up the meeting.** + + 4. The first thing you need to do before you send anything out: build an agenda. **What are the topics you want to cover in this agenda?** This goes back to that idea being very intentful with your time, thinking about the outcomes. + + 5. **Focus on time boxing the agendas**. Focus in on doing things like maybe setting aside 10 to 15 minute increments for each item on your agenda. Anything more than that and people might find themselves kind of drifting off or you might start wandering off topic. + + 6. Within your agenda, make sure you've identify what's the outcome for each one of those topics? **Yes, I want to present on something, but why am I presenting it? Again am I information sharing? Am I trying to make a decision with this group? Am I trying to gather ideas?** + + 7. Be very explicit and then also **identify who's going to own that topic. Who is going to help drive that conversation. Even though you may be the facilitator, someone is presenting that topic and your role is to help ensure that we hit that outcome and maintain that time box.** + + ![MEETING_kickoff_agenda](https://i.postimg.cc/Hs2Q6Nqx/MEETING-kickoff-agenda.png) + + 8. Now this goes back down to again the intent of the meeting. **What are you trying to do? Don't blast out that invite to multiple people and just hope you get the right folks. For every person you add to the invite, make sure you ask yourself the question what's in it for this person to spend time in my meeting versus going somewhere else or doing something else.** + + 9. The thing is if you say well they just need to be here, that's not a good enough answer. Go through and say well, **what is their role gonna be in this meeting? Are they gonna help me make a decision? Do I need their expertise in something? Or are they part of a team that I need to share information with?** + + 10. Again be very explicit with **who you're bringing and why. And at that point, that's when you can invite them. That way they recognize this is the role I'm going to play versus "Hey, should I be here?"** + + 11. And so **once you've actually built out your agenda, you've actually figured out who needs to attend then and only then should you go ahead and send out an invite.** + + 12. In that invite make sure that in the description. Either **included the actual copy and paste agenda or you've included a link to something like a Confluence page.** + + 13. **Never ever ever send a meeting invite with that says "Agenda to come."** That is just a way to cop out of actually putting together that agenda doing that preparation. + + 14. As you're getting prepared for your meeting, **are there any other tools or tips to use?** + + 15. To me all goes back to again, w**hat do you want to try to achieve in the meeting? What's the intent of the meeting?** + + 16. If you're having a **one-way information sharing meeting, tools like PowerPoint and Keynote are great for that. They help convey information very well to an audience.** + + 17. Now if you're in a more of **a collaborative meeting, maybe you're trying to make a decision or maybe you're just trying to brainstorm things. There's other tools out there.** + + 18. [**Confluence**](https://www.atlassian.com/software/confluence) is really good for sharing information and allowing people to kind of review and collaborate on it. Tools like [**Mural**](https://www.mural.co/)/ [**draw.io**](https://app.diagrams.net/) are really great whiteboarding tools that **allow you to go in and actually have some rapid brainstorming.** + + 19. You can even use polling tools like [**Slido**](https://www.slido.com/) or [**Mentimeter**](https://www.mentimeter.com/). These are great tools that I've found in my meetings that I like to employ at certain times to kind of get the poll of the room. Especially in a large group on a certain question that I have. + + 20. So think creatively about how you can use tools to one engage your audience. But then also make sure when you're using those tools you're using them with intent. + + 21. You're not just using them because you can. And another pro tip here is if you're going to use these tools, make sure you get those tools prepped beforehand. + + 22. I hate going into a meeting and someone's like, "Oh look, we're gonna review this Confluence page and I don't know where it is." Be prepared. Link that in your agenda. What are we going to review, where we gonna do it? + + 23. At the end, sharing Minutes of Meeting (**MoM**) to the attendees helps to keep the context with target audience. Also if any to-do/ pending action to be taken by you/ someone else can be specified in follow up mail once the meeting is over. diff --git a/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/05. Facilitation.md b/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/05. Facilitation.md index 296a82a..8c26e71 100644 --- a/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/05. Facilitation.md +++ b/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/05. Facilitation.md @@ -1,70 +1,70 @@ -# **Phase: Meeting Facilitation** - -- [**Phase: Meeting Facilitation**](#phase-meeting-facilitation) - - [**Facilitation phase**](#facilitation-phase) - - [**How to facilitate a meeting?**](#how-to-facilitate-a-meeting) - - [**Tips to keep in mind as you facilitate**](#tips-to-keep-in-mind-as-you-facilitate) - ---- - -## **Facilitation phase** - - 1. So you made it. You're actually at your meeting. You've done all the preparation. You made sure the right people are there. - - 2. It is **good practise to remind the meeting facilitators when you start a meeting, always make sure you cover the ground rules, gentle reminders.** I usually like to **include this at the top of the meeting agenda page in Confluence.** - - 3. In the meeting you can say here are the three or four things that we agreed to follow. That we're not going to talk over each other. We're going to make sure we raise our hands if we want to say something. - - 4. These are little things that, again, as a quick reminder allow people to become conscious of it and realize, **"All right. This is how we act when we're together."** So again, always make sure you cover those ground rules. - - 5. To me each meeting needs a scribe. Honestly, it's difficult for anyone to take notes and facilitate the same time. This is also a very clever way to help bring in participation from the people in the room. **Find someone who can help you take notes.** - - 6. **Another clever thing to do is let's say you have one of those individuals in your meeting that really likes to kind of take the stage.** Maybe they're always kind of breaking your ground rules. A good way to get them engaged in a positive way is ask them to be the note-taker. - - 7. Have them being engaged and the whole flow of the meeting by being that note-taker. And it's one of the things that will help keep them focused on something that's adding value to that meeting. - - 8. **Be the facilitator. This means that in the conversation, make sure you're putting that facilitator hat on and not necessarily jumping into the content.** - - 9. **A lot of times, the facilitator can get themselves deep into a conversation** and then all of a sudden, 15, 20, 30 minutes goes by because they're so deep in the conversation that they forgot to pay attention to the clock. - - 10. If you find that you're in a topic that you need to engage with, actually ask your group, **"I need someone to play facilitator for the next topic because I need to engage in that."** - - 11. **Get someone to be that timekeeper, that person who's gonna keep you focused. It's huge because it'll also again show that you respect people's time and want to get to all the topics.** - - 12. **Make sure you know when to break the rules.** I say this because one of the things that you probably seen in meetings is you get a facilitator who is running a meeting by the book, when something maybe truly more pressing comes up. And says "Nope, we got to keep your schedule." - - 13. Knowing when to break the rules and how to ask the team permission to break the rules is key be willing to kind of sense and adapt as you go. - - 14. **Again use your rules as your guide, but don't be so rigid in those that all the sudden you lead people in the end to still feel like we didn't cover the right thing.** - - 15. Some of my best meetings have come out in the end where they said, you know what I'm glad we switch to that topic because we needed to at that point. - - 16. So just a few things to keep in mind as you're facilitating. It's **your responsibility to be a good listener**. **Be aware of the conversation going on** and **help advance discussion when needed**. - - 17. **Know how to draw your participants back in if things start to wander a bit and be mindful the topics and time** just to make sure everything stays on track. - -Going back to the four principles. Those are some tips for better facilitation next. Let's move to participation. - ---- - -## **How to facilitate a meeting?** - - 1. Start a meeting by covering the ground rules. - - 2. Have someone else be the scribe. - - 3. Be the facilitator. - - 4. Know when to break the rules. - ---- - -## **Tips to keep in mind as you facilitate** - - 1. Be a good listener. Do not talk over each other. - - 2. Help advance the discussion. - - 3. Draw participants back in. - - 4. Be mindguful of topics and time. +# **Phase: Meeting Facilitation** + +- [**Phase: Meeting Facilitation**](#phase-meeting-facilitation) + - [**Facilitation phase**](#facilitation-phase) + - [**How to facilitate a meeting?**](#how-to-facilitate-a-meeting) + - [**Tips to keep in mind as you facilitate**](#tips-to-keep-in-mind-as-you-facilitate) + +--- + +## **Facilitation phase** + + 1. So you made it. You're actually at your meeting. You've done all the preparation. You made sure the right people are there. + + 2. It is **good practise to remind the meeting facilitators when you start a meeting, always make sure you cover the ground rules, gentle reminders.** I usually like to **include this at the top of the meeting agenda page in Confluence.** + + 3. In the meeting you can say here are the three or four things that we agreed to follow. That we're not going to talk over each other. We're going to make sure we raise our hands if we want to say something. + + 4. These are little things that, again, as a quick reminder allow people to become conscious of it and realize, **"All right. This is how we act when we're together."** So again, always make sure you cover those ground rules. + + 5. To me each meeting needs a scribe. Honestly, it's difficult for anyone to take notes and facilitate the same time. This is also a very clever way to help bring in participation from the people in the room. **Find someone who can help you take notes.** + + 6. **Another clever thing to do is let's say you have one of those individuals in your meeting that really likes to kind of take the stage.** Maybe they're always kind of breaking your ground rules. A good way to get them engaged in a positive way is ask them to be the note-taker. + + 7. Have them being engaged and the whole flow of the meeting by being that note-taker. And it's one of the things that will help keep them focused on something that's adding value to that meeting. + + 8. **Be the facilitator. This means that in the conversation, make sure you're putting that facilitator hat on and not necessarily jumping into the content.** + + 9. **A lot of times, the facilitator can get themselves deep into a conversation** and then all of a sudden, 15, 20, 30 minutes goes by because they're so deep in the conversation that they forgot to pay attention to the clock. + + 10. If you find that you're in a topic that you need to engage with, actually ask your group, **"I need someone to play facilitator for the next topic because I need to engage in that."** + + 11. **Get someone to be that timekeeper, that person who's gonna keep you focused. It's huge because it'll also again show that you respect people's time and want to get to all the topics.** + + 12. **Make sure you know when to break the rules.** I say this because one of the things that you probably seen in meetings is you get a facilitator who is running a meeting by the book, when something maybe truly more pressing comes up. And says "Nope, we got to keep your schedule." + + 13. Knowing when to break the rules and how to ask the team permission to break the rules is key be willing to kind of sense and adapt as you go. + + 14. **Again use your rules as your guide, but don't be so rigid in those that all the sudden you lead people in the end to still feel like we didn't cover the right thing.** + + 15. Some of my best meetings have come out in the end where they said, you know what I'm glad we switch to that topic because we needed to at that point. + + 16. So just a few things to keep in mind as you're facilitating. It's **your responsibility to be a good listener**. **Be aware of the conversation going on** and **help advance discussion when needed**. + + 17. **Know how to draw your participants back in if things start to wander a bit and be mindful the topics and time** just to make sure everything stays on track. + +Going back to the four principles. Those are some tips for better facilitation next. Let's move to participation. + +--- + +## **How to facilitate a meeting?** + + 1. Start a meeting by covering the ground rules. + + 2. Have someone else be the scribe. + + 3. Be the facilitator. + + 4. Know when to break the rules. + +--- + +## **Tips to keep in mind as you facilitate** + + 1. Be a good listener. Do not talk over each other. + + 2. Help advance the discussion. + + 3. Draw participants back in. + + 4. Be mindguful of topics and time. diff --git a/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/06. Participation.md b/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/06. Participation.md index a38d3d0..a92661f 100644 --- a/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/06. Participation.md +++ b/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/06. Participation.md @@ -1,48 +1,48 @@ -# **Phase: Participation** - -- [**Phase: Participation**](#phase-participation) - - [**How do you ensure your meetings are focused engaging and inclusive for everyone involved?**](#how-do-you-ensure-your-meetings-are-focused-engaging-and-inclusive-for-everyone-involved) - ---- - -## **How do you ensure your meetings are focused engaging and inclusive for everyone involved?** - -A lot of times when you get into a meeting, it can feel kind of like the Wild Wild West. You know, someone's talking here things are happening there. - - 1. **As a facilitator, it's your job to help kind of maintain the flow of the meeting** but the same time create an environment where everyone feels like they can talk. - - 2. Let's take a look into [**👉 the Atlassian Team Playbook**](https://www.atlassian.com/team-playbook/plays/inclusive-meetings) play called **inclusive meetings**. And it's all about how do we set ground rules for our meetings? And these are rules in terms of like how do we want to collaborate? - - 3. You might have examples like **"Hey, we're gonna raise our hand when we want to speak."** Or for every topic, we're gonna hold questions until the end of that topic. - - 4. As a facilitator you are accountable and responsible for creating an inclusive environment in your meeting so that everyone feels like they can contribute. - - 5. Look for feedback afterwards to determine whether or not in that meeting everybody felt like they could get a voice. And use your intuition. **Sometimes you can see that hey, you know got a couple people that are always quiet.** - - 6. **Kind of look and say what can I do to change my environment help make meetings better in the future?** - - 7. My biggest recommendation to help **keep attendees engaged is one use time boxes in your agenda. And two, follow those sign boxes.** - - 8. **Keeping attendees engaged is going to come back to honoring their time saying this is our agenda.** These are what we're going to talk about and this is when we're going to talk about it. - - 9. This really important to help keep in participants engaged. I can't tell you how many times I get into a meeting and we have 10 minutes on a topic and I look at my watch in 20 minutes have gone by and we're still on that topic. - - 10. For me, I feel that facilitator isn't doing their job and I'm like, apparently the rest of these topics don't matter. Final tip for keeping people engaged on a meeting: use the power of a parking lot. - - 11. **Many times we get into meetings and we find ourselves derailing a topic a little bit with a new topic.** Well as a facilitator go in there and say hey, that's a great topic. Let's add it to our parking lot. - - 12. If we have time maybe you've set aside time at the end of your agenda for other topics Or you need to set up a separate meeting. This allows again participants to feel that you value their time and you want them to get to the outcomes that they originally attended to get to in that meeting. - - 13. When it comes time to end the meeting, maybe you're in the last five minutes of it. There's nothing worse than getting to the end of the meeting where your midway through a conversation and now you're just having to leave. - - 14. I always want to make sure I save 5 or 10 minutes on that agenda. It kind of closes out the meeting. Honor that time box make sure that you have that 5 to 10 minutes to review a couple things. - - 15. Make sure you review the goal of the meeting - **did we accomplish this?** I actually like to ask my participants, **you know up or down on your with your thumbs**. **Did we hit the outcome did we get to the place?** - - 16. We wanted to get to also make sure you go back and look at your action items do w**e have owners assigned to them? Do we have due dates on those? Have people agreed to take those on?** - - 17. Make sure you take care of those so that way people leaving say, **"Cool the things that we need help with, they are going to get done."** - - 18. And then finally make sure you go back and look at the decisions you've made as well. Make sure you say, **"Hey in this meeting, we we made the decisions on A, B, and C."** Just as a reminder to the group that says cool, these are the things that we decided. - - 19. This also will help solidify for your participants that hey we actually got some value out of this meeting. We actually were able to get from A to B, which is more than maybe we've gotten to in the past. +# **Phase: Participation** + +- [**Phase: Participation**](#phase-participation) + - [**How do you ensure your meetings are focused engaging and inclusive for everyone involved?**](#how-do-you-ensure-your-meetings-are-focused-engaging-and-inclusive-for-everyone-involved) + +--- + +## **How do you ensure your meetings are focused engaging and inclusive for everyone involved?** + +A lot of times when you get into a meeting, it can feel kind of like the Wild Wild West. You know, someone's talking here things are happening there. + + 1. **As a facilitator, it's your job to help kind of maintain the flow of the meeting** but the same time create an environment where everyone feels like they can talk. + + 2. Let's take a look into [**👉 the Atlassian Team Playbook**](https://www.atlassian.com/team-playbook/plays/inclusive-meetings) play called **inclusive meetings**. And it's all about how do we set ground rules for our meetings? And these are rules in terms of like how do we want to collaborate? + + 3. You might have examples like **"Hey, we're gonna raise our hand when we want to speak."** Or for every topic, we're gonna hold questions until the end of that topic. + + 4. As a facilitator you are accountable and responsible for creating an inclusive environment in your meeting so that everyone feels like they can contribute. + + 5. Look for feedback afterwards to determine whether or not in that meeting everybody felt like they could get a voice. And use your intuition. **Sometimes you can see that hey, you know got a couple people that are always quiet.** + + 6. **Kind of look and say what can I do to change my environment help make meetings better in the future?** + + 7. My biggest recommendation to help **keep attendees engaged is one use time boxes in your agenda. And two, follow those sign boxes.** + + 8. **Keeping attendees engaged is going to come back to honoring their time saying this is our agenda.** These are what we're going to talk about and this is when we're going to talk about it. + + 9. This really important to help keep in participants engaged. I can't tell you how many times I get into a meeting and we have 10 minutes on a topic and I look at my watch in 20 minutes have gone by and we're still on that topic. + + 10. For me, I feel that facilitator isn't doing their job and I'm like, apparently the rest of these topics don't matter. Final tip for keeping people engaged on a meeting: use the power of a parking lot. + + 11. **Many times we get into meetings and we find ourselves derailing a topic a little bit with a new topic.** Well as a facilitator go in there and say hey, that's a great topic. Let's add it to our parking lot. + + 12. If we have time maybe you've set aside time at the end of your agenda for other topics Or you need to set up a separate meeting. This allows again participants to feel that you value their time and you want them to get to the outcomes that they originally attended to get to in that meeting. + + 13. When it comes time to end the meeting, maybe you're in the last five minutes of it. There's nothing worse than getting to the end of the meeting where your midway through a conversation and now you're just having to leave. + + 14. I always want to make sure I save 5 or 10 minutes on that agenda. It kind of closes out the meeting. Honor that time box make sure that you have that 5 to 10 minutes to review a couple things. + + 15. Make sure you review the goal of the meeting - **did we accomplish this?** I actually like to ask my participants, **you know up or down on your with your thumbs**. **Did we hit the outcome did we get to the place?** + + 16. We wanted to get to also make sure you go back and look at your action items do w**e have owners assigned to them? Do we have due dates on those? Have people agreed to take those on?** + + 17. Make sure you take care of those so that way people leaving say, **"Cool the things that we need help with, they are going to get done."** + + 18. And then finally make sure you go back and look at the decisions you've made as well. Make sure you say, **"Hey in this meeting, we we made the decisions on A, B, and C."** Just as a reminder to the group that says cool, these are the things that we decided. + + 19. This also will help solidify for your participants that hey we actually got some value out of this meeting. We actually were able to get from A to B, which is more than maybe we've gotten to in the past. diff --git a/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/07. Follow-up.md b/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/07. Follow-up.md index ed36c81..70fed5c 100644 --- a/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/07. Follow-up.md +++ b/TuxTechBlogs/docs/topic/13.1. Management/00. Run Effective Meetings/07. Follow-up.md @@ -1,45 +1,45 @@ -# **Phase: Follow Up** - -- Congratulations, you have made it. You completed your meeting. Now, the game's not over with yet. That's the thing. You remember that you've got preparation, facilitation, participation, and now we're in follow-up. - -- All about closing this out. When at the end of a meeting, you need to determine how effective that meeting was. What I like to do to determine it whether or not a meeting is effective is save a few minutes at the very end of the meeting to maybe ask the audience. - -- Maybe there's good psychological safety in your group and because of that you can actually ask people, "Hey, how was this meeting? Did you like it? Was it effective? Was it valuable?" - -- Other techniques you can use that I've used in the past. If you're in a room on the whiteboard or if you're digital, maybe you're using a Trello board, **create a scale one to five**. One, this was not a very effective use of my time, I wish I was doing something else. And five being, this was the best use of my time possible, I'm so glad I was here. - -- As people leave physically in the room have a mark on that whiteboard where they're at. If they are digital have them go ahead and vote on one of those cards one to five. And again that just gives you information in terms of hey did people feel that this was an effective meeting or not? - -## **what's the best way to follow up with your participants?** - -- So once your meeting is over, let's say it was an effective meeting. Let's say you did all the right stuff. Everyone's like "Yeah, that was great." - -- The first thing you've got to do after that meeting is done go out there and make sure you send out those meeting notes. Share it with the participants as well as those people who maybe you just need to inform what was covered in that meeting. - -- Tell them what decisions were made, what actions we're taking. And most importantly, for those folks who took actions, make sure that they're aware of those especially. - -- If you know, they need to have some sort of tracking of those, great tools like Confluence allow you to actually mention somebody in it and actually sends them a notification that says "Hey, you got this action." - -- And most importantly, after let's say a few days of that meeting, follow up. Make sure things like actions are taken care of. **One of the things I like to do is if I have a regular occurring meeting, what I'll do is at the beginning of every agenda will actually have a line item to look back at prior action items.** - -- Have we taken care of those which ones are due which ones aren't? It leads to a lot of accountability on the people who actually took those actions and it really helps move that meeting forward. - -- Now if you're finding you're having an ineffective meeting so okay. Don't beat yourself up for it. It happens to all of us and the goal here is just to get better. - -So a couple things you can do here is one go actually ask some folks. You know have some one-on-one sessions saying, "Hey, I'd love to get better at running effective meetings. What feedback do you have for me?" - -Figure out what could make meetings better than the next time and experiment with that. Another thing you can do is, let's say it's a meeting that's on a regular basis. - -Do what we call a ritual reset here at Atlassian. If you go to our Team Playbook, you'll find the ritual reset play. It's a fantastic play that allows you to kind of take a meta view of your meetings. - -And saying hey if I were to reexamine all these meetings, what would I keep because I think they're super valuable? What would I maybe change because I still need that but something needs to change? And ultimately what should I get rid of? Maybe that could be more of an email. What could be async here? - -Actually a great story for you here is I have a customer I've been working with in telecom that actually found themselves in need of kind of fixing up some of their meetings. - -What ended up happening is they said you know, what? We'd love to try this ritual reset play out. And so they actually went and spent about an hour, which is all the time it takes running through that play. - -And the next day I actually got an email from that team that says, "Hey, I just want to say running this play kind of changed our perspective on how we meet. It allowed us to really take a look and say is this meeting worthwhile or should we change it up? Should we remove it?" - -And from there, they were able to kind of really change how they work together all of a sudden now, they've introduced some new ways of working. They've opened up their minds saying we can collaborate differently. - -So explore things like our ritual reset because it's incredibly powerful to actually look and say, "Hey, is this the best use of our time?" And maybe it is, let's get a little bit better at it. +# **Phase: Follow Up** + +- Congratulations, you have made it. You completed your meeting. Now, the game's not over with yet. That's the thing. You remember that you've got preparation, facilitation, participation, and now we're in follow-up. + +- All about closing this out. When at the end of a meeting, you need to determine how effective that meeting was. What I like to do to determine it whether or not a meeting is effective is save a few minutes at the very end of the meeting to maybe ask the audience. + +- Maybe there's good psychological safety in your group and because of that you can actually ask people, "Hey, how was this meeting? Did you like it? Was it effective? Was it valuable?" + +- Other techniques you can use that I've used in the past. If you're in a room on the whiteboard or if you're digital, maybe you're using a Trello board, **create a scale one to five**. One, this was not a very effective use of my time, I wish I was doing something else. And five being, this was the best use of my time possible, I'm so glad I was here. + +- As people leave physically in the room have a mark on that whiteboard where they're at. If they are digital have them go ahead and vote on one of those cards one to five. And again that just gives you information in terms of hey did people feel that this was an effective meeting or not? + +## **what's the best way to follow up with your participants?** + +- So once your meeting is over, let's say it was an effective meeting. Let's say you did all the right stuff. Everyone's like "Yeah, that was great." + +- The first thing you've got to do after that meeting is done go out there and make sure you send out those meeting notes. Share it with the participants as well as those people who maybe you just need to inform what was covered in that meeting. + +- Tell them what decisions were made, what actions we're taking. And most importantly, for those folks who took actions, make sure that they're aware of those especially. + +- If you know, they need to have some sort of tracking of those, great tools like Confluence allow you to actually mention somebody in it and actually sends them a notification that says "Hey, you got this action." + +- And most importantly, after let's say a few days of that meeting, follow up. Make sure things like actions are taken care of. **One of the things I like to do is if I have a regular occurring meeting, what I'll do is at the beginning of every agenda will actually have a line item to look back at prior action items.** + +- Have we taken care of those which ones are due which ones aren't? It leads to a lot of accountability on the people who actually took those actions and it really helps move that meeting forward. + +- Now if you're finding you're having an ineffective meeting so okay. Don't beat yourself up for it. It happens to all of us and the goal here is just to get better. + +So a couple things you can do here is one go actually ask some folks. You know have some one-on-one sessions saying, "Hey, I'd love to get better at running effective meetings. What feedback do you have for me?" + +Figure out what could make meetings better than the next time and experiment with that. Another thing you can do is, let's say it's a meeting that's on a regular basis. + +Do what we call a ritual reset here at Atlassian. If you go to our Team Playbook, you'll find the ritual reset play. It's a fantastic play that allows you to kind of take a meta view of your meetings. + +And saying hey if I were to reexamine all these meetings, what would I keep because I think they're super valuable? What would I maybe change because I still need that but something needs to change? And ultimately what should I get rid of? Maybe that could be more of an email. What could be async here? + +Actually a great story for you here is I have a customer I've been working with in telecom that actually found themselves in need of kind of fixing up some of their meetings. + +What ended up happening is they said you know, what? We'd love to try this ritual reset play out. And so they actually went and spent about an hour, which is all the time it takes running through that play. + +And the next day I actually got an email from that team that says, "Hey, I just want to say running this play kind of changed our perspective on how we meet. It allowed us to really take a look and say is this meeting worthwhile or should we change it up? Should we remove it?" + +And from there, they were able to kind of really change how they work together all of a sudden now, they've introduced some new ways of working. They've opened up their minds saying we can collaborate differently. + +So explore things like our ritual reset because it's incredibly powerful to actually look and say, "Hey, is this the best use of our time?" And maybe it is, let's get a little bit better at it. diff --git a/TuxTechBlogs/docs/topic/13.2. Miscellaneous/acronym.md b/TuxTechBlogs/docs/topic/13.2. Miscellaneous/acronym.md index cc853d5..347a3e2 100644 --- a/TuxTechBlogs/docs/topic/13.2. Miscellaneous/acronym.md +++ b/TuxTechBlogs/docs/topic/13.2. Miscellaneous/acronym.md @@ -1,254 +1,254 @@ -# **Acronyms** - - - [**A**](#a) - - [**B**](#b) - - [**C**](#c) - - [**D**](#d) - - [**E**](#e) - - [**F**](#f) - - [**G**](#g) - - [**H**](#h) - - [**I**](#i) - - [**J**](#j) - - [**K**](#k) - - [**L**](#l) - - [**M**](#m) - - [**N**](#n) - - [**O**](#o) - - [**P**](#p) - - [**Q**](#q) - - [**R**](#r) - - [**S**](#s) - - [**T**](#t) - - [**U**](#u) - - [**V**](#v) - - [**W**](#w) - - [**X**](#x) - - [**Y**](#y) - - [**Z**](#z) - -## **A** - -- `AWS` - *Amazon Web Services* -- `Azure` - *Azure Cloud* -- `ABE` - *Access Based Enumeration* -- `AD` - *Active Directory* -- `ARP` - *Address Resolution Protocol* -- `AKS` - *Azure K8S Service* - -## **B** - -- `Bit/ Bits` - *Binary Digit/ Binary Digits* -- `Byte` - *8 bBits =1 Byte* -- `BGP` - *Border Gateway Protocol* - -## **C** - -- `CD` - *Compact Disc* -- `CSMA/CD` - *Carrier Sense Multiple Access with Collision Detection* -- `CPU` - *Central Processing Unit* -- `CIDR` - *Classless Inter-Domain Routing* -- `CDN` - *Content Delivery Network* -- `CSS` - *Cascading Styling Sheet* -- `CI/CD` - *Continuous Delivery And Continuous Integratoion* - -## **D** - -- `DMZ` - *Demilitarized Zone* -- `DPU` - *Data Processing Unit* -- `DNS` - *Domain Name System* -- `DBMS` - *Database Management System* -- `DMA` - *Direct Memory Access* -- `DP` - *Dynamic Programming* -- `DVD` - *Digital Versatile Disc* -- `DHCP` - *Dynamic Host Control Protocol* -- `DLR` - *Distributed Logical Router* -- `DVS` - *Distributed Virtual Switch* - -## **E** - -- `EBS` - *Elastic Block Storag* -- `EKS` - *Elastic k8s Service* -- `EC2` - *Elastic Cloud Compute* -- `EOD` - *End Of the Day* -- `ECMP` - *Equal Cost Multi Path Routing* - -## **F** - -- `fw` - *Firewall* -- `ftp` - *File Transfer Protocol* -- `fc` - *Fiber Channel* -- `FCOE` - *Fiber Channel Over Ethernet* -- `FQDN` - *Fully Qualified Domain Name* - -## **G** - -- `GW` - *Gateway* -- `GFW` - *Gateway Firewall* -- `GPU` - *Graphical Processing Unit* -- `GB` - *1 GigaByte = 1024 MB* -- `gRPC` - *Group RPC (RPC)by Google* -- `GIT` - *Global Information Tracker* - -## **H** - -- `HDD` - *Hard Disc Drive* -- `HTTP` - *Hypertext Transfer Protocol* -- `HTTPS` - *Hypertext Transfer Protocol Secured* -- `HTML` - *Hyper Text Markup Language* -- `HLD` - *High Level Design* -- `HDFS` - *Hadoop Distributed File System* - -## **I** - -- `IT` - *Information Technology* -- `ITSM` - *IT Service Management* -- `ITIL` - *Information Technology Infrastructure Library* -- `IAM` - *Identity and Access Management* -- `IRC` - *Internet Relay Chat* -- `IPMI` - *Intelligent Platform Management Interface* -- `iDRAC` - *Integrated Dell Remote Access Controller* -- `iSCSI` - *Internet Small Computer System Interface* -- `iQN` - *iSCSI Qualified Name* -- `ICMP` - *Internet Control Message Protocol* - -## **J** - -- `JWT` - *JSON Web Token* -- `JSON` - *JavaScript Object Notation* -- `JS` - *Java Script* -- `JIT` - *Just in Time* - -## **K** - -- `KB` - *Kilo Byte* -- `k8s` - *Kubernetes* - -## **L** - -- `LDAP` - *Light-weight Directory Access Protocol* -- `LLP` - *Limited liability Partnership* -- `LB` - *Load Balancer* -- `Linux` - *Lovable Intellect Not Using XP* -- `LSB` - *Least Significant Bit* -- `LLD` - *Low Level Design* -- `LIDAR` - *Light Detection and Ranging* -- `LLM` - *Large Language Model* -- `LUN` - *Logical Unit Number* -- `LAMP` - *Linux, Apache, MySQL, PHP/Perl/Python* - -## **M** - -- `MB` - *Mega Byte* -- `MQ` - *Messaging Queue* -- `MSB` - *Most Significant Bit* -- `MTU` - *Maximum Transmission Unit* -- `MVC` - *Model View Controller* -- `MAC` - *Media Access Control* -- `MVP` - *Most Viable Product* -- `MoM` - *Minutes of Meeting* -- `MERN` - *MongoDB, Express, React, Node* -- `MEAN` - *MongoDB, Express, Angular, and Node* - -## **N** - -- `NTP` - *Network Time Protocol* -- `NFS` - *Network File System* -- `NvMe` - *Non-Volatile Memory* -- `NoSQL` - *No Structured Quqry Language* -- `NIC` - *Network Interface Card* -- `NLP` - *Natual Language Processing* - -## **O** - -- `OSI` - *Open System Interconnection* -- `OEM` - *Original Equipment Manufacturer* -- `OS` - *Operating System* -- `OSPF` - *Open Shortest Path First* - -## **P** - -- `PDL` - *Page Description Language* -- `POP3` - *Post Office Protocol 3 over TLS/SSL* -- `PB` - *1 PetaByte = 1024 TB* - -## **Q** - -- `QOS` - *Quality Of Service* -- `OAuth` - *Open Authorization* - -## **R** - -- `RDP` - *Remote Desktop Protocol* -- `RDBMS` - *Relational DBMS* -- `RSYNC` - *Remote Sync* -- `RAID` - *Redundant Array of Independent Dxisks* -- `RMA` - *Return Merchandise Authorization* -- `RDMA` - *Remote Direct Memory Access* -- `RBAC` - *Role Based Access Control* -- `RFB` - *Remote Frame Buffer* -- `RPC` - *Remote Procedural Call* -- `RAN` - *Radio Access Network* - -## **S** - -- `SNMP` - *Simple Network Management Protocol* -- `SMTP` - *Simple Mail Transfer Protocol* -- `SMB` - *Server Message Block* -- `SMQ` - *Simple Messaging Queue* -- `SSD` - *Solid State Drive* -- `SDDC` - *Software Defined Datacenter* -- `SD-WAN` - *Software Defined Wide Area Network* -- `SSL` - *Secure Sockets Layer* -- `SSH` - *Secure Shell* -- `SQL` - *Structured Query Language* -- `SFTP` - *Secure Fire Transfer Protocol* -- `SAFe` - *Scaled Agile Framework* -- `SCSI` - *Small Computer System Interface* -- `SPFF` - *Small Plugable Form Factor* -- `SATA` - *Serial Advanced Technology Attachment* -- `SRE` - *Site Reliability Engineering* -- `S3` - *Simple Storage Service* -- `SSN` - *Switched Service Network* -- `SSSD` - *System Security Services Daemon* -- `SSSN` - *Simplified Single-Sign On Protocol* - -## **T** - -- `TCP/IP` - *Transmission Control/ Internet Protocol* -- `TTL` - *Time to Live* -- `TFTP` - *Trivial File Transfer Protocol* -- `TLS` - *Transport Layer Security* - -## **U** - -- `UDP` - *User Datagram Protocol* -- `Unix` - *UNiplexed Information Computing System* - -## **V** - -- `VLAN` - *Virtual Local Area Network* -- `VM` - *Virtual Machine* -- `VXLAN` - *Virtual Extended Local Area Network* -- `VPN` - *Virtual Private Network* -- `VNC` - *Virtual Network Compting* -- `VQP` - *Cisco VLAN Query Protocol* -- `VRF` - *Virtual Routing And Forwarding* -- `VIOP` - *Voice Over Internet Protocol* -- `VRP` - *Virtual Routing Protocol* - -## **W** - -- `WAN` - *Wide Area Network* -- `WWW` - *World Wide* -- `Wi-Fi` - *Wireless Fidelity* - -## **X** - -- `XML` - *Extensible Markup Language* - -## **Y** - -## **Z** - -- `ZFS` - Zeta Bytep File System (Developed by Sun MicroSystem.) +# **Acronyms** + + - [**A**](#a) + - [**B**](#b) + - [**C**](#c) + - [**D**](#d) + - [**E**](#e) + - [**F**](#f) + - [**G**](#g) + - [**H**](#h) + - [**I**](#i) + - [**J**](#j) + - [**K**](#k) + - [**L**](#l) + - [**M**](#m) + - [**N**](#n) + - [**O**](#o) + - [**P**](#p) + - [**Q**](#q) + - [**R**](#r) + - [**S**](#s) + - [**T**](#t) + - [**U**](#u) + - [**V**](#v) + - [**W**](#w) + - [**X**](#x) + - [**Y**](#y) + - [**Z**](#z) + +## **A** + +- `AWS` - *Amazon Web Services* +- `Azure` - *Azure Cloud* +- `ABE` - *Access Based Enumeration* +- `AD` - *Active Directory* +- `ARP` - *Address Resolution Protocol* +- `AKS` - *Azure K8S Service* + +## **B** + +- `Bit/ Bits` - *Binary Digit/ Binary Digits* +- `Byte` - *8 bBits =1 Byte* +- `BGP` - *Border Gateway Protocol* + +## **C** + +- `CD` - *Compact Disc* +- `CSMA/CD` - *Carrier Sense Multiple Access with Collision Detection* +- `CPU` - *Central Processing Unit* +- `CIDR` - *Classless Inter-Domain Routing* +- `CDN` - *Content Delivery Network* +- `CSS` - *Cascading Styling Sheet* +- `CI/CD` - *Continuous Delivery And Continuous Integratoion* + +## **D** + +- `DMZ` - *Demilitarized Zone* +- `DPU` - *Data Processing Unit* +- `DNS` - *Domain Name System* +- `DBMS` - *Database Management System* +- `DMA` - *Direct Memory Access* +- `DP` - *Dynamic Programming* +- `DVD` - *Digital Versatile Disc* +- `DHCP` - *Dynamic Host Control Protocol* +- `DLR` - *Distributed Logical Router* +- `DVS` - *Distributed Virtual Switch* + +## **E** + +- `EBS` - *Elastic Block Storag* +- `EKS` - *Elastic k8s Service* +- `EC2` - *Elastic Cloud Compute* +- `EOD` - *End Of the Day* +- `ECMP` - *Equal Cost Multi Path Routing* + +## **F** + +- `fw` - *Firewall* +- `ftp` - *File Transfer Protocol* +- `fc` - *Fiber Channel* +- `FCOE` - *Fiber Channel Over Ethernet* +- `FQDN` - *Fully Qualified Domain Name* + +## **G** + +- `GW` - *Gateway* +- `GFW` - *Gateway Firewall* +- `GPU` - *Graphical Processing Unit* +- `GB` - *1 GigaByte = 1024 MB* +- `gRPC` - *Group RPC (RPC)by Google* +- `GIT` - *Global Information Tracker* + +## **H** + +- `HDD` - *Hard Disc Drive* +- `HTTP` - *Hypertext Transfer Protocol* +- `HTTPS` - *Hypertext Transfer Protocol Secured* +- `HTML` - *Hyper Text Markup Language* +- `HLD` - *High Level Design* +- `HDFS` - *Hadoop Distributed File System* + +## **I** + +- `IT` - *Information Technology* +- `ITSM` - *IT Service Management* +- `ITIL` - *Information Technology Infrastructure Library* +- `IAM` - *Identity and Access Management* +- `IRC` - *Internet Relay Chat* +- `IPMI` - *Intelligent Platform Management Interface* +- `iDRAC` - *Integrated Dell Remote Access Controller* +- `iSCSI` - *Internet Small Computer System Interface* +- `iQN` - *iSCSI Qualified Name* +- `ICMP` - *Internet Control Message Protocol* + +## **J** + +- `JWT` - *JSON Web Token* +- `JSON` - *JavaScript Object Notation* +- `JS` - *Java Script* +- `JIT` - *Just in Time* + +## **K** + +- `KB` - *Kilo Byte* +- `k8s` - *Kubernetes* + +## **L** + +- `LDAP` - *Light-weight Directory Access Protocol* +- `LLP` - *Limited liability Partnership* +- `LB` - *Load Balancer* +- `Linux` - *Lovable Intellect Not Using XP* +- `LSB` - *Least Significant Bit* +- `LLD` - *Low Level Design* +- `LIDAR` - *Light Detection and Ranging* +- `LLM` - *Large Language Model* +- `LUN` - *Logical Unit Number* +- `LAMP` - *Linux, Apache, MySQL, PHP/Perl/Python* + +## **M** + +- `MB` - *Mega Byte* +- `MQ` - *Messaging Queue* +- `MSB` - *Most Significant Bit* +- `MTU` - *Maximum Transmission Unit* +- `MVC` - *Model View Controller* +- `MAC` - *Media Access Control* +- `MVP` - *Most Viable Product* +- `MoM` - *Minutes of Meeting* +- `MERN` - *MongoDB, Express, React, Node* +- `MEAN` - *MongoDB, Express, Angular, and Node* + +## **N** + +- `NTP` - *Network Time Protocol* +- `NFS` - *Network File System* +- `NvMe` - *Non-Volatile Memory* +- `NoSQL` - *No Structured Quqry Language* +- `NIC` - *Network Interface Card* +- `NLP` - *Natual Language Processing* + +## **O** + +- `OSI` - *Open System Interconnection* +- `OEM` - *Original Equipment Manufacturer* +- `OS` - *Operating System* +- `OSPF` - *Open Shortest Path First* + +## **P** + +- `PDL` - *Page Description Language* +- `POP3` - *Post Office Protocol 3 over TLS/SSL* +- `PB` - *1 PetaByte = 1024 TB* + +## **Q** + +- `QOS` - *Quality Of Service* +- `OAuth` - *Open Authorization* + +## **R** + +- `RDP` - *Remote Desktop Protocol* +- `RDBMS` - *Relational DBMS* +- `RSYNC` - *Remote Sync* +- `RAID` - *Redundant Array of Independent Dxisks* +- `RMA` - *Return Merchandise Authorization* +- `RDMA` - *Remote Direct Memory Access* +- `RBAC` - *Role Based Access Control* +- `RFB` - *Remote Frame Buffer* +- `RPC` - *Remote Procedural Call* +- `RAN` - *Radio Access Network* + +## **S** + +- `SNMP` - *Simple Network Management Protocol* +- `SMTP` - *Simple Mail Transfer Protocol* +- `SMB` - *Server Message Block* +- `SMQ` - *Simple Messaging Queue* +- `SSD` - *Solid State Drive* +- `SDDC` - *Software Defined Datacenter* +- `SD-WAN` - *Software Defined Wide Area Network* +- `SSL` - *Secure Sockets Layer* +- `SSH` - *Secure Shell* +- `SQL` - *Structured Query Language* +- `SFTP` - *Secure Fire Transfer Protocol* +- `SAFe` - *Scaled Agile Framework* +- `SCSI` - *Small Computer System Interface* +- `SPFF` - *Small Plugable Form Factor* +- `SATA` - *Serial Advanced Technology Attachment* +- `SRE` - *Site Reliability Engineering* +- `S3` - *Simple Storage Service* +- `SSN` - *Switched Service Network* +- `SSSD` - *System Security Services Daemon* +- `SSSN` - *Simplified Single-Sign On Protocol* + +## **T** + +- `TCP/IP` - *Transmission Control/ Internet Protocol* +- `TTL` - *Time to Live* +- `TFTP` - *Trivial File Transfer Protocol* +- `TLS` - *Transport Layer Security* + +## **U** + +- `UDP` - *User Datagram Protocol* +- `Unix` - *UNiplexed Information Computing System* + +## **V** + +- `VLAN` - *Virtual Local Area Network* +- `VM` - *Virtual Machine* +- `VXLAN` - *Virtual Extended Local Area Network* +- `VPN` - *Virtual Private Network* +- `VNC` - *Virtual Network Compting* +- `VQP` - *Cisco VLAN Query Protocol* +- `VRF` - *Virtual Routing And Forwarding* +- `VIOP` - *Voice Over Internet Protocol* +- `VRP` - *Virtual Routing Protocol* + +## **W** + +- `WAN` - *Wide Area Network* +- `WWW` - *World Wide* +- `Wi-Fi` - *Wireless Fidelity* + +## **X** + +- `XML` - *Extensible Markup Language* + +## **Y** + +## **Z** + +- `ZFS` - Zeta Bytep File System (Developed by Sun MicroSystem.) diff --git a/TuxTechBlogs/docs/topic/13.2. Miscellaneous/ports.md b/TuxTechBlogs/docs/topic/13.2. Miscellaneous/ports.md index e1a7021..c7e295c 100644 --- a/TuxTechBlogs/docs/topic/13.2. Miscellaneous/ports.md +++ b/TuxTechBlogs/docs/topic/13.2. Miscellaneous/ports.md @@ -1,107 +1,107 @@ -# **Ports** - -## **Introduction** - -- Port number is a 16-bit numerical value that ranges from 0 to 65535. Well-known port (0-1023), registered port (1024-49151), and dynamic port is three types of port number space. (49152-65535). - -- These ports can be opened and used by software applications and operating system services to send and receive data over networks (LAN or WAN) that employ certain protocols (eg TCP, UDP). - -- To conclude, a port is a logical form to identify system activities or various network services used to create local or network-based communications. - -- For example, we use 80 for HTTP-web-based plain-text surfing and 443 for HTTPS-web-based encrypted websites in our daily work. - ---- - -## **What are the functions of ports?** - -- When interacting over the Internet, TCP and UDP protocols make connections, recompile data packages after the transfer, and then deliver them to applications on the recipient’s device. - -- For this handover to work, the operating system must install and open the gateway for the transfer. - -- Each door has a unique code number. After transmission, the receiving system uses the port number to determine where the data should be sent. The port numbers of the sender and receiver are always included in the data packet. - -- Ports are assigned sequential numbers from 0 to 65535. Some of these codes are standardized, meaning they are assigned to certain uses. Since code numbers are universally recognized and permanently assigned, these standard ports are also known as well-known ports. - -- Registered ports are those that organizations or software developers have registered for their applications. Registration is handled by the Internet Assigned Numbers Authority (IANA). A diverse selection of dynamically assigned port numbers is also available. For example, when viewing websites, browsers use these ports. After that, the phone number is free again. - ---- - -## **Why is it important to know these ports?** - -- Any security researcher, bug bounty hunter, or anyone working with service configuration would benefit from this. - -- Knowing how to do more thorough scans such as version detection or known vulnerabilities for ancient services that are still operating in the infrastructure, especially when using tools like Nmap, is handy when getting to know these protocols and services. - ---- - -## **The most 50 significant ports are listed here:** - -The following are some of the most common service names, transport protocol names, and port numbers used to differentiate between specific services that employ TCP, UDP, DCCP, and SCTP. - -| **Port Number** | **Service Name** |**Protocol Name/ Transport protocol**| **Desctriptin** | -|----:|:----|:----|:----| -| `7` | Echo | TCP, UDP | Echo Service | -| `20` | FTP-data | TCP, SCTP | File Transfer Protocol data transfer | -| `21` | FTP | TCP, UDP, SCTP | File Transfer Protocol (FTP) control connection | -| `22` | SSH-SCP | TCP, UDP, SCTP | Secure Shell, secure logins, file transfers (scp, sftp), and port forwarding | -| `23` | Telnet | TCP | Telnet protocol—unencrypted text communications | -| `25` | SMTP | TCP | Simple Mail Transfer Protocol, used for email routing between mail servers | -| `53` | DNS | TCP, UDP | Domain Name System name resolver | -| `69` | TFTP | UDP | Trivial File Transfer Protocol | -| `80` | HTTP | TCP, UDP, SCTP | Hypertext Transfer Protocol (HTTP) uses TCP in versions 1.x and 2. HTTP/3 uses QUIC, a transport protocol on top of UDP | -| `88` | Kerberos | TCP, UDP | Network Authentication System, | -| `102` | Iso-trap | TCP | ISO Transport Service Access Point (TSAP) Class 0 protocol | -| `110` | POP3 | TCP | Post Office Protocol, version 3 (POP3) | -| `135` | Microsoft EMAP | TCP,UDP | Microsoft EPMAP (End Point Mapper), also known as DCE/RPC Locator service, used to remotely manage services including DHCP server, DNS server, and WINS. Also used by DCOM| -| `137` | NetBIOS-ns | TCP, UDP | NetBIOS Name Service, used for name registration and resolution | -| `139` | NetBIOS-ssn | TCP, UDP | NetBIOS Session Service | -| `143` | IMAP4 | TCP, UDP | Internet Message Access Protocol (IMAP), management of electronic mail messages on a server | -| `381` | HP Openview | TCP, UDP | HP data alarm manager | -| `388` | HP Openview | TCP, UDP | HP data performance collector | -| `443` | HTTP over SSL | TCP, UDP, SCTP | Hypertext Transfer Protocol Secure (HTTPS) uses TCP in versions 1.x and 2. HTTP/3 uses QUIC, a transport protocol on top of UDP. | -| `464` | Kerberos | TCP, UDP | Kerberos Change/Set password | -| `465` | SMTP over TLS/SSL, SSM | TCP | Authenticated SMTP over TLS/SSL (SMTPS), URL Rendezvous Directory for SSM (Cisco protocol) | -| `587` | SMTP | TCP | Email message submission | -| `593` | Microsoft DCOM | TCP, UDP | HTTP RPC Ep Map, Remote procedure call over Hypertext Transfer Protocol, often used by Distributed Component Object Model services and Microsoft Exchange Server | -| `636` | LDAP over TLS/SSL | TCP, UDP | Lightweight Directory Access Protocol over TLS/SSL | -| `691` | MS Exchange| TCP | MS Exchange Routing | -| `902` | VMware Server | unofficial | VMware ESXi | -| `989` | FTP over SSL | TCP, UDP | FTPS Protocol (data), FTP over TLS/SSL | -| `989` | FTP over SSL | TCP, UDP | FTPS Protocol (data), FTP over TLS/SSL | -| `993` | IMAP4 over SSL | TCP | Internet Message Access Protocol over TLS/SSL (IMAPS) | -| `995` | POP3 over SSL | TCP, UDP | Post Office Protocol 3 over TLS/SSL | -| `1025` | Microsoft RPC | TCP | Microsoft operating systems tend to allocate one or more unsuspected, publicly exposed services (probably DCOM, but who knows) among the first handful of ports immediately above the end of the service port range (1024+). | -| `1194` | OpenVPN | TCP, UDP | OpenVPN | -| `1337` | WASTE | unofficial | WASTE Encrypted File Sharing Program | -| `1589` | Cisco VQP | TCP, UDP | Cisco VLAN Query Protocol (VQP) | -| `1725` | Stream | UDP | Valve Steam Client uses port 1725 | -| `2082` | cPanel | unofficial | cPanel default | -| `2083` | radsec, cPanel | TCP, UDP | cPanel default | -| `2483` | Oracle DB | TCP, UDP | Oracle database listening for insecure client connections to the listener, replaces port 1521 | -| `2484` | Oracle DB | TCP, UDP | Oracle database listening for SSL client connections to the listener | -| `2967` | Symantec AV | TCP, UDP | Symantec System Center agent (SSC-AGENT) | -| `3074` | XBOX Live | TCP, UDP | Xbox LIVE and Games for Windows – Live | -| `3306` | MySQL | TCP | MySQL database system | -| `3724` | World of Warcraft | TCP, UDP | Blizzard games, Unofficial Club Penguin Disney online game for kids | -| `3389` | MS wbt-server | TCP | Microsoft Remote Desktop Protocol | -| `4664` | Google Desktop | unofficial | Google Desktop Search | -| `5432` | Postgres SQL | TCP | PostgreSQL database system | -| `5900` | RFB/VNC Server| TCP | virtual Network Computing (VNC) Remote Frame Buffer (RFB) protocol | -| `6665-6669` | IRC | TCP | Internet Relat Chat | -| `6881` | BitTorrent | unofficial | BitTorrent is part of the full range of ports used most often | -| `6970` | Quicktime | unofficial | QuickTime Streaming Server | -| `6999` | BitTorrent | unofficial | BitTorrent is part of the full range of ports used most often | -| `8086` | Kaspersky AV | TCP | Kaspersky AV Control Center | -| `8087` | Kaspersky | UDP | Kaspersky AV Control Center | -| `8222` | VMware Server | TCP, UDP | VMware Server Management User Interface (insecure Web interface). | -| `9100` | PDL | TCP | PDL Data Stream, used for printing to certain network printers. | -| `10000` | BackupExec | unofficial | Webmin, Web-based Unix/Linux system administration tool (default port) | -| `12345` | NetBus | unofficial | NetBus remote administration tool (often Trojan horse). | -| `27374` | Sub7 | unofficial | Sub7 default | -| `31337` | Back Orifice | unofficial | Back Orifice 2000 remote administration tools | - ---- - -## **Miscellaneous** - -- To read about VMware Port read in the website click on [**ports.esp.vmware.com**](https://ports.esp.vmware.com) +# **Ports** + +## **Introduction** + +- Port number is a 16-bit numerical value that ranges from 0 to 65535. Well-known port (0-1023), registered port (1024-49151), and dynamic port is three types of port number space. (49152-65535). + +- These ports can be opened and used by software applications and operating system services to send and receive data over networks (LAN or WAN) that employ certain protocols (eg TCP, UDP). + +- To conclude, a port is a logical form to identify system activities or various network services used to create local or network-based communications. + +- For example, we use 80 for HTTP-web-based plain-text surfing and 443 for HTTPS-web-based encrypted websites in our daily work. + +--- + +## **What are the functions of ports?** + +- When interacting over the Internet, TCP and UDP protocols make connections, recompile data packages after the transfer, and then deliver them to applications on the recipient’s device. + +- For this handover to work, the operating system must install and open the gateway for the transfer. + +- Each door has a unique code number. After transmission, the receiving system uses the port number to determine where the data should be sent. The port numbers of the sender and receiver are always included in the data packet. + +- Ports are assigned sequential numbers from 0 to 65535. Some of these codes are standardized, meaning they are assigned to certain uses. Since code numbers are universally recognized and permanently assigned, these standard ports are also known as well-known ports. + +- Registered ports are those that organizations or software developers have registered for their applications. Registration is handled by the Internet Assigned Numbers Authority (IANA). A diverse selection of dynamically assigned port numbers is also available. For example, when viewing websites, browsers use these ports. After that, the phone number is free again. + +--- + +## **Why is it important to know these ports?** + +- Any security researcher, bug bounty hunter, or anyone working with service configuration would benefit from this. + +- Knowing how to do more thorough scans such as version detection or known vulnerabilities for ancient services that are still operating in the infrastructure, especially when using tools like Nmap, is handy when getting to know these protocols and services. + +--- + +## **The most 50 significant ports are listed here:** + +The following are some of the most common service names, transport protocol names, and port numbers used to differentiate between specific services that employ TCP, UDP, DCCP, and SCTP. + +| **Port Number** | **Service Name** |**Protocol Name/ Transport protocol**| **Desctriptin** | +|----:|:----|:----|:----| +| `7` | Echo | TCP, UDP | Echo Service | +| `20` | FTP-data | TCP, SCTP | File Transfer Protocol data transfer | +| `21` | FTP | TCP, UDP, SCTP | File Transfer Protocol (FTP) control connection | +| `22` | SSH-SCP | TCP, UDP, SCTP | Secure Shell, secure logins, file transfers (scp, sftp), and port forwarding | +| `23` | Telnet | TCP | Telnet protocol—unencrypted text communications | +| `25` | SMTP | TCP | Simple Mail Transfer Protocol, used for email routing between mail servers | +| `53` | DNS | TCP, UDP | Domain Name System name resolver | +| `69` | TFTP | UDP | Trivial File Transfer Protocol | +| `80` | HTTP | TCP, UDP, SCTP | Hypertext Transfer Protocol (HTTP) uses TCP in versions 1.x and 2. HTTP/3 uses QUIC, a transport protocol on top of UDP | +| `88` | Kerberos | TCP, UDP | Network Authentication System, | +| `102` | Iso-trap | TCP | ISO Transport Service Access Point (TSAP) Class 0 protocol | +| `110` | POP3 | TCP | Post Office Protocol, version 3 (POP3) | +| `135` | Microsoft EMAP | TCP,UDP | Microsoft EPMAP (End Point Mapper), also known as DCE/RPC Locator service, used to remotely manage services including DHCP server, DNS server, and WINS. Also used by DCOM| +| `137` | NetBIOS-ns | TCP, UDP | NetBIOS Name Service, used for name registration and resolution | +| `139` | NetBIOS-ssn | TCP, UDP | NetBIOS Session Service | +| `143` | IMAP4 | TCP, UDP | Internet Message Access Protocol (IMAP), management of electronic mail messages on a server | +| `381` | HP Openview | TCP, UDP | HP data alarm manager | +| `388` | HP Openview | TCP, UDP | HP data performance collector | +| `443` | HTTP over SSL | TCP, UDP, SCTP | Hypertext Transfer Protocol Secure (HTTPS) uses TCP in versions 1.x and 2. HTTP/3 uses QUIC, a transport protocol on top of UDP. | +| `464` | Kerberos | TCP, UDP | Kerberos Change/Set password | +| `465` | SMTP over TLS/SSL, SSM | TCP | Authenticated SMTP over TLS/SSL (SMTPS), URL Rendezvous Directory for SSM (Cisco protocol) | +| `587` | SMTP | TCP | Email message submission | +| `593` | Microsoft DCOM | TCP, UDP | HTTP RPC Ep Map, Remote procedure call over Hypertext Transfer Protocol, often used by Distributed Component Object Model services and Microsoft Exchange Server | +| `636` | LDAP over TLS/SSL | TCP, UDP | Lightweight Directory Access Protocol over TLS/SSL | +| `691` | MS Exchange| TCP | MS Exchange Routing | +| `902` | VMware Server | unofficial | VMware ESXi | +| `989` | FTP over SSL | TCP, UDP | FTPS Protocol (data), FTP over TLS/SSL | +| `989` | FTP over SSL | TCP, UDP | FTPS Protocol (data), FTP over TLS/SSL | +| `993` | IMAP4 over SSL | TCP | Internet Message Access Protocol over TLS/SSL (IMAPS) | +| `995` | POP3 over SSL | TCP, UDP | Post Office Protocol 3 over TLS/SSL | +| `1025` | Microsoft RPC | TCP | Microsoft operating systems tend to allocate one or more unsuspected, publicly exposed services (probably DCOM, but who knows) among the first handful of ports immediately above the end of the service port range (1024+). | +| `1194` | OpenVPN | TCP, UDP | OpenVPN | +| `1337` | WASTE | unofficial | WASTE Encrypted File Sharing Program | +| `1589` | Cisco VQP | TCP, UDP | Cisco VLAN Query Protocol (VQP) | +| `1725` | Stream | UDP | Valve Steam Client uses port 1725 | +| `2082` | cPanel | unofficial | cPanel default | +| `2083` | radsec, cPanel | TCP, UDP | cPanel default | +| `2483` | Oracle DB | TCP, UDP | Oracle database listening for insecure client connections to the listener, replaces port 1521 | +| `2484` | Oracle DB | TCP, UDP | Oracle database listening for SSL client connections to the listener | +| `2967` | Symantec AV | TCP, UDP | Symantec System Center agent (SSC-AGENT) | +| `3074` | XBOX Live | TCP, UDP | Xbox LIVE and Games for Windows – Live | +| `3306` | MySQL | TCP | MySQL database system | +| `3724` | World of Warcraft | TCP, UDP | Blizzard games, Unofficial Club Penguin Disney online game for kids | +| `3389` | MS wbt-server | TCP | Microsoft Remote Desktop Protocol | +| `4664` | Google Desktop | unofficial | Google Desktop Search | +| `5432` | Postgres SQL | TCP | PostgreSQL database system | +| `5900` | RFB/VNC Server| TCP | virtual Network Computing (VNC) Remote Frame Buffer (RFB) protocol | +| `6665-6669` | IRC | TCP | Internet Relat Chat | +| `6881` | BitTorrent | unofficial | BitTorrent is part of the full range of ports used most often | +| `6970` | Quicktime | unofficial | QuickTime Streaming Server | +| `6999` | BitTorrent | unofficial | BitTorrent is part of the full range of ports used most often | +| `8086` | Kaspersky AV | TCP | Kaspersky AV Control Center | +| `8087` | Kaspersky | UDP | Kaspersky AV Control Center | +| `8222` | VMware Server | TCP, UDP | VMware Server Management User Interface (insecure Web interface). | +| `9100` | PDL | TCP | PDL Data Stream, used for printing to certain network printers. | +| `10000` | BackupExec | unofficial | Webmin, Web-based Unix/Linux system administration tool (default port) | +| `12345` | NetBus | unofficial | NetBus remote administration tool (often Trojan horse). | +| `27374` | Sub7 | unofficial | Sub7 default | +| `31337` | Back Orifice | unofficial | Back Orifice 2000 remote administration tools | + +--- + +## **Miscellaneous** + +- To read about VMware Port read in the website click on [**ports.esp.vmware.com**](https://ports.esp.vmware.com) diff --git a/TuxTechBlogs/docs/topic/13.2. Miscellaneous/status_codes.md b/TuxTechBlogs/docs/topic/13.2. Miscellaneous/status_codes.md index 1e8e6da..9c7b116 100644 --- a/TuxTechBlogs/docs/topic/13.2. Miscellaneous/status_codes.md +++ b/TuxTechBlogs/docs/topic/13.2. Miscellaneous/status_codes.md @@ -1,307 +1,307 @@ -# **Status Code** - -- [**Status Code**](#status-code) - - [**What Are HTTP Status Codes?**](#what-are-http-status-codes) - - [**Status Code Details**](#status-code-details) - - [**1XX HTTP Status Codes**](#1xx-http-status-codes) - - [**2XX HTTP Status Codes**](#2xx-http-status-codes) - - [**3XX HTTP Status Codes**](#3xx-http-status-codes) - - [**4XX HTTP Status Codes**](#4xx-http-status-codes) - - [**5XX HTTP Status Codes**](#5xx-http-status-codes) - - [**How to Check the HTTP Status Code of a Page**](#how-to-check-the-http-status-code-of-a-page) - - [**Error status code impact for short \& longer outage?**](#error-status-code-impact-for-short--longer-outage) - ---- - -## **What Are HTTP Status Codes?** - -- An HTTP status code is a three-digit number a server generates in response to a browser’s request Like 404, for example, which you’ve likely seen before. -- Every time you visit a website, your browser sends a request to the site’s server Then, the server responds with an HTTP code status. -- It’s like they’re having a conversation And each code indicates whether things are working or something is wrong. -- The first digit in each status code begins with a number between one and five, indicating the code’s category The second two digits are for specific information under the category. -- For example, let’s use 404 again. - - 1 The first digit (4) indicates a client error And specifically, 404 means the server couldn’t find the requested resource. - 2 Meanwhile, 402 also shows a client error And the second and third digits tell us the server found the page but can’t access it due to a payment being required. - ---- - -> ## **The Complete List of HTTP Status Codes** - ---- - -![different*status*codes](https://i.postimg.cc/NF3GXV0j/different-status-codes.png) - ---- - -|Status Code| Function| -|----:|:----| -| `1XX — Informational codes` | The server acknowledges and is processing the request | -| `100` | Continue | -| `101` | Switching Protocols | -| `102` | Processing | -| `103` | Early Hints | -| `2XX — Success codes` | The server successfully received, understood, and processed the request | -| `200` | Ok | -| `201` | Created | -| `202` | Accepted | -| `203` | Non-Authoritative Information | -| `204` | No Content | -| `205` | Reset Content | -| `206` | Partial Content | -| `207` | Multi-Status | -| `208` | Already Reported | -| `226` | IM Used | -| `3XX — Redirection codes` | The server received the request, but there’s a redirect to somewhere else (or, in rare cases, some additional action other than a redirect must be completed) | -| `300` | Multiple Choices | -| `301` | Moved Permanently | -| `302` | Found | -| `303` | See Other | -| `304` | Not Modified | -| `307` | Temporary Redirect | -| `308` | Permanent Redirect | -| `4XX — Client error codes` | The server couldn’t find (or reach) the page or website This is an error on the site’s side | -| `400` | Bad Request | -| `401` | Unauthorized | -| `402` | Payment Required | -| `403` | Forbidden | -| `404` | Not Found | -| `405` | Method Not Allowed | -| `406` | Not Acceptable | -| `407` | Proxy Authentication Required | -| `408` | Request Timeout | -| `409` | Conflict | -| `410` | Gone | -| `411` | Length Required | -| `412` | Precondition Failed | -| `413` | Content Too Large | -| `414` | URI Too Long | -| `415` | Unsupported Media Type | -| `416` | Range Not Satisfiable | -| `417` | Expectation Failed | -| `421` | Misdirected Request | -| `422` | Unprocessable Content | -| `423` | Locked | -| `424` | Failed Dependency | -| `425` | Too Early | -| `426` | Upgrade Required | -| `428` | Precondition Required | -| `429` | Too Many Requests | -| `431` | Request Header Fields Too Large | -| `451` | Unavailable for Legal Reasons | -| `5XX — Server error codes` | The client made a valid request, but the server failed to complete the request | -| `500` | Internal Server Error | -| `501` | Not Implemented | -| `502` | Bad Gateway | -| `503` | Service Unavailable | -| `504` | Gateway Timeout | -| `505` | HTTP Version Not Supported | -| `506` | Variant Also Negotiates | -| `507` | Insufficient Storage | -| `508` | Loop Detected | -| `511` | Network Authentication Required | - -## **Status Code Details** - -### **1XX HTTP Status Codes** - -This category is informational, temporary, and invisible to the client It indicates the server received the request and will proceed with it. - -- `100 — Continue`: This interim status code means the server received the initial request, and the client should continue. - -- `101 — Switching protocols`: This code is a response to an Upgrade header field request and states the protocol the server will switch to. - -- `102 — Processing`: This response indicates the server received and is processing the request, but no response is yet available. - -- `103 — Early hints`: This code is used with the Link header and allows the browser to preload resources while the server prepares a response. - -### **2XX HTTP Status Codes** - -This status code category encompasses successful responses. - -- `200 — OK`: This is the standard response for successful HTTP requests The actual meaning of the response depends on the request method used: - - ```bash - GET: Resource obtained and is in the message body - HEAD: Headers are included in the response - TRACE: Message body contains the request message as received by the server - POST or PUT: Resource describing the result of the action sent is in the message body - ``` - -- `201 — Created`: The request succeeded and a new resource was created This is usually the response after POST or PUT requests. - -- `202 — Accepted`: The request was accepted but is still in progress It’s used for cases where another server handles the request or for batch processing. - -- `203 — Non-Authoritative Information`: The data returned isn’t from the origin server Instead, it’s a modified version collected from a third party. - -- `204 — No Content`: The request was successfully processed, but there is no content The headers may be useful. - -- `205 — Reset Content`: The server fulfilled the request but asked the user to reset the document. - -- `206 — Partial Content`: The server is delivering part of the resource This response is used when the client sends a Range header to request only part of a resource. - -- `207 — Multi-Status`: Provides the statuses of multiple resources, depending on how many sub-requests were made. - -- `208 — Already Reported`: The members of a DAV:propstat element have already been listed and won’t be included again. - -- `226 — IM used`: The server completed a GET request And the response indicates one or more instance-manipulation results. - -### **3XX HTTP Status Codes** - -The status codes in this category show the resource is in a different location, and the user gets redirected as a result. - -- `300 — Multiple Choice`: The request has more than one possible response And the user should choose one of them. - -- `301 — Moved Permanently`: This redirect status code indicates the requested resource has permanently moved to a new URL The browser displays the new URL. - -- `302 — Found`: Previously known as “Moved Temporarily,” this code indicates the requested resource has temporarily moved to a new URL. - -- `303 — See Other`: The server redirects the user to the requested resource with a GET request at another URL. - -- `304 — Not Modified`: Used for caching purposes The response hasn’t been modified, so the client can continue to use the same cached version of the requested resource. - -- `307 — Temporary Redirect`: The requested resource temporarily moved to a different URL The only difference vis-a-vis the 302 code is the user must not change the HTTP method used. - -- `308 — Permanent Redirect`: The requested resource permanently moved to a different URL The difference between this code and 301 is the user must not change the HTTP request method. - -### **4XX HTTP Status Codes** - -This category indicates the server can’t reach a page due to an error on the client side. - -- `400 — Bad Request`: The server can’t or won’t process the request due to a client error For example, invalid request message framing, deceptive request routing, size too large, etc. - -- `401 — Unauthorized`: The user doesn’t have valid authentication credentials to get the requested resource. - -- `402 — Payment Required`: Reserved for future use; it was initially intended for digital payment systems It’s very rarely used, and no standard convention regulates it. - -- `403 — Forbidden`: The client doesn’t have access rights to the content For example, it may require a password Unlike the 401 HTTP error code, the server does know the client’s identity. - -- `404 — Not Found`: The server can’t find the requested resource, and no redirection has been set 404 errors can harm your SEO efforts. - -- `405 — Method Not Allowed`: The server supports the request method, but the target resource doesn’t. - -- `406 — Not Acceptable`: The server doesn’t find any content that satisfies the criteria given by the user according to the Accept headers requested. - -- `407 — Proxy Authentication Required`: This is similar to a 401, but a proxy must authenticate the client to continue. - -- `408 — Request Timeout`: The server timed out waiting because the client didn’t produce a request within the allotted time. - -- `409 — Conflict`: The server can’t fulfill the request because there’s a conflict with the resource It’ll display information about the problem so the client can fix it and resubmit. - -- `410 — Gone`: The content requested has been permanently deleted from the server and will not be reinstated. - -- `411 — Length Required`: The server rejects the request because it requires a defined -Content-Length header field. - -- `412 — Precondition Failed`: The client indicates preconditions in the header fields that the server fails to meet. - -- `413 — Payload Too Large`: The client’s request is larger than the server’s defined limits, and the server refuses to process it. - -- `414 — URI Too Long`: The URI (Uniform Resource Identifier) requested by the client is too long for the server to process. - -- `415 — Unsupported Media Type`: The request uses a media format the server does not support. - -- `416 — Range Not Satisfiable`: The server can’t fulfill the value indicated in the request’s Range header field. - -- `417 — Expectation Failed`: The server can’t meet the requirements indicated by the Expect request header field. - -- `421 — Misdirected Request`: The client sends a request to a server that can’t produce a response. - -- `422 — Unprocessable Entity`: The client correctly sends the request, but the server can’t process it because of semantic errors or similar issues. - -- `423 — Locked`: The requested method’s resource is locked and inaccessible. - -- `424 — Failed Dependency`: The request failed because a request the initial request depended on also failed. - -- `425 — Too Early`: The server is unwilling to process a request that might be replayed. - -- `426 — Update Required`: The server refuses to process the request using the current protocol unless the client upgrades to a different protocol. - -- `428 — Precondition Required`: The server needs the request to be conditional. - -- `429 — Too Many Requests`: The user sends too many requests in a certain amount of time. - -- `431 — Request Header Fields Too Large`: The server can’t process the request because the header fields are too large. - -- `451 — Unavailable for Legal Reasons`: The user requests a resource the server can’t legally provide. - -### **5XX HTTP Status Codes** - -This category includes errors on the server side. - -They can be detrimental to your SEO, as search engines can prompt crawlers to slow down with crawling and remove indexed URLs that continually return these errors. - -- `500 — Internal Server Error`: The server has encountered an unexpected error and cannot complete the request. - -- `501 — Not Implemented`: The server can’t fulfill the request or doesn’t recognize the request method. - -- `502 — Bad Gateway`: The server acts as a gateway and gets an invalid response from an inbound host. - -- `503 — Service Unavailable`: The server is unable to process the request This often occurs when a server is overloaded or down for maintenance. - -- `504 — Gateway Timeout`: The server was acting as a gateway or proxy and timed out, waiting for a response. - -- `505 — HTTP Version Not Supported`: The server doesn’t support the HTTP version in the request. - -- `506 — Variant Also Negotiates`: The server has an internal configuration error. - -- `507 — Insufficient Storage`: The server doesn’t have enough storage to process the request successfully. - -- `508 — Loop Detected`: The server detects an infinite loop while processing the request. - -- `511 — Network Authentication Required`: The client must be authenticated to access the network The error should include a link where the user can submit credentials. - ---- - -## **How to Check the HTTP Status Code of a Page** - - - Some status codes are visible, while others are not If you want to check a page’s HTTP status code, you can use your browser, Google Search Console, or an SEO tool. - - 1. Open any page with the Chrome web browser and right-click anywhere on the screen Then, click **"Inspect"**. - ![webpage*inspect](https://i.postimg.cc/kX2fXH8t/webpage-inspect.png) - - 2. Now, select **“Network”** on the top menu. - ![webpage*network*menu](https://i.postimg.cc/43fcnKMF/webpage-network-menu.png) - - 3. You should see the status codes under the **“Status”** column. - ![webpage*network*status](https://i.postimg.cc/C1dfH3wG/webpage-network-status.png) - - Each row represents a resource And each column represents information about the resource. - - The top resource is usually the HTML document And the last resource is whatever was requested last. - - You’d use this web browser method if you don’t own or manage the website you’re inspecting. - - If you do own the webpage, the best way to check its HTTP status code is to use Google Search Console. - - - Progratically using scripts or binaries you can check the Status code of web applications. - - - CLI based tools/ UI based Web Applications can also be used to check status code. - ---- - -## **Error status code impact for short & longer outage?** - -If a webpage or API is giving error status codes for short durations or longer outages, it can have several consequences for the users and the business: - -> **Short Duration Errors/ Outages** - - 1. *Inconvenience to users*: Users may experience temporary errors while accessing the webpage or API, which can be frustrating and may lead to a negative user experience. - 2. *Loss of data*: If the error occurs during a critical transaction, such as a payment or data submission, users may lose their progress and have to start again. - 3. *Decreased productivity*: If the error occurs frequently, users may lose time and productivity trying to resolve the issue or find workarounds. - -> **Longer Duration Errors/ Outages:** - - 1. *Loss of revenue*: If the error occurs during a critical transaction, such as a payment or sales, the business may lose revenue and customers. - 2. *Decreased user trust*: Frequent errors can lead to a loss of trust among users, which can negatively impact the business's reputation and customer loyalty. - 3. *Increased support requests*: Longer duration errors can lead to an increase in support requests, which can be time-consuming and costly to resolve. - 4. *Negative impact on SEO*: If the errors are not resolved quickly, it can negatively impact the business's search engine optimization (SEO) and reputation. - 5. *Loss of data*: If the error occurs during a critical transaction, such as a payment or data submission, the business may lose important data, which can be difficult and costly to recover. - 6. *Legal and compliance issues*: Depending on the nature of the error, it may lead to legal and compliance issues, such as data breaches or non-compliance with regulations. - 7. *Increased maintenance costs*: Longer duration errors can lead to increased maintenance costs, as the business may need to invest in additional resources to resolve the issue. - 8. *Decreased employee productivity*: If the error occurs frequently, employees may spend more time trying to resolve the issue, which can decrease their productivity and morale. - -> **To mitigate the risks associated with error status codes, it is important to have a robust error handling process in place, which includes:** - - 1. *Monitoring and logging*: Implementing monitoring and logging tools to track errors and identify the root cause. - 2. *Error handling protocols*: Establishing error handling protocols to ensure that errors are resolved quickly and effectively. - 3. *Communication*: Communicating with users and stakeholders about the error and the steps being taken to resolve it. - 4. *Training*: Providing training to employees on error handling and troubleshooting. - 5. *Regular maintenance*: Regularly maintaining and updating the system to prevent errors and improve performance. - 6. *Redundancy*: Implementing redundancy measures to ensure that the system remains available even in the event of an error. +# **Status Code** + +- [**Status Code**](#status-code) + - [**What Are HTTP Status Codes?**](#what-are-http-status-codes) + - [**Status Code Details**](#status-code-details) + - [**1XX HTTP Status Codes**](#1xx-http-status-codes) + - [**2XX HTTP Status Codes**](#2xx-http-status-codes) + - [**3XX HTTP Status Codes**](#3xx-http-status-codes) + - [**4XX HTTP Status Codes**](#4xx-http-status-codes) + - [**5XX HTTP Status Codes**](#5xx-http-status-codes) + - [**How to Check the HTTP Status Code of a Page**](#how-to-check-the-http-status-code-of-a-page) + - [**Error status code impact for short \& longer outage?**](#error-status-code-impact-for-short--longer-outage) + +--- + +## **What Are HTTP Status Codes?** + +- An HTTP status code is a three-digit number a server generates in response to a browser’s request Like 404, for example, which you’ve likely seen before. +- Every time you visit a website, your browser sends a request to the site’s server Then, the server responds with an HTTP code status. +- It’s like they’re having a conversation And each code indicates whether things are working or something is wrong. +- The first digit in each status code begins with a number between one and five, indicating the code’s category The second two digits are for specific information under the category. +- For example, let’s use 404 again. + + 1 The first digit (4) indicates a client error And specifically, 404 means the server couldn’t find the requested resource. + 2 Meanwhile, 402 also shows a client error And the second and third digits tell us the server found the page but can’t access it due to a payment being required. + +--- + +> ## **The Complete List of HTTP Status Codes** + +--- + +![different*status*codes](https://i.postimg.cc/NF3GXV0j/different-status-codes.png) + +--- + +|Status Code| Function| +|----:|:----| +| `1XX — Informational codes` | The server acknowledges and is processing the request | +| `100` | Continue | +| `101` | Switching Protocols | +| `102` | Processing | +| `103` | Early Hints | +| `2XX — Success codes` | The server successfully received, understood, and processed the request | +| `200` | Ok | +| `201` | Created | +| `202` | Accepted | +| `203` | Non-Authoritative Information | +| `204` | No Content | +| `205` | Reset Content | +| `206` | Partial Content | +| `207` | Multi-Status | +| `208` | Already Reported | +| `226` | IM Used | +| `3XX — Redirection codes` | The server received the request, but there’s a redirect to somewhere else (or, in rare cases, some additional action other than a redirect must be completed) | +| `300` | Multiple Choices | +| `301` | Moved Permanently | +| `302` | Found | +| `303` | See Other | +| `304` | Not Modified | +| `307` | Temporary Redirect | +| `308` | Permanent Redirect | +| `4XX — Client error codes` | The server couldn’t find (or reach) the page or website This is an error on the site’s side | +| `400` | Bad Request | +| `401` | Unauthorized | +| `402` | Payment Required | +| `403` | Forbidden | +| `404` | Not Found | +| `405` | Method Not Allowed | +| `406` | Not Acceptable | +| `407` | Proxy Authentication Required | +| `408` | Request Timeout | +| `409` | Conflict | +| `410` | Gone | +| `411` | Length Required | +| `412` | Precondition Failed | +| `413` | Content Too Large | +| `414` | URI Too Long | +| `415` | Unsupported Media Type | +| `416` | Range Not Satisfiable | +| `417` | Expectation Failed | +| `421` | Misdirected Request | +| `422` | Unprocessable Content | +| `423` | Locked | +| `424` | Failed Dependency | +| `425` | Too Early | +| `426` | Upgrade Required | +| `428` | Precondition Required | +| `429` | Too Many Requests | +| `431` | Request Header Fields Too Large | +| `451` | Unavailable for Legal Reasons | +| `5XX — Server error codes` | The client made a valid request, but the server failed to complete the request | +| `500` | Internal Server Error | +| `501` | Not Implemented | +| `502` | Bad Gateway | +| `503` | Service Unavailable | +| `504` | Gateway Timeout | +| `505` | HTTP Version Not Supported | +| `506` | Variant Also Negotiates | +| `507` | Insufficient Storage | +| `508` | Loop Detected | +| `511` | Network Authentication Required | + +## **Status Code Details** + +### **1XX HTTP Status Codes** + +This category is informational, temporary, and invisible to the client It indicates the server received the request and will proceed with it. + +- `100 — Continue`: This interim status code means the server received the initial request, and the client should continue. + +- `101 — Switching protocols`: This code is a response to an Upgrade header field request and states the protocol the server will switch to. + +- `102 — Processing`: This response indicates the server received and is processing the request, but no response is yet available. + +- `103 — Early hints`: This code is used with the Link header and allows the browser to preload resources while the server prepares a response. + +### **2XX HTTP Status Codes** + +This status code category encompasses successful responses. + +- `200 — OK`: This is the standard response for successful HTTP requests The actual meaning of the response depends on the request method used: + + ```bash + GET: Resource obtained and is in the message body + HEAD: Headers are included in the response + TRACE: Message body contains the request message as received by the server + POST or PUT: Resource describing the result of the action sent is in the message body + ``` + +- `201 — Created`: The request succeeded and a new resource was created This is usually the response after POST or PUT requests. + +- `202 — Accepted`: The request was accepted but is still in progress It’s used for cases where another server handles the request or for batch processing. + +- `203 — Non-Authoritative Information`: The data returned isn’t from the origin server Instead, it’s a modified version collected from a third party. + +- `204 — No Content`: The request was successfully processed, but there is no content The headers may be useful. + +- `205 — Reset Content`: The server fulfilled the request but asked the user to reset the document. + +- `206 — Partial Content`: The server is delivering part of the resource This response is used when the client sends a Range header to request only part of a resource. + +- `207 — Multi-Status`: Provides the statuses of multiple resources, depending on how many sub-requests were made. + +- `208 — Already Reported`: The members of a DAV:propstat element have already been listed and won’t be included again. + +- `226 — IM used`: The server completed a GET request And the response indicates one or more instance-manipulation results. + +### **3XX HTTP Status Codes** + +The status codes in this category show the resource is in a different location, and the user gets redirected as a result. + +- `300 — Multiple Choice`: The request has more than one possible response And the user should choose one of them. + +- `301 — Moved Permanently`: This redirect status code indicates the requested resource has permanently moved to a new URL The browser displays the new URL. + +- `302 — Found`: Previously known as “Moved Temporarily,” this code indicates the requested resource has temporarily moved to a new URL. + +- `303 — See Other`: The server redirects the user to the requested resource with a GET request at another URL. + +- `304 — Not Modified`: Used for caching purposes The response hasn’t been modified, so the client can continue to use the same cached version of the requested resource. + +- `307 — Temporary Redirect`: The requested resource temporarily moved to a different URL The only difference vis-a-vis the 302 code is the user must not change the HTTP method used. + +- `308 — Permanent Redirect`: The requested resource permanently moved to a different URL The difference between this code and 301 is the user must not change the HTTP request method. + +### **4XX HTTP Status Codes** + +This category indicates the server can’t reach a page due to an error on the client side. + +- `400 — Bad Request`: The server can’t or won’t process the request due to a client error For example, invalid request message framing, deceptive request routing, size too large, etc. + +- `401 — Unauthorized`: The user doesn’t have valid authentication credentials to get the requested resource. + +- `402 — Payment Required`: Reserved for future use; it was initially intended for digital payment systems It’s very rarely used, and no standard convention regulates it. + +- `403 — Forbidden`: The client doesn’t have access rights to the content For example, it may require a password Unlike the 401 HTTP error code, the server does know the client’s identity. + +- `404 — Not Found`: The server can’t find the requested resource, and no redirection has been set 404 errors can harm your SEO efforts. + +- `405 — Method Not Allowed`: The server supports the request method, but the target resource doesn’t. + +- `406 — Not Acceptable`: The server doesn’t find any content that satisfies the criteria given by the user according to the Accept headers requested. + +- `407 — Proxy Authentication Required`: This is similar to a 401, but a proxy must authenticate the client to continue. + +- `408 — Request Timeout`: The server timed out waiting because the client didn’t produce a request within the allotted time. + +- `409 — Conflict`: The server can’t fulfill the request because there’s a conflict with the resource It’ll display information about the problem so the client can fix it and resubmit. + +- `410 — Gone`: The content requested has been permanently deleted from the server and will not be reinstated. + +- `411 — Length Required`: The server rejects the request because it requires a defined +Content-Length header field. + +- `412 — Precondition Failed`: The client indicates preconditions in the header fields that the server fails to meet. + +- `413 — Payload Too Large`: The client’s request is larger than the server’s defined limits, and the server refuses to process it. + +- `414 — URI Too Long`: The URI (Uniform Resource Identifier) requested by the client is too long for the server to process. + +- `415 — Unsupported Media Type`: The request uses a media format the server does not support. + +- `416 — Range Not Satisfiable`: The server can’t fulfill the value indicated in the request’s Range header field. + +- `417 — Expectation Failed`: The server can’t meet the requirements indicated by the Expect request header field. + +- `421 — Misdirected Request`: The client sends a request to a server that can’t produce a response. + +- `422 — Unprocessable Entity`: The client correctly sends the request, but the server can’t process it because of semantic errors or similar issues. + +- `423 — Locked`: The requested method’s resource is locked and inaccessible. + +- `424 — Failed Dependency`: The request failed because a request the initial request depended on also failed. + +- `425 — Too Early`: The server is unwilling to process a request that might be replayed. + +- `426 — Update Required`: The server refuses to process the request using the current protocol unless the client upgrades to a different protocol. + +- `428 — Precondition Required`: The server needs the request to be conditional. + +- `429 — Too Many Requests`: The user sends too many requests in a certain amount of time. + +- `431 — Request Header Fields Too Large`: The server can’t process the request because the header fields are too large. + +- `451 — Unavailable for Legal Reasons`: The user requests a resource the server can’t legally provide. + +### **5XX HTTP Status Codes** + +This category includes errors on the server side. + +They can be detrimental to your SEO, as search engines can prompt crawlers to slow down with crawling and remove indexed URLs that continually return these errors. + +- `500 — Internal Server Error`: The server has encountered an unexpected error and cannot complete the request. + +- `501 — Not Implemented`: The server can’t fulfill the request or doesn’t recognize the request method. + +- `502 — Bad Gateway`: The server acts as a gateway and gets an invalid response from an inbound host. + +- `503 — Service Unavailable`: The server is unable to process the request This often occurs when a server is overloaded or down for maintenance. + +- `504 — Gateway Timeout`: The server was acting as a gateway or proxy and timed out, waiting for a response. + +- `505 — HTTP Version Not Supported`: The server doesn’t support the HTTP version in the request. + +- `506 — Variant Also Negotiates`: The server has an internal configuration error. + +- `507 — Insufficient Storage`: The server doesn’t have enough storage to process the request successfully. + +- `508 — Loop Detected`: The server detects an infinite loop while processing the request. + +- `511 — Network Authentication Required`: The client must be authenticated to access the network The error should include a link where the user can submit credentials. + +--- + +## **How to Check the HTTP Status Code of a Page** + + - Some status codes are visible, while others are not If you want to check a page’s HTTP status code, you can use your browser, Google Search Console, or an SEO tool. + + 1. Open any page with the Chrome web browser and right-click anywhere on the screen Then, click **"Inspect"**. + ![webpage*inspect](https://i.postimg.cc/kX2fXH8t/webpage-inspect.png) + + 2. Now, select **“Network”** on the top menu. + ![webpage*network*menu](https://i.postimg.cc/43fcnKMF/webpage-network-menu.png) + + 3. You should see the status codes under the **“Status”** column. + ![webpage*network*status](https://i.postimg.cc/C1dfH3wG/webpage-network-status.png) + - Each row represents a resource And each column represents information about the resource. + - The top resource is usually the HTML document And the last resource is whatever was requested last. + - You’d use this web browser method if you don’t own or manage the website you’re inspecting. + - If you do own the webpage, the best way to check its HTTP status code is to use Google Search Console. + + - Progratically using scripts or binaries you can check the Status code of web applications. + + - CLI based tools/ UI based Web Applications can also be used to check status code. + +--- + +## **Error status code impact for short & longer outage?** + +If a webpage or API is giving error status codes for short durations or longer outages, it can have several consequences for the users and the business: + +> **Short Duration Errors/ Outages** + + 1. *Inconvenience to users*: Users may experience temporary errors while accessing the webpage or API, which can be frustrating and may lead to a negative user experience. + 2. *Loss of data*: If the error occurs during a critical transaction, such as a payment or data submission, users may lose their progress and have to start again. + 3. *Decreased productivity*: If the error occurs frequently, users may lose time and productivity trying to resolve the issue or find workarounds. + +> **Longer Duration Errors/ Outages:** + + 1. *Loss of revenue*: If the error occurs during a critical transaction, such as a payment or sales, the business may lose revenue and customers. + 2. *Decreased user trust*: Frequent errors can lead to a loss of trust among users, which can negatively impact the business's reputation and customer loyalty. + 3. *Increased support requests*: Longer duration errors can lead to an increase in support requests, which can be time-consuming and costly to resolve. + 4. *Negative impact on SEO*: If the errors are not resolved quickly, it can negatively impact the business's search engine optimization (SEO) and reputation. + 5. *Loss of data*: If the error occurs during a critical transaction, such as a payment or data submission, the business may lose important data, which can be difficult and costly to recover. + 6. *Legal and compliance issues*: Depending on the nature of the error, it may lead to legal and compliance issues, such as data breaches or non-compliance with regulations. + 7. *Increased maintenance costs*: Longer duration errors can lead to increased maintenance costs, as the business may need to invest in additional resources to resolve the issue. + 8. *Decreased employee productivity*: If the error occurs frequently, employees may spend more time trying to resolve the issue, which can decrease their productivity and morale. + +> **To mitigate the risks associated with error status codes, it is important to have a robust error handling process in place, which includes:** + + 1. *Monitoring and logging*: Implementing monitoring and logging tools to track errors and identify the root cause. + 2. *Error handling protocols*: Establishing error handling protocols to ensure that errors are resolved quickly and effectively. + 3. *Communication*: Communicating with users and stakeholders about the error and the steps being taken to resolve it. + 4. *Training*: Providing training to employees on error handling and troubleshooting. + 5. *Regular maintenance*: Regularly maintaining and updating the system to prevent errors and improve performance. + 6. *Redundancy*: Implementing redundancy measures to ensure that the system remains available even in the event of an error. diff --git a/TuxTechBlogs/docs/topic/19.0. Scrum/00. Introduction.md b/TuxTechBlogs/docs/topic/19.0. Scrum/00. Introduction.md index 9632bfc..d96b3c2 100644 --- a/TuxTechBlogs/docs/topic/19.0. Scrum/00. Introduction.md +++ b/TuxTechBlogs/docs/topic/19.0. Scrum/00. Introduction.md @@ -1,139 +1,139 @@ -- [**What is scrum?**](#what-is-scrum) -- [**Overview**](#overview) -- [**What's a sprint?**](#whats-a-sprint) -- [**What are artifacts, events, and roles?**](#what-are-artifacts-events-and-roles) -- [**What are the scrum artifacts?**](#what-are-the-scrum-artifacts) -- [**What are the scrum events?**](#what-are-the-scrum-events) -- [**Who's on the scrum team?**](#whos-on-the-scrum-team) -- [**Summarization**](#summarization) - ---- - -## **What is scrum?** - -> ### **Scrum is a popular agile framework.** - -**Scrum** is **focused on following a set of rules** and **delivering in time-boxed increments**. It encourages teams to self-organize and continuously improve. - ---- - -## **Overview** - -![scrum_overview](https://i.postimg.cc/yNGNBkzR/SCRUM-overview.png) - ---- - -## **What's a sprint?** - -- The first part of the cycle to explore is sprints. In scrum, **the team delivers work incrementally in short**, **time-boxed cycles called sprints**. A sprint duration can be between one and four weeks long, depending on the team. -- Sprints help break down a project into **manageable**, **bite-sized tasks**. This way, the team has the flexibility to reprioritize tasks as the project changes. - ---- - -## **What are artifacts, events, and roles?** - -> ### **They're critical components of the scrum framework.** - -Compared to kanban, scrum is more **rigid** and **prescriptive**. It has specific **artifacts**, **events**, and **roles** your team must practice. These can all be customized and adapted, but many teams aim to follow the original scrum framework closely. Let's take a closer look at them. - ---- - -## **What are the scrum artifacts?** - -**Artifacts** are items that provide key information to make the sprint cycle successful. - -1. `Product Backlog` is the primary list of work that needs to get done. This is usually a long list of features, requirements, and fixes. It is, essentially, the entire team’s to do list. The product backlog is used as an input to decide what to work on for the next sprint. - -2. The `sprint backlog` is the list of items to be completed in the current sprint cycle. The highest priority items from the product backlog are pulled into the `sprint backlog`. - -3. The `completed increment` is the releasable product delivered at the end of a sprint. Typically, this is all the work that aligns with the sprint goal the team set at the beginning. Sometimes the `completed increment` is shipped to customers and shared with the world. Other times, the increment is meant only for internal audiences. Once the completed increment is delivered, the team is ready to start a new sprint cycle. - ---- - -## **What are the scrum events?** - -- Scrum `events`, also called **ceremonies**, are full-team meetings to ensure everyone is in sync. - -- Each team approaches scrum events differently. Some teams find that doing all the events is too repetitive, while others find them 100% necessary. Ask your team lead or scrum master how your team approaches events. - -> ### Below are the different ceremonies in Scrum: - -1. `Sprint Planning meeting` is to plan the work to be completed in the upcoming sprint and determine a sprint goal. - - Work items are pulled from the **product backlog** to the **sprint backlog** in the meeting. At the end of the session, everyone on the team must be clear on the **sprint goal** and the tasks to be completed. - - ![SCRUM_sprint_planning](https://i.postimg.cc/R0KYCDkT/SCRUM-sprint-planning.png) - -2. `Daily Stand-Up` The daily stand-up (or daily scrum) is a short meeting for team members to share progress and voice concerns about blockers. - - Typically 15 minutes long, the goal is to make sure everyone is on the same page. - - - Some example questions team members may answer in the daily scrum are: - 1. _What did I complete yesterday?_ - 2. _What do I plan to complete today?_ - 3. _Are there any blockers?_ - - - Every team approaches stand-ups differently. Some teams prefer to meet in person every day. Others prefer to connect async in Slack or Teams. - - ![SCRUM_daily_standup](https://i.postimg.cc/mg8DXmX8/SCRUM-daily-standup.png) - -3. `Sprint Review` is a meeting at the end of the sprint where the team shares a demonstration of the work completed, often related to the **sprint goal**. - - - This meeting is often open to a broad audience of stakeholders who review and ask questions about the work. - - - It's also where ideas for the next sprint start to form. - - ![SCRUM_sprint_review](https://i.postimg.cc/jSG9bbF5/SCRUM-sprint-review.png) - -4. The `Retrospective` is an internal meeting after a sprint ends for the team to reflect on what worked well and what needs to be improved in the next sprint, including the project, people, tools, and events. - - The goal is to create a safe space for everyone to share their honest feedback, helping drive continuous improvement with every sprint cycle. - - ![SCRUM_retrospective](https://i.postimg.cc/htfWnM4C/SCRUM-retrospective.png) - ---- - -## **Who's on the scrum team?** - -- The people on the team bring the scrum framework to life. There are specific **roles** that should be on every scrum team. - -- Each scrum team should have **one product owner, one scrum master, and five to seven development team members.** - -> ### Below are the different roles and their responsibilities in Scrum: - -1. `Product owners` understand the business, customer expectations, and market trends. They set the vision for the product and ensure the development team delivers the most value to the company. Each scrum team has only one product owner. - - - Their responsibilities are to: - 1. Craft the product vision - 2. Build, manage, and prioritize the product backlog - 3. Provide clear guidance on which features to deliver next - 4. Decide when to ship the product - -2. `Scrum masters` **ensure the team is operating efficiently and in alignment with the scrum process.** They coach teams, product owners, and the business on the scrum process, and look for ways to fine-tune their practice of it. Each scrum team has only one scrum master. - - - Their responsibilities are to: - 1. Run sprint planning meetings - 2. Facilitate daily stand-ups - 3. Conduct retrospective meetings - 4. Administer the scrum board - 5. Meet 1:1 with team members as needed - 6. Help eliminate blockers through workflow improvements - -3. The `development team` **is the group that completes the hands-on tasks in a sprint**. They're the ones that get the work done. With five to seven members, teams typically have a variety of skill sets: any role that helps complete the sprint goal, from design to engineering. - - - Strong scrum teams are self-organizing and approach their projects with an evident ‘we’ attitude. All team members help one another to ensure a successful sprint completion. - - Their responsibilities are to: - 1. Get the work done - 2. Drive the sprint planning and goal setting - 3. Forecast how much work they can complete - ---- - -## **Summarization** - -- Before a **sprint** begins, the **product owner** looks at the **product backlog** and determines which work items are the highest priority. - -- Then, the **scrum master** leads a team-wide **sprint planning** meeting to pull work items from the **product backlog** to the **sprint backlog**. These are the work items the team will complete in the upcoming sprint. - -- The two-week sprint starts, and **team members** move their work items across the **scrum board**. Then, every day, the team meets for a short 15-minute **daily stand-up** where they share progress and address any blockers. - -- At the end of the two weeks, the team met their **sprint goal** by delivering a **completed product increment**. Next, they host a **sprint review** meeting to share their work with stakeholders and gather feedback. Then, they have a retrospective meeting to discuss what they learned and what can be improved for future sprints. - +- [**What is scrum?**](#what-is-scrum) +- [**Overview**](#overview) +- [**What's a sprint?**](#whats-a-sprint) +- [**What are artifacts, events, and roles?**](#what-are-artifacts-events-and-roles) +- [**What are the scrum artifacts?**](#what-are-the-scrum-artifacts) +- [**What are the scrum events?**](#what-are-the-scrum-events) +- [**Who's on the scrum team?**](#whos-on-the-scrum-team) +- [**Summarization**](#summarization) + +--- + +## **What is scrum?** + +> ### **Scrum is a popular agile framework.** + +**Scrum** is **focused on following a set of rules** and **delivering in time-boxed increments**. It encourages teams to self-organize and continuously improve. + +--- + +## **Overview** + +![scrum_overview](https://i.postimg.cc/yNGNBkzR/SCRUM-overview.png) + +--- + +## **What's a sprint?** + +- The first part of the cycle to explore is sprints. In scrum, **the team delivers work incrementally in short**, **time-boxed cycles called sprints**. A sprint duration can be between one and four weeks long, depending on the team. +- Sprints help break down a project into **manageable**, **bite-sized tasks**. This way, the team has the flexibility to reprioritize tasks as the project changes. + +--- + +## **What are artifacts, events, and roles?** + +> ### **They're critical components of the scrum framework.** + +Compared to kanban, scrum is more **rigid** and **prescriptive**. It has specific **artifacts**, **events**, and **roles** your team must practice. These can all be customized and adapted, but many teams aim to follow the original scrum framework closely. Let's take a closer look at them. + +--- + +## **What are the scrum artifacts?** + +**Artifacts** are items that provide key information to make the sprint cycle successful. + +1. `Product Backlog` is the primary list of work that needs to get done. This is usually a long list of features, requirements, and fixes. It is, essentially, the entire team’s to do list. The product backlog is used as an input to decide what to work on for the next sprint. + +2. The `sprint backlog` is the list of items to be completed in the current sprint cycle. The highest priority items from the product backlog are pulled into the `sprint backlog`. + +3. The `completed increment` is the releasable product delivered at the end of a sprint. Typically, this is all the work that aligns with the sprint goal the team set at the beginning. Sometimes the `completed increment` is shipped to customers and shared with the world. Other times, the increment is meant only for internal audiences. Once the completed increment is delivered, the team is ready to start a new sprint cycle. + +--- + +## **What are the scrum events?** + +- Scrum `events`, also called **ceremonies**, are full-team meetings to ensure everyone is in sync. + +- Each team approaches scrum events differently. Some teams find that doing all the events is too repetitive, while others find them 100% necessary. Ask your team lead or scrum master how your team approaches events. + +> ### Below are the different ceremonies in Scrum: + +1. `Sprint Planning meeting` is to plan the work to be completed in the upcoming sprint and determine a sprint goal. + - Work items are pulled from the **product backlog** to the **sprint backlog** in the meeting. At the end of the session, everyone on the team must be clear on the **sprint goal** and the tasks to be completed. + + ![SCRUM_sprint_planning](https://i.postimg.cc/R0KYCDkT/SCRUM-sprint-planning.png) + +2. `Daily Stand-Up` The daily stand-up (or daily scrum) is a short meeting for team members to share progress and voice concerns about blockers. + - Typically 15 minutes long, the goal is to make sure everyone is on the same page. + + - Some example questions team members may answer in the daily scrum are: + 1. _What did I complete yesterday?_ + 2. _What do I plan to complete today?_ + 3. _Are there any blockers?_ + + - Every team approaches stand-ups differently. Some teams prefer to meet in person every day. Others prefer to connect async in Slack or Teams. + + ![SCRUM_daily_standup](https://i.postimg.cc/mg8DXmX8/SCRUM-daily-standup.png) + +3. `Sprint Review` is a meeting at the end of the sprint where the team shares a demonstration of the work completed, often related to the **sprint goal**. + + - This meeting is often open to a broad audience of stakeholders who review and ask questions about the work. + + - It's also where ideas for the next sprint start to form. + + ![SCRUM_sprint_review](https://i.postimg.cc/jSG9bbF5/SCRUM-sprint-review.png) + +4. The `Retrospective` is an internal meeting after a sprint ends for the team to reflect on what worked well and what needs to be improved in the next sprint, including the project, people, tools, and events. + - The goal is to create a safe space for everyone to share their honest feedback, helping drive continuous improvement with every sprint cycle. + + ![SCRUM_retrospective](https://i.postimg.cc/htfWnM4C/SCRUM-retrospective.png) + +--- + +## **Who's on the scrum team?** + +- The people on the team bring the scrum framework to life. There are specific **roles** that should be on every scrum team. + +- Each scrum team should have **one product owner, one scrum master, and five to seven development team members.** + +> ### Below are the different roles and their responsibilities in Scrum: + +1. `Product owners` understand the business, customer expectations, and market trends. They set the vision for the product and ensure the development team delivers the most value to the company. Each scrum team has only one product owner. + + - Their responsibilities are to: + 1. Craft the product vision + 2. Build, manage, and prioritize the product backlog + 3. Provide clear guidance on which features to deliver next + 4. Decide when to ship the product + +2. `Scrum masters` **ensure the team is operating efficiently and in alignment with the scrum process.** They coach teams, product owners, and the business on the scrum process, and look for ways to fine-tune their practice of it. Each scrum team has only one scrum master. + + - Their responsibilities are to: + 1. Run sprint planning meetings + 2. Facilitate daily stand-ups + 3. Conduct retrospective meetings + 4. Administer the scrum board + 5. Meet 1:1 with team members as needed + 6. Help eliminate blockers through workflow improvements + +3. The `development team` **is the group that completes the hands-on tasks in a sprint**. They're the ones that get the work done. With five to seven members, teams typically have a variety of skill sets: any role that helps complete the sprint goal, from design to engineering. + + - Strong scrum teams are self-organizing and approach their projects with an evident ‘we’ attitude. All team members help one another to ensure a successful sprint completion. + - Their responsibilities are to: + 1. Get the work done + 2. Drive the sprint planning and goal setting + 3. Forecast how much work they can complete + +--- + +## **Summarization** + +- Before a **sprint** begins, the **product owner** looks at the **product backlog** and determines which work items are the highest priority. + +- Then, the **scrum master** leads a team-wide **sprint planning** meeting to pull work items from the **product backlog** to the **sprint backlog**. These are the work items the team will complete in the upcoming sprint. + +- The two-week sprint starts, and **team members** move their work items across the **scrum board**. Then, every day, the team meets for a short 15-minute **daily stand-up** where they share progress and address any blockers. + +- At the end of the two weeks, the team met their **sprint goal** by delivering a **completed product increment**. Next, they host a **sprint review** meeting to share their work with stakeholders and gather feedback. Then, they have a retrospective meeting to discuss what they learned and what can be improved for future sprints. + - And, that's it! The team is ready to repeat the scrum cycle all over again. \ No newline at end of file diff --git a/TuxTechBlogs/docs/topic/19.0. Scrum/01. Scrum With Jira.md b/TuxTechBlogs/docs/topic/19.0. Scrum/01. Scrum With Jira.md index 3e8b520..cf57852 100644 --- a/TuxTechBlogs/docs/topic/19.0. Scrum/01. Scrum With Jira.md +++ b/TuxTechBlogs/docs/topic/19.0. Scrum/01. Scrum With Jira.md @@ -1,95 +1,95 @@ -> # Scrum board via Jira Software - -## **What's a scrum board?** - -> **Like kanban, scrum also uses a board to manage work items.** - -- The difference is that a kanban board has a continuous flow of work items and a scrum board has an estimated set of work items based on a time-boxed sprint cycle. - -- **As a team member, it's your responsibility to update the scrum board and use it to communicate.** Make sure you stay actively engaged with your board every day so your team is aware of the progress.` - -- To access your scrum board in Jira Software, navigate to the left sidebar and select Active sprints. - ![SCRUM_active_sprints](https://i.postimg.cc/4yDt3Wkz/SCRUM-active-sprints.gif) - - > If you don't see an **Active Sprints** or **Sprints** option in your sidebar, you might be in a kanban board. You may need to change to a different board, or your team may not have a scrum board yet. - ---- - -## **What's your workflow?** - -- Now that you're viewing your team's board, take a look at the columns to identify your workflow. Every team uses a custom workflow, so yours may look different than the example below. - -- Spend some time with your workflow and understand the criteria to move work items across each of the columns. - -- Examine your board columns to understand your team's workflow. - ![SCRUM_workflow](https://i.postimg.cc/yNGNBkzR/SCRUM-overview.png) - ---- - -## **When does your sprint start and end?** - -- **Your scrum board gives you key information about your sprints**. First, are the number of days remaining in your sprint. This helps you plan and prioritize your work. - -- Toward the top right of your board, the tool shows you how many days are remaining in your current sprint. Hover your cursor over the days remaining and it provides the exact start and end date of your current sprint. - -- _To see the sprint start and end date, hover over the days remaining._ - - ![SRCUM_start_to_end](https://i.postimg.cc/RZzK5pTm/SCRUM-start-to-end.gif) - -## **What's in your backlog?** - -- **Your backlog holds the work items for future sprints**. In your planning meetings, you'll rank issues based on their importance or urgency. - -To access your backlog, navigate to the project sidebar and select **Backlog**. This will bring you to a list of issues. You can drag and drop issues to different sprints in the backlog, depending on their importance. - -- _Below is shown how to find your backlog in Jira Software._ - - ![SCRUM_backlog](https://i.postimg.cc/VNkgrsH4/SCRUM-backlog.gif) - - -## **Let's consider an example.** - -> ### **How does this software development team use scrum?** - -**IceStream** is an iOS app that recommends movies to watch based on your ice cream preferences. The company uses the scrum framework to manage its software development work. The scrum team has six people: - -1. **Sonia:** product owner -2. **Kimball:** scrum master -3. **Ahmed:** UX designer -4. **Mike:** software developer -5. **Isabelle:** software developer -6. **Luis:** software developer - -- _Below explained how this team works._ - - > **Planning** - - - Before the new sprint starts, Sonia, the **product owner**, looks at customer feedback. Adding a new share button seems to be the most requested feature. Sonia moves this work to the top of the **product backlog**. - - - Kimball, the **scrum master**, gathers the whole team for a **sprint planning meeting**. They discuss the new share button, create the tasks, and assign the tasks to the relevant team member. The group decides the **sprint goal** should be to deliver a working version of the share button in the app. - - - Then, it's time to get to work! The two-week sprint begins, and Mike, Isabelle, Luis, and Ahmed start working on their tasks. - - ![SCRUM_planning_diagram](https://i.postimg.cc/1zXzLDbP/SCRUM-planning-diagram.png) - - > **Stand-UP** - - - On the fourth day of the sprint, Luis raises a problem at the **daily stand-up** a code error! He tried everything to fix it but ran out of ideas. - - - Kimball, the **scrum master**, suggests Luis and Isabelle spend some time digging into the problem. Isabelle has more experience in this area and can probably help. - - - Luis and Isabelle schedule a 45-minute call together. They talk through the problem and find a solution to move forward. Great job, Isabelle! - - ![SCRUM_stand-up_diagram](https://i.postimg.cc/d19SrTtk/SCRUM-stand-up-diagram.png) - - > **Review And Retro** - - - At the end of the two weeks, the sprint is complete. The team met their **sprint goal** and delivered a working version of the share button. - - - Everyone on the dev team takes turns presenting the share button at the **sprint review**. They show its functionality and the reason why this was the top priority for this sprint. - - - The final step is a **retrospective** of what the team learned and what can be improved. Ahmed suggested more communication is needed, as he didn't think he have enough information when key decisions were being made. Kimball documents this feedback and considers ways for the team to improve for the next sprint. - - - Successful sprint cycle! Now the team is ready to do it all over again. Sonia opens the **product backlog** and looks for the next high-priority items. - +> # Scrum board via Jira Software + +## **What's a scrum board?** + +> **Like kanban, scrum also uses a board to manage work items.** + +- The difference is that a kanban board has a continuous flow of work items and a scrum board has an estimated set of work items based on a time-boxed sprint cycle. + +- **As a team member, it's your responsibility to update the scrum board and use it to communicate.** Make sure you stay actively engaged with your board every day so your team is aware of the progress.` + +- To access your scrum board in Jira Software, navigate to the left sidebar and select Active sprints. + ![SCRUM_active_sprints](https://i.postimg.cc/4yDt3Wkz/SCRUM-active-sprints.gif) + + > If you don't see an **Active Sprints** or **Sprints** option in your sidebar, you might be in a kanban board. You may need to change to a different board, or your team may not have a scrum board yet. + +--- + +## **What's your workflow?** + +- Now that you're viewing your team's board, take a look at the columns to identify your workflow. Every team uses a custom workflow, so yours may look different than the example below. + +- Spend some time with your workflow and understand the criteria to move work items across each of the columns. + +- Examine your board columns to understand your team's workflow. + ![SCRUM_workflow](https://i.postimg.cc/yNGNBkzR/SCRUM-overview.png) + +--- + +## **When does your sprint start and end?** + +- **Your scrum board gives you key information about your sprints**. First, are the number of days remaining in your sprint. This helps you plan and prioritize your work. + +- Toward the top right of your board, the tool shows you how many days are remaining in your current sprint. Hover your cursor over the days remaining and it provides the exact start and end date of your current sprint. + +- _To see the sprint start and end date, hover over the days remaining._ + + ![SRCUM_start_to_end](https://i.postimg.cc/RZzK5pTm/SCRUM-start-to-end.gif) + +## **What's in your backlog?** + +- **Your backlog holds the work items for future sprints**. In your planning meetings, you'll rank issues based on their importance or urgency. + +To access your backlog, navigate to the project sidebar and select **Backlog**. This will bring you to a list of issues. You can drag and drop issues to different sprints in the backlog, depending on their importance. + +- _Below is shown how to find your backlog in Jira Software._ + + ![SCRUM_backlog](https://i.postimg.cc/VNkgrsH4/SCRUM-backlog.gif) + + +## **Let's consider an example.** + +> ### **How does this software development team use scrum?** + +**IceStream** is an iOS app that recommends movies to watch based on your ice cream preferences. The company uses the scrum framework to manage its software development work. The scrum team has six people: + +1. **Sonia:** product owner +2. **Kimball:** scrum master +3. **Ahmed:** UX designer +4. **Mike:** software developer +5. **Isabelle:** software developer +6. **Luis:** software developer + +- _Below explained how this team works._ + + > **Planning** + + - Before the new sprint starts, Sonia, the **product owner**, looks at customer feedback. Adding a new share button seems to be the most requested feature. Sonia moves this work to the top of the **product backlog**. + + - Kimball, the **scrum master**, gathers the whole team for a **sprint planning meeting**. They discuss the new share button, create the tasks, and assign the tasks to the relevant team member. The group decides the **sprint goal** should be to deliver a working version of the share button in the app. + + - Then, it's time to get to work! The two-week sprint begins, and Mike, Isabelle, Luis, and Ahmed start working on their tasks. + + ![SCRUM_planning_diagram](https://i.postimg.cc/1zXzLDbP/SCRUM-planning-diagram.png) + + > **Stand-UP** + + - On the fourth day of the sprint, Luis raises a problem at the **daily stand-up** a code error! He tried everything to fix it but ran out of ideas. + + - Kimball, the **scrum master**, suggests Luis and Isabelle spend some time digging into the problem. Isabelle has more experience in this area and can probably help. + + - Luis and Isabelle schedule a 45-minute call together. They talk through the problem and find a solution to move forward. Great job, Isabelle! + + ![SCRUM_stand-up_diagram](https://i.postimg.cc/d19SrTtk/SCRUM-stand-up-diagram.png) + + > **Review And Retro** + + - At the end of the two weeks, the sprint is complete. The team met their **sprint goal** and delivered a working version of the share button. + + - Everyone on the dev team takes turns presenting the share button at the **sprint review**. They show its functionality and the reason why this was the top priority for this sprint. + + - The final step is a **retrospective** of what the team learned and what can be improved. Ahmed suggested more communication is needed, as he didn't think he have enough information when key decisions were being made. Kimball documents this feedback and considers ways for the team to improve for the next sprint. + + - Successful sprint cycle! Now the team is ready to do it all over again. Sonia opens the **product backlog** and looks for the next high-priority items. + ![SCRUM_review_and_retro_diagram](https://i.postimg.cc/PJt9RQFQ/SCRUM-review-and-retro-diagram.png) \ No newline at end of file diff --git a/TuxTechBlogs/docs/topic/4.0. DevOps/00. Introduction.md b/TuxTechBlogs/docs/topic/4.0. DevOps/00. Introduction.md index 5146165..c529613 100644 --- a/TuxTechBlogs/docs/topic/4.0. DevOps/00. Introduction.md +++ b/TuxTechBlogs/docs/topic/4.0. DevOps/00. Introduction.md @@ -1,221 +1,221 @@ -
- Banner -
- - -# **♾️DevOps** - -DevOps Roadmap, Resources & Study Materials - -- [Mindset](#mindset) -- [Defination Of DevOps](#defination-of-devops) -- [Branches](#branches) -- [Prerequisite](#prerequisite) -- [Oppportunities And Salary](#opportunities-and-salary) -- [Resouces To Study And Learn](#resouces-to-study-and-learn) -- [Techniques For Interview And Jobs ](#techniques-for-interview-and-jobs) -- [Websites To Apply For Jobs](#websites-to-apply-for-jobs) -- [FAQs](#faqs) - -## **🧠 Mindset** - ->🔥 I have learnt devops from internet without spending a single penny. These below points has worked for me pretty fine. - ->🔥 I had always interest towards troubleshooting systems, Operating system upgrade/reimage, reading tech vlogs, study and follow people from different socia media platfroms, which helped to be hungry for developing new skills. - -> 🔥 DevOps doamin does'nt keep you in a static technology stack,which I think is the best for your carrier growth. - -> 🔥 Learn something daily in the area of interest so that you can compund that knowledge over time. - -> 🔥 Start as a zero and learn still you are able to master it. - -> 🔥 Be hungry to learn, make your self a learner for life. - -> 🔥 Take part in open-souce conferences. - -## **📜 Defination of DevOps** - -> **💡Note** -> -> DevOps is a set of practices that combines software development and IT operations. It aims to shorten the systems development life cycle and provide continuous delivery with high software quality. - -- DevOps is complementary with Agile software development. -- Several DevOps aspects came from the **Agile methodology.** - -## **🌵 Branches** - -DevOps can be divided into two different more niche domain. And the sub-domains under devops require interest over network, hacking and securiy. - -- **DevOpsSec**, i.e. DevOps With Security -- **OpsSec**, i.e. Oprations Security - -Please do your own reseach for these subdomains, if you find any of them interesting. - - -## **⚗️ Prerequisite** - -All the mentioned list item requires basic overall knowledge - -1. Software Developement Life Cycle -2. Operating System -3. Linux Administration -4. Networking -5. Programming Language : C++/Java -6. Scripting Language : Python/ Shell Scripting / Windows Batch Scripting -7. Servers, VMs, WSL (Windows Subsystem Linux) -8. Basics of System Design. i.e. how to scale a application from sractch. -9. Version Control System (Git/Github, SVN ) -10. Building a code base, build tools, IDE, IaaS, IaaC -11. Automation -12. Cloud (GCP/ AWS/ Azure), PaaS -13. DataBase (SQL, NoSQL) - -## **🎒 Oppportunities And Salary** - -- One thing to keep in mind, that experienced DevOps engineers are getting their cloud certification as the world is moving towards cloud. So if you want to be in a better positon, my suggestion will be to have some cloud knowledge to land in a better job. -- Let's hear from people, who are actually done the transition to devops and happliy working on the domain: - - - [![Salary And Compensation for DevOps By Kunal Kushwaha](https://img.youtube.com/vi/r40DtAzZvcY/mqdefault.jpg)](https://www.youtube.com/watch?v=r40DtAzZvcY) - [![QA to DevOps](https://img.youtube.com/vi/thLVD5vtJKE/mqdefault.jpg)](https://www.youtube.com/watch?v=thLVD5vtJKE) - [![Highly Paid Domain](https://img.youtube.com/vi/ybAY-q4-d9Q/mqdefault.jpg)](https://www.youtube.com/watch?v=ybAY-q4-d9Q) - [![DevOps International Opportunities](https://img.youtube.com/vi/bTMVj6DPdnY/mqdefault.jpg)](https://www.youtube.com/watch?v=bTMVj6DPdnY) - [![DevOps International Opportunities](https://img.youtube.com/vi/xcxrp5sEBtI/mqdefault.jpg)](https://www.youtube.com/watch?v=xcxrp5sEBtI) - - -## **👨‍💻 Resouces To Study And Learn** - -Most of the resources are free. But there is in anthing paid found from the links, please do a market reseach before spending a single penny. - - -### **✨ Videos To Start Growing Your Interest** - -#### *What is Devops ?* - -| `Videos` | -|:-- | -|[![Introduction To DevOps By SimpliLearn](https://img.youtube.com/vi/Xrgk023l4lI/mqdefault.jpg)](https://www.youtube.com/watch?v=Xrgk023l4lI)| -|[![Introduction To DevOps by Hitesh](https://img.youtube.com/vi/_Gpe1Zn-1fE/mqdefault.jpg)](https://www.youtube.com/watch?v=_Gpe1Zn-1fE)| -|[![Introduction To DevOps by SimpliLearn](https://img.youtube.com/vi/Me3ea4nUt0U/mqdefault.jpg)](https://www.youtube.com/watch?v=Me3ea4nUt0U)| - -#### *What is DevOpsSec ?* - -| `Title` | `Video` | -|:--|:--| -| Introduction To DevSecOps | [![Introduction To DevSecOps](https://img.youtube.com/vi/nrhxNNH5lt0/mqdefault.jpg)](https://www.youtube.com/watch?v=nrhxNNH5lt0) | -| Define DevSecOPs | [![Introduction To DevSecOps](https://img.youtube.com/vi/iaafAnFX_0E/mqdefault.jpg)](https://www.youtube.com/watch?v=iaafAnFX_0E) | - -#### *What is OpsSec ?* - -| `Title` | `Video` | -|:--|:--| -| Introduction To OpsSec | [![Introduction To DevSecOps](https://img.youtube.com/vi/X59NFibpQu4/mqdefault.jpg)](https://www.youtube.com/watch?v=X59NFibpQu4) | -| OpsSec in 1 Minute | [![Introduction To DevSecOps](https://img.youtube.com/vi/jp2o-56SzdM/mqdefault.jpg)](https://www.youtube.com/watch?v=jp2o-56SzdM) | - -### **YouTube Channels** - -- *Learning Channels* - - [Edureka!](https://www.youtube.com/c/edurekaIN) - - [SimpliLearn](https://www.youtube.com/c/SimplilearnOfficial) - - [DevOps Journey](https://www.youtube.com/channel/UC4Snw5yrSDMXys31I18U3gg) - - [FreeCodeCamp.Org](https://www.youtube.com/c/Freecodecamp) - - [Abhishek Viremalla](https://www.youtube.com/AbhishekVeeramalla) - - [Kunal Kushwaha](https://www.youtube.com/KunalKushwaha) - - [TechWorld With NaNa](https://www.youtube.com/TechWorldwithNana) - -- *DevOps Individual as YouTube Vloger* - - [Kunal Kushwaha](https://www.youtube.com/c/KunalKushwaha) - - [DevOps Directive](https://www.youtube.com/channel/UC4MdpjzjPuop_qWNAvR23JA) - - [TechWorldwithNana](https://www.youtube.com/c/TechWorldwithNana) - -- *RoadMap Video* - - [DevOps Roadmap 2022](https://www.youtube.com/watch?v=9pZ2xmsSDdo) - - [DevOps 0 to 100 Complete Guidance](https://www.youtube.com/watch?v=dhJR0YUM3Dg) - -- *Archive* - - [GFG](https://www.geeksforgeeks.org/tag/devops/) - - -### **🎓 BootCamps** - -- [ 🔥DevOps BootCamp by **Kunal Kushwaha**](https://www.youtube.com/playlist?list=PL9gnSGHSqcnoqBXdMwUTRod4Gi3eac2Ak) -- [ 🔥DevOps Zero to Hero by **Abhishek Viramalla**](https://youtube.com/playlist?list=PLdpzxOOAlwvIKMhk8WhzN1pYoJ1YU8Csa&si=lgC2FaV_uqCgSBtu) -- [ 🔥 Full 11 Hours DevOps Tutorial by **Edureka!** ](https://www.youtube.com/watch?v=S_0q75eD8Yc) -- [ 🔥 DevOps Tutorial For Beginners by **Simplilearn** ](https://youtube.com/playlist?list=PLEiEAq2VkUUJS6zkGgXeWw9l32EwRoYdR) -- [ 🔥 DevOps Engineering Course for Beginners by **FreeCodeCamp.Org** ](https://www.youtube.com/watch?v=j5Zsa_eOXeY) - -### **Github Repos** - -- [90 Days Of DevOps by Michael Cade](https://github.com/MichaelCade/90DaysOfDevOps) -- [DevOps Guide by Tikam2](https://github.com/Tikam02/DevOps-Guide) - -### **List Of Skills & Tools for DevOps Industry** - -[![Introduction To DevSecOps](https://img.youtube.com/vi/1pPHdvrUunY/mqdefault.jpg)](https://www.youtube.com/watch?v=1pPHdvrUunY) - -### **Communities** - -- [Community Classrooms](https://www.commclassroom.org/home) -- [Discord DevOps Community Servers](https://disboard.org/servers/tag/devops) -- [DevOps Community in Reddit](https://www.reddit.com/r/devops/) - -### **Techniques For Interview And Jobs** - -1. *Tips & Strategy* - - | `Title` | `Video` | - | :-- | :-- | - | FIVE things to Crack DevOps Interview | [![FIVE things to Crack DevOps Interview](https://img.youtube.com/vi/qUu7FzRo7p4/mqdefault.jpg)](https://www.youtube.com/watch?v=qUu7FzRo7p4) | - | How do I prepare for Cloud or DevOps Interviews? | [![How do I prepare for Cloud or DevOps Interviews?](https://img.youtube.com/vi/JYAA2G-muZY/mqdefault.jpg)](https://www.youtube.com/watch?v=JYAA2G-muZY) | - | Devops Interview Questions by Simplilearn | [![Devops Interview Questions by Simplilearn](https://img.youtube.com/vi/WxjJlYFIWtI/mqdefault.jpg)](https://www.youtube.com/watch?v=WxjJlYFIWtI) | - | DevOps Interview Questions by Edureka | [![DevOps Interview Questions by Edureka](https://img.youtube.com/vi/clZgb8GA6xI/mqdefault.jpg)](https://www.youtube.com/watch?v=clZgb8GA6xI) | - | DevOps Interview Questions by Intellipaat | [![DevOps Interview Questions by Intellipaat](https://img.youtube.com/vi/oG8I8kds8rI/mqdefault.jpg)](https://www.youtube.com/watch?v=oG8I8kds8rI) | - -2. *Interview Question Dumps* - - - [Interviewbit DevOps Interview Questions](https://www.interviewbit.com/devops-interview-questions/) - - [Edureka! DevOps Interview Questions](https://www.edureka.co/blog/interview-questions/top-devops-interview-questions-2016/) - - -### **Websites To Apply For Jobs** - -1. Remote - - [Arc()](https://arc.dev/) - - [Turing.com](https://www.turing.com) - - [AngleList](https://angel.co/) - - [Remote](https://remote.com/) - - [We Work Remotely](https://weworkremotely.com/) - - [Twitter](https://twitter.com) - - [Reddit](https://www.reddit.com/r/devopsjobs/) -2. Physical Jobs - - LinkedIn - - Referals - - Off Campus Hiring - - Naurki - -### **Use These Tools To Maximize Of Getting Selected :** - -1. *Resume ATS Tool* - - This tool is a exactly what companies use to filter out potential candidates from huge pile of application : [ResumeWorded.com](https://resumeworded.com/) -2. Crome Extension - - AI enabled Job applying tool : [Jobseer.ai](https://jobseer.ai/) -3. *Resume Creating Websites* - - Google Docs - - LinkedIn By default create a resume based on what you have written on your linkedin profile. - - [Overleaf](https://www.overleaf.com/) - - [FlowCV.io](https://flowcv.io/) -4. **Check Salary Range Of Any Job of Any Company, Check :** [AmbitionBox](https://www.ambitionbox.com) - - -### **FAQs** - -1. What is DevOps, DevOpsSec, OpsSec? -2. What are thre prerequisites for getting into devops? -3. What is the growth into devops ? And salary into DevOps ? -4. What are the resources to learn devops ? -5. How to apply for a devops engineer remote and physical jobs? -6. How is the community of DevOps ? - - - - +
+ Banner +
+ + +# **♾️DevOps** + +DevOps Roadmap, Resources & Study Materials + +- [Mindset](#mindset) +- [Defination Of DevOps](#defination-of-devops) +- [Branches](#branches) +- [Prerequisite](#prerequisite) +- [Oppportunities And Salary](#opportunities-and-salary) +- [Resouces To Study And Learn](#resouces-to-study-and-learn) +- [Techniques For Interview And Jobs ](#techniques-for-interview-and-jobs) +- [Websites To Apply For Jobs](#websites-to-apply-for-jobs) +- [FAQs](#faqs) + +## **🧠 Mindset** + +>🔥 I have learnt devops from internet without spending a single penny. These below points has worked for me pretty fine. + +>🔥 I had always interest towards troubleshooting systems, Operating system upgrade/reimage, reading tech vlogs, study and follow people from different socia media platfroms, which helped to be hungry for developing new skills. + +> 🔥 DevOps doamin does'nt keep you in a static technology stack,which I think is the best for your carrier growth. + +> 🔥 Learn something daily in the area of interest so that you can compund that knowledge over time. + +> 🔥 Start as a zero and learn still you are able to master it. + +> 🔥 Be hungry to learn, make your self a learner for life. + +> 🔥 Take part in open-souce conferences. + +## **📜 Defination of DevOps** + +> **💡Note** +> +> DevOps is a set of practices that combines software development and IT operations. It aims to shorten the systems development life cycle and provide continuous delivery with high software quality. + +- DevOps is complementary with Agile software development. +- Several DevOps aspects came from the **Agile methodology.** + +## **🌵 Branches** + +DevOps can be divided into two different more niche domain. And the sub-domains under devops require interest over network, hacking and securiy. + +- **DevOpsSec**, i.e. DevOps With Security +- **OpsSec**, i.e. Oprations Security + +Please do your own reseach for these subdomains, if you find any of them interesting. + + +## **⚗️ Prerequisite** + +All the mentioned list item requires basic overall knowledge + +1. Software Developement Life Cycle +2. Operating System +3. Linux Administration +4. Networking +5. Programming Language : C++/Java +6. Scripting Language : Python/ Shell Scripting / Windows Batch Scripting +7. Servers, VMs, WSL (Windows Subsystem Linux) +8. Basics of System Design. i.e. how to scale a application from sractch. +9. Version Control System (Git/Github, SVN ) +10. Building a code base, build tools, IDE, IaaS, IaaC +11. Automation +12. Cloud (GCP/ AWS/ Azure), PaaS +13. DataBase (SQL, NoSQL) + +## **🎒 Oppportunities And Salary** + +- One thing to keep in mind, that experienced DevOps engineers are getting their cloud certification as the world is moving towards cloud. So if you want to be in a better positon, my suggestion will be to have some cloud knowledge to land in a better job. +- Let's hear from people, who are actually done the transition to devops and happliy working on the domain: + + + [![Salary And Compensation for DevOps By Kunal Kushwaha](https://img.youtube.com/vi/r40DtAzZvcY/mqdefault.jpg)](https://www.youtube.com/watch?v=r40DtAzZvcY) + [![QA to DevOps](https://img.youtube.com/vi/thLVD5vtJKE/mqdefault.jpg)](https://www.youtube.com/watch?v=thLVD5vtJKE) + [![Highly Paid Domain](https://img.youtube.com/vi/ybAY-q4-d9Q/mqdefault.jpg)](https://www.youtube.com/watch?v=ybAY-q4-d9Q) + [![DevOps International Opportunities](https://img.youtube.com/vi/bTMVj6DPdnY/mqdefault.jpg)](https://www.youtube.com/watch?v=bTMVj6DPdnY) + [![DevOps International Opportunities](https://img.youtube.com/vi/xcxrp5sEBtI/mqdefault.jpg)](https://www.youtube.com/watch?v=xcxrp5sEBtI) + + +## **👨‍💻 Resouces To Study And Learn** + +Most of the resources are free. But there is in anthing paid found from the links, please do a market reseach before spending a single penny. + + +### **✨ Videos To Start Growing Your Interest** + +#### *What is Devops ?* + +| `Videos` | +|:-- | +|[![Introduction To DevOps By SimpliLearn](https://img.youtube.com/vi/Xrgk023l4lI/mqdefault.jpg)](https://www.youtube.com/watch?v=Xrgk023l4lI)| +|[![Introduction To DevOps by Hitesh](https://img.youtube.com/vi/_Gpe1Zn-1fE/mqdefault.jpg)](https://www.youtube.com/watch?v=_Gpe1Zn-1fE)| +|[![Introduction To DevOps by SimpliLearn](https://img.youtube.com/vi/Me3ea4nUt0U/mqdefault.jpg)](https://www.youtube.com/watch?v=Me3ea4nUt0U)| + +#### *What is DevOpsSec ?* + +| `Title` | `Video` | +|:--|:--| +| Introduction To DevSecOps | [![Introduction To DevSecOps](https://img.youtube.com/vi/nrhxNNH5lt0/mqdefault.jpg)](https://www.youtube.com/watch?v=nrhxNNH5lt0) | +| Define DevSecOPs | [![Introduction To DevSecOps](https://img.youtube.com/vi/iaafAnFX_0E/mqdefault.jpg)](https://www.youtube.com/watch?v=iaafAnFX_0E) | + +#### *What is OpsSec ?* + +| `Title` | `Video` | +|:--|:--| +| Introduction To OpsSec | [![Introduction To DevSecOps](https://img.youtube.com/vi/X59NFibpQu4/mqdefault.jpg)](https://www.youtube.com/watch?v=X59NFibpQu4) | +| OpsSec in 1 Minute | [![Introduction To DevSecOps](https://img.youtube.com/vi/jp2o-56SzdM/mqdefault.jpg)](https://www.youtube.com/watch?v=jp2o-56SzdM) | + +### **YouTube Channels** + +- *Learning Channels* + - [Edureka!](https://www.youtube.com/c/edurekaIN) + - [SimpliLearn](https://www.youtube.com/c/SimplilearnOfficial) + - [DevOps Journey](https://www.youtube.com/channel/UC4Snw5yrSDMXys31I18U3gg) + - [FreeCodeCamp.Org](https://www.youtube.com/c/Freecodecamp) + - [Abhishek Viremalla](https://www.youtube.com/AbhishekVeeramalla) + - [Kunal Kushwaha](https://www.youtube.com/KunalKushwaha) + - [TechWorld With NaNa](https://www.youtube.com/TechWorldwithNana) + +- *DevOps Individual as YouTube Vloger* + - [Kunal Kushwaha](https://www.youtube.com/c/KunalKushwaha) + - [DevOps Directive](https://www.youtube.com/channel/UC4MdpjzjPuop_qWNAvR23JA) + - [TechWorldwithNana](https://www.youtube.com/c/TechWorldwithNana) + +- *RoadMap Video* + - [DevOps Roadmap 2022](https://www.youtube.com/watch?v=9pZ2xmsSDdo) + - [DevOps 0 to 100 Complete Guidance](https://www.youtube.com/watch?v=dhJR0YUM3Dg) + +- *Archive* + - [GFG](https://www.geeksforgeeks.org/tag/devops/) + + +### **🎓 BootCamps** + +- [ 🔥DevOps BootCamp by **Kunal Kushwaha**](https://www.youtube.com/playlist?list=PL9gnSGHSqcnoqBXdMwUTRod4Gi3eac2Ak) +- [ 🔥DevOps Zero to Hero by **Abhishek Viramalla**](https://youtube.com/playlist?list=PLdpzxOOAlwvIKMhk8WhzN1pYoJ1YU8Csa&si=lgC2FaV_uqCgSBtu) +- [ 🔥 Full 11 Hours DevOps Tutorial by **Edureka!** ](https://www.youtube.com/watch?v=S_0q75eD8Yc) +- [ 🔥 DevOps Tutorial For Beginners by **Simplilearn** ](https://youtube.com/playlist?list=PLEiEAq2VkUUJS6zkGgXeWw9l32EwRoYdR) +- [ 🔥 DevOps Engineering Course for Beginners by **FreeCodeCamp.Org** ](https://www.youtube.com/watch?v=j5Zsa_eOXeY) + +### **Github Repos** + +- [90 Days Of DevOps by Michael Cade](https://github.com/MichaelCade/90DaysOfDevOps) +- [DevOps Guide by Tikam2](https://github.com/Tikam02/DevOps-Guide) + +### **List Of Skills & Tools for DevOps Industry** + +[![Introduction To DevSecOps](https://img.youtube.com/vi/1pPHdvrUunY/mqdefault.jpg)](https://www.youtube.com/watch?v=1pPHdvrUunY) + +### **Communities** + +- [Community Classrooms](https://www.commclassroom.org/home) +- [Discord DevOps Community Servers](https://disboard.org/servers/tag/devops) +- [DevOps Community in Reddit](https://www.reddit.com/r/devops/) + +### **Techniques For Interview And Jobs** + +1. *Tips & Strategy* + + | `Title` | `Video` | + | :-- | :-- | + | FIVE things to Crack DevOps Interview | [![FIVE things to Crack DevOps Interview](https://img.youtube.com/vi/qUu7FzRo7p4/mqdefault.jpg)](https://www.youtube.com/watch?v=qUu7FzRo7p4) | + | How do I prepare for Cloud or DevOps Interviews? | [![How do I prepare for Cloud or DevOps Interviews?](https://img.youtube.com/vi/JYAA2G-muZY/mqdefault.jpg)](https://www.youtube.com/watch?v=JYAA2G-muZY) | + | Devops Interview Questions by Simplilearn | [![Devops Interview Questions by Simplilearn](https://img.youtube.com/vi/WxjJlYFIWtI/mqdefault.jpg)](https://www.youtube.com/watch?v=WxjJlYFIWtI) | + | DevOps Interview Questions by Edureka | [![DevOps Interview Questions by Edureka](https://img.youtube.com/vi/clZgb8GA6xI/mqdefault.jpg)](https://www.youtube.com/watch?v=clZgb8GA6xI) | + | DevOps Interview Questions by Intellipaat | [![DevOps Interview Questions by Intellipaat](https://img.youtube.com/vi/oG8I8kds8rI/mqdefault.jpg)](https://www.youtube.com/watch?v=oG8I8kds8rI) | + +2. *Interview Question Dumps* + + - [Interviewbit DevOps Interview Questions](https://www.interviewbit.com/devops-interview-questions/) + - [Edureka! DevOps Interview Questions](https://www.edureka.co/blog/interview-questions/top-devops-interview-questions-2016/) + + +### **Websites To Apply For Jobs** + +1. Remote + - [Arc()](https://arc.dev/) + - [Turing.com](https://www.turing.com) + - [AngleList](https://angel.co/) + - [Remote](https://remote.com/) + - [We Work Remotely](https://weworkremotely.com/) + - [Twitter](https://twitter.com) + - [Reddit](https://www.reddit.com/r/devopsjobs/) +2. Physical Jobs + - LinkedIn + - Referals + - Off Campus Hiring + - Naurki + +### **Use These Tools To Maximize Of Getting Selected :** + +1. *Resume ATS Tool* + - This tool is a exactly what companies use to filter out potential candidates from huge pile of application : [ResumeWorded.com](https://resumeworded.com/) +2. Crome Extension + - AI enabled Job applying tool : [Jobseer.ai](https://jobseer.ai/) +3. *Resume Creating Websites* + - Google Docs + - LinkedIn By default create a resume based on what you have written on your linkedin profile. + - [Overleaf](https://www.overleaf.com/) + - [FlowCV.io](https://flowcv.io/) +4. **Check Salary Range Of Any Job of Any Company, Check :** [AmbitionBox](https://www.ambitionbox.com) + + +### **FAQs** + +1. What is DevOps, DevOpsSec, OpsSec? +2. What are thre prerequisites for getting into devops? +3. What is the growth into devops ? And salary into DevOps ? +4. What are the resources to learn devops ? +5. How to apply for a devops engineer remote and physical jobs? +6. How is the community of DevOps ? + + + + diff --git a/TuxTechBlogs/docs/topic/9.0. ITSM/00. Introduction.md b/TuxTechBlogs/docs/topic/9.0. ITSM/00. Introduction.md index def37f9..e6a5c5c 100644 --- a/TuxTechBlogs/docs/topic/9.0. ITSM/00. Introduction.md +++ b/TuxTechBlogs/docs/topic/9.0. ITSM/00. Introduction.md @@ -1,32 +1,32 @@ -
- ---- -- [**Introduction**](#introduction) -- [**What is IT Service Management (ITSM)?**](#what-is-it-service-management-itsm) -- [**What specifically are these 'IT services' that IT teams manage?**](#what-specifically-are-these-it-services-that-it-teams-manage) - ---- - -## **Introduction** - -1. ITSM is how IT teams manage the end-to-end delivery of IT services to their customers. -2. It includes all the processes and activities to design, create, deliver, and support IT services. -3. The core concept of ITSM is the belief that IT should be delivered as a service. -4. A typical ITSM scenario could involve asking for new hardware like a laptop. You would submit your request through a portal, filling out a ticket with all relevant information, and kicking off a repeatable workflow. Then, the ticket would land in the IT team’s queue, where incoming requests are sorted and addressed according to importance. - ---- - -## **What is IT Service Management (ITSM)?** - -People often misconstrue ITSM as basic IT support. On the contrary, ITSM teams oversee all kinds of workplace technologies, ranging from laptops to servers to business-critical software applications and Cloud services. - ---- - -## **What specifically are these 'IT services' that IT teams manage?** - -Think about a service as something that IT provides and supports for the business. It can be either external or internal facing. - -1. _External examples_: Online banking, food delivery or streaming services. -2. _Internal examples:_ A billing system, HR system, or cloud infrastructure. - +
+ +--- +- [**Introduction**](#introduction) +- [**What is IT Service Management (ITSM)?**](#what-is-it-service-management-itsm) +- [**What specifically are these 'IT services' that IT teams manage?**](#what-specifically-are-these-it-services-that-it-teams-manage) + +--- + +## **Introduction** + +1. ITSM is how IT teams manage the end-to-end delivery of IT services to their customers. +2. It includes all the processes and activities to design, create, deliver, and support IT services. +3. The core concept of ITSM is the belief that IT should be delivered as a service. +4. A typical ITSM scenario could involve asking for new hardware like a laptop. You would submit your request through a portal, filling out a ticket with all relevant information, and kicking off a repeatable workflow. Then, the ticket would land in the IT team’s queue, where incoming requests are sorted and addressed according to importance. + +--- + +## **What is IT Service Management (ITSM)?** + +People often misconstrue ITSM as basic IT support. On the contrary, ITSM teams oversee all kinds of workplace technologies, ranging from laptops to servers to business-critical software applications and Cloud services. + +--- + +## **What specifically are these 'IT services' that IT teams manage?** + +Think about a service as something that IT provides and supports for the business. It can be either external or internal facing. + +1. _External examples_: Online banking, food delivery or streaming services. +2. _Internal examples:_ A billing system, HR system, or cloud infrastructure. + It can change based on how the business works, and how IT is structured within that organizations. \ No newline at end of file diff --git a/TuxTechBlogs/docs/topic/9.0. ITSM/01. Key Terms.md b/TuxTechBlogs/docs/topic/9.0. ITSM/01. Key Terms.md index 6424a57..989a085 100644 --- a/TuxTechBlogs/docs/topic/9.0. ITSM/01. Key Terms.md +++ b/TuxTechBlogs/docs/topic/9.0. ITSM/01. Key Terms.md @@ -1,31 +1,31 @@ -- [**Key ITSM Terms**](#key-itsm-terms) -- [**Industry Terms**](#industry-terms) -- [**ITSM Terms**](#itsm-terms) - ---- - -## **Key ITSM Terms** - -You’ll come across a host of terms related to ITIL, ITSM, DevOps, and Digital Transformation. You'll need to have a working understanding of the terms below as you progress through this training. - ---- - -## **Industry Terms** -| **Industry Terms** | **Definition** | -| ---- | :----| -| `Digital Transformation` |**Digital Transformation** is the use of new, fast and frequently changing digital technology to solve problems. One of the examples of digital transformation is cloud computing. It reduces reliance on user owned hardware and increases reliance on subscription-based cloud services.| -| `DevOPs` | **DevOps** emphasizes accelerated IT service delivery enabled by agile and lean practices. DevOps improves collaboration between development and IT operations teams, so organizations can build, test, and release software faster and more reliably. The promised benefits include increased trust, faster software releases, an ability to solve critical issues quickly, and better management of unplanned work.| -|
  1. `Lean`
  2. `SAFe`
  3. `Agile`
  4. `Scrum`
|
  1. **Lean IT** involves a methodology of value-stream mapping — diagramming and analyzing services (value streams) into their component process steps and eliminating any steps (or even entire value streams) that do not deliver value.
  2. The **Scaled Agile Framework (SAFe)**, methodology is an agile framework for development teams built on three pillars: Team, Program, and Portfolio. It is designed not so much as a single methodology, but as a broad knowledge base of proven best practices that real teams have used to deliver successful software products.
  3. **Agile methodology** is a practice that promotes continuous iteration of development and testing throughout the software development lifecycle of the project. Both development and testing activities are concurrent unlike the Waterfall model. Agile software development emphasizes on four core values.
  4. **Scrum** is an agile process framework for managing complex knowledge work, with an initial emphasis on software development, although it has been used in other fields and is slowly starting to be explored for other complex work, research and advanced technologies.
| -|
  1. `AWS`
  2. `Microsoft Azure`
  3. `Google Cloud Platform`
|
  1. **Amazon Web Services (AWS)** is a subsidiary of Amazon that provides on-demand cloud computing platforms and APIs to individuals, companies, and governments, on a metered pay-as-you-go basis.
  2. **Microsoft Azure** is a cloud computing service created by Microsoft for building, testing, deploying, and managing applications and services through Microsoft-managed data centers.
  3. **Google Cloud Platform**, offered by Google, is a suite of cloud computing services that runs on the same infrastructure that Google uses internally for its end-user products, such as Google Search, Gmail and YouTube
| -| `I&O ( Infrastructure & Operations )`| **Infrastructure and Operations (1&0)** manages the ITS data centers and provides around-the-clock support for ITS business computing activities. | - ---- - -## **ITSM Terms** -| **ITSM Terms** | **Definition** | -| :----: | :---- | -|
  1. `Service Request`
  2. `Incident Management`
  3. `Problem Management`
  4. `Knowledge and Asset Management`
  5. `Change Enablement ( Formerly known as Change Management )`
  6. `Configuration and Database Management ( CMDB )`
|
  1. **Service Request Management** is a repeatable procedure for handling the wide variety of customer service requests, like requests for access to applications, software enhancements, and hardware updates. The service request workstream often involves recurring requests and benefits greatly from enabling customers with knowledge and automating certain tasks.
  2. **Incident Management** is the practice of managing unplanned events that disrupt or reduce the quality of a service. It requires an emergency response from the IT team.
  3. **Problem Management** is the practice of identifying and managing the causes of incidents on an IT service. It is a core component of ITSM frameworks.
  4. **Knowledge Management** is the practice of creating, curating, sharing, using, and managing knowledge across an organization and even across industries. **IT Asset Management (also known as ITAM)** is the process of ensuring an organization’s assets are accounted for, deployed, maintained, upgraded, and disposed of when the time comes. Put simply, it’s making sure that the valuable items, tangible and intangible, in your organization are tracked and being used.
  5. **Change Enablement** is an IT practice designed to minimize disruptions to IT services while making changes to critical systems and services. A change is adding, modifying, or removing anything that could have a direct or indirect effect on services.
  6. According to ITIL 4, a **configuration management database (CMDB)** “is used to store configuration records throughout their lifecycle and maintain the relationships between them. In other words, your CMDB stores information on the configuration of items within an organization, including hardware, software, systems, facilities, and sometimes personnel. It is the purview of the IT organization to define which items should be tracked and how to do so. This configuration data can include relationships and interdependencies between items, the history of changes to each item, and class and attributes—such as type, owner, and importance—for each item.
| -|
  1. `Self-Service`
  2. `Shift-left`
|
  1. As users come to depend on self-service applications to find answers or ask for help in their daily lives, these expectations for self-service are now being applied to IT organizations. Self-service isn't a new concept, either. We see it in our everyday lives, from self-checkout lines to using an ATM. And now, finding answers is easier than ever with the power of search engines.
  2. The ability to **"shift-left"** and deliver quality self-service is a top priority for many IT organizations today. Increasing support consist Level Three, Two, One, Zero Support. Shift left (lower cost & improved user satisfaction)
| -|`Always-On-Service`| A Service which is consumed/ available to consumers to be consumed anytime 24X7, 365 days. | -|
  1. `ITIL`
  2. `ITIL4`
|
  1. **ITIL** is the most widely accepted approach to ITSM. ITIL focuses on practices for aligning IT services with business needs. ITIL can help organizations adapt to ongoing transformation and scale.
  2. **ITIL4**, the recent update to ITIL standards, represents a paradigm shift for IT tears. It guides teams to a holistic, business and customer-value frame of reference, and encourages a more flexible approach based on how your team works. The ITIL 4 Guiding Principles promote collaboration, simplicity, and feedback. +- [**Key ITSM Terms**](#key-itsm-terms) +- [**Industry Terms**](#industry-terms) +- [**ITSM Terms**](#itsm-terms) + +--- + +## **Key ITSM Terms** + +You’ll come across a host of terms related to ITIL, ITSM, DevOps, and Digital Transformation. You'll need to have a working understanding of the terms below as you progress through this training. + +--- + +## **Industry Terms** +| **Industry Terms** | **Definition** | +| ---- | :----| +| `Digital Transformation` |**Digital Transformation** is the use of new, fast and frequently changing digital technology to solve problems. One of the examples of digital transformation is cloud computing. It reduces reliance on user owned hardware and increases reliance on subscription-based cloud services.| +| `DevOPs` | **DevOps** emphasizes accelerated IT service delivery enabled by agile and lean practices. DevOps improves collaboration between development and IT operations teams, so organizations can build, test, and release software faster and more reliably. The promised benefits include increased trust, faster software releases, an ability to solve critical issues quickly, and better management of unplanned work.| +|
    1. `Lean`
    2. `SAFe`
    3. `Agile`
    4. `Scrum`
    |
    1. **Lean IT** involves a methodology of value-stream mapping — diagramming and analyzing services (value streams) into their component process steps and eliminating any steps (or even entire value streams) that do not deliver value.
    2. The **Scaled Agile Framework (SAFe)**, methodology is an agile framework for development teams built on three pillars: Team, Program, and Portfolio. It is designed not so much as a single methodology, but as a broad knowledge base of proven best practices that real teams have used to deliver successful software products.
    3. **Agile methodology** is a practice that promotes continuous iteration of development and testing throughout the software development lifecycle of the project. Both development and testing activities are concurrent unlike the Waterfall model. Agile software development emphasizes on four core values.
    4. **Scrum** is an agile process framework for managing complex knowledge work, with an initial emphasis on software development, although it has been used in other fields and is slowly starting to be explored for other complex work, research and advanced technologies.
    | +|
    1. `AWS`
    2. `Microsoft Azure`
    3. `Google Cloud Platform`
    |
    1. **Amazon Web Services (AWS)** is a subsidiary of Amazon that provides on-demand cloud computing platforms and APIs to individuals, companies, and governments, on a metered pay-as-you-go basis.
    2. **Microsoft Azure** is a cloud computing service created by Microsoft for building, testing, deploying, and managing applications and services through Microsoft-managed data centers.
    3. **Google Cloud Platform**, offered by Google, is a suite of cloud computing services that runs on the same infrastructure that Google uses internally for its end-user products, such as Google Search, Gmail and YouTube
    | +| `I&O ( Infrastructure & Operations )`| **Infrastructure and Operations (1&0)** manages the ITS data centers and provides around-the-clock support for ITS business computing activities. | + +--- + +## **ITSM Terms** +| **ITSM Terms** | **Definition** | +| :----: | :---- | +|
    1. `Service Request`
    2. `Incident Management`
    3. `Problem Management`
    4. `Knowledge and Asset Management`
    5. `Change Enablement ( Formerly known as Change Management )`
    6. `Configuration and Database Management ( CMDB )`
    |
    1. **Service Request Management** is a repeatable procedure for handling the wide variety of customer service requests, like requests for access to applications, software enhancements, and hardware updates. The service request workstream often involves recurring requests and benefits greatly from enabling customers with knowledge and automating certain tasks.
    2. **Incident Management** is the practice of managing unplanned events that disrupt or reduce the quality of a service. It requires an emergency response from the IT team.
    3. **Problem Management** is the practice of identifying and managing the causes of incidents on an IT service. It is a core component of ITSM frameworks.
    4. **Knowledge Management** is the practice of creating, curating, sharing, using, and managing knowledge across an organization and even across industries. **IT Asset Management (also known as ITAM)** is the process of ensuring an organization’s assets are accounted for, deployed, maintained, upgraded, and disposed of when the time comes. Put simply, it’s making sure that the valuable items, tangible and intangible, in your organization are tracked and being used.
    5. **Change Enablement** is an IT practice designed to minimize disruptions to IT services while making changes to critical systems and services. A change is adding, modifying, or removing anything that could have a direct or indirect effect on services.
    6. According to ITIL 4, a **configuration management database (CMDB)** “is used to store configuration records throughout their lifecycle and maintain the relationships between them. In other words, your CMDB stores information on the configuration of items within an organization, including hardware, software, systems, facilities, and sometimes personnel. It is the purview of the IT organization to define which items should be tracked and how to do so. This configuration data can include relationships and interdependencies between items, the history of changes to each item, and class and attributes—such as type, owner, and importance—for each item.
    | +|
    1. `Self-Service`
    2. `Shift-left`
    |
    1. As users come to depend on self-service applications to find answers or ask for help in their daily lives, these expectations for self-service are now being applied to IT organizations. Self-service isn't a new concept, either. We see it in our everyday lives, from self-checkout lines to using an ATM. And now, finding answers is easier than ever with the power of search engines.
    2. The ability to **"shift-left"** and deliver quality self-service is a top priority for many IT organizations today. Increasing support consist Level Three, Two, One, Zero Support. Shift left (lower cost & improved user satisfaction)
    | +|`Always-On-Service`| A Service which is consumed/ available to consumers to be consumed anytime 24X7, 365 days. | +|
    1. `ITIL`
    2. `ITIL4`
    |
    1. **ITIL** is the most widely accepted approach to ITSM. ITIL focuses on practices for aligning IT services with business needs. ITIL can help organizations adapt to ongoing transformation and scale.
    2. **ITIL4**, the recent update to ITIL standards, represents a paradigm shift for IT tears. It guides teams to a holistic, business and customer-value frame of reference, and encourages a more flexible approach based on how your team works. The ITIL 4 Guiding Principles promote collaboration, simplicity, and feedback.
    \ No newline at end of file diff --git a/TuxTechBlogs/docs/topic/9.0. ITSM/02. ITSM Library and Practices.md b/TuxTechBlogs/docs/topic/9.0. ITSM/02. ITSM Library and Practices.md index ef67f10..ca442a9 100644 --- a/TuxTechBlogs/docs/topic/9.0. ITSM/02. ITSM Library and Practices.md +++ b/TuxTechBlogs/docs/topic/9.0. ITSM/02. ITSM Library and Practices.md @@ -1,42 +1,42 @@ - -- [ITSM Library and Best Practices](#itsm-library-and-best-practices) - - [**ITIL \& ITSM**](#itil--itsm) - - [**How do ITIL and ITSM differ?**](#how-do-itil-and-itsm-differ) - - [**Read More About ITIL \& ITIL4**](#read-more-about-itil--itil4) - -# ITSM Library and Best Practices - -## **ITIL & ITSM** - -> **ITIL** is the acronym for *Information Technology Infrastructure Library*. - -A framework that helps IT teams organize and think about their workflows, ITIL is a widely accepted 'best standard' for how IT teams can aligning IT services with the needs of the business. - -The 'service area' categories we just introduced, like Asset Management or Service Request Management are terms that have been standardized in the industry by ITIL. - -## **How do ITIL and ITSM differ?** - -|`ITIL`|`ITSM`| -|:----| :----| -|ITIL provides practical and proven guidance for establishing a service management system. It provides the framework, practices, and a common glossary of terms for businesses using IT enabled services.|ITSM deals with implementing, managing, and delivering IT services to meet the needs of an organization. It ensures that the appropriate combination of people, practices, processes, and products (tools and technology) are in place to provide value.| - -> ## **Note** - -1. ITSM is the practice of delivering IT services to customers, while ITIL is the framework that can be used to implement ITSM. -2. Many IT frameworks are only focused on specific areas like security, quality control, or service management. -3. ITIL guides organizations and individuals on using IT as a tool to facilitate business change, transformation and growth. ITIL advocates that IT and digital services are aligned to the needs of the business and support its core objectives and goals. -4. ITIL is an evolving framework. In previous versions, ITIL was interpreted by some practitioners as being overly-prescriptive with heavy and burdensome requirements associated with old ways of working. -5. The latest version, ITIL 4 presents a more holistic, customer-centric frame of reference, and encourages a more flexible approach to building an effective IT organization. - -> ## Highlights of ITIL 4 that align with Atlassian - -1. Centers on `“Focus on value”` as a core principle for IT teams. -2. Provides a `flexible and value-centric` approach. -3. Guiding principles embrace `collaboration, simplicity, and iteration`. -4. Shifts from processes to `practices`. -5. Integrates best practices from `Agile`, `DevOps`, and `Lean`. - -## **Read More About ITIL & ITIL4** - -1. [ITIL 4 whitepaper](https://pages.eml.atlassian.com/rs/594-ATC-127/images/Atlassian_Axelos_ITIL4_Guide.pdf) + +- [ITSM Library and Best Practices](#itsm-library-and-best-practices) + - [**ITIL \& ITSM**](#itil--itsm) + - [**How do ITIL and ITSM differ?**](#how-do-itil-and-itsm-differ) + - [**Read More About ITIL \& ITIL4**](#read-more-about-itil--itil4) + +# ITSM Library and Best Practices + +## **ITIL & ITSM** + +> **ITIL** is the acronym for *Information Technology Infrastructure Library*. + +A framework that helps IT teams organize and think about their workflows, ITIL is a widely accepted 'best standard' for how IT teams can aligning IT services with the needs of the business. + +The 'service area' categories we just introduced, like Asset Management or Service Request Management are terms that have been standardized in the industry by ITIL. + +## **How do ITIL and ITSM differ?** + +|`ITIL`|`ITSM`| +|:----| :----| +|ITIL provides practical and proven guidance for establishing a service management system. It provides the framework, practices, and a common glossary of terms for businesses using IT enabled services.|ITSM deals with implementing, managing, and delivering IT services to meet the needs of an organization. It ensures that the appropriate combination of people, practices, processes, and products (tools and technology) are in place to provide value.| + +> ## **Note** + +1. ITSM is the practice of delivering IT services to customers, while ITIL is the framework that can be used to implement ITSM. +2. Many IT frameworks are only focused on specific areas like security, quality control, or service management. +3. ITIL guides organizations and individuals on using IT as a tool to facilitate business change, transformation and growth. ITIL advocates that IT and digital services are aligned to the needs of the business and support its core objectives and goals. +4. ITIL is an evolving framework. In previous versions, ITIL was interpreted by some practitioners as being overly-prescriptive with heavy and burdensome requirements associated with old ways of working. +5. The latest version, ITIL 4 presents a more holistic, customer-centric frame of reference, and encourages a more flexible approach to building an effective IT organization. + +> ## Highlights of ITIL 4 that align with Atlassian + +1. Centers on `“Focus on value”` as a core principle for IT teams. +2. Provides a `flexible and value-centric` approach. +3. Guiding principles embrace `collaboration, simplicity, and iteration`. +4. Shifts from processes to `practices`. +5. Integrates best practices from `Agile`, `DevOps`, and `Lean`. + +## **Read More About ITIL & ITIL4** + +1. [ITIL 4 whitepaper](https://pages.eml.atlassian.com/rs/594-ATC-127/images/Atlassian_Axelos_ITIL4_Guide.pdf) 2. [What ITIL 4 means for you and your team](https://www.atlassian.com/blog/technology/what-the-new-itil-4-means-for-you-and-your-team) \ No newline at end of file diff --git a/TuxTechBlogs/docs/topic/9.0. ITSM/03. Core ITSM Practices.md b/TuxTechBlogs/docs/topic/9.0. ITSM/03. Core ITSM Practices.md index 395274e..4fc02f0 100644 --- a/TuxTechBlogs/docs/topic/9.0. ITSM/03. Core ITSM Practices.md +++ b/TuxTechBlogs/docs/topic/9.0. ITSM/03. Core ITSM Practices.md @@ -1,52 +1,52 @@ -- [**Core ITSM practices**](#core-itsm-practices) -- [**How do these IT teams manage their services?**](#how-do-these-it-teams-manage-their-services) -- [**Examples**](#examples) - ---- - -## **Core ITSM practices** - -1. IT practices have to be standardized and managed effectively. -2. For example, if a phone application functions as a storefront for a business and is crashing for Android users, that adds up to potentially thousands in missed sales for each minute the app is down. -3. Without a standardized 'practice' for incident management, the team won't have an effective workflow to push a resolution. -4. ITSM solutions help streamline these practices, helping teams work more effectively, and ultimately deliver greater dollar value to a business. - ---- - -## **How do these IT teams manage their services?** - -1. Great question. IT teams use a variety of frameworks or methodologies to name and organize the practices that manage their services. -2. A common framework is ITIL, which provides teams with 'practices' they can implement to deliver great service. - ---- - -> _Remember those ITIL practices mentioned at the beginning of the course?_ - -1. Modern IT service teams use organizational resources and follow repeatable procedures to deliver services across various areas. The repeatable procedures are referred to in ITIL as **practices**. - -2. ITSM software solutions enable the implementation of these “practices." - ---- - -> **There are 34 practices in total, but here are the core practices that most organizations implement, and which Atlassian focuses on in our products to deliver IT services.** - -## **Examples** - -1. `Service Request Management` : Resolving a customer's service request and managing the lifecycle of all service requests. - - _Example:_ Newly joined Employee needs to access VPN. -2. `Incident Management` : Resolving any kind of disruption of IT function - from issues with credit card readers to web page outages. - - _Example:_ IT Apps are crashing after new update was rolled out in morning. Need to Fix this asap, affecting multiple users/ team. -3. `Problem Management` : Investigating the root cause of multiple incidents, to prevent the problem from happening again. - - _Example:_ Looks like crash reports are happening only only on the android devices. What can be done to improve app compatibility with android platform. -4. `Change Enablement` : Ensuring that if IT practices need to change (migrating to a cloud based software solution for example) there are minimal disruptions to regularly scheduled business functions and services. - - _Example:_ Payroll database finance department is using is out-of-date completely. Now finance team needs to migrate the DB to a cloud based application if the business is keep on scaling as per current rate. Finance team is looking for advise and help to migrate to cloud based solution. -5. `IT Asset Management` : Keeping track of all IT related assets (hardware, software, devices and subscriptions) and managing the lifecycle of those assets from procurement to disposal. - - _Example:_ IT Team has limited supply of the latest MacBook Pros, so they want to make sure the team that need the horsepower and whose laptops are about to go out of date, need to notify them. -6. `Knowledge Management` : Effective management of information and knowledge like common resolutions to service requests, or instructions on how to set up a new laptop. - - _Example:_ A lot of FAQs were piled up on how to download and install latest internal software update. Now the customers are looking for a KB article to follow along and not resolve each query individually, instead use the FAQ KB for that. -7. `Service Configuration Management` : Capturing the information about different parts of the IT ecosystem - called Configuration Items (CIs)- and how those items relate to one another. - - _Example:_ It is very difficult to deploy changes org wide/ in small scale without a map of how everything relates to one another. Thus needs more time to spent on mapping out the relationships between out critical systems and hardware so we can be more effective in the future. - ---- - +- [**Core ITSM practices**](#core-itsm-practices) +- [**How do these IT teams manage their services?**](#how-do-these-it-teams-manage-their-services) +- [**Examples**](#examples) + +--- + +## **Core ITSM practices** + +1. IT practices have to be standardized and managed effectively. +2. For example, if a phone application functions as a storefront for a business and is crashing for Android users, that adds up to potentially thousands in missed sales for each minute the app is down. +3. Without a standardized 'practice' for incident management, the team won't have an effective workflow to push a resolution. +4. ITSM solutions help streamline these practices, helping teams work more effectively, and ultimately deliver greater dollar value to a business. + +--- + +## **How do these IT teams manage their services?** + +1. Great question. IT teams use a variety of frameworks or methodologies to name and organize the practices that manage their services. +2. A common framework is ITIL, which provides teams with 'practices' they can implement to deliver great service. + +--- + +> _Remember those ITIL practices mentioned at the beginning of the course?_ + +1. Modern IT service teams use organizational resources and follow repeatable procedures to deliver services across various areas. The repeatable procedures are referred to in ITIL as **practices**. + +2. ITSM software solutions enable the implementation of these “practices." + +--- + +> **There are 34 practices in total, but here are the core practices that most organizations implement, and which Atlassian focuses on in our products to deliver IT services.** + +## **Examples** + +1. `Service Request Management` : Resolving a customer's service request and managing the lifecycle of all service requests. + - _Example:_ Newly joined Employee needs to access VPN. +2. `Incident Management` : Resolving any kind of disruption of IT function - from issues with credit card readers to web page outages. + - _Example:_ IT Apps are crashing after new update was rolled out in morning. Need to Fix this asap, affecting multiple users/ team. +3. `Problem Management` : Investigating the root cause of multiple incidents, to prevent the problem from happening again. + - _Example:_ Looks like crash reports are happening only only on the android devices. What can be done to improve app compatibility with android platform. +4. `Change Enablement` : Ensuring that if IT practices need to change (migrating to a cloud based software solution for example) there are minimal disruptions to regularly scheduled business functions and services. + - _Example:_ Payroll database finance department is using is out-of-date completely. Now finance team needs to migrate the DB to a cloud based application if the business is keep on scaling as per current rate. Finance team is looking for advise and help to migrate to cloud based solution. +5. `IT Asset Management` : Keeping track of all IT related assets (hardware, software, devices and subscriptions) and managing the lifecycle of those assets from procurement to disposal. + - _Example:_ IT Team has limited supply of the latest MacBook Pros, so they want to make sure the team that need the horsepower and whose laptops are about to go out of date, need to notify them. +6. `Knowledge Management` : Effective management of information and knowledge like common resolutions to service requests, or instructions on how to set up a new laptop. + - _Example:_ A lot of FAQs were piled up on how to download and install latest internal software update. Now the customers are looking for a KB article to follow along and not resolve each query individually, instead use the FAQ KB for that. +7. `Service Configuration Management` : Capturing the information about different parts of the IT ecosystem - called Configuration Items (CIs)- and how those items relate to one another. + - _Example:_ It is very difficult to deploy changes org wide/ in small scale without a map of how everything relates to one another. Thus needs more time to spent on mapping out the relationships between out critical systems and hardware so we can be more effective in the future. + +--- + > The practice terms like **"Service Request Management"** can be both nouns - the name of a service area or team- and a verb and refer to the process of doing service request management. \ No newline at end of file diff --git a/TuxTechBlogs/docs/topic/9.0. ITSM/04. Maturity Matters.md b/TuxTechBlogs/docs/topic/9.0. ITSM/04. Maturity Matters.md index 0d5ad80..6b6d4d1 100644 --- a/TuxTechBlogs/docs/topic/9.0. ITSM/04. Maturity Matters.md +++ b/TuxTechBlogs/docs/topic/9.0. ITSM/04. Maturity Matters.md @@ -1,16 +1,16 @@ -# Maturity Matters - -Not all businesses are ready for the complexity of a global launch. Maturity, training, documented practices, and scale play a huge role in what a team can accomplish. In the same way, not all IT organizations can offer the full breadth of IT Services covered in the previous sections. - -> ## **Why does maturity matter?** - -The maturity of an IT organization will impact the ITIL practices they're able to implement, and what they'll need from an ITSM solution. Check this diagram for ITSM maturity model: - -![ITSM_Maturity_model](https://i.postimg.cc/pdL9Rwhw/ITSM-Maturity-Model.png) - -## **ITSM Maturity Model** - -- The Gartner IT Maturity Model (image above ⬆️) is a useful tool to assess an IT team's current maturity. The lower maturity teams are typically more chaotic with ad hoc requests and undocumented processes. _Service Request Management_ might be a huge part of their day, but they don't have great processes in place for _Change Enablement_. -- The more the teams mature, the more process and value-driven they get. They're able to offer _Incident Management_ and _Problem Management_. The team may begin implementing a workflow framework to shape their processes, like ITIL. -- Every team wants to be on the complex service and value end of the scale. They must work through organizational process or technology challenges to achieve this goal. +# Maturity Matters + +Not all businesses are ready for the complexity of a global launch. Maturity, training, documented practices, and scale play a huge role in what a team can accomplish. In the same way, not all IT organizations can offer the full breadth of IT Services covered in the previous sections. + +> ## **Why does maturity matter?** + +The maturity of an IT organization will impact the ITIL practices they're able to implement, and what they'll need from an ITSM solution. Check this diagram for ITSM maturity model: + +![ITSM_Maturity_model](https://i.postimg.cc/pdL9Rwhw/ITSM-Maturity-Model.png) + +## **ITSM Maturity Model** + +- The Gartner IT Maturity Model (image above ⬆️) is a useful tool to assess an IT team's current maturity. The lower maturity teams are typically more chaotic with ad hoc requests and undocumented processes. _Service Request Management_ might be a huge part of their day, but they don't have great processes in place for _Change Enablement_. +- The more the teams mature, the more process and value-driven they get. They're able to offer _Incident Management_ and _Problem Management_. The team may begin implementing a workflow framework to shape their processes, like ITIL. +- Every team wants to be on the complex service and value end of the scale. They must work through organizational process or technology challenges to achieve this goal. - **Effective organizations want IT delivered as a solution based service.** \ No newline at end of file diff --git a/TuxTechBlogs/docs/topic/9.0. ITSM/05. The Atlassian ITSM Solution.md b/TuxTechBlogs/docs/topic/9.0. ITSM/05. The Atlassian ITSM Solution.md index 0d8e045..c8d5b18 100644 --- a/TuxTechBlogs/docs/topic/9.0. ITSM/05. The Atlassian ITSM Solution.md +++ b/TuxTechBlogs/docs/topic/9.0. ITSM/05. The Atlassian ITSM Solution.md @@ -1,36 +1,36 @@ -- [**The Atlassian ITSM solution**](#the-atlassian-itsm-solution) - - [_Unite teams on one platform_](#unite-teams-on-one-platform) -- [**Atlassian Products**](#atlassian-products) -- [**Build a strong culture with Atlassian Team Playbook**](#build-a-strong-culture-with-atlassian-team-playbook) - ---- - -## **The Atlassian ITSM solution** - -### _Unite teams on one platform_ - -Atlassian provides the technology backbone with the most critical collaborative workflows—agile project planning, incident management and response, and service management and support—to help modern IT organizations plan, build, deliver, and ensure that your services are always on. - ---- - -![Atlassian_ITSM_Solution](https://i.postimg.cc/QtVjys9M/ITSM-Atlassian.png) - ---- -## **Atlassian Products** - -| **Use Case** | **Products** | **Details** | -| :---- | :----| :---- | -| **High-velocity ITSM** |![jira_service_management](https://i.postimg.cc/RFbZSq5f/jira-service-management.png)|
    1. Jira Service Management enables IT teams, across infrastructure, operations, and workplace support, enjoy a team-centric IT support workspace that matches the way they work with flexible ITIL workflows, a self-service portal, agent queues, automation, SLAs, custom dashboards, and much more.
    2. Outside of IT, the adoption of Jira Service Management spreads quickly to business teams, such as HR, Facilities, and Legal, who recognize the value of easily managing and tracking their flow of work.
    | -| **Project and issue tracking** | ![jira_software](https://i.postimg.cc/bJvvfkMp/jira-software.png) |
    1. Jira Software is is used by software teams to plan, track, and release great software.
    2. Use Jira software to create user stories and issues, plan sprints, distribute tasks, and track progress with complete visibility across your software team.
    3. You can always get up-to-date information and improve team performance based on real-time, visual data that your team can put to use.
    4. | -| **Document collaboration** | ![confluence](https://i.postimg.cc/WbxqmWyr/confluence.png) |
      1. Confluence provides the backbone for knowledge management, providing real-time collaboration and access to support articles, troubleshooting guides, runbooks, templates and more.
      | -| **Git code management** | ![bitbucket](https://i.postimg.cc/CMPq5LHc/bitbucket.png) |
      1. Bitbucket is more than just Git code management. Bitbucket gives teams one place to plan projects, collaborate on code, test, and deploy.
      2. Strong integrations with Jira Software and Bitbucket brings development and IT teams together using a common platform to speed service requests through to changes and releases.
      | -| **Modern incident response** | ![opsginie](https://i.postimg.cc/VkcLL3T7/opsginie.png) |
      1. Opsgenie provides powerful incident swarming and on-call alerting capabilities to keep services always on.
      2. Using Opsgenie teams have modern incident management workflows to proactively respond, resolve, and learn from every incident.
      | -| **Incident Communication**| ![statuspage](https://i.postimg.cc/G2bXLhJc/statuspage.png) | Statuspage is the easiest way to communicate incidents and scheduled maintenance to end-users to help reduce support burden and build trust with every incident. There can be possibility that Status page can be used for internal and external incident communications.| - ---- - -## **Build a strong culture with Atlassian Team Playbook** - -1. The Atlassian Team Playbook provides dozens of plays to strengthen your team’s culture and improve its overall health, from mapping out roles and responsibilities to making more effective decisions. -2. IT teams, should start moving towards more agile approaches to ITSM that value collaboration, ease of use, and value creation. +- [**The Atlassian ITSM solution**](#the-atlassian-itsm-solution) + - [_Unite teams on one platform_](#unite-teams-on-one-platform) +- [**Atlassian Products**](#atlassian-products) +- [**Build a strong culture with Atlassian Team Playbook**](#build-a-strong-culture-with-atlassian-team-playbook) + +--- + +## **The Atlassian ITSM solution** + +### _Unite teams on one platform_ + +Atlassian provides the technology backbone with the most critical collaborative workflows—agile project planning, incident management and response, and service management and support—to help modern IT organizations plan, build, deliver, and ensure that your services are always on. + +--- + +![Atlassian_ITSM_Solution](https://i.postimg.cc/QtVjys9M/ITSM-Atlassian.png) + +--- +## **Atlassian Products** + +| **Use Case** | **Products** | **Details** | +| :---- | :----| :---- | +| **High-velocity ITSM** |![jira_service_management](https://i.postimg.cc/RFbZSq5f/jira-service-management.png)|
      1. Jira Service Management enables IT teams, across infrastructure, operations, and workplace support, enjoy a team-centric IT support workspace that matches the way they work with flexible ITIL workflows, a self-service portal, agent queues, automation, SLAs, custom dashboards, and much more.
      2. Outside of IT, the adoption of Jira Service Management spreads quickly to business teams, such as HR, Facilities, and Legal, who recognize the value of easily managing and tracking their flow of work.
      | +| **Project and issue tracking** | ![jira_software](https://i.postimg.cc/bJvvfkMp/jira-software.png) |
      1. Jira Software is is used by software teams to plan, track, and release great software.
      2. Use Jira software to create user stories and issues, plan sprints, distribute tasks, and track progress with complete visibility across your software team.
      3. You can always get up-to-date information and improve team performance based on real-time, visual data that your team can put to use.
      4. | +| **Document collaboration** | ![confluence](https://i.postimg.cc/WbxqmWyr/confluence.png) |
        1. Confluence provides the backbone for knowledge management, providing real-time collaboration and access to support articles, troubleshooting guides, runbooks, templates and more.
        | +| **Git code management** | ![bitbucket](https://i.postimg.cc/CMPq5LHc/bitbucket.png) |
        1. Bitbucket is more than just Git code management. Bitbucket gives teams one place to plan projects, collaborate on code, test, and deploy.
        2. Strong integrations with Jira Software and Bitbucket brings development and IT teams together using a common platform to speed service requests through to changes and releases.
        | +| **Modern incident response** | ![opsginie](https://i.postimg.cc/VkcLL3T7/opsginie.png) |
        1. Opsgenie provides powerful incident swarming and on-call alerting capabilities to keep services always on.
        2. Using Opsgenie teams have modern incident management workflows to proactively respond, resolve, and learn from every incident.
        | +| **Incident Communication**| ![statuspage](https://i.postimg.cc/G2bXLhJc/statuspage.png) | Statuspage is the easiest way to communicate incidents and scheduled maintenance to end-users to help reduce support burden and build trust with every incident. There can be possibility that Status page can be used for internal and external incident communications.| + +--- + +## **Build a strong culture with Atlassian Team Playbook** + +1. The Atlassian Team Playbook provides dozens of plays to strengthen your team’s culture and improve its overall health, from mapping out roles and responsibilities to making more effective decisions. +2. IT teams, should start moving towards more agile approaches to ITSM that value collaboration, ease of use, and value creation. 3. Checkout [Team Playbook in Atlassian](https://www.atlassian.com/team-playbook). \ No newline at end of file diff --git a/TuxTechBlogs/docs/topic/9.0. ITSM/06. Key Takeaways.md b/TuxTechBlogs/docs/topic/9.0. ITSM/06. Key Takeaways.md index 5828cf9..b59cc32 100644 --- a/TuxTechBlogs/docs/topic/9.0. ITSM/06. Key Takeaways.md +++ b/TuxTechBlogs/docs/topic/9.0. ITSM/06. Key Takeaways.md @@ -1,11 +1,11 @@ -## **Key takeaways** - -1. IT Service Management (ITSM) is how IT teams manage the end-to-end delivery of IT services to customers. - -2. Information Technology Infrastructure Library (ITIL) is a set of detailed practices for IT Service Management that focuses on aligning IT services with the needs of the business. It's a framework that can be used to implement ITSM. - -3. The core ITSM practices include Request Management, Incident Management, Problem Management, Change Enablement, Asset Management, Configuration Management, and Knowledge Management. - -4. The maturity of an IT organization will impact the ITIL practices they're able to implement, and what they'll need from an ITSM solution. - +## **Key takeaways** + +1. IT Service Management (ITSM) is how IT teams manage the end-to-end delivery of IT services to customers. + +2. Information Technology Infrastructure Library (ITIL) is a set of detailed practices for IT Service Management that focuses on aligning IT services with the needs of the business. It's a framework that can be used to implement ITSM. + +3. The core ITSM practices include Request Management, Incident Management, Problem Management, Change Enablement, Asset Management, Configuration Management, and Knowledge Management. + +4. The maturity of an IT organization will impact the ITIL practices they're able to implement, and what they'll need from an ITSM solution. + 5. Learn about Atlassian's ITSM solutions. \ No newline at end of file diff --git a/TuxTechBlogs/mkdocs.yml b/TuxTechBlogs/mkdocs.yml index 84ebfd5..5957309 100644 --- a/TuxTechBlogs/mkdocs.yml +++ b/TuxTechBlogs/mkdocs.yml @@ -1,16 +1,22 @@ # Project information -site_name: Blogs.TuxTechLab.com -site_description: Documenting Everything related to Computers, Internet, Security, Software Engineering +site_name: TuxTechBlogs +site_description: Computer Science, Internet, Security, Software Engineering site_url: https://blogs.tuxtechlab.com site_author: Arindam Tanti # Repository repo_name: TuxTechLab/Blogs -repo_url: https://github.com/TuxTechLab/Blogs -edit_uri: 'https://blogs.tuxtechlab.com' +repo_url: https://github.com/TuxTechLab/Blogs/ +edit_uri: edit/main/TuxTechBlogs/docs/ # Copyright -copyright: Copyright © TuxTechLab 2024 - 2025 +copyright: > + Maintained & Copyright © TuxTechLab 2024 - 2025 + +# Site Configurations +use_directory_urls: true +strict: no +dev_addr: 0.0.0.0:{BLOGS_CTR_INTERNAL_PORT} # Configuration theme: @@ -41,15 +47,34 @@ theme: logo: fontawesome/solid/code repo: fontawesome/brands/github features: - - navigation.top - - navigation.footer - - navigation.expand - - navigation.instant - - navigation.instant.preview - - navigation.instant.progress - - search.suggest - - search.highlight - - content.code.copy + - announce.dismiss + - content.action.edit + - content.action.view + - content.code.annotate + - content.code.copy + - content.code.select + - content.footnote.tooltips + - content.tabs.link + - content.tooltips + # - header.autohide + + - navigation.footer + - navigation.instant + - navigation.instant.prefetch + - navigation.instant.progress + - navigation.prune + - navigation.tabs + # - navigation.sections # Read: https://jimandreas.github.io/mkdocs-material/setup/setting-up-navigation/#navigation-tabs + - navigation.expand # Read : https://jimandreas.github.io/mkdocs-material/setup/setting-up-navigation/#navigation-expansion + # - navigation.tabs.sticky # Disabled as scroll down on pages doesn't require the nav bar + # - navigation.indexes + - navigation.top + - navigation.tracking + - search.highlight + - search.share + - search.suggest + - toc.follow + - toc.integrate palette: # Light mode - media: '(prefers-color-scheme: light)' @@ -68,47 +93,85 @@ theme: icon: material/weather-sunny name: Light Mode +# Page Tree nav: - - Start: index.md - - Code Of Conduct: CODE_OF_CONDUCT.md - - Contribution Guide: Contribution.md - - Agile: - - Introduction To Agile: topic/1.0. Agile/00. Introduction.md - - Understanding the four values of agile: topic/1.0. Agile/01. Understanding the four values of agile.md - - Using agile in everyday work: topic/1.0. Agile/02. Using agile in everyday work.md - - DevOps: - - Introduction To DevOps: topic/4.0. DevOps/00. Introduction.md - - ITSM: - - Introduction To ITSM: topic/9.0. ITSM/00. Introduction.md - - Key Terms: topic/9.0. ITSM/01. Key Terms.md - - ITSM Library and Practices: topic/9.0. ITSM/02. ITSM Library and Practices.md - - Core ITSM Practices: topic/9.0. ITSM/03. Core ITSM Practices.md - - Maturity Matters: topic/9.0. ITSM/04. Maturity Matters.md - - The Atlassian ITSM Solution: topic/9.0. ITSM/05. The Atlassian ITSM Solution.md - - Key Takeaways: topic/9.0. ITSM/06. Key Takeaways.md - - Kanban: - - Introduction To Kanban: topic/11.0. Kanban/00. Introduction.md - - Kanban Using Jira: topic/11.0. Kanban/01. Kanban Using Jira.md - - Scrum: - - Introduction To Scrum: topic/19.0. Scrum/00. Introduction.md - - Scrum With Jira: topic/19.0. Scrum/01. Scrum With Jira.md - - Management: - - Run Effective Meetings: - - Planning A Productive Meeting: topic/13.1. Management/00. Run Effective Meetings/01. Introduction.md - - Event Determination: topic/13.1. Management/00. Run Effective Meetings/02. Event Determination.md - - Running Effective Meeting: topic/13.1. Management/00. Run Effective Meetings/03. Running Effective Meeting.md - - Preparation: topic/13.1. Management/00. Run Effective Meetings/04. Preparation.md - - Facilitation: topic/13.1. Management/00. Run Effective Meetings/05. Facilitation.md - - Participation: topic/13.1. Management/00. Run Effective Meetings/06. Participation.md - - Follow-up: topic/13.1. Management/00. Run Effective Meetings/07. Follow-up.md + - Home: index.html + - Getting Started: + - Start: readme.md + - Code Of Conduct: CODE_OF_CONDUCT.md + - How To Contribute?: contribution.md + - Release Note: CHANGELOG.md + - Foundation: + # - Foundation Introduction: topic/foundation.html + - DevOps: + - Introduction to DevOps: topic/4.0. DevOps/00. Introduction.md + # - Core Subjects: + # - Operating Systemm + # - Networking + # - System Design + # - Object Oriented Programming + # - Technologies: + # - Cloud + # - Container + # - Orchestration + # - CI/CD + # - Coding Tools + # - Automation + # - IaaC + # - Virtualization + # - Linux + # - Windows + # - Stratagies: + # - Site Reliability Engineering + # - Command Center + - Management: + - ITSM: + - Introduction To ITSM: topic/9.0. ITSM/00. Introduction.md + - Key Terms: topic/9.0. ITSM/01. Key Terms.md + - ITSM Library and Practices: topic/9.0. ITSM/02. ITSM Library and Practices.md + - Core ITSM Practices: topic/9.0. ITSM/03. Core ITSM Practices.md + - Maturity Matters: topic/9.0. ITSM/04. Maturity Matters.md + - The Atlassian ITSM Solution: topic/9.0. ITSM/05. The Atlassian ITSM Solution.md + - Key Takeaways: topic/9.0. ITSM/06. Key Takeaways.md + - Kanban: + - Introduction To Kanban: topic/11.0. Kanban/00. Introduction.md + - Kanban Using Jira: topic/11.0. Kanban/01. Kanban Using Jira.md + - Scrum: + - Introduction To Scrum: topic/19.0. Scrum/00. Introduction.md + - Scrum With Jira: topic/19.0. Scrum/01. Scrum With Jira.md + - Agile: + - Introduction To Agile: topic/1.0. Agile/00. Introduction.md + - Understanding the four values of agile: topic/1.0. Agile/01. Understanding the four values of agile.md + - Using agile in everyday work: topic/1.0. Agile/02. Using agile in everyday work.md + - Run Effective Meetings: + - Planning A Productive Meeting: topic/13.1. Management/00. Run Effective Meetings/01. Introduction.md + - Event Determination: topic/13.1. Management/00. Run Effective Meetings/02. Event Determination.md + - Running Effective Meeting: topic/13.1. Management/00. Run Effective Meetings/03. Running Effective Meeting.md + - Preparation: topic/13.1. Management/00. Run Effective Meetings/04. Preparation.md + - Facilitation: topic/13.1. Management/00. Run Effective Meetings/05. Facilitation.md + - Participation: topic/13.1. Management/00. Run Effective Meetings/06. Participation.md + - Follow-up: topic/13.1. Management/00. Run Effective Meetings/07. Follow-up.md + - Interview Preparation: study/interview_prep/interview.md + - TuxTechCodes: + # - Python + # - C++ + # - Java + # - Leetcode: + - Integration + - Shell - Miscellaneous: - Acronyms: topic/13.2. Miscellaneous/acronym.md - Ports: topic/13.2. Miscellaneous/ports.md - Status Codes: topic/13.2. Miscellaneous/status_codes.md - + - Contact Us: contacts.md # Customization extra: + alternate: + - name: English + link: \en\ + lang: en + generator: false consent: title: Cookie consent description: @@ -119,7 +182,7 @@ extra: social: - icon: fontawesome/brands/github link: https://github.sprcom/tuxtechlab - - icon: fontawesome/brands/twitter + - icon: fontawesome/brands/x-twitter link: https://twitter.com/arindam_tanti - icon: fontawesome/brands/linkedin link: https://www.linkedin.com/company/tuxtechlab @@ -127,7 +190,7 @@ extra: link: https://github.com/TuxTechLab/Blogs analytics: provider: google - property: G-BCZ32RGHJ0 + property: XXXXXX extra_css: - stylesheet/extra.css @@ -137,29 +200,109 @@ extra_javascript: # Extensions markdown_extensions: + - abbr + - admonition + - attr_list + - def_list + - footnotes + - md_in_html - toc: - permalink: false + permalink: true + - pymdownx.arithmatex: + generic: true + - pymdownx.betterem: + smart_enable: all + - pymdownx.caret + - pymdownx.details + - pymdownx.emoji: + emoji_generator: !!python/name:material.extensions.emoji.to_svg + emoji_index: !!python/name:material.extensions.emoji.twemoji - pymdownx.highlight: - linenums: true - linenums_style: pymdownx.table + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + - pymdownx.inlinehilite + - pymdownx.keys + - pymdownx.magiclink: + normalize_issue_symbols: true + repo_url_shorthand: true + user: squidfunk + repo: mkdocs-material + - pymdownx.mark + - pymdownx.smartsymbols + - pymdownx.snippets: + auto_append: + - includes/mkdocs.md + - pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format + - pymdownx.tabbed: + alternate_style: true + combine_header_slug: true + slugify: !!python/object/apply:pymdownx.slugs.slugify + kwds: + case: lower - pymdownx.tasklist: custom_checkbox: true + - pymdownx.tilde + - abbr + - admonition + - attr_list + - codehilite + - def_list + - footnotes + - md_in_html + - pymdownx.arithmatex: + generic: true + - pymdownx.betterem: + smart_enable: all + - pymdownx.caret + - pymdownx.details - pymdownx.emoji: - emoji_index: !!python/name:pymdownx.emoji.twemoji - emoji_generator: !!python/name:pymdownx.emoji.to_svg - - pymdownx.superfences + emoji_generator: !!python/name:material.extensions.emoji.to_svg + emoji_index: !!python/name:material.extensions.emoji.twemoji + - pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + - pymdownx.inlinehilite + - pymdownx.keys + - pymdownx.magiclink: + normalize_issue_symbols: true + repo_url_shorthand: true + user: squidfunk + repo: mkdocs-material - pymdownx.mark + - pymdownx.smartsymbols + - pymdownx.snippets: + auto_append: + - includes/mkdocs.md + - pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format - pymdownx.tabbed: alternate_style: true + combine_header_slug: true + slugify: !!python/object/apply:pymdownx.slugs.slugify + kwds: + case: lower + - pymdownx.tasklist: + custom_checkbox: true + - pymdownx.tilde # Plugins plugins: - search: lang: - en - -spec: - source: - git: - ref: Blogs by TuxTechLab - url: https://github.com/TuxTechLab/Blogs + - blog: + blog_dir: blog + blog_toc: true + post_date_format: full + post_url_date_format: yyyy/MM/dd + - minify: + minify_html: true \ No newline at end of file From 4e92a8cca1d736cbae197702abe0c54ef79f261b Mon Sep 17 00:00:00 2001 From: Arindam Date: Wed, 3 Jul 2024 03:52:54 +0530 Subject: [PATCH 2/8] Code ( Signed Commit ) | Adding Container Related changes in the repo. --- .devcontainer/devcontainer.json | 13 ++- .devcontainer/docker-compose.yml | 4 +- .dockerignore | 156 +++++++++++++++++++++++++++++ .gitignore | 165 +++++++++++++++++++++++++++++-- .markdownlintrc | 9 -- blogs.tuxtechlab.Dockerfile | 11 +++ demo-blogs.env | 3 + mkdocs_blogs.Dockerfile | 26 ----- requirements.txt | 70 +++++++------ sweep.yaml | 86 ++++++++-------- 10 files changed, 415 insertions(+), 128 deletions(-) create mode 100644 .dockerignore delete mode 100644 .markdownlintrc create mode 100644 blogs.tuxtechlab.Dockerfile create mode 100644 demo-blogs.env delete mode 100644 mkdocs_blogs.Dockerfile diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index f59c485..6a12bd9 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -12,17 +12,24 @@ // The 'service' property is the name of the service for the container that VS Code should // use. Update this value and .devcontainer/docker-compose.yml to the real service name. - "service": "blogs-svc", + "service": "tuxtechblog-mkdocs", // The optional 'workspaceFolder' property is the path VS Code should open by default when // connected. This is typically a file mount in .devcontainer/docker-compose.yml - "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}" + "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", + "features": { + "ghcr.io/devcontainers/features/python:1": {}, + "ghcr.io/devcontainers-contrib/features/zsh-plugins:0": {}, + "ghcr.io/wxw-matt/devcontainer-features/command_runner:0": {}, + "ghcr.io/schlich/devcontainer-features/powerlevel10k:1": {}, + "ghcr.io/cirolosapio/devcontainers-features/alpine-ohmyzsh:0": {} + } // Features to add to the dev container. More info: https://containers.dev/features. // "features": {}, // Use 'forwardPorts' to make a list of ports inside the container available locally. - // "forwardPorts": [], + "forwardPorts": [8000] // Uncomment the next line if you want start specific services in your Docker Compose config. // "runServices": [], diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 283e040..f3cb6d6 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -1,7 +1,7 @@ -version: '3.9' +version: '3.8' services: # Update this to the name of the service you want to work with in your docker-compose.yml file - blogs-svc: + tuxtechblog-mkdocs: # Uncomment if you want to override the service's Dockerfile to one in the .devcontainer # folder. Note that the path of the Dockerfile and context is relative to the *primary* # docker-compose.yml file (the first in the devcontainer.json "dockerComposeFile" diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0690134 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,156 @@ +.env +.DS_Store +.env.prod + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintainted in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ \ No newline at end of file diff --git a/.gitignore b/.gitignore index 90e164b..3af6d3e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,156 @@ -# Ignore Files -**/*.log -**/*.pyc -**/*.env - -# Folders -__pycache__ -logs -test \ No newline at end of file +.env +.DS_Store +.env.prod + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintainted in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ \ No newline at end of file diff --git a/.markdownlintrc b/.markdownlintrc deleted file mode 100644 index 38208dd..0000000 --- a/.markdownlintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "comment": "Copyright (c) 2019-2024 TuxTechLab. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS", - "default": true, - "no-trailing-punctuation": false, - "line-length": false, - "MD003": { "style": "atx"}, - "MD007": { "indent": 4 }, - "MD013": false -} diff --git a/blogs.tuxtechlab.Dockerfile b/blogs.tuxtechlab.Dockerfile new file mode 100644 index 0000000..3e5439b --- /dev/null +++ b/blogs.tuxtechlab.Dockerfile @@ -0,0 +1,11 @@ +FROM squidfunk/mkdocs-material:latest + +LABEL maintainer="TuxTechLab " + +WORKDIR /docs + +COPY requirements.txt . + +RUN pip install -r requirements.txt + +EXPOSE "${BLOGS_CTR_INTERNAL_PORT}" diff --git a/demo-blogs.env b/demo-blogs.env new file mode 100644 index 0000000..2da7952 --- /dev/null +++ b/demo-blogs.env @@ -0,0 +1,3 @@ +BLOGS_CTR_INTERNAL_PORT=8000 +BLOGS_CTR_EXTERNAL_PORT=8000 +VERIFY_SSL=False \ No newline at end of file diff --git a/mkdocs_blogs.Dockerfile b/mkdocs_blogs.Dockerfile deleted file mode 100644 index c7d3a67..0000000 --- a/mkdocs_blogs.Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ -FROM python:3.11-slim - -LABEL maintainer="Arindam Tanti " - -# Set the working directory in the container -WORKDIR /app - -# Copy the requirements.txt file into the container -COPY requirements.txt . - -# Install Mkdocs and any dependencies specified in requirements.txt -RUN pip install --no-cache-dir -r requirements.txt - -# Copy the Mkdocs project files into the container -COPY . . - -# Delete cache files and temporary files -RUN rm -rf __pycache__ \ - && rm -rf .pytest_cache \ - && find . -name '*.pyc' -delete - -# Expose port 8000 to access the Mkdocs site -EXPOSE 8000 - -# Command to serve the Mkdocs site -CMD ["mkdocs", "serve", "-a", "0.0.0.0:8000", "-w", "/app/TuxTechBlogs/", "-f", "/app/TuxTechBlogs/mkdocs.yml", "--verbose"] diff --git a/requirements.txt b/requirements.txt index ad88686..0e10074 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,36 +1,34 @@ -Babel==2.14.0 -black==24.2.0 -certifi==2024.2.2 -charset-normalizer==3.3.2 -click==8.1.7 -colorama==0.4.6 -flake8==7.0.0 -ghp-import==2.1.0 -idna==3.6 -Jinja2==3.1.3 -Markdown==3.5.2 -MarkupSafe==2.1.5 -mccabe==0.7.0 -mergedeep==1.3.4 -mkdocs==1.5.3 -mkdocs-material==9.5.12 -mkdocs-material-extensions==1.3.1 -mypy-extensions==1.0.0 -nose==1.3.7 -packaging==23.2 -paginate==0.5.6 -pathspec==0.12.1 -platformdirs==4.2.0 -pycodestyle==2.11.1 -pyflakes==3.2.0 -Pygments==2.17.2 -pymdown-extensions==10.7 -python-dateutil==2.9.0.post0 -python-dotenv==1.0.1 -PyYAML==6.0.1 -pyyaml_env_tag==0.1 -regex==2023.12.25 -requests==2.31.0 -six==1.16.0 -urllib3==2.2.1 -watchdog==4.0.0 +# Copyright (c) 2024-2025 TuxTechLabs + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +# Requirements for core +jinja2~=3.0 +markdown~=3.2 +mkdocs~=1.6 +mkdocs-material-extensions~=1.3 +pygments~=2.16 +pymdown-extensions~=10.2 + +# Requirements for plugins +babel~=2.10 +colorama~=0.4 +paginate~=0.5 +regex>=2022.4 +requests~=2.26 \ No newline at end of file diff --git a/sweep.yaml b/sweep.yaml index e2c3de3..f1652d9 100644 --- a/sweep.yaml +++ b/sweep.yaml @@ -1,43 +1,43 @@ -# Sweep AI turns bugs & feature requests into code changes (https://sweep.dev) -# For details on our config file, check out our docs at https://docs.sweep.dev/usage/config - -# This setting contains a list of rules that Sweep will check for. If any of these rules are broken in a new commit, Sweep will create an pull request to fix the broken rule. -rules: -- "All new business logic should have corresponding unit tests." -- "Refactor large functions to be more modular." -- "Add docstrings to all functions and file headers." - -# This is the branch that Sweep will develop from and make pull requests to. Most people use 'main' or 'master' but some users also use 'dev' or 'staging'. -branch: 'main' - -# By default Sweep will read the logs and outputs from your existing Github Actions. To disable this, set this to false. -gha_enabled: True - -# This is the description of your project. It will be used by sweep when creating PRs. You can tell Sweep what's unique about your project, what frameworks you use, or anything else you want. -# -# Example: -# -# description: sweepai/sweep is a python project. The main api endpoints are in sweepai/api.py. Write code that adheres to PEP8. -description: '' - -# This sets whether to create pull requests as drafts. If this is set to True, then all pull requests will be created as drafts and GitHub Actions will not be triggered. -draft: False - -# This is a list of directories that Sweep will not be able to edit. -blocked_dirs: [] - -# This is a list of documentation links that Sweep will use to help it understand your code. You can add links to documentation for any packages you use here. -# -# Example: -# -# docs: -# - PyGitHub: ["https://pygithub.readthedocs.io/en/latest/", "We use pygithub to interact with the GitHub API"] -docs: [] - -# Sandbox executes commands in a sandboxed environment to validate code changes after every edit to guarantee pristine code. For more details, see the [Sandbox](./sandbox) page. -sandbox: - install: - - trunk init - check: - - trunk fmt {file_path} || return 0 - - trunk check --fix --print-failures {file_path} +# Sweep AI turns bugs & feature requests into code changes (https://sweep.dev) +# For details on our config file, check out our docs at https://docs.sweep.dev/usage/config + +# This setting contains a list of rules that Sweep will check for. If any of these rules are broken in a new commit, Sweep will create an pull request to fix the broken rule. +rules: +- "All new business logic should have corresponding unit tests." +- "Refactor large functions to be more modular." +- "Add docstrings to all functions and file headers." + +# This is the branch that Sweep will develop from and make pull requests to. Most people use 'main' or 'master' but some users also use 'dev' or 'staging'. +branch: 'main' + +# By default Sweep will read the logs and outputs from your existing Github Actions. To disable this, set this to false. +gha_enabled: True + +# This is the description of your project. It will be used by sweep when creating PRs. You can tell Sweep what's unique about your project, what frameworks you use, or anything else you want. +# +# Example: +# +# description: sweepai/sweep is a python project. The main api endpoints are in sweepai/api.py. Write code that adheres to PEP8. +description: '' + +# This sets whether to create pull requests as drafts. If this is set to True, then all pull requests will be created as drafts and GitHub Actions will not be triggered. +draft: False + +# This is a list of directories that Sweep will not be able to edit. +blocked_dirs: [] + +# This is a list of documentation links that Sweep will use to help it understand your code. You can add links to documentation for any packages you use here. +# +# Example: +# +# docs: +# - PyGitHub: ["https://pygithub.readthedocs.io/en/latest/", "We use pygithub to interact with the GitHub API"] +docs: [] + +# Sandbox executes commands in a sandboxed environment to validate code changes after every edit to guarantee pristine code. For more details, see the [Sandbox](./sandbox) page. +sandbox: + install: + - trunk init + check: + - trunk fmt {file_path} || return 0 + - trunk check --fix --print-failures {file_path} From 7915a5c3f9984ec3e466b1fcd7f4cdc4a9889bd7 Mon Sep 17 00:00:00 2001 From: Arindam Date: Wed, 3 Jul 2024 03:55:33 +0530 Subject: [PATCH 3/8] Code ( Signed Commit ) | Adding VSCode Launch And Minor Docker Compose Changes. Also deleted the env.sample file. --- .vscode/launch.json | 22 ++++++++++++++++ .vscode/settings.json | 61 ++++++++++++++++++++++--------------------- docker-compose.yml | 13 ++++----- env.example | 0 4 files changed, 60 insertions(+), 36 deletions(-) create mode 100644 .vscode/launch.json delete mode 100644 env.example diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..5a105f9 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,22 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Attach to Chrome", + "port": 8000, + "request": "attach", + "type": "chrome", + "webRoot": "${workspaceFolder}" + }, + { + "type": "chrome", + "request": "launch", + "name": "Launch Chrome against localhost", + "url": "http://localhost:8080", + "webRoot": "${workspaceFolder}" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index d8928ce..e7e7ea3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,31 +1,32 @@ -{ - "workbench.colorCustomizations": { - "activityBar.activeBackground": "#feff1a", - "activityBar.background": "#feff1a", - "activityBar.foreground": "#15202b", - "activityBar.inactiveForeground": "#15202b99", - "activityBarBadge.background": "#00bebf", - "activityBarBadge.foreground": "#15202b", - "commandCenter.border": "#15202b99", - "sash.hoverBorder": "#feff1a", - "statusBar.background": "#e5e600", - "statusBar.foreground": "#15202b", - "statusBarItem.hoverBackground": "#b2b300", - "statusBarItem.remoteBackground": "#e5e600", - "statusBarItem.remoteForeground": "#15202b", - "titleBar.activeBackground": "#e5e600", - "titleBar.activeForeground": "#15202b", - "titleBar.inactiveBackground": "#e5e60099", - "titleBar.inactiveForeground": "#15202b99" - }, - "peacock.color": "#e5e600", - "peacock.remotecolor": "#e5e600", - // Disable Folder Collapse in the project - "explorer.compactFolders": false, - "explorer.confirmDragAndDrop": true, - "explorer.enableDragAndDrop": true, - "explorer.enableUndo": true, - "explorer.confirmUndo": true, - "explorer.confirmDelete": true, - "explorer.confirmPasteNative": true, +{ + "peacock.color": "#e5e600", + "peacock.remotecolor": "#e5e600", + // Disable Folder Collapse in the project + "explorer.compactFolders": false, + "explorer.confirmDragAndDrop": true, + "explorer.enableDragAndDrop": true, + "explorer.enableUndo": true, + "explorer.confirmUndo": true, + "explorer.confirmDelete": true, + "explorer.confirmPasteNative": true, + "workbench.colorCustomizations": { + "activityBar.activeBackground": "#ffff33", + "activityBar.background": "#ffff33", + "activityBar.foreground": "#15202b", + "activityBar.inactiveForeground": "#15202b99", + "activityBarBadge.background": "#00bfbf", + "activityBarBadge.foreground": "#15202b", + "commandCenter.border": "#15202b99", + "sash.hoverBorder": "#ffff33", + "statusBar.background": "#ffff00", + "statusBar.foreground": "#15202b", + "statusBarItem.hoverBackground": "#cccc00", + "statusBarItem.remoteBackground": "#ffff00", + "statusBarItem.remoteForeground": "#15202b", + "titleBar.activeBackground": "#ffff00", + "titleBar.activeForeground": "#15202b", + "titleBar.inactiveBackground": "#ffff0099", + "titleBar.inactiveForeground": "#15202b99" + }, + "peacock.remoteColor": "yellow", } \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index a664d1c..9cf05f7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,12 +1,11 @@ -version: '3.9' - services: - blogs-svc: + tuxtechblog-mkdocs: build: context: . - dockerfile: mkdocs_blogs.Dockerfile + # dockerfile: mkdocs_blogs.Dockerfile + dockerfile: blogs.tuxtechlab.Dockerfile ports: - - "8000:8000" + - "${BLOGS_CTR_INTERNAL_PORT}:${BLOGS_CTR_EXTERNAL_PORT}" restart: "unless-stopped" deploy: resources: @@ -15,4 +14,6 @@ services: memory: 50M reservations: cpus: '0.5' - memory: 20M \ No newline at end of file + memory: 20M + volumes: + - ${PWD}/TuxTechBlogs/:/docs \ No newline at end of file diff --git a/env.example b/env.example deleted file mode 100644 index e69de29..0000000 From 11973b6005228d7055d9f384c5e455b2e56e48de Mon Sep 17 00:00:00 2001 From: Arindam Date: Wed, 3 Jul 2024 03:56:24 +0530 Subject: [PATCH 4/8] Code ( Signed Commit ) | Adding New Changes in the Scripts. --- scripts/check_dependencies.sh | 4 +-- scripts/manage_compose.sh | 6 ++-- scripts/manage_stack.sh | 54 +++++++++++++++++++---------------- 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/scripts/check_dependencies.sh b/scripts/check_dependencies.sh index 35aa108..4912f24 100644 --- a/scripts/check_dependencies.sh +++ b/scripts/check_dependencies.sh @@ -3,8 +3,8 @@ ################################################################# # # -# Author : Arindam Tanti # -# Email Address : arindamtanti123@gmail.com # +# Author : TuxTechLab.com # +# Email Address : root.tuxtechlab@gmail.com # # # # Description : This script validates the environment # # for Docker Swarm, Python3, Poetry, # diff --git a/scripts/manage_compose.sh b/scripts/manage_compose.sh index 0224aeb..929e6a4 100644 --- a/scripts/manage_compose.sh +++ b/scripts/manage_compose.sh @@ -2,8 +2,8 @@ ############################################################## # # -# Author : Arindam Tanti # -# Email Address : iamarindamtanti@gmail.com # +# Author : TuxTechLab.com # +# Email Address : root.tuxtechlab@gmail.com # # # # Description : This script helps you to start, # # stop, update, and scale the blogs # @@ -18,7 +18,7 @@ # set -e # Disabled Exit on Error to capture errors. set -o pipefail # Checks for any pipe failures -logfile="../logs/blog-compose-$(date +'%d-%m-%Y').log" +logfile="../logs/blog-stack-$(date +'%d-%m-%Y-%H:%M').log" # Help function to display usage instructions help(){ diff --git a/scripts/manage_stack.sh b/scripts/manage_stack.sh index e47703a..1a0a941 100644 --- a/scripts/manage_stack.sh +++ b/scripts/manage_stack.sh @@ -2,8 +2,8 @@ ############################################################## # # -# Author : Arindam Tanti # -# Email Address : iamarindamtanti@gmail.com # +# Author : TuxTechLab.com # +# Email Address : root.tuxtechlab@gmail.com # # # # Description : This script helps you to start, # # stop, update, scale the blogs stack # @@ -17,7 +17,7 @@ # set -e # Disabled Exit on Error to capture errors. set -o pipefail # Checks for any pipefails -logfile="../logs/blog-stack-$(date +'%d-%m-%Y').log" +logfile="../logs/blog-stack-$(date +'%d-%m-%Y-%H:%M').log" # Help function to display usage instructions help(){ @@ -39,34 +39,38 @@ help(){ exit 1 } +logger(){ + echo "[ $(date +'%d-%m-%Y %H:%M:%S') ] | $1" | tee -a $logfile +} + # Function to deploy a stack stack_deploy(){ local stack_name=$1 img_spec="blogs:$(date +%Y%m%d-%H-%M-%S)" # Setting Up the logfile - echo "[ $(date +'%d-%m-%Y %H:%M:%S') ] (INFO) | Starting Blogs Stack Deploy." | tee -a $logfile + logger "(INFO) | Starting Blogs Stack Deploy." # Check if Docker is running in Swarm mode if docker info | grep -q "Swarm: active"; then - echo "[ $(date +'%d-%m-%Y %H:%M:%S') ] (INFO) | Docker is running in Swarm mode." | tee -a $logfile - echo "[ $(date +'%d-%m-%Y %H:%M:%S') ] (INFO) | Proceeding to Building Container and Deploying Application Stack..." | tee -a $logfile + logger "(INFO) | Docker is running in Swarm mode." + logger "(INFO) | Proceeding to Building Container and Deploying Application Stack..." # Build a new Docker image with the Dockerfile and tag it - echo "[ $(date +'%d-%m-%Y %H:%M:%S') ] (INFO) | Building Container Image [ $img_spec ]" | tee -a $logfile - cp ../mkdocs_blogs.Dockerfile ../Dockerfile | tee -a $logfile - docker build -t $img_spec ".." --no-cache | tee -a $logfile + logger "(INFO) | Building Container Image [ $img_spec ]" + cp ../mkdocs_blogs.Dockerfile ../Dockerfile + docker build -t $img_spec ".." --no-cache rm ../Dockerfile - docker image ls $img_spec | tee -a $logfile + docker image ls $img_spec # Run Docker stack deploy with the specified service file - echo "[ $(date +'%d-%m-%Y %H:%M:%S') ] (INFO) | Deploying Docker Stack: [ $stack_name ]" | tee -a $logfile - docker stack deploy -c "../blogs-stack.yml" "$stack_name" | tee -a $logfile - sleep 10 | tee -a $logfile - docker service ls | grep "blogs:" | tee -a $logfile + logger "(INFO) | Deploying Docker Stack: [ $stack_name ]" + docker stack deploy -c "../blogs-stack.yml" "$stack_name" + sleep 10 + docker service ls | grep "blogs:" - echo "[ $(date +'%d-%m-%Y %H:%M:%S') ] (INFO) | Docker Stack [ $stack_name ] Started Successfully." | tee -a $logfile + logger "(INFO) | Docker Stack [ $stack_name ] Started Successfully." else - echo "[ $(date +'%d-%m-%Y %H:%M:%S') ] (ERROR) | Error: Docker is not running in Swarm mode. Please enable Swarm mode to deploy Blogs stacks." | tee -a $logfile + logger "(ERROR) | Error: Docker is not running in Swarm mode. Please enable Swarm mode to deploy Blogs stacks." exit 1 fi } @@ -76,14 +80,14 @@ stop_stack(){ local stack_name=$1 # Stop the Docker stack - echo "[ $(date +'%d-%m-%Y %H:%M:%S') ] (INFO) | Stopping Docker Stack: $stack_name" | tee -a $logfile - docker stack rm "$stack_name" | tee -a $logfile + logger "(INFO) | Stopping Docker Stack: $stack_name" + docker stack rm "$stack_name" } # Function to restart a stack restart_stack(){ local stack_name=$1 - echo "[ $(date +'%d-%m-%Y %H:%M:%S') ] (INFO) | Restaring Docker Stack: $stack_name" | tee -a $logfile + logger "(INFO) | Restaring Docker Stack: $stack_name" stop_stack $stack_name sleep 5 stack_deploy $stack_name @@ -97,8 +101,8 @@ update_stack(){ local stack_name=$1 # Update the Docker stack - echo "[ $(date +'%d-%m-%Y %H:%M:%S') ] (INFO) | Updating Docker Stack: $stack_name" | tee -a $logfile - docker stack deploy -c "../blogs-stack.yml" "$stack_name" | tee -a $logfile + logger "(INFO) | Updating Docker Stack: $stack_name" + docker stack deploy -c "../blogs-stack.yml" "$stack_name" } # Function to scale a stack @@ -108,14 +112,14 @@ scale_stack(){ local replicas=$3 # Scale the specified service in the Docker stack - echo "[ $(date +'%d-%m-%Y %H:%M:%S') ] (INFO) | Scaling Service: $service_name in Stack: $stack_name to $replicas replicas" | tee -a $logfile - docker service scale "$stack_name"_"$service_name"="$replicas" | tee -a $logfile + logger "(INFO) | Scaling Service: $service_name in Stack: $stack_name to $replicas replicas" + docker service scale "$stack_name"_"$service_name"="$replicas" } # Function to list running stacks list_stacks(){ - echo "[ $(date +'%d-%m-%Y %H:%M:%S') ] (INFO) | Listing All running Docker Stacks:" | tee -a $logfile - docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' | tee -a $logfile + logger "(INFO) | Listing All running Docker Stacks:" + docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' } # Main function to parse command-line arguments and execute corresponding functions From c26a3c14214e3aa96e0edcc6d2bf0de4e47fe098 Mon Sep 17 00:00:00 2001 From: Arindam Tanti Date: Wed, 3 Jul 2024 05:01:37 +0530 Subject: [PATCH 5/8] Code + Fix | Update mkdocs.yml to comment out dev_addr Disabled dev_addr:0.0.0.0 setting mkdocs.yml. Signed-off-by: Arindam Tanti --- TuxTechBlogs/mkdocs.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/TuxTechBlogs/mkdocs.yml b/TuxTechBlogs/mkdocs.yml index 5957309..79f56ee 100644 --- a/TuxTechBlogs/mkdocs.yml +++ b/TuxTechBlogs/mkdocs.yml @@ -16,7 +16,8 @@ copyright: > # Site Configurations use_directory_urls: true strict: no -dev_addr: 0.0.0.0:{BLOGS_CTR_INTERNAL_PORT} +# Enable dev_addr when working in development environment. +#dev_addr: 0.0.0.0:{BLOGS_CTR_INTERNAL_PORT} # Configuration theme: @@ -305,4 +306,4 @@ plugins: post_date_format: full post_url_date_format: yyyy/MM/dd - minify: - minify_html: true \ No newline at end of file + minify_html: true From 89bdb0f84f1b2cdb42f73cafc736f4a6e34c268f Mon Sep 17 00:00:00 2001 From: Arindam Date: Sun, 7 Jul 2024 10:20:21 +0530 Subject: [PATCH 6/8] Code + Fix ( Signed Commit ) | Adding new vscode workspace color changes in the settings.json --- .vscode/settings.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index e7e7ea3..2409c0a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,22 +10,22 @@ "explorer.confirmDelete": true, "explorer.confirmPasteNative": true, "workbench.colorCustomizations": { - "activityBar.activeBackground": "#ffff33", - "activityBar.background": "#ffff33", + "activityBar.activeBackground": "#feff1a", + "activityBar.background": "#feff1a", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", - "activityBarBadge.background": "#00bfbf", + "activityBarBadge.background": "#00bebf", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", - "sash.hoverBorder": "#ffff33", - "statusBar.background": "#ffff00", + "sash.hoverBorder": "#feff1a", + "statusBar.background": "#e5e600", "statusBar.foreground": "#15202b", - "statusBarItem.hoverBackground": "#cccc00", - "statusBarItem.remoteBackground": "#ffff00", + "statusBarItem.hoverBackground": "#b2b300", + "statusBarItem.remoteBackground": "#e5e600", "statusBarItem.remoteForeground": "#15202b", - "titleBar.activeBackground": "#ffff00", + "titleBar.activeBackground": "#e5e600", "titleBar.activeForeground": "#15202b", - "titleBar.inactiveBackground": "#ffff0099", + "titleBar.inactiveBackground": "#e5e60099", "titleBar.inactiveForeground": "#15202b99" }, "peacock.remoteColor": "yellow", From 9a0aa937266fd9fc214801929704bce4d8cb903e Mon Sep 17 00:00:00 2001 From: Arindam Tanti Date: Tue, 23 Jul 2024 21:58:46 +0530 Subject: [PATCH 7/8] Code + Fix ( Signed Commit ) | Adding code fixes --- .github/workflows/ci_cd_prod.yml | 47 ++++++++++++++++++-------------- .vscode/settings.json | 18 ++++++------ CNAME | 1 - TuxTechBlogs/mkdocs.yml | 2 +- 4 files changed, 36 insertions(+), 32 deletions(-) delete mode 100644 CNAME diff --git a/.github/workflows/ci_cd_prod.yml b/.github/workflows/ci_cd_prod.yml index d6a60dd..e5a2664 100644 --- a/.github/workflows/ci_cd_prod.yml +++ b/.github/workflows/ci_cd_prod.yml @@ -1,5 +1,4 @@ -name: ci_cd_prod - +name: 🚀 PROD - Publish TuxTechBlogs via GitHub Actions & Github Pages on: workflow_dispatch: push: @@ -9,25 +8,31 @@ permissions: contents: write jobs: - deploy_on_build: + build: + name: Deploy Mkdocs Website runs-on: ubuntu-latest steps: - - name: Checkout Github Repository - uses: actions/checkout@v3 # Use version 3 of the action - - - name: Install Python - uses: actions/setup-python@v4 # Use version 4 of the action - with: - python-version: '3.x' - - - name: Install Python Dependencies - run: | - echo "Installing The Python Dependencies" - pip install mkdocs mkdocs-material mkdocs-swagger-ui - echo "Completed Installing Python Dependencies" + - name: Checkout master Branch of Blogs + uses: actions/checkout@v2 - - name: Deploy mkdocs Website - run: | - cd TuxTechBlogs - mkdocs gh-deploy -b prod-pages --clean --force - echo "Completed Deploying The Website" + - name: Deploy Blogs on Custom Domain + uses: mhausenblas/mkdocs-deploy-gh-pages@master + # Or use mhausenblas/mkdocs-deploy-gh-pages@nomaterial to build without the mkdocs-material theme + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CUSTOM_DOMAIN: blogs.tuxtechlab.com + CONFIG_FILE: TuxTechBlogs/mkdocs.yml + EXTRA_PACKAGES: > + jinja2~=3.0 + markdown~=3.2 + mkdocs~=1.6 + mkdocs-material-extensions~=1.3 + pygments~=2.16 + pymdown-extensions~=10.2 + babel~=2.10 + colorama~=0.4 + paginate~=0.5 + regex>=2022.4 + requests~=2.26 + # GITHUB_DOMAIN: github.myenterprise.com + REQUIREMENTS: requirements.txt \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 2409c0a..e7e7ea3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,22 +10,22 @@ "explorer.confirmDelete": true, "explorer.confirmPasteNative": true, "workbench.colorCustomizations": { - "activityBar.activeBackground": "#feff1a", - "activityBar.background": "#feff1a", + "activityBar.activeBackground": "#ffff33", + "activityBar.background": "#ffff33", "activityBar.foreground": "#15202b", "activityBar.inactiveForeground": "#15202b99", - "activityBarBadge.background": "#00bebf", + "activityBarBadge.background": "#00bfbf", "activityBarBadge.foreground": "#15202b", "commandCenter.border": "#15202b99", - "sash.hoverBorder": "#feff1a", - "statusBar.background": "#e5e600", + "sash.hoverBorder": "#ffff33", + "statusBar.background": "#ffff00", "statusBar.foreground": "#15202b", - "statusBarItem.hoverBackground": "#b2b300", - "statusBarItem.remoteBackground": "#e5e600", + "statusBarItem.hoverBackground": "#cccc00", + "statusBarItem.remoteBackground": "#ffff00", "statusBarItem.remoteForeground": "#15202b", - "titleBar.activeBackground": "#e5e600", + "titleBar.activeBackground": "#ffff00", "titleBar.activeForeground": "#15202b", - "titleBar.inactiveBackground": "#e5e60099", + "titleBar.inactiveBackground": "#ffff0099", "titleBar.inactiveForeground": "#15202b99" }, "peacock.remoteColor": "yellow", diff --git a/CNAME b/CNAME deleted file mode 100644 index 4d47527..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -blogs.tuxtechlab.com \ No newline at end of file diff --git a/TuxTechBlogs/mkdocs.yml b/TuxTechBlogs/mkdocs.yml index 79f56ee..72d2b10 100644 --- a/TuxTechBlogs/mkdocs.yml +++ b/TuxTechBlogs/mkdocs.yml @@ -15,7 +15,7 @@ copyright: > # Site Configurations use_directory_urls: true -strict: no +strict: false # Enable dev_addr when working in development environment. #dev_addr: 0.0.0.0:{BLOGS_CTR_INTERNAL_PORT} From 0aa97f28ca980d3fb5c7efab2225269ef81717f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jul 2024 16:30:12 +0000 Subject: [PATCH 8/8] Bump requests from 2.31.0 to 2.32.2 Bumps [requests](https://github.com/psf/requests) from 2.31.0 to 2.32.2. - [Release notes](https://github.com/psf/requests/releases) - [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md) - [Commits](https://github.com/psf/requests/compare/v2.31.0...v2.32.2) --- updated-dependencies: - dependency-name: requests dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 0e10074..8e37c49 100644 --- a/requirements.txt +++ b/requirements.txt @@ -31,4 +31,4 @@ babel~=2.10 colorama~=0.4 paginate~=0.5 regex>=2022.4 -requests~=2.26 \ No newline at end of file +requests~=2.32 \ No newline at end of file