ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗სასწავლო თამაში, რომელიც პროგრამირებას ნულიდან გასწავლის — 19 ენაზე: JavaScript, TypeScript, Node.js, Python, Java, C, C++, C#, Go, Rust, PHP, Ruby, Swift, Kotlin, Lua, Dart, HTML, CSS და React. რობოტ ბიტს კოდით მართავ: წერ ბრძანებებს, უშვებ და უყურებ, როგორ ასრულებს მათ ბიტი რუკაზე. HTML-სა და CSS-ში ბიტის ვებგვერდს აწყობ, React-ში კი ინტერაქტიურ აპს — და შედეგს მაშინვე ხედავ. თამაში მთლიანად ქართულადაა, შეცდომების ახსნის ჩათვლით.
ყოველ ენაზე კურსი 500 ლეველია (19 ენაზე სულ 9500), იხ. 500 ლეველი ყოველ ენაზე.
ბმული იმუშავებს მას შემდეგ, რაც რეპოში GitHub Pages ჩაირთვება (იხ. GitHub Pages-ზე გამოქვეყნება).
ყოველი ახალი თემა სამ ნაბიჯად ისწავლება:
turn_left ↔ turn_right, 2 ↔ 3, h1 ↔ header). შეცდომაზე ბლოკი წითლდება და ირხევა, ორი შეცდომის შემდეგ სწორი ბლოკი ანათებს. კომპიუტერზე ბლოკი კლავიშებით 1–9-ც ირჩევა. ბეჭდვა არ გჭირდება, ამიტომ ტელეფონზეც მოსახერხებელია. პირველი აწყობა +20 XP-ს მოგცემს.
( ) ; { } " და სხვ.), ბიტის ბრძანებების სია კი ცნობარად ჩანს.პრაქტიკაზე, ბოსზე და უკვე გავლილ ლეველზე პირდაპირ „შენით“ იწყება. გაკვეთილის ხელახლა სანახავად ნაბიჯების ზოლში „1 ნახე“ დააჭირე.
ყოველი სამყაროს ბოსის შემდეგ იხსნება რეალური პროექტი: პატარა აპი, რომლის კოდიც ნამდვილ პროგრამებში ზუსტად ასე იწერება. შედეგი ტელეფონის ეკრანზე ჩანს, კოდი კი რამდენიმე ტესტზე მოწმდება სხვადასხვა მონაცემით. თუ, მაგალითად, "სულ: " + pizzas + delivery დაწერე, აპი „სულ: 245 ლარი“-ს აჩვენებს 29-ის ნაცვლად — ზუსტად ის შეცდომა, რასაც ნამდვილი პროგრამისტებიც უშვებენ.
| სამყარო | პროექტი | რას აკეთებს |
|---|---|---|
| 2 | 🪪 პროფილის ბარათი | ცვლადებიდან აწყობს პროფილს |
| 3 | 🍕 პიცის შეკვეთა | ითვლის კალათის ჯამს მიტანით |
| 4 | 🎬 კინოს ბილეთი | ასაკის მიხედვით ირჩევს ბილეთს |
| 5 | 🚀 რაკეტის გაშვება | უკუთვლა ციკლით |
| 6 | 🧾 ჩაის ფულის კალკულატორი | ფუნქცია, რომელიც პასუხს აბრუნებს |
| 7 | 🛒 საყიდლების კალათა | ჩეკი ორი მასივიდან |
| 8 | ⛅ ამინდის აპი | ობიექტის მონაცემები და პირობა |
| 9 | 🏆 ლიდერბორდი | სამი საუკეთესო შედეგი |
| 10 | 🔐 პაროლის შემმოწმებელი | პაროლის სიძლიერის შემოწმება |
| ენა | კურსი | რას ისწავლი |
|---|---|---|
| JavaScript | 500 ლეველი, 10 სამყარო | სრული თავგადასავალი: ცვლადები, პირობები, ციკლები, ფუნქციები, მასივები, ობიექტები, ალგორითმები |
| Python | 500 ლეველი | შეწევით დაწერილი ბლოკები, print, if/elif, for/range, while, def |
| Java | 500 ლეველი | ტიპები, System.out.println, პირობები, ციკლები, მეთოდები |
| C | 500 ლეველი | main(), #include, printf, ტიპები, ფუნქციები |
| C++ | 500 ლეველი | cout, string, პირობები, ციკლები, ფუნქციები |
| TypeScript | 500 ლეველი | ტიპები (number, string, boolean), let/const, console.log, პირობები, ციკლები, ფუნქციები |
| C# | 500 ლეველი | Console.WriteLine, int/string/var, $"...", foreach, მეთოდები დიდი ასოთი (Move()) |
| Go | 500 ლეველი | package main, :=, fmt.Println, ერთადერთი ციკლი — for, ფუნქციები |
| Rust | 500 ლეველი | fn main, let/let mut, println!, დიაპაზონები 0..10, step() (move Rust-ში დაკავებულია) |
| PHP | 500 ლეველი | <?php, $ცვლადები, echo, ტექსტის შეერთება .-ით, foreach, ფუნქციები |
| Ruby | 500 ლეველი | ბრძანებები ფრჩხილების გარეშე, 10.times do, , , |
დანარჩენი რობოტის ენების კურსებში იგივე ბიტი და იგივე რუკებია, ოღონდ კოდს ნამდვილი ენის სინტაქსით წერ: Python-ში turn_left() და შეწევა, C-ში int main(), printf და ;, C#-სა და Go-ში Move(), Ruby-ში move და wall_ahead?, Rust-ში step(). ბეჭდვაც ნამდვილივით ხდება: Go [1 2 3]-ს ბეჭდავს, C# — True-ს, Kotlin და Lua — 3.0-ს. ყოველ ენას აქვს საკუთარი რუკა (ლეველები თემების მიხედვით კუნძულებადაა დაყოფილი, როგორც JavaScript-ში), შპარგალკა, ბოსი ბაგიანი კოდით და საკუთარი სერტიფიკატი. HTML-სა და CSS-ში გვერდი მარჯვნივ ცოცხლად განახლდება, ხოლო ▶ შემოწმება დავალების ყველა პუნქტს სათითაოდ ამოწმებს.
React-ში კოდი ნამდვილ React 18-ზე ეშვება (function App() { … }, useState, useEffect; import/export ხაზებიც შეიძლება). JSX-ს პატარა ჩაშენებული კომპილატორი თარგმნის, აპი კი იზოლირებულ iframe-ში ეშვება. მარჯვენა გადახედვა ინტერაქტიულია: ღილაკებს აჭერ და ველებში წერ. ▶ შემოწმება აპს რამდენჯერმე თავიდან უშვებს, თვითონ აჭერს ღილაკებს და წერს ველებში, მერე კი შედეგს ამოწმებს. console.log კონსოლში ჩანს, შეცდომები კი ქართულად იხსნება: დაუხურავი ტეგი ხაზის ნომრით, უცნობი ცვლადი, onClick={f()}-ით გამოწვეული უსასრულო გადახატვა, უსასრულო ციკლი. ბოსებში გლიჩი ტიპურ ბაგებს მალავს: class className-ის ნაცვლად, onclick, დაკარგული key, push ახალი მასივის ნაცვლად.
ყოველი ენის კურსი 500 ლეველია (HTML-ში, CSS-სა და React-ში — 500 გაკვეთილი), 19 ენაზე სულ 9500. რუკაზე ლეველები თავებადაა (კუნძულებად) დალაგებული და რიგრიგობით იხსნება. კუნძულებს ნომერი არ აწერია: ყოველ კუნძულზე ჩანს, კურსის რომელი ლეველები უჭირავს (მაგალითად, ბოლოზე — 489–500), და ყოველ ლეველს თავისი წერტილი აქვს.
go() მიმართულებები, კოორდინატები (getX(), flagX());else if ჯაჭვები, შუქნიშნები;% 2-ით, ნამდვილი ლაბირინთები (მარჯვენა ხელის წესი);datalist, rowspan, details, dl, meta, ხელმისაწვდომობა (aria-label), entity-ები, სტატიები, საიტის ჩონჩხი, ბლოგი და სადესანტო გვერდი.em/rem/%, rgb()/hsl(), box-sizing, გრადიენტები, position, z-index, Flexbox III, Grid II, ::before/::after, :nth-child(3n), ატრიბუტის სელექტორები, transform, CSS ცვლადები და პროექტები.| # | სამყარო | თემა |
|---|---|---|
| 1 | 🌱 მწვანე ველი | პირველი ნაბიჯები |
| 2 | 🌲 რიცხვების ტყე | ცვლადები |
| 3 | ⛰️ კალკულატორის მთა | ოპერატორები |
| 4 | 🚦 გზაჯვარედინის ქალაქი | პირობები |
| 5 | 🌊 მარადიული მდინარე | ციკლები |
| 6 | 🔧 ხელოსნის სახელოსნო | ფუნქციები |
| 7 | 📦 საწყობის ქვესკნელი | მასივები |
| 8 | 🏙️ ობიექტების ქალაქი | ობიექტები |
| 9 | 🗼 ალგორითმების კოშკი | ალგორითმები |
| 10 | 🏰 გლიჩის ციხე | საბოლოო გამოცდა |
თითოეულ სამყაროში 5 ლეველია: სამი ახალ თემაზე, ერთი სავარჯიშო და ბოსი. ბოლო ბოსს (გლიჩს) 3 ფაზა აქვს. სამყაროებს შორის სავარჯიშო თავებია, ამიტომ JavaScript-ის კურსში სულ 500 ლეველია.
ყოველ სამყაროს თავისი სახე აქვს: ბალახი და ხეები, ტყე, მთა, ქალაქი, მდინარე, სახელოსნო... ლეველის ეკრანზე ერთი „მისიის“ ბარათია — ვინ რას ამბობს, რა უნდა გააკეთო და „💡 როგორ?“ ახსნა მაგალითით.
კოდის რედაქტორი ფერადი სინტაქსით, დიდი ფერადი ბრძანების ღილაკები დამწყებთათვის, ნაბიჯ-ნაბიჯ რეჟიმი და ცვლადების პანელი.
შეცდომები ქართულად ყველა ენაზე: თამაში ხსნის, რა მოხდა, და ხაზს მიუთითებს — მაგ. „ხაზის ბოლოს ; აკლია“, „Python-ში ეს ბრძანება ასე იწერება: turn_left()“, „printf-ისთვის საჭიროა #include <stdio.h>“.
ვარსკვლავები: ⭐ გავლა · ⭐⭐ ≤ 3 ცდით · ⭐⭐⭐ მინიშნებების გარეშე და ოპტიმალური კოდით. ზედა ზოლში ყოველთვის ჩანს, რამდენი ვარსკვლავის აღება შეგიძლია ახლა.
XP, რანგები და 55 მიღწევა (მათ შორის „პოლიგლოტი“, „სნაიპერი“ — უშეცდომოდ აწყობილი კოდი — „აპების ოსტატი“ და „მოდის ხატი“). XP-ით იხსნება რედაქტორის თემებიც.
👕 ბიტის გარდერობი — მთავარ ლოგოზე დაჭერით იხსნება. ბიტი დიდად ჩანს სცენაზე, 8 კატეგორიაა: ფერი, ქუდები, ტანსაცმელი, სათვალე, კისერზე, ზურგზე, ფეხსაცმელი, ანტენა. 275 უნიკალური ნივთია: ყოველი ფორმა მხოლოდ ერთხელ, ფერადი ასლების გარეშე. მაგალითად 18 პროგრამირების ენის მაისური, ჩოხა, ნაბადი, საქართველოს დროშა, კიმონო, დრაკონის ფრთები და ლაზერის თვალები. ვინც ფერადი ასლი ადრე იყიდა, მისთვის ის რჩება.
CodeQuest.html-ის ბლოკი ===WARDROBE===. მაღაზიაში ყოველი ფორმიდან ერთი ჩანს; დანარჩენ ფერად ასლებს retired აქვთ და მხოლოდ მათ ყიდველებს უჩანთ. ⚠️ ნივთის id-ს (შაბლონი-პალიტრა) ნუ შეცვლი — ნაყიდი ნივთები მისით ინახება.ნივთზე დაჭერით ჯერ მოსინჯავ — ბიტს ეკრანზე აცვია — და მერე ყიდულობ. XP-ის ხარჯვა წოდებას არ ამცირებს: წოდება მთელ მოგებულ XP-ს ითვლის, საფულეში კი მოგებულს გამოკლებული დახარჯული რჩება. ნაყიდი ტანსაცმელი ბიტს თამაშის დაფაზეც აცვია.
დღის გამოწვევა (ყოველ დღე ახალი რუკა) და დღის სერია 🔥.
🚩 ქვესთები (მთავარ მენიუში; ასაღები ჯილდოების რაოდენობა რუკის ზედა ზოლშიც ჩანს):
/learn)თამაშის გვერდით საიტს აქვს სკოლა: 25 კურსი, თითოში 4 დონე (დამწყები → ექსპერტი), მოდულები და მოკლე თავები ახსნით, გასაშვები კოდით, სავარჯიშოთი და მინი-ქვიზით. გვერდები: მთავარი, კატალოგი, კურსი (სილაბუსი), თავი, მოდულის ქვიზი, სასწავლო გზები, პირადი დაფა, ძებნა (Ctrl+K).
კონტენტი კოდისგან გამოყოფილია. ახალი თავის დასამატებლად საიტის კოდი არ იცვლება:
| რა | სად |
|---|---|
| კურსის რუკა (დონეები, მოდულები, თავების სათაურები) | curriculum/{კურსი}.json |
| თავის ტექსტი | content/{კურსი}/{დონე}/{მოდული}/{თავი}.mdx |
| მოდულის ქვიზი / დონის პროექტი | …/{მოდული}/quiz.mdx, …/{დონე}/project.mdx |
| ფორმატის აღწერა | content/README.md |
school/build.js ამ ფაილებიდან აწყობს სტატიკურ გვერდებს საქაღალდეში learn/ (git-ში არ ინახება), ძებნის ინდექსს და sitemap.xml-ს. Vercel-ზე ეშვება ყოველ deploy-ზე (vercel.json → buildCommand); ლოკალურად: node school/build.js. დამოკიდებულებები არ აქვს.node school/test.js.school/learn.js: პროგრესი, ქვიზები, ძებნა, დაფა და კოდის გაშვება. JavaScript ცალკე ნაკადში (Worker) ეშვება 3-წამიანი ლიმიტით, HTML — იზოლირებულ iframe-ში. სხვა ენებზე „გაუშვი“ მოსალოდნელ შედეგს აჩვენებს.learn.js ამოწმებს სერვერის ხელმოწერილ ნიშანს იმავე საჯარო გასაღებით, რაც თამაშშია (build.js მას CodeQuest.html-იდან იღებს), სერვერის მოქმედება school კი Pro-ს გარეშე უარს ამბობს. თავის ტექსტი გვერდის HTML-შია (ძებნის სისტემებისთვის), ამიტომ ეს დაცვა ისეთივეა, როგორიც თამაშში.codequest.school) და ანგარიშში (school:<ანგარიში>, მოქმედება school). სერვერი მოწყობილობების მდგომარეობას აერთიანებს, ამიტომ კონფლიქტი არ ხდება. ანგარიში იგივეა, რაც თამაშში; შესვლა თამაშის გვერდზე ხდება და უკან აბრუნებს.desktop/main.js გვერდებს საიტიდან იღებს და ნანახის ასლს ინახავს (ინტერნეტის გარეშეც იხსნება). პროგრესი იქ, როგორც თამაშისა, მხოლოდ კომპიუტერში ინახება. ტელეფონზე დაყენებულ აპში სკოლა ჩვეულებრივ იხსნება./en/)ინგლისური გვერდები ქართულიდან იქმნება ყოველ deploy-ზე: node i18n/build.js კითხულობს ლექსიკონს i18n/en/<გვერდი>.json და წერს en/<გვერდი> (en/ რეპოში არ ინახება). Vercel-ზე /en/* → /*, თუ ინგლისური ფაილი არ არსებობს — ამიტომ სურათები და სკრიპტები საერთოა.
{ "ქართული ნაწყვეტი": "English" } — იცვლება მხოლოდ მთლიანი სტრიქონი ან HTML-ის ტექსტი; null — ჯერ არ არის ნათარგმნი; "" — ინგლისურში საჭირო არ არის (მაგ. სუფიქსი -ზე)._raw: ზუსტი ტექსტის ჩანაცვლება კონტექსტით — როცა ერთი სიტყვა სხვადასხვაგან სხვას ნიშნავს (პარამეტრები — Settings / Parameters).', ", `) და \ ისეთივე რაოდენობით უნდა იყოს, როგორც ორიგინალში — აწყობა სხვაგვარად შეჩერდება (JS არ გატყდება). აპოსტროფისთვის: ’.node i18n/extract.js CodeQuest.html. შემოწმება: node i18n/build.test.js, შემდეგ en/CodeQuest.html-ში CodeQuest.testAll().noindex აქვს და ქართული გვერდებიდან ბმული არ არის.ყოველ ენაზე პირველი 100 ლეველი უფასოა. დანარჩენს ერთჯერადი გადახდა — CodeQuest Pro — ხსნის ყველა ენაზე ერთად.
Pro ხსნის 🎬 ვიდეოებისა და პროექტების გვერდსაც (მთავარ მენიუში — „ვიდეოები და პროექტები“):
PJ_FREE), მეტის შექმნისას Pro-ს ფანჯარა იხსნება; Pro-თი — 20-მდე. ბრაუზერის ჩანართში და ტელეფონზე ეს გვერდი არ არის — Pro-ს გვერდზე ჩანს „გადმოწერე Windows-ისთვის“.
index.html-ში style.css და script.js). საჭირო ფაილის წაშლისას გაფრთხილება ისევ ჩნდება.<საქაღალდე>/<სახელი>/…) და ამოწმებს. წარმატების შემდეგ დრაფტი იშლება და პროექტი კომპიუტერის ფაილებიდან იხსნება; შეცდომისას დრაფტი რჩება და ჩანს მიზეზი და გამოსავალი.ვიდეოები STUDIO_VIDEOS-შია, გზამკვლევები — STUDIO_GUIDES-ში, ორივე ფაილის ===STUDIO=== ბლოკში.
Pro ანგარიშს ებმება. ყიდვას და კოდის ჩასმას ანგარიში სჭირდება. თუ არ ხარ შესული, თამაში ჯერ შესვლის/რეგისტრაციის ფორმას აჩვენებს და შემდეგ ყიდვას თავისით აგრძელებს.
ყიდვა Dodo Payments-ით ხდება:
proActivate, api/account.js) კოდს Dodo-სთან ამოწმებს და ერთ ანგარიშს აბამს: prokey:<sha256(კოდი)> → ანგარიში. სხვა ანგარიშზე იგივე კოდი აღარ გააქტიურდება (pro_taken); მფლობელის კოდები (OWNER_KEYS) გამონაკლისია.ჩასართავად ერთჯერადად:
დარეგისტრირდი Dodo Payments-ზე და გაიარე ბიზნესის ვერიფიკაცია.
Products → Create product: ერთჯერადი გადახდა (One-time), შენი ფასით. პროდუქტზე ჩართე License keys.
პროდუქტის გვერდზე Share — დააკოპირე გადახდის ბმული (მაგ. https://checkout.dodopayments.com/buy/pdt_...) და ჩასვი CodeQuest.html-ში, PRO.payLink-ში (იქვე PRO.price — ღილაკზე გამოსაჩენი ფასი). ახლა იქ Live Mode-ის ბმულია (ნამდვილი გადახდები, 2026-10-17-დან; Vercel-ში DODO_MODE=live).
Vercel → Project → Settings → Environment Variables:
DODO_MODE = test (სატესტო გადახდებისთვის) ან live (ნამდვილისთვის);PRO_PRIVATE_KEY — Pro-ს ხელმოწერის საიდუმლო გასაღები (ECDSA P-256, PKCS8 DER base64 ერთ ხაზზე). მისი საჯარო ნაწილი CodeQuest.html-შია, PRO.pub-ში;OWNER_KEYS — მფლობელის კოდები მძიმით: ასეთი კოდი Pro-ს უფასოდ რთავს, Dodo-ს გარეშე.შემდეგ გააკეთე Redeploy.
სატესტო რეჟიმში შეიძინე Dodo-ს სატესტო ბარათით, ელფოსტიდან კოდი თამაშში ჩასვი — ფასიანი ლეველები უნდა გაიხსნას.
Pro-ს დაცვა. სერვერი Pro-ს ნიშანს ({ v: 2, u: ანგარიში, kh, iat }) საიდუმლო გასაღებით აწერს ხელს და ყოველ ჩატვირთვაზე (load/me) ახლიდან აძლევს. თამაში Pro-ს მხოლოდ მაშინ რთავს, როცა ხელმოწერა სწორია და ნიშანი შესული ანგარიშისაა (ProLock, Web Crypto). კლასებისთვის სერვერი პირდაპირ ანგარიშის user.pro-ს ამოწმებს. ამიტომ:
PRO-ს პარამეტრები ჩაკეტილია (Object.freeze, defineProperty);შენიშვნა: თამაში მთლიანად ბრაუზერში მუშაობს და მისი კოდი საჯაროა, ამიტომ ადამიანი, რომელიც ფაილს თავად ჩამოტვირთავს და შეცვლის, დაცვას მაინც აუვლის გვერდს. სრული დაცვისთვის ფასიანი შინაარსი სერვერიდან უნდა მიეწოდებოდეს, მომხმარებლის ანგარიშებით. კოდის შემოწმება მხოლოდ Vercel-ზე მუშაობს (GitHub Pages-სა და ლოკალურ ფაილზე ფუნქცია არ არის).
CodeQuest ცალკე პროგრამადაც არსებობს: საკუთარი ფანჯარა და ხატულა სამუშაო მაგიდაზე, ბრაუზერი არ სჭირდება. გადმოსაწერად საიტის მთავარ მენიუში დააჭირე 💻 კომპიუტერის ვერსია, ან გახსენი CodeQuest.html#download. საიტი შენს სისტემას თავად ამოიცნობს.
| სისტემა | ფაილი | დაყენება |
|---|---|---|
| Windows 10/11 | CodeQuest-Setup.exe | გახსენი, თავისით დაყენდება. თუ გამოჩნდა „Windows protected your PC“, დააჭირე More info → Run anyway. |
| macOS (M-ჩიპი და Intel) | CodeQuest.dmg | გადაიტანე Applications-ში. პირველად: System Settings → Privacy & Security → Open Anyway. |
| Linux | CodeQuest.AppImage | მიეცი გაშვების უფლება (chmod +x) და გაუშვი. |
როგორ მუშაობს (საქაღალდე desktop/, Electron):
codequest://app/CodeQuest.html. ინტერნეტით ის ყოველთვის ახალ ვერსიას იღებს საიტიდან და ასლს კომპიუტერში ინახავს, ამიტომ ახალი ლეველები პროგრამის თავიდან გადმოწერის გარეშე ჩანს./api/* საიტზე გადაიგზავნება, ამიტომ Pro-ს ლიცენზიის კოდი პროგრამაშიც მუშაობს. გადახდა ბრაუზერში იხსნება.desktop/projects.js, preload.js → window.cqDesktop.projects): დრაფტები ინახება userData/projects/<id>.json-ში. გვერდი მხოლოდ პროექტის id-ს და ფაილების ტექსტს აგზავნის — საქაღალდეს მხოლოდ Windows-ის ფანჯარა ირჩევს, ფაილის გზა კი მოწმდება ორჯერ (.., აბსოლუტური გზა, CON/NUL… აკრძალულია). შემოწმება: node desktop/projects.test.js.display-mode: standalone) იგივე API-ს PjWeb ასრულებს (CodeQuest.html): დრაფტები IndexedDB-შია (codequest-projects), შენახვა — ბრაუზერის ფაილური API-ით (showDirectoryPicker); საქაღალდის handle-იც IndexedDB-ში ინახება, ამიტომ მეორედ აღარ იკითხება. ფაილების ასლი შენახვის შემდეგაც რჩება, რომ საქაღალდის ნებართვის გარეშეც გაიხსნას.ახალი ვერსიის გამოშვება. .github/workflows/desktop.yml desktop/-ის ყოველ ცვლილებაზე GitHub Actions-ში აწყობს სამივე ფაილს და დებს Releases-ში, ტეგით desktop-v<ვერსია>. ახალი რელიზისთვის desktop/package.json-ში გაზარდე version. იგივე ვერსიაზე ფაილები უბრალოდ განახლდება. საიტის ბმულები ყოველთვის ბოლო რელიზზე მიდის.
ლოკალურად (Node 22+):
cd desktop
npm ci
npm start # გაშვება
npm run dist # ინსტალერი ამ სისტემისთვის → desktop/dist/
სატესტოდ: CODEQUEST_SITE=http://127.0.0.1:8080 თამაშს ლოკალური სერვერიდან ჩატვირთავს, CODEQUEST_OFFLINE=1 კი ინტერნეტის გათიშვას აჩვენებს.
პროგრამა ფასიანი ციფრული ხელმოწერის გარეშეა, ამიტომ Windows და macOS პირველ გაშვებაზე გაფრთხილებას აჩვენებს. ხელმოწერისთვის საჭიროა სერტიფიკატი (Windows) და Apple Developer-ის ანგარიში (macOS).
ჩამოტვირთე CodeQuest.html და გახსენი ბრაუზერში. სერვერი და ინსტალაცია არ სჭირდება.
ინტერნეტი საჭიროა მხოლოდ შრიფტებისა და CodeMirror რედაქტორისთვის. მის გარეშე თამაში მაინც მუშაობს, უფრო მარტივი რედაქტორით.
კლავიშები: Ctrl+Enter — გაშვება · Ctrl+Shift+Enter — ნაბიჯ-ნაბიჯ · Esc — ფანჯრის დახურვა.
ანგარიშის გარეშე პროგრესი ბრაუზერში ინახება (localStorage), თითოეული მისამართისთვის ცალკე. ამიტომ ლოკალური ფაილის პროგრესი საიტზე თავისით არ გადავა და პირიქით.
სხვა მოწყობილობაზე გადასატანი ორი გზა არსებობს:
💻 კომპიუტერის პროგრამაში პროგრესი მხოლოდ კომპიუტერში ინახება. ანგარიში იქ Pro-სთვის და კლასისთვისაა: შესვლისას ანგარიშის პროგრესი ერთხელ გადმოდის, შემდეგ კი სერვერზე მიდის მხოლოდ მოკლე შეჯამება (summary: XP, ლეველების რაოდენობა, სერია — კლასის რეიტინგისთვის) და ანონიმური სტატისტიკა. ასე პროგრამის მომხმარებლები ბაზის ადგილს თითქმის არ იკავებენ.
მთავარი მენიუს ზედა ზოლში არის ღილაკი შესვლა (იქვეა რეგისტრაციაც). სტუმარს ანგარიში არ სჭირდება და თამაშობს ისე, როგორც ადრე.
ანგარიშით პროგრესი, Pro და ბიტის ნივთები ყველა მოწყობილობაზე ერთია, კომპიუტერის პროგრამის ჩათვლით:
_ . -), პაროლი კი მინიმუმ 8 სიმბოლო. სახელს სხვა მოთამაშეები ვერ ხედავენ.ABCD-EFGH-2345). ის ერთხელ ჩანს და შეიძლება დააკოპირო ან ფაილად შეინახო. დავიწყებული პაროლი ამ კოდით აღდგება, რის შემდეგაც ახალი კოდი გაიცემა.ჩართვა (ერთხელ, საიტის მფლობელისთვის). ანგარიშები ინახება უფასო Upstash Redis ბაზაში:
codequest → Storage → Create Database → Upstash (Redis) → აირჩიე უფასო გეგმა და ახლო რეგიონი (მაგ. Frankfurt).codequest. Vercel თავად დაამატებს ცვლადებს KV_REST_API_URL და KV_REST_API_TOKEN.ბაზის გარეშე ღილაკი იმუშავებს, მაგრამ შესვლისას დაწერს, რომ ანგარიშები ჯერ არ არის ჩართული.
როგორ არის აწყობილი. api/account.js არის Vercel-ის ფუნქცია; ყველა მოთხოვნა POST /api/account { action, ... }:
register (ანგარიშს არ ქმნის — მხოლოდ წერილს აგზავნის), confirmReg (წერილის ბმული account.html?join= — ანგარიში ახლა იქმნება, ელფოსტა უკვე დადასტურებულია), login, reset, me, load, save, logout, password, delete.codequest.auth), ამიტომ არც პროგრესის კოდში ხვდება, არც სერვერზე.classCreate, classJoin, classLeave, classes, classView, classKick, classDelete. შექმნას, შეერთებას, სიას, ხედს და liveStart-ს Pro სჭირდება: თამაში აგზავნის Pro-ს ხელმოწერილ ნიშანს (pro), სერვერი მას PRO.pub-ის იგივე საჯარო გასაღებით ამოწმებს. სხვა შემთხვევაში პასუხია pro_required. გასვლას, წაშლას, ამოგდებას და გაკვეთილის დასრულებას Pro არ სჭირდება.liveStart, liveSet, liveEnd. მასწავლებლის დაფა 4 საათი ინახება (live:<ID>) და მისი შეცვლა მხოლოდ გაკვეთილის გასაღებით შეიძლება. მოსწავლეები დაფას წამში ერთხელ კითხულობენ GET /api/account?live=ID-ით. პასუხი Vercel-ის CDN-ში 1 წამით ინახება, ამიტომ მთელი კლასი ბაზას წამში მხოლოდ ერთხელ მიმართავს.
sum:<სახელი>): XP, ლეველები, ვარსკვლავები, ახლანდელი ლეველი, ენების პროგრესი. კვირის XP ამ შეჯამებიდან ითვლება.stat აგროვებს მონაცემებს ყოველი მეოთხე სესიიდან: ლეველის id, შეცდომები და გაიარა თუ არა, სახელის გარეშე.
კონფიდენციალურობა: privacy.html და terms.html. ბმულები ჩანს თამაშის ფუტერში და რეგისტრაციის ფორმაში.
HttpOnly + SameSite=Strict cookie-შია (cq_s, Path=/api). JavaScript-ს ის არ ხელეწიფება, ამიტომ XSS-ით ვერ მოიპარება.
localStorage-ში მხოლოდ სახელი და შენახვის მდგომარეობა ინახება./api/* ბრაუზერიდან მხოლოდ codequest-lazare.vercel.app-ს და ლოკალურ ტესტს ემსახურება. სხვა საიტი და Origin: null (ქვიშის ყუთის iframe, მაგალითად მასწავლებლის კოდი მოსწავლესთან) იღებს 403 bad_origin. დამატებითი დომენი: Vercel-ის EXTRA_ORIGINS (მძიმით).vercel.json):
Content-Security-Policy: სკრიპტები მხოლოდ საიტიდან და cdnjs-დან; მოთხოვნები მხოლოდ საიტზე და api.github.com-ზე; iframe — მხოლოდ YouTube; object-src none, frame-ancestors self.nosniff, X-Frame-Options, Referrer-Policy, Permissions-Policy და HSTS.integrity (cdnjs-ის ოფიციალური sha512). თუ CDN-ზე ფაილი შეიცვლება, ბრაუზერი მას აღარ გაუშვებს.server), სტეკს არასდროს.KV_REST_API_*, PRO_PRIVATE_KEY, OWNER_KEYS. .env*, pro-secrets.txt და *.cqb .gitignore-შია. თამაშში მხოლოდ Pro-ს საჯარო გასაღებია (PRO.pub).KEYS/ARGV), ამიტომ შეყვანით ინექცია შეუძლებელია..github/workflows/db-backup.yml ყოველ ღამე (02:17 UTC) ბაზას read-only ტოკენით კითხულობს და tools/db-backup.js-ით აკეთებს AES-256-GCM-ით დაშიფრულ ასლს (scrypt გასაღები). ასლი Actions-ის Artifacts-ში 30 დღე ინახება.
ყოველ ჯერზე აღდგენაც მოწმდება:
RESTORE_TEST_* მითითებულია, ასლი სატესტო ბაზაში სრულად აღდგება და ყველა გასაღები შედარდება.სესიები, ლიმიტები და ცოცხალი გაკვეთილები დროებითია და ასლში არ ინახება.
საჭირო საიდუმლოებები (GitHub → Settings → Secrets and variables → Actions):
UPSTASH_URLUPSTASH_READ_TOKENBACKUP_KEYაღდგენა:
BACKUP_KEY=… node tools/db-restore.js codequest-db-….cqb --dry-run
BACKUP_KEY=… UPSTASH_URL=… UPSTASH_TOKEN=<ჩაწერის ტოკენი> node tools/db-restore.js codequest-db-….cqb --yes --verify
რეპოში უკვე არის მთავარი გვერდი index.html და ცარიელი .nojekyll ფაილი.
#download), პირდაპირ CodeQuest.html-ზე გადადის. ?home ამ გვერდს ყოველთვის აჩვენებს.og.jpg (1200×630, ~100 KB), რომელიც Facebook-ზე და მესენჯერებში ჩანს. ასევე favicon.ico, robots.txt, sitemap.xml და საკუთარი 404.html.GitHub Pages-ზე გამოსაქვეყნებლად დარჩა ერთჯერადი ჩართვა: დარჩა ერთჯერადი ჩართვა:
Deploy from a branch.main, საქაღალდე / (root) → Save.ამის შემდეგ main-ზე ყოველი ცვლილება საიტს ავტომატურად განაახლებს. თამაში Vercel-ზეც მუშაობს, დამატებითი პარამეტრების გარეშე.
CodeQuest.html (HTML, CSS და JavaScript, build-ის გარეშე).LANGS ფაილში). თარჯიმანი ხაზებს ინარჩუნებს, ამიტომ შეცდომა და ნაბიჯ-ნაბიჯ რეჟიმი სწორ ხაზს აჩვენებს. ტიპები მოწმდება ისე, რომ ენის ქცევა ნამდვილს ემთხვეოდეს: C-ში და Java-ში 7 / 2 არის 3, Python-ში "x" + 5 შეცდომაა, Java 10.0-ს ბეჭდავს როგორც 10.0. მხარდაჭერილია ენის ძირითადი ნაწილი, რაც კურსებს სჭირდება (ცვლადები, პირობები, ციკლები, ფუნქციები, სიები/მასივები და სხვ.). კლასები, მაჩვენებლები და მსგავსი რამ ჯერ არ არის.nlCompile). ენებს შორის განსხვავება ცხრილებშია აღწერილი:
NL_D): კომენტარები, ტექსტში ჩადგმა (${x}, {x}, #{x}, \(x), $x), ბლოკები { } თუ end, სავალდებულო ;;NL_SEM): 7 / 2 არის 3 თუ 3.5, შეიძლება თუ არა "x" + 5, იბეჭდება თუ არა 5.0 როგორც 5.0.val-ის შეცვლა შეცდომაა, Lua-ში სია 1-დან ითვლება — როგორც ნამდვილ ენებში.DRILLS). ყოველი ლეველი გენერატორით იქმნება seed-იდან (ენა + ნომერი), ამიტომ ყოველთვის ერთნაირია. კურსის რიგს — რომელი თავი რის შემდეგ მოდის — coursePlan აწყობს.
nlEmit — ახალი ათი ენისთვის).iframe-შია (სკრიპტები იქ არ ეშვება), შემოწმება კი გვერდის DOM-სა და სტილებს ამოწმებს.untilwall_ahead?def ... end| Swift | 500 ლეველი | var/let, print, ჩადგმა \(x), 0..<10, func |
| Kotlin | 500 ლეველი | fun main, val/var, println("$x"), repeat, 0 until 10 |
| Lua | 500 ლეველი | local, if ... then ... end, ტექსტის შეერთება ..-ით, for i = 1, 10 do, 1-დან დანომრილი სიები |
| Dart | 500 ლეველი | void main, ტიპები, ჩადგმა '$x', მთელი გაყოფა ~/, ფუნქციები |
| HTML | 500 გაკვეთილი | სათაურები, აბზაცები, ბმულები, სურათები, სიები, ცხრილები, ფორმები, გვერდის სტრუქტურა |
| CSS | 500 გაკვეთილი | ფერები, შრიფტები, კლასები და id, ყუთის მოდელი, ჩარჩოები, Flexbox |
| React | 500 გაკვეთილი | JSX, კომპონენტები, props და children, სიები (map, filter, key), პირობითი ჩვენება, onClick, useState, ფორმები, useEffect |
id@პერიოდი).Progress.P.quests-შია და სხვა პროგრესივით სინქრონდება (mergeProgress — მთვლელიდან მეტი რჩება). კოდი: QUESTS და Quests (CodeQuest.html).🤝 ისწავლე ინგლისური: პარტნიორი English Quest — ბმული თამაშის მენიუში, მთავარი გვერდის ნავიგაციასა და ფუტერში და სკოლის მენიუში. იხსნება ახალ ჩანართში (კომპიუტერის ვერსიაში — სისტემურ ბრაუზერში). ყველა პარტნიორის ბანერი იმავე მისამართზე მიდის.
ქვიზი და „რეალურ ცხოვრებაში“ ახსნა ყოველი სამყაროს ბოსის შემდეგ.
ლექსიკონი (JavaScript) და შპარგალკა ყველა სხვა ენისთვის.
ენების სია: ძებნა და დალაგება — ყველაზე ხშირად ნათამაშები, ბოლოს ნათამაშები, პოპულარობით მსოფლიოში, რისთვის გამოიყენება (ვებსაიტები, აპები, თამაშები…), პროგრესით ან ანბანით. ენა ★-ით რჩეულებში ემატება: რჩეულები სიის თავში და მთავარ მენიუში ჩანს.
თავისუფალი რეჟიმი: ააწყე საკუთარი რუკა და გაუზიარე მეგობარს კოდით.
სპიდრანი: გავლილი ლეველის ხელახლა გავლა დროზე.
სერტიფიკატი ყოველი დასრულებული ენისთვის (ჩამოიტვირთება PNG-ად).
ნათელი და მუქი თემა, ხმა, ანიმაციის სიჩქარე, შრიფტის ზომა და მასწავლებლის რეჟიმი (👑 Pro: ყველა ლეველი ერთბაშად ღიაა; XP და გარდერობი ჩვეულებრივად).
მუშაობს კომპიუტერზეც და ტელეფონზეც.
💻 კომპიუტერის ვერსია: ცალკე პროგრამა Windows-ის, macOS-ისა და Linux-ისთვის, მუშაობს ინტერნეტის გარეშეც (იხ. კომპიუტერის ვერსია).
👤 ანგარიშები: სახელით და პაროლით, ელფოსტის გარეშე. პროგრესი, Pro და ბიტის ნივთები ყველა მოწყობილობაზე ერთია (იხ. ანგარიშები).
👩🏫 კლასები (👑 Pro — მასწავლებელსაც და მოსწავლესაც სჭირდება): მასწავლებელი ქმნის კლასს და ხედავს მოსწავლეების პროგრესს. მოსწავლეები 6-ასოიანი კოდით უერთდებიან და ხედავენ კლასის კვირის რეიტინგს.
🔴 ცოცხალი გაკვეთილი: მასწავლებელი კლასში იწყებს გაკვეთილს და ირჩევს ენას. მოსწავლეებს ეკრანზე ორი დაფა აქვთ: მასწავლებლისა, რომელიც ცოცხლად ჩანს (კოდი და გაშვების შედეგი ბრაუზერის ფანჯარაში გვერდით), და საკუთარი, სადაც თავად წერენ და უშვებენ.
🛍️ დღის შეთავაზება: გარდერობში ყოველდღე 6 ნივთი 30%-ით იაფია. შეთავაზება ყველასთვის ერთნაირია და შუაღამისას იცვლება.
📱 ტელეფონზე დაყენება (PWA): საიტი ტელეფონზე აპივით დგება, ხატულით მთავარ ეკრანზე, და ინტერნეტის გარეშეც იხსნება (manifest.webmanifest, sw.js).
OWNER_KEYSstat-ში მიდის (q-<id>); ownerStats მათ ლეველებისგან ცალკე აბრუნებს.ownerStats და ownerClass (მფლობელის კოდით, IP-დან საათში 120 მოთხოვნა). კოდი მხოლოდ გვერდის მეხსიერებაშია, ღილაკი „🔒 დაკეტვა“ მას შლის.await CodeQuest.testAll();CodeQuest.html#test მისამართის გახსნით (შედეგი კონსოლში დაიწერება).await CodeQuest.testGenerated() კონსოლში;CodeQuest.html#testgen მისამართის გახსნით;