ToCode
Ir al canal en Telegram
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Mostrar mรกs1 420
Suscriptores
Sin datos24 horas
+27 dรญas
-230 dรญas
Archivo de publicaciones
1 420
# ืืืงืจ ืืื ืืืขืชืืง ืืช ื package.json ืืคื ื ืื ืืฉืืจ?
ืืืื ืฉืงืืืฅ Dockerfile ืื "ืืชืืจ" ืืช ืืกืืืื ืฉืื ืื ื ืืื ืื ืืื ืืื ืืืืื ืืืฉ ืืชืืื ืืื ืืืช ืืกืืืื, ืฉืื ืืืื ืงืื ืื ืืงืืืฅ ืืืืืื ืืืฉืคืืข ืขื ืชืืืื ืืขืืืื ืืคืืื ืฉืืกืืืื ืฉืชืืืืฆืจ ืชืืื ืืื. ืงืื ืืืืืื ืืช ืงืืืฅ ื Dockerfile ืืื:
FROM node:16
WORKDIR /app
COPY app /app
RUN npm install
CMD ["node", "main.js"]
ืื ื ืจืื ืคืฉืื ื ืืื? ืืื ืืขืชืืง ืืช ืืืืฉืื ืืชืืงืืืช ืืืขื, ืืคืขืื npm install ืืืืืืจ ืืช ืคืงืืืช ืืืคืขืื. ืืื ืืืืช ืขืืื ืืืคื, ืขื ืืขืื ืงืื ื - ืื ืคืขื ืฉืืฉื ืื ืงืืืฅ ืงืื ืืืืฉืื ืืืื ืื ืืืืฉ ืืช ืืืืื', ืืืงืจ ืฆืจืื ืืืคืขืื ืืืืฉ npm install ืืืืชืงืื ืืืืฉ ืืช ืื ืืชืืืืืช.
ืื ืืชื ืืื ืื ืืช ืืืืื' ืฉืื ืืฉืื ืขื ืืืชื ืืืฉื, ืฉืื ืื ืงืื ืืืืงืจืคืืื ืืืื ืืขืฉืืช ืืืื ืืืื. ืื ืืงืื ืืืชืืงื:
FROM node:16
WORKDIR /app
COPY app/package.json /app
RUN npm install
COPY app /app
CMD ["node", "main.js"]
ืืงืื ืืืชืืงื ืืคืจืื ืืื ืืฆืขื ืฉื ืืชืงื ืช ืืชืืืืืช ืืฆืขื ืฉื ืืขืชืงืช ืืืืฉืื, ืืืชืืื ืืช ืืขืืืื ืืืชืงื ืช ืืชืืืืืช ืืืืจ ืืื ืืฆืขื ืืืืชืจ ืืจืื. ืืืื ืฉืืขืชืงืช ืืืืฉืื ืงืืจืืช ืืืจื ืืชืงื ืช ืืชืืืืืช, ืื ื ืฉื ื ืืช ืืงืื ืืงืืฆืื ืืชืื ืชืืงืืืช app ืื ืื ื ืืืืฉ ืืืงืจ ืื ืืฆืืจื ืืืชืงืื ืืืืฉ ืืช ืืชืืืืืช. ืืื ืืืื ืืืฉืชืืฉ ืืฉืืื ืฉืืื ืืืจ ืื ื ืืืจื ืืชืงื ืช ืืชืืืืืช ืืืืืฉืื ืจืง ืืช ืคืงืืืช ื COPY app /app ืืืืชื ื ืงืืื.
ืืืงืจื ืืื ืฉืื ืื ืกืืจ ืืฉืืจืืช ืืืืืจืช ืฉืืืืช ื ืืื ื ืื ืืฉืคืืขื ืขื ืืชืืฆืื ืืกืืคืืช, ืืื ืืืคืืช ืืช ืชืืืื ืืคืืชืื ืฉืื ื ืืืืืจ ืืืชืจ.1 420
# ืืืค ืืืืื - ืฉืืื ืื ืืืืจืกืืืช
ืกืื ืืื ืืื ืคืืชืื ืฉื AWS ืฉืขืืืจ ืืืชืื ืงืื ืืงืืื, ืืืืืง ืืงืืืืช ืืืง ืืืืืจืื, ืืืฆืืจ ืืช ืื ืืชืฉืชืืช ืืชืืจ ืงืื (ืงืืฆื yaml) ืืืืขืืืช ื AWS ืืช ืื ืืขืืืื ืฉืืื. ืืืืื ืืืืช ืืืื ืืื ืืื ืืฉ ืื ืื ืืจืื ืืืืื ืืืื ืื ืืขืืื ืฉื AWS ืฆืจืื ืืืขืช ืืขืืื ืืืชื.
ืืกืืคืืจ ืืืื ืืื ืขื ืืื ืืืืืื ืฉื ืกืื ืฉืืืขื ืขืื ืื ืืฉืขืชืืื ืืืืืืืืช, ืืืืืืจ ืื ืืช ืืืช ืืืขืืืช ืืขืืืื ืขื requirements.txt.
## ืื ืืืื ืืืฉืชืืฉ
ืงืืืฅ requirements.txt ืืืคืฉืจ ืื ื ืืืืืืจ ืืช ืืกืคืจืืืช ืฉืชืืื ืืช ืืคืืืชืื ืฉืื ื ืฆืจืืื, ืืืขืืจืช ืคืงืืืช:
$ pip install -r requirementst.txt
ืื ืื ื ืืชืงืื ืื ืืช ืื ืืกืคืจืืืช ืืืืจืกืืืช ืฉืืืงืฉื ื.
ืื ืฉื ืืืื ืืฉืืื ืืื ืฉืคืืืชืื ืื ืืืืง ืืขืืื ืฉื ืืชืืื ืืช ืฉืืืืจืกืืืช ืฉื ืืกืคืจืืืช ืฉืืฉ ืื ืืชืืืืืช ืืื ืฉืืืงืฉืชื ื requirements.txt.
ืชืืืืจืืืช ืื ืื ืกืื ืืขืฉืืช import ืืืืืื ืฉืฆืจืืื ืืชืงื ื ืืืืืืื ืืืชืงื ื, ืื ืืื ืื ืจืื ืืืชืงื ื ืืืืืจืกื ืฉืืืงืฉืชื. ืื ืืื ืื ืืืชืงื ื ืืืื ืื ื import ืืืืฉื. ืืืฆื ืืฉืืืฉื ืืื ืืืขืืืชื - ืื ืื ืื ืฉืืจืืฅ ืืช ืืกืงืจืืคื ืืื Docker Image ืฉืืืจ ืืืชืงื ืืช ืื ืืืืืืช ืืกืืืืืช ืืืืจืกืืืช ืืกืืืืืช, ืืืืงืจื ืืืืืื ืฉืจืฆืืชื ืืืจ ืืืชืงื ืช ืืืืจืกื ืืฉื ื ืืืชืจ?
## ืืืื ืฉื ืกืื
ืืคืงืืื:
sam init --runtime python3.9 --name location-demo
ืืืฆืจืช ืคืจืืืงื Sam ืืงืืื ืืืฉ ืขืืืจ ืคืืืชืื. ืชืื ืืช ื Quickstart ืฉืืื ืืืฆืจืช ืงืืืฅ ืืฉื requirements.txt ืืืคืงืืื:
sam local start-api
ืืคืขืืื ืฉืจืช ืืงืืื ืฉืืคืขืื ืืช ืชืืื ืืช ืืคืืืชืื ืืืืืืจ ืชืฉืืื. ืืื ืืฃ ืืื ืืืฆืขืืื ืืืื ืื ืืชืงืื ืืช ืืืืืืืช ื requirements.txt. ืืฉืืื ืืืชืงืื ืืช ืืืืืืืช ืืฉ ืืืคืขืื:
sam build
ืืืชืืจ ืืื ืฉืืืืืืช ืืกืืืืืช ืืืจ ืืืชืงื ืืช ืืชืื ื Image ืฉืกืื ืืจืืฅ, ืืืื ืื ืื ืื ืชืคืขืืื build ืขืืืื ืชืงืืื ืืืืืื ืืช ืืืืืช boto3 ืฉืืืชื ืืคืฉืจ ืืคื ืืช ื AWS, ืืื ืืืืจืกื ืืฉื ื ืฉืืคืขืืื ืืืืืจื ืืืืข ืืืงื (ืืื ืืืืขืืช ืฉืืืื, ืื ืฆืจืื ืืืชื).
ืืืชืืจ ืืฉื ื ืืื ืฉืขื ืฉืื ืืคืขืืชื build ืืชื ืขืืืืื ืขื ืืืืื' ืืืืคืืืื ืืื ืกืื ืืืื ืฉืื ืืืื ืืงืื ืืืื ืืชื ืืงืืืื ืขื ืืฉืจืช ืืช ืืืืจืกื ืืขืืื ืืช ืืืืชืจ (Hot Reloading). ืืจืืข ืฉืืคืขืืชื build ืคืขื ืืืช ืืืืื ืฉืื ืืืื ืืืืืืื ืืคืกืืง ืืขืืื ืืชืฆืืจืื ืืืคืขืื build ืืืจื ืื ืฉืื ืื ืืงืื.
## ืืื ืืื ืืืช ืจืืืื ืืช ืื
ืืืืช ืฉืืืฉื ืืจืืฉืื ืฉืื ืืฉืจืืืชื ืืช ืืืืืข ืืืืงื ืืื ืืืืขืืช ืฉืืืื ืืื ืืขืืืช ืืืจืกืืืช, ืืืื ืืืืช ืืืชื ืืืกืคืชื ืืงืื ืืคืืืชืื ืฉืื ืืช ืืืืืง:
import boto3
if boto3.__version__ != "1.26.82":
raise Exception(f"Incorrect Boto Version {boto3.__version__}")
ืืืฆืคืื ืืชืืื ืืช ืืชืจืกืงื ืขื ืืืืขืช ืฉืืืื ืืคืืจืฉืช.1 420
# ืชื ื ืฆ'ืื ืก ืื ืืื - ืืจืืข ืชืืื ืืช ืืืืืช ืฉื Nomad
ืืืฉืืงืืจืค ื ืืกืื ื 2012 ืืฉืืืฉ ืฉื ืื ืืืืืจ ืืืชืจ ื 2015 ืืืฆืืื ืืช ืืื ื ืืืื ืืงืื ืืืื ืจืื ืฉืื ืฉื ืงืจื Nomad. ืงืืืจื ืืืก ืืื ืื ืื ืฉื ื ืืื ืืืจ ืืฉืื ืืืืื ืืฉืืง, ืืื ืืกืฃ ื ืื ื ืืืืืืื ืฉื ืืืื ืื ืฉืืกืืืื ืฉื ื ืืื ืืืืชืืืื ืืื ื ืืื.
ืืื ืืืจืืช ืฉื ืืื ืื ื ืืฆื ืืชืืจืืช ืืคืืคืืืจืืืช, ืืื ืขืืืื ืืื, ืืชืืืืง ืื ืืฆื ืืฉืืืืฉ ืืขืืื ืืืืืชื. ืืื ืืชื ืขืืืื ืื "ื ืขืืืื" ืขื ืงืืืจื ืืืก, ืื ื ืฉืืืฉ ืกืืืืช ืืืืื ืฉืืื ืืคืืืช ืืืืื ืืช ืื ืืื-
1. ืงืืืช ืืชืงื ื - ืืฉืืื ืืืงืื ืงืืืกืืจ ืฉื ื ืืืืื ืื ืื ืฉืฆืจืื ืื ืืืืจืื ืงืืืฅ ืืื ืืจื ืืื ืืืืฉื (ืืชืืื ื ืืืื ื ืืืง, ืืืื ืืช ืืืื ืืงืก). ืืคืขืื ืฉื ืืืชื Agent ืืืคืืช ืืช ืืืืื ื ืฉืืื ืืฉืจืช Nomad. ืืฉืชืคืขืืื ืืช ื Agent ืขื ืืืฉื ื ืืกืฃ ืชืืืื ืืชืช ืื ืืช ืืชืืืช ื IP ืฉื ืืืืฉื ืืจืืฉืื ืืืฉ ืืื ืงืืืกืืจ. ื ืืื ืื ืืจืจื ืืืคืฉืจ ืืืคืขืื Agent-ืื ืฉืื ืขื ืื ืืืจ. ื Agent ืืืืืืืืช ืกืืจืง ืืช ืืืืื ื ืืืฆืจืฃ ืืืชื ืืงืืืกืืจ ืขื ืืืืืืืช ืฉืืื ืืืื.
2. ืืืืื ื ืืกืคืช ืืื ืืืฆืืจืช ืืืืฉืืช - ืงืืืจื ืืืก ืจืืฆื ืฉืืืื ืืืื ืขื ืืงืืืกืืจ ืืืืืื ืืช ืฉืื, ืืืืื ืืืจืืฅ ืจืง ืงืื ืืืื ืจืื. ื ืืื ืืื ืืืจ ืืจืื ืืืชืจ ืืืืฉ. ืืฉ ืื ืงืืืฅ ืืื ืืจื ืืืคืขืื? ืงืืืืช. ืชืืื ืืช Java? ืืกืคืืง ืืื. ืงืื ืืืื ืจ? ืืืืื. ืืื ืืฆืืื ืืืคืขืื ืื ืืืจ ืื ืื ืืืื ื ืฉืืชืืืจืช ืืงืืืกืืจ ืืืืืืช ืขื ืืืืืืืช ืฉืื, ืืืฉื ืื ืืฉ ืื ืืืงืจ ืืืชืงื ืื ืื ืืื ืืืืื ืืืจืืฅ ืงืืฆื exe ืื ืื ืืืชืงื ืขืืื Java, ืืื ืืฉืืงืืืกืืจ ืฆืจืื ืืืจืืฅ ืืฉืืื ืืื ืืืคืฉ ืืืื ืืืื ื ืืื ืชืชืืื ืืืจืฆื ืืคื ืืืืืืฆืื ืืืชื ืื ืืช ืืืฉืืื. ืืืืื ื ืืกืคืช ืืื ื Storage: ื ืืื ืืืื ืืืชืืืจ ืืื ืืชืงื ืืืืกืื ืฉืืฉ ืืื, ืืื ืื ืื ืืื ื ืืงืืื, ืชืืงืืืช ืจืฉืช ืื ืืืืกืื ืืขื ื ืืืืืจ ืืืชื ืืงืื ืืืื ืจืื.
3. ืคืืฆ'ืจืื ืงืื ืื ืฉืขืืฉืื ืืช ืืืืื - ื ืืื ืืื ืื ืืช ืื ืืคืืฆ'ืจืื ืืืกืืืืื ืฉื ืงืืืจื ืืืก, ืืื ืืคืื ืืงืื ืงืื ืื ื ืืื ืืฆืืืื. ืืืืืื ืืคืงืืื
nomad plan ืชืงืื ืงืืืฅ ืื ืืคืกื (ืื ื ืงืจื Job Specification ืฉื) ืืชืืื ืืื ืืืืืง ืืืฆืืจื ืืคืืจืืช ืื ืืื ืืืื ืืขืฉืืช ืืฉืชื ืกื ืืืจืืฅ ืืช ืื'ืื ืืื, ืืืืืื ืชืืื ืืขืืืช ืืคื ื ืฉืื ืงืืจืืช. ืื ืืชืืืื ื Canary Updates ืฉืืขืืจืช ืฉืืจืช ืืืืจื ืืืช ื ืืื ืืจืืฅ ืืช ืืืขืจืืช ืฉืืื ืืืืื ื ืืืฉื ืืชืืจ ืงื ืจืืช ืืจืง ืื ืืื ืขืืชื ืืื ืฉืฆืจืื ืืื ืืฉืืจื ืืช ืื ืืืืื ืืช ืืงืืืืืช.
4. ืืื ืืืจืฆืื ืขื ืฉืืจ ืืืืื ืฉื HashiCorp - ืืืงืื ืืืื ืืก ืืช ืืื ืืืื ืืื ืืืฉืืงืืจืค ืืฆืจื ืืืกืฃ ืืืื ืขืฆืืืืื ืฉืืืืืื ืืขืืื ืืื ืืชืืจ ืืืคืื ืื. ืืืืืื Terraform ืืืืข ืืื ืืช ืืจืืืืงืืืจืช ืจืฉืช ืขื ืื ืขื ื ืฉืชืชื ื ืื (ืืื ืืืื ืงื ืืืชืงืื ืืช ื ืืื ืขื ืื ืขื ื ืืืขืืืจ ืืงืืืช ืืื ืขื ื ืื), Vault ืืืืข ืื ืื ืกืืืืช ืืืื ืงืืืกืืจืื ืฉื ื ืืื ืืฉืชืืฉื ืื ืืื ืืืืจืืง ืกืืืืช ืืงืื ืืืื ืจืื ื Consul ืื ืื ืืช ื Service Discovery ืืชืื ืืงืืืกืืจ. ืืืชืจืื ืืืืืจื ืืืืง ืืช ืืืฉืืืืช ืืืืื ืืืกืืช ืงืื ืื ืืขืฆืืืืื ืืื ืฉืืคืฉืจ ืืืืื ืื ืืื ืืคื ื ืขืฆืื ืืืืชืืื ืืืฉืชืืฉ ืืืฉื ื Nomad ืืื ืืืืื ืืืืจืื, ืืื ืื ืืฉืืืืืื ืขื Terraform ืืืืื ืืื ืงื ืืฉืื ืืื ืืฉื ืืื.
ืกื ืืื ื ืืื ืืืื ืื ื ืืฆื ืืชืืจืืช ืคืืคืืืจืืืช, ืืื ืื ืื ืืชื ืงืฆืช ืขืืืคืื ืืืกืืืืืืืช ืื ืืงืืืขืื ืืช ืฉื ืงืืืจื ืืืก, ืืืืคืฉืื ืืืืืื ืืฉืื ืฉืืืื ืงื ืืืชืงื ื, ืืืคืฉืจ ืืื ืืขืืื ืื ืขื ืืชืฉืชืืช ืืงืืืืช ืืื ืืฉืืจื ืืงืื ืืืื ืจืื ืจืง ืืืงืื ืืืืขืจืืช ืืืืจืื ืื ื ืืื ืืืื ืืืืืช ืคืืชืจืื ืืขื ืืื.
ื .ื. ื ืงืืืช ืืชืืื ืืืื ืืขืืืื ืืืชื ืืื ืืืกืฃ ื Tutorials ืืืชืจ ืฉืืื ืืื:
https://developer.hashicorp.com/nomad/tutorials/get-started.1 420
# ืืื ืจืืืงื ืืื ืกืงืื?
ืืฉืืืฉืื ืฉืืื "ืืื ืืื ืืืืืื X ืืื Scam" ืืื ืืืจื ืืื ืืชืืืื ืืฉืืืื ืฉื ืืืืจืืื ืืืืื:
1. ืืฉ ืืื ืืืืืืืช ืืืชืจ ืคืฉืืืืช ืฉืคืืชืจืืช ืืช ืืืชื ืืขืื.
2. ืืจืื ืื ืฉืื ืืืืจืื ืืืื ืืืืืื ืืืกืืืืช ืืืื ืืืกื ืืฆืืืืจ ืฉืื ืืื ืืืื ืืขืจื ืืืืืชื.
ืืื ืืฉืืื ืืืฉืืื ืืืืืจ ืืืื ืฉืืืืช ืขืืืื ืืืื ืืืืืื ืืืฉืืช - ืืื ืืขื ื ืืื ืจืืืืช (ืืืชืจ ืืื ืืืืืืง ืฉืจืช ืฉืืื), ืืื ืื'ืืื ืืื ืจืืืืช (ืื ืจืง ืืืจื ืื ื ืืขืืื ืืืชืจ ืืื), ืืื ืืืืงืืช ืืืืื ืื ืจืืืืช (ืื ื ืขืืื ืื ืืืื ืืืชืื ืืืืงืืช ืืื ืืฃ ืคืขื ืื ืืฆืื ืืืืื), ืืืืืื ืืื JavaScript Frameworks ืื ืจืืืืช.
ืื ืื ื ืืืืจืื ืืื ืืืืืื ืฉืื ืื ื ืืืฉืืื ืฉืชืคืชืืจ ืื ื ืืขืืืช ืฉืืืจ ืืฉ ืื ื ืขื ืืืื ืืืืืื ืฉืขืืื ื ืืืชื ืืคืจืืืงื ืืงืืื. ืื ืฉืืืจ ืจืืืงื ืืืข ืืื ืืืื ืื ืื jQuery ืื AngularJS ืืืื ืจืืืงื ืืคืชืืจ ืืช ืืืขืืืช ืืกืคืฆืืคืืืช ืฉืืื ืืืื ืืืืืืืช ืืงืืืืืช. ืื ืฉืืืจ ืืขื ื ืืืข ืืืืืง ืื ืื ืื ืื ืฉืจืช ืืื, ืืืื ืืช ืื ืืืืืื ืฉื ืืืจืื ืขืื ืืขืื ืฉืจืชืื ืืืขืงืื ืืืจืืื. ืืื ืฉืื ืืืื ืืืชื ืืขืื ืืืืชืืช ืืืืื ืืืืืื ืืืืฉื ืคืชืจื ืืืชื.
ืื ืืกืฃ ืืืืื ืืฉ ืงืืืฆื ืืืื ืืืืื ืฉื ืื ืฉืื ืฉืืกืชืืืื ืื ืขืืฉืื ืืคืจืืืงืืื ืืืจืื ืืืืืจืื ืืช ืืืื ืืืืืื ืฉืืืื ืืืงืืื ืื "ืื ืื ืืกืคืืง ืืื ืืคืืืกืืืง ืื ืืื ืืกืคืืง ืืื ืื ืืฉืืืื". ืืื ืืื ืฉืื ืฉืืืืจืื ืืช ืืคืืชืจืื ืืคื ื ืฉื ืชืงืื ืืืขืื ืืื ืืื ืืข ืืืชื. ืื ืืืช ืื ืืชื ืืืืช ืื ืื ืืืืจื, ืื ื ืืืืจ ืฉืคืจืืืงืื ืชืืื ื ืื ืื ืฆืคืืืื ืืืื ืื ืืืฉื ืืืืื ืืขืืืช ืชืืชืงื. ืืืืืจ ืืื ืืืืืื ืฉืืืื ืืฉืชืืฉืื ืื ืืืืื ืฉืืืืื ืืื ืืืืืืช ืื ืชืืจืื ืืืชื ืืฉืืชื ืืช ืื ืืงืื ืืขืื ืฉื ื ืืฉืืคืจืืืงื ืืืื.
ืื ืจืืืงื ืืกืืื, ืืืงืืกืืกืื ืขืืืก ืืื ืืืื ืฆืจืื ืืืชืขืืื ืืฉืื ืืืื ืืฉืืืืช ืขืืืื ืืืฉืืช. ืื ืืจืื ืื ืฉืื ืฉืขืืืืื ืืจืืืงื ืืืื ืจืืืื ืืช ืืืขืืืช ืฉืื. ืืื ืื, ืื ืื Scam ืื ืืื ืืืืื ืืคืจืืืงื ืืืื ืืฉ ืขืืืื ืืจืื ืืชืจืื ืืช ืืืืืงืช ืืืขืจืืช ืืงืื ืฆื ืฉืจืช ืฉืืืืืจ JSON-ืื ืืจื API (ืื ืืฉื ื ืื REST ืื GraphQL) ืืงืื ืฆื ืืงืื ืขืฆืืื ืฉืืืจืื ืขื ืืชืฆืืื.
1 420
// ...define your main app here }ืืืืจืืช ืฉืืฉืืจืืื ืืืืช ืืืืืฃ ืืช ืืืืืืฉ ืฉื ืืคืื ืงืฆืื ืืคืื ืงืฆืื ืืืจืช (ืชืืฆืืช ืืคืขืืช ืืคืื ืงืฆืื connect), ืืจืื ืืืชืจ ืงื ืืืจืืจ ืืขืฉืืช ืืช ืืืืืคื ืืื ืืืืืฆื ืืช ืืชืืฆืื ืฉื connect:
class MyApp extends React.Component {
// ...define your main app here
}
export default connect(mapStateToProps, mapDispatchToProps)(MyApp);
ืืืืื ืฉืืืฉืืช ืืืกืคืจืื InversifyJS ืฉืืืจืืื ืืืชื ื ืืืฉืชืืฉ ืืืงืืจืืืจ ืืฉืืื ืืืฆืืืจ ืฉืืืืงื ืืกืืืืช ื ืืชื ืช ืืืืจืงื:
@injectable()
class Katana implements Weapon {
public hit() {
return "cut!";
}
}
ืืื ืืื ืืืืืืฉ ืืจืื ืฉืื ืฉืืกื ืืื ืืฉ ืคื ืงืจืืื ืืคืื ืงืฆืื:
function injectable() {
return function <T extends abstract new (...args: any) => unknown>(target: T) {
if (Reflect.hasOwnMetadata(METADATA_KEY.PARAM_TYPES, target)) {
throw new Error(ERRORS_MSGS.DUPLICATED_INJECTABLE_DECORATOR);
}
const types = Reflect.getMetadata(METADATA_KEY.DESIGN_PARAM_TYPES, target) || [];
Reflect.defineMetadata(METADATA_KEY.PARAM_TYPES, types, target);
return target;
};
}
export { injectable };
ืืืื ืืื ืืืชืจ ืงื ืื ืืื ืืืงืฉืื ืืืืชื ื ืืืคืขืื ืืช Reflect.defineMetadata ืขืืืจ ืื ืืืืงื ืฉืฆืจืืื ืืืืืช Injectable. ืืฆืืจื ืืืืช ืืืืชื ืืืื ืืืืืื ืืื ืื ืื ื ืจืืฆื ืืงืจืื ืืคืื ืงืฆืื ืืื ืื ืฉื ืืืืืงื, ืื ืืงืืืฅ ื ืคืจื ืฉืืืืืจ ืืืจืืื ืืช ืื ืืืืืงืืช ืฉืืคืฉืจ ืืืืจืืง.
ืืืขืื ืืืืืื ืฉ Decorators ืืฆืจื ืืคืขืืื ืืงืืืืืช ืฉืืืื ื ืืืชืื ืืืชื ืืื ืฉืืืืฉ ืืชืจ ืขื ืืฉืืื ืื ืื ืื ืื ืคืฉืืืื ืืืืืจืื ืืืชืจ. ืื ืืืชืื ืืกืคืจืืืช ืฉื ืืขืืื ืืืืืื ืฉืขืืืฃ ืืืืกืืฃ ืฉืืจืืื ืืขื ืงืืืก ืื ืคืื ืงืฆืื ืืืฉืจ ืคืฉืื ืืงืจืื ืืคืื ืงืฆืื ืืืกืคืจืื ืฉืืื, ืืคืืื ืฉืืจืืฉื ืืื ืื ืชืืื ืืืชื ืืืืืช ืืงืื ืฉืืฉืชืืฉ ืืกืคืจืื.1 420
# ืชืคืกื ืืืกื, ืืืงืืจืืืจืื ืืืืจืื!
ืืืืคืกืงืจืืคื 5 ืชืืฃ ืืืฆืืช ืืืื ืืคืืฆ'ืจืื ืืืืจืืืื ืื ืืื ืืชืืืื ืืืืืืฉืช ืืืงืืจืืืจืื. ืืกืชืืจ ืฉืืืื ืฉืื ืฉืื ื ืื ืกืืื ื ืืืจืืืืช ืืฆืืืื ืืืืืก ืชืืืื ื TC39 ืืขืืฉืื ืืช ืืจืื ืืืืืจืืช ืืืคืืคื ืื ืฉืื ื, ืืฉืืืืคืกืงืจืืคื ืืื ืืกื ืื ืืช ืืจืืฉืื ื. ืืืื ื ืืืืจ ืืื ืืืื ืืคืขื ืืงืืืืช ืื ืื ืขืืื ืืื.
## ืืื ืืงืืจืืืจืื
ืืืฆืขื ื TC39 ืืกืืืจืื ืื ื ืฉืืงืืจืืืจ ืืื ืชืืืืจ ืฉืืืคืฉืจ ืืืืืืฃ ืคืื ืงืฆืื ืืืืจืช, ืืื ืืฉืชืฃ ืงืื ืืงืืืช ืืื ืคืื ืงืฆืืืช. ืืืช ืืืืืืืืช ืฉื ืืื ืืืงืืจืืืจ logged:
function logged(value, { kind, name }) {
if (kind === "method") {
return function (...args) {
console.log(`starting ${name} with arguments ${args.join(", ")}`);
const ret = value.call(this, ...args);
console.log(`ending ${name}`);
return ret;
};
}
}
class C {
@logged
m(arg) {}
}
ืืชืืกืคืช @logged ืืขื ืืืืจืช ืืคืื ืงืฆืื m ืืงืืืก C ืชืืจืื ืืืืืคืช ืืคืื ืงืฆืื m ืืคืื ืงืฆืื ืฉืืืืจืช ืืืคืื ืงืฆืื logged, ืืื ืืืืกืคืช ืืืคืกืืช ืืืื "ืืคื ื" ื"ืืืจื" ืืคืขืืช ืืคืื ืงืฆืื. ืืชืืืืจืื ืืืืืืช ืืฉื ืืช ืืช ืืชืืื ืฉื ืคืื ืงืฆืื ืืื ืืืขืช ืืืืืืฉ ืขืฆืื ืืืคืฉืจืช "ืืงืฉื" ืคืื ืงืฆืืืช ืืื ืืื ื ืืืืืืช. ืืืืื ืงืืืกืืช ืืื ืืงืืจืืืจ ืฉื Memoization ืฉืืืจื ืืคืื ืงืฆืื "ืืืืืจ" ืชืืฆืืืช ืฉื ืืคืขืืืช ืืฉื ืืช ืฉืื ืืื ืืคืขืืื ืืช ืืคืื ืงืฆืื ืคืขื ื ืืกืคืช ืขื ืืืชื ืคืจืืืจืื ืืื ืชืืืืจ ืืช ืืชืืฆืื ืืืืืืจืื ืืืงืื ืืืฉื ืืืืฉ.
## ืื ืื ืจืข ืืื?
ืขื ืืืื ืืคืฉืจ ืืงืื ืืช ืืจืืฉื ืฉ Decorators ืื ืคืืฆ'ืจ ืงืฆืช ืืืืืจื ืืื ืื ืืืื ืืืืง ืฉื JavaScript. ืืคืืืช ืื ืื ื ืืฉืืชื ืืฉืืืืชื ืขืืืื ืืจืืฉืื ื. ืืฆืขืจื ืืืฆืืืืช ืืืชื ืืจืืขื ืืืชืจ ืืื ืืืืื. ืืืฆืขื ืืืืืืฉ ืืงืืจืืืจืื ืืื ืืืขืฉื ืืืืืจืฆืื ืืจืืืขืืช ืฉื ืืชืืืืจ ืฉืืื (ืืคืฉืจ ืืงืจืื ืขื ืืืืกืืืจืื ืืื), ืืืืจ ืืคื ื ืืื ืฉื ืื ืืื ืื ืื ืืืจ ืืื ืืกื ืชืืืื ืืืงืืจืืืจืื ืืืืช ืืืืืจืฆืืืช ืืงืืืืืช ืฉืืื. ืื ื ืืืจ ืจืข ืื ืืชืืจืจ ืฉืืชืงื ืืืื ืฉืื ื ืืื ืฉืืืื ืืฉืื, ืืื ืืกืคืืง ืืชืช ืื ื ืืฆืฆื ืืืื ืื ืฉืื ืืฉืชืืฉืื ืืืงืืจืืืจืื.
ืืกืชืืจ ืฉืืฉืืืืฉ ืืืจืืื ืืืงืืจืืืจืื ืื ืืื ืืื ืืืืืืฃ ืคืื ืงืฆืื ืืคืื ืงืฆืื ืืืจืช ืื "ืืืืืืฉ" ืืกืคืงื ืืืืืฉื ืืกืืื ืขื ืืกืคืจ ืคืื ืงืฆืืืช, ืืื ืืชืืจ ืื ืืืฆืื ืื "ืชืืขืื ืื". ืืืงืื ืกืชื ืืืคืขืื ืคืื ืงืฆืื, ืืืชืื ืกืคืจืืืช ืืจืฉื ืืืืชื ื ืืืืกืืฃ ืื ืืืฆืืืช ืขื "ืืืจืื" ืืืืง ืืืืืฉืง ืฉื ืืกืคืจืื. ืืื ืืืืืืืช-
ืกืคืจืืืช TypeORM ืืฉืชืืฉืช ื Decorators ืืื ืืฆืืื ืฉืืืืงื ืืกืืืืช ืืื Entity ืืฆืจืืื ืืืืืช "ืืืืืจืช" ืืืืื ืืืกืืก ืื ืชืื ืื:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number
@Column()
firstName: string
@Column()
lastName: string
@Column()
age: number
}
ืืื ืืื ืืืืืืฉ ืืจืื ืื ื ืฉืื ืื ืฉ @Entity ืขืืฉื ืื ืืงืจืื ืืคืื ืงืฆืื:
export function Entity(
nameOrOptions?: string | EntityOptions,
maybeOptions?: EntityOptions,
): ClassDecorator {
const options =
(ObjectUtils.isObject(nameOrOptions)
? (nameOrOptions as EntityOptions)
: maybeOptions) || {}
const name =
typeof nameOrOptions === "string" ? nameOrOptions : options.name
return function (target) {
getMetadataArgsStorage().tables.push({
target: target,
name: name,
type: "regular",
orderBy: options.orderBy ? options.orderBy : undefined,
engine: options.engine ? options.engine : undefined,
database: options.database ? options.database : undefined,
schema: options.schema ? options.schema : undefined,
synchronize: options.synchronize,
withoutRowid: options.withoutRowid,
} as TableMetadataArgs)
}
}
ืืืืืจื ื Decorator ืฉืื ืืืืืฃ ืืช ืืคืื ืงืฆืื ืืืืืืฉ ืืืจ ืืื ืื ืืืขืืช, ืืืืฆืจืช ืขืงืืืช ืืืืื ืืืืคืืช ืืช ืื ื API ืืคืืืช ื ืืืฉ.
ืืคืืื ืืฉืืืชื ืืืืืจื ืืฆืืงื ืืฉืืืืฉ ืืืงืืจืืืจ ืื ืื ืื ื ืืืืช ืจืืฆืื ืืืืืืฃ ืืช ืืืืืืฉ, ืืชืืฆืื ืืืชื ืื ืืืขืืช ืืืืืืืช. ื ืืงื ืืช react-redux ืืืืืื ืื ืืืืจ ืฉืคืขื ืืชืื ื ืงืื ืืื ืืื ืืืืจ ืงืืืคืื ื ืืช ืจืืืงื ื Redux Store:
@connect(mapStateToProps, mapDispatchToProps)
export default class MyApp extends React.Component {1 420
# ืืืื ืืืืชื: ืืืจ ืืืื ืื ืฆืจืื ืืืืกืืฃ ืงื ืชืืชื ืืืจื exec ื Qt for Python
ืืคืืขืื ืฆืจืื ืืืืืช ืฉืืฉืื ืืืคืื ื Deprecated ืขื ืฉืื ื ืืฉืื ืื ืฉืืืจ ืืจืื ืืื ืืื ืื ืืื ืืืจืื. ืื ืืคืืืช ืืื ืืกืืคืืจ ืขื PyQt ื PySide ืืืคืงืืื exec.
ืืคืืืชืื 2 ืืืืื exec ืืืชื ืืืื ืฉืืืจื. ืืคืงืืื exec ืฉื Qt ืืื ืืืช ืฉืืคืขืืื ืืช ืืืืืื ืืจืืฉืืช ืฉื ืืืืฉืื, ืืืฉื exec ืืื ืืืืืง ืฉื ืืคืื ืงืฆืื ื
C++, ืืื ืืืฉืืื ืื ืืืืื ืืืชืจ ืืื ืืชืื ืชืื ืฉืืืจ ืืืืจืื Qt ื C++, ืืคืืืชืื ืืืจื ืืืืฅ ืืช ืืฉื ืืื ืืืืกืืฃ _ ืืกืืฃ. ืชืืื ืืช PyQt ืคืฉืืื ืฉื ืฉืืื ืขืืื ืืื ื ืจืืชื ืื:
import sys
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QLabel
if __name__ == "__main__":
app = QApplication(sys.argv)
label = QLabel("Hello World", alignment=Qt.AlignCenter)
label.show()
sys.exit(app.exec_())
ืืื ืืคืืืชืื 3 ืืืืื exec ืืืจ ืื ืืืชื ืืืื ืฉืืืจื, ืืืื ืืื ื Qt5 ืืคืฉืจ ืืืฉืชืืฉ ืืืืชื exec ืฉื C++. ืืืืจืกื 6 ืื ืื ื ืืืจ ืืงืืืื Deprecation Warning ืขื ื exec ืขื ืืงื ืืชืืชื ืืกืืฃ. ืืื ืื ืขื sys.exit ืฉืืืคืืข ืืชืืื ืืช ืืืืืื ืืคืฉืจ ืืืืชืจ ืืืงืื ืืื ืืขืฉื ืืืืืง ืืช ืืืชื ืืืจ ืืืื ืืืชืืื ื:
import sys
from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QLabel
if __name__ == "__main__":
app = QApplication(sys.argv)
label = QLabel("Hello World", alignment=Qt.AlignCenter)
label.show()
app.exec()
ื .ื. ืจืืฆืื ืืืคืขืื ืืืชื ืืฆืืื? ืื ืื ืฉืฆืจืื ืื ืืืชืงืื ืืคื ื ืืช ืืืืืืืช ืฉื PySide ืืืชื ืืกืืืจืื:
pip install PySide61 420
# ืืืค ืืืืืื: ืืื ืืืืคืืก ืืช ืืืื ืฉื ืืืจืฆื ืืืืจืื ื ืืจื ืฉืืจืช ืืคืงืืื
ืืืืืืื ืืฉ ืืื ืฉืืจืช ืคืงืืื ืฉื ืงืจื gh ืฉืืื ืกืื ืฉื ืงืกื, ืื ืืื ืืืคืฉืจ ืืขืฉืืช ืื ืืืจ ืฉืืคืฉืจ ืืขืฉืืช ืืจื ืืืชืจ, ืืฉืืจืช ืืคืงืืื ืืขื ืคืื JSON ืฉืืืื ืงื ืืคืขื ืื. ืืขืืจ ืืชืืชื ืขืืื ืืคืืกื ืืื ืืืฆืืจ Pull Request ืืฉืืจืช ืืคืงืืื ืืืืื ืืื ืืืืจ ืืฉืืื ืืขื ืืช ืขื ืขืื ืฉืืื ืืชืืืื - ืืื ืืืืคืืก ืืช ืืืื ืฉื ืืืจืฆื ืืืืจืื ื ืฉื Github Action ืืฉืืจืช ืืคืงืืื? ืืคื ืขืืื ื ืืกื ืืื ืืฉืื ืฉืชื ืคืงืืืืช.
ืืคืงืืื ืืจืืฉืื ื ืฉืฆืจืื ืืืืืจ ืืื
gh run list. ืืฉืื ื ืืจืืฅ ืืช ืืคืงืืื ืืชืืงืื ืขื ืจืืคืืืืืืจื, ืืื ืืืคืืกื ืืืกื ืืช ืื ืืืจืฆืืช ืฉื ื Actions ืืืจืืคืืืืืืจื. ืืขืืจืช ืืืชื --json ืื ื ืืืื ืืืงืฉ ืจืง ืคืจืืื ืืกืืืืื ืขื ืื ืืจืฆื ืืืขืืจืช -L ืื ื ืืืืื ืืช ืืกืคืจ ืืชืืฆืืืช. ืืื ืื ื ืจืื ืขื ืจืืคื ืฉืื ืืืืืื ื-3 ืืจืฆืืช ืืืจืื ืืช:
$ PAGER= gh run list --json name,databaseId,startedAt -L 3
[
{
"databaseId": 4289773851,
"name": "publish-daily-post-to-telegram",
"startedAt": "2023-02-28T05:11:50Z"
},
{
"databaseId": 4279130715,
"name": "publish-daily-post-to-telegram",
"startedAt": "2023-02-27T05:11:47Z"
},
{
"databaseId": 4273470712,
"name": "publish-daily-post-to-telegram",
"startedAt": "2023-02-26T05:10:54Z"
}
]
ืืคืงืืื ืืฉื ืื ืฉืฆืจืื ืืืืืจ ืืื gh run view ืฉืืงืืืช ืืกืคืจ ืจืืฆื ืืืืคืืกื ืคืจืืื ืขืืื. ืืืชื --log ืืืจืื ื view ืืืฆืื ืืช ืืืื ืืืื ืฉื ืืืจืฆื. ืืื ืื ื ืจืื ืืฆืื ืขื ืืืจืฆื ืืขืืื ืืช ืืืืชืจ:
$ PAGER= gh run view --log 4289773851 | head
publish Set up job 2023-02-28T05:12:00.4187561Z Current runner version: '2.301.1'
publish Set up job 2023-02-28T05:12:00.4215234Z ##[group]Operating System
publish Set up job 2023-02-28T05:12:00.4215881Z Ubuntu
publish Set up job 2023-02-28T05:12:00.4216132Z 22.04.2
publish Set up job 2023-02-28T05:12:00.4216414Z LTS
publish Set up job 2023-02-28T05:12:00.4216728Z ##[endgroup]
publish Set up job 2023-02-28T05:12:00.4217052Z ##[group]Runner Image
publish Set up job 2023-02-28T05:12:00.4217433Z Image: ubuntu-22.04
publish Set up job 2023-02-28T05:12:00.4217721Z Version: 20230219.1
publish Set up job 2023-02-28T05:12:00.4218252Z Included Software: https://github.com/actions/runner-images/blob/ubuntu22/20230219.1/images/linux/Ubuntu2204-Readme.md
ืืื ืืืืื ืืืฉืื ืืื ืืืื.
ืฉืืืื ืฉื ืฉืชื ืืคืงืืืืช ืืืคืฉืจ ืื ืืฉืืจื ืืืช ืืงืื ืืช ืืืื ืืืื ืฉื ืืืจืฆื ืืืืจืื ื ืฉื Action ืืจืืคื:
$ PAGER= gh run view --log $(gh run list --json databaseId -q '.[].databaseId' -L 1)
ื .ื. ืืืชื -q ืืงืื ืฉืืืืชื ืืคืืจืื ืฉื jq. ืืืืืชื ืคืื ืืคืงืืื ืืื ืจืง ืืืื ืืจืืฆื ืืืงืื ื JSON ืืืื.1 420
# ืื ืืกืืคืืจ ืขื ืืืืืกื ืื ืืืจื ืืชืืืช IP?
ื ืชืงืืชื ืคืขื ืืืชืืืช 10.10.64.0/27? ืืื ืืืื 192.168.0.0/24?
ืืฉืื ืื ื ืืืืจืื ืขื ืืืกืฃ ืืชืืืืช IP ืืจืฉืช ืืกืืืืช ืืจืื ืคืขืืื ื ืืืจ ืืืชืื ืืืชื ืืชืืจ ืืชืืืช ืืืืจืื ืืืืกื ืืื ืืกืคืจ, ืืืชืื ืฉื ืงืจื CIDR Block. ืืืืชืืืช CIDR ืื ืจืืฉื ืชืืืืช ืฉื ืืืืืื Classless Inter-Domain Routing. ืืฉืืื ืขืฆืื ืืืฆืื ืืืจ ื 1993 ืืืืจื ืืืกืื ืืืชืืืช IP ืืืกืคืง ืืืืฉืืช ืืืจืืื ืื ืฉืจืฆื ืืืืง ืืช ืืจืฉืช ืืคื ืืืืช ืฉืืื ืืืงืืขืื.
ืืืืงืช ืจืฉืช ืืืงืืขืื ืืืกืืช ืืืชืืืืช IP ืื ืื ืื ืืืื ื ืืจืฉืช ืืคื ืืืืช ืฆืจืืื ืืชืืืช IP ืฆืืืืจืืช. ืืืฉืื ืขื ืืจืฉืช ืืคื ืืืืช ืฉืืื ืืืืช - ืืืืฉืืื ืืืืืื ืืงืื ืืชืืืช IP ืืื 192.168.0.124, ืืืขืืจืชื ืืืืื ืืช ืืจืฉืช ืืคื ืืืืช ืืชืงืฉืจืืช ืืืช ืขื ืืฉื ืื, ืืื ืจืง ืืชืืืช ื IP ืืืืฆืื ืืช ืฉื ืืจืืืืจ ืชืืื ื ืืืฉื ืืืืื ืืจื ื. ืื ืืืช ืจืฉืช ืคื ืืืืช ืืกืื ืืกืคืง ืืืื ืืจื ื ืฉืืื ืืชืืืืช IP, ืื ืขืืฉืื ืื ืืืืืื ืืชืช ืืื ืจืง ืืชืืืช IP ืืืช ืืฉืืื ืืจืืืืจ ืืื ืฆืจืืืื ืืืงืฆืืช ืืชืืืช ืืื ืืืื ื ืืจืฉืช ืืืืชืืช.
ืืชืื CIDR ืืื ืคืฉืื ืืจื ืืืืฆื ืืืกืฃ ืฉื ืืชืืืืช IP ืขืืงืืืช. ืืฉืืจืืืืจ ืฉืืื ืจืืื ืืืืขื ืฉื ืฉืืืช ืืื ืฉืชื ืืืื ืืช ืืชืื ืืืชื ืืืืง ืฉืืื ืื ืื, ืืื ืื ืฆืจืื ืืฉืืื ืืช ืืืืืขื ืืืืฆื ื ISP, ืืืืื ืืื ืืืขืืืจ ืืืชื ืืืืื ืช ืืืขื.
ืืื ืืฉืื ื ืืืชื 192.168.0.0/30 ืื ื ืืขืฆื ืืืชื ืืช 4 ืืชืืืืช ื IP:
192.168.0.0
192.168.0.1
192.168.0.2
192.168.0.3
ืืืืืคื ืืืื ืืชืื ืฉื ืืชืืืช IP ืฉืืืจืื ืืืืกื ืืื ืืกืคืจ ืืคืืจืฉ ืืชืืจ ืืืืง ืฉื ืืชืืืืช IP ืฆืืืืืช.
ืืื ืืืืขืื ืืืื ืืชืืืืช IP ืืชืืืืืช ื CIDR Block ืืกืืื? ืืื ืฉืฉืืืชื. ืงืืื ืื ืืฉ ืชืืื ืืช ืฉืคืืจืกืืช ืจืฉืืืืช ืืืื, ืืืืืื ืื ืืฉ ืืื nmap ืืืชืงื ืชืืืื ืืืชืื:
$ nmap -sL -n 192.168.0.0/30| awk '/for/{print $NF}'
ืืืงืื ืืืืืง ืืช ืืจืฉืืื (ื awk ืืกืืฃ ืื ืืกื ื ืืื ืฉืืจืืช ืื ืืฉืืืืช ืฉ nmap ืืืคืืก). ืืืคืฉืจ ืื ืืืฉื ืืช ืืจืฉืืื ืืืกืืช ืืงืืืช ืืฉืืืื ืื ืื ืืืชืื ืืืืฆื.
ืื ืืชืืืช IP ื ืืชื ืช ืืืืฆืื ืืืืจืกื ืืื ืืจืืช ืืืืฆืขืืช ืืืจื ืืืื ืืจื ืฉื ืื ืืื ืืืืกืคืจืื ืฉืืจืืื ืืืชื. ืืืืืื ืืืชืืืช 172.16.21.9 ืืืืฆืืช ืืืื ืืจืืช ืขื ืืื ืืืกืคืจ:
10101100.00010000.00010101.00001001
ืืืชืื CIDR ืืืกืคืจ ืฉืืืจื ืืืืืกื ืืืืฆื ืืื ืืืืื ืืฉืืฉืื ืืืืฆืื ืืจืฉืช, ืืืขืฆื ืืืฉืืจื ืงืืืขืื ืืื ืืชืืืช IP ืฉื ืืชืื. ืืืกืคืจ ืืื ื ืข ืืื 0, ืืืืืฆื ืืืืง ืฉื ืื ืืชืืืืช ื IP ืืืคืฉืจืืืช, ื 32 ืืืืืฆื ืืืืง ืฉืืืจืื ืืืชืืืช IP ืืืืืช. ืืฉืืื ืฉืืืื ื ืื ืืืชืื, ืืชืืืช ืืืกืืก ืฉื ืืืืง CIDR ืืืืืจื ืืช ืืืืืื ืฉื ื Host ืืืืืช ืืืืคืกืื.
ืื ืื ื ืฉืืจ ืขื ืืืชืืืช 172.16.21.9 ืื ื ืืืื ืืืืจ ืขื ืืืืืง 172.16.21.9/31 ืื ื ืืฆืืืช ืจืง ืฉืชื ืืืชืืืช:
172.16.21.8
172.16.21.9
ืื ืืืชืื ืืื ืืจื:
10101100.00010000.00010101.00001000
10101100.00010000.00010101.00001001
ืืฉืืื ืื ืืื ื 31 ืืืืื ืืจืืฉืื ืื ืืืื ืืจืง ืืืื ืืืืจืื ืืฉืชื ื ื 0 ื 1. ืืื ืฉืืืจืื ืืช ืืืกืคืจ ืฉืืืจื ืืืืืกื (ืืกืคืจ ืืืืืื ืฉื ืืจืฉืช), ืื ืืืื ืื ืืืชืจ ืืชืืืืช IP ืฉืื ืืช ืืืืืง. ืืืืืง 172.16.0.0/24 ืืืจ ืืืื 256 ืืชืืืืช - ืื ืืืชืืืืช ืืื ืฉืืืฉืช ืืืกืคืจืื ืืจืืฉืื ืื ืื 172.16.0. ืืืืืง 172.16.0.0/28 ืืืื ืจืง 16 ืืชืืืืช, ืืจืืฉืื ื ืืื 172.16.0.0 ืืืืืจืื ื ืืื 172.16.0.15. ืืฉืืื ืืืืืข ืืืืืง ืืื ืฉื 16 ืืชืืืืช ืื ื ืืืืื ืืช ืืืกืคืจ ืืืืจืื ืืืชืืืช, ืืืืืจ ืืืืืง 172.16.0.16/28 ืืืื ืื ืืื 16 ืืชืืืืช ืืื ืืคืขื ืืืชืืืช ืืจืืฉืื ื ืืื 172.16.0.16 ืืืืืจืื ื ืืื 172.16.0.31.1 420
# ืืืืื ืืืชื ื ืจืืื
ืืื ืคืืชืื ืืืืื ืื ืงืืื ืื ืืืื ืฉืืืืขืื ืืืฆืืืข (ืืจืืช ืืืืง ืืืืื) ืขื ืงืื ืฉื ืจืื ืืื ืืื. ืืื, ืืื ืคืืชืื ืงืฉืืจืื ืืฉืคื ืืขืืืืื ืืื ืืืชื. ืืืืืื ืงืืืกืืช ื JavaScript, ืืงืื ืืื ืฉืืื ืืื ื eslint ืื ืืืคืช:
function countUntil(n) {
let i=0;
while(i < n)
console.log(i);
i++;
}
countUntil(10);
ืงื ืืจืืืช ืฉืืฉืืจื ืืฉื ืื ื"ืืืืง" ื while ืืื ืืขืฆื ืืืื ืื ืืืืืง ื while, ืืืื ืืืืืื ืชืจืืฅ ืขื ืืื ืกืืฃ. ืืฉืืื ืืชืงื ืื ื ืื ืฆืจืื ืืขืืืจ ืืคืืืชืื, ืืกืคืืง ืืืืกืืฃ ื eslint ืืช ืืืื indent ืืื ืฉืืื ืืฆืขืง ืฉืืฉืืจื i++ ืื ืืืงืื.
ืืืช ืืขืืืืืช ืืืฉืืืืช ืฉืื ื ืืืชืื ืชืื ืืื ืืืฆืื ืืช ืืืืื ืื ืืื ืื - ืื ืืืืื ืฉืืืชืื ืืืงืืื ื ืืช ืืงืื, ืืื ืงืืื ืื ืืืืื ืฉืืฆืืืขื ืขื ืฉืืืืืช ืฉืืืื ืืขืื ืงื ืืคืกืคืก.1 420
# ืืืกืื ืืื ืืฉืื ืฉืืชื ืื ืืืชืืื
ืฉืืืจืืื ืชืืื ื ืื ืงืฉื ืืืื ืฉืืืขืจืืช ืืฉืื ืืืืจืืืช ืืืชืจ ืื ืจืง ื ืืื ืืืชืจ ืืกืืื. ืืขืื ืจืืฉืื ื ืืืืืจืช ืืื ืฉืืืจืกืืืช ืืืฉืืช ืฉื ืชืืืืืช ืืืฆืืืช ืื ืืืื, ืืคืขืืื ืืืืช ืืชืงื ืืช ืืขืืืช ืืื ืืจืื ืคืขืืื ืื ืฉืืืจืืช ืชืืืืืช API. ืฉืืืจืื ืชืืืืืช ืืืื ืืฉืืืจ ืืจืื ืืืจืื ืืืขืจืืช.
ืืขืื ืฉื ืื ืืืคืืื ืืืชืจ ืืืจืืื ืืื ืฉืืืืช ืืืขืจืืืช ืฉืืฉ ืืื ืชืืืืืช ืืืื, ืืงืืจื ืฉืื ืื ื ืืืืืื ืงืฉืจ ืขื ืื ืืชืืืืืช ืฉืฆืจืื ืืฉืืจื ืืืื ืืฉืืจื ืื ืืืจ.
ืืืขืจืืช Full Stack ืืืคืืกืืช ืืืื ืื ื ืืช ืืขืจืืช ืืืคืขืื ืฉื ืืฉืจืช, ืืืจืกืืืช ืฉื ืื ืืกืคืจืืืช ืืืืื ืืช ืืืขืจืืช ืืืคืขืื, ืืกืืก ืื ืชืื ืื, ืืขื ืื ืชืืื ืืช ื ืืืืช ืฉืืชืงื ื ืืฉืืื ืืืคืืืงืฆืื, ืืฉืืืคืืืงืฆืื ืจืฆื ืืชืื Docker Container ืื ืงืืฆื ื Dockerfile ืืชืืืกืื ืืชืืื ืืช ืืืืจืกืืืช ืืกืืืืืช (ืืื ืืืชื ืฆืจืื ืืฉืืจื), ืืืจืืช ืืืคืืืงืฆืื ื requirements.txt, Gemfile ืื package.json ืฆืจืืืื ืืืคืื ืืฉืืจืื.
ืืื ืืืงืื ืืืืื "ื ืฉืืจื ืืฉืืืื ืืื" ืื ืืฉืืจื ืืฉืืฉืื ื ืฉืืจ, ืืืืืฅ ืืงืืข ืืช ืืฉืืืจืืืื ืืืกืื ืืื ืฉืืืืจ ืืื. ืืืืช ืืงืกื ืชืขืืื ืคื ืืื, ืืื ืืคืฉืจ ืื ืงืืืฅ ืืงืกื ืคืฉืื. ืืขืืืืืช ืืืื "ืื", "ืืื ืืฉืืจื", "ืืชื ืฉืืจืื ื ืคืขื ืืืจืื ื", "ืชืืจืื ืฉืืืจืื ืืื", ืืืืืื:
1. ืืกืืก ืื ืชืื ืื, ืงืืฉืืจ ืืืืจืื ืฉืืกืืืจ ืืื ืืฉืืจื ืืช ืืกืืก ืื ืชืื ืื, ืฉืืืจื ืืืืจืื ื ื XXX, ืืฉืืืจื ืคืขื ืืืื ื YYY.
2. ืงืืืฅ ื Dockerfile ืฉื ืืฉืจืช, ืงืืฉืืจ ืืืกืื ืฉืืกืืืจ ืืื ืืฉืืจื, ืฉืืืจื ืืืืจืื ื ื XXX ืืฉืืืจื ืคืขื ืืืื ื YYY.
3. ืชืืืืืช ืฆื-ืืงืื ืฉื ืืืคืืืงืฆืื ืืจืืฉืืช, ืงืืฉืืจ ืืืกืื ืฉืืกืืืจ ืืื ืืฉืืจื, ืฉืืืจื ืืืืจืื ื ื XXX, ืืฉืืืจื ืคืขื ืืืื ื YYY.
ืืืืช ืืงืกื ืืกืืืจืช ืขื ืืื ืงืื ืฉืชืขืืืื ืืื ืฉืืืจืื ืืืืื ืืืคืื ืืช ืืฉืืืจืืืื ืืืืืื ืืจืื ืคืืืช ืืืืืฆื ืืืื ืืฉืืื ืืฃ ืืืง ืืืขืจืืช.
ยกYa disponible! Investigaciรณn de Telegram 2025 โ los principales insights del aรฑo 
