За останні дні, я додав підтримку повного циклу ініціалізації, емуляції одної інструкції та дампу стану CPU через WebUI.
- CPU module: отримав підтримку базової ініціалізації та дампу.
- RAM module: обробляє 32-бітні читання та записи
- Введена базова інструкція
ADD дял перевірки логіки CPU.- Створено окремий модуль від ядра (kernel), який слухає stdin і приймає JSON-команди (init, dump).
- Логіка команд відділена від I/O.
- Запускається окремий CLI-процес (тобто скомпільований kernel & ipc), з яким спілкується через stdin/stdout.
- Додано HTTP-server, який обробляє /init і /dump
- Простий index.html з кнопками “Init CPU” та “Dump CPU State”
- JSON-вивід рендериться в <pre> для дебагу стану регістрів
📊 На даний момент Silico уже може:
- проініціалізувати CPU (x0–x30, SP, PC, PSTATE)
- передавати команди через IPC
- виводити повний дамп CPU через веб
- мати базову взаємодію між пам’яттю та процесором
Це тільки початок ... Попереду ще багато інженерного м’яса !
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Запустив, продовжую розбиратись з Core, ALU і з самим ARM64
https://www.twitch.tv/t3nyd
https://www.twitch.tv/t3nyd
https://www.twitch.tv/t3nyd
https://www.twitch.tv/t3nyd
https://www.twitch.tv/t3nyd
https://www.twitch.tv/t3nyd
Twitch
t3nyd - Twitch
Self-learning programming, computer science, software development.
На першій частині стріма, я розширив декодування інструкцій та набір opcode'ів. Включено повний список базових інструкцій ARM64. Додано допоміжні функції декодування.
Єдине, що не реалізовано це гілки та операції з пам'яттю, вони залишаються як
https://github.com/DenysSkobalo/silico/commit/735e18c706178ba4bb72e015f40f924b3f8eb76c
Продовжую далі😌
Єдине, що не реалізовано це гілки та операції з пам'яттю, вони залишаються як
OPCODE_UNKNOWN для майбутньої реалізації. https://github.com/DenysSkobalo/silico/commit/735e18c706178ba4bb72e015f40f924b3f8eb76c
Продовжую далі😌
GitHub
feat: extend instruction decoding and core opcode set · DenysSkobalo/silico@735e18c
- Reworked `core.h` to include a full list of A64 base instructions:
- Arithmetic: ADD, SUB, ADDS, SUBS, MUL, SMULL, etc.
- Immediate arithmetic: ADDI, SUBI
- Logical (R-type and immediate): ...
- Arithmetic: ADD, SUB, ADDS, SUBS, MUL, SMULL, etc.
- Immediate arithmetic: ADDI, SUBI
- Logical (R-type and immediate): ...
Рефакторинг блоку декокудвання та розробка execute & ALU
https://www.twitch.tv/t3nyd
https://www.twitch.tv/t3nyd
https://www.twitch.tv/t3nyd
https://www.twitch.tv/t3nyd
https://www.twitch.tv/t3nyd
https://www.twitch.tv/t3nyd
Twitch
t3nyd - Twitch
Self-learning programming, computer science, software development.
За три години стріма, розширив
Додано повідомлення про невідому інструкцію з точним
У
Commit 1: https://github.com/DenysSkobalo/silico/commit/99468597a66ed3c3012fd468f3e5d6af19ef78b7
Commit 2: https://github.com/DenysSkobalo/silico/commit/dd4d1cc077181f082c3554a6725b3b5758231fa1
DecodeInstr, ввів InstrClass для класифікації інструкцій (арифметика, логічні, гілки, памʼять, системні). Переписав decode() та імплементував execute() для підтримки цієї класифікації. Виніс арифметичні та логічні інструкції у execute_alu(). Додано інструкції: ADD, SUB, ADDI, SUBI, MUL, MOVZ, MOVN, MOVK, AND, ORR, EOR, ANDI, ORRI, EORI.Додано повідомлення про невідому інструкцію з точним
PC, щоб легше відловлювати баги.У
main.c тепер є зручний приклад з повним тестовим набором інструкцій, які працюють: обчислення, логіка, завантаження констант, зсуви.Commit 1: https://github.com/DenysSkobalo/silico/commit/99468597a66ed3c3012fd468f3e5d6af19ef78b7
Commit 2: https://github.com/DenysSkobalo/silico/commit/dd4d1cc077181f082c3554a6725b3b5758231fa1
GitHub
feat: add instruction classification and integrate ALU execution logic · DenysSkobalo/silico@9946859
- Introduced `InstrClass` enum to classify instruction types (ARITHMETIC, LOGICAL, MOV, etc.)
- Extended `DecodeInstr` with `iclass` and `shift` fields
- Added `classify_instruction()` to assign in...
- Extended `DecodeInstr` with `iclass` and `shift` fields
- Added `classify_instruction()` to assign in...
Літо всралося, відпочинок закінчився, час знову грузнути в грьобаному універі й розгрібати свої проєкти. Останній курс, тому треба добивати все, що почав.
Кілька місяців тому я запускав експеримент — писати свою мінімальну ОС. Потім забив, але репо на GitHub залишив. І ось тиждень тому дістав його з архіва й нарешті почав рухати далі.
Що вже зроблено:
- прибрав старий 16-бітний bootloader на ASM;
- завів Multiboot через GRUB та ISO;
- організував лінкування ядра через LD і NASM;
- написав мінімальне ядро на C з виводом на VGA;
- навів лад у Makefile: тепер є build, iso, qemu, docker;
- додав
Проєкт оживає, і навіть у такому мінімальному вигляді він уже приносить кайф. Далі буде цікавіше.
Репо: https://github.com/DenysSkobalo/detux
Кілька місяців тому я запускав експеримент — писати свою мінімальну ОС. Потім забив, але репо на GitHub залишив. І ось тиждень тому дістав його з архіва й нарешті почав рухати далі.
Що вже зроблено:
- прибрав старий 16-бітний bootloader на ASM;
- завів Multiboot через GRUB та ISO;
- організував лінкування ядра через LD і NASM;
- написав мінімальне ядро на C з виводом на VGA;
- навів лад у Makefile: тепер є build, iso, qemu, docker;
- додав
build.sh для Docker-збірки.Проєкт оживає, і навіть у такому мінімальному вигляді він уже приносить кайф. Далі буде цікавіше.
Репо: https://github.com/DenysSkobalo/detux
GitHub
GitHub - DenysSkobalo/detux
Contribute to DenysSkobalo/detux development by creating an account on GitHub.
На днях, мені прийшов мікроконтролер на базі ESP8266EX. В ній присутній WiFi (802.11 b/g/n) з TCP/IP стеком, SRAM (64KB instructions + 96KB data), SPI Flash 4 MB, GPIO, SPI, I^2C, UART, PWM, ADC.
І перше, що я вирішив на ньому зроюити, це підняти легкий вебсервер. Написав все на С++ та скомпілював для Arduino через заголовковий файл. А далі все постандарту, збірка проєкта та прошивка через Makefile. Одне з мінусів те, що я не маю доступу до роутера тому підняв через телефон хотспот та підключився до нього і на ПК на якому потрібно відкрити піднятий сервер, він повинен теж бути підключеним до WiFi (у моєму випадку хотспот), що підключений сам сервер. Далі відкриваєм IP-адрес котрий пише на OLED, що підключений до чіпсета, вбиваємо в браузер, відкривається сайт, пишемо повідомлення та отримуємо повідомлення на екрані, що було написано на сайті.
Але, щоб вирішити проблему щодо відкриття сайту з любого WiFi, то я придумав рішення. Можна прокинути тунель через Ngrok або Cloudfare Tunnel, але я вибрав Ngrok, прокинув тунель, отримав згенероване рандомне URL-посилання і все працює так само.
Ось такий невеликий, але доволі цікавий проєкт. Нижче залишаю посилання на репо.
https://github.com/DenysSkobalo/ESP8266-webAP
І перше, що я вирішив на ньому зроюити, це підняти легкий вебсервер. Написав все на С++ та скомпілював для Arduino через заголовковий файл. А далі все постандарту, збірка проєкта та прошивка через Makefile. Одне з мінусів те, що я не маю доступу до роутера тому підняв через телефон хотспот та підключився до нього і на ПК на якому потрібно відкрити піднятий сервер, він повинен теж бути підключеним до WiFi (у моєму випадку хотспот), що підключений сам сервер. Далі відкриваєм IP-адрес котрий пише на OLED, що підключений до чіпсета, вбиваємо в браузер, відкривається сайт, пишемо повідомлення та отримуємо повідомлення на екрані, що було написано на сайті.
Але, щоб вирішити проблему щодо відкриття сайту з любого WiFi, то я придумав рішення. Можна прокинути тунель через Ngrok або Cloudfare Tunnel, але я вибрав Ngrok, прокинув тунель, отримав згенероване рандомне URL-посилання і все працює так само.
Ось такий невеликий, але доволі цікавий проєкт. Нижче залишаю посилання на репо.
https://github.com/DenysSkobalo/ESP8266-webAP
GitHub
GitHub - DenysSkobalo/ESP8266-webAP
Contribute to DenysSkobalo/ESP8266-webAP development by creating an account on GitHub.
CompTalks
На днях, мені прийшов мікроконтролер на базі ESP8266EX. В ній присутній WiFi (802.11 b/g/n) з TCP/IP стеком, SRAM (64KB instructions + 96KB data), SPI Flash 4 MB, GPIO, SPI, I^2C, UART, PWM, ADC. І перше, що я вирішив на ньому зроюити, це підняти легкий…
Продовжую гратись з ESP8266EX 🙂
Після того як підняв базовий вебсервер і прокидав тунель через Ngrok, я вирішив трохи ускладнити завдання.
🔹 Тепер мікроконтролер працює у режимі Access Point (AP) -- тобто він сам створює WiFi-мережу. Не потрібно ніякого роутера чи хотспоту з телефону: ESP8266 піднімає свій SSID, показує його та IP прямо на OLED-екрані, і до цієї мережі можна підключитися будь-яким пристроєм. Відкриваєш браузер → заходиш за IP → бачиш сайт із ESP.
По суті, ESP8266 перетворився на мініатюрний роутер із власним вебсервером.
Репо той самий, але тепер у ньому інша назва:
https://github.com/DenysSkobalo/ESP8266-webAP
Після того як підняв базовий вебсервер і прокидав тунель через Ngrok, я вирішив трохи ускладнити завдання.
🔹 Тепер мікроконтролер працює у режимі Access Point (AP) -- тобто він сам створює WiFi-мережу. Не потрібно ніякого роутера чи хотспоту з телефону: ESP8266 піднімає свій SSID, показує його та IP прямо на OLED-екрані, і до цієї мережі можна підключитися будь-яким пристроєм. Відкриваєш браузер → заходиш за IP → бачиш сайт із ESP.
По суті, ESP8266 перетворився на мініатюрний роутер із власним вебсервером.
Репо той самий, але тепер у ньому інша назва:
https://github.com/DenysSkobalo/ESP8266-webAP
GitHub
GitHub - DenysSkobalo/ESP8266-webAP
Contribute to DenysSkobalo/ESP8266-webAP development by creating an account on GitHub.
Давно не читав, що там в "улюбленому" ІТ ринку робиться, і наткнувся на нове дослідження Гарварду (62 млн резюме + 285 тис. компаній) показало цікаву річ.
До 2022 року все було рівно: і джуни, і сеньйори росли в кількості.
Але з початку 2023 року, коли компанії масово почали інтегрувати ChatGPT-подібні інструменти, відбувся так сказати перелом:
- джуни пішли вниз, їх перестали активно наймати,
- сеньйори залишились у плюсі, їх найм продовжився.
Особливо сильно це вдарило по оптовій і роздрібній торгівлі.
Але цікаво не масові звільнення, а саме зменшення найму а тих, хто вже всередині компанії, навпаки, частіше піднімають.
Найбільше втратили випускники “середніх” університетів. Еліта та самий низ залишилися більш захищеними.
Висновок такий, що генеративний AI робить кар’єрну драбину вужчою знизу. Увійти в гру джунам стало важче, а нерівність лише зростатиме.
https://papers.ssrn.com/sol3/papers.cfm?abstract_id=5425555
До 2022 року все було рівно: і джуни, і сеньйори росли в кількості.
Але з початку 2023 року, коли компанії масово почали інтегрувати ChatGPT-подібні інструменти, відбувся так сказати перелом:
- джуни пішли вниз, їх перестали активно наймати,
- сеньйори залишились у плюсі, їх найм продовжився.
Особливо сильно це вдарило по оптовій і роздрібній торгівлі.
Але цікаво не масові звільнення, а саме зменшення найму а тих, хто вже всередині компанії, навпаки, частіше піднімають.
Найбільше втратили випускники “середніх” університетів. Еліта та самий низ залишилися більш захищеними.
Висновок такий, що генеративний AI робить кар’єрну драбину вужчою знизу. Увійти в гру джунам стало важче, а нерівність лише зростатиме.
https://papers.ssrn.com/sol3/papers.cfm?abstract_id=5425555
👍1
Project DB.zip
6.3 MB
Перший за три роки університетський проєкт, який реально викликав інтерес, проєктування і реалізація бази даних для керування віртуальними машинами (PostgreSQL + Docker).
Нарешті завдання, де можна було мислити як інженер, а не просто писати блять базові алгоритми або слухати брєд професорів без досвіду.
*прикріпляю зіпку проєкта зверху, там і скрипти, і документація на французькій та українській
Нарешті завдання, де можна було мислити як інженер, а не просто писати блять базові алгоритми або слухати брєд професорів без досвіду.
*прикріпляю зіпку проєкта зверху, там і скрипти, і документація на французькій та українській
🔥2
AI повністю змінив відчуття від програмування.
Раніше застряг, значить, кілька днів у StackOverflow, Reddit і нескінченних костилях.
Тепер просто чекаєш апдейт моделі або перемикаєшся на іншу LLM, і все запрацювало. І ми навіть ще не в еру AGI
Раніше застряг, значить, кілька днів у StackOverflow, Reddit і нескінченних костилях.
Тепер просто чекаєш апдейт моделі або перемикаєшся на іншу LLM, і все запрацювало. І ми навіть ще не в еру AGI
Сьогодні хочу поділитися невеликим експериментом із low-level програмування на macOS – це Data Link Sniffer, простий sniffer Ethernet/Wi-Fi, побудований на основі BPF (Berkeley Packet Filter).
Ідея дуже проста, але водночас демонструє роботу з мережею на найнижчому рівні: ми читаємо сирі Ethernet-фрейми з мережевого інтерфейсу, а потім виводимо MAC-адреси відправника та отримувача і тип кадру (EtherType).
Технічно, програмі потрібні лише:
- macOS,
- права root (щоб отримати доступ до /dev/bpf*),
- компілятор Clang.
Після компіляції (make) та запуску (sudo ./bpf_sniffer) можна спостерігати трафік у реальному часі. Варто пам’ятати, що на Wi-Fi в managed mode ви не побачите всі підключені пристрої для цього потрібен monitor mode. І ще невелике зауваження: іноді macOS може виводити попередження про BIOCSETBUFSIZE – його можна ігнорувати.
Цей проєкт чудовий приклад того, як низькорівневе програмування дозволяє отримати доступ до мережі на рівні кадрів, обходячи високорівневі API. Для тих, хто цікавиться мережею, BPF і системним програмуванням, це відмінний старт/
Github Repo:
https://github.com/DenysSkobalo/bpf_sniffer
Ідея дуже проста, але водночас демонструє роботу з мережею на найнижчому рівні: ми читаємо сирі Ethernet-фрейми з мережевого інтерфейсу, а потім виводимо MAC-адреси відправника та отримувача і тип кадру (EtherType).
Технічно, програмі потрібні лише:
- macOS,
- права root (щоб отримати доступ до /dev/bpf*),
- компілятор Clang.
Після компіляції (make) та запуску (sudo ./bpf_sniffer) можна спостерігати трафік у реальному часі. Варто пам’ятати, що на Wi-Fi в managed mode ви не побачите всі підключені пристрої для цього потрібен monitor mode. І ще невелике зауваження: іноді macOS може виводити попередження про BIOCSETBUFSIZE – його можна ігнорувати.
Цей проєкт чудовий приклад того, як низькорівневе програмування дозволяє отримати доступ до мережі на рівні кадрів, обходячи високорівневі API. Для тих, хто цікавиться мережею, BPF і системним програмуванням, це відмінний старт/
Github Repo:
https://github.com/DenysSkobalo/bpf_sniffer
GitHub
GitHub - DenysSkobalo/bpf_sniffer
Contribute to DenysSkobalo/bpf_sniffer development by creating an account on GitHub.
Три тижні тому в мене прийшла ідея зробити маленьку утиліту для macOS: щоб клавіатура автоматично переключалась залежно від активного додатку. Наприклад, коли я відкриваю Telegram — розкладка українська, а коли відкриваю термінал — англійська. Потім я трохи забив на цю ідею… і ось учора вирішив нарешті реалізувати її.
Ідея виявилась цікавою, бо на перший погляд здається простою, але насправді довелось продумати декілька речей: як відслідковувати активний додаток і як переключати розкладку клавіатури у реальному часі.
Розробка йшла поетапно:
1. Моніторинг активного додатку
Спочатку я пробував різні способи отримати назву активного вікна. Виявилось, що найстабільніше працює NSWorkspace.sharedWorkspace().frontmostApplication через Objective-C код. Це стало основою модуля macos_bridge.m, який підключений до C-проєкту через заголовки macos.h та macos_bridge.h.
2. Зміна розкладки
Наступний крок — переключення розкладки клавіатури. Для цього я реалізував функцію set_keyboard_layout, яка працює через TIS (Text Input Source) API macOS. Тепер можна задавати ідентифікатори розкладок на кшталт com.apple.keylayout.ABC чи com.apple.keylayout.Ukrainian-PC.
3. Парсер JSON правил
Щоб користувач міг налаштувати, яка розкладка для якого додатку, я реалізував власний парсер JSON-файлу rules.json. Він читає конфігурацію правил у C, виділяє назви додатків та потрібні розкладки. Наприклад:
Функція apply_rules_to_active_window перевіряє активний додаток і застосовує потрібну розкладку у реальному часі.
На даному етапі утиліта поки що в розробці, і готова лише підутиліта ADA (auto-detected-app). Вона вже може відслідковувати активний додаток та виводити debug-вивід із застосованими правилами розкладки.
Власна проблема з постійним переключенням розкладки перетворилась на окремий проєкт.
https://github.com/DenysSkobalo/macos-input-switcher
Ідея виявилась цікавою, бо на перший погляд здається простою, але насправді довелось продумати декілька речей: як відслідковувати активний додаток і як переключати розкладку клавіатури у реальному часі.
Розробка йшла поетапно:
1. Моніторинг активного додатку
Спочатку я пробував різні способи отримати назву активного вікна. Виявилось, що найстабільніше працює NSWorkspace.sharedWorkspace().frontmostApplication через Objective-C код. Це стало основою модуля macos_bridge.m, який підключений до C-проєкту через заголовки macos.h та macos_bridge.h.
2. Зміна розкладки
Наступний крок — переключення розкладки клавіатури. Для цього я реалізував функцію set_keyboard_layout, яка працює через TIS (Text Input Source) API macOS. Тепер можна задавати ідентифікатори розкладок на кшталт com.apple.keylayout.ABC чи com.apple.keylayout.Ukrainian-PC.
3. Парсер JSON правил
Щоб користувач міг налаштувати, яка розкладка для якого додатку, я реалізував власний парсер JSON-файлу rules.json. Він читає конфігурацію правил у C, виділяє назви додатків та потрібні розкладки. Наприклад:
{
"rules": [
{"app": "kitty", "layout": "eng"},
{"app": "Telegram Desktop", "layout": "ua"},
{"app": "Google Chrome", "layout": "eng"}
]
}
Функція apply_rules_to_active_window перевіряє активний додаток і застосовує потрібну розкладку у реальному часі.
На даному етапі утиліта поки що в розробці, і готова лише підутиліта ADA (auto-detected-app). Вона вже може відслідковувати активний додаток та виводити debug-вивід із застосованими правилами розкладки.
Власна проблема з постійним переключенням розкладки перетворилась на окремий проєкт.
https://github.com/DenysSkobalo/macos-input-switcher
GitHub
GitHub - DenysSkobalo/macos-input-switcher
Contribute to DenysSkobalo/macos-input-switcher development by creating an account on GitHub.
Зараз активно введеться розробка проєкту "MIS", і вже відбулося кілька важливих змін і покращень:
1. Повна інтеграція C та Objective-C
Тепер проєкт компілюється як єдиний бінарник, де C-логіка і Objective-C код (для macOS API) працюють разом без “костилів”. Тепер усі модулі, включно з відслідковуванням активного додатку і управлінням клавіатурою, компілюються через один Makefile і збираються у повноцінний .app.
2. Нова система правил
JSON-конфіг rules.json отримав оновлення: додав підтримку нових додатків і точних ідентифікаторів розкладок. Наприклад, тепер можна задати:
1. Повна інтеграція C та Objective-C
Тепер проєкт компілюється як єдиний бінарник, де C-логіка і Objective-C код (для macOS API) працюють разом без “костилів”. Тепер усі модулі, включно з відслідковуванням активного додатку і управлінням клавіатурою, компілюються через один Makefile і збираються у повноцінний .app.
2. Нова система правил
JSON-конфіг rules.json отримав оновлення: додав підтримку нових додатків і точних ідентифікаторів розкладок. Наприклад, тепер можна задати:
{
"rules": [
{"app": "kitty", "layout": "com.apple.keylayout.ABC"},
{"app": "Telegram", "layout": "com.apple.keylayout.Ukrainian-PC"},
{"app": "ChatGPT", "layout": "com.apple.keylayout.Ukrainian-PC"},
{"app": "Google Chrome", "layout": "com.apple.keylayout.ABC"}
]
}
❤1
3. Новий модуль layout_switcher
Реалізована централізована логіка зміни розкладки. Тепер не потрібно окремо викликати API для кожного додатку — функції layout_switcher_init та layout_switcher_free керують усім циклом переключень, економлячи ресурси та мінімізуючи затримки.
4. Відмовились від старого модуля auto-detected-app
Раніше я робив окремий агент, який тільки виводив debug-інформацію. Зараз він повністю інтегрований у головний бінарник, і відстеження активного додатку працює у фоновому режимі без додаткових процесів.
Результат: зараз утиліта вже збирається в готовий .app, автоматично підтягує правила з rules.json і змінює розкладку під час роботи з будь-яким додатком. Тестування показує, що переключення практично миттєве, а CPU навантаження мінімальне.
https://github.com/DenysSkobalo/macos-input-switcher/commit/57a66c3f9722924648c261f00abee2403d079240
Реалізована централізована логіка зміни розкладки. Тепер не потрібно окремо викликати API для кожного додатку — функції layout_switcher_init та layout_switcher_free керують усім циклом переключень, економлячи ресурси та мінімізуючи затримки.
4. Відмовились від старого модуля auto-detected-app
Раніше я робив окремий агент, який тільки виводив debug-інформацію. Зараз він повністю інтегрований у головний бінарник, і відстеження активного додатку працює у фоновому режимі без додаткових процесів.
Результат: зараз утиліта вже збирається в готовий .app, автоматично підтягує правила з rules.json і змінює розкладку під час роботи з будь-яким додатком. Тестування показує, що переключення практично миттєве, а CPU навантаження мінімальне.
https://github.com/DenysSkobalo/macos-input-switcher/commit/57a66c3f9722924648c261f00abee2403d079240
GitHub
Update build system, clean up deprecated code, and update rules · DenysSkobalo/macos-input-switcher@57a66c3
- Added all_files.txt and diff.txt to .gitignore
- Updated Makefile:
* Added -O2 optimization for C and Obj-C compilation
* Added IOKit and Carbon frameworks to LDFLAGS
* Enabled dependency t...
- Updated Makefile:
* Added -O2 optimization for C and Obj-C compilation
* Added IOKit and Carbon frameworks to LDFLAGS
* Enabled dependency t...
Сьогодні день був так сказати проведений в резюме та LinkedIn. Але по закінченю, я загадав що у мене є ігровий ноутбук, який я вже не використовую. І в голову прийшла думка, а якщо я з нього спробую зробити сервер для своїх пет-проєктів. Ну і з цього почалось 4-годинне занурення як Sysadmin & DevOps.
Спочатку, я зробив загрузочну флешку з Ubuntu Server. Вставив в ноутбук, зніс до біса Windows (дратує Windows), встановив на свою машину Ubuntu Server Minimized, без GUI і лишнього сміття.
Спочатку, я зробив загрузочну флешку з Ubuntu Server. Вставив в ноутбук, зніс до біса Windows (дратує Windows), встановив на свою машину Ubuntu Server Minimized, без GUI і лишнього сміття.
Далі, підключення до Wi-Fi. А це окрема проблема тому, що я живу у гуртожитку та немаю Ethernet кабелю. Хвилин 10-15, почитавши про netplan, написав конфіг для підключення до Wi-Fi і все, доступ отриманий. Після цього йшла Linux-рутина,
sh sudo apt update && sudo apt upgrade -y, далі встановлення базових інструментів. З головного це nvim, я зрозумів, що я без нього як без рук, якщо йдеться про написання коду, конфігів. А потім я згадую, що якщо я буду не вдома а доступ до "сервера" треба буде отримати, я встановлюю та налаштовую OpenSSH. Одразу пересідаю за свій Macbook та підключаюсь до нього через ssh і продовжую налаштування "сервера". А да доречі, ще зробив таку структуру:
/srv/docker # for Docker container
/srv/projects # for my projects
/srv/volumes # for saved Docker volumes
❤1
