uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

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

Ko'proq ko'rsatish
1 418
Obunachilar
-224 soatlar
-37 kunlar
-630 kunlar
Postlar arxiv
ToCode
1 418
ืื ื—ื ื• ื™ื•ืชืจ ื—ื›ืžื™ื ื”ื™ื•ื ื›ืฉื“ื‘ืจื™ื ืฉื‘ื•ืจื™ื ื‘ืžืขืจื›ืช ื™ืฉ ื ื˜ื™ื™ื” ืœื”ืฉืงื™ืข ืคื—ื•ืช ื’ื ื‘ืžื ื’ื ื•ื ื™ื ื”ื—ื“ืฉื™ื. ื‘ืฉื‘ื™ืœ ืžื” ืœื‘ื ื•ืช ืืช ื”ื“ื‘ืจ ื”ื—ื“ืฉ ื ื›ื•ืŸ ื›ืฉื™ืฉ ืœื™ ื›ืœ ื›ืš ื”ืจื‘ื” ื—ืœื•ื ื•ืช ืฉื‘ื•ืจื™ื ? ืขื“ื™ืฃ ื›ื‘ืจ ืฉื™ืขื‘ื•ื“. ื›ืฉื”ืžืฆื‘ ื›ืœ ื›ืš ื’ืจื•ืข ืฉื™ืคื•ืจ ืงื˜ืŸ, ื’ื ืื ืœื ืžื‘ื•ืฆืข ื‘ื“ื™ื•ืง ื›ืžื• ืฉืฆืจื™ืš ื™ื”ื™ื” ื”ืจื™ ืฆืขื“ ื‘ื›ื™ื•ื•ืŸ ื”ื ื›ื•ืŸ. ื›ืฉื”ืžื—ืฉื‘ื•ืช ื”ืืœื” ืžื’ื™ืขื•ืช ืื ื™ ืžื–ื›ื™ืจ ืœืขืฆืžื™ ืืช ื”ืžืฉืคื˜ "ืื ื—ื ื• ื™ื•ืชืจ ื—ื›ืžื™ื ื”ื™ื•ื". ื ื›ื•ืŸ, ืœืคื ื™ 5 ืฉื ื™ื ื‘ื ื™ื ื• ืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉืœื ื”ื™ืชื” ืžืฉื”ื•, ื•ื ื›ื•ืŸ ืขื›ืฉื™ื• ืื ื—ื ื• ืจื•ืื™ื ืืช ื›ืœ ื”ื‘ืขื™ื•ืช ืฉืœื”, ื•ื ื›ื•ืŸ ืืคืฉืจ ืœืกืชื•ื ืืช ื”ื—ื•ืจ ื‘ืฆื ืจืช ื•ื–ื” ื™ื—ื–ื™ืง ืขื“ ื”ืคื™ืฆื•ืฅ ื”ื‘ื, ืื‘ืœ ืื ื›ื‘ืจ ืžืชืงื ื™ื ืฉื•ื•ื” ืœื”ืฉืงื™ืข ืืช ื”ืžืืžืฅ ื•ืœืชืงืŸ ื ื›ื•ืŸ. ื–ื” ืœื ื™ืคืชื•ืจ ืืช ื›ืœ ื‘ืขื™ื•ืช ื”ืขื•ืœื ืื‘ืœ ืชื™ืงื•ืŸ ื ื›ื•ืŸ ื•ืขื•ื“ ืชื™ืงื•ืŸ ื ื›ื•ืŸ ืœืื˜ ืœืื˜ ืžื–ื™ื–ื™ื ืืช ื”ืกืคื™ื ื” ืœื›ื™ื•ื•ืŸ ื˜ื•ื‘ ื™ื•ืชืจ. ืื ื—ื ื• ื™ื•ืชืจ ื—ื›ืžื™ื ื”ื™ื•ื. ืžื•ืชืจ ืœื‘ื ื•ืช ื“ื‘ืจื™ื ื˜ื•ื‘ ื™ื•ืชืจ.

ToCode
1 418
ืื™ืš ืœื”ื’ื™ืข ืœืžื™ื“ืข ื”ื ื›ื•ืŸ ื‘ื—ืžื™ืฉื” ืฆืขื“ื™ื ื›ืฉืžื ืกื™ื ืœืœืžื•ื“ ื˜ื›ื ื•ืœื•ื’ื™ื” ื—ื“ืฉื” ืื ื—ื ื• ื ื›ื ืกื™ื ืœืขื•ืœื ื—ื“ืฉ ื•ืžื•ืคืœื, ืื‘ืœ ื”ื‘ืขื™ื” ื‘ืขื•ืœื ื”ื–ื” ื”ื™ื ืฉืื™ืŸ ื‘ืืžืช ืžื“ืจื™ืš, ืื• ื™ื•ืชืจ ื ื›ื•ืŸ ืžืจื•ื‘ ืชื™ืขื•ื“ ืœื ืจื•ืื™ื ืืช ื”ื“ืจืš ื”ื ื›ื•ื ื” ื‘ื™ื•ืชืจ ืขื‘ื•ืจื ื•. ื–ื” ื”ืžืกืœื•ืœ ืฉืื ื™ ืื•ื”ื‘ ืœืงื—ืช ื›ื“ื™ ืœื ืœืœื›ืช ืœืื™ื‘ื•ื“ ื‘ืชื™ืขื•ื“ ื›ืฉื”ืคืจื™ื™ืžื•ื•ืจืง ื™ื•ืชืจ ืžื“ื™ ื’ื“ื•ืœ. ืžื” ื‘ืขืฆื ื”ื‘ืขื™ื” ื‘ืกืคืจื™ื•ืช ืงื˜ื ื•ืช ืžืกืคื™ืง ืœืงืจื•ื 10 ื“ืงื•ืช ืืช ืžื“ืจื™ืš ื” "Getting Started" ื‘ืฉื‘ื™ืœ ืœื”ื‘ื™ืŸ ืžื™ ื ื’ื“ ืžื™. ืื ื”ืกืคืจื™ื” ื—ื“ืฉื” ืื– ื‘ื›ืœืœ ืฉืžื— ื›ื™ ื™ืฉ ืจืง ื“ืจืš ืื—ืช ืœืขืฉื•ืช ื“ื‘ืจื™ื, ืื ืฉื™ื ืœื ื›ืชื‘ื• ืขืœื™ื” ื™ื•ืชืจ ืžื“ื™ ื•ืœื ืžืฆืื• ื˜ืจื™ืงื™ื ื•ื“ืจื›ื™ื ืœืจืžื•ืช ืืช ื”ืžืขืจื›ืช. ื›ื›ืœ ืฉื”ืกืคืจื™ื” ื’ื“ื•ืœื” ื•ื•ืชื™ืงื” ื™ื•ืชืจ ื”ืขื ื™ื™ื ื™ื ืžืกืชื‘ื›ื™ื. ื›ืœ API ืฉื”ืฉืชื ื” ืื•ืžืจ ืฉืื ื—ื ื• ื”ื•ืœื›ื™ื ืœืžืฆื•ื ื‘ืจืฉืช ืชื™ืขื•ื“ ื’ื ืขืœ ื” API ื”ื™ืฉืŸ ื•ื’ื ืขืœ ื”ื—ื“ืฉ, ื•ืื ื”ื’ื™ืจืกื” ื”ื™ืฉื ื” ืขื“ื™ื™ืŸ ื ืชืžื›ืช ื™ื”ื™ื• ืœื ื• ื”ืชืœื‘ื˜ื•ื™ื•ืช ืื™ืš ืœืขืฉื•ืช ื“ื‘ืจื™ื ื•ืื ืฆืจื™ืš ื‘ื›ืœืœ ืœื”ืฉืชืžืฉ ื‘ื’ื™ืจืกื” ื”ื—ื“ืฉื” ืฉืœ ื” API. ื›ืฉืจื™ืืงื˜ ืขื‘ืจื• ืœืขื‘ื•ื“ ืขื Hooks ืขื“ื™ื™ืŸ ื”ืจื‘ื” ืžื”ืชื™ืขื•ื“ ื”ื›ื™ืœ ื“ื•ื’ืžืื•ืช ืฉืœ ืงืœืืกื™ื. ื•ื™ื• ืžื›ื™ืœ ืขื“ื™ื™ืŸ ื”ืจื‘ื” ื“ื•ื’ืžืื•ืช ืฉืœ Options API ื›ื•ืœืœ ื‘ืืชืจ ื”ืจืฉืžื™, ื•ืขืœ ืจื™ื™ืœืก ืื ื™ ืœื ืจื•ืฆื” ื‘ื›ืœืœ ืœื”ืชื—ื™ืœ ืœื“ื‘ืจ. ืœืฆืขืจื ื• AI ืจืง ืžื—ืžื™ืจื™ื ืืช ื”ื‘ืขื™ื” ื›ื™ ื”ื ืœืžื“ื• ื“ืจืš ื”ืื™ื ื˜ืจื ื˜ ื•ืœื›ืŸ ื”ื ืžื›ื™ืจื™ื ืืช ื›ืœ ื”ืชื—ื‘ื™ืจื™ื ืื‘ืœ ืœื ืชืžื™ื“ ื™ื•ื“ืขื™ื ืœื‘ื—ื•ืจ ื‘ืฉื‘ื™ืœื ื• ืืช ื”ืชื—ื‘ื™ืจ ืฉื ื›ื•ืŸ ืœ Use Case ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื. ื‘ืžื™ื•ื—ื“ ื‘ืชื—ื™ืœืช ื”ื“ืจืš ื”ืกื›ื ื” ื‘ืœื™ืžื•ื“ ื”ื“ื‘ืจ ื”ืœื ื ื›ื•ืŸ ื”ื™ื ื’ื“ื•ืœื”. ืžืชื—ื™ืœื™ื ื‘ืืชืจ ื”ืชื™ืขื•ื“ ื”ืจืฉืžื™. ื”ืฆืขื“ ื”ืจืืฉื•ืŸ ืฉืœื™ ื‘ืœื™ืžื•ื“ ื˜ื›ื ื•ืœื•ื’ื™ื” ื—ื“ืฉื” ื”ื•ื ื”ืืชืจ ื”ืจืฉืžื™ ืฉืœ ืื•ืชื” ืกืคืจื™ื”. ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ื“ืฃ ื”ื’ื™ื˜ื”ืื‘ ืฉืœื”ื ืื• ืืชืจ ืฉื”ื ื‘ื ื•. ื”ื›ื™ ื˜ื•ื‘ ืื ื™ืฉ ื‘ื• ืžื“ืจื™ืš ืœืžืฉืชืžืฉ ืื• ื“ืฃ Getting Started. ื”ืžื˜ืจื” ืœื”ื•ืฆื™ื ืžื›ืืŸ ื›ืžื” ืฉื™ื•ืชืจ ืžื™ื“ืข ืื‘ืœ ืœื ืœื˜ื‘ื•ืข. ืื ืชืœื›ื• ืœืžื“ืจื™ืš ื”ืจืฉืžื™ ืฉืœ ืจื™ื™ืœืก ืชืžืฆืื• ืื™ื ืกื•ืฃ ื—ื•ืžืจ ื•ืœื›ืŸ ืœื ื”ื’ื™ื•ื ื™ ืœืงืจื•ื ืืช ื›ืœ ื”ืžื“ืจื™ื›ื™ื ื›ืฉืืชื ืจืง ืžืชื—ื™ืœื™ื, ื‘ืžืงื•ื ื–ื” ืชื•ื›ืœื• ืœื”ืชื—ื™ืœ ืขื ื“ืฃ ื” Getting Started ืฉืœื”ื ืžืชื•ืš ื”ื‘ื ื” ืฉืขื•ื“ ืชื—ื–ืจื• ืœืฉืืจ ื”ืžื“ืจื™ื›ื™ื ื‘ื”ืžืฉืš. ื ืขื–ืจื™ื ื‘ Chat GPT ื›ื“ื™ ืœื‘ื ื•ืช ื“ื‘ืจื™ื, ืžืชื•ืš ื”ื‘ื ื” ืฉื”ื ืœื ื™ื”ื™ื• ื˜ื•ื‘ื™ื. ืื—ืจื™ ืฉืœืžื“ื ื• ืืช ื”ื‘ืกื™ืก ืฉืฆืจื™ืš ื‘ืฉื‘ื™ืœ ืœื›ืชื•ื‘ ื“ื‘ืจื™ื ื”ื’ื™ืข ื”ื–ืžืŸ ืœื—ืงื•ืจ. ืคื” ื” AI ื”ื•ื ื—ื‘ืจ ื˜ื•ื‘ ืืคืฉืจ ืœื”ื™ืขื–ืจ ื‘ Chat GPT, ืงืœื•ื“ ืื• ื“ื™ืคืกื™ืง ืื• ื›ืœ ื—ื‘ืจ ืื—ืจ ืฉืœื›ื ื›ื“ื™ ืœื”ืชื—ื™ืœ ืœื›ืชื•ื‘ ืงื•ื“, ืœืงื‘ืœ ืชืฉื•ื‘ื•ืช ื‘ืžื” ืœื”ืฉืชืžืฉ ื•ืœืงื‘ืœ Code Review ืขืœ ื”ืงื•ื“ ืฉื›ืชื‘ืชื. ืื—ืจื™ ืฉื™ืฉ ืœื›ื ื›ืžื” ื“ื‘ืจื™ื ืฉืขื•ื‘ื“ื™ื ืชื•ื›ืœื• ืœื—ื–ื•ืจ ืœืžื“ืจื™ื›ื™ื ื”ืจืฉืžื™ื™ื ื›ื“ื™ ืœืœืžื•ื“ ื™ื•ืชืจ, ื•ืžื›ืืŸ ืžืชื—ื™ืœ ืคื™ื ื’-ืคื•ื ื’ ื‘ื™ืŸ ื‘ื ื™ื™ื” ืœืงืจื™ืื”. ืžื—ืคืฉื™ื ืื ื™ืฉ ืื ืฉื™ื ืื—ืจื™ื ืฉื‘ื ื• ื“ื‘ืจื™ื ื“ื•ืžื™ื ื•ืžื•ื›ื ื™ื ืœืกืคืจ ืขืœ ื–ื”. ืื—ืจื™ ืฉื™ืฉ ืœื›ื ื”ื‘ื ื” ืžืกื•ื™ืžืช ืฉืœ ื”ืกืคืจื™ื” ื•ื‘ื ื™ืชื ื›ืžื” ื“ื‘ืจื™ื ื™ื”ื™ื” ืžืขื ื™ื™ืŸ ืœืžืฆื•ื ืื ืฉื™ื ืื—ืจื™ื ืฉื‘ื ื• ื“ื‘ืจื™ื ื“ื•ืžื™ื ื•ืžื•ื›ื ื™ื ืœืกืคืจ ืขืœ ื–ื”. ื‘ื ื™ืชื ืžืฉื—ืง ืกื ื™ื™ืง ื‘ pygame? ืžืขื•ืœื”, ืขื›ืฉื™ื• ืชื—ืคืฉื• ืคื•ืกื˜ื™ื ื‘ืจืฉืช ืฉืœ ืื ืฉื™ื ืฉื‘ื ื• ืืช ืื•ืชื• ืžืฉื—ืง ื‘ืคื™ื™ื’ื™ื™ื ื•ืชืจืื• ืžื” ื”ื ืขืฉื• ื“ื•ืžื” ืื• ืฉื•ื ื” ืžื›ื. ื›ืชื‘ืชื ื’ืจืคื™ื ื›ื“ื™ ืœื”ื‘ื™ืŸ data ื‘ืขื–ืจืช echarts? ืžืฆื•ื™ืŸ ืขื›ืฉื™ื• ืœื›ื• ืœื—ืคืฉ ืื ืฉื™ื ืื—ืจื™ื ืฉื ื™ืชื—ื• ืžื™ื“ืข ื‘ืืžืฆืขื•ืช ืกืคืจื™ื” ื–ื• ื•ืชื‘ื™ื ื• ืžื” ื”ื ืขืฉื• ื“ื•ืžื” ืื• ืฉื•ื ื” ืžื›ื. ื‘ื ืงื•ื“ื” ื”ื–ืืช ืื ื—ื ื• ืขื“ื™ื™ืŸ ืœื ื‘ืื™ื ื›ื“ื™ ืœืฉืคื•ื˜ ืืœื ื›ื“ื™ ืœืœืžื•ื“, ืื ื—ื ื• ืžื•ื›ื ื™ื ืœืงื‘ืœ ืฉื˜ืขื™ื ื• ืื ื ืžืฆื ืจืขื™ื•ืŸ ืฉื ืจืื” ื˜ื•ื‘ ื™ื•ืชืจ ื‘ืจืฉืช ืื‘ืœ ืžืกืคื™ืง ื‘ื˜ื•ื—ื™ื ื‘ืขืฆืžื ื• ื›ื“ื™ ืœื ืœื‘ืœื•ืข ื›ืœ ืจืขื™ื•ืŸ ืื• ื”ืฆืขื”. ืžื—ืคืฉื™ื Style Guides ื• Best Practices. ืื—ืจื™ ืฉืจืื™ื ื• ื›ืžื” ื“ืจื›ื™ื ื•ื ืขื–ืจื ื• ื‘ AI ื›ื“ื™ ืœื”ื‘ื™ืŸ ื˜ื•ื‘ ื™ื•ืชืจ ืืช ื”ื”ื‘ื“ืœื™ื ื‘ื™ืŸ ื”ืคื™ืชืจื•ื ื•ืช ืื ื—ื ื• ื‘ืžืงื•ื ื˜ื•ื‘ ื›ื“ื™ ืœื—ืคืฉ ืžื“ืจื™ื›ื™ Best Practices ืจืฉืžื™ื™ื ืขืœ ื”ื˜ื›ื ื•ืœื•ื’ื™ื”. ื‘ืžื“ืจื™ื›ื™ื ืืœื” ื ืžืฆื ื‘ื“ื™ื•ืง ืืช ื”ื”ืชืœื‘ื˜ื•ื™ื•ืช ืฉื”ื™ื• ืœื ื• ืขื ืขืฆื•ืช ืคืจืงื˜ื™ื•ืช ืื™ื–ื” ืฉื™ื˜ื” ื˜ื•ื‘ื” ื™ื•ืชืจ ื•ืœืžื”. ืžืงืฉื™ื‘ื™ื ืœืื ืฉื™ื ืฉื‘ืคื ื™ื. ืื—ืจื™ ืฉื’ื™ื‘ืฉื ื• ื“ืขื”, ื‘ื ื™ื ื• ื›ืžื” ื“ื‘ืจื™ื ื•ืขื‘ืจื ื• ืขืœ ื›ืœ ื”ืชื™ืขื•ื“ ื”ืจืฉืžื™ ืžื’ื™ืข ื”ื–ืžืŸ ืœื—ืคืฉ ืื ืฉื™ื ืžื‘ืคื ื™ื. ืœื ื‘ื’ืœืœ ืฉื”ื ื™ื•ื“ืขื™ื ื”ื›ื™ ื˜ื•ื‘ ืื™ืš ืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘ืžื•ืฆืจ ืฉืœื”ื (ืœืคืขืžื™ื ื”ื ื™ื•ื“ืขื™ื, ืœืคืขืžื™ื ื”ืฉื™ื˜ื” ืฉืœื”ื ืคื—ื•ืช ืžืชืื™ืžื” ืœื ื•), ืืœื ื‘ื’ืœืœ ืฉื”ื ืžื‘ื™ื ื™ื ืืช ื”ืžื•ืฆืจ ื”ื›ื™ ื˜ื•ื‘ ื•ืœื›ืŸ ื”ื‘ื ื” ืฉืœ ื”ืชืคื™ืกื” ืฉืœื”ื ืชืขื–ื•ืจ ืœื ื• ืœื—ื“ื“ ืืช ื”ื”ื‘ื ื” ืฉืœื ื•. ืžืชื›ื ืชื™ ืจื™ื™ืœืก ืžืงืฆื•ืขื™ื™ื ื”ืงืฉื™ื‘ื• ืœ DHH ืžืกืคืจ ืขืœ ืคื™ืชื•ื— ืชื•ื›ื ื”. ืื•ืœื™ ืœื ื”ืกื›ืžื ื• ืื™ืชื• ืื‘ืœ ืื ื—ื ื• ืžื‘ื™ื ื™ื ืืช ืชืคื™ืกืช ื”ืขื•ืœื ืฉืœื• ื•ืžื‘ื™ื ื™ื ืื™ืš ื–ื” ืžืฉืคื™ืข ืขืœ ื”ื›ื™ื•ื•ืŸ ืฉืœ ืจื™ื™ืœืก. ื›ืฉืžืงืฉื™ื‘ื™ื ืœื’ื™ื™ืจืžื• ืจืื•ืš ืžื‘ื™ื ื™ื ืœืืŸ ื•ืจืกืœ ื”ื•ืœื›ืช ื•ื”ื‘ืœื•ื’ ืฉืœ ื“ืŸ ืื‘ืจืžื•ื‘ ื”ื•ื ืขื“ื™ื™ืŸ ืžืงื•ื ืžืื•ื“ ื—ืฉื•ื‘ ืœืžื™ ืฉืจื•ืฆื” ืœื”ื‘ื™ืŸ ืืช ื”ื›ื™ื•ื•ืŸ ืืœื™ื• ืจื™ืืงื˜ ื”ื•ืœื›ืช.

ToCode
1 418
ืœืื—ืจ ืžื›ืŸ ืื ื™ ื™ื›ื•ืœ ืœื”ืกืชื›ืœ ืžื” ื ื•ืฆืจ ืขื ื”ืคืงื•ื“ื”:
$ awslocal cloudformation describe-stacks \
  --stack-name my-sqs-lambda-stack-2 
ื”ืคืœื˜ ืืฆืœื™ ื”ื•ื:
{
    "Stacks": [
        {
            "StackId": "arn:aws:cloudformation:us-east-1:000000000000:stack/my-sqs-lambda-stack-2/512113f2",
            "StackName": "my-sqs-lambda-stack-2",
            "Description": "CloudFormation template for SQS queue with Lambda consumer",
            "CreationTime": "2025-02-07T13:12:29.585000+00:00",
            "LastUpdatedTime": "2025-02-07T13:12:29.585000+00:00",
            "RollbackConfiguration": {},
            "StackStatus": "CREATE_COMPLETE",
            "DisableRollback": false,
            "NotificationARNs": [],
            "Capabilities": [
                "CAPABILITY_IAM"
            ],
            "Outputs": [
                {
                    "OutputKey": "QueueURL",
                    "OutputValue": "http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/my-sqs-lambda-stack-2-MyQueue-0becc311",
                    "Description": "URL of the SQS Queue"
                },
                {
                    "OutputKey": "QueueARN",
                    "OutputValue": "arn:aws:sqs:us-east-1:000000000000:my-sqs-lambda-stack-2-MyQueue-0becc311",
                    "Description": "ARN of the SQS Queue"
                },
                {
                    "OutputKey": "FunctionARN",
                    "OutputValue": "arn:aws:lambda:us-east-1:000000000000:function:my-sqs-lambda-stack-2-MyFunction",
                    "Description": "ARN of the Lambda Function"
                }
            ],
            "Tags": [],
            "EnableTerminationProtection": false,
            "DriftInformation": {
                "StackDriftStatus": "NOT_CHECKED"
            }
        }
    ]
}
ื•ื›ืžื•ื‘ืŸ ืžื” ืฉื”ื›ื™ ืžืขื ื™ื™ืŸ ืฉื ื–ื” ื” Outputs ืฉื ืื ื™ ืจื•ืื” ืืช ื”ืคืจื˜ื™ื ืฉืœ ื”ืชื•ืจ ื•ื”ืคื•ื ืงืฆื™ื” ืฉื ื•ืฆืจื•. ืื ื™ ืฉื•ืœื— ื”ื•ื“ืขื” ืœืชื•ืจ ืขื:
$ awslocal sqs send-message \
  --queue-url "http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/my-sqs-lambda-stack-2-MyQueue-0becc311" \
  --message-body '{"num1": "10", "num2": "10"}'
ื•ืžืกื™ื™ื ื‘ื—ื™ืคื•ืฉ ืคืœื˜ ื”ืคื•ื ืงืฆื™ื” ื‘ืœื•ื’. ื‘ืฉื‘ื™ืœ ื–ื” ืžืคืขื™ืœื™ื:
$ awslocal logs describe-log-groups
{
    "logGroups": [
        {
            "logGroupName": "/aws/lambda/my-sqs-lambda-stack-2-MyFunction",
            "creationTime": 1738933949640,
            "metricFilterCount": 0,
            "arn": "arn:aws:logs:us-east-1:000000000000:log-group:/aws/lambda/my-sqs-lambda-stack-2-MyFunction:*",
            "storedBytes": 12439
        }
    ]
}
ืžืžื ื• ืื ื—ื ื• ืœื•ืžื“ื™ื ืฉื‘ืœื•ื’ ื™ืฉ ืงื‘ื•ืฆื” ืื—ืช ื•ืจื•ืื™ื ืืช ื”ืฉื ืฉืœื”. ืื—ืจื™ ื–ื” ืขื ืฉื ื”ืงื‘ื•ืฆื” ืื ื™ ืžืคืขื™ืœ ืืช ื”ืคืงื•ื“ื” ื”ื‘ืื” ื›ื“ื™ ืœืจืื•ืช ืืช ื›ืœ ื”ืœื•ื’ื™ื ืฉืœ ื”ื™ื•ืžื™ื™ื ื”ืื—ืจื•ื ื™ื:
$ awslocal logs tail /aws/lambda/my-sqs-lambda-stack-2-MyFunction --since 2d

ToCode
1 418
ื ื™ืกื•ื™ localstack: ื”ืงืžืช ืชื•ืจ ื•ืคื•ื ืงืฆื™ื” ืœื˜ื™ืคื•ืœ ื‘ื”ื•ื“ืขื•ืช ืœื•ืงืืœืกื˜ืืง ื”ื•ื ื›ืœื™ ืœื”ืจืฆืช ื”ืจื‘ื” ืกืจื‘ื™ืกื™ื ืฉืœ AWS ื‘ืฆื•ืจื” ืžืงื•ืžื™ืช. ื”ื•ื ืžืฆื•ื™ืŸ ืœืคื™ืชื•ื— ืื• ื‘ื“ื™ืงื•ืช ื•ืื•ืœื™ ื’ื ืœืคืจื•ื“ืงืฉืŸ ื›ืฉืจื•ืฆื™ื ืœื—ืกื•ืš ื‘ืขืœื•ื™ื•ืช. ื‘ืฉื‘ื™ืœ ืœื”ื‘ื™ืŸ ืื™ืš ื”ื•ื ืขื•ื‘ื“ ื‘ื ื™ืกื•ื™ ื”ื™ื•ื ืื ื™ ื‘ื•ื ื” ืชื•ืจ ื”ื•ื“ืขื•ืช ืขืœ SQS ื•ืคื•ื ืงืฆื™ื™ืช lambda, ืขื ืžื™ืคื•ื™ ื‘ื™ื ื™ื”ื ืฉื’ื•ืจื ืœืคื•ื ืงืฆื™ื” ืœืจื•ืฅ ืื•ื˜ื•ืžื˜ื™ืช ื›ืฉื ื›ื ืกืช ื”ื•ื“ืขื” ื—ื“ืฉื” ืœืชื•ืจ. ืงื•ื“ ื”ืคื•ื ืงืฆื™ื” ื‘ืฉื‘ื™ืœ ื”ืžืฉื—ืง ื”ืคื•ื ืงืฆื™ื” ืœื ืฆืจื™ื›ื” ืœืขืฉื•ืช ื”ืจื‘ื”. ืคื•ื ืงืฆื™ื” ืฉืžื•ืคืขืœืช ื‘ืชื’ื•ื‘ื” ืœื”ื•ื“ืขื” ื‘ืชื•ืจ ืžืงื‘ืœืช ืคืจืžื˜ืจ event ืฉืžื™ื™ืฆื’ ืืช ื”ืื™ืจื•ืข ื•ื‘ื• ื™ืฉ ืฉื“ื” ื‘ืฉื Records ืฉืžื›ื™ืœ ืืช ื”ื”ื•ื“ืขื•ืช ืžืื™ืจื•ืข ื–ื” (ื”ืคืขืœื” ืื—ืช ื™ื›ื•ืœื” ืœื›ืœื•ืœ ืžื ื” ืฉืœ ืžืกืคืจ ื”ื•ื“ืขื•ืช). ื”ื”ื•ื“ืขื•ืช ื™ื”ื™ื• ืื•ื‘ื™ืงื˜ื™ JSON ืขื ืฉื“ื•ืช num1 ื• num2 ื•ื”ืคื•ื ืงืฆื™ื” ืชื“ืคื™ืก ืืช ืžื›ืคืœืช ื”ืžืกืคืจื™ื ืœืœื•ื’. ื–ื” ื”ืงื•ื“ ื‘ืงื•ื‘ืฅ index.js:
function handleRecord(body) {
  const product = body.num1 * body.num2;
  console.log(body);
  const response = {
    statusCode: 200,
    body: "The product of " + body.num1 + " and " + body.num2 + " is " + product,
  };
  console.log(response);
  return response;
}

exports.handler = async (event) => {
  try {
    for (const record of event.Records) {
      console.log(\record = \);
      console.log(record);
      handleRecord(JSON.parse(record.body));
    }
  } catch (_err) {
    console.log(\Error parsing body. Body was: ${event.body}\);
  }
};
ืื—ืจื™ ืฉื™ืฉ ืœื™ ืืช ื”ืงื•ื‘ืฅ ืื ื™ ืฉื•ืžืจ ืื•ืชื• ืœืงื•ื‘ืฅ zip ืขื ื”ืคืงื•ื“ื”:
$ zip function.zip index.js
ื•ืื ื—ื ื• ืžื•ื›ื ื™ื ืœื”ืžืฉื™ืš. ื™ืฆื™ืจืช ื”ืกื˜ืืง ืืคืฉืจ ืœื™ืฆื•ืจ ืื•ื‘ื™ืงื˜ื™ื ืขืœ AWS ืื—ื“ ืื—ื“ ืื• ื‘ืืžืฆืขื•ืช ืกืงืจื™ืคื˜ CloudFormation ืฉื™ื•ืฆืจ ืืช ื›ืœ ื”ืกื˜ืืง ื”ื˜ื›ื ื•ืœื•ื’ื™. ืื ื™ ืžืฉืชืžืฉ ื‘ืกืงืจื™ืคื˜ ื•ืœื›ืŸ ื™ื•ืฆืจ ืืช ื”ืงื•ื‘ืฅ stack.yml ืขื ื”ืชื•ื›ืŸ ื”ื‘ื:
AWSTemplateFormatVersion: '2010-09-09'
Description: 'CloudFormation template for SQS queue with Lambda consumer'

Resources:
  # SQS Queue
  MyQueue:
    Type: AWS::SQS::Queue
    Properties:
      VisibilityTimeout: 30

  # CloudWatch Log Group
  MyFunctionLogGroup:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: !Sub '/aws/lambda/${AWS::StackName}-MyFunction'
      RetentionInDays: 14

  # Lambda Function
  MyFunction:
    Type: AWS::Lambda::Function
    Properties:
      Code: 
        ZipFile: function.zip
      Handler: index.handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Runtime: nodejs18.x
      Timeout: 10
      FunctionName: !Sub '${AWS::StackName}-MyFunction'
      Environment:
        Variables:
          QUEUE_URL: !Ref MyQueue

  # Lambda Execution Role
  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
      Policies:
        - PolicyName: SQSAccess
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - sqs:ReceiveMessage
                  - sqs:DeleteMessage
                  - sqs:GetQueueAttributes
                Resource: !GetAtt MyQueue.Arn

  # Event Source Mapping to connect SQS to Lambda
  MyEventSourceMapping:
    Type: AWS::Lambda::EventSourceMapping
    Properties:
      BatchSize: 1
      Enabled: true
      EventSourceArn: !GetAtt MyQueue.Arn
      FunctionName: !Ref MyFunction

Outputs:
  QueueURL:
    Description: URL of the SQS Queue
    Value: !Ref MyQueue
  QueueARN:
    Description: ARN of the SQS Queue
    Value: !GetAtt MyQueue.Arn
  FunctionARN:
    Description: ARN of the Lambda Function
    Value: !GetAtt MyFunction.Arn
ื”ืกื˜ืืง ื™ื•ืฆืจ ืชื•ืจ, ืคื•ื ืงืฆื™ื” ื• EventSourceMapping ืฉื–ื” ื”ื—ื™ื‘ื•ืจ ื‘ื™ื ื™ื”ื. ื’ื•ื“ืœ ื”ืžื ื” ืฉื ื”ื•ื 1 ื•ืœื›ืŸ ื‘ืžืขืจืš ื”ื”ื•ื“ืขื•ืช ืฉืœ ื”ืคื•ื ืงืฆื™ื” ื ืจืื” ืชืžื™ื“ ืจืง ืจืฉื•ืžื” ืื—ืช. ื”ืคืขืœื” ื•ื‘ื“ื™ืงื” ื‘ืฉื‘ื™ืœ ืœื™ืฆื•ืจ ืืช ื”ืกื˜ืืง ืื ื™ ืžืจื™ืฅ:
$ awslocal cloudformation create-stack \
  --stack-name my-sqs-lambda-stack-2 \
  --template-body file://stack.yml \
  --capabilities CAPABILITY_IAM

ToCode
1 418
ืฉืชื™ ืฉืืœื•ืช ืงืฉื•ืช ืฉืืœื” ืจืืฉื•ื ื” - ื”ืื ืืชื ื”ื™ื•ื ืžืคืชื—ื™ื ื˜ื•ื‘ื™ื ื™ื•ืชืจ ืžืžื” ืฉื”ื™ื™ืชื ืœืคื ื™ ืฉื ื”? ื‘ื–ื›ื•ืช ืžื”? ืฉืืœื” ืฉื ื™ื” - ืžื” ืืชื ืขื•ืฉื™ื ื”ื™ื•ื ืœืขื ื•ืช "ื›ืŸ" ืขืœ ื”ืฉืืœื” ื”ืจืืฉื•ื ื” ื‘ืฉื ื” ื”ื‘ืื”. ื”ืŸ ืงืฉื•ืช ื›ื™ ื”ืŸ ืฉืžื•ืช ืžื•ืœื ื• ืžืจืื”: ืœื”ื™ื•ืช ื˜ื•ื‘ื™ื ื™ื•ืชืจ ื–ื• ื‘ื—ื™ืจื” ื•ื–ื” ืชื”ืœื™ืš. ืœืชื”ืœื™ืš ื”ื–ื” ื™ืฉ ืชื•ืฆืื” ื•ืื ื—ื ื• ื‘ื›ืœ ืจื’ืข ื™ื•ื“ืขื™ื ืื ื”ืฆืœื—ื ื• ืื• ืœื. ื™ื•ืชืจ ืžื–ื”, ื”ืŸ ืงืฉื•ืช ื›ื™ ื”ืŸ ืžื•ืจื™ื“ื•ืช ืžื”ืฉื•ืœื—ืŸ ืืช ื”ืœื—ืฅ ืฉืงืฉื•ืจ ืœืžื“ื“ื™ื ืื•ื‘ื™ื™ืงื˜ื™ื‘ื™ื (ืœืžืฆื•ื ืขื‘ื•ื“ื”, ืœืงื‘ืœ ื”ืขืœืื”) ื•ืžืขื‘ื™ืจื•ืช ืืช ื”ืคื•ืงื•ืก ืœืชื”ืœื™ืš ื”ืคื ื™ืžื™. ื•ื”ืŸ ืงืฉื•ืช ื›ื™ ื”ืŸ ื—ื•ืฉืคื•ืช ืืช ื”ืชืคื™ืกื•ืช ืฉืœื ื• ืœื’ื‘ื™ ืžื” ื–ื” ื ืงืจื ืžืชื›ื ืชื™ื ื˜ื•ื‘ื™ื ื™ื•ืชืจ. ื”ืื ืœื”ื™ื•ืช ืžืชื›ื ืชืช ื˜ื•ื‘ื” ื™ื•ืชืจ ืื•ืžืจ ืฉืื ื™ ืื›ื™ืจ ื™ื•ืชืจ ืคืจื™ื™ืžื•ื•ืจืงื™ื? ื™ื•ืชืจ ืืœื’ื•ืจื™ืชืžื™ื? ืื• ืฉืื•ืœื™ ื–ื” ืงืฉื•ืจ ืœืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœืœืžื•ื“ ืžื”ืจ ื™ื•ืชืจ ื˜ื›ื ื•ืœื•ื’ื™ื” ื—ื“ืฉื”? ืื• ืœื—ืฉื•ื‘ ื™ื•ืชืจ ืœืขื•ืžืง ืขืœ ืžืขืจื›ื•ืช ื•ืืจื›ื™ื˜ืงื˜ื•ืจื” ื•ืื™ืš ื“ื‘ืจื™ื ืžืชื—ื‘ืจื™ื? ืื• ืฉืื“ืข ืœืจืื•ืช ื˜ื•ื‘ ื™ื•ืชืจ ืืช ืžืงืจื™ ื”ืงืฆื” ืื• ื”ื‘ืขื™ื•ืช ื‘ืงื•ื“ ืžืกื•ื™ื? ื•ืื•ืœื™ ื–ื” ื‘ื›ืœืœ ืื•ืžืจ ืฉืื”ื™ื” ื™ื•ืชืจ ื˜ื•ื‘ ื‘ืขื‘ื•ื“ืช ืฆื•ื•ืช, ืื‘ื™ืŸ ื˜ื•ื‘ ื™ื•ืชืจ ืžื” ื”ื—ื‘ืจื™ื ืœืฆื•ื•ืช ื ื™ืกื• ืœืขืฉื•ืช ื‘ืงื•ื“ ืžืกื•ื™ื ื•ืื•ื›ืœ ืœื”ืฉืชืœื‘ ื‘ืคื™ืชื•ื— ืžืขืจื›ืช ื‘ืœื™ ืœืฉื‘ื•ืจ ืื•ืชื”? ืื• ืื•ืœื™ ื–ื” ืื•ืžืจ ืฉืื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘ื›ืœื™ AI ื˜ื•ื‘ ื™ื•ืชืจ ื›ื“ื™ ืœื‘ื ื•ืช ืžืขืจื›ืช ืžืœืื” ืžื”ืจ ื™ื•ืชืจ? ื™ืฉ ื”ืžื•ืŸ ื“ืจื›ื™ื ืœื”ืฉืชืคืจ. ื”ืฆืขื“ ื”ืจืืฉื•ืŸ ื”ื•ื ืœื”ื‘ื™ืŸ ืœืืŸ ืื ื—ื ื• ืจื•ืฆื™ื ืœื”ื’ื™ืข.

ToCode
1 418
ืžืชื™ ื›ื“ืื™ ืœืขืฉื•ืช Rewrite ืœื–ืจื•ืง ื•ืœื›ืชื•ื‘ ืžื—ื“ืฉ ืืช ื›ืœ ื”ืžืขืจื›ืช?! ื”ืฉืชื’ืขืช? ื›ืŸ ื™ืฉ ืœื ื• ื‘ืขื™ื•ืช ืื‘ืœ ื‘ื˜ื— ื”ืžืฆื‘ ืœื ื›ื–ื” ื—ืžื•ืจ... ื ื›ื•ืŸ? ืื™ืŸ ืกืคืง ืฉืœื–ืจื•ืง ืืช ื›ืœ ื”ืงื•ื“ ื•ืœื‘ื ื•ืช ื’ื™ืจืกื” ื—ื“ืฉื” ืžืืคืก ื–ื” ืืชื’ืจ ืจืฆื™ื ื™ ืขื ืกื™ื›ื•ื ื™ื ืžืฉืžืขื•ืชื™ื™ื ื•ื›ืžืขื˜ ืชืžื™ื“ ืขื“ื™ืฃ ืœืชืงืŸ ืืช ื”ืžื•ืฆืจ ื”ืงื™ื™ื, ื•ื‘ื›ืœ ื–ืืช ื™ืฉ ืžืฆื‘ื™ื ื‘ื”ื ื–ื” ื™ื›ื•ืœ ืœื”ืฉืชืœื, ืœื“ื•ื’ืžื” (ืžื”ืงืœ ืืœ ื”ืงืฉื”): 1. ื›ืฉืื™ืŸ ืžืฉืชืžืฉื™ื - ื”ื›ื™ ืงืœ, ืืฃ ืื—ื“ ืœื ื™ืชื’ืขื’ืข ืœืžื•ืฆืจ. 2. ื›ืฉื™ืฉ ืžืฉืชืžืฉื™ื ืื‘ืœ ืื™ืŸ ืฆื•ืจืš ื‘ืชื—ื–ื•ืงื” ื›ื™ ืื™ืŸ ืœื”ื ื“ืจื™ืฉื•ืช - ื•ืื– ืืคืฉืจ ืœื”ืงืคื™ื ืืช ื”ืขื‘ื•ื“ื” ืขืœ ื”ืžืขืจื›ืช ื”ืงื™ื™ืžืช ื•ืœื”ืขื‘ื™ืจ ืืช ื›ืœ ื”ืžืฉืื‘ื™ื ืœืฉื›ืชื•ื‘. 3. ื›ืฉื™ืฉ ืžืฉืชืžืฉื™ื ื•ื™ืฉ ืœื”ื ื“ืจื™ืฉื•ืช, ืื‘ืœ ื›ืœ ื ื™ืกื™ื•ืŸ ืฉืœื ื• ืœื”ืชืงื“ื ืฉื•ื‘ืจ ืžืฉื”ื• ืื—ืจ ื•ื–ืžืŸ ื”ืคื™ืชื•ื— ืœื“ื‘ืจื™ื ืžืื•ื“ ื‘ืกื™ืกื™ื™ื ืœื ืžืืคืฉืจ ืœืขื–ื•ืจ ืœืืฃ ืื—ื“. 4. ื›ืฉื™ืฆืื” ื˜ื›ื ื•ืœื•ื’ื™ื” ื—ื“ืฉื” ื•ืžื”ืคื›ื ื™ืช ืฉืžืืคืฉืจืช ืœื‘ื ื•ืช ืžื•ืฆืจ ืฉืคื•ืชืจ ืืช ืื•ืชื” ื‘ืขื™ื” ื‘ืฆื•ืจื” ื˜ื•ื‘ื” ื‘ื”ืจื‘ื” (ื”ื™ื•ืฉ Chat GPT). 5. ื›ืฉื”ืชื—ื–ื•ืงื” ืฉืœ ื”ืžืขืจื›ืช ืขื•ืœื” ื™ื•ืชืจ ืžืžื” ืฉื”ืžืขืจื›ืช ืžื›ื ื™ืกื”, ื•ืื™ืŸ ืฆืคื™ ืœื’ื™ื“ื•ืœ ืžืคืชื™ืข ื‘ื”ื›ื ืกื•ืช. ื•ืœืกื™ื•ื ืฉืืœื” - ื‘ืื™ื–ื” ืžืฆื‘ื™ื ืืชื ื–ื•ืจืงื™ื ืืช ื›ืœ ื”ืงื•ื“ ื•ืžืชื—ื™ืœื™ื ืžื—ื“ืฉ? ืงืจื” ืœื›ื ืฉื”ืฉื›ืชื•ื‘ ื”ืฆืœื™ื— ื˜ื•ื‘ ื™ื•ืชืจ ืžื”ืžื•ืฆืจ ื”ืžืงื•ืจื™? ื’ืจื•ืข ื™ื•ืชืจ? ืœื ื”ืกืชื™ื™ื ืžืขื•ืœื?

ToCode
1 418
ืชื–ืจื•ืง ืขืœื™ื• ื ืขืœื™ื™ื ื›ื‘ื ื™ ืื“ื ืื ื—ื ื• ืื•ื”ื‘ื™ื ืœืคืชื•ืจ ื‘ืขื™ื•ืช, ื•ื›ืžื• Chat GPT ื’ื ืืฆืœื ื• ื›ืฉืœื ืžื‘ื™ื ื™ื ืืช ื”ื‘ืขื™ื” ืžืชื—ื™ืœื™ื ืœื”ืžืฆื™ื: 1. ื ืกื” ืœืžื—ื•ืง ืืช ื” node_modules ื•ืœื”ืชืงื™ืŸ ืžื—ื“ืฉ. 2. ืชืขืฉื” ืจื™ืกื˜ืจื˜ ืœืฉืจืช. 3. ืชื—ื–ื•ืจ ืœื’ื™ืจืกื” ื™ืฉื ื” ืฉืœ ื”ืคืจื•ื™ืงื˜. 4. ืชืฉื“ืจื’ ืืช ื”ืชืœื•ื™ื•ืช. 5. ืชื•ืฆื™ื ืžื”ื—ืฉืžืœ, ืกืคื•ืจ ืขื“ 10 ื•ืชื—ื–ื™ืจ ื—ื–ืจื”. ืœืคืขืžื™ื ืื™ืŸ ื‘ืจื™ืจื”. ืื ื™ ื™ื•ื“ืข, ืœืคืขืžื™ื ื›ื•ืœื ื‘ืœื—ืฅ, ื”ืฉืจืช ื”ืคืกื™ืง ืœืขื‘ื•ื“, ืฆืจื™ืš ืขื›ืฉื™ื• ืฉื™ื—ื–ื•ืจ, ืื™ืŸ ืžื” ืœืขืฉื•ืช ืชื–ืจื•ืง ืขืœื™ื• ื ืขืœื™ื™ื ืขื“ ืฉื™ืชื—ื™ืœ ืœืชืคืงื“ ืฉื•ื‘. ื”ื‘ืขื™ื” ืขื ืœื–ืจื•ืง ื ืขืœื™ื™ื ืขืœ ื”ืฉืจืช ื”ื™ื ืœื ืฉื–ื” ืœื ืขื•ื‘ื“ (ื ื• ื˜ื•ื‘, ืงืฆืช ืฉื–ื” ืœื ืขื•ื‘ื“), ืืœื ืฉื–ื” ืžืžื›ืจ, ื•ื‘ืžื™ื•ื—ื“ ืื ืื™ื–ื” ื ืขืœ ื˜ืœื˜ืœื” ืื•ืชื• ื•ื”ื•ื ื—ื–ืจ ืœืขื‘ื•ื“. ื”ืžื˜ืจื” ืฉืœื ื• ื”ื™ื ืœื”ืชืจื’ืœ ืœื”ื™ื•ืช ืืœื” ืฉืขื•ืฆืจื™ื ืœื—ืฉื•ื‘ ื•ืžื•ื›ื ื™ื ืœื”ืชืืžืฅ ื›ื“ื™ ืœื”ื‘ื™ืŸ. ืœื–ืจื•ืง ื ืขืœื™ื™ื ืขืœ ื”ืฉืจืช ืจืง ืžืจื—ื™ืง ืื•ืชื ื• ืžืฉื. ื .ื‘. ืœื–ืจื•ืง ื ืขืœื™ื™ื ืขืœ ื”ืฉืจืช = ืœื–ืจื•ืง ืคืจื•ืžืคื˜ื™ื ืœ AI

ToCode
1 418
ืคื™ืชืจื•ืŸ Advent Of Code 2024 ื™ื•ื 4 ื‘ืฉืคืช Ruby ืืช ื”ืชืจื’ื™ืœ ื”ื–ื” ืงืœื•ื“ ืœื ื”ืฆืœื™ื— ืœืคืชื•ืจ, ืœืคื—ื•ืช ืœื ืขื ื”ืคืจื•ืžืคื˜ ื”ืคืฉื•ื˜ ืฉื”ื“ื‘ืงืชื™ ืœื•, ืœื›ืŸ ื›ื‘ืจ ื”ืจื’ืฉืชื™ ืฉืžื— ื›ืฉืคืชืจืชื™ ืื•ืชื• ืœื‘ื“. ื‘ืกื™ืคื•ืจ ืฉืœื ื• ื”ื™ื•ื ืื ื—ื ื• ืžืงื‘ืœื™ื ืงืœื˜ ื‘ืฆื•ืจื” ืฉืœ ืžื˜ืจื™ืฆื” ืขื ื›ืœ ืžื™ื ื™ ืื•ืชื™ื•ืช ืœืžืฉืœ:
..X...
.SAMX.
.A..A.
XMAS.S
.X....
ื‘ื—ืœืง ื”ืจืืฉื•ืŸ ืขืœื™ื ื• ืœืžืฆื•ื ืืช ื›ืœ ื”ืžื•ืคืขื™ื ืฉืœ ื”ืžื™ืœื” XMAS ื‘ืงืœื˜ ืื‘ืœ ื‘ื›ืœ ื”ื›ื™ื•ื•ื ื™ื (ื›ื•ืœืœ ืืœื›ืกื•ื ื™ื ื•ื”ืคื•ืš), ื›ืžื• ื‘ืชืคื–ื•ืจืช ืžื™ืœื™ื. ื‘ื—ืœืง ื”ืฉื ื™ ืฆืจื™ืš ืœื—ืคืฉ ืจืง ืžื•ืคืขื™ื ืฉืœ MAS ืฉืžื’ื™ืขื™ื ื‘ืฆื•ืจืช X ื›ืœื•ืžืจ:
M.S
.A.
M.S
ื•ื’ื ื”ื ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ื”ืคื•ื›ื™ื. ื”ืชืจื’ื™ืœ ื”ืžืงื•ืจื™ ื ืžืฆื ื‘ืขืžื•ื“ ืฉืœื”ื ื›ืืŸ: https://adventofcode.com/2024/day/4 ืคื™ืชืจื•ืŸ ื—ืœืง 1 ื‘ืฉื‘ื™ืœ ืฉื ื™ ื”ื—ืœืงื™ื ื”ื™ื” ืœื™ ื ื•ื— ืœืฉืžื•ืจ ืืช ื”ืงืœื˜ ื‘ืžื™ืœื•ืŸ, ื›ืฉื”ืžืคืชื— ื”ื•ื ืื™ื ื“ืงืก ื•ื”ืขืจืš ื”ื•ื ื”ืชื• ืฉื ืžืฆื ื‘ืื™ื ื“ืงืก ื”ื–ื”. ื‘ืชืจื’ื™ืœื™ื ืฉืœ AoC ืœืžื“ืชื™ ืฉื™ื•ืชืจ ืงืœ ืœืขื‘ื•ื“ ืขื ืžื™ืœื•ื ื™ื ื›ืืœื” ืžืืฉืจ ืขื ืžืขืจื›ื™ื ื“ื• ืžื™ืžื“ื™ื™ื. ื–ื” ื”ืงื•ื“ ืฉื™ื•ืฆืจ ืืช ื”ืžื™ืœื•ืŸ ื‘ืจื•ื‘ื™:
$matrix = File.read('input.txt').lines.each_with_index.flat_map do |line, line_index|
  line.split('').each_with_index.map do |char, column_index|
    {[line_index, column_index] => char }
  end
end.reduce({}) {|acc, val| acc.merge(val) }
ืงืฆืช ืืจื•ืš ืื‘ืœ ืขื•ื‘ื“. ืื ื™ืฉ ืœื›ื ืจืขื™ื•ื ื•ืช ื™ื•ืชืจ ืงืฆืจื™ื ืืคืฉืจ ืœืฉืชืฃ ื‘ืชื’ื•ื‘ื•ืช. ื”ืคื•ื ืงืฆื™ื” ื”ื‘ืื” ืฉื›ืชื‘ืชื™ ื”ื™ืชื” go ืฉืคืฉื•ื˜ ืžืชืงื“ืžืช ืžืกืคืจ ืฆืขื“ื™ื ื‘ื›ื™ื•ื•ืŸ ืžืกื•ื™ื. ื”ื›ื™ื•ื•ืŸ ื”ื›ืœืœื™ ืœืคื™ืชืจื•ืŸ ื”ื™ื” ืœืจื•ืฅ ืขืœ ื›ืœ ื”ืื™ื ื“ืงืกื™ื ื‘ืžื™ืœื•ืŸ, ืžื›ืœ ืื™ื ื“ืงืก ืœื”ืชืงื“ื 4 ืฆืขื“ื™ื ืœื›ืœ 8 ื”ื›ื™ื•ื•ื ื™ื ื•ืœืจืื•ืช ืื ื›ืชื•ื‘ื” ืฉื ื”ืžื™ืœื” XMAS. ื”ืคื•ื ืงืฆื™ื” go ื ืจืื™ืช ื›ืš:
def go(start, direction, steps = 4)
  Enumerator.produce(start) { |r, c| [r + direction[0], c + direction[1]] }.take(steps)
end
ื•ื”ืคื•ื ืงืฆื™ื” ื”ืžืจื›ื–ื™ืช ืฉืœ ื”ืคื™ืชืจื•ืŸ ื”ื™ื count_words_around ืฉืœื•ืงื—ืช ื ืงื•ื“ื” ื•ืžืจื™ืฆื” ืืช go ืœื›ืœ 8 ื”ื›ื™ื•ื•ื ื™ื ื•ืื– ืกื•ืคืจืช ื›ืžื” ืžื”ื›ื™ื•ื•ื ื™ื ื”ืืœื” ืžื›ื™ืœื™ื ืืช ื”ืžื™ืœื” XMAS:
def count_words_around(point)
  indexes = [[0, 1],
             [1, 1],
             [1, 0],
             [1, -1],
             [0, -1],
             [-1, -1],
             [-1, 0],
             [-1, 1]].map { |direction| go(point, direction, 4) }
  indexes.count { |path| $matrix.slice(*path).values.join('') == 'XMAS' }
end

pp $matrix.keys.map {|point| count_words_around(point) }.sum
ื—ืœืง 2 ื‘ื—ืœืง ื”ืฉื ื™ ื™ืฆืจืชื™ ืžื˜ืจื™ืฆื” ื‘ืื•ืชื• ืื•ืคืŸ ืื‘ืœ ืขืœ ื”ืคื•ื ืงืฆื™ื” go ื›ื‘ืจ ื•ื•ื™ืชืจืชื™. ื‘ืžืงื•ื ืœืœื›ืช 4 ืฆืขื“ื™ื ืžืกืคื™ืง ืœืงื—ืช ืืช ื” X ืฉืžืกื‘ื™ื‘ ืœื ืงื•ื“ื” ื•ืœื‘ื“ื•ืง ืื ื›ืชื•ื‘ ื‘ื• MAS ืื• SAM. ื–ื” ื”ืงื•ื“:
def count_words_around(point)
  return 0 if $matrix[point] != 'A'

  around = [
    [-1, -1],
    [0, 0],
    [1, 1],
    [-1, 1],
    [0, 0],
    [1, -1]
  ].map { |direction| [point[0] + direction[0], point[1] + direction[1]] }
    .map {|i| $matrix[i] }.join('')

  if %w[MASMAS MASSAM SAMMAS SAMSAM].include?(around)
    1
  else
    0
  end
end

pp $matrix.keys.map {|point| count_words_around(point) }.sum

ToCode
1 418
ื”ื™ื•ื ืœืžื“ืชื™: ื”ืกื™ืคื•ืจ ืขื bcrypt ื• 72 ื‘ืชื™ื ืœื ื‘ืจื•ืจ ืื™ืš ื”ืขื‘ืจืชื™ ื—ื™ื™ื ืฉืœืžื™ื ื‘ืœื™ ืœืฉื™ื ืœื‘ ืœืžื’ื‘ืœื” ื”ื–ืืช, ืื‘ืœ ืขื›ืฉื™ื• ืฉื’ื™ืœื™ืชื™ ืื•ืชื” ืื ื™ ืžืฉืชืฃ ื›ืืŸ ื›ื“ื™ ืฉืืชื ืœื ืชื™ืคืœื• ื‘ืื•ืชื• ื‘ื•ืจ. ืœื›ื•ื›ื‘ ื‘ืกื™ืคื•ืจ ืฉืœ ื”ื™ื•ื ืงื•ืจืื™ื bcrypt ื•ื”ื•ื ืืœื’ื•ืจื™ืชื Password Hashing ื™ืฉืŸ ืฉืขื“ื™ื™ืŸ ื ืžืฆื ื‘ืฉื™ืžื•ืฉ ื ืจื—ื‘ ื‘ื”ืจื‘ื” ืžืขืจื›ื•ืช. ื‘ื™ืŸ ื”ืฉืืจ ืกืคืจื™ื™ืช Devise ืฉื”ื™ื ื”ืกืคืจื™ื” ื”ืคื•ืคื•ืœืจื™ืช ืœื ื™ื”ื•ืœ ืžืฉืชืžืฉื™ื ื‘ Rails ืžืฉืชืžืฉืช ื‘ื•. ื‘ื’ื“ื•ืœ bcrypt ื ื—ืฉื‘ ืขื“ื™ื™ืŸ ืžืื•ื‘ื˜ื— ืœืžืจื•ืช ื’ื™ืœื• ื”ืžื‘ื•ื’ืจ, ืื‘ืœ ื™ืฉ ืœื• ืžื’ื‘ืœื” ืžืชื•ืขื“ืช (ื•ืžืกืชื‘ืจ ืฉืžืื•ื“ ืžืคื•ืจืกืžืช) - ื”ื•ื ืœื ื™ื•ื“ืข ืœืขืจื‘ืœ ืกื™ืกืžืื•ืช ืืจื•ื›ื•ืช ื™ื•ืชืจ ืž 72 ื‘ืชื™ื. ืžื” ื–ื” ืื•ืžืจ? ื”ื ื” ื‘ืงื•ื“ ืจื™ื™ืœืก:
> u = User.new(name: 'a', email: 'ynon@gmail.com', password: '0' * 80 + '1')
> u.valid_password?('0' * 80 + '2')
 => true
ื›ืœื•ืžืจ ื‘ื“ื™ืงืช ื”ืกื™ืกืžืื•ืช ื”ื™ื ืจืง ืขืœ 72 ื”ื‘ืชื™ื ื”ืจืืฉื•ื ื™ื ืฉืœ ื”ืกื™ืกืžื”. ื›ืฉื™ืฉ ืกื™ืกืžื” ืืจื•ื›ื” ืž 72 ื‘ืชื™ื ืื ื—ื ื• ืžืชืขืœืžื™ื ืžื›ืœ ืžื” ืฉื‘ื ืื—ืจื™. ืœืงื—ื™ื? ืื ืืคืฉืจ ื”ืฉืชืžืฉื• ื‘ Aragon2 ื‘ืžืงื•ื ื‘ bcrypt, ื•ื‘ื›ืœ ืžืงืจื” ื›ืฉืืชื ื‘ื•ื—ืจื™ื ืกื™ืกืžื” ืœืืชืจ ืฉื™ืžื• ืœื‘ ืœื ืœื”ืชื—ื™ืœ ืืช ื”ืกื™ืกืžื” ื‘ 72 ืชื•ื•ื™ื ืฉืงืœ ืœื ื—ืฉ ื•ืจืง ืื– ืœืฉื™ื ืืช ื”ืกื™ืกืžื” ื”ืืžื™ืชื™ืช. ืžื™ ื™ื•ื“ืข ืื ื”ื ืœื ืžืฉืชืžืฉื™ื ื‘ื˜ืขื•ืช ื‘ bcrypt ื•ื—ื•ืชื›ื™ื ืืช ืžื” ืฉื‘ื ืื—ืจื™ ื” 72. ื .ื‘. ื”ืคื•ืกื˜ ื”ื–ื” ื‘ื ื•ืฉื ืกื•ืคืจ ืžืขื ื™ื™ืŸ ื•ืกื•ืงืจ ืืช ื”ืžื™ืžื•ืฉ ืฉืœ bcrypt ื‘ืขื•ื“ ืฉืคื•ืช ืชื›ื ื•ืช ื‘ื“ื’ืฉ ืขืœ ืื™ื–ื” ืกืคืจื™ื•ืช ื™ืกืจื‘ื• ืœืขื‘ื•ื“ ืขื ืงืœื˜ ืฉืื•ืจื›ื• ืžืขืœ 72 ื‘ืชื™ื ืœืขื•ืžืช ืื™ื–ื” ืกืคืจื™ื•ืช ืคืฉื•ื˜ ื™ืžื—ืงื• ืืช ื”ื—ืœืง ืฉืื—ืจื™ 72 ื›ื“ื™ ืฉื‘ื›ืœ ื–ืืช ื“ื‘ืจื™ื ื™ืขื‘ื“ื•: https://n0rdy.foo/posts/20250121/okta-bcrypt-lessons-for-better-apis/

ToCode
1 418
ื˜ื™ืค ืคื™ื™ืชื•ืŸ: ืžื—ื™ืงืช ืฉื•ืจื” ืจืืฉื•ื ื” ืžื˜ืงืกื˜ ืขื StringIO ื”ืคื•ื ืงืฆื™ื” ื”ื‘ืื” ืžืงื‘ืœืช ืžื—ืจื•ื–ืช ื˜ืงืกื˜ ื•ืžื—ื–ื™ืจื” ืืช ื”ื˜ืงืกื˜ ื‘ืœื™ ื”ืฉื•ืจื” ื”ืจืืฉื•ื ื”:
def remove_first_line(text):
    return '\n'.join(text.splitlines()[1:])
ืื‘ืœ ืื ื‘ื˜ืขื•ืช ื ืขื‘ื™ืจ ืœ None ื”ื™ื ืชื–ืจื•ืง Exception. ื‘ื ื•ืกืฃ ื—ื™ื‘ื•ืจ ื”ืžื—ืจื•ื–ื•ืช ืขื n ืขืœื•ืœ ืœื”ื™ื•ืช ืžื‘ืœื‘ืœ ื›ื™ ืžื™ ืฉื™ื’ื™ืข ืœืงืจื•ื ืืช ื”ืงื•ื“ ืขืœื•ืœ ืœืชื”ื•ืช ืžื” ืงื•ืจื” ื‘ Windows ืฉื ืชื• ืกื•ืฃ ื”ืฉื•ืจื” ื”ื•ื ืฉื•ื ื”. ืœืคืขืžื™ื ื–ื” ืจืขื™ื•ืŸ ื˜ื•ื‘ ืœืขืฆื•ืจ ืืช ื”ืชื•ื›ื ื™ืช ืื ืžืงื‘ืœื™ื None, ืื‘ืœ ืœืคืขืžื™ื ืื ื—ื ื• ืจื•ืฆื™ื ืœื‘ื ื•ืช ืžืฉื”ื• ื™ื•ืชืจ ื’ืžื™ืฉ. ื“ืจืš ื ื•ืกืคืช ืœืžื—ื•ืง ืืช ื”ืฉื•ืจื” ื”ืจืืฉื•ื ื” ื”ื™ื ื”ืงืœืืก StringIO ืžืชื•ืš ื”ืžื—ืœืงื” io. ื”ื ื” ื’ื™ืจืกื” ืฉื ื™ื™ื” ืฉืœ ืื•ืชื” ืคื•ื ืงืฆื™ื”:
def remove_first_line(text: str):
    f = StringIO(text)
    f.readline()
    return f.read()
ื”ืคื•ื ืงืฆื™ื” ื™ื•ืฆืจืช ืื•ื‘ื™ืงื˜ ืฉื ืจืื” ื›ืžื• ืงื•ื‘ืฅ, ืื‘ืœ ื‘ืขืฆื ืงื•ืจื ืžื—ืจื•ื–ืช ืžืจื•ื‘ืช ืฉื•ืจื•ืช. ื‘ืขื–ืจืช ื”ืžืชื•ื“ื•ืช readline ื• read ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืงื‘ืœ ืืช ื›ืœ ื”ืฉื•ืจื•ืช ืฉืื—ืจื™ ื”ืจืืฉื•ื ื”, ื‘ืœื™ ืœืคืจืง ื•ืœื”ื“ื‘ื™ืง ืžื—ื“ืฉ ืืช ื”ืฉื•ืจื•ืช ื•ื’ื ืื ืžืขื‘ื™ืจื™ื ืœืคื•ื ืงืฆื™ื” None ื”ื›ืœ ืขื“ื™ื™ืŸ ืžืกืชื“ืจ ื•ื”ื™ื ืชื—ื–ื™ืจ ืžื—ืจื•ื–ืช ืจื™ืงื”.

ToCode
1 418
ืœืกืคืจ ืžื” ื‘ื ื™ื ื• ืื• ืœื“ืขืช ืžื” ื ื‘ื ื”? ืžื” ืขื“ื™ืฃ, ืœื›ืชื•ื‘ ืืช ื”ื‘ื“ื™ืงื•ืช ืœืคื ื™ ืื• ืื—ืจื™ ื”ืงื•ื“? ื•ืืช ื“ืฃ ื”ืคืจื•ื™ืงื˜ ื‘ื’ื™ืื”ื‘? ื•ืืช ื”ืชื™ืขื•ื“? ื•ื”ืžื“ืจื™ืš ืœืžืฉืชืžืฉ? ื‘ืขื‘ื•ื“ื” ืขืœ ืคืจื•ื™ืงื˜ ืฆื“, ืจื‘ื™ื ืžืขื“ื™ืคื™ื ืงื•ื“ื ืœื‘ื ื•ืช ืืช ื”ืคืจื•ื™ืงื˜ ื•ืื– ืœืกืคืจ ืœืขื•ืœื ืžื” ื‘ื ื™ื ื•: ืื—ืจื™ ื›ืชื™ื‘ืช ื”ืงื•ื“ ืžื ืกื—ื™ื ื”ื•ื“ืขืช ืงื•ืžื™ื˜, ืื—ืจื™ ืฉื”ืงื•ื“ ืžื•ื›ืŸ ื›ื•ืชื‘ื™ื ื‘ื“ื™ืงื•ืช ื•ืชื™ืขื•ื“, ืื—ืจื™ ืฉื”ืคืจื•ื™ืงื˜ ื‘ืื•ื•ื™ืจ ื›ื•ืชื‘ื™ื ื“ืฃ ืคืจื•ืงื™ื˜ ื‘ื’ื™ื˜ื”ืื‘ ื•ืื—ืจื™ ืฉื”ื•ืฆืื ื• ื’ื™ืจืกื” ื—ื“ืฉื” ื›ื•ืชื‘ื™ื ื‘ Release Notes ืžื” ืขืฉื™ื ื•. ื”ืชื•ืฆืื” ื”ืจื‘ื” ืคืขืžื™ื ื”ื™ื ืคืจื•ื™ืงื˜ "ืฉืฆืจื™ืš ืขื•ื“ ืชืฉื•ืžืช ืœื‘" ื•ืžืคืชื— ืฉื›ื‘ืจ ื”ืชืขื™ื™ืฃ ืžืชื—ื–ื•ืงื” ืฉืœื•. ื—ืœืง ื’ื“ื•ืœ ืžื”ื’ื™ืฉื” ื”ื–ืืช ื ื•ื‘ืข ืžืคื—ื“, ืคื—ื“ ืœื”ืชื—ื™ื™ื‘. ืื ื ืฉื™ื ืืช ื”ืคื—ื“ ื‘ืฆื“ ืจื’ืข ื ื•ื›ืœ ืœื ืกื•ืช ื’ื™ืฉื” ืฉื•ื ื”: 1. ื‘ืคืจื•ื™ืงื˜ ืงื•ื“ ืคืชื•ื— - ืžืชื—ื™ืœื™ื ืžื‘ื ื™ื™ืช ื“ืฃ ื’ื™ื˜ื”ืื‘ ืœืคืจื•ื™ืงื˜ ื•ืžืกื‘ื™ืจื™ื ืžื” ื™ื”ื™ื” ื‘ื•, ืžื” ื”ืืจื›ื™ื˜ืงื˜ื•ืจื”, ืžื” ื”ืชื”ืœื™ื›ื™ื ื”ืžืจื›ื–ื™ื™ื ื‘ืžืขืจื›ืช, ื‘ืื™ื–ื” ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื ืฉืชืžืฉ ื•ื›ืŸ ื’ื ืื™ืš ืืคืฉืจ ืœืชืจื•ื ืงื•ื“ ืœืคืจื•ื™ืงื˜. ื›ื‘ืจ ื‘ืงื•ืžื™ื˜ื™ื ื”ืจืืฉื•ื ื™ื ืžื™ื™ืฆืจื™ื ืืช ื” Action ืฉืžืขื‘ื™ืจ ืืช ื”ืคืจื•ื™ืงื˜ ืœืคืจื•ื“ืงืฉืŸ. 2. ื‘ืคืจื•ื™ืงื˜ ื‘ืชืฉืœื•ื - ืžืชื—ื™ืœื™ื ืžื‘ื ื™ื™ืช ื“ืฃ ื ื—ื™ืชื” ืœืคืจื•ื™ืงื˜ ืฉืžืกื‘ื™ืจ ืžื” ืื ื—ื ื• ืจื•ืฆื™ื ืœื‘ื ื•ืช, ื›ื•ืœืœ "ืฆื™ืœื•ืžื™ ืžืกืš" ื• Use Cases ืœืžื•ืฆืจ, ื•ื”ื›ื™ ื—ืฉื•ื‘ ืชื™ื‘ื” ืœืื™ืกื•ืฃ ืžื™ื™ืœื™ื ืฉืœ ืื ืฉื™ื ืฉืžืชืขื ื™ื™ื ื™ื ื‘ืคืจื•ื™ืงื˜. ื ื›ื•ืŸ, ืœื‘ื ื•ืช ืžื•ืฆืจ ืœืคื™ Spec ื–ื” ืคื—ื•ืช ืžืœื”ื™ื‘ ืž"ืœื’ืœื•ืช ืชื•ืš ื›ื“ื™ ืชื ื•ืขื”", ืื‘ืœ ืžื’ื“ื™ืœ ืืช ื”ืกื™ื›ื•ื™ื™ื ืฉื”ืคืจื•ื™ืงื˜ ื™ืจืื” ืื•ืจ ื™ื•ื ื‘ืชื•ืจ ืคืจื•ื™ืงื˜ ืฉื ื”ื™ื” ื’ืื™ื ื‘ื•.