По планам вообще:
1. Доделать проект до 95 дня, исправить все ошибки. Добавлю более сильную валидацию, продвинутый поиск, глобальную обработку исключений, поработаю с JWT-аутентификацией
2. До 99 дня изучить основы Docker, пока просто базу
3. 100 День — выкладываю все на GitHub, подвожу итоги
Дальше я планирую немного переименовать свой путь, изучать
ИБ и публиковать лайфстайл.
Также думаю как раз освободится время и по активнее буду вести свой 2 канал @BoCoder_EDU
Про все конечно расскажу подробнее, но со временем
🖥 Обязательные:
Чуть углубляюсь в Pydantic, дорабатываю схемы:
🔺 Валидация Авторов🔺 Валидация книг🔺 Безопасность поисковых фильтров
Цель: Доработать то, что я упустил в прошлых днях, усилить валидацию
Буду пробовать «ломать» свой API
Проверю как все работает, если что-то не так, то буду чинить;)
Всем желаю продуктивного дня!!
#Day90 #Days
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5❤🔥4👍3🔥1
Итоги дня:
🔺 Изучение FastAPI
🔺 Жёсткая валидация и "Защита от дурака"
1. Pydantic Field
Теперь каждое поле — это не просто тип (str, int), а набор правил.
Имя автора — Минимум 2 буквы. Цена — Только положительное число
итд..
2. Strict Mode
Включил режим extra='forbid'. Теперь, если кто-то попытается "подсунуть" лишние данные в JSON, сервер выдаст ошибку, а не просто проигнорирует их.
3. DoS-защита
Ограничил пагинацию. Теперь нельзя запросить более 100 книг за раз.
➡️ BoCoder | 💬 Chat
1. Pydantic Field
Теперь каждое поле — это не просто тип (str, int), а набор правил.
Имя автора — Минимум 2 буквы. Цена — Только положительное число
итд..
2. Strict Mode
Включил режим extra='forbid'. Теперь, если кто-то попытается "подсунуть" лишние данные в JSON, сервер выдаст ошибку, а не просто проигнорирует их.
3. DoS-защита
Ограничил пагинацию. Теперь нельзя запросить более 100 книг за раз.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤2 2
Как-то так
🖥 Обязательные:
Задача:
В BookFilters изменить sort_by с обычного str на
Literal["id", "title", "price"].
В crud.py реализовать динамическую сборку
Зачем это нужно:
Как я понял, это нужно для предотвращение Blind SQL Injection в параметрах ORDER BY. Если просто прокидывать строку в запрос, хакер может использовать функции задержки (типа pg_sleep()), чтобы по времени ответа сервера вычислять данные из других таблиц. Literal ограничивает выбор только разрешенными полями.
Задача:
Написать функцию с декоратором и понять как она работает: @app.exception_handler(Exception), которая ловит любые непредвиденные ошибки.
Зачем это нужно:
Борьба с Information Exposure (утечкой информации).
По умолчанию Python при ошибке вываливает в ответ "Трейсбэк" - пути к файлам на твоем диске, версии библиотек и куски кода. Это можно использовать как карту для поиска уязвимостей.
А хендлер заменит этот "поток данных" на лаконичное: {"detail": "Internal Server Error"}.
Задача:
Написать отдельный хендлер для SQLAlchemyError
Зачем это нужно:
Противодействие Fingerprinting (Снятию отпечатков системы).
Это мешает определить тип СУБД
Задача:
Настроить логирование так, чтобы полная ошибка никогда не уходила в HTTP-ответ клиенту.
Зачем это нужно:
Разработчик должен видеть детали для фикса, а внешний пользователь только статус операции.
Всем продуктивного дня и хорошего настроения!!
#Day91 #Days
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6❤🔥4👍2🔥2🎉1 1 1
Итоги дня:
🔺 Изучение FastAPI
🔺 Добавление продвинутой сортировки
1. Тут я, конечно, потупил. Вроде пункт не самый сложный, но запутался во всем, чем можно. Было много ошибок, особенно когда расширял таблицу в БД: добавлял stock_quantity, и в какой-то момент даже пожалел, что начал, так как посыпались ошибки в синтаксисе.
В итоге всё синхронизировал, код теперь видит новые поля
2. Схемы Pydantic: Обновил BookFilters, добавил в Literal новые поля для сортировки. Теперь Swagger предлагает выбор: id, title, price, pages, stock_quantity.
3. Логика CRUD: Добавил динамическую сборку запроса, которая учитывает выбранное поле и направление (asc/desc).
Работает! ;)
🔺 Глобальная обработка исключений
Добавил что-то вроде «защитного слоя», благодаря которому API всегда возвращает понятный JSON, а не падает с непонятным текстом.
1. Создал функцию setup_exception_handlers
2. Теперь при любой непредвиденной ошибке (например, деление на ноль) клиент получает статус 500 с сообщением «Внутренняя ошибка сервера», а детали пишутся только в лог для меня.
🔺 Кастомная обработка ошибок базы данных
API стал умнее по отношению к пользователю))
1. Если попробовать привязать книгу к несуществующему автору (author_id), API не просто выдаст ошибку базы, а ответит:
«Связанный объект не найден».
🔺 Маскировка логов
Защита конфиденциальных данных, Важный аспект
1. Создал типо кастомного фильтра SensitiveDataFilter, который работает как цензура для логов.
2. Настроил регулярные выражения, которые ищут в сообщениях ключи password, email, token и заменяют их значения на [MASKED].
Итог и мысли:
🔺 На самом деле очень интересно узнавать, как всё работает «под капотом». Сейчас сфокусировался на аспектах, близких к ИБ (информационной безопасности). Решил, что не буду расширять проект, просто приведу всё к красивому, правильному виду. Не хочу добавлять новых фишек и тд, пробую только то, что мне реально интересно и пригодится в будущем.
Конечно, выложу всё на GitHub, когда причешу, может кому интересно;0
🔺 Иногда проскакивают мысли, что делаю какой-то бесполезный бред, но в то же время понимаю, что реально узнаю что-то новое и начинаю разбираться в процессах.
По проекту: всё протестировал, всё работает. Ошибок было море, долго разбирался (в основном из-за невнимательности), но это вродь отличный опыт.
Двигаюсь дальше...
➡️ BoCoder | 💬 Chat
1. Тут я, конечно, потупил. Вроде пункт не самый сложный, но запутался во всем, чем можно. Было много ошибок, особенно когда расширял таблицу в БД: добавлял stock_quantity, и в какой-то момент даже пожалел, что начал, так как посыпались ошибки в синтаксисе.
В итоге всё синхронизировал, код теперь видит новые поля
2. Схемы Pydantic: Обновил BookFilters, добавил в Literal новые поля для сортировки. Теперь Swagger предлагает выбор: id, title, price, pages, stock_quantity.
3. Логика CRUD: Добавил динамическую сборку запроса, которая учитывает выбранное поле и направление (asc/desc).
Работает! ;)
Добавил что-то вроде «защитного слоя», благодаря которому API всегда возвращает понятный JSON, а не падает с непонятным текстом.
1. Создал функцию setup_exception_handlers
2. Теперь при любой непредвиденной ошибке (например, деление на ноль) клиент получает статус 500 с сообщением «Внутренняя ошибка сервера», а детали пишутся только в лог для меня.
API стал умнее по отношению к пользователю))
1. Если попробовать привязать книгу к несуществующему автору (author_id), API не просто выдаст ошибку базы, а ответит:
«Связанный объект не найден».
Защита конфиденциальных данных, Важный аспект
1. Создал типо кастомного фильтра SensitiveDataFilter, который работает как цензура для логов.
2. Настроил регулярные выражения, которые ищут в сообщениях ключи password, email, token и заменяют их значения на [MASKED].
Итог и мысли:
Конечно, выложу всё на GitHub, когда причешу, может кому интересно;0
По проекту: всё протестировал, всё работает. Ошибок было море, долго разбирался (в основном из-за невнимательности), но это вродь отличный опыт.
Двигаюсь дальше...
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7❤🔥3👍3🔥1 1
🖥 Обязательные:
"Что такое JWT и как его создать"
https://youtu.be/7iuwfKOcvkE?si=MF-SI6SFODNMGjrK
Содержание видео:
1. Что такое JWT
2. Из каких частей состоит JWT
3. Как создать JWT
4. Как генерируется подпись в JWT
5. Чем хорош JWT
6. Безопасноcть JWT
7. Советы по применению JWT
8. Что такое refresh token
Это озвучка статей:
1. https://habr.com/ru/articles/340146/
2. https://struchkov.dev/blog/ru/what-is-jwt/
Это место, где будут храниться учетные данные.
Нужно, чтобы Python узнал о существовании этой таблицы.
Например: Когда юзер пришлет qwerty, эта функция превратит его в $2b$12$EixZa.... Именно это и будем сохранять.
Разделяем входные и выходные данные для предотвращения утечек
Конец — создание самого маршрута для регистрации
Реализую эндпоинт /login. Именно здесь происходит магия JWT
Ограничиваю доступ. Сделаю так, что удалять или изменять книги сможет только авторизованный пользователь с валидным токеном.
Вот такой план, вроде как ничего не забыл.
Буду изучать, познавать.
Главная цель — это конечно же понять как это все устроенно и как работает.
Итоги может будут поздно, но постараюсь не тянуть.
Всем хорошего настроение и продуктивного дня!!
#Day92 #Days
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4❤🔥3🔥3👍2 1 1
Итоги дня:
🔺 Изучение FastAPI
🔺 Погружение в теорию JWT
Посмотрел вводное видео, чтобы понимать архитектуру.
Ролик короткий, но максимально по делу.
Очень рекомендую автора, контент у него очень крутой!!
Видео:
🔺 Подготовка окружения и модель User
1. Установил необходимые библиотеки:
2. Создание таблицы в БД:
Создал таблицу users c полем hashed_password.
Хранить пароли в открытом виде нельзя;)
🔺 SQLAlchemy и Pydantic:
1. SQLAlchemy: Описал модель User, чтобы ORM знала, как общаться с таблицей в Postgres.
2. Pydantic: Создал схемы для валидации. Теперь на входе API проверяет: корректен ли email, не пустой ли username и достаточно ли надежен пароль.
🔺 Эндпоинт регистрации
Собрал всё в кучу: БД + Схемы + Хэширование.
Логику вынес в отдельный роутер app/routers/auth.py.
Сначала посыпались ошибки: конфликт версий bcrypt и права доступа к последовательностям в Postgres (InsufficientPrivilegeError).
Но всё пофиксил: 200 OK, пользователь в базе, пароль зашифрован
🔺 Security Layer
Вынес логику безопасности в security.py
Реализовал проверку пароля и генерацию токенов. Тут же победил «баг» с ограничением bcrypt в 72 байта и подружил старый passlib с новым Python 3.12.
🔺 Авторизация и выдача JWT
1. Написал create_access_token - «генератор пропусков».
2. Запустил эндпоинт POST /auth/login.
На выходе получил валидный токен.
Проверил через jwt.io — внутри всё хорошо: мой email и время жизни токена (exp).
Работает;)
🔺 Последний штрих: (Защищенный маршрут /me)
Провека, как API будет узнавать пользователя по токену.
1. Добавил логику декодирования токена.
2. Создал эндпоинт, который отдает данные текущего юзера.
Залогинился, проверил, работает
Без токена система внутрь не пускает.
🔺 Интересная тема, узнал для себя что-то новое, а главное, что полезное. Это пригодится еще в ИБ
🔺 Скринов много не влезет, так что если интересно что-то конкретное по коду - пишите в комментарии, скину.
🔺 План на ближайшее время: причесать код, зиучить основы Docker и залить всё на GitHub.
До 100-го дня успею
Был бы рад получить какой-то фидбек в комментариях.
Может быть я не до конца рассказываю что-то или чего-то не хватает? Что можно было бы добавить в итоги дня и тд
Буду рад, если дадите обратную связь, спасибо!!
➡️ BoCoder | 💬 Chat
Посмотрел вводное видео, чтобы понимать архитектуру.
Ролик короткий, но максимально по делу.
Очень рекомендую автора, контент у него очень крутой!!
Видео:
"Что такое JWT и как его создать"
https://youtu.be/7iuwfKOcvkE?si=MF-SI6SFODNMGjrK
1. Установил необходимые библиотеки:
passlib — будет шифровать пароли.
python-jose — будет генерировать и проверять JWT.
python-multipart — обязателен для работы OAuth2 в FastAPI (чтобы принимать логин/пароль из форм).
2. Создание таблицы в БД:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
hashed_password TEXT NOT NULL,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
Создал таблицу users c полем hashed_password.
Хранить пароли в открытом виде нельзя;)
1. SQLAlchemy: Описал модель User, чтобы ORM знала, как общаться с таблицей в Postgres.
2. Pydantic: Создал схемы для валидации. Теперь на входе API проверяет: корректен ли email, не пустой ли username и достаточно ли надежен пароль.
Собрал всё в кучу: БД + Схемы + Хэширование.
Логику вынес в отдельный роутер app/routers/auth.py.
Сначала посыпались ошибки: конфликт версий bcrypt и права доступа к последовательностям в Postgres (InsufficientPrivilegeError).
Но всё пофиксил: 200 OK, пользователь в базе, пароль зашифрован
Вынес логику безопасности в security.py
Реализовал проверку пароля и генерацию токенов. Тут же победил «баг» с ограничением bcrypt в 72 байта и подружил старый passlib с новым Python 3.12.
1. Написал create_access_token - «генератор пропусков».
2. Запустил эндпоинт POST /auth/login.
На выходе получил валидный токен.
Проверил через jwt.io — внутри всё хорошо: мой email и время жизни токена (exp).
Работает;)
Провека, как API будет узнавать пользователя по токену.
1. Добавил логику декодирования токена.
2. Создал эндпоинт, который отдает данные текущего юзера.
Залогинился, проверил, работает
Без токена система внутрь не пускает.
ИТОГ:
До 100-го дня успею
Был бы рад получить какой-то фидбек в комментариях.
Может быть я не до конца рассказываю что-то или чего-то не хватает? Что можно было бы добавить в итоги дня и тд
Буду рад, если дадите обратную связь, спасибо!!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥8❤3 3👍1 1
Сегодня буду все причесывать в проекте для красоты и начинать погружение
🖥 Обязательные:
Просмотрю все файлы, уберю лишнюю информацию и мусор. Немного подкорректирую, что нужно и все будет четенько
На всякий случай проверю все файлы, на то, не прописал ли я случайно секретных паролей и тд
Также пройдусь по основным моментам по безопасности в коде для проверки, может найду что;)
Docker — это популярная открытая платформа для контейнеризации, позволяющая упаковать приложение со всем его окружением (библиотеками, зависимостями, настройками) в изолированный контейнер.Думаю, что начну с вводных видео, но не подобрал еще каких именно.
Их довольно много, вечером в итогах поделюсь теми, которые оказались действительно хороши
Подготовлю все, настрою все необходимое
Еще создам первый Dockerfile
А так моя цель:
Освоить основы и иметь понимание как и что работает.
Вот в проекте я считай все попробовал, потрогал, потыкал, поэкспериментировал и понял основную работу API "под капотом"
Все это мне пригодится в ИБ, Docker тоже очень полезный инструмент, так что вродь как все не зря;)
Вот как-то так пока получается. Даже по раньше заканчиваю работу с API, чем планировал
А вам желаю хорошего дня и прекрасного настроения!
#Day93 #Days
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4 4❤🔥3❤2👍1 1
Итоги дня:
🔺 Изучение FastAPI
Заканчиваю свой путь в FastAPI.
Провел небольшой рефакторинг: удалил неиспользуемые импорты и лишние print(), которые засоряли логи.
Теперь всё чисто.
🔺 Погружение в Docker 👩💻
1. Начал с теории на YouTube.
Понял, что полноценные плейлисты смотреть пока рано, подумал, что пока нужен быстрый старт для пет-проекта.
Конечно со временем буду погружаться в изучение Docker.
В итоге не нашел ничего полезного (наверное плохо искал) и просто общался с Gemini, задавал ей вопросы, разбирали основы, архитектуру и конкретные шаги внедрения.
2.Как только освоил базу, внедрил в проект всё необходимое:
.dockerignore, docker-compose.yml, Dockerfile и requirements.txt.
3. Написал свой первый Dockerfile и docker-compose.yml для связи API с PostgreSQL.
Теперь проект - это изолированная система, которую можно запустить одной командой на любом сервере.
4. При тестировании столкнулся с жесткими таймаутами при скачивании образов. После небольшого затупа, смены DNS и настройки зеркал загрузка наконец-то пошла.
5. Безопасность:
Вынес все чувствительные данные (пароли, ключи) в .env, а сам файл скрыл через .gitignore
6. Победил ошибку Port already in use:
Выяснил, что локальный Postgres конфликтовал с контейнером на порту 5432. Решил через:
sudo systemctl stop postgresql.
7. Поймал классический баг
Приложение запускалось быстрее, чем база успевала настроиться. Разобрался, пофиксил.
🔺 Проект вроде как полностью упакован в Docker, завтра буду все проверять еще разок, еще поищу видео по Docker для базы и мб уже все выложу на GitHub
➡️ BoCoder | 💬 Chat
Заканчиваю свой путь в FastAPI.
Провел небольшой рефакторинг: удалил неиспользуемые импорты и лишние print(), которые засоряли логи.
Теперь всё чисто.
1. Начал с теории на YouTube.
Понял, что полноценные плейлисты смотреть пока рано, подумал, что пока нужен быстрый старт для пет-проекта.
Конечно со временем буду погружаться в изучение Docker.
В итоге не нашел ничего полезного (наверное плохо искал) и просто общался с Gemini, задавал ей вопросы, разбирали основы, архитектуру и конкретные шаги внедрения.
2.Как только освоил базу, внедрил в проект всё необходимое:
.dockerignore, docker-compose.yml, Dockerfile и requirements.txt.
3. Написал свой первый Dockerfile и docker-compose.yml для связи API с PostgreSQL.
Теперь проект - это изолированная система, которую можно запустить одной командой на любом сервере.
4. При тестировании столкнулся с жесткими таймаутами при скачивании образов. После небольшого затупа, смены DNS и настройки зеркал загрузка наконец-то пошла.
5. Безопасность:
Вынес все чувствительные данные (пароли, ключи) в .env, а сам файл скрыл через .gitignore
6. Победил ошибку Port already in use:
Выяснил, что локальный Postgres конфликтовал с контейнером на порту 5432. Решил через:
sudo systemctl stop postgresql.
7. Поймал классический баг
Приложение запускалось быстрее, чем база успевала настроиться. Разобрался, пофиксил.
ИТОГ:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3❤🔥3👍3🔥1
Постараюсь сделать все красиво;)
🖥 Обязательные:
Проверка всего, создание таблиц, эндпоинтов и всего всего, чтоб можно было все потестить
Хочу попробовать написать скрипт, который при первом запуске добавит в базу пару авторов и книг, чтобы не было так пусто
Вот думаю, это хорошая идея или не очень
Чтобы вы могли запустить мой проект, нужно будет подготовить необходимые файлы: .env.example и README md
Вам желаю продуктивного дня!!
#Day94 #Days
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤🔥5❤4🎉2
Итоги дня:
🔺 Изучение FastAPI
Вот и подошло к концу моё изучение фреймворка FastAPI. Это был очень интересный и познавательный путь: я узнал много нового, освоил основы и понял принципы работы современного API.
🔺 Проект готов!
Он был создан в учебных целях, и в нём реализованы основные фичи, которые я освоил. Данный проект можно использовать как пример, он не претендует на роль API полноценного книжного магазина, но если его немного доработать, то вполне потянет! ;)
Мой GitHub:
Сам проект:
Старался написать подробный README
(мой первый раз, так что не судите строго, если что-то не так)
Фишка проекта: если база данных пуста, она автоматически заполняется начальными данными при первом запуске, чтобы вы могли сразу приступить к тестированию.
Заценивайте, кому интересно!
Буду ждать
вашей честной оценки🙌
➡️ BoCoder | 💬 Chat
Вот и подошло к концу моё изучение фреймворка FastAPI. Это был очень интересный и познавательный путь: я узнал много нового, освоил основы и понял принципы работы современного API.
Он был создан в учебных целях, и в нём реализованы основные фичи, которые я освоил. Данный проект можно использовать как пример, он не претендует на роль API полноценного книжного магазина, но если его немного доработать, то вполне потянет! ;)
Мой GitHub:
https://github.com/BoCoder17
Сам проект:
https://github.com/BoCoder17/Book-Store-API
Старался написать подробный README
(мой первый раз, так что не судите строго, если что-то не так)
Фишка проекта: если база данных пуста, она автоматически заполняется начальными данными при первом запуске, чтобы вы могли сразу приступить к тестированию.
Заценивайте, кому интересно!
Буду ждать
вашей честной оценки
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥2🎉2 1
Вообще, хотел начать с 100-го дня, чтобы было красиво ;) Но впереди ещё целых 5 дней, а это довольно много — нужно чем-то заняться. Пока думаю...
Но на сегодня планы уже построены: я перехожу на новый дистрибутив — Fedora KDE Plasma
🖥 Обязательные:
Скачиваю образ и устанавливаю систему.
Помню, что меня просили расписать процесс установки нового дистрибутива — сделаю это в итогах дня.
Ну и, конечно, полная настройка. Буду устанавливать всё с нуля, чтобы собрать удобное и красивое рабочее окружение под свои задачи.
Вот так вот
Вам желаю удачи и хорошего настроения!
#Day95 #Days
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4 4🫡2❤🔥1🔥1
Итоги дня:
🔺 Fedora
Подвожу итоги своего «переезда». Рассказываю, как ставил, что настраивал и какие впечатления остались.
🔺 Установка:
1. Установка образа:
Fedora KDE Plasma, установил ISO-образ и записал его на флешку через стандартную утилиту в Linux Mint
2. Установка: Загрузился через BIOS, выбрал диск и сделал абсолютно чистую установку, удалив все старые разделы. Настроил язык, время и пользователя.
3. Финиш: Выключил ПК, вытащил флешку и всё завелось с первого раза.
Очень просто и интуитивно. Гайдов в сети море, да и ИИ может помочь если что вдруг
🔺 Настройка:
1. Ускорил загрузку пакетов по совету:
2. Установил RPM Fusion — самый важный сторонний репозиторий для Fedora
Это открыло доступ к ветке Non-Free: драйверам, Steam и софту с закрытым исходным кодом.
После этого обновил систему:
🔺 Софт и Визуал
Когда база была готова, перешел к самой приятной части
1. Драйверы и программы: Установил всё необходимое для работы
2. Дальше работал над визуалом и красотой: Настроил Konsole (терминал) оч красиво,
также там чуть потестил кастомизацию рабочего стола. Жесть вообще, тут очень много чего и очень гибкая настройка, я прям кайфанул от всего, особенно с того, что научился использовать встроенный тайлинг
Если честно, Fedora нравится мне уже в 10000 раз больше Mint. Возможно, дело в свежей оболочке KDE 6, но я мега-доволен.
Главные плюсы для меня:
✅ Всё работает «из коробки» (даже обход блокировок запустился с первой попытки).
✅ Невероятная гибкость настройки под себя.
✅ Ощущение современной и быстрой системы.
Короче, я максимально доволен!
➡️ BoCoder | 💬 Chat
Подвожу итоги своего «переезда». Рассказываю, как ставил, что настраивал и какие впечатления остались.
1. Установка образа:
Fedora KDE Plasma, установил ISO-образ и записал его на флешку через стандартную утилиту в Linux Mint
2. Установка: Загрузился через BIOS, выбрал диск и сделал абсолютно чистую установку, удалив все старые разделы. Настроил язык, время и пользователя.
3. Финиш: Выключил ПК, вытащил флешку и всё завелось с первого раза.
Очень просто и интуитивно. Гайдов в сети море, да и ИИ может помочь если что вдруг
1. Ускорил загрузку пакетов по совету:
sudo nano /etc/dnf/dnf.conf
max_parallel_downloads=10
fastestmirror=True
2. Установил RPM Fusion — самый важный сторонний репозиторий для Fedora
sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
Это открыло доступ к ветке Non-Free: драйверам, Steam и софту с закрытым исходным кодом.
После этого обновил систему:
sudo dnf upgrade --refresh
Когда база была готова, перешел к самой приятной части
1. Драйверы и программы: Установил всё необходимое для работы
2. Дальше работал над визуалом и красотой: Настроил Konsole (терминал) оч красиво,
также там чуть потестил кастомизацию рабочего стола. Жесть вообще, тут очень много чего и очень гибкая настройка, я прям кайфанул от всего, особенно с того, что научился использовать встроенный тайлинг
Мое мнение:
Если честно, Fedora нравится мне уже в 10000 раз больше Mint. Возможно, дело в свежей оболочке KDE 6, но я мега-доволен.
Главные плюсы для меня:
Короче, я максимально доволен!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6❤🔥2 2🔥1🫡1 1
Вместо привычных итогов сегодня поделюсь мыслями и планами.
Идей для реализации много, поэтому нужно всё структурировать в один пост — так и мне будет понятнее, и вы будете в курсе происходящего.
Так вообще выделил 3 ключевых вектора развития:
1. Кибербезопасность
2. Контент (Тик ток, 2 Канал)
3. Лайф контент
Постараюсь выложить план как можно раньше, хотя день обещает быть плотным, так как есть некие другие дела
Вам желаю продуктивного дня!
А у кого сегодня выходной, то отдыхайте,кайфуйте
#Day96 #Days
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥6❤4🔥4