teleren/devto huggingface dataset:
Argo CD 설치 및 설정
Tags: kubernetes, argocd, gitops
Published: 2022-02-21 04:52:19

[ArgoCD](https://argo-cd.readthedocs.io/en/stable/)는 [GitOps](https://www.weave.works/technologies/gitops/) 로 관리되는 Kubernetes manifests의 변경사항을 Monitoring 하며 실제 Cluster 에 배포된 형태를 이와 동일하게 계속 유지시키는 역할을 한다. 

## Argo CD 설치
https://argo-cd.readthedocs.io/en/stable/getting_started/
Argo CD를 kubernetes cluster 에 설치
```bash
$ kubectl create namespace argocd
$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/ha/install.yaml
```
운영에서는 HA 버전의 Argo CD를 설치한다. 

---
## Argo CD CLI 설치
Argo CD CLI 설치
```bash
$ curl -sSL -o ~/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
$ chmod +x ~/bin/argocd
```

---
## Argo CD 서비스 노출
Argo CD는 default로 서버를 외부로 노출시키지 않는다. 아래와 같이 서비스타입을 LoadBalancer로 변경하여 외부로 노출시킨다. 
```bash
$ kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
```

---
## admin password 변경
Argo CD는 최초 `admin` account의 초기 password를 kubernetes 의 secret 으로 저장해 놓는다. 아래와 같이 password를 얻는다. 
```bash
$ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
```

Argo CD CLI를 이용하여 Argo CD에 로그인한다. 우선 생성된 Load Balancer의 주소를 얻는다. 
```bash
kubectl get svc argocd-server -n argocd
```

그리고 Login 한다. Username은 `admin` 이다
```bash
argocd login <ARGOCD_SERVER_DOMAIN>
```

admin 유저의 password를 업데이트 한다. 
```bash
$ argocd account update-password
```

---

> Argo CD는 Git repository를 3분에 한번씩 pollin 하면서 실제 kubernetes cluster 와 다른점을 확인한다. 따라서 배포시에 운이 없다면 최대 3분을 기다려야 Argo CD 가 변경된 image를 배포하게 된다. 이렇게 Polling 으로 인한 delay 를 없애고 싶다면 Git repository 에 Argo CD로 webhook을 만들어 놓으면 된다. 아래 link 참고
https://argo-cd.readthedocs.io/en/stable/operator-manual/webhook/

그리고 보통 Argo CD는 내부 개발자나 운영자 외에는 접근을 막기 위해 Security group 에서 특정 IP 만 inbound 로 열어 놓는 경우가 있다. 이 때 위와 같이 webhook 을 만들어 놓았다면 반드시 Argo CD의 load balancer에 Github 의 webhook 관련 API 도 inbound로 열어줘야 한다. 
> 아래 링크에 GitHub 의 IP 주소 관련 내용이 있고, 
https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/about-githubs-ip-addresses
실제 inbound 에 넣줘야 하는 IP는 아래에서 확인할 수 있다.hooks 에 있는 리스트를 넣어주면 된다.
https://api.github.com/meta

[Argo CD Notification](https://argocd-notifications.readthedocs.io/en/stable/) 을 사용하여 Slack 에 notification 을 보내는 설정도 하면 개발팀에서 배포가 잘 안된 경우, 알림을 받을 수 있다. 

Argo CD의 [ApplicationSet](https://github.com/argoproj-labs/applicationset) 을 활용하여 프로젝트를 셋업하는 방법도 있다. 예전에는 App of Apps 를 사용했다면 여기서 좀 더 발전된 개념이 Application Sets 이다.

GitOps는 현재 1.0이 공식 버전이고 곧 업데이트 된 개념이 나올 예정이다.
https://opengitops.dev/
https://github.com/open-gitops/documents

> GitOps 1.0 의 문제점은 [The pains of GitOps 1.0](https://codefresh.io/about-gitops/pains-gitops-1-0/) 참고. 
현재 Kubernetes 의 configuration 관리를 위해 kustomize를 사용중이고 Argo CD 에서 kustomize를 이용한 배포를 한다. 만약 kustomize나 helm에서 branching을 사용한다면 [Stop Using Branches for Deploying to Different GitOps Environments](https://codefresh.io/about-gitops/branches-gitops-environments/) 를 읽어보면 도움이 될거 같다. 

실제 Argo CD를 사용하고 있는 스크린샷
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f7ni1swapvf8kvtupr0v.png)
Loki를 이용한 손쉬운 Kubernetes Logging
Tags: kubernetes, logging, loki
Published: 2022-02-21 04:48:35

[Loki](https://github.com/grafana/loki)는 Prometheus 와 같은 철학으로 탄생한 cloud native infra를 위한 logging 서비스이다. 개인적으로 EFK 도 사용해보고 Datadog의 logging 도 사용해 봤지만 Loki가 제일 마음에 든다. (Datadog 이나 New Relic 과 같은 서비스를 사용하지 않는다면 Loki를 사용하여 Logging을 하면 가벼운 Kubernetes logging 서비스를 구축 가능한다.)

## Loki 설치

```bash
$ helm repo add grafana https://grafana.github.io/helm-charts
$ helm repo update
$ helm upgrade --install loki grafana/loki-stack --create-namespace --namespace=loki --set grafana.enabled=true,grafana.service.type=LoadBalancer,loki.config.table_manager.retention_deletes_enabled=true,loki.config.table_manager.retention_period=336h,loki.persistence.enabled=true,loki.persistence.size=5Gi
```
* loki namespace를 생성
* 상용에 사용할 수 있도록 데이터를 persist 한다. 
* Grafana를 외부로 노출한다 
* 최근 2주동안의 로그를 저장하고 오래된 순서대로 삭제

## Loki 확인
접속 주소를 확인
```bash
$ kubectl get svc -n loki
```

Grafana의 admin password를 확인한다. 
```bash
$ kubectl get secret --namespace loki loki-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
```

login ID는 admin 이고 password는 위에서 얻은 값이다. 

결국 Grafana를 통해 서비스 되고 Explore tab 에서 Loki를 선택하여 Kubernetes의 모든 log를 확인할 수 있다. 

실제 화면은 아래와 같다. 
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pplpejqdqebu531yviys.png)
Digital Marketing - Difference Between Search Engine Optimization(SEO) and Search Engine Marketing(SEM)
Tags: seo, marketing
Published: 2022-02-21 04:44:09


The concept of digital marketing, also known as online marketing, is the use of the internet and other forms of digital communication to promote brands to potential customers. As a form of marketing, this includes not only email, social media, and web-based advertising, but also text messages and multimedia messages.

Digital marketing is, essentially, any marketing campaign that uses digital communication.

It is easy to find a [Digital Marketing Agency in Dubai UAE](https://kbamena.com/) that provides all aspects of digital marketing

## Search Engine Optimization(SEO)

In its simplest form, search engine optimization is a marketing tool rather than a marketing method in its own right. In their definition, it's described as "the art and science of making web pages search engine-friendly."

Researching and weighing different contributing factors to achieve the highest ranking is what makes SEO a science. There are a lot of [Digital Marketing Agencies in Dubai UAE](https://kbamena.com/) that provide great [SEO services in the UAE](https://kbamena.com/seo-agency-in-dubai/)
The factors that contribute to achieving the highest ranking. A web page's optimization should include considering the following elements:

-Quality of Content
-Mobile Friendliness
-Backlink Building
 
Ranking highly in SEO isn't quantified or governed by a consistent rule. It is impossible to make exact predictions about Google's algorithm since it changes almost constantly. Keeping a close eye on your page's performance will help you adjust it when necessary.
 

## Search Engine Marketing / PPC Ads Google Ads

PPC, or pay-per-click, refers to posting an ad on a platform and paying every time someone clicks on it.

People see your ad differently depending on when and how they see it. Search engines fill available spots on their SERPs with what is essentially an instant auction when a spot becomes available. Several factors determine which ads are prioritized by an algorithm, including:
-Ad Quality
-Bid Amount
-Landing Page Quality
-Keyword Relevance
Each PPC campaign has 1 or more target actions that viewers are meant to complete after clicking an ad. These actions are known as conversions, and they can be transactional or non-transactional. Making a purchase is a conversion, but so is signing up for a newsletter or calling the office.
Whatever you choose as your target conversions, you can track them via your chosen platform to see how your campaign is doing. There are a lot of [Digital Marketing Agencies in Dubai UAE](https://kbamena.com/) that provide great [PPC Google Ads services in Dubai UAE](https://kbamena.com/google-ads-ppc-services-in-uae/
).
Kubernetes 의 Resources 설정을 위한 VPA 및 Goldilocks
Tags: kubernetes, autoscale, vpa, goldilocks
Published: 2022-02-21 04:41:57

## Kubernetes (AWS EKS) 의 Autoscaler
Kubernetes 의 Autoscaler 를 사용하기 위해서는 우선 
1. Deployment 의 Resource request, limit을 모두 설정해야 한다. 
2. Horizontal Pod Autoscaler (HPA) 를 설정한다.
3. AWS 의 Cluster Autoscaler (CA) 를 설정한다. 

여기서 Resource의 request, limit 설정을 위해 [Vertical Pod Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler) 및 [Goldilocks](https://goldilocks.docs.fairwinds.com/#how-can-this-help-with-my-resource-settings)를 활용하고 이를 통해 request, limit 을 설정하는데 참고 할 수 있다. 

---
## VPA 및 Goldilocks의 역할
사실 [VPA](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler)는 Kubernetes 의 Autoscaler 중 하나로 Horizontal 하게 Pod/ Node를 늘리는 HPA와 달리 Vertical 하게 스펙을 높이는 방법이다. 그런데 VPA controller stack은 recommendation engine 을 포함하고 있고, 가이드라인을 제공하기 위해 현재 resource 사용량을 계속 수집한다. 결국 보통 실제 VPA를 사용한 Autoscale을 사용 하지는 않고, recommendation engine 만 사용하도록 설정하여 request, limit을 정하고 HPA, CA를 통해 Autoscale을 한다. 

여기서 [Goldilocks](https://goldilocks.docs.fairwinds.com/#how-can-this-help-with-my-resource-settings) 의 역할은 불편하게 `kubectl` 을 통해 필요한 서비스의 VPA recommendation 을 확인하는 대신 쉽게 Web UI를 통해 이를 확인 할 수 있게 도와준다. 

---
## Kube Metrics Server 설치
우선 지표 수집을 위해 Kubernetes 의 metrics-server를 설치해야 한다. 
```bash
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
```
제대로 적용되었는지 확인한다. 
```bash
kubectl get deployment metrics-server -n kube-system
```

---
## VPA 및 Goldilocks 설치
우리는 full VPA install 이 필요하지 않고 recommender 만 필요하다. 아래와 같이 설치하면 VPA recommender와 Goldilocks를 설치한다. 
```bash
$ helm repo add fairwinds-stable https://charts.fairwinds.com/stable
$ helm install --set updater.enabled=false vpa fairwinds-stable/vpa --namespace vpa --create-namespace
$ helm install goldilocks fairwinds-stable/goldilocks --namespace goldilocks --create-namespace 
```
> Goldilocks 의 chart를 통해 VPA를 설치하면 쉽게 원하는 recommendation engine 만을 설치할 수 있다. https://github.com/FairwindsOps/charts/tree/master/stable/vpa#components 참고

VPA recommender를 사용할 namespace를 지정한다. 
```bash
$ kubectl label ns default goldilocks.fairwinds.com/enabled=true
```

## Goldilocks 확인
kubernetes port forwarding 을 통해 Goldilocks 에 접속한다.
```bash
$ kubectl -n goldilocks port-forward svc/goldilocks-dashboard 8080:80
```
> kubernetes port forwarding을 remote 에서 하는 경우 localhost를 통해 Goldilocks를 접근하기 위해 local 에서 Local Port Forwarding을 해야한다. 
```bash
ssh -L 8080:127.0.0.1:8080 ec2-~~.compute.amazonaws.com
```

http://localhost:8080 을 열어본다. 

> 서비스가 배포되지 않은 상황에서는 아무것도 없을것이다. 서비스를 올리고 사용하면서 확인하면 각 서비스의 설정과 recommendation 을 확인할 수 있다. 
하지만... 실제 사용해본 결과 참고는 할 수 있지만 이 수치가 절대적인 값이 될 수는 없다. Language와 서비스의 성격에 따라 실제 운영하면서 맞추어 나가는 방법이 좋은거 같다.
Work with Excel WorkSheets
Published: 2022-02-21 04:35:58

---
canonical_url: https://ironsoftware.com/csharp/excel/examples/excel-worksheets/
---

An `IronXL.WorkBook` represents and entire Excel (XLSX or XLS) file.

An `IronXL.WorkSheet` represents one page or tab within that file.

**C#:**
```
using IronXL;
 
//This is how we create new worksheet
WorkBook workBook = WorkBook.Load("test.xlsx");
 
//This is how we create new worksheet
var newSheet = workBook.CreateWorkSheet("new_sheet");
//You can perform any operations you want with the new sheet.
newSheet["B2"].Value = DateTime.Now;
 
 
// Work with an existing Worksheets 
WorkSheet oldSheet = workbook.GetWorkSheet("sheet1");
//...
 
// Work with the first Worksheet
WorkSheet firstSheet = workbook.DefaultWorkSheet;
//...
 
 
//Save in Excel format or export to many other file formats
workBook.SaveAs("test.xlsx");
```

**VB:**
```
Imports IronXL
 
'This is how we create new worksheet
Private workBook As WorkBook = WorkBook.Load("test.xlsx")
 
'This is how we create new worksheet
Private newSheet = workBook.CreateWorkSheet("new_sheet")
'You can perform any operations you want with the new sheet.
Private newSheet("B2").Value = DateTime.Now
 
 
' Work with an existing Worksheets 
Private oldSheet As WorkSheet = workbook.GetWorkSheet("sheet1")
'...
 
' Work with the first Worksheet
Private firstSheet As WorkSheet = workbook.DefaultWorkSheet
'...
 
 
'Save in Excel format or export to many other file formats
workBook.SaveAs("test.xlsx")
```
AWS EKS에 Istio 설치 및 설정
Tags: aws, kubernetes, istio
Published: 2022-02-21 04:34:38

Istio를 설치하는 방법은 istioctl, helm, Istio Operator 등 다양한 방법이 있다. 이 중 현재 운영환경에서 권장되는 방법은 모든 configuration을 [IstioOperator CR](https://istio.io/latest/docs/reference/config/istio.operator.v1alpha1/) 로 작성하여 이를 `istioctl install` command 로 적용하는 방법이다. 

## istioctl 설치
우선 최신버전의 `istioctl`을 다운로드 받고 path 에 넣어준다.
```bash
$ curl -sL https://istio.io/downloadIstioctl | sh -
$ cp ~/.istioctl/bin/istioctl ~/bin
```

> 만약 특정 버전의 Istio 를 다운로드 받고 싶다면
```bash
$ curl -sL https://istio.io/downloadIstioctl | ISTIO_VERSION=1.10.3 TARGET_ARCH=x86_64 sh -
```

---
## Istio 설치
이제 아래와 같이 `istio-operator.yaml` 파일을 생성한다. 
```yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  namespace: istio-system
  name: istiocontrolplane
spec:
  profile: default
  components:
    egressGateways:
    - name: istio-egressgateway
      enabled: true
      k8s:
        hpaSpec:
          minReplicas: 2
    ingressGateways:
    - name: istio-ingressgateway
      enabled: true
      k8s:
        hpaSpec:
          minReplicas: 2
    pilot:
      enabled: true
      k8s:
        hpaSpec:
          minReplicas: 2
  meshConfig:
    enableTracing: true
    defaultConfig:
      holdApplicationUntilProxyStarts: true
    accessLogFile: /dev/stdout
    outboundTrafficPolicy:
      mode: REGISTRY_ONLY
```
* 가장 기본적인 `default` profile 을 사용한다. 
* 모든 component의 `minReplicas`를 2로 설정하여 HA를 보장하고 `PodDisruptionBudget` 으로 인해 istio 버전 upgrade 가 실패하는걸 막는다
* `enableTracing` 을 설정하여 추후에 Datadog 이나 Jaeger 를 통해 distributed tracing 이 가능하게 한다.
* `holdApplicationUntilProxyStarts` 설정으로 istio-proxy 가 완전히 올라오면 서비스가 되게 한다. (Java 같은 경우는 서비스가 올라가는게 한참 걸려서 상관없지만 Go, Python 같은 경우 먼저 올라가서 서비스가 가능한 상태가 먼저 되고 request를 받으려고 하지만 istio-proxy가 준비되지 않아 request가 실패하는 경우가 있다. 물론 deployment 의 readiness/liveness 설정으로 대부분 istio-proxy 가 먼저 뜨지만 로컬에서 개발할때는 빠르게 테스트 하기 위해 readiness/liveness 없이 하기도 한다)
* `accessLogFile` 설정으로 Envoy proxy 의 access log를 콘솔로 남긴다.
* `outboundTrafficPolicy` 설정을 REGISTRY_ONLY 로 하여 오직 `ServiceEntry` 를 통해 허가된 IP/Domain 만 outbound를 허용한다. (이 설정은 개발중에 좀 성가실 수 있다... 하지만 개발을 완료한 후에 적용하려 하면 더욱 힘들고 결국 해당 설정 없이 서비스 하게 되는 경우도 있다) 이를 통해 더욱 secure 한 서비스를 만들 수 있다. (default 설정은 ALLOW_ANY 이다)

아래와 같이 kubernetes 에 istio를 deploy 한다.
```bash
$ istioctl install -f istio-operator.yaml
```

이제 Kubernetes 에 Istio 가 배포 되었다. 아래와 같이 확인한다. 
```bash
$ kubectl get pods -n istio-system
```

---
## Namespace lable 을 통한 auto injection 설정
마지막으로 원하는 namespace, 보통 `default` namespace 에 아래와 같이 label을 추가해서 Istio 가 자동으로 application 을 배포할 때 Envoy sidecar proxy를 주입하도록 설정한다. 
```bash
$ kubectl label namespace default istio-injection=enabled
```

---

이제 `default` namespace 에 배포하는 서비스에는 `istio-proxy`가 sidecar 로 같이 올라가서 traffic management, security 등 다양한 Istio 의 기능을 사용할 수 있게 되었다.
Using Iron Barcode License Keys
Published: 2022-02-21 04:33:15

---
canonical_url: https://ironsoftware.com/csharp/barcode/docs/license/license-keys/
---

## Get Your License Key

IronBarcode license keys allow you to deploy your project live without any watermark.

[Licenses](https://ironsoftware.com/csharp/barcode/licensing/) start at just $499 and include one free year of support and updates.

You can also try IronBarcode free for 30 days with a [trial license key](https://ironsoftware.com/csharp/barcode/docs/license/license-keys/#trial-license).

## Step 1: Download the Latest Version of IronBarcode

### Install via NuGet

Before we start we need to install the latest version of the Barcode Nuget Package.

`PM > Install-Package Barcode`

[https://www.nuget.org/packages/BarCode/](https://www.nuget.org/packages/BarCode/)

### Install via DLL

As an alternative, the [IronBarCode.Dll can be downloaded](https://ironsoftware.com/csharp/barcode/packages/IronBarCode.zip) and added to your project as a reference from [.Net Barcode DLL].

---

## Step 2: Apply Your License Key

### Set your license using code

Add this code to the startup of your application, before IronBarcode is used.

**C#:**
```
IronBarCode.License.LicenseKey = "IRONBARCODE-MYLICENSE-KEY-1EF01";
```

**VB:**
```
IronBarCode.License.LicenseKey = "IRONBARCODE-MYLICENSE-KEY-1EF01"
```

---

### Set your license using Web.Config or App.Config

To apply a key globally to your application using Web.Config or App.Config, add the following key to your config file in appSettings.

```html
<configuration>
   ....
   <appSettings>
      <add key="IronBarCode.LicenseKey" value="IRONBARCODE-MYLICENSE-KEY-1EF01"/>
   </appSettings>
   ....
</configuration>
```

---

### Set your license key using a .Net Core appsettings.json file

To apply a key globally to your application to a .Net Core:

- Add a JSON file to your project called appsettings.json in the root directory of your project
- Add a 'IronBarCode.LicenseKey' key to your JSON config file. The value should be your license key.
- Ensure that the file properties include Copy to Output Directory: Copy always

File: _appsettings.json_

```json
{

     "IronBarCode.LicenseKey":"IRONBARCODE-MYLICENSE-KEY-1EF01"

}  
```

---

## Step 3: Test your key

Test if your key has been installed correctly.

**C#:**
```
bool result = IronBarCode.License.IsValidLicense("IRONBARCODE-MYLICENSE-KEY-1EF01");
```

**VB:**
```
Dim result As Boolean = IronBarCode.License.IsValidLicense("IRONBARCODE-MYLICENSE-KEY-1EF01")
```

---

## Step 4: Get started with your project

Follow our tutorial on how to [Get Started with IronBarcode.](https://ironsoftware.com/csharp/barcode/docs/)

---

## Questions?

If you have any questions, reach out to [developers@ironsoftware.com](developers@ironsoftware.com)
Tesseract 5 for .NET
Published: 2022-02-21 04:20:23

---
canonical_url: https://ironsoftware.com/csharp/ocr/examples/csharp-tesseract-5/
---

IronOCR is the only known .Net library for Tesseract 5 OCR. It is also the most advanced Tesseract 5 library known in ANY language at time of writing.

IronOCR Supports Tesseract 3, Tesseract 4 and Tesseract 5 for .Net Framework, Standard, Core, Xamarin and Mono.

You can download a file project from this [link](https://ironsoftware.com/csharp/ocr/downloads/csharp-ocr-tesseract-5.zip).

**C#:**
```
using IronOcr;
//..
var Ocr = new IronTesseract();
Ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
// This is default
using (var Input = new OcrInput(@"images\image.png"))
{
    var Result = Ocr.Read(Input);
    Console.WriteLine(Result.Text);
}
```

**VB:**
```
Imports IronOcr
'..
Private Ocr = New IronTesseract()
Ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5
' This is default
Using Input = New OcrInput("images\image.png")
	Dim Result = Ocr.Read(Input)
	Console.WriteLine(Result.Text)
End Using
```
Update Excel Database Records (Code Example)
Published: 2022-02-21 04:17:47

---
canonical_url: https://ironsoftware.com/csharp/excel/examples/excel-update-database-records
---

Converting Excel `WorkBook.ToDataSet()` allows .Net developers to first manipulate the dataset, and then use it to update SQL records very easily using `System.Data`.

**C#:**
```
using System.Data;
using System.Data.SqlClient;
using IronXL;
 
WorkBook wb = WorkBook.Load("test.xlsx");
DataSet dataSet = wb.ToDataSet();
//Your sql query
string sql = "SELECT * FROM Users";
//Your connection string
string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    //Open connections to the database
    connection.Open();
    SqlDataAdapter adapter = new SqlDataAdapter(sql, connection);
 
    //Important - you can (and probably should) modify / crop the data in the dataset here to match the shape of your SQL query
 
    //Update the values in database using the values in Excel
    adapter.Update(dataSet);
}
```

**VB:**
```
Imports System.Data
Imports System.Data.SqlClient
Imports IronXL
 
Private wb As WorkBook = WorkBook.Load("test.xlsx")
Private dataSet As DataSet = wb.ToDataSet()
'Your sql query
Private sql As String = "SELECT * FROM Users"
'Your connection string
Private connectionString As String = "Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True"
Using connection As New SqlConnection(connectionString)
	'Open connections to the database
	connection.Open()
	Dim adapter As New SqlDataAdapter(sql, connection)
 
	'Important - you can (and probably should) modify / crop the data in the dataset here to match the shape of your SQL query
 
	'Update the values in database using the values in Excel
	adapter.Update(dataSet)
End Using
```
寫給想跳坑的 JS 新手(Part I): map filter reduce
Tags: javascript, functional, ramda, beginners
Published: 2022-02-21 04:00:46

# 楔子
身邊有些朋友有不少會想試著寫寫程式，常常坊間書翻一翻看到物件的東西，很快的就把書放下了，慢慢的也就失去興趣了。

但其實怎讓這些朋友開始可以有些動手做也能跑出一些結果，那種成就感會讓人慢慢的親近寫程式(coding)，不可否認物件導向語言統治了軟體界，但光要先學會這個觀念可能就讓人却步了。

以前有部電影「張三峰」有句台詞，怎「張無忌」問，怎學會這部武功?「張三峰」說:「忘掉就好了」。

其實函數式語言的「入門」蠻簡單的，就像小時候的數學，函數吃一些變數，跑出來一個結果，用這個方式寫寫東西就可以做一些小實務的作品，也很有成就感。

就讓我們試試吧..

# Declarative 宣告式 vs. Imperative 命令式
命令式(Imperative)白話文就是要用電腦的角度去思考，怎把答案做出來。

如果相要把一連串的資料去掉一些特定值(前提條件就要知道何謂 for-loop)，示範的程式碼大概會長成下面的樣子

```
function filter(array) {
  let newArray = []
  for (let index = 0; index < array.length; index++) {
    const element = array[index]
    if (element !== null && element !== undefined) {
      newArray[newArray.length] = element
    }
  }
  return newArray
}
// use case:
filter([0, 1, undefined, 2, null, 3, 'four', ''])
// [0, 1, 2, 3, 'four', '']
```

但如果是所謂的宣告(Declarative)式，就是使用 filter 函數(知道 map/filter/reduce..)，知道 filter 是吃一個「判斷(predicate)」的方法，細部的執行不太需要去了解，程式碼大概就會長的像下面的例子

```
function predicate(element) {
  // 判斷示 回傳 true or false
  return (element !== 3)
}

[0,1,2,3,4,5].filter(predicate)
// [0,1,2,4,5]
```

也可以用 map 來解決這個問題，map 的觀念就是每個東西拿出來檢查，檢查完再放回去(要看做記號或處理之類的)，map 也是吃一個函數(要做的事)，比較特別的是當條件 3 時要回傳 0，它不像 filter 是過濾完的結果，map 是檢查完都有回傳值。

```
function predicate(element) {
  // 判斷示 要做什事 要回傳什麼
  if(element !== 3) {
    return element
  } else { 
    return 0
  }
}

[0,1,2,3,4,5].map(predicate)
// [0,1,2,0,4,5]
```

那如果想要把所有的資料加總呢?就使用 reduce，這個方法有點像捍麵一樣，隨著每個數值桿，再和前面上次「桿完」的數值做處理。

```
// 0 為初始值，acc 為上次運算的結果，cur 為這次的運算值
[1,2,3,4].reduce((acc, cur) => {
  return acc + cur
}, 0)
// 10
```

上面的三種方式可以用一張圖來表示

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d1lu2b5k4k9pd9oq93z6.jpeg)
Laravel 8 Authentication using Jetstream Example
Tags: laravel, laravel8, authentication, jetstream
Published: 2022-02-21 03:40:01

In this example, we will discuss laravel 8 authentication using jetstream example. In this post, I will give you a simple and easy example of laravel 8 authentication using the jetstream example. You can see Laravel 8 Jetstream auth with Livewire.

In laravel 8 jetstream auth with livewire or laravel 8 jetstream auth with inertia you can get a built-in email verification system also get auth routes and a customized login system.

It's very amazing features in laravel 8. Laravel 8 has totally changed with the authentication scaffolding. Laravel jetstream is a beautifully designed application scaffolding for laravel.

It provides many built-in functionalities includes login, registration, email verification, two-factor authentication, session management, API support via laravel sanctum, and optional team management.

Laravel Jetstream is designed using Tailwind CSS with different choices of Livewire or Inertia. So in this example, we will perform Laravel 8 Auth using Livewire.

![Laravel 8 Authentication using Jetstream Example Login Page](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ofdjfx80dn28du75qvhg.png)

```
Step 1 : Install Laravel 8

Step 2 : Install Jetstream

Step 3 : Create Auth with Livewire

Step 4 : Install NPM

```

---

> **_[Read More : Laravel 8 Authentication using Jetstream Example](https://techsolutionstuff.com/post/laravel-8-authentication-using-jetstream-example)_**