Як працює протокол HTTPs:
https://www.youtube.com/watch?v=j9QmMEWmcfo
https://www.youtube.com/watch?v=j9QmMEWmcfo
YouTube
SSL, TLS, HTTPS Explained
To get better at system design, subscribe to our weekly newsletter: https://bit.ly/3tfAlYD
Checkout our bestselling System Design Interview books:
Volume 1: https://amzn.to/3Ou7gkd
Volume 2: https://amzn.to/3HqGozy
ABOUT US:
Covering topics and trends…
Checkout our bestselling System Design Interview books:
Volume 1: https://amzn.to/3Ou7gkd
Volume 2: https://amzn.to/3HqGozy
ABOUT US:
Covering topics and trends…
👍1
Forwarded from Микита Лук'яниця
https://youtu.be/__vX2sjlpXU
Ось якийсь відосик є, але таких багато
Ось якийсь відосик є, але таких багато
YouTube
Big-O notation in 5 minutes
Introduction to big-O notation.
Code: https://github.com/msambol/dsa
Sources:
1. Algorithms by S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani [https://www.amazon.com/Algorithms-Sanjoy-Dasgupta/dp/0073523402]
2. http://pages.cs.wisc.edu/~paton/re…
Code: https://github.com/msambol/dsa
Sources:
1. Algorithms by S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani [https://www.amazon.com/Algorithms-Sanjoy-Dasgupta/dp/0073523402]
2. http://pages.cs.wisc.edu/~paton/re…
Forwarded from Ruslan Kiyanchuk
Залежить від того, з якого рівня, і на скільки глибше :)
Для початківців з інтуїтивними поясненнями основ:
- Real World Cryptography by David Wong
- Serious Cryptography, 2nd Edition by JP Aumasson (ця розрахована на розробників, але поверхнева, лише помочити ніжки)
З трохи більшим заглибленням в теорію:
- Cryptography Made Simple by Nigel Smart
(дещо старша книга і чомусь має прогалини, як то взагалі не говорить про автентифіковане шифрування, але доступно пояснює теорію – більш академічно аніж в попередніх двох книгах)
- Joy of Cryptography by Joy Misulek (це undergraduate level книга у вільному доступі)
Для початківців з інтуїтивними поясненнями основ:
- Real World Cryptography by David Wong
- Serious Cryptography, 2nd Edition by JP Aumasson (ця розрахована на розробників, але поверхнева, лише помочити ніжки)
З трохи більшим заглибленням в теорію:
- Cryptography Made Simple by Nigel Smart
(дещо старша книга і чомусь має прогалини, як то взагалі не говорить про автентифіковане шифрування, але доступно пояснює теорію – більш академічно аніж в попередніх двох книгах)
- Joy of Cryptography by Joy Misulek (це undergraduate level книга у вільному доступі)
Manning Publications
Real-World Cryptography - David Wong
An all-practical guide to the cryptography behind common tools and protocols that will help you make excellent security choices for your systems and applications.
Пояснення як відбувається запит до сайту у браузері
(DNS)
https://www.youtube.com/watch?v=ll5d8izwTC0
(DNS)
https://www.youtube.com/watch?v=ll5d8izwTC0
YouTube
How Your Browser Finds Websites?
Free Web Developers Community and Courses: https://www.skool.com/web-dev-mastery
🔖 Sections
0:00 Introduction
0:42 How your browser finds websites
3:05 Experiment
4:18 Summary
🔖 Sections
0:00 Introduction
0:42 How your browser finds websites
3:05 Experiment
4:18 Summary
👍2🔥1
Англ. відео про Big-O Notation
https://www.youtube.com/watch?v=rv_ZacJYRFA
https://www.youtube.com/watch?v=rv_ZacJYRFA
YouTube
Big-O Notation - Everything you Need for Coding Interviews
My friends at Warp are offering a discount on their premium Pro plan for only $1/month your first month - https://go.warp.dev/neetcode
🚀 https://neetcode.io/ - Get lifetime access to every course I ever create!
Checkout my second Channel: https://www…
🚀 https://neetcode.io/ - Get lifetime access to every course I ever create!
Checkout my second Channel: https://www…
Що стосовно іноді моїх власних коротких заміток у цьому каналі? Моливо замітки будуть по якимось відео з ютюба.
Anonymous Poll
4%
Ні, тільки матеріали для початківців
86%
Так, можна замітки автора з прикладами коду
64%
Так, можна й замітки по відео з ютюба
🚫 Чому не варто збирати Python-проєкт у exe через PyInstaller
Багато початківців намагаються зібрати свій Python-проєкт у .exe-файл. Але є чимало причин, чому це не завжди гарна ідея.
Насправді цей процес не є компіляцією.
Фактично відбувається лише упаковка Python-інтерпретатора та бібліотек у саморозпакувальний архів [1].
Коли користувач запускає
1️⃣ Антивіруси часто сприймають такий .exe як загрозу.
Через використання стиснення файлів антивірусне ПЗ може активно скаржитися на ваш
2️⃣ Проблеми з шляхами
3️⃣ Несумісність з окремими бібліотеками
Існує ймовірність, що через особливості певної бібліотеки проєкт не збиратиметься у
4️⃣ Складна діагностика помилок
Упаковка, особливо з опцією
5️⃣ Довгий старт програми
Очевидно що розпаковка з архіву буде сповільнювати запуск.
Хоча збірка у
#PyInstaller
Багато початківців намагаються зібрати свій Python-проєкт у .exe-файл. Але є чимало причин, чому це не завжди гарна ідея.
Насправді цей процес не є компіляцією.
Фактично відбувається лише упаковка Python-інтерпретатора та бібліотек у саморозпакувальний архів [1].
Коли користувач запускає
exe, спочатку виконується розпаковка цього архіву у тимчасову теку, і лише потім — запуск скрипта. Це має низку негативних наслідків: 1️⃣ Антивіруси часто сприймають такий .exe як загрозу.
Через використання стиснення файлів антивірусне ПЗ може активно скаржитися на ваш
exe. Щоб переконатися в цьому, достатньо завантажити файл на VirusTotal. Якщо користувач зробить таку перевірку й побачить попередження, довіра до вас і вашого ПЗ може бути підірвана. 2️⃣ Проблеми з шляхами
exe запускається з однієї теки, але архів розпаковується та виконується в іншій. Це змушує вносити зміни до коду проєкту, які будуть враховувати зміну шляху. 3️⃣ Несумісність з окремими бібліотеками
Існує ймовірність, що через особливості певної бібліотеки проєкт не збиратиметься у
exe. Причому ситуація може змінюватися від версії до версії бібліотеки і python. Найчастіше проблеми виникають із модулями, що використовують код на C/C++. 4️⃣ Складна діагностика помилок
Упаковка, особливо з опцією
--windowed, може маскувати помилки: замість виведення повідомлення у консолі користувач просто отримає падіння програми. На одних пристроях програма може запускатися, а на інших — ні. Виявити причину, виправити її або оновити бібліотеки "на місці" просто неможливо. 5️⃣ Довгий старт програми
Очевидно що розпаковка з архіву буде сповільнювати запуск.
Хоча збірка у
exe може здаватися зручною для поширення, на практиці вона часто створює більше проблем, ніж вирішує.#PyInstaller
👍1
Forwarded from PythonFromYouTube
Tech With Tim The Next Step After Learning Python Basics (19-05 09.08.25)
YouTube
The Next Step After Learning Python Basics
Want to make real money with coding? I share high-signal insights on careers, monetization, and leverage in my free newsletter. Join here and get my guide How to Make Money With Coding instantly: https://techwithtim.net/newsletter
Learning Python is just…
Learning Python is just…
Приклад збірки PyQt6 проєкту PyInstaller-ом.
Якщо Ви все-таки наважилися зібрати свій проєкт pyinstaller у exe пропоную розглянути приклад.
Як приклад будемо використовувати мій шаблон для PyQt6
Шаблон дуже простий - показує просте вікно.
Він має файли які задані відносними шляхами:
1️⃣ Одна з переваг Qt - використання файлів "форм" формату
2️⃣ icon.png це іконка у головному вікні, вона задана main_window.ui через дизайнер "форм" QtDesiginer
Напишемо pyinstaller_build.bat скрипт який буде займатись збіркою у exe
Як бачимо всі файли які використовуються програмою треба додавати опцією
Також сам exe файл може мати іконку для цього має бути використана опція
Опція
Опція
Опція
Але цього недостатньо, щоб наш додаток знаходив файли main_window.ui та icon.png при запуску треба змінювати робочу директорію (це треба робити на самому початку скрипта).
Атрибут _MEIPASS додається динамічно pyinstaller-ом - це тимчасова тека куди розпаковується проєкт
Без цієї вставки коду буде помилка про те, що вказані файли відсутні.
Також я додам скріншот з збіркою без опції
Додаткові файли будуть прикріплені у коментарях.
#PyInstaller #PyQt6
Якщо Ви все-таки наважилися зібрати свій проєкт pyinstaller у exe пропоную розглянути приклад.
Як приклад будемо використовувати мій шаблон для PyQt6
Шаблон дуже простий - показує просте вікно.
Він має файли які задані відносними шляхами:
1️⃣ Одна з переваг Qt - використання файлів "форм" формату
*.ui в даному випадку це - main_window.ui2️⃣ icon.png це іконка у головному вікні, вона задана main_window.ui через дизайнер "форм" QtDesiginer
Напишемо pyinstaller_build.bat скрипт який буде займатись збіркою у exe
SET SCRIPT_NAME=main.py
SET EXE_NAME=prog
.venv\Scripts\pyinstaller.exe ^
--add-data "main_window.ui;." ^
--add-data "icon.png;." ^
--icon "icon.ico" ^
--windowed ^
--onefile ^
--noupx ^
--name %EXE_NAME% ^
%SCRIPT_NAME%
pause
Як бачимо всі файли які використовуються програмою треба додавати опцією
--add-dataТакож сам exe файл може мати іконку для цього має бути використана опція
--icon але треба зауважити що формат іконки має бути саме .ico (png не підходить).Опція
--windowed саме для GUI застосунків щоб сховати вікно консолі. Опція
--onefile саме збірка у exeОпція
--noupx збирати без upx стиснення.Але цього недостатньо, щоб наш додаток знаходив файли main_window.ui та icon.png при запуску треба змінювати робочу директорію (це треба робити на самому початку скрипта).
try:
import os, sys
os.chdir(sys._MEIPASS)
print(f"{sys._MEIPASS=}")
except AttributeError:
pass
Атрибут _MEIPASS додається динамічно pyinstaller-ом - це тимчасова тека куди розпаковується проєкт
Без цієї вставки коду буде помилка про те, що вказані файли відсутні.
Також я додам скріншот з збіркою без опції
--windowed щоб можна було побачити як виглядає sys._MEIPASSДодаткові файли будуть прикріплені у коментарях.
#PyInstaller #PyQt6
👍4❤3
Схемка по основам git
яка дає уявлення які можуть бути стани репозиторію і які команди відповідають переходам між ними.
https://www.youtube.com/watch?v=G5nhfQ_lfNg
яка дає уявлення які можуть бути стани репозиторію і які команди відповідають переходам між ними.
https://www.youtube.com/watch?v=G5nhfQ_lfNg
👍2
Forwarded from PythonFromYouTube
Python Decoded Процеси, Потоки, GIL та Asyncio - Введення у Асинхронне Програмування (10-10 26.08.25)
YouTube
Введення у Асинхронне Програмування - Процеси, Потоки, GIL та Asyncio
В цьому відео ми будемо говорити про Асинхронне програмування. Дізнаємося різницю між процесами та потоками їх сильні та слабкі сторони. Також спробуємо зрозуміти що таке GIL, як від нього намагаються позбутись, і навіщо був створений Asyncio.
Підтримати…
Підтримати…
👍1
Теорія сесіям і JWT токенам:
https://www.youtube.com/watch?v=Zk9drnLo590
- частина 1. Що обрати?
https://www.youtube.com/watch?v=750hPr9ZDFM
- частина 2. Безпека
https://www.youtube.com/watch?v=Zk9drnLo590
- частина 1. Що обрати?
https://www.youtube.com/watch?v=750hPr9ZDFM
- частина 2. Безпека
YouTube
Сесії проти JWT #1: Що обрати?
Чим сесії краще за JWT? А де без JWT ніяк? На цих питання зрізаються іноді навіть люди, що претендують на Senior-позиції! Давайте разом розбиратися
---
Навалити базу та підтримати проєкт ви можете за посиланням https://base.monobank.ua/39Tq2sVxaxau6d
Долучайтеся…
---
Навалити базу та підтримати проєкт ви можете за посиланням https://base.monobank.ua/39Tq2sVxaxau6d
Долучайтеся…
🔷 Використання SQLite разом з SqlAlchemy
⚠️ Цікавий нюанс: SQLite за замовчуванням не перевіряє зовнішні ключі.
У багатьох СУБД (PostgreSQL, MySQL) зовнішні ключі завжди перевіряються.
🔧 У SQLite за це відповідає прапорець
За замовчуванням він
👉 Виставити цей прапорець можна таким чином:
Або одразу оголосити обробник події:
✅ Так Ви уникнете "тихих" проблем з цілісністю даних.
#sqlite #sqlalchemy
⚠️ Цікавий нюанс: SQLite за замовчуванням не перевіряє зовнішні ключі.
У багатьох СУБД (PostgreSQL, MySQL) зовнішні ключі завжди перевіряються.
🔧 У SQLite за це відповідає прапорець
foreign_keys. За замовчуванням він
OFF, і якщо його не виставити в ON, можна отримати неузгоджені дані у зв’язаних таблицях, і довго дивуватись чому так.👉 Виставити цей прапорець можна таким чином:
async with engine.begin() as connection:
await connection.execute("PRAGMA foreign_keys=ON")
Або одразу оголосити обробник події:
from sqlalchemy import event
from sqlalchemy.engine import Engine
@event.listens_for(Engine, "connect")
def set_sqlite_pragma(dbapi_connection, _):
cursor = dbapi_connection.cursor()
cursor.execute("PRAGMA foreign_keys=ON")
cursor.close()
✅ Так Ви уникнете "тихих" проблем з цілісністю даних.
#sqlite #sqlalchemy
👍2
🔶 Requests. Простий GET-запит.
У Python HTTP-запити можна робити вбудованою бібліотекою urllib.
Але значно зручніше використовувати сторонню бібліотеку requests. Варто також згадати інші бібліотеки зі схожим інтерфейсом — наприклад, httpx та curl_cffi. Вони можуть працювати асинхронно та мають більш наближені до браузерних TLS-відбитки, що зменшує ймовірність бану при скрапінгу.
Це простий приклад GET-запиту для отримання HTML-сторінки.
HTML-код виводиться в консоль як рядок і зберігається у файл у байтовому вигляді.
Для різних HTTP-методів є відповідні методи в requests. Додаткові дані можна передавати через аргументи методів (заголовки, параметри запиту, тіло, проксі тощо).
⚠️ Поширена помилка початківців — забути перевірити код відповіді сервера. Найпростіше це зробити викликом raise_for_status(), який підніме виняток, якщо код відповіді не в межах 200–399.
Але також можна перевіряти атрибут status_code.
#http #requests #GET
У Python HTTP-запити можна робити вбудованою бібліотекою urllib.
Але значно зручніше використовувати сторонню бібліотеку requests. Варто також згадати інші бібліотеки зі схожим інтерфейсом — наприклад, httpx та curl_cffi. Вони можуть працювати асинхронно та мають більш наближені до браузерних TLS-відбитки, що зменшує ймовірність бану при скрапінгу.
import requests
response = requests.get("https://example.com/")
response.raise_for_status()
print(response.text)
with open("content.html", "wb") as file:
file.write(response.content)
Це простий приклад GET-запиту для отримання HTML-сторінки.
HTML-код виводиться в консоль як рядок і зберігається у файл у байтовому вигляді.
Для різних HTTP-методів є відповідні методи в requests. Додаткові дані можна передавати через аргументи методів (заголовки, параметри запиту, тіло, проксі тощо).
⚠️ Поширена помилка початківців — забути перевірити код відповіді сервера. Найпростіше це зробити викликом raise_for_status(), який підніме виняток, якщо код відповіді не в межах 200–399.
Але також можна перевіряти атрибут status_code.
#http #requests #GET
👍4