es
Feedback
ToCode

ToCode

Ir al canal en Telegram

ื˜ื™ืคื™ื ืงืฆืจื™ื ืœืžืชื›ื ืชื™ื ืžืืช ื™ื ื•ืŸ ืคืจืง

Mostrar mรกs
1 420
Suscriptores
Sin datos24 horas
+27 dรญas
-230 dรญas
Archivo de publicaciones
ToCode
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 ืžืื•ืชื” ื ืงื•ื“ื”. ื‘ืžืงืจื” ื”ื–ื” ืฉื™ื ื•ื™ ืกื“ืจ ื”ืฉื•ืจื•ืช ื•ื‘ื—ื™ืจืช ืฉื›ื‘ื•ืช ื ื›ื•ื ื” ืœื ืžืฉืคื™ืขื” ืขืœ ื”ืชื•ืฆืื” ื”ืกื•ืคื™ืช, ืื‘ืœ ื”ื•ืคื›ืช ืืช ืชื”ืœื™ืš ื”ืคื™ืชื•ื— ืฉืœื ื• ืœืžื”ื™ืจ ื™ื•ืชืจ.

ToCode
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__}")
ื•ื›ืฆืคื•ื™ ื”ืชื•ื›ื ื™ืช ื”ืชืจืกืงื” ืขื ื”ื•ื“ืขืช ืฉื’ื™ืื” ืžืคื•ืจืฉืช.

ToCode
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.

ToCode
1 420
# ื”ืื ืจื™ืืงื˜ ื”ื•ื ืกืงืื? ื›ืฉืžื™ืฉื”ื• ืฉื•ืืœ "ื”ืื ื˜ื›ื ื•ืœื•ื’ื™ื” X ื”ื™ื Scam" ื”ื•ื ื‘ื“ืจืš ื›ืœืœ ืžืชื›ื•ื•ืŸ ืœืฉื™ืœื•ื‘ ืฉืœ ื”ื’ื•ืจืžื™ื ื”ื‘ืื™ื: 1. ื™ืฉ ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื™ื•ืชืจ ืคืฉื•ื˜ื•ืช ืฉืคื•ืชืจื•ืช ืืช ืื•ืชื” ื‘ืขื™ื”. 2. ื”ืจื‘ื” ืื ืฉื™ื ื‘ื•ื—ืจื™ื ื‘ื˜ื›ื ื•ืœื•ื’ื™ื” ื”ืžืกื•ื‘ื›ืช ื‘ื’ืœืœ ื™ื—ืกื™ ื”ืฆื™ื‘ื•ืจ ืฉืœื” ื•ืœื ื‘ื’ืœืœ ื”ืขืจืš ื”ืืžื™ืชื™. ื•ื›ืš ื”ืฉืืœื” ืžืžืฉื™ื›ื” ืœื—ื–ื•ืจ ืœื’ื‘ื™ ืฉื™ื˜ื•ืช ืขื‘ื•ื“ื” ื•ื˜ื›ื ื•ืœื•ื’ื™ื” ื—ื“ืฉื•ืช - ื”ืื ื”ืขื ืŸ ื”ื•ื ืจืžืื•ืช (ื™ื•ืชืจ ื–ื•ืœ ืœื”ื—ื–ื™ืง ืฉืจืช ืฉืœื›ื), ื”ืื ืื’'ื™ื™ืœ ื”ื•ื ืจืžืื•ืช (ื–ื” ืจืง ื’ื•ืจื ืœื ื• ืœืขื‘ื•ื“ ื™ื•ืชืจ ืœืื˜), ื”ืื ื‘ื“ื™ืงื•ืช ื™ื—ื™ื“ื” ื”ืŸ ืจืžืื•ืช (ืื ื™ ืขื•ื‘ื“ ื›ืœ ื”ื™ื•ื ืœื›ืชื•ื‘ ื‘ื“ื™ืงื•ืช ื•ื”ืŸ ืืฃ ืคืขื ืœื ืžืฆืื• ื‘ืื’ื™ื), ื•ื›ืžื•ื‘ืŸ ื”ืื JavaScript Frameworks ื”ืŸ ืจืžืื•ืช. ืื ื—ื ื• ื‘ื•ื—ืจื™ื ื˜ื›ื ื•ืœื•ื’ื™ื” ืฉืื ื—ื ื• ื—ื•ืฉื‘ื™ื ืฉืชืคืชื•ืจ ืœื ื• ื‘ืขื™ื•ืช ืฉื›ื‘ืจ ื™ืฉ ืœื ื• ืขื ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ืฉืขื‘ื“ื ื• ืื™ืชื” ื‘ืคืจื•ื™ืงื˜ ื”ืงื•ื“ื. ืžื™ ืฉื‘ื—ืจ ืจื™ืืงื˜ ื™ื“ืข ื˜ื•ื‘ ืžืื•ื“ ืžื” ื–ื” jQuery ืื• AngularJS ื•ืื™ืš ืจื™ืืงื˜ ื™ืคืชื•ืจ ืืช ื”ื‘ืขื™ื•ืช ื”ืกืคืฆื™ืคื™ื•ืช ืฉื”ื™ื• ื‘ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื”ืงื•ื“ืžื•ืช. ืžื™ ืฉื‘ื—ืจ ื‘ืขื ืŸ ื™ื“ืข ื‘ื“ื™ื•ืง ืžื” ื–ื” ืœื ื”ืœ ืฉืจืช ืœื‘ื“, ื›ื•ืœืœ ืืช ื›ืœ ื”ื‘ืœืื’ืŸ ืฉืœ ืœื”ืจื™ื ืขื•ื“ ื•ืขื•ื“ ืฉืจืชื™ื ื•ืœืขืงื•ื‘ ืื—ืจื™ื”ื. ืœืื ืฉื™ื ื”ืืœื” ื”ื™ืชื” ื‘ืขื™ื” ืืžื™ืชื™ืช ื•ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ื”ื—ื“ืฉื” ืคืชืจื” ืื•ืชื”. ื‘ื ื•ืกืฃ ืืœื™ื”ื ื™ืฉ ืงื‘ื•ืฆื” ืžืื•ื“ ื’ื“ื•ืœื” ืฉืœ ืื ืฉื™ื ืฉืžืกืชื›ืœื™ื ืžื” ืขื•ืฉื™ื ื‘ืคืจื•ื™ืงื˜ื™ื ืื—ืจื™ื ื•ื‘ื•ื—ืจื™ื ืืช ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ืฉื›ื•ืœื ืœื•ืงื—ื™ื ื›ื™ "ืื ื–ื” ืžืกืคื™ืง ื˜ื•ื‘ ืœืคื™ื™ืกื‘ื•ืง ื–ื” ื‘ื˜ื— ืžืกืคื™ืง ื˜ื•ื‘ ื’ื ื‘ืฉื‘ื™ืœื™". ืืœื” ื”ืื ืฉื™ื ืฉื‘ื•ื—ืจื™ื ืืช ื”ืคื™ืชืจื•ืŸ ืœืคื ื™ ืฉื ืชืงืœื• ื‘ื‘ืขื™ื” ื›ื“ื™ ืœืžื ื•ืข ืื•ืชื”. ื’ื ื–ืืช ืœื ื”ืชื ื”ื’ื•ืช ื›ืœ ื›ืš ืžื•ื–ืจื”, ืื ื ื™ื–ื›ืจ ืฉืคืจื•ื™ืงื˜ื™ ืชื•ื›ื ื” ื”ื ืœื ืฆืคื•ื™ื™ื ื•ืื™ืŸ ืœืš ืžื•ืฉื’ ื‘ืื™ื–ื” ื‘ืขื™ื•ืช ืชื™ืชืงืœ. ืœื‘ื—ื•ืจ ื˜ื›ื ื•ืœื•ื’ื™ื” ืฉื›ื•ืœื ืžืฉืชืžืฉื™ื ื‘ื” ืžื‘ื˜ื™ื— ืฉืžื’ื‘ืœื” ื˜ื›ื ื•ืœื•ื’ื™ืช ืœื ืชื›ืจื™ื— ืื•ืชืš ืœืฉื›ืชื‘ ืืช ื›ืœ ื”ืงื•ื“ ื‘ืขื•ื“ ืฉื ื” ื›ืฉื”ืคืจื•ื™ืงื˜ ื™ื’ื“ืœ. ื›ืŸ ืจื™ืืงื˜ ืžืกื•ื‘ืš, ื”ืืงื•ืกื™ืกื˜ื ืขืžื•ืก ื•ื›ืœ ื”ื–ืžืŸ ืฆืจื™ืš ืœื”ืชืขื“ื›ืŸ ื‘ืฉื™ื ื•ื™ื™ื ื•ืฉื™ื˜ื•ืช ืขื‘ื•ื“ื” ื—ื“ืฉื•ืช. ื›ืŸ ื”ืจื‘ื” ืื ืฉื™ื ืฉืขื•ื‘ื“ื™ื ื‘ืจื™ืืงื˜ ื”ื™ื•ื ืจื•ืื™ื ืืช ื”ื‘ืขื™ื•ืช ืฉื‘ื•. ืื‘ืœ ืœื, ื–ื” ืœื Scam ื•ื ื›ื•ืŸ ืœื”ื™ื•ื ื‘ืคืจื•ื™ืงื˜ ื’ื“ื•ืœ ื™ืฉ ืขื“ื™ื™ืŸ ื”ืจื‘ื” ื™ืชืจื•ื ื•ืช ื‘ื—ืœื•ืงืช ื”ืžืขืจื›ืช ืœืงื•ื“ ืฆื“ ืฉืจืช ืฉืžื—ื–ื™ืจ JSON-ื™ื ื“ืจืš API (ืœื ืžืฉื ื” ืื REST ืื• GraphQL) ื•ืงื•ื“ ืฆื“ ืœืงื•ื— ืขืฆืžืื™ ืฉืื—ืจืื™ ืขืœ ื”ืชืฆื•ื’ื”.

ToCode
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 ื™ืฆืจื• ื‘ืคืขืžื™ื ื”ืงื•ื“ืžื•ืช ืฉื™ื›ืœื ื• ืœื›ืชื•ื‘ ืื•ืชื ื”ื™ื ืฉื™ืžื•ืฉ ื™ืชืจ ืขืœ ื—ืฉื‘ื•ืŸ ืžื ื’ื ื•ื ื™ื ืคืฉื•ื˜ื™ื ื•ืžื•ื›ืจื™ื ื™ื•ืชืจ. ื›ืœ ื›ื•ืชื‘ื™ ื”ืกืคืจื™ื•ืช ืฉืœ ื”ืขื•ืœื ื”ื—ืœื™ื˜ื• ืฉืขื“ื™ืฃ ืœื”ื•ืกื™ืฃ ืฉื˜ืจื•ื“ืœ ืžืขืœ ืงืœืืก ืื• ืคื•ื ืงืฆื™ื” ืžืืฉืจ ืคืฉื•ื˜ ืœืงืจื•ื ืœืคื•ื ืงืฆื™ื” ืžื”ืกืคืจื™ื” ืฉืœื”ื, ืืคื™ืœื• ืฉื“ืจื™ืฉื” ื›ื–ื• ืœื ืชืžื™ื“ ื”ื™ืชื” ืœื˜ื•ื‘ืช ื”ืงื•ื“ ืฉืžืฉืชืžืฉ ื‘ืกืคืจื™ื”.

ToCode
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 {

ToCode
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 PySide6

ToCode
1 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 ื”ืžืœื.

ToCode
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.

ToCode
1 420
# ื‘ืื’ื™ื ื‘ืœืชื™ ื ืจืื™ื ื›ืœื™ ืคื™ืชื•ื— ื˜ื•ื‘ื™ื ื”ื ืงื•ื“ื ื›ืœ ื›ืœื™ื ืฉื™ื•ื“ืขื™ื ืœื”ืฆื‘ื™ืข (ื‘ืจืžืช ื“ื™ื•ืง ื’ื‘ื•ื”ื”) ืขืœ ืงื•ื“ ืฉื ืจืื” ื›ืžื• ื‘ืื’. ื•ื›ืŸ, ื›ืœื™ ืคื™ืชื•ื— ืงืฉื•ืจื™ื ืœืฉืคื” ื•ืขื•ื‘ื“ื™ื ื™ื—ื“ ืื™ืชื”. ื‘ื“ื•ื’ืžื” ืงืœืืกื™ืช ืž JavaScript, ื”ืงื•ื“ ื”ื–ื” ืฉื’ื•ื™ ืื‘ืœ ืœ eslint ืœื ืื›ืคืช:
function countUntil(n) {
  let i=0;
  while(i < n)
    console.log(i);
    i++;
}

countUntil(10);
ืงืœ ืœืจืื•ืช ืฉื”ืฉื•ืจื” ื”ืฉื ื™ื” ื‘"ื‘ืœื•ืง" ื” while ื”ื™ื ื‘ืขืฆื ื‘ื›ืœืœ ืœื ื‘ื‘ืœื•ืง ื” while, ื•ืœื›ืŸ ื”ืœื•ืœืื” ืชืจื•ืฅ ืขื“ ืื™ื ืกื•ืฃ. ื‘ืฉื‘ื™ืœ ืœืชืงืŸ ืื ื™ ืœื ืฆืจื™ืš ืœืขื‘ื•ืจ ืœืคื™ื™ืชื•ืŸ, ืžืกืคื™ืง ืœื”ื•ืกื™ืฃ ืœ eslint ืืช ื”ื›ืœืœ indent ื›ื“ื™ ืฉื”ื•ื ื™ืฆืขืง ืฉื”ืฉื•ืจื” i++ ืœื ื‘ืžืงื•ื. ืื—ืช ื”ืขื‘ื•ื“ื•ืช ื”ื—ืฉื•ื‘ื•ืช ืฉืœื ื• ื›ืžืชื›ื ืชื™ื ื”ื™ื ืœืžืฆื•ื ืืช ื”ื›ืœื™ื ื”ื ื›ื•ื ื™ื - ืœื ื”ื›ืœื™ื ืฉื™ื›ืชื‘ื• ื‘ืžืงื•ืžื ื• ืืช ื”ืงื•ื“, ืืœื ืงื•ื“ื ื›ืœ ื”ื›ืœื™ื ืฉื™ืฆื‘ื™ืขื• ืขืœ ืฉื’ื™ืื•ืช ืฉืื•ืœื™ ืœืขื™ืŸ ืงืœ ืœืคืกืคืก.

ToCode
1 420
# ื”ืžืกืžืš ื”ื›ื™ ื—ืฉื•ื‘ ืฉืืชื ืœื ื›ื•ืชื‘ื™ื ืฉื™ื“ืจื•ื’ื™ ืชื•ื›ื ื” ื–ื” ืงืฉื” ื•ื›ื›ืœ ืฉื”ืžืขืจื›ืช ื‘ืฉืœื” ื•ืžื•ืจื›ื‘ืช ื™ื•ืชืจ ื–ื” ืจืง ื ื”ื™ื” ื™ื•ืชืจ ืžืกื•ื‘ืš. ื‘ืขื™ื” ืจืืฉื•ื ื” ื•ืžื•ื›ืจืช ื”ื™ื ืฉื’ื™ืจืกืื•ืช ื—ื“ืฉื•ืช ืฉืœ ืชืœื•ื™ื•ืช ื™ื•ืฆืื•ืช ื›ืœ ื”ื–ืžืŸ, ืœืคืขืžื™ื ื‘ืืžืช ืžืชืงื ื•ืช ื‘ืขื™ื•ืช ืื‘ืœ ื”ืจื‘ื” ืคืขืžื™ื ื’ื ืฉื•ื‘ืจื•ืช ืชืื™ืžื•ืช API. ืฉื™ื“ืจื•ื’ ืชืœื•ื™ื•ืช ื™ื›ื•ืœ ืœืฉื‘ื•ืจ ื”ืจื‘ื” ื“ื‘ืจื™ื ื‘ืžืขืจื›ืช. ื‘ืขื™ื” ืฉื ื™ื” ื•ืืคื™ืœื• ื™ื•ืชืจ ืžื˜ืจื™ื“ื” ื”ื™ื ืฉื›ืžื•ืช ื”ืžืขืจื›ื•ืช ืฉื™ืฉ ืœื”ืŸ ืชืœื•ื™ื•ืช ื’ื“ืœื”, ื•ืงื•ืจื” ืฉืื ื—ื ื• ืžืื‘ื“ื™ื ืงืฉืจ ืขื ื›ืœ ื”ืชืœื•ื™ื•ืช ืฉืฆืจื™ืš ืœืฉื“ืจื’ ื•ืื™ืš ืœืฉื“ืจื’ ื›ืœ ื“ื‘ืจ. ื‘ืžืขืจื›ืช Full Stack ื˜ื™ืคื•ืกื™ืช ื™ื”ื™ื• ืœื ื• ืืช ืžืขืจื›ืช ื”ื”ืคืขืœื” ืฉืœ ื”ืฉืจืช, ื’ื™ืจืกืื•ืช ืฉืœ ื›ืœ ื”ืกืคืจื™ื•ืช ื”ืžื•ื‘ื ื•ืช ื‘ืžืขืจื›ืช ื”ื”ืคืขืœื”, ื‘ืกื™ืก ื”ื ืชื•ื ื™ื, ืžืขืœ ื–ื” ืชื•ื›ื ื•ืช ื ืœื•ื•ืช ืฉื”ืชืงื ื• ื‘ืฉื‘ื™ืœ ื”ืืคืœื™ืงืฆื™ื”, ื›ืฉื”ืืคืœื™ืงืฆื™ื” ืจืฆื” ื‘ืชื•ืš Docker Container ืื– ืงื‘ืฆื™ ื” Dockerfile ืžืชื™ื—ืกื™ื ืœืชื•ื›ื ื•ืช ื‘ื’ื™ืจืกืื•ืช ืžืกื•ื™ืžื•ืช (ื•ื’ื ืื•ืชืŸ ืฆืจื™ืš ืœืฉื“ืจื’), ื•ื‘ืจืžืช ื”ืืคืœื™ืงืฆื™ื” ื” requirements.txt, Gemfile ืื• package.json ืฆืจื™ื›ื™ื ื˜ื™ืคื•ืœ ื•ืฉื“ืจื•ื’. ืœื›ืŸ ื‘ืžืงื•ื ืœื”ื’ื™ื“ "ื ืฉื“ืจื’ ื›ืฉื™ื”ื™ื” ื–ืžืŸ" ืื• ืœืฉื“ืจื’ ื›ืฉืžืฉื”ื• ื ืฉื‘ืจ, ืžื•ืžืœืฅ ืœืงื‘ืข ืืช ื”ืฉื™ื“ืจื•ื’ื™ื ื‘ืžืกืžืš ืื—ื“ ืฉืื•ืžืจ ื”ื›ืœ. ื˜ื‘ืœืช ืืงืกืœ ืชืขื‘ื•ื“ ืคื” ื˜ื•ื‘, ืื‘ืœ ืืคืฉืจ ื’ื ืงื•ื‘ืฅ ื˜ืงืกื˜ ืคืฉื•ื˜. ื”ืขืžื•ื“ื•ืช ื™ื”ื™ื• "ืžื”", "ืื™ืš ืœืฉื“ืจื’", "ืžืชื™ ืฉื“ืจื’ื ื• ืคืขื ืื—ืจื•ื ื”", "ืชืืจื™ืš ืฉื™ื“ืจื•ื’ ื”ื‘ื", ืœื“ื•ื’ืžื”: 1. ื‘ืกื™ืก ื”ื ืชื•ื ื™ื, ืงื™ืฉื•ืจ ืœืžื“ืจื™ืš ืฉืžืกื‘ื™ืจ ืื™ืš ืœืฉื“ืจื’ ืืช ื‘ืกื™ืก ื”ื ืชื•ื ื™ื, ืฉื•ื“ืจื’ ืœืื—ืจื•ื ื” ื‘ XXX, ื™ืฉื•ื“ืจื’ ืคืขื ื”ื‘ืื” ื‘ YYY. 2. ืงื•ื‘ืฅ ื” Dockerfile ืฉืœ ื”ืฉืจืช, ืงื™ืฉื•ืจ ืœืžืกืžืš ืฉืžืกื‘ื™ืจ ืื™ืš ืœืฉื“ืจื’, ืฉื•ื“ืจื’ ืœืื—ืจื•ื ื” ื‘ XXX ื™ืฉื•ื“ืจื’ ืคืขื ื”ื‘ืื” ื‘ YYY. 3. ืชืœื•ื™ื•ืช ืฆื“-ืœืงื•ื— ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ื”ืจืืฉื™ืช, ืงื™ืฉื•ืจ ืœืžืกืžืš ืฉืžืกื‘ื™ืจ ืื™ืš ืœืฉื“ืจื’, ืฉื•ื“ืจื’ ืœืื—ืจื•ื ื” ื‘ XXX, ื™ืฉื•ื“ืจื’ ืคืขื ื”ื‘ืื” ื‘ YYY. ื˜ื‘ืœืช ืืงืกืœ ืžืกื•ื“ืจืช ืขื ืœื™ื ืงื™ื ืฉืชืขื•ื“ื›ืŸ ื‘ื›ืœ ืฉื™ื“ืจื•ื’ ื™ื›ื•ืœื” ืœื”ืคื•ืš ืืช ื”ืฉื™ื“ืจื•ื’ื™ื ืœื—ื•ื•ื™ื” ื”ืจื‘ื” ืคื—ื•ืช ืžืœื—ื™ืฆื” ื•ื‘ืœื™ ืœืฉื›ื•ื— ืืฃ ื—ืœืง ื‘ืžืขืจื›ืช.

ToCode - Estadรญsticas y analรญtica del canal de Telegram @tocodeil