Для начала обновимся:
sudo apt update && sudo apt upgrade
Установим все необходимое:
sudo apt install certbot nginx python3-certbot-nginx
Далее настроим certbot:
certbot certonly
Вас попросят выбрать конфигурацию и ввести email, а позже и домен. А потом просто запросим сертификат:
sudo certbot run --nginx
Сменить пароль можно консольной командой:
sudo passwd root
Ошибка:
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
If you wish to install a non-Debian packaged Python application,
it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.
See /usr/share/doc/python3.11/README.venv for more information.
Или:
Если вы хотите установить Python-пакет, который не является пакетом Debian, создайте виртуальное окружение с помощью команды python3 -m venv путь/к/виртуальному/окружению. Затем используйте путь/к/виртуальному/окружению/bin/python и путь/к/виртуальному/окружению/bin/pip. Убедитесь, что у вас установлен пакет python3-full.
Если вы хотите установить Python-приложение, которое не является пакетом Debian, может быть проще использовать команду pipx install xyz, которая управляет виртуальным окружением для вас. Убедитесь, что у вас установлен пакет pipx.
Дополнительную информацию можно найти в файле /usr/share/doc/python3.11/README.venv.
Обойти это ограничение можно следующим образом:
sudo rm /usr/lib/python3.11/EXTERNALLY-MANAGED
Также хотел бы предложить подписаться на мой телеграм-канал
Если у вас есть какие-либо вопросы или нужна дополнительная помощь, не стесняйтесь спрашивать!
Используя пространства имен, мы можем явно указать, из какого пространства имен мы хотим использовать определенный символ. Например, в коде std::cout
, std
является пространством имен, а cout
- символом из этого пространства имен, представляющим стандартный поток вывода.
Использование ключевого слова using namespace std
позволяет нам обращаться к символам из пространства имен std
без явного указания этого пространства имен каждый раз. Однако, это также может привести к проблемам.
Например, если мы имеем два различных пространства имен, каждое со своим символом info
, и мы используем using namespace
для обоих пространств имен, то возникает конфликт имён. Компилятор не знает, из какого пространства имен мы хотим использовать info
, и может возникнуть неоднозначность.
Чтобы избежать таких проблем, хорошей практикой является указывать пространство имен перед каждым символом или использовать только необходимые символы из пространства имен с помощью оператора разрешения области видимости ::
. Также стоит избегать использования using namespace
в глобальной области видимости в заголовочных файлах, чтобы не добавлять символы из пространства имен в глобальную область видимости всего проекта.
Более простым языком я рассказал об этом в своем телеграм канале: https://t.me/Aren_et_adventures/12
Эксперимент по обучению нейросети для генерации изображений островов 28 на 28 пикселей я провел в своём телеграм канале.
Variational Autoencoder (VAE) является типом нейронной сети, который может создавать новые данные на основе обучающей выборки. Например, если обучить VAE на изображениях кошек, он сможет создавать новые, ранее не виданные изображения кошек.
VAE состоит из двух частей: энкодера и декодера. Энкодер преобразует входные данные (например, изображение кошки) в латентное пространство - набор значений, описывающих характеристики входных данных, недоступных пользователю. Декодер использует значения из латентного пространства для генерации новых данных, которые похожи на входные.
VAE использует вероятностную модель для описания латентного пространства, что позволяет ему более точно моделировать изображения. Обучение VAE заключается в том, чтобы максимизировать границу правдоподобия, что приводит к созданию более точных и разнообразных изображений.
VAE имеет широкий спектр применений: генерация изображений, звуков и текста; улучшение качества данных; сокращение объема занимаемой данными памяти и решение других задач, требующих генерации новых данных. Одним из важных преимуществ VAE является возможность избежать повторов в создаваемых данных, что делает их более разнообразными и интересными.
В моей нейросети используется как раз VAE.
Исходный код доступен по ссылке в телеграм канале.
В наше время компьютеры остаются неотъемлемой частью жизни многих людей. К сожалению, развитие технологий неизбежно приводит к появлению новых видов вредоносных программ, которые могут нанести десятки миллионов долларов ущерба как частным лицам, так и компаниям.
Решить эту проблему помогают антивирусы - программы, способные защитить ваш компьютер от вредоносных программ. Однако, вместо того чтобы покупать готовый антивирус, можно попробовать написать свой собственный.
В этой статье мы рассмотрим, как создать антивирус с нуля. Мы начнем с обзора основных типов вредоносных программ и разработки концепции антивируса.
Вот основные типы вирусов:
Кроме этого, есть и другие типы вредоносных программ, такие как spyware (шпионские программы), adware (рекламное ПО) и многие другие. Но наиболее распространенными являются вирусы, черви и трояны.
Давайте разработаем концепцию антивируса, который будет искать вирусы с использованием методов сигнатур и хэш-сумм.
Мы будем использовать язык Python, так как он обладает простым синтаксисом и удобен для работы с файловой системой. Позже перепишем его на C.
Наш антивирус будет работать на операционных системах Windows и Linux в основном.
Наш антивирус будет иметь следующие функции:
Мы будем использовать два метода для поиска вирусов:
Таким образом, наш антивирус будет отслеживать вредоносные программы, используя несколько методов, что повышает его эффективность.
В следующей статье напишем простейший сканер и протестируем на самописном вирусе.
Итак, буквально за пол часа я написал утилиту https://git.synapseos.ru/0Nera/github_miner Думаю дальше вы разберетесь) Зеркало: https://tvoygit.ru/0Nera/github_miner
IO порты представляют собой входы/выходы (Input/Output) и используются для обмена информацией между микроконтроллерами и внешними устройствами. В данной статье мы рассмотрим работу с IO портами на платформе x86.
На платформе x86 IO порты адресуются 16-битным номером (0x0000 – 0xFFFF). Для работы с IO портами в ОС Linux используется файловая система /dev/port. В Windows доступ к портам осуществляется через функции WinAPI: ReadPort, WritePort.
Для чтения данных из порта на x86 микропроцессоре существует три команды: inb, inw, inl. Каждый из этих операторов читает данные определенного размера (один байт, два байта, четыре байта) из заданного порта в указанный регистр.
Для записи данных в порт на x86 микропроцессоре существует три команды: outb, outw, outl. Каждый из этих операторов записывает данные определенного размера (один байт, два байта, четыре байта) из указанного регистра в заданный порт.
Для упрощения работы с IO портами на x86 микропроцессорах, можно использовать специальные функции, объявленные в заголовочном файле asm/io.h.
Примеры функций для работы с IO портами на x86:
/**
* @brief Получение одного байта из порта
*
* @param port Порт
* @return uint8_t Значение из порта
*/
uint8_t hal_ioport_inb(uint16_t port) {
uint8_t ret;
asm volatile("inb %1, %0"
: "=a"(ret)
: "Nd"(port));
return ret;
}
/**
* @brief Получение 2 байт(word) из порта
*
* @param port Порт
* @return uint16_t Значение из порта
*/
uint16_t hal_ioport_inw(uint16_t port) {
uint16_t ret;
asm volatile("inw %1, %0"
: "=a"(ret)
: "Nd"(port));
return ret;
}
/**
* @brief Получение 4 байт из порта
*
* @param port Порт
* @return uint32_t Значение из порта
*/
uint32_t hal_ioport_inl(uint16_t port) {
uint32_t ret;
asm volatile("inl %1, %0"
: "=a"(ret)
: "Nd"(port));
return ret;
}
/**
* @brief Ввод одного байта в порт
*
* @param port Порт
* @param val Входные данные
*/
void hal_ioport_outb(uint16_t port, uint8_t val) {
asm volatile("outb %0, %1"
:
: "a"(val), "Nd"(port));
}
/**
* @brief Ввод 2 байт (word) в порт
*
* @param port Порт
* @param val Входные данные
*/
void hal_ioport_outw(uint16_t port, uint16_t val) {
asm volatile("outw %0, %1"
:
: "a"(val), "Nd"(port));
}
/**
* @brief Ввод 4 байт в порт
*
* @param port Порт
* @param val Входные данные
*/
void hal_ioport_outl(uint16_t port, uint32_t val) {
asm volatile("outl %0, %1"
:
: "a"(val), "Nd"(port));
}