Лекція 52. Фінальний проєкт: Computer Detective
Лекція 52. Фінальний проєкт: Computer Detective
Section titled “Лекція 52. Фінальний проєкт: Computer Detective”Рівень 10: Фінальний інженерний рейд
Марко, сьогодні ми не просто вивчимо новий термін — ми відкриємо ще один шар того, як насправді працює комп’ютер.
Що ми сьогодні розкриємо
Section titled “Що ми сьогодні розкриємо”- об’єднати Python, Linux, файли, ОС, мережі, безпеку та Git
- створити корисний CLI-інструмент для дослідження власного комп’ютера
- опублікувати безпечний навчальний проєкт на GitHub разом із README
Зв’язок з попередніми лекціями
Section titled “Зв’язок з попередніми лекціями”У цій лекції ми зберемо всі знання курсу — від даних і програм до мереж, безпеки та Git — щоб створити власний корисний інструмент.
Фінал — не нова магія, а складання знайомих деталей
Section titled “Фінал — не нова магія, а складання знайомих деталей”Марко, сьогодні ми не вводимо десятки нових понять. Навпаки: беремо вже вивчені моделі й будуємо інструмент Computer Detective.
Програма має відповісти на питання:
- яка ОС і версія Python;
- який hostname;
- який процесор/архітектура;
- скільки логічних CPU;
- яка домашня та поточна директорія;
- скільки місця на файловій системі;
- яка локальна адреса визначена для вихідного мережевого маршруту, але без обов’язкової публікації цієї адреси.
Ми зберемо дані, красиво виведемо їх, зробимо файл виконуваним, commit-имо й підготуємо GitHub-публікацію.
Python має стандартні модулі для системної інформації
Section titled “Python має стандартні модулі для системної інформації”Ми використаємо лише стандартну бібліотеку:
platform— ОС, архітектура, Python;os— CPU count, користувацьке середовище, шляхи;socket— hostname і навчальна спроба визначити локальну адресу;shutil— інформація про disk usage;pathlib.Path— робота з шляхами.
Якщо певне поле недоступне на конкретній системі, хороший інструмент не повинен падати без пояснення — тому використаємо функції й обережну обробку мережевого кроку.
Приватність — частина вимог проєкту
Section titled “Приватність — частина вимог проєкту”System Detective знає багато про комп’ютер, але README не повинен містити реальні секрети чи зайві персональні дані. Ми розділимо локальний результат і публічний приклад.
У README можна показати:
Hostname: <hidden>Local IP: <hidden>OS: Ubuntu ...Python: 3.x.xТобто вміння не публікувати зайве — теж результат курсу.
Приклади
Section titled “Приклади”Приклад 1
Section titled “Приклад 1”Функція shutil.disk_usage(Path.home()) повертає total, used, free для файлової системи, де лежить домашній каталог.
Приклад 2
Section titled “Приклад 2”platform.system() може повернути Linux, а /etc/os-release дає більш людську назву дистрибутива; у базовому проєкті достатньо стандартного platform.
Приклад 3
Section titled “Приклад 3”Git commit фіксує локальну версію проєкту; git push публікує вже створені commits у remote — ми не плутаємо ці кроки.
Фінальна лабораторія: будуємо проєкт
Section titled “Фінальна лабораторія: будуємо проєкт”Крок 1. Структура
Section titled “Крок 1. Структура”mkdir -p ~/Projects/computer-detectivecd ~/Projects/computer-detectivetouch computer_detective.py README.md .gitignoreКрок 2. Код computer_detective.py
Section titled “Крок 2. Код computer_detective.py”#!/usr/bin/env python3
import osimport platformimport socketimport shutilfrom pathlib import Path
def bytes_to_gib(value): return value / (1024 ** 3)
def detect_local_ip(): """Return a likely local outbound IP without sending application data.""" sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: # UDP connect selects a route; no application packet has to be sent here. sock.connect(("1.1.1.1", 80)) return sock.getsockname()[0] except OSError: return "unavailable" finally: sock.close()
def main(): home = Path.home() disk = shutil.disk_usage(home)
print("=== Computer Detective ===") print("OS:", platform.system(), platform.release()) print("Machine:", platform.machine()) print("Python:", platform.python_version()) print("Hostname:", socket.gethostname()) print("Logical CPUs:", os.cpu_count()) print("Home:", home) print("Current directory:", Path.cwd()) print(f"Disk total: {bytes_to_gib(disk.total):.1f} GiB") print(f"Disk free: {bytes_to_gib(disk.free):.1f} GiB") print("Local IP:", detect_local_ip())
if __name__ == "__main__": main()Крок 3. Запуск і права
Section titled “Крок 3. Запуск і права”python3 computer_detective.pychmod +x computer_detective.py./computer_detective.pyПоясни, навіщо shebang і чому chmod +x не був потрібен для варіанта python3 computer_detective.py.
Крок 4. .gitignore
Section titled “Крок 4. .gitignore”__pycache__/*.pyc.venv/.envКрок 5. README
Section titled “Крок 5. README”У README.md напиши своїми словами:
# Computer Detective
Навчальний Linux/Python-проєкт, який показує базову інформацію про комп’ютер.
## Що я вивчив- різницю між RAM і диском;- що таке ОС, процес і файл;- як працюють IP та localhost;- як користуватися Git.
## Запуск```bashpython3 computer_detective.py```
## ПриватністьНе публікуй реальний hostname, IP, username, токени або інші приватні дані у прикладах виводу.Коли вставлятимеш вкладений code block у справжній README, використай зовнішні тильди ~~~markdown або просто напиши розділи напряму, щоб Markdown-блоки не конфліктували.
Крок 6. Git
Section titled “Крок 6. Git”git initgit statusgit add computer_detective.py README.md .gitignoregit statusgit commit -m "Build Computer Detective project"git log --onelineЯкщо ім’я/адреса автора ще не налаштовані, зробіть це разом із дорослим privacy-friendly способом, як у лекції 44.
Крок 7. GitHub
Section titled “Крок 7. GitHub”Перед публікацією:
git statusgit diff --cachedПеревір файли очима. Потім разом із дорослим створіть порожній GitHub repository, додайте remote URL, який покаже GitHub, і виконайте типовий потік:
git branch -M maingit remote add origin ВАША_REMOTE_URLgit push -u origin mainНе вставляй токени, паролі чи приватні ключі в README, команду або файли репозиторію.
Місія для Марка
Section titled “Місія для Марка”Виконай місію по черзі. Якщо щось не виходить — спочатку перечитай приклад вище й спробуй знайти, на якому кроці результат відрізняється.
- створи структуру
~/Projects/computer-detective - набери програму самостійно, а не просто запускай нечитаний файл; після кожного блоку поясни його роль
- запусти програму двома способами: через
python3і як виконуваний файл - створи
.gitignoreі README з описом того, що ти зрозумів у курсі - зроби commit і переглянь
git log --oneline - перед GitHub-публікацією перевір staged diff і видали з README точні приватні значення
- разом із дорослим зроби push у GitHub
- покажи проєкт іншій людині й без підглядання поясни: файл, процес, RAM, ОС, IP, port, Git commit, Git push
Перевір себе
Section titled “Перевір себе”- Чому цей проєкт є інтеграцією всього курсу?
- Яка різниця між
python3 file.pyі./file.py? - Навіщо потрібен
shutil.disk_usage? - Чому локальний IP можна показати на своєму екрані, але не обов’язково публікувати?
- Що фіксує commit і що робить push?
- Які три речі ти тепер можеш пояснити про комп’ютер краще, ніж до курсу?
Терміни однією фразою
Section titled “Терміни однією фразою”- Computer Detective — фінальний проєкт, який поєднує Python, Linux і Git.
platform— модуль для інформації про ОС, архітектуру та версію Python.os— модуль для доступу до операційної системи (CPU, шляхи, змінні середовища).socket— модуль для мережевих операцій.shutil— модуль для високорівневих файлових операцій.shutil.disk_usage— інформація про вільне місце на файловій системі.- README — файл, який описує проєкт для інших людей.
Чек-лист для фінального проєкту
Section titled “Чек-лист для фінального проєкту”- Чи можеш ти пояснити різницю між
python3 file.pyі./file.py? - Чи знаєш ти, як перевірити права доступу до файлу?
- Чи вмієш ти використовувати
platform,os,socketтаshutilу Python?
Що потрібно винести з лекції
Section titled “Що потрібно винести з лекції”- інформатика — це зв’язана система ідей від бітів до мереж та програм
- Linux дає інструменти спостерігати ці ідеї на реальному комп’ютері
- Python дозволяє автоматизувати дослідження, а Git — зберігати історію роботи
- безпека й приватність є частиною інженерної якості, а не додатком наприкінці
Хакерський принцип: не запам’ятовуй магічні слова. Намагайся пояснити своїми словами, що відбулося і чому.