text:
# weekly35

## skafforld.dev

## Makefile
- Create projects nodejs
- start k8s
- login dockerhub
- Dockerfile Start/Stop named containers
- Dockerfile Parameter passing
## Dockerfile

- Makefile
```
# skaffold.dev
# skaffold.dev
.PHONY= init

k8start:
	minikube start &
k8stop:
	minikube stop &
dockerlogin:
	docker login
dockerlogout:
	docker logout
step01: products
	mkdir products cart && cd products
step02: step01
	cd products && npm -y init; npm i nodemon express
	cd cart && npm -y init; npm i nodemon express
step03:
	cd products && mkdir src && cd src && touch index.js
	cd cart && mkdir src && cd src && touch index.js
step04:
	cd products && PORT=3000 npm run start &
	cd cart && PORT=3001 npm run start &
	# kill -9<PHONE_NUMBER>43<PHONE_NUMBER>70 112171
step05:
	cd products && docker build . && docker build -t maximilianou/products .
	cd cart && docker build . && docker build -t maximilianou/cart .
step06:
	cd products && docker run --name weekly35_products -p 3000:30000 -e PORT=30000 maximilianou/products &
	cd cart && docker run --name weekly35_cart -p 3001:30001 -e PORT=30001 maximilianou/cart &
step07:
	docker stop weekly35_products
	docker stop weekly35_cart
step08:
	docker push maximilianou/products
	docker push maximilianou/cart
step09:
	mkdir k8s && cd k8s && kubectl create deploy products --image=maximilianou/products --dry-run=client -o yaml > products-definition.yaml
	cd k8s && kubectl create deploy cart --image=maximilianou/cart --dry-run=client -o yaml > cart-definition.yaml
step10:
	kubectl create -f products-definition.yaml
	kubectl create -f k8s/cart-definition.yaml
step11:
	cd k8s && kubectl run nginx --image=nginx  -it --restart=Never -- /bin/sh
step12:
	kubectl get all
```

- Dockerfile
```
FROM node:alpine
WORKDIR /usr/src/app
COPY --chown=node:node . /usr/src/app
COPY package.json package-lock.json /usr/src/app/
RUN chown -R node:node /usr/local/*
RUN chown -R node:node /usr/src/app/*
USER node
RUN npm install
COPY . .
ARG PORT=3000
ENV PORT=${PORT}
CMD "npm" "start"
```
- package.json
```
{
  "name": "products",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon src/index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1",
    "nodemon": "^2.0.7"
  }
}
```
- index.js
```
const express = require('express')
const app = express()
app.get('/api/products', (req, res) => {
  res.json({ message: `Products API ${(new Date()).toISOString()}`})
})
app.listen( process.env.PORT, () => console.log(`Listening in http://localhost:${process.env.PORT}/api/products`))
```

- products-definition.yaml
```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: products
spec:
  replicas: 1
  selector:
    matchLabels:
      app: products
  template:
    metadata:
      labels:
        app: products
    spec:
      containers:
      - image: maximilianou/products
        name: products

---
apiVersion: v1
kind: Service
metadata:
  name: products-service
spec:
  selector:
    app: products
  ports:
  - protocol: TCP
    port: 3000
    targetPort: 3000
```

-----
- Access api products inside kube pod
```
:~/projects/weekly35$ kubectl run nginx --image=nginx  -it --restart=Never -- /bin/sh
ls
If you don't see a command prompt, try pressing enter.
ls
bin   docker-entrypoint.d   home   media  proc	sbin  tmp
boot  docker-entrypoint.sh  lib    mnt	  root	srv   usr
dev   etc		    lib64  opt	  run	sys   var
# curl products-service:3000/api/products
```

-----
- cart-definition.yml
```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cart
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cart
  template:
    metadata:
      labels:
        app: cart
    spec:
      containers:
      - image: maximilianou/cart
        name: cart

---
apiVersion: v1
kind: Service
metadata:
  name: cart-service
spec:
  selector:
    app: cart
  ports:
  - protocol: TCP
    port: 3001
    targetPort: 3001
```

-----
## Running the k8s cluster

## Connection the k8s cluster with Ingress-nginx

https://kubernetes.github.io/ingress-nginx/deploy/

- bare metal

:~/projects/weekly35$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.45.0/deploy/static/provider/baremetal/deploy.yaml

### k8s look for services in all namespaces
```
:~/projects/weekly35$ kubectl get svc --all-namespaces
```

https://kubernetes.github.io/ingress-nginx/user-guide/basic-usage/

- here we are going to configure just One ingress service

- ingress.yaml
```
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-shop
  annotations:
    # use the shared ingress-nginx
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: shop.com
    http:
      paths:
      - path: /api/products
        backend:
          serviceName: products-service
          servicePort: 3000
      - path: /api/cart
        backend:
          serviceName: cart-service
          servicePort: 3001
```

```
:~/projects/weekly35$ kubectl create -f k8s/ingress.yaml
Warning: networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
ingress.networking.k8s.io/ingress-shop created

```
- /etc/hosts
```
<IP_ADDRESS>   shop.com
```

- scaffold.dev

https://skaffold.dev/docs/install/

```
# For Linux AMD64
curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64

su -
install skaffold /usr/local/bin/
exit
```

-
```
:~/projects/weekly35$ skaffold init
? Choose the builder to build image maximilianou/cart Docker (cart/Dockerfile)
? Choose the builder to build image maximilianou/products Docker (products/Dockerfile)
apiVersion: skaffold/v2beta14
kind: Config
metadata:
  name: weekly-
build:
  artifacts:
  - image: maximilianou/cart
    context: cart
    docker:
      dockerfile: Dockerfile
  - image: maximilianou/products
    context: products
    docker:
      dockerfile: Dockerfile
deploy:
  kubectl:
    manifests:
    - k8s/cart-definition.yaml
    - k8s/ingress.yaml
    - k8s/products-definition.yaml

? Do you want to write this configuration to skaffold.yaml? Yes
Configuration skaffold.yaml was written
You can now run [skaffold build] to build the artifacts
or [skaffold run] to build and deploy
or [skaffold dev] to enter development mode, with auto-redeploy
```

```
:~/projects/weekly35$ cat skaffold.yaml
apiVersion: skaffold/v2beta14
kind: Config
metadata:
  name: shop-skaffold
build:
  artifacts:
  - image: maximilianou/cart
    context: cart
    sync:
      manual:
      - src: "src/**/*.js"
        dest: "."
    docker:
      dockerfile: Dockerfile
  - image: maximilianou/products
    context: products
    sync:
      manual:
      - src: "src/**/*.js"
        dest: "."
    docker:
      dockerfile: Dockerfile
deploy:
  kubectl:
    manifests:
    - k8s/cart-definition.yaml
    - k8s/ingress.yaml
    - k8s/products-definition.yaml
```

### Here you have to run twice the command skaffold dev
- look this, fist run fail, second run OK

- First Run Fails
```
:~/projects/weekly35$ skaffold dev
Listing files to watch...
 - maximilianou/cart
 - maximilianou/products
Generating tags...
 - maximilianou/cart -> maximilianou/cart:a43b552
 - maximilianou/products -> maximilianou/products:a43b552
Checking cache...
 - maximilianou/cart: Not found. Building
 - maximilianou/products: Not found. Building
Starting build...
Found [minikube] context, using local docker daemon.
Building [maximilianou/products]...
Sending build context to Docker daemon  4.568MB
Step 1/12 : FROM node:alpine
alpine: Pulling from library/node
ddad3d7c1e96: Already exists
0e18143e8d4d: Already exists
377ad682a98b: Already exists
99b3e0ba5237: Already exists
Digest: sha256:3ca0132180509b9fd68545b2232dd9fc01726c06fc36b772389d41b82d81a8de
Status: Downloaded newer image for node:alpine
 ---> 75631da67663
Step 2/12 : WORKDIR /usr/src/app
 ---> Running in b08e098a101f
 ---> ef98e7772ba6
Step 3/12 : COPY --chown=node:node . /usr/src/app
 ---> 1e94d9cbf47b
Step 4/12 : COPY package.json package-lock.json /usr/src/app/
 ---> 34b292bda96b
Step 5/12 : RUN chown -R node:node /usr/local/*
 ---> Running in 60c87391c988
 ---> d9bdaf60a437
Step 6/12 : RUN chown -R node:node /usr/src/app/*
 ---> Running in e93b5026c9bb
 ---> c5b9f824fe64
Step 7/12 : USER node
 ---> Running in 4d6ec4d3ffb3
 ---> bf7d5d0cc729
Step 8/12 : RUN npm install
 ---> Running in 2267202dca7f

up to date, audited 168 packages in 2s

11 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
npm notice
npm notice New minor version of npm available! 7.7.6 -> 7.10.0
npm notice Changelog: <https://github.com/npm/cli/releases/tag/v7.10.0>
npm notice Run `npm install -g<EMAIL_ADDRESS>to update!
npm notice
 ---> ff45205ee2c9
Step 9/12 : COPY . .
 ---> 09c6501f94e0
Step 10/12 : ARG PORT=3000
 ---> Running in e95fe9048219
 ---> 7a1a9c13f94a
Step 11/12 : ENV PORT=${PORT}
 ---> Running in 22d5e6fc1bf6
 ---> e6d2f6ebfe81
Step 12/12 : CMD "npm" "start"
 ---> Running in c1c1683b8143
 ---> 204fba77b10d
Successfully built 204fba77b10d
Successfully tagged maximilianou/products:a43b552
Building [maximilianou/cart]...
Sending build context to Docker daemon  4.568MB
Step 1/12 : FROM node:alpine
 ---> 75631da67663
Step 2/12 : WORKDIR /usr/src/app
 ---> Using cache
 ---> ef98e7772ba6
Step 3/12 : COPY --chown=node:node . /usr/src/app
 ---> ca156ce24ba0
Step 4/12 : COPY package.json package-lock.json /usr/src/app/
 ---> 0f2ea5a3b73d
Step 5/12 : RUN chown -R node:node /usr/local/*
 ---> Running in 3711980d4dcb
 ---> 63d474716c7b
Step 6/12 : RUN chown -R node:node /usr/src/app/*
 ---> Running in 208f8e638a90
 ---> 8a9a9251108a
Step 7/12 : USER node
 ---> Running in 42a44a5e0af4
 ---><PHONE_NUMBER>22
Step 8/12 : RUN npm install
 ---> Running in ca47c5ab0c43

up to date, audited 168 packages in 3s

11 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
npm notice
npm notice New minor version of npm available! 7.7.6 -> 7.10.0
npm notice Changelog: <https://github.com/npm/cli/releases/tag/v7.10.0>
npm notice Run `npm install -g<EMAIL_ADDRESS>to update!
npm notice
 ---> 2eacf3c7c55b
Step 9/12 : COPY . .
 ---> 22298dd7bf7c
Step 10/12 : ARG PORT=3001
 ---> Running in 1f1d0387d526
 ---> 927f58d28145
Step 11/12 : ENV PORT=${PORT}
 ---> Running in 36a3383caaaa
 ---> b3a70335fbe0
Step 12/12 : CMD "npm" "start"
 ---> Running in 081203d43d74
 ---> d252c7192f5f
Successfully built d252c7192f5f
Successfully tagged maximilianou/cart:a43b552
Starting test...
Tags used in deployment:
 - maximilianou/cart -> maximilianou/cart:d252c7192f5f442b9580e90525afa16c04092c5d23cb44e3df7014b2a70b4336
 - maximilianou/products -> maximilianou/products:204fba77b10d5c4f3b235788571bf6df00fee382666cb83883113dc9b068eb57
Starting deploy...
 - Warning: resource deployments/cart is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
 - deployment.apps/cart configured
 - Warning: resource services/cart-service is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
 - service/cart-service configured
 - Warning: networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
 - Warning: resource ingresses/ingress-shop is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
 - ingress.networking.k8s.io/ingress-shop configured
 - Warning: resource deployments/products is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
 - deployment.apps/products configured
 - Warning: resource services/products-service is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
 - service/products-service configured
Waiting for deployments to stabilize...
 - deployment/cart: container cart is waiting to start: maximilianou/cart:d252c7192f5f442b9580e90525afa16c04092c5d23cb44e3df7014b2a70b4336 can't be pulled
    - pod/cart-8f665ffdf-8tz7q: container cart is waiting to start: maximilianou/cart:d252c7192f5f442b9580e90525afa16c04092c5d23cb44e3df7014b2a70b4336 can't be pulled
 - deployment/cart failed. Error: container cart is waiting to start: maximilianou/cart:d252c7192f5f442b9580e90525afa16c04092c5d23cb44e3df7014b2a70b4336 can't be pulled.
Cleaning up...
 - deployment.apps "cart" deleted
 - service "cart-service" deleted
 - Warning: networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
 - ingress.networking.k8s.io "ingress-shop" deleted
 - deployment.apps "products" deleted
 - service "products-service" deleted
exiting dev mode because first deploy failed: 2/2 deployment(s) failed
```
- Second Run OK
```
:~/projects/weekly35$ skaffold dev
Listing files to watch...
 - maximilianou/cart
 - maximilianou/products
Generating tags...
 - maximilianou/cart -> maximilianou/cart:a43b552
 - maximilianou/products -> maximilianou/products:a43b552
Checking cache...
 - maximilianou/cart: Found Locally
 - maximilianou/products: Found Locally
Starting test...
Tags used in deployment:
 - maximilianou/cart -> maximilianou/cart:d252c7192f5f442b9580e90525afa16c04092c5d23cb44e3df7014b2a70b4336
 - maximilianou/products -> maximilianou/products:204fba77b10d5c4f3b235788571bf6df00fee382666cb83883113dc9b068eb57
Starting deploy...
 - deployment.apps/cart created
 - service/cart-service created
 - Warning: networking.k8s.io/v1beta1 Ingress is deprecated in v1.19+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
 - ingress.networking.k8s.io/ingress-shop created
 - deployment.apps/products created
 - service/products-service created
Waiting for deployments to stabilize...
 - deployment/cart is ready. [1/2 deployment(s) still pending]
 - deployment/products is ready.
Deployments stabilized in 2.371 seconds
Press Ctrl+C to exit
Watching for changes...
[cart]
[cart] ><EMAIL_ADDRESS>start
[cart] > nodemon src/index.js
[cart]
[cart] [nodemon] 2.0.7
[cart] [nodemon] to restart at any time, enter `rs`
[cart] [nodemon] watching path(s): *.*
[cart] [nodemon] watching extensions: js,mjs,json
[cart] [nodemon] starting `node src/index.js`
[products]
[products] ><EMAIL_ADDRESS>start
[products] > nodemon src/index.js
[products]
[cart] Listening in http://localhost:3001/api/cart
[products] [nodemon] 2.0.7
[products] [nodemon] to restart at any time, enter `rs`
[products] [nodemon] watching path(s): *.*
[products] [nodemon] watching extensions: js,mjs,json
[products] [nodemon] starting `node src/index.js`
[products] Listening in http://localhost:3000/api/products
```

- kubectl delete pod nginx
```
:~/projects/weekly35$ kubectl delete pod nginx
pod "nginx" deleted

```

https://kubernetes.github.io/ingress-nginx/deploy/
- minikube enabled
```
:~/projects/weekly35$ minikube addons enable ingress

( In minikube the ingress addon is installed
  in the namespace kube-system
  instead of ingress-nginx )

```

- AWS - https://kubernetes.github.io/ingress-nginx/deploy/
- GCE-GKE - https://kubernetes.github.io/ingress-nginx/deploy/
- Azure - https://kubernetes.github.io/ingress-nginx/deploy/
- Bare-metal - https://kubernetes.github.io/ingress-nginx/deploy/

------------------------------------------
- Get Every Kube Pod/Service.. list!
```
:~/projects/weekly35$ kubectl get all --all-namespaces
```
------------------------------------------

license: ISC,MIT

detected_licenses: ISC MIT


text:
 Made by Boppy Games :)

Checkout Boppio on Steam!

Checkout Boppio on Steam! https://store.steampowered.com/app/1384030/Boppio/

# Unity Save System

Hello everyone! This is the save system that I wrote on stream. The objective of this save system is ease-of-use. You should only have to apply a Save attribute to fields within components in order to save data. This system can serialize most types out of the box, but also supports custom serialization.

This should work with basically any version of Unity, but the specific version I used on stream was 2020.3.19f1 LTS.

## Getting Started

**Important: First install Newtonsoft JSON: https://github.com/jilleJr/Newtonsoft.Json-for-Unity**

 - Then go to the releases page and download the latest Unity package.
 - Import the package into your project, it should be within the SaveSystem directory
 - Open up the demo scene and give it a try.

Again, the main drawback of this system is that each asset needs to be registered in the `AssetSaveList` in order to be saved. If you forget to put an asset into the `AssetSaveList` before saving, it will not be saved or loaded (you will get an error).

license: MIT

repository: derwee/Unity-Save-System

branch_name: refs/heads/main

extension: md

license_type: permissive

repo_name: derwee/Unity-Save-System


text:
# me-form-backend

compose awesome forms

## Get Started

```
yarn add me-form-backend
// or
npm install me-form-backend
```

## Basic Example

```javascript
import Form, { useFormItem, FormItem, ArrayField } from 'me-form-backend'

const Input = props => {
  const { value, onChange, rest } = useFormItem(props)
  return <input {...rest} value={value} onChange={onChange} />
}

const App = () => (
  <Form
    initValue={{ f1: { a: 'a' }, f2: [{ text: 'foo' }, { text: 'bar' }] }}
    onSubmit={formData => {}}
  >
    <FormItem name="f1">
      <Input name="a" />
    </FormItem>
    <ArrayField name="f2">{() => <Input name="text" />}</ArrayField>
    <button>submit</button>
  </Form>
)
```

## Form

Form is the root of your form context, it provides form data to FormItem, useFormItem & ArrayField.

### Props:

| Prop          | Description                                                                                |
| ------------- | ------------------------------------------------------------------------------------------------------- |
| children      | React elements rendered in Form<br/> or render prop: ({submit, value, error, validate}) => {}           |
| validator     | a callback called before onSubmit, return null for no error or an error descriptor                      |
| onSubmit      | callback called when form submit and all validators pass, receive the form data as argument             |
| value         | pass form data from parent component, Form with value and changed props is in controlled mode           |
| onChange      | callback used in combination with "value" and is called when form data changes                          |
| initValue     | initial value for uncontrolled mode                                                                     |
| defaultValue  | gets merged into initValue or value on some undefined field, usefull for some field is missing in value |
| formTag       | bool type, whether render an html form tag, default false                                               |
| errorMessages | an object, which keys are validator rules and values are corresponding error messages                   |

### Controlled vs Uncontrolled

Form, much like React controls, provides two modes: controlled and uncontroled:

Controlled, pass value & onChange to Form component, onChange will be called whenever form data changes.

```javascript
<Form value={...} onChange={...}>...</Form>
```

Uncontrolled, pass initValue to Form component, you can get form data in submit callback.

```jsx
<Form initValue={...}>...</Form>
```

### Why defaultValue can't be set on fields

Because currently in React there's not a good way that a parent component can read props from descendant components, so in the first render the defaultValue prop of a field can't be available from value of ancestors. This can be confusing and this is against the data flow model of React.

## useFormItem

useFormItem is a React custom hook. It connects a form control component with Form context

### Input Options

Usualy we just pass all props to useFormItem hook as input is just fine, useFormItem forwards all unknown props, but you may want to control it, all used props listed below:

| property      | description                                                                                |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| name          | string for field name                                                                                |
| validator     | callback whenever field value changes, return null as no error, or an error descriptor, besides field value, if second argument is true, it means the validator is called by submit |
| errorMessages | an object, which keys are validator rules and values are corresponding error messages                                                                                |
| requied       | bool, shorthand for required validator                                                                                |
| minLength     | number, shorthand for min length validator                                                                                |
| label         | ReactNode, it will be passed to dynamic error message function                                                                                |
| parse         | a function called when field value changes, receive changed value, can be used like trim input or parse date from string                                                            |
| format        | a function called when pass value to control component, receive current value, can be used when format date to string                                                               |
| interceptor   | [Deprecated] use `parse` instead. A function called when field value changes, receive changed value, can be used like trim input                                                    |
| didUpdate     | a callback that called when a field is confirmed to change, receive changed value and a patch fucntion                                                                              |

#### didUpdate v.s. interceptor

- interceptor is called right before a field value is changed, and it only provide the changed value. It's easy to use, but only can change the changed value
- didUpdate is called before the changed value is committed, aka set the Form internal state in uncontrolled mode or call onChange prop of Form in controlled mode. It is provide the changed value and a patch function for the Form value, you can use the patch function change or remove any other fields of the Form, it's useful when you want to accomplish associated field changing

```javascript
<Form initValue={{a: "", b: ""}}>
<Input
  ...
  name="a"
  didUpdate={(changedValue, patch) => {
    if (changedValue) {
      patch({b: "b also changed", c: "c added"}) // when a changing to true, set b and add c
    } else {
      patch({b: ""}, "c") // when a changing to false, reset b, and remove c
    }
  }}
/>
</Form>

```

### Output Options

| property   | description                                                                                |
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| value      | field value                                                                                |
| onChange   | onChange callback                                                                                |
| error      | error descriptor of current field, null if no error                                                                                |
| resetError | a callback to clear current error                                                                                |
| label      | identical label passed to the hook                                                                                |
| id         | a dot concated string of all ancestors' name and the current field name, you can pass it to <label> as _for_ attribute and a control id attribute to associate a <label> and a control |

## FormItem & ArrayField

FormItem and ArrayField are designed to handle middle layer fields, like object or array.

### FormItem

FormItem can be used to describe a object field, which transform context value to a sub-field.

```javascript
<Form initValue={{ obj: { a: 'a', b: 'b' } }}>
  <FormItem name="obj">
    <Input name="a" />
    <Input name="b" />
  </FormItem>
</Form>
```

It receives all options of useFormItem as props.

### ArrayField

ArrayField is a shorthand for iterate over an array field, which uses children as render prop for each item's render.

In the childern render, context is transformed to each item.

```javascript
<Form initValue={{ arr1: ['a', 'b'], arr2: [{text: 'foo'}, {text: 'bar'}}] }}>
  <div>arr1</div>
  <ArrayField name="arr1">
    {() => <Input />}  // you can get item value in arr1 without name prop, because context has been transformed to each item
  </ArrayField>
  <div>arr2</div>
  <ArrayField name="arr2">
    {() => <Input name="text"/>} // you can get item properties of arr2 by name prop, because context has been transformed to each item
  </ArrayField>
</Form>

/*
render as
<form>
  <div>arr1</div>
  <input value="a"/>
  <input value="b"/>
  <div>arr2</div>
  <input name="text" value="foo"/>
  <input name="text" value="bar"/>
</form>
*/
```

## Validation & Error

Form, FormItem and useFormItem all receive a validator for form validation.

Validator should receive form data or the field value it has been defined, returns null if no error or error descriptor if any error exists.

### ErrorDescriptor

- _rule_ defines the type of the error, it's used to find error message or to decide whether the error is ralated a field.
- _message_ can be a plain string, if not provided, error message will be computed from errorMessages.
- _labels_ is an array of field labels passed to message format funcion above metioned, if not provided, field label prop will be used.

```typescript
interface ErrorDescriptor {
  rule: string
  message?: string
  labels?: ReactNode[] // string or react element
}

;<Form
  initValue={{ a: 'a', b: 'b' }}
  validator={({ a, b }) =>
    a !== b ? { rule: 'same value', message: 'a should be same as b' } : null
  }
>
  <Input name="a" />
  <Input name="b" />
</Form>
```

### ErrorMessages

ErrorMessages is an object, which keys are validator rules and values are corresponding error messages.

Value can be a plain string or a function which receive field labels and return a string.

ErrorMessages can be config at multiple level: Form, FormItem or Control, it is merged top down, a later one overrides smae rule.

### Trigger timing

Form validation is different from fields validation at trigger timing.

Form validation is triggered when form is to be submitted, and it triggers all fields' validators first, and at last is the validator defined at Form.

Other validators, defined at FormItem or useFormItem, is triggered when the field value changes.

## Recipes

### parse & format

```jsx
const DateInput = () => (
  <Input
    parse={date => date.format('YYYY-MM-DD')}
    format={s => moment(s, 'YYYY-MM-DD')}
  />
)
```

repository: levinqdl/me-form-backend

branch_name: refs/heads/master

gha_language: TypeScript

gha_license_id: MIT

repo_name: levinqdl/me-form-backend


text:
# ion-radio

Radios should be used inside of an [`ion-radio-group`](../radio-group). Pressing on a radio will check it. They can also be checked programmatically by setting the value property of the parent `ion-radio-group` to the value of the radio.

When radios are inside of a radio group, only one radio in the group will be checked at any time. Pressing a radio will check it and uncheck the previously selected radio, if there is one. If a radio is not in a group with another radio, then both radios will have the ability to be checked at the same time.

repository: kkeeth/ionic-docs

repo_name: kkeeth/ionic-docs


text:
# Language Independent Interface Types For OpenTelemetry

The proto files can be consumed as GIT submodule or copied over and built directly in the consumer project.

The compiled files are published to central repositories (Maven, NPM...) from OpenTelemetry client libraries.

See [contribution guidelines](CONTRIBUTING.md) if you would like to make any changes.

## Maturity Level

Component                | Maturity |
-------------------------|----------|
collector/metrics/*      | Alpha    |
collector/trace/*        | Stable   |
common/*                 | Stable   |
metrics/*                | Alpha    |
resource/*               | Stable   |
trace/trace.proto        | Stable   |
trace/trace_config.proto | Alpha    |

(See [maturity-matrix.yaml](https://github.com/open-telemetry/community/blob/47813530864b9fe5a5146f466a58bd2bb94edc72/maturity-matrix.yaml#L57)
for definition of maturity levels).


text:
# Scrapyd-mongodb
[![PyPI version](https://badge.fury.io/py/scrapyd-mongodb.svg)](https://badge.fury.io/py/scrapyd-mongodb)

The scrapyd library is a fantastic open-source tool for management of spiders implemented using scrapy-framework.
However, the builtin backend queue management library is implemented to work with SQLite,
which ends up being a problem when we need to scale.

This library is designed to replace the SQLite backend for MongoDB backend. In other words, all
queue management will be done using MongoDB with the help of pymongo library.

## Install

To use this library you need to have installed mongodb on the machine.
The documentation can be found at: https://docs.mongodb.org/manual/installation/

The `scrapyd-mongo` library is available at pypi:

```bash

$ pip install scrapyd-mongodb

```

## Config

The configuration to use this library in your scrapy project is pretty simple.
You just need to override the `application` in your `scrapy.cfg` file:

```cfg

[scrapyd]
application = scrapyd_mongodb.application.get_application
...

```

If you want to customize the info to access the mongodb, you can add into your `scrapy.cfg` file:

```cfg
[scrapyd]
mongodb_name = scrapyd_mongodb
mongodb_host = <IP_ADDRESS>
mongodb_port = 27017
...

```

## Contributing

Having trouble? have suggestions?
Report bugs or suggestions on the issue tracker.

repository: tarhan/scrapyd-mongodb

gha_language: Python

repo_name: tarhan/scrapyd-mongodb


text:
# Collage Maker

Simple tool to make screenshot collages with captions.

![Collage maker](docs/collage-maker.png)

## Step 1

Add images to the **Photos** list - either paste from clipboard (`CTRL + V`) or use the **+** button to select a file or multiple files from disk.

Note: there is no option to reorder the images yet, but it is possible to remove them (one by one) by selecting and pressing `DEL` key.

## Step 2

Select options using controls below:
* Orientation of the collage: Horizontal / Vertical / Square (not implemented yet)
* Alignment of images in the collage in case one is shorted: Start / Middle / End
* Whether to display separator between images (if so, choose width and color)
* Captions for the images: put one caption per line. If there are less captions than images, the rest images will have no caption

## Step 3

Use either **Save** button to save the collage to disk, or **Copy to clipboard** button to copy the generated image directly to the clipboard.

## Building

Note that currently the project cannot be built from the source code because it depends on private libraries.
I will share them later.

repository: lukaszmn/CollageMaker

repo_name: lukaszmn/CollageMaker


text:
# Lemon Garlic Roasted Chicken

## Ingredients

- 1 tbsp lemon juice
- ½ tbsp Dijon mustard
- 1 garlic clove, grated
- ¼ tsp black pepper
- ⅛ tsp kosher salt
- 1½ tbsp olive oil
- 2x 4 oz chicken breasts

## Directions

Preheat oven to 400° F. Combine lemon juice, mustard, garlic, salt, and pepper
in a small bowl. Slowly whisk in olive oil. Coat chicken. Heat a small
nonstick pan over medium heat. Cook chicken 3 mins on each side. Move pan to
oven for 8-10 minutes. Rest 5 mins before serving.

path: /recipes/Lemon Garlic Roasted Chicken.md

filename: Lemon Garlic Roasted Chicken.md

gha_language: Ruby


text:
---
title: Integration with Fuel
canonical_url: 'https://docs.projectcalico.org/v2.6/getting-started/openstack/installation/fuel'
---

Calico plugins are available for Fuel 6.1 and 7.0, and work is in progress for
Fuel 9.  Fuel plugin code for Calico is at
[http://git.openstack.org/cgit/openstack/fuel-plugin-calico](http://git.openstack.org/cgit/openstack/fuel-plugin-calico).

## Fuel 7.0

The plugin for Fuel 7.0 is currently undergoing final review and
certification; you can find the plugin code at git.openstack.org, and
its documentation in pending changes on review.openstack.org:

-   Code:
    <https://git.openstack.org/cgit/openstack/fuel-plugin-calico/log/?h=7.0>
-   User Guide: <https://review.openstack.org/#/c/281239/>
-   Test Plan and Report: <https://review.openstack.org/#/c/282362/>

## Fuel 6.1

The rest of this document describes our integration of Calico with
Mirantis Fuel 6.1. It is presented in sections covering the following
aspects of our integration work.

-   Objective: The system that we are aiming to deploy.
-   Cluster Deployment: The procedure to follow to deploy such a system.
-   Calico Demonstration: What we recommend for demonstrating Calico
    networking function.
-   Detailed Observations: Some further detailed observations about the
    elements of the deployed system.

### Objective

We will deploy an OpenStack cluster with a controller node and *n*
compute nodes, with Calico providing the network connectivity between
VMs that are launched on the compute nodes.

The key components on the controller node will be:

-   the standard OpenStack components for a controller, including the
    Neutron service
-   the Calico/OpenStack Plugin, as a Neutron/ML2 mechanism driver
-   a BIRD instance, acting as BGP route reflector for the
    compute nodes.

The key components on each compute node will be:

-   the standard OpenStack components for a compute node
-   the Calico Felix agent
-   a BIRD instance, running BGP for that compute node.

IP connectivity between VMs that are launched within the cluster will be
established by the Calico components, according to the security groups
and rules that are configured for those VMs through OpenStack.

Cluster Deployment
------------------

The procedure for deploying such a cluster consists of the following
steps.

-   Prepare a Fuel master (aka admin) node in the usual way.
-   Install the Calico plugin for Fuel on the master node.
-   Deploy an OpenStack cluster in the usual way, using the Fuel web UI.

The following subsections flesh out these steps.

### Prepare a Fuel master node

Follow Mirantis's instructions for preparing a Fuel master node, from
the [Fuel 6.1 User Guide](http://docs.mirantis.com/openstack/fuel/fuel-6.1/user-guide.html#download-and-install-fuel).
You will need to download a Fuel 6.1 ISO image from the [Mirantis
website](https://www.mirantis.com/products/mirantis-openstack-software/).

### Install the Calico plugin for Fuel on the master node

The Calico plugin has been certified by Mirantis and is available for
download from the [Fuel Plugin Catalog](https://www.mirantis.com/products/openstack-drivers-and-plugins/fuel-plugins/).
Alternatively, you can build a copy of the plugin yourself, following
the instructions on the plugin's
[GitHub](https://github.com/openstack/fuel-plugin-calico) page.

However you obtain a copy of the Calico plugin, you will need to copy it
onto the master node and install it with:

    fuel plugins --install calico-fuel-plugin-<version>.noarch.rpm

You can check that the plugin was successfully installed using:

    fuel plugins --list

Deploy an OpenStack cluster
---------------------------

Use the Fuel web UI to deploy an OpenStack cluster in the [usual way](http://docs.mirantis.com/openstack/fuel/fuel-6.1/user-guide.html#create-a-new-openstack-environment),
with the following guidelines.

-   Create a new OpenStack environment, selecting:
    -   Juno on Ubuntu Trusty (14.x)
    -   "Neutron with VLAN segmentation" as the networking setup
-   Under the settings tab, make sure the following options are checked:
    -   "Assign public network to all nodes"
    -   "Use Calico Virtual Networking"
-   Network settings as advised in the following subsections.
-   Add nodes (for meaningful testing, you will need at least two
    compute nodes in addition to the controller).
-   Deploy changes.

### Public

Fuel assigns a 'public' IP address, from the range that you specify
here, to each node that it deploys. It also creates an OpenStack network
with this subnet, and uses that for allocating floating IPs.

Therefore these IP addresses exist to allow access from within the
cluster to the outside world, and vice versa, and should probably be
routable from the wider network where the cluster is deployed.

For the purposes of this document we'll use the <IP_ADDRESS>/24 range of
public addresses: feel free to change this to match your own local
network.

-   IP Range: <IP_ADDRESS> - <IP_ADDRESS>
-   CIDR: <IP_ADDRESS>/24
-   Use VLAN tagging: No
-   Gateway: <IP_ADDRESS>
-   Floating IP ranges: <IP_ADDRESS> - <IP_ADDRESS>

By default, Fuel associates the public IP address with the second NIC
(i.e. `eth1`) on each node.

### Management

Fuel assigns a 'management' IP address, from the range that you specify
here, to each node that it deploys. These are the addresses that the
nodes *within* the cluster use to communicate with each other. For
example, nova-compute on each compute node communicates with the Neutron
server on the controller node by using the controller node's management
address.

-   CIDR: <IP_ADDRESS>/24
-   Use VLAN tagging: Yes, 101

By default, Fuel associates the management IP address with the first NIC
(i.e. `eth0`) on each node.

With Calico networking, in addition:

-   BGP sessions are established, between BIRD instances on the compute
    nodes and on the route reflector, using these management IP
    addresses
-   Data between VMs on different compute nodes is routed using these
    management IP addresses, which means that it flows via the compute
    nodes' `eth0` interfaces.

### Storage

Storage networking is not needed for a simple OpenStack cluster. We left
the following settings as shown, and addresses from the specified range
are assigned, but are not used in practice.

-   CIDR: <IP_ADDRESS>/24
-   Use VLAN tagging: Yes, 102

### Neutron L2 Configuration

Neutron L2 Configuration is not needed in a Calico system, but we have
left the following settings as shown, as we have not yet had time to
simplify the web UI for Calico networking.

-   VLAN ID range: 1000 - 1030
-   Base MAC address: fa:16:3e:00:00:00

### Neutron L3 Configuration

Neutron L3 Configuration is not needed in a Calico system, but we have
left the following settings as shown, as we have not yet had time to
simplify the web UI for Calico networking.

-   Internal network CIDR: <IP_ADDRESS>/24
-   Internal network gateway: <IP_ADDRESS>
-   DNS servers: <IP_ADDRESS>, <IP_ADDRESS>

Check BGP connectivity on the controller
----------------------------------------

Once the deployment is complete, you may wish to verify that the route
reflector running on the controller node has established BGP sessions to
all of the compute nodes.

To do this, log onto the controller node and run:

    birdc
    show protocols all

Calico Demonstration
--------------------

To demonstrate Calico networking, please run through the following
steps.

In the OpenStack web UI, under Project, Network, Networks, create a
network and subnet from which instance IP addresses will be allocated.
We use the following values.

-   Name: 'demo'
-   IP subnet: <IP_ADDRESS>/24
-   Gateway: <IP_ADDRESS>
-   DHCP-enabled: Yes.

Under Project, Compute, Access & Security, create two new security
groups. For each security group, select 'Manage Rules' and add two new
rules:

-   Allow incoming ICMP (ping) traffic only if it originates from other
    instances in this security group:
    -   Rule: ALL ICMP
    -   Direction: Ingress
    -   Remote: Security Group
    -   Security Group: Current Group
    -   Ether Type: IPv4
-   Enable SSH onto instances in this security group:
    -   Rule: SSH
    -   Remote: CIDR
    -   CIDR: <IP_ADDRESS>/0

Under Project, Instances, launch a batch of VMs -- enough of them to
ensure that there will be at least one VM on each compute node -- with
the following details.

-   Flavor: m1.tiny
-   Boot from image: TestVM
-   Under the Access & Security tab, select one of your new security
    groups (split your instances roughly 50:50 between the two
    security groups).
-   Under the Networking tab, drag 'demo' into the 'Selected
    Networks' box.

Under Admin, Instances, verify that:

-   the requested number of VMs (aka instances) has been launched
-   they are distributed roughly evenly across the available compute
    hosts
-   they have each been assigned an IP address from the range that you
    configured above (e.g. 10.65.0/24)
-   they reach Active status within about a minute.

Log on to one of the VMs, e.g. by clicking on one of the instances and
then on its Console tab, and use 'ping' to verify connectivity is as
expected from the security group configuration, i.e. that you can ping
the IP addresses of all of the other VMs in the same security group, but
you cannot ping the VMs in the other security group.

Note that whilst the VMs should be able to reach other (security group
configuration permitting), they are not expected to have external
connectivity unless appropriate routing has been set up:

-   For outbound access, you need to ensure that your VMs can send
    traffic to your border gateway router (typically this will be the
    case, because usually your compute hosts will be able to do so). The
    border gateway can then perform SNAT.
-   For inbound connections, you need assign a publically routable IP
    address to your VM - that is, attach it to a network with a public
    IP address. You will also need to make sure that your border router
    (and any intermediate routers between the border router and the
    compute host) can route to that address too. The simplest way to do
    that is to peer the border router with the route reflector on
    the controller.

Detailed Observations
---------------------

This section records some more detailed notes about the state of the
cluster that results from following the above procedure.

Reading this section should not be required in order to demonstrate or
understand OpenStack and Calico function, but it may be useful as a
reference if a newly deployed system does not appear to be behaving
correctly.

### Elements required for Calico function

This subsection records elements that *are* required for Calico
function, and that we have observed to be configured and operating
correctly in the cluster.

On the controller:

-   The BIRD BGP route reflector has established sessions to all the
    compute nodes.
-   The Neutron service is running and has initialized the Calico ML2
    mechanism driver.

On each compute node:

-   The Calico Felix agent is correctly configured, and running.
-   There is an established BGP session to the route reflector on
    the controller.

### Elements not required for Calico function, but benign

This subsection records elements that are *not* required for Calico
function, but that we have observed to be operating in the cluster.
These all result from the fact that the procedure first deploys a
traditional Neutron/ML2/OVS cluster, and then modifies that to use
Calico instead of OVS, but does not clean up all of the OVS-related
elements.

We believe that all of these elements are benign, in that they don't
obstruct or fundamentally change the Calico networking behavior. However
it would be better to remove them so as to clarify the overall picture,
and maybe to improve networking performance. We plan to continue working
on this.

On the controller:

-   Various Neutron agents are running that Calico does not require.
    -   neutron-metadata-agent
    -   neutron-dhcp-agent
    -   neutron-openvswitch-agent
    -   neutron-l3-agent

On each compute node:

-   Two Neutron agents are running that Calico does not require.
    -   neutron-metadata-agent
    -   neutron-openvswitch-agent
-   There is a complex set of OVS bridges present, that Calico does
    not require.

repository: daiyinliang/calico

repo_name: daiyinliang/calico


text:
---
layout: episode
number: "13"
title: "Episode 13: Skinny Boy Margaritas"
duration: "53:14"
length: "51897076"
summary: "The crew navigates how to properly interact on elevators and in hallways, chats about their first jobs, and figures out how to mine bitcoin."
aac_asset_link: "http://episodes.westeleventh.media/NewPodWhoDis013.m4a"
ogg_asset_link: "http://episodes.westeleventh.media/NewPodWhoDis013.ogg"
segments: "Sup, Google What?"
tags: [LaCroix, coffee, caffeine, marbles, Earth, elevators, coworkers, jobs, curling, toothpaste, random facts, bitcoin, noxplod, blockchain, internet dolls]
explicit: yes
show_notes: |

Links from the interwebs:

If for some reason coffee goes belly up...

Your LaCroix preference is more important thatn you think.

Marble Olympics (Marblelympics) is a real thing. We promise.

If you live on Earth, you should probably leave a review.

Going up or going down?

Those internet dolls from your teenage years

Rate and Subscribe on iTunes.

Follow us on Instagram, YouTube, Twitter, and Facebook.Email us some digital mail at <a href="mailto:newpodwhodis<EMAIL_ADDRESS>
New Pod, Who Dis? is produced by West Eleventh Media from Washington, D.C.

---

gha_language: CSS


text:
# Readings: Ethics

### Review, Research, and Discussion

![source](https://cdn-media-1.freecodecamp.org/images/1*UcpODv1lxR_Bt3MyaOvYWA.jpeg)

###    Bill Sourour: The code I’m still ashamed of

When it comes to Ethics in our field we can look at the anecdotal piece by Sourour whom created a targetted marketing add that could cause people (young women in this case) to be psycologically tergetted to the financial benefit of the company regardless of their medication side effects.

Sourour did not personally assist in anyone's suicide, but he can project hismelf because of his ilvolment in the marketing of the medication, so its not fair to blame him alone on all the layers of who is involved in the negative fallback of the company that caused death and other real emotional and personal damage to the people who were negatively hit by the medication.

Sourour could have just as easily not coded the online form / app, but he still did. Him having regrets after the fact does not negate his part, and you have to own your actions, even when you regret them. Thats not to say be a martyr or not let yourself let go of mistakes, but learning that your action have consequenses and to understand before we act in our code and how it will/might impact others and own our actions then, so that we dont constantly have messes and feel sad about causing damage we could have prevented.

[source](https://www.freecodecamp.org/news/the-code-im-still-ashamed-of-e4c021dff55e/)


text:
# To-Do list for Human library

## Big Ticket Items

N/A

## Explore Models

- InsightFace: RetinaFace detector and ArcFace recognition: <https://github.com/deepinsight/insightface>

## In Progress

- Switch to TypeScript 4.3

## Known Issues

- CenterNet with WASM: <https://github.com/tensorflow/tfjs/issues/5110>
- NanoDet with WASM: <https://github.com/tensorflow/tfjs/issues/4824>
- BlazeFace and HandPose rotation in NodeJS: <https://github.com/tensorflow/tfjs/issues/4066>
- TypeDoc with TypeScript 4.3: <https://github.com/TypeStrong/typedoc/issues/1589>
- HandPose lower precision with WASM


text:
# az-netperf

Simple netperf installation on Microsoft Azure for Performance Testing.

This template does setup an Azure Linux VM with ![netperf](https://github.com/HewlettPackard/netperf).

![Why netperf is the right choice.](https://cloud.google.com/blog/products/networking/using-netperf-and-ping-to-measure-network-latency)

## Deploy

## Get your current IP

Access to the VM is protected via an Network Security Group. To be able to access the VM and run netperf test you will need to add your client ip as parameter during the Azure deployment or you will need to modify the Network Security Group afterwards.

Retrieve your client IP with curl via an Akamai Service:

~~~~bash
curl whatismyip.akamai.com
<IP_ADDRESS>
~~~~

## Deploy the ARM Template

### Using Azure CLI

You will need to create a resource group first

~~~~bash
az group create --subscription <your-subscription-id> -n netperf-rg -l westeurope
~~~~

Afterwards you can deploy the ARM Template deploy.json:

~~~~bash
az deployment group create --subscription <your-subscription-id> --resource-group netperf-rg --mode Incremental --name netperf-deploy --template-file deploy.json --parameters clientip='<IP_ADDRESS>'
~~~~

### Using Azure Portal

In case you like to deploy via the portal just click the deploy button next:

[![Deploy To Azure](https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/1-CONTRIBUTION-GUIDE/images/deploytoazure.svg?sanitize=true)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fcpinotossi%2Faz-netperf%2Fmain%2Fdeploy.json)

### Get Public IP (PIP)

After the successfull deployment you will need to retrieve the PIP which is provided via the Deployment Output or directly via the Azure Portal.

## Start RTT Test from your client

Replace PIP with the Public IP of your VM and execute this command on your client machine:

~~~~bash
netperf -H <PIP>,4 -v 2 -Z 0+01tdTzPwjcIFM/sphtJQ== -P 1 -t TCP_RR -- -O min_latency,mean_latency,max_latency
~~~~

Output:

~~~~bash
MIGRATED TCP REQUEST/RESPONSE TEST from <IP_ADDRESS> (<IP_ADDRESS>) port 0 AF_INET to <IP_ADDRESS> () port 0 AF_INET : demo : first burst 0
get_transport_info: getsockopt: errno 92
Minimum      Mean         Maximum
Latency      Latency      Latency
Microseconds Microseconds Microseconds

18732        20179.96     42079
~~~~

NOTE: The Values are presented in Microsecond (0.001 Millisecond).

## Bastion

The ARM Template will also install a Bastion Host which will allow you to log into the VM via the Azure Portal.

Default credentials:
- User: demouser
- password: demo!pass123

## Clean up

if you like to clean up you can use the following CLI commend which will deploy an empty ARM Template with mode complete:

~~~~bash
az deployment group create --subscription <your-subscription-id> --resource-group netperf-rg --mode complete --name netperf-delete--deploy --template-file ignore/empty.json
~~~~

## Details

### Install Script

Installation of netperf happens via the Azure VM [CustomScript Extension](https://github.com/Azure/azure-linux-extensions/tree/master/CustomScript) for linux which will execute the following command on the Linux VM after installation:

~~~~bash
 #!/bin/sh
echo "Updating packages ..."
sudo apt-get -qq update
echo "Install netperf ..."
sudo apt-get -qq install netperf
echo "kill netperf ..."
sudo killall -9 netserver
echo "Start netperf in deamon mode ..."
sudo netserver -d -p 12865 -4 -v 2 -Z 0+01tdTzPwjcIFM/sphtJQ==
~~~~

Therefore we needed to encode the shell commands with base64 as follow:

~~~~bash
cat script.sh | base64 -w0
ICMhL2Jpbi9zaA0KZWNobyAiVXBkYXRpbmcgcGFja2FnZXMgLi4uIg0Kc3VkbyBhcHQtZ2V0IC1xcSB1cGRhdGUNCmVjaG8gIkluc3RhbGwgbmV0cGVyZiAuLi4iDQpzdWRvIGFwdC1nZXQgLXFxIGluc3RhbGwgbmV0cGVyZg0KZWNobyAia2lsbCBuZXRwZXJmIC4uLiINCnN1ZG8ga2lsbGFsbCAtOSBuZXRzZXJ2ZXINCmVjaG8gIlN0YXJ0IG5ldHBlcmYgaW4gZGVhbW9uIG1vZGUgLi4uIg0Kc3VkbyBuZXRzZXJ2ZXIgLWQgLXAgMTI4NjUgLTQgLXYgMiAtWiAwKzAxdGRUelB3amNJRk0vc3BodEpRPT0NCg==
~~~~

This content has been referenced inside the ARM Template "deploy" as part of the "Microsoft.Compute/virtualMachines/extensions" Resource.

## Helpfull Links

- ![ARM Template VM Reference](https://docs.microsoft.com/en-us/azure/templates/microsoft.compute/2019-03-01/virtualmachines/extensions#VirtualMachineExtensionProperties)
- ![VM Custom Script Extension example with Ubuntu](https://github.com/Azure/azure-quickstart-templates/tree/master/201-customscript-extension-public-storage-on-ubuntu)
- ![Azure VM Script Extension Documentation](https://docs.microsoft.com/en-us/azure/virtual-machines/extensions/custom-script-linux)
- ![Netperf on Github](https://github.com/HewlettPackard/netperf)
- ![Netperf Manual on Github](https://github.com/HewlettPackard/netperf/blob/master/doc/netperf.pdf)

## Netperf cheatsheet

### How to start the netserver?

~~~~bash
:~$ sudo netserver -d -p 12865 -4 -v 2 -Z 0+01tdTzPwjcIFM/sphtJQ==
~~~~

For better debugging you can run in none Deamon mode as follow:

~~~~bash
:~$ sudo netserver -D -d -p 12865 -4 -v 2 -Z huhu
~~~~

### How to verify if netserver is running?

~~~~bash
:~$ ps -aux | grep netserver
root     23158  0.0  0.0   9788   136 ?        Ss   21:47   0:00 /usr/bin/netserver
userone 24779  0.0  0.0  12944   932 pts/0    S+   22:05   0:00 grep --color=auto netserver
~~~~

## How to verify if port 12865 is used?

~~~~bash
:~$ ss -plnt sport eq :12865
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port

LISTEN     0      128           :::12865                     :::*
~~~~

or

~~~~bash
:~$ sudo netstat -tnlp | grep :12865
tcp6       0      0 :::12865                :::*                    LISTEN      2315
8/netserver
~~~~

## How to kill the netserver?

~~~~bash
:~$ sudo killall -9 netserver
~~~~

repository: cpinotossi/az-netperf

repo_name: cpinotossi/az-netperf


text:
# Disabling Grunt
Disabling grunt is a move that was advised to me, in Sails.js there are a few things you have to remember

## Disabling
Open the file tasks/.sailsrc

```json
{
  "hooks": {
    "grunt": false
  }
}
```

And then add access to your public assets

```json
{
  "paths": {
    "public": "assets"
  }
}
```

repository: SirAglovale/SailsTutorial

repo_name: SirAglovale/SailsTutorial


text:
# Kali VirtualBox

A simple python script to automatically download, provision and update a [Kali Linux](https://www.kali.org/) VM in [Virtualbox](https://www.virtualbox.org/).

## Usage
`./python3 KaliVM.py`

## Sample Output
![](https://jerrygamblin.com/wp-content/uploads/2019/07/Screen-Shot-2019-07-08-at-9.13.40-AM.png)
_I couldn't get guestcontrol to be quite so the output is a little off._

## Requirements
*   Requires [Oracle VM VirtualBox](https://www.virtualbox.org/)
*   Requires [Oracle VM VirtualBox Extension Pack](https://www.virtualbox.org/wiki/Downloads)
*   Requires Python `requests`.
    -   Install Via `pip install -r requirements.txt`

## Notes
*   Creates A VM named `Kali-Day-Month-Year`
*   Can Use Over 4GB of Data (Watch On Metered Connections).
*   Takes 30+ Minutes To Build Depending On Connection Speed.

repository: solucionestux/Kali-VirtualBox

repo_name: solucionestux/Kali-VirtualBox


text:
jelf
====
ELF parsing library in java.

[![Build Status](https://travis-ci.org/fornwall/jelf.svg?branch=master)](https://travis-ci.org/fornwall/jelf)

ELF Resources
=============
- [Wikipedia entry on the ELF format](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format)
- [elf(5) man page](http://man7.org/linux/man-pages/man5/elf.5.html)
- [Anatomy of Linux dynamic libraries](https://www.ibm.com/developerworks/library/l-dynamic-libraries/)

Authors
=======
Created and maintained by Fredrik Fornwall ([@fornwall](https://github.com/fornwall)).

repository: SunyDays/jelf

repo_name: SunyDays/jelf


text:
### Why we avoided the angular service worker

__12/05/2020__

![https://imgs.xkcd.com/comics/refresh_types.png](translations)

We were looking at using the [Angular service worker](https://angular.io/guide/service-worker-intro) to provide
app integrity during client updates. Since Angular is a single page application (SPA), clients may have loaded the old version of the application in a browser tab and will not get
the new version until they refresh or open a new tab. Cache busting with a webserver like nginx doesn't help, since navigation inside the application is intercepted by Angular.

When we deploy a new version of our angular application, we want to ensure our users:

- Do not get any errors if they continue to use the application (even if it is the old version).
- Are upgraded to the latest angular application or are prompted to upgrade.

Enter the Angular service worker, which [promises](https://angular.io/guide/service-worker-intro#service-workers-in-angular):

```
to optimize the end user experience of using an application over a slow or unreliable network connection, while also minimizing the risks of serving outdated content.

The Angular service worker's behavior follows that design goal:

- Caching an application is like installing a native application. The application is cached as one unit, and all files update together.
- A running application continues to run with the same version of all files. It does not suddenly start receiving cached files from a newer version, which are likely incompatible.
- When users refresh the application, they see the latest fully cached version. New tabs load the latest cached code.
- Updates happen in the background, relatively quickly after changes are published. The previous version of the application is served until an update is installed and ready.
- The service worker conserves bandwidth when possible. Resources are only downloaded if they've changed.
```

We aren't interested in offline capabilities, but maintaining application integrity sounds great. Note that I'm evaluating the Angular service worker for application integrity, not service workers in general.

The docs have a good [description](https://angular.io/guide/service-worker-devops#service-worker-and-caching-of-app-resources) of how the Angular service worker achieves these goals:

```
Conceptually, you can imagine the Angular service worker as a forward cache or a CDN edge that is installed in the end user's web browser
```

#### Pros

- Installing the angular service worker into our app was [simple and straight forward](https://angular.io/guide/service-worker-getting-started).
- The service worker will indeed maintain the app version as stated in it's design goals.
- Adding the logic to prompt the user to upgrade was also [straight forward](https://angular.io/guide/service-worker-communications#checking-for-updates) (although the `isStable` check seems odd and bound to cause sneaky issues).

#### Deal breakers:

- Service workers don't work behind a [redirect](https://angular.io/guide/service-worker-devops#changing-your-apps-location)

The solution as suggested by the docs in such a situation:

```
instead, you must serve the contents of safety-worker.js at the URL of the Service Worker script you are trying to unregister, and must continue to do so until you are certain all users have successfully unregistered the old worker. For most sites, this means that you should serve the safety worker at the old Service Worker URL forever.
```

This is a pretty big pot-hole to fall into and one I would rather not have to consider when deploying our app. Especially since it is likely we will change
the location of our app at some point. I feel like this problem as a whole exposes the main weakness with the angular service worker, which is if it's broken, the only way to fix it is to update the service worker, but the service worker is responsible to update itself. I also feel like there some nasty security implications here as well, e.g a compromised angular service worker has complete control over the contents of your application on the users browser until the user hard refreshes or removes the service worker manually.

- Can only use the service worker with [production settings](https://angular.io/guide/service-worker-getting-started#serving-with-http-server)

From a development perspective this makes using the angular service worker a real pain and more likely to cause some horrible bug that slips through into production. Which as pointed out above, is likely to cause something which can only be fixed by updating the angular service worker or by using one of the [fail-safes](https://angular.io/guide/service-worker-devops#fail-safe). Alternatively tell all your users to hard refresh or manually unregister the service worker.

#### Conclusion

Despite the potential, the Angular service worker is just not worth the extra complexity it adds to our application. We will be fixing our application integrity problems in other not so great ways probably in a different blog post.

repository: shusson/info-cms

repo_name: shusson/info-cms


text:
# RoRProject
This is a web application based on Ruby On Rails to connect users and let them chat in order to meet each other in "Groups", set of people that want to play specific games, or in "Teams", set of player ready to challenge other teams.
The app uses Twitch API to show some twitch streams based on user's games.
Heroku free service is been used to deploy the application.

The app is accessible at this link: https://playersarena.herokuapp.com/

Sapienza University of Rome, project made by three students check [Contacts](#contacts) section for more info.

# Install and start

## Getting started

To get started with the app, clone the repo and go to app's root directory:

```
$ cd arena_app
```
(this is the app directory, others are just information ones)

Then install the needed gems:

```
$ bundle install --without production
```

Next, migrate the database:

```
$ rails db:migrate
```

Finally, run the test suite to verify that everything is working correctly:

```
$ rails test
```

If the test suite passes, go ahead to redis installation.

Now you have to install Redis server that handles through websockes the chatrooms' system.

## Install Redis for websocket setup

Download and install redis software

```
$ wget http://download.redis.io/redis-stable.tar.gz
$ tar xvzf redis-stable.tar.gz
$ cd redis-stable
$ make
```
It is a good idea to copy both the Redis server and the command line interface in proper places, either manually using the following commands:

```
$ sudo cp src/redis-server /usr/local/bin/
$ sudo cp src/redis-cli /usr/local/bin/

```
Or just using

```

$ sudo make install

```

In the following documentation we assume that /usr/local/bin is in your PATH environment variable so that you can execute both the binaries without specifying the full path.

Run the redis server on another shell

```
$ redis-server
```

## Start the app
You are ready to run the app in a local server, run in a shell:

```
$ rails server
```
And run in an other shell:
```
$ redis-server
```

You can now access the app at: http://localhost:3000/

# General info

## Ruby version
The app uses Ruby 2.3.0

## System dependencies
 Not more that gems in Gemfile and redis-server to let chat works.

## Deployment istruction
 To deploy the app you need to use git subtree.

# Contacts
Not-a-genius: https://github.com/not-a-genius
Linguaggio-scalabile: https://github.com/LinguaggioScalabile
Salva-95: https://github.com/salva-95

repository: not-a-genius/RoRProject

repo_name: not-a-genius/RoRProject


text:
AutoBackup Sample
=================

This sample demonstrates how to selectively disable Automatic Backups in Android M.

Instructions
------------

* Tap the Add File button to create a file with selected specifications.

Build Requirements
------------------
Using this sample requires the Android M Developer Preview and the Xamarin.Android M Web Preview

Authors
-------
Copyright (c) 2014 The Android Open Source Project, Inc.
Ported from [Android Automatic Backup Sample](https://github.com/googlesamples/android-AutoBackupForApps)
Ported to Xamarin.Android by Peter Collins

repository: Appercode/monodroid-samples

branch_name: refs/heads/Appercode

gha_language: C#

repo_name: Appercode/monodroid-samples


text:
[![Build Status](https://travis-ci.org/samudary/drip-nodejs.svg?branch=master)](https://travis-ci.org/samudary/drip-nodejs)

# Drip Rest API Wrapper for Node.js

A complete Nodejs wrapper for the Drip REST API.

## How to install

`npm install drip-nodejs --save`

## Authentication

For private use and integrations, use your API Token found [here](https://www.getdrip.com/user/edit). Create a new instance of the client library with:

`const client = require('drip-nodejs')({ token: YOUR_API_KEY, accountId: YOUR_ACCOUNT_ID });`

For public integrations with an OAuth2 application registered with Drip, you'll need to specify the type of token you're passing (e.g. "Bearer"):

`const client = require('drip-nodejs')({ token: YOUR_ACCESS_TOKEN, tokenType: TOKEN_TYPE, accountId: YOUR_ACCOUNT_ID });`

You'll need your Drip Account ID when requiring the client which can be found [here](https://www.getdrip.com/settings/general) in your Drip account.

## Usage

The following methods are currently available on the client instance. You can find a detailed explanation of all methods and their effect on resources in your Drip account [here](https://www.getdrip.com/docs/rest-api).

**Note:** All methods except `updateBatchSubscribers` return promises and support an optional asynchronous callback. The batch subscribers method only supports callbacks for now.

### Accounts
| Action                               | Method                                                                       |
|--------------------------------------|------------------------------------------------------------------------------|
| List all accounts                    | `client.listAccounts(callback)`                                              |
| Fetch an account                     | `client.fetchAccount(accountId, callback)`                                   |

### Broadcats
| Action                               | Method                                                                       |
|--------------------------------------|------------------------------------------------------------------------------|
| List broadcasts                      | `client.listBroadcasts(options = {}, callback)`                              |
| Fetch a broadcast                    | `client.fetchBroadcast(broadcastId, callback)`                               |

### Campaigns
| Action                               | Method                                                                       |
|--------------------------------------|------------------------------------------------------------------------------|
| List all campaigns                   | `client.listCampaigns(options = {}, callback)`                               |
| Fetch a campaign                     | `client.fetchCampaign(campaignId, callback)`                                 |
| Activate a campaign                  | `client.activateCampaign(campaignId, callback)`                              |
| Pause a campaign                     | `client.pauseCampaign(campaignId, callback)`                                 |
| List specific campaign's subscribers | `client.listAllSubscribesToCampaign(campaignId, callback)`                   |
| Subscribe to a campaign              | `client.subscribeToCampaign(campaignId, payload, callback)`                  |

### Campaign subscriptions
| Action                               | Method                                                                       |
|--------------------------------------|------------------------------------------------------------------------------|
| List campaign subscriptions          | `client.subscriberCampaignSubscriptions(subscriberId, callback)`             |

### Conversions
| Action                               | Method                                                                       |
|--------------------------------------|------------------------------------------------------------------------------|
| List all conversions                 | `client.listConversions(options = {}, callback)`                             |
| Fetch a conversion                   | `client.fetchConversion(conversionId, callback)`                             |

### Custom fields
| Action                               | Method                                                                       |
|--------------------------------------|------------------------------------------------------------------------------|
| List all custom fields               | `client.listAllCustomFields(callback)`                                       |

### Events
| Action                               | Method                                                                       |
|--------------------------------------|------------------------------------------------------------------------------|
| Record an event                      | `client.recordEvent(payload, callback)`                                      |
| Record a batch of events             | `client.recordBatchEvents(payload, callback)`                                |
| List all events in account           | `client.listEventActions(options = {}, callback)`                            |

### Forms
| Action                               | Method                                                                       |
|--------------------------------------|------------------------------------------------------------------------------|
| List all forms                       | `client.listForms(callback)`                                                 |
| Fetch a form                         | `client.fetchForm(formId, callback)`                                         |

**Note:** The beta purchases endpoint has been deprecated and its methods have been removed from the package except `createPurchase`, which now sends requests to the Order creation endpoint [here](https://developer.drip.com/#orders).

### Orders
| Action                               | Method                                                                       |
|--------------------------------------|------------------------------------------------------------------------------|
| Record an order for a subscriber     | `client.createUpdateOrder(payload, callback)`                                |
| Record a batch of orders             | `client.createUpdateBatchOrders(payload, callback)`                          |
| Record a refund for an order         | `client.createUpdateRefund(payload, callback)`                               |

### Subscribers
| Action                               | Method                                                                       |
|--------------------------------------|------------------------------------------------------------------------------|
| List all subscribers                 | `client.listSubscribers(options = {}, callback)`                             |
| Update a subscriber                  | `client.createUpdateSubscriber(payload, callback)`                           |
| Fetch a subscriber                   | `client.fetchSubscriber(idOrEmail, callback)`                                |
| Unsubscribe from a campaign          | `client.unsubscribeFromCampaign(idOrEmail, campaignId, callback)`            |
| Unsubscribe from all mailings        | `client.unsubscribeFromAllMailings(idOrEmail, callback)`                     |
| Delete a subscriber                  | `client.deleteSubscriber(idOrEmail, callback)`                               |
| Update a batch of subscribers        | `client.updateBatchSubscribers(payload, callback)`                           |
| Unsubscribe a batch of subscribers   | `client.unsubscribeBatchSubscribers(payload, callback)`                      |

### Tags
| Action                               | Method                                                                       |
|--------------------------------------|------------------------------------------------------------------------------|
| List all tags                        | `client.listAllTags(callback)`                                               |
| Tag a subscriber                     | `client.tagSubscriber(payload, callback)`                                    |
| Remove tag from subscriber           | `client.removeSubscriberTag(email, tag, callback)`                           |

### User
| Action                               | Method                                                                       |
|--------------------------------------|------------------------------------------------------------------------------|
| Fetch authenticated user             | `client.fetchUser(callback)`                                                 |

### Webhooks
| Action                               | Method                                                                       |
|--------------------------------------|------------------------------------------------------------------------------|
| List all webhooks                    | `client.listWebhooks(callback)`                                              |
| Fetch a webhook                      | `client.fetchWebhook(webhookId, callback)`                                   |
| Create a webhook                     | `client.createWebhook(payload, callback)`                                    |
| Destroy a webhook                    | `client.destroyWebhook(webhookId, callback)`                                 |

### Workflows
| Action                               | Method                                                                       |
|--------------------------------------|------------------------------------------------------------------------------|
| List all workflows                   | `client.listAllWorkflows(options = {}, callback)`                            |
| Fetch a workflow                     | `client.fetchWorkflow(workflowId, callback)`                                 |
| Activate a workflow                  | `client.activateWorkflow(workflowId, callback)`                              |
| Pause a workflow                     | `client.pauseWorkflow(workflowId, callback)`                                 |
| Start a subscriber on a workflow     | `client.startOnWorkflow(workflowId, payload, callback)`                      |
| Remove a subscriber from a workflow  | `client.removeFromWorkflow(workflowId, idOrEmail, callback)`                 |

### Workflow triggers
| Action                               | Method                                                                       |
|--------------------------------------|------------------------------------------------------------------------------|
| List all workflow triggers           | `client.listTriggers(workflowId, callback)`                                  |
| Create a workflow trigger            | `client.createTrigger(workflowId, payload, callback)`                        |
| Update a trigger                     | `client.updateTrigger(workflowId, triggerId, payload, callback)`             |

See the official [REST API docs](https://www.getdrip.com/docs/rest-api) for a complete API reference.

## Examples

### Listing subscribers

The `listSubscribers` accepts an optional object of filter arguments. Refer to Drip's API docs for all the available filters.

```javascript
/**
 * Using a promise
 */

const options = {
  status: "unsubscribed",
  page: 2
  // or with more options
};

client.listSubscribers(options)
  .then((response) => {
    // do something with the raw response object or with `response.body`
  })
  .catch((error) => {
    // do something with the error
  });

/**
 * Using a callback
 */

client.listSubscribers(options, (error, response, body) => {
  // do someting with the response or handle errors
});
```

### Updating a batch of subscribers

The `updateBatchSubscribers` method takes a batch object for the payload and is most suitable for sending thousands of subscriber updates.

Because Drip's batch APIs support a maximum of 1000 records, this method breaks the payload into *N* "batches" and calls the API *N* times. The callback is invoked only after all batches' API calls have returned, and receives *N*-sized arrays for values (i.e. `errors`, `responses`, and `bodies`).

It is the responsibility of the caller to interpret these values and handle any errors.

```javascript
var batch = {
  "batches": [{
    "subscribers": [
      {
        "email"<EMAIL_ADDRESS>        "tags": "Dog Person"
      },
      {
        "email"<EMAIL_ADDRESS>        "tags": "Cat Person"
      }
      // Lots more subscribers...
    ]
  }]
}

client.updateBatchSubscribers(batch, function (errors, responses, bodies) {
  // Do stuff
  }
)
```

### Sending a batch of events

The `recordBatchEvents` methods takes a batch object for the payload and is most suitable for sending thousands of events. **Note** that the batch events method will not break up the payload into nice chunks like the subscribers batch method. This will be handled in a future update.

```javascript
var batch = {
  "batches": [{
    "events": [
      {
        "email"<EMAIL_ADDRESS>        "action": "Opened a door"
      },
      {
        "email"<EMAIL_ADDRESS>        "action": "Closed a door"
      }
      // Lots more events...
    ]
  }]
}

client.recordBatchEvents(batch, function (error, response, body) {
  // Do stuff
  }
)
```

## Contributing

1. Fork it ( https://github.com/samudary/drip-nodejs/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request

Note: Jasmine is used for testing


text:
beanstack
=========

Video hosting for the free world

## What it is

beanstack is one half of a framework designed to decentralize video hosting and sharing on the web. It intends to follow the UNIX philosophy of "do one thing, and do it well." The purpose of beanstack is simple: to host and stream videos to other websites.

## Prerequisites

* Ruby (~>2.1.2)
* Bundler (~>1.6.3)
* PostgreSQL (or the knowledge to change beanstack to another database provider, see config/database.yml)
* Redis
* Foreman
* ffmpeg with Ogg Vorbis and Theora codecs enabled

## Setup

Fork/clone the repository, and from within it:

    bundle install
    bundle exec rake db:create
    bundle exec rake db:schema:load
    foreman start

This should bring up your very own instance of beanstack.

## Questions? Comments?

Submit an issue or send me an email, I'd love to hear what you have to say!

repository: mrysav/beanstack

repo_name: mrysav/beanstack


text:
#ChangeLog

```
# v1.0.2 (2016-08-11)
- Use CustomData to pass information to CustomScript

# v1.0.1 (2016-08-04)
- Add concourse worker disk size options

# v1.0.0 (2016-07-05)
- Improve deployment routine for Concourse
- Upgrade versions
    - Upgrade Bosh-init version to 0.95
    - Upgrade Bosh version to 257.1
    - Upgrade stemcell version to 3232.5
	- Upgrade Azure CPI version to v13, with manifest files changed
	- Upgrade Concourse version to 1.3.0, with manifest files changed to Bosh Manifest V2
- Adjust project structure

# Preview Version (2016-04-20)
```


text:
## Space battle console game

Made with [ConsoleGameEngine](https://github.com/ollelogdahl/ConsoleGameEngine),
which is, unfortunately, not maintained anymore. Written in a mixture of OOP and
functional paradigms (with [Honk#](https://github.com/WhiteBlackGoose/HonkSharp) powering
the last one).

### Play

Install [git](https://git-scm.com) and [.NET 5 SDK](https://dotnet.microsoft.com/download/dotnet/5.0) and run:
```
git clone --recurse-submodules https://github.com/WhiteBlackGoose/FunConsoleGame
cd FunConsoleGame
dotnet restore
dotnet build -c release
cd Sources
dotnet run -c release
```

### Gallery

![gif](./Pics/game.gif)

![single image](./Pics/s.png)

license: Unlicense

repository: WhiteBlackGoose/FunConsoleGame

repo_name: WhiteBlackGoose/FunConsoleGame


text:
## CSS Info

CSS applies rules as to how HTML elements should appear
- A CSS rule contains two parts: a selector and a declaration.
    - Example:  p {font-family: Arial;}
        - p is the selector saying that all p elements will have the font Arial
        - The items in the braces is the declaration
- CSS declarations sit inside curly brackets and each is made up of two parts: a property and a value, separated by a colon
    - Using the previous example, the font-family is the property
    - Arial is the value of that property

### Color

Foreground color can be specified in three different ways:
1. RGB - These express colors in terms of how much red, green and blue are used to make it up.
    - For example: rgb(100,100,90)
2. Hex - These are six-digit codes that represent the amount of red, green and blue in a color, preceded by a pound or hash # sign.
    - For example: #ee3e80
3. Color - Color names There are 147 predefined color names that are recognized by browsers.
    - For example: DarkCyan

Background color is specified for each block that css recognizes, such as body, header, footer, etc. and sets the color for the background of that block
- Example:  body {background-color: rgb(200,200,200);}

Opacity - CSS3 introduces the opacity property which allows you to specify the opacity of an element and any of its child elements. The value is a number between 0.0 and 1.0 (so a value of 0.5 is 50% opacity and 0.15 is 15% opacity).  It is rgba.
- Example:  p.one { background-color: rgb(0,0,0); opacity: 0.5;} p.two { background-color: rgb(0,0,0); background-color: rgba(0,0,0,0.5);}

HSL - CSS3 also allows you to specify colors as HSL values,  X with an optional opacity value. It is known as HSLA.
- Example: p { background-color: #ffffff; background-color: hsla(0,100%,100%,0.5);}

repository: ymclapp/learning-journal

repo_name: ymclapp/learning-journal


text:
![](https://img.shields.io/badge/Microverse-blueviolet)

# Catalogue of Recipes

# Pokedex ~ React/Redux Capstone Project

A simple web app, with two pages, one for list the content, an the other one to show the elements information, here i implement the basic and advance React/Redux features such as:
- components
- functional components
- components lifecycle methods
- state and props
- lifting state
- testing
- store
- thunks
- hooks
- prop types
- actions
- reducers

![](src/utilities/screenshot.png)

## [Live Link](https://pokedex-helman101.herokuapp.com/)

## Project Videos

  - [Part 1](https://www.loom.com/share/b2adf7611cf24672ba6a79b2ba49c4f3?sharedAppSource=personal_library)
  - [Part 2](https://www.loom.com/share/23dfad07d29249749607a016752ebe68?sharedAppSource=personal_library)

## Built With

- JavaScript
- REACT
- REDUX
- Jest
- HTML
- CSS

## Getting Started

To set up a local copy of the project

- `git clone git@github.com:helman101/Pokedex-Capston.git`
- `cd Pokedex-Capston`
- `npm install`

### Run tests

- Go to your terminal
- Run ```npm test``` to run all the tests.

## Author

👤 **Andres Ortegon**

- GitHub: [@helman101](https://github.com/helman101)
- Twitter: [@helman1011](https://twitter.com/Helman1011)
- LinkedIn: [Andres Ortegon](https://www.linkedin.com/in/helman101/)

## 🤝 Contributing

Contributions, issues, and feature requests are welcome!

## Show your support

Give a ⭐ if you like this project!

## 📝 [License](LICENSE)

branch_name: refs/heads/development

gha_language: JavaScript


text:
# Sporocybe byssoides (Pers.) Fr., 1832 SPECIES

#### Status
SYNONYM

#### According to
The Catalogue of Life, 3rd January 2011

#### Published in
Syst. mycol. (Lundae) 3(2): 343 (1832)

#### Original name
Periconia byssoides Pers., 1801

### Remarks
null

repository: mdoering/backbone

path: /life/Fungi/Ascomycota/Sordariomycetes/Microascales/Microascaceae/Cephalotrichum/Cephalotrichum purpureofuscum/ Syn. Sporocybe byssoides/README.md

repo_name: mdoering/backbone


text:
# kbd101gr
## Description
kbd101gr is a Windows keyboard layout file mapping the Japanese onto the German keyboard.

This layout has several advantages over the plain German kbdgr layout:

  * kana input is possible using the same layout as on US keyboards
  * IME shortcuts involving NLS keys are working
  * dead keys are disabled as they are not supported by Japanese input

This layout does not solve all remaining issues:

  * redirecting the layout file to this one is still a modification that can be overwritten by any update or Windows repair
  * dead keys are still not working and hence disabled at least
  * IME's letter capturing still breaks on e. g. the control + alt modifier

As an addition it is possible to enter ¥ using control + alt + y.

## Install
On 64-bit systems, copy the contents of the extracted archive into your Windows directory.

On 32-bit systems, copy the DLL from the SysWOW64 directory of the extracted archive into your System32 directory.

Redirect the Japanese kbdjpn layout to kbd101gr by browsing to the
`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000411` registry key
and changing the `Layout File` value to `kbd101gr.dll`.

Log out and back in and the new layout will be applied.

## Warnings
  * As this is a modification of Windows, an update or repair process could revert the installation.
  * This layout is based on code of Windows 10, version 1607 and the releases were compiled with Visual Studio 2015 Update 3 using the WDK for Windows 10, version 1703. The releases were only tested on Windows 10, version 1703 and Windows Server 2016 and may not be compatible with all Windows versions.

license: MS-PL


text:
---
title: Shadowing Inherited State Variables
version: 0.8.20
description: An example of shadowing state variables by inheritance
keywords: [state, variables, variable, shadow, shadowing, inheritance]
---

Unlike functions, state variables cannot be overridden by re-declaring it
in the child contract.

Let's learn how to correctly override inherited state variables.

```solidity
{{{Shadow}}}
```

branch_name: refs/heads/gh-pages


text:
[![Build Status](https://travis-ci.org/zrrrzzt/bigfive-compare.svg?branch=master)](https://travis-ci.org/zrrrzzt/bigfive-compare)
[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://github.com/feross/standard)

# bigfive-compare

NO LONGER MAINTAINED

Please use [bigfive-web](https://github.com/Alheimsins/bigfive-web) or [b5-web](https://github.com/zrrrzzt/b5-web) for solutions with compare built in

***

Compare results from bigfive personality tests

## Realated
- [bigfive-web](https://github.com/maccyber/bigfive-web) Web frontend for bigfive tests
- [micro-bigfive-questions](https://github.com/maccyber/micro-bigfive-questions) Webservice that returns bigfive questions
- [micro-bigfive-evaluator](https://github.com/maccyber/micro-bigfive-evaluator) Webservice that evaluates bigfive questions
- [micro-bigfive-generator](https://github.com/maccyber/micro-bigfive-generator) Webservice that generates and saves results to bigfive-web
- [micro-bigfive-results](https://github.com/maccyber/micro-bigfive-results) Webservice that returns bigfive informative test results
- [micro-bigfive-save](https://github.com/maccyber/micro-bigfive-save) Webservice that stores bigfive answers
- [profile-bigfive](https://github.com/zrrrzzt/profile-bigfive) Profile page for you bigfive tests

## Screenshot

![Screenshot](http://bildr.no/image/TGpiVDc0.jpeg "Screenshot of bigfive-compare")

## License

[MIT](LICENSE)

## About

Created with :heart: by [zrrzzt](https://github.com/zrrrzzt) and [maccyber](https://github.com/maccyber)

![Robohash image of zrrrzzt](https://robots.kebabstudios.party/zrrrzzt.png "Robohash image of zrrrzzt")
![Robohash image of maccyber](https://robots.kebabstudios.party/maccyber.png "Robohash image of maccyber")

repository: zrrrzzt/bigfive-compare

repo_name: zrrrzzt/bigfive-compare


text:
---
title: Markup
---

## Syntax

Use `== ==` to mark.

## Demo

VuePress Theme Hope is ==powerful==.

```md
VuePress Theme Hope is ==powerful==.
```

repository: vuepress-theme-hope/vuepress-theme-hope

repo_name: vuepress-theme-hope/vuepress-theme-hope


text:
# Cap'n Proto runtime library for Rust

[![crates.io](http://meritbadge.herokuapp.com/capnp)](https://crates.io/crates/capnp)

[documentation](https://docs.capnproto-rust.org/capnp/)

repository: freedomlayer/capnproto-rust

repo_name: freedomlayer/capnproto-rust


text:
# Analyzing MIMIC using pandas

This folder contains Python scripts that use pandas to analyze the MIMIC III data.

pandas is a "powerful Python data analysis toolkit".

You can download Python 3 here:  https://www.python.org/

Information about pandas is availible here:  http://pandas.pydata.org/


text:
---
weight: 207
toc: true
title: Strategic Merge Patch
menu:
    docs:
        parent: operator
lead: ""
images: []
draft: false
description: Using strategic merge patch to overwrite container definition.
---

This document describes how to overwrite the configuration generated by the
operator using [strategic merge
patches](https://kubernetes.io/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch/#use-a-strategic-merge-patch-to-update-a-deployment).

When users need to apply a specific configuration to the containers that is
either not exposed in the custom resource definitions or already defined by
the operator, strategic merge patch can be used.

## How does it work?

The `Prometheus`, `Alertmanager`, and `ThanosRuler` CRDs expose a
`spec.containers` field which allows to:
* Override fields for the containers generated by the operator.
* Inject additional containers.

## Merging patch for Prometheus

The following manifest overwrites the `failureThreshold` value of startup
probe of the Prometheus container:

```yaml
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  labels:
    prometheus: self
  name: self
  namespace: default
spec:
  containers:
  - name: prometheus
    startupProbe:
      failureThreshold: 500
```

## Merging patch for Alertmanager

The following manifest overwrites the `failureThreshold` values of the
readiness and liveness probes for the Alertmanager container.

```yaml
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
  labels:
    alertmanager: main
  name: main
  namespace: monitoring
spec:
  containers:
  - name: alertmanager
    livenessProbe:
      failureThreshold: 5
    readinessProbe:
      failureThreshold: 5
```

repository: prometheus-operator/prometheus-operator

gha_language: Go

repo_name: prometheus-operator/prometheus-operator


text:
# Console Tester

This console app allows you to test a simple moving average robot, it contains the Amazon and Microsoft price data so you don't have to import any price data by your self.

Instruction

1. Run the console app
2. Provide the symbol code, either MSFT or AMZN
3. Type "backtest" for backtesting the robot or "optimize" for optimization

The result of backtest or optimization will be displayed once the operation finished.

repository: ravindergujiri/NetTrade

repo_name: ravindergujiri/NetTrade


text:
Command-line utility `dbwebb` to work with course repositories
============================================================

[![Join the chat at https://gitter.im/mosbth/anax](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mosbth/dbwebb?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

Admin utility for course repos.

[Read the manual](https://dbwebb.se/dbwebb-cli) (swedish only).

```
 .
..:  Copyright (c) 2014-2018 Mikael Roos<EMAIL_ADDRESS>```

repository: mosbth/dbwebb-cli

gha_language: Shell

repo_name: mosbth/dbwebb-cli