teleren/devto huggingface dataset:
Week 1 - Building Projects to impress 🤯🤯 Employers or Hiring Managers [VoteSub]
Tags: votesub, react, typescript, firebase
Published: 2021-10-31 17:11:05

Hey everyone, My name is Kiran A. Bansode. I'm a self-taught Full-Stack web developer.

This is 2nd blog of Building Projects to impress 🤯🤯 Employers or Hiring Managers[VoteSub] series.

So as from 1st blog you already know, Why I'm buiding this project ?

In this blog I'm going to share you, What I did in last 3 days ?

## Day - 1 [Thursday, 28/10/2021]

No matter what if your project is small or big,  SDLC(Software Development Life-Cycle) methodology will provide clearly defined processes for creating high-quality software.

### This methodology consist following phases - 
* Requirement(Research)
* Design
* Coding
* Testing
* Production 
* Maintenance

On Day - 1, I did some research for my project like, Which will be most common input fields ? What data will be required for firebase to create a new user ? ... and much more.

On the basis of that research, I designed two pages using Figma.

You can view them in Figma designs [here](https://www.figma.com/file/ibh6SGKzcY9jgaTqusZy7b/VoteSub?node-id=0%3A1)


## Day - 2 [Friday, 29/10/2021]

Day - 2  was all about setting up project and adding required dependencies. I installed following dependencies - 

* @mui/material, @mui/icons-material, @emotion/react, @emotion/styled,
* @reduxjs/toolkit, react-redux
* react-hook-form, yup, @hookform/resolvers
* sass, styled-components

I also install devDependencies like - 

 * prettier
 * eslint
 * husky
 * lint-staged
 * commitlint

The will help me to have readable and maintainable code. I also configured ESLint, Prettier, Husky  and commitlint using their official docs.

I also use git branching strategy. So far, I created 2 branches
1. master - production or live website related code
2. develop - development realated code

In future there will be 2 more branches.
1. testing
2. staging

> Note : I changed my default git branch to develop. So those who forked my git repo, please adjust your fork repo setting(I don't know How to ? so can't suggest anything).

## Day - 3 [Saturday, 30/10/2021]

Not able to do much project related work because of school. But what ever time I got after school work, I was able to identify 3 most common component that I'll be needed most.
I added them as card in trello.

You can view trello cards [here](https://trello.com/b/dPmDCweY)

I also added some more lists. Those lists reflects actual SDLC(it still not complete).

In next week I'll start coding phase of project for those 2 pages (Login and Registration Page). In that week I will convert designs into code. Also add redux store and connect project to firebase backend. For this I'm going to use Agile model. I'll complete this project in weekly sprints.

This week is going to be hectic because of Diwali vacation. Also I'll need to check my school's Semester - 1 papers. This is going to be fun and challenging.

So till then bye bye . See on next Sunday.
自己的 VPN 自己建，用 ZeroTier 建構自己的虛擬內網
Tags: zerotier, vpn
Published: 2021-10-31 17:10:27

目前全球遭受新冠病毒的威脅，許多企業紛紛開始採用遠端工作模式減少人際接觸，然而對一些小型企業來說，遠端工作難以施行的原因可能是因為它們的 IT 環境尚未建置 VPN，對這樣的需求來說，我們可以利用 [ZeroTier](https://www.zerotier.com/) 來建構自己的 VPN，ZeroTier 不需要太多的網路技術知識，對一般人而言也可以輕鬆架好架滿。

## 下載與安裝

ZeroTier 安裝在本地的客戶端稱為 ZeroTier One，ZeroTier One 支援多個平台，包括 macOS、Linux、Windows、iOS、Android 等等，以 Debian 系的 Linux（elementary OS、Debian、Ubuntu）來說，可以透過執行下面這行指令自動幫我們設好 APT 庫與金鑰：

```sh
curl -s https://install.zerotier.com | sudo bash
```

其它作業系統的安裝方式可以參照 ZeroTier 網站。

## ZeroTier Network

ZeroTier Network 就是虛擬區網，用戶可以自行建立多個 ZeroTier Network 供不同的目的使用（公司網、親友網、老司機網等等），必須先建立至少一組的 ZeroTier Network 後再為每台裝置（電腦、手機）加入那個 Network。

ZeroTier Network 的建立與管理是透過 [ZeroTier Central](https://my.zerotier.com/) 這個網站來操作，註冊的過程我們快速跳過，快轉進入到 ZeroTier Central 的 Networks 頁面：

![ZeroTier Central](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9j6hq50b5d2at0f962x7.png)

按左上角的「Create a Network」會幫我們建立一組 ZeroTier Network，每個 Network 由十六碼的 ID 與名稱組成，ID 是 Network 的獨立識別碼，建立後就不可被更改，ID 也是之後我們要在本機端加入 Network 的依據，名稱則只是便於在 ZeroTier Central 操作時識別而已，可隨意命名。

進入剛剛建立的那個 Network，裡面看起來很複雜，可是其實以簡單的用戶端能互聯這樣的需求來看，要設定的地方不多。

![ZeroTier Central](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zi2jphclzm31v3fxud6r.png)

### Settings

Network 的基礎設定。

- Network ID：Network 獨立識別碼，用於之後加入該 Network 所使用。
- Name：Network 名稱，可自行取名。
- Access Control：請選 PRIVATE，確保每個加入的裝置都是你認得的。

下面 Advanced 那邊是一些 IP 的技術參數，可以不用動。

### Members

加入本 Network 的裝置，目前應該是空白，到後面在本機端加入這個 Network 後就會有裝置清單與簡單的管理介面出現。

### Flow Rules

更細節的流量規則，一樣不用動。

### Sharing

把本 Network 的管理頁面分享給其它 ZeroTier 帳號。

最單純的情境下，四大區塊其實什麼也不用動。

## 把裝置加入 Network

前面我們已經建立了一組 ZeroTier Network，要把一部已經裝好 ZeroTier One 的 Linux 加入那個 Network，首先把 Network ID 記下來，然後搭配 ZeroTier One 的命令工具 `zerotier-cli` 使用：

```sh
sudo zerotier-cli join ################
```

後面的井字號用 Network ID 填上。

因為前面在 ZeroTire Central 的 Network 的設定我們用了 private 的存取控制，所以每當有新裝置加入這個 Network 時，我們必須再回到 Network 的管理介面去授權這台新裝置加入我們的 Network。

回到 ZeroTier Central 的 Network 管理介面，在 Members 區段下應該可以發現有剛加入的新裝置，在 Auth? 位置打勾對它進行授權即可。另外也可以幫這個裝置命名方便之後的識別。

只要重複上面的步驟把每台裝置都加入 Network 後，就可以透過 ZeroTier 幫我們建構的虛擬區網互連了。

## 進階應用

橋接網路，可以透過在公司的那台電腦當作跳板存取公司內網的網站，或是身陷中國 GFW 內也可以透過家裡的電腦當跳板存取自由的網路。

## ZeroTier 安全嗎？

ZeroTier 的安全機制是建立在端對端的加密連線上，在 A、B 兩台電腦間是直接連線的，並不透過 ZeroTier 作為中介，並且這兩端的連線是加密的，僅有彼此能為訊息解密，而端點間的加密與認證機制也是可以信賴的。在某些情況下當兩端無法直接連線時，可能會透過 ZeroTier 的中介機台作為溝通的媒介，但由於前面提到的端對端的加密連線機制，中介機台是無法看到原始的資料的，所以總的來說，ZeroTier 是安全的，不過也還是要保有「世界上沒有絕絕對對的安全」的觀念，有疑慮、有芥蒂、覺得沒花錢就是不安心、不爽快、手會癢，那就不要用。

關於詳細的 ZeroTier 的安全機制，參見[〈Protocol Design Whitepaper〉的 Cryptography 一節](https://docs.zerotier.com/zerotier/manual#213cryptographyaname2_1_3a)。
Short circuit expressions in php?
Tags: php
Published: 2021-10-31 16:32:07

I enjoy using short circuit evaluation in javascript.  Since I work with a legacy php personal project, I would like to write simpler, terser and easier code in php as well.  So what is the equivalent of js short circuit expressions in php?

For example, in js you can write:

```js
const complexEvaluated = someEvaluation() && false // false
const finalCount = complexEvaluated || 0 // zero
```

It's great to be able to quickly create fallbacks and immediately and visibly ensure that a variable has a value.

In php, short circuit fallthrough doesn't work exactly the same way:

```php
<?php
$complexEvaluated = someEvaluation() || 7; // boolean true
$finalCount = countUp() || 0; // boolean true
```

Instead it is necessary to use null coalescing, usually:

```php
<?php
$complexEvaluated = someEvaluation() ?? 7; // 7
$complexEvaluated = someEvaluationToFalseOrZero() ?: 44; // 44
$finalCount = countUp() ?? 0; // 0
```

And you essentially have to use a different operator for falsy outcomes vs null outcomes, the short ternary `?:` vs the null coallescing operator `??` 

----

In another post I will cover the equivalent of js destructuring in php, or as close as you can get (spoiler: It's useful, but not as useful as js destructuring).
Hacktoberfest 2021 - Growing With Pull Requests
Tags: hacktoberfest
Published: 2021-10-31 16:36:31

### Background

I got my start with open source with last year's Hacktoberfest; that was certainly a wild year, but it was a great time to get started on collaborating with folks outside of my bootcamp at the time.

### Progress

Knocked out all of my open pull requests the other week, so I'm done with those contributions for the season!

### Contributions

It was a pretty straightforward roundup this year; worked on some starter kits for the event, then helped fix up some issues on Javascript games that were tagged for Hacktoberfest, but not getting much attention. 


### Reflections
This was an even better year than 2020's for me! I had just finished a coding bootcamp when it started back then, so it's been great to have something to benchmark how my skills have advanced over the course of a year. I'm looking forward to Hacktoberfest 2022 already!
Portainer at KubeCon + CloudNativeCon NA
Tags: kubernetes, container, kubecon
Published: 2021-10-31 16:34:50

On October 11 - 15 this year, KubeCon + CloudNativeCon NA was held. It was a very interesting event. It was a hybrid event with so many interesting keynotes, workshops, demos, office hours, etc... 

I can say about so many things that happened in the event but there was company @portainerio that had very interesting topics and big announcement for the community and users. 

Some of these interesting sessions were as follows:
1. How To Build a Kubernetes Environment - the Easy way
2. How to Automate App Development using Portainer and Git
3. Portainer and Canonical - Easy MicroK8s and Charmed
4. RBAC Made Easy with Portainer
5. Migrating from Docker to Kubernetes

The sessions were very interesting and informative and to cap it all, there was a big announcement which with the release on the new Portainer CE 2.9.1. 

Here are some of the new features:
> Improved UI
> Kubectl Shell
> Portainer as a proxy for third-party container environments
> Lightweight GitOps
> Helm Charts support
> Custom Templates
> Private registry support for Kubernetes
> HTTPS support
> Removal of 'Advanced Mode'
> Dark Mode

If you want more info on the new features, check out this blog by @portainerio - https://bit.ly/3j3uTTu

You can find a release notes here: https://github.com/portainer/portainer/releases/tag/2.9.1

You can also find the documentation here: https://docs.portainer.io/v/ce-2.9/?_ga=2.204215568.1879061827.1635697587-1595820817.1620039083

From this release, one of my favorite new feature is the Dark mode.
LERN GQL WITH ME: Schema Definition Language
Tags: graphql, javascript, webdev, typescript
Published: 2021-10-31 16:32:05

(Examples taken from howtographql)

Welcome to the second part of Learn GraphQL With Me. In this post we will be learning about some core concepts related to GraphQL. These concepts are language independent, so it means that you do not need to know any particular language to understand these, as these are GraphQL specific, and once understood can be implemented in any language.

One thing to keep in mind here is that as GraphQL is different from REST and SOAP, you need to try to understand this little differently as GraphQL has its own specific concepts, which are independent of any other type of API.

So let's finally begin learning GraphQL.




## Schema Definition Language (SDL)

GraphQL has its own type system for defining schemas, like we do for modelling the database tables (for SQL) and documents (for NoSQL). This is called the SDL or the Schema Definition Language. 

So this is how you define schemas or types in GraphQL:

```graphql
type Person {
	name: String!
	age: Int!
}
```
Notice how we have `!` after the data types String and Int. This tells that 'name' and 'age' are compulsory. If we just wrote name as `name: String`, this would have meant that it is not compulsory that Person has a name.

Let's also add a Post type to our schema:

```graphql
type Post {
	title: String!
}
```

Now what if we want to have relations between the Post and the Person type. We can now use Person and Post as a data type, like we use String, Int. So let's define an author field, which is of type Person.

```graphql
type Post {
	title: String!
	author: Person!
}
```

This tells that a Post will have an author who will be a Person. But we also want to say that a Person can write many posts, so how do we do that. Let's add a posts field to Person type which will be an array of type Post.

```graphql
type Person {
	name: String!
	age: Int!
	posts: [Post!]!
}
```

Notice how we have ! after Post as well as after ], this tells that the array is compulsory as well as there has to be some data of type Post inside it.
Data Types
Tags: beginners, programming, codenewbie, java
Published: 2021-10-31 16:29:08

## Declaring Information
New to Java and statically typed languages. So needing to declare every single instance of data was a foreign concept at first. Conceptually this approach is logical. You need to know exactly the type of data you want to call and exactly what kind of data you want to return. 
```java
int numberOfToads = 5; 
double costOfGroceries = 23.21;
boolean isReal = false;
String letters = 'info'; 
char lastLetter = 'o'; 
```
### Type Casting 
Changing one data's value into another data type. 
```java
int wholeNumber = 8; 
double decimalNumber = wholeNumber; // 8.0
```
#### Two styles of casting
1 Widening: automatic conversion from small to larger type 
```java
// byte -> short -> char -> int -> long -> float -> double
```
2 Narrowing: manual conversion from larger to smaller type 
```java
// double -> float -> long -> int -> char -> short -> byte
```

## Evaluate Expressions 
Performing calculations on data. Fundamental math rules apply. 

```java
int total; 
total = 4 + 4;     // addition
total = total - 3; // subtraction
total = total * 5; // multiplication
total = total / 5; // division 
total = total % 3; // remainder of 
```

### Real Use Case 
```java 
int player1 = 75;
int player2 = 87;
int player3 = 92;

int averagePoints = (player1  + player2  + player3 ) / 3;  
double averagePoints = (player1  + player2  + player3 ) / 3.0; 

```
7 Useful CSS code snippet Websites
Tags: webdev, beginners, css, programming
Published: 2021-10-31 16:18:07

## 1. [Code My UI](https://codemyui.com/tag/pure-css/)
![Code My UI](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jiqcx9e27wl4t6vmlmx0.PNG)
There are 453 CSS UI Design Examples on Code My UI
You'll find pure CSS examples or HTML elements created with only CSS to give it some sassy effects.
Typically, one would use JS or other things to achieve similar effects, but CSS alone can be used.

There are a lot of CSS only code snippets in here, ranging from accordions to sliders to dropdown menus.
You can recreate these effects on your website without any coding knowledge by using the code snippets in this section.

## 2. [Codepad](https://codepad.co/)
![Codepad](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ot6utmulc7onvm2f71b7.PNG)
Codepad is a place where developers can share code snippets (PHP, Java, Bash, C, C++, Python and more).
Create your HTML, CSS and JS Demos.

## 3. [CSS Deck](https://cssdeck.com/)
![CSS Deck](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4y5x4pa1xj9ee331kfp4.PNG)
## 4. [Design Bombs](https://www.designbombs.com/freebies/)
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7oxj0qzfa6tsmxkjzzjo.PNG)
Design Bombs is an online publication providing well-researched guides, tutorials, exclusive deals, and other useful content.

## 5. [CSS-Tricks](https://css-tricks.com/snippets/)
All things related to web design and development, including CSS, HTML, JavaScript, and more.

## 6. [Snipt](https://github.com/nicksergeant/snipt)
Code snippets for teams and individuals.

## 7. [30 seconds of code](https://www.30secondsofcode.org/css/p/1)
![30 seconds of code](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ycpmnppkt1ai7v1tmhx.PNG)
It covers techniques for creating commonly-used layouts, styling and animating elements, as well as snippets for handling user interaction.

My Blog:- [Beginner Developer Blog](https://beginners-developer.blogspot.com)
How to create nightly releases with Github Actions
Tags: githubactions, ci, github
Published: 2021-10-31 16:18:00

In my GitHub projects, I like to have the artifact (e.g. a jar) of the latest successful build on a specific branch (e.g. `develop` or `main`) available for download. This is the equivalent of a *nightly release*, but is not supported out-of-the-box by Github.

GitHub Actions lets you attach artifacts to builds, but those artifacts do not have a stable URL. Worse, the URL is difficult to find automatically (you need to navigate to the *Actions* tab of the repo, find the latest build, etc.).

My workaround is the following.

### 1) create a release (just once)

The idea here is just to have a release linked to some tag, that will be used later in the GitHub workflow.

In your repo, navigate to *Releases* and click on *Draft a new release*:
* on the *Choose a tag* dropdown, create a tag, for example `nightly`,
* (optional) fill in the title and description as you see fit,
* (optional) select *This is a pre-release*

The only important thing here is to have a tag. I usually use `nightly`, but the actual name is up to you.

The final, stable link will be:
```bash
https://github.com/${user}/${repo}/releases/tag/${tag}
```

### 2) Add a step in your workflow

Use the [eine/tip action](https://github.com/eine/tip) to update the release with whatever artifact(s) you want.

The parameters are:
* `token`: your GitHub token ⟶ `${{ secrets.GITHUB_TOKEN }}`,
* `tag`: the name of the tag created in 1,
* `rm`: whether or not to remove existing artifacts on upload (I always set it to `true`), 
* `files`: either a single filename/pattern or a multi-line string with one file per line

Here is a simple example, uploading anything under `build/libs` to the `nightly` release, removing/replacing old artifacts in the process:

```yaml
- name: Update nightly release
  uses: eine/tip@master
  with:
    tag: nightly
    rm: true
    token: ${{ secrets.GITHUB_TOKEN }}
    files: build/libs/*.*
```

Another nice feature is to have some `version.txt` or `info.txt` file in the release, that holds some metadata such as the version of the artifact, the GitHub ref, etc. For that, you can simply add a step *before* `eine/tip`:
```yaml
- name: Create info file
  run: |
     echo -e "ref: $GITHUB_REF \ncommit: $GITHUB_SHA\nbuild: $(date +"%Y-%m-%dT%H:%M:%SZ")" \
     > build/libs/info.txt
```

## Examples

Here are some of my repos that use this trick:

* https://github.com/big-building-data/bbdata-api ⟶ [workflow](https://github.com/big-building-data/bbdata-api/blob/master/.github/workflows/main.yml)
* https://github.com/derlin/bitdowntoc ⟶ [workflow](https://github.com/derlin/bitdowntoc/blob/master/.github/workflows/deploy.yml)
* https://github.com/derlin/docker-compose-viz-mermaid ⟶ [workflow](https://github.com/derlin/docker-compose-viz-mermaid/blob/main/.github/workflows/main.yaml)
Shift06_03.java
Tags: java, beginners, programming, tutorial
Published: 2021-10-31 16:03:55

```java
// Shift Operators
	// problem:
	// Shift06_03.java{wirte java program showing the working of Shift Operators.}
class Shift06_03
{
	public static void main(String args[])
	{
		int x= 2 , y= 1;
		System.out.println("Value of x and y is = "+x+" "+y);
		System.out.println("Binary value of x and y is "+Integer.toBinaryString(x)+" "+Integer.toBinaryString(y));
		System.out.println("Binary notation of x and y is: 000000010 00000001");
		System.out.println("Left Shift Operator "+x+" << "+y+" => "+(x<<y));
		System.out.println("Left shift work by shifting 'y' bit in left side in binary notation of 'x' as follows: 00000010 << 000000100");
		
		System.out.println("Right Shift Operator "+x+" >> "+y+" => "+(x>>y));
		System.out.println("Right shift work by shifting 'y' bit in right side in binary notation of 'x' as follows: 00000010 >> 00000001");

		System.out.println("Unsigned Right Shift Operator "+x+">>>"+y+"=>"+((x>>>y)));
		System.out.println("Unsigned Right Shift Operator work by shifting the 'y' bits in right side in binary notation but signed is not copied. ");
		
		System.out.println("Showing the Unsigned operator with negative sign on x");
		System.out.println("Left Shift Operator -"+x+" << "+y+" => "+(-x<<y));
		System.out.println("Right Shift Operator -"+x+" >> "+y+" => "+(-x>>y));
		System.out.println("Unsigned Right Shift Operator -"+x+">>>"+y+" => "+((-x>>>y)));
		
		System.out.println("ENDING THE PROGRAM...\n:-) THANK YOU (-:");
	}
}
```
relat06_02.java
Tags: java, beginners, programming, tutorial
Published: 2021-10-31 16:01:03

```java
// Relational Operators
	// problem:
	// relat06_02.java{wirte java program showing the waorking of all Relational Operators.}
class relat06_02
{
	public static void main(String args[])
	{
		int x= 10 , y= 11;
		System.out.println("Value of x = "+x+" and value of y = "+y);
		System.out.println("Equal to operator always give the boolean response.");
		System.out.println("Is "+x+" == "+y+" => "+(x==y));
		System.out.println("Not Equal to operator is also give the boolean response.");
		System.out.println("Is "+x+" != "+y+" => "+(x!=y));
		System.out.println("Greater than also give the boolean response.");
		System.out.println("Is "+x+" > "+y+" => "+(x>y));
		System.out.println("Greater than Equal to also give the boolean response.");
		System.out.println("Is "+x+" >= "+y+" => "+(x>=y));
		System.out.println("Lesser than also give the boolean response.");
		System.out.println("Is "+x+" < "+y+" => "+(x<y));
		System.out.println("Lesser than Equal to also give the boolean response.");
		System.out.println("Is "+x+" <= "+y+" => "+(x<=y));
		System.out.println("ENDING THE PROGRAM...\n:-) THANK YOU (-:");
	}
}
```
16th weekly post, slice and map. Also, Jest.
Tags: javascript, jest, firefox
Published: 2021-10-31 15:58:53

## Items of the week

1. **JavaScript** - the array `.slice()` method accepts negative index, thus it is possible to extract the last element with `.slice(0, -1)`. More details available on [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice).

2. **JavaScript** - it is common to see objects being used as maps but there are quite a number of differences in using an actual `Map`, such as using any types as keys instead of just string. MDN Web Docs has [a good comparison table on this](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#objects_vs._maps).

3. **Jest** - ESM support is still experimental at the moment as mentioned in [the official documentation page](https://jestjs.io/docs/ecmascript-modules).

## Note of the week

On the week 43 of 2021, we saw that [the news of the upcoming Firefox 94 switching from GLX to EGL](https://mozillagfx.wordpress.com/2021/10/30/switching-the-linux-graphics-stack-from-glx-to-egl/), this should translate to better WebGL performance for Linux users. That's all for this week's post, I must admit this week's post was a bit more rushed than usual, still, thank you for reading and if you have got any feedback, do let me know by leaving a comment. Have a nice day!
Participated for Hacktoberfest 2021
Tags: hacktoberfest, opensource
Published: 2021-10-31 15:52:34

---
title: Participated for Hacktoberfest 2021
published: true
tags: hacktoberfest, opensource 
---
I participated hacktoberfest for the second time. It was a great experience to improve my coding skills and it's a great motivation to learn and work with open source projects. 

I would like to thank everyone who accepted my PRs and allowed me to take part in this event. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bjt6ivxujw4owj8nsa20.png)
Architecture Pattern Library
Tags: aws, architecture, serverless
Published: 2021-10-31 15:27:08

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kwt9hm3mfkbhjflzird8.png)

We at the MaaS Global go serverless-first when we build our mobile app's backend service. Since 2016 when we started to develop the service, we've used Lambdas, API Gateways, and other managed services that AWS offers. 

Our service contains hundreds of Lambdas per stage, dozens of API gateways, S3 buckets, and such. In addition to that, there are dozens of ways to do the same thing in AWS. For example, you can use Lambda, Kubernetes, ECS with Fargate, or plain EC2 instances for computing, and all options come with different features and restrictions. So even for senior engineers, adding new pieces to this puzzle can feel overwhelming. When the organization grows, and new engineers join the team, they also must adopt the internally used practices as part of the onboarding process. 

To help engineers with their efforts to architect features consistently, we've introduced a library of patterns that can be used to build larger architectures. It contains simple things like an API gateway, Lambda and PostgreSQL connection, S3 event triggers and queue processing. Also, it includes some high-level patterns such as a webhook proxy and cross-account event routing. 

Our patterns library is publicly available in GitHub  https://github.com/maasglobal/maas-aws-patterns.