### Python 3.14
Выход Python 3.14 в октябре 2025 года ознаменовал важные изменения и улучшения, направленные на повышение производительности, улучшение поддержки многопоточности и предоставление новых возможностей для разработчиков.
Интерпретатор Python 3.14 получил значительные улучшения, включающие оптимизацию обработки команд CPython и увеличение производительности на уровне байт-кода. Результаты тестов показывают, что средний прирост производительности составляет около 30%, что достигается без необходимости внесения изменений в существующий код.
Важнейшим изменением является удаление механизма GIL, который препятствовал эффективному использованию многопроцессорных систем. Теперь Python позволяет эффективно распределять задачи между несколькими потоками, значительно увеличивая производительность в многопоточных приложениях. Это открывает путь к новому уровню производительности для интенсивных вычислительных задач и многопоточности.
Python 3.14 отличается значительным увеличением производительности за счет оптимизации внутренней работы интерпретатора. Испытания показывают, что новое решение позволяет выполнять задачи быстрее и использовать меньше памяти, что особенно важно для больших проектов и интенсивных вычислений
### Swift для Android
Компания Apple открыла возможность разработки приложений на языке Swift для операционной системы Android, что ранее было ограничено экосистемой Apple. Хотя поддержка пока неполная, но в перспективе Swift может стать альтернативой инструментам для кросс-платформенной разработке, как Kotlin Multiplatform, Flutter (Dart), .NET MAUI (C#), React Native (JS/TS)
### Искусственный интеллект и инструменты для разработчиков
В 2025 году продолжил развиваться подход, при котором ИИ выступает не просто помощником, а полноценным соавтором разработчика. Примерно 60% специалистов среднего уровня активно использовали ИИ-ассистентов в работе.
Появился термин «вайбкодинг» (vibe coding), который описывает ситуацию, когда разработчик задаёт направление желаемого результата, а реализацию берёт на себя ИИ. В России этот подход стал стандартным инструментом для быстрого прототипирования и создания MVP, особенно в стартапах и продуктовых командах.
Однако эксперты предупреждают, что код, созданный с помощью вайбкодинга, часто оказывается хрупким: его сложно поддерживать и масштабировать. В индустрии даже появился термин «вайб-похмелье» для описания ситуации, когда проект приходится переписывать с нуля, потому что никто уже не понимает, как он устроен.
### Развитие рынка труда для разработчиков
В 2025 году рынок труда для программистов в России и мире претерпевал значительные изменения, связанные с экономическими факторами, технологическим прогрессом и структурными сдвигами в отрасли.
Увеличилось количество вакансий в сферах машинного обучения, AI, кибербезопасности, разработки приложений виртуальной реальности, операционной инженерии.
В России наблюдался дисбаланс между количеством соискателей и спросом на определённые категории специалистов. По данным hh_ru, на одну ИТ-вакансию в 2025 году приходилось около 14 резюме, что почти вдвое выше «комфортного» уровня. При этом конкуренция была максимальной среди начинающих специалистов (джунов) — 18,6 резюме на одну вакансию, тогда как на позиции сеньоров приходилось всего 3 резюме, и не все из них соответствовали требованиям.
Рынок труда характеризуется избытком джунов. Многие недавние выпускники онлайн-курсов и вузов не обладали достаточными практическими навыками для выполнения коммерческих задач. У них часто были завышенные зарплатные ожидания.
И в то же время наблюдается дефицит middle- и senior-специалистов. Компании остро нуждались в опытных разработчиках, способных быстро включаться в сложные проекты и принимать ключевые решения.
Выход Python 3.14 в октябре 2025 года ознаменовал важные изменения и улучшения, направленные на повышение производительности, улучшение поддержки многопоточности и предоставление новых возможностей для разработчиков.
Интерпретатор Python 3.14 получил значительные улучшения, включающие оптимизацию обработки команд CPython и увеличение производительности на уровне байт-кода. Результаты тестов показывают, что средний прирост производительности составляет около 30%, что достигается без необходимости внесения изменений в существующий код.
Важнейшим изменением является удаление механизма GIL, который препятствовал эффективному использованию многопроцессорных систем. Теперь Python позволяет эффективно распределять задачи между несколькими потоками, значительно увеличивая производительность в многопоточных приложениях. Это открывает путь к новому уровню производительности для интенсивных вычислительных задач и многопоточности.
Python 3.14 отличается значительным увеличением производительности за счет оптимизации внутренней работы интерпретатора. Испытания показывают, что новое решение позволяет выполнять задачи быстрее и использовать меньше памяти, что особенно важно для больших проектов и интенсивных вычислений
### Swift для Android
Компания Apple открыла возможность разработки приложений на языке Swift для операционной системы Android, что ранее было ограничено экосистемой Apple. Хотя поддержка пока неполная, но в перспективе Swift может стать альтернативой инструментам для кросс-платформенной разработке, как Kotlin Multiplatform, Flutter (Dart), .NET MAUI (C#), React Native (JS/TS)
### Искусственный интеллект и инструменты для разработчиков
В 2025 году продолжил развиваться подход, при котором ИИ выступает не просто помощником, а полноценным соавтором разработчика. Примерно 60% специалистов среднего уровня активно использовали ИИ-ассистентов в работе.
Появился термин «вайбкодинг» (vibe coding), который описывает ситуацию, когда разработчик задаёт направление желаемого результата, а реализацию берёт на себя ИИ. В России этот подход стал стандартным инструментом для быстрого прототипирования и создания MVP, особенно в стартапах и продуктовых командах.
Однако эксперты предупреждают, что код, созданный с помощью вайбкодинга, часто оказывается хрупким: его сложно поддерживать и масштабировать. В индустрии даже появился термин «вайб-похмелье» для описания ситуации, когда проект приходится переписывать с нуля, потому что никто уже не понимает, как он устроен.
### Развитие рынка труда для разработчиков
В 2025 году рынок труда для программистов в России и мире претерпевал значительные изменения, связанные с экономическими факторами, технологическим прогрессом и структурными сдвигами в отрасли.
Увеличилось количество вакансий в сферах машинного обучения, AI, кибербезопасности, разработки приложений виртуальной реальности, операционной инженерии.
В России наблюдался дисбаланс между количеством соискателей и спросом на определённые категории специалистов. По данным hh_ru, на одну ИТ-вакансию в 2025 году приходилось около 14 резюме, что почти вдвое выше «комфортного» уровня. При этом конкуренция была максимальной среди начинающих специалистов (джунов) — 18,6 резюме на одну вакансию, тогда как на позиции сеньоров приходилось всего 3 резюме, и не все из них соответствовали требованиям.
Рынок труда характеризуется избытком джунов. Многие недавние выпускники онлайн-курсов и вузов не обладали достаточными практическими навыками для выполнения коммерческих задач. У них часто были завышенные зарплатные ожидания.
И в то же время наблюдается дефицит middle- и senior-специалистов. Компании остро нуждались в опытных разработчиках, способных быстро включаться в сложные проекты и принимать ключевые решения.
❤5❤🔥2👎1👏1
На российский рынок труда также оказали влияние некоторые локальные особенности. Например, влияние импортозамещения: переход на отечественные решения (например, замену Oracle на PostgreSQL, SAP на 1С) создал спрос на специалистов, знакомых с российскими продуктами
В то де время экономические факторы, в частности, высокая ключевая ставка ЦБ и замедление экономики, а также оптимизация расходов привели к снижению количества вакансий, произошло сокращение бюджетов и проектов.
Тем не менее также стоит отметить и гос. поддержку в этой сфере: действовали программы льготной ипотеки для IT-специалистов (до 2030 года), отсрочка от призыва для сотрудников аккредитованных компаний, образовательные инициативы (увеличение бюджетных мест в вузах, корпоративные университеты).
Мировой рынок IT в 2025 году столкнулся с заметным охлаждением. По данным компании ZipRecruiter, в США количество IT-вакансий за последний год сократилось на 56%. Крупные технологические компании (Microsoft, Intel, Tata Consultancy Services) проводили масштабные сокращения.
ИИ начал массово внедряться в процессы разработки, что привело к сокращению спроса на специалистов, выполняющих рутинные задачи. По некоторым оценкам, доля кода, создаваемого с помощью ИИ, достигла около 50%. Однако это повысило спрос на сеньоров для ревью кода, постановки требований и работы с аналитикой.
В США и Индии и в ряде других стран (как и в России) фиксировалось сокращение позиций для начинающих специалистов и рост спроса на узкопрофильных экспертов. Компании искали специалистов с опытом в конкретных сферах: финансы, e-commerce, кибербезопасность, машинное обучение.
В то де время экономические факторы, в частности, высокая ключевая ставка ЦБ и замедление экономики, а также оптимизация расходов привели к снижению количества вакансий, произошло сокращение бюджетов и проектов.
Тем не менее также стоит отметить и гос. поддержку в этой сфере: действовали программы льготной ипотеки для IT-специалистов (до 2030 года), отсрочка от призыва для сотрудников аккредитованных компаний, образовательные инициативы (увеличение бюджетных мест в вузах, корпоративные университеты).
Мировой рынок IT в 2025 году столкнулся с заметным охлаждением. По данным компании ZipRecruiter, в США количество IT-вакансий за последний год сократилось на 56%. Крупные технологические компании (Microsoft, Intel, Tata Consultancy Services) проводили масштабные сокращения.
ИИ начал массово внедряться в процессы разработки, что привело к сокращению спроса на специалистов, выполняющих рутинные задачи. По некоторым оценкам, доля кода, создаваемого с помощью ИИ, достигла около 50%. Однако это повысило спрос на сеньоров для ревью кода, постановки требований и работы с аналитикой.
В США и Индии и в ряде других стран (как и в России) фиксировалось сокращение позиций для начинающих специалистов и рост спроса на узкопрофильных экспертов. Компании искали специалистов с опытом в конкретных сферах: финансы, e-commerce, кибербезопасность, машинное обучение.
👍14🔥4❤2👎2❤🔥1🤬1
Список базовых команд Linux для повседневного использования
(продолжение предыдущего поста)
1. Bash Commands (базовые команды Bash):
-
-
-
-
-
-
-
2. File commands (команды работы с файлами и директориями):
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
3. File permissions (команды управления правами доступа к файлам):
-
-
-
4. Process management (управление процессами):
-
-
-
-
-
5. Searching (поиск):
-
-
-
-
-
-
6. Network (сетевые команды):
-
-
-
-
-
-
7. SSH (команды SSH):
-
-
-
8. Installation (команды установки):
-
-
-
(продолжение предыдущего поста)
1. Bash Commands (базовые команды Bash):
-
uname -a — показать систему и ядро;-
head -n1 /etc/issue — показать дистрибутив;-
mount — показать смонтированные файловые системы;-
date — показать системную дату;-
uptime — показать время работы системы;-
whoami — показать имя пользователя;-
man command — показать руководство по команде.2. File commands (команды работы с файлами и директориями):
-
ls — список директории;-
ls -a — показать всё (включая скрытые файлы);-
ls -R — рекурсивный список;-
ls -r — обратный порядок;-
ls -t — сортировка по времени последнего изменения;-
ls -S — сортировка по размеру файла;-
ls -l — длинный формат списка;-
ls -1 — по одному файлу в строке;-
ls -m — вывод через запятую;-
ls -Q — вывод в кавычках;-
cd — перейти в домашнюю директорию;-
pwd — показать текущую директорию;-
mkdir dir — создать директорию dir;-
cd dir — перейти в директорию dir;-
rm file — удалить файл;-
rm -r dir — удалить директорию dir (рекурсивно);-
rm -f file — принудительно удалить файл;-
rm -rf dir — удалить директорию dir (рекурсивно, без подтверждения);-
cp file1 file2 — скопировать file1 в file2;-
mv file1 file2 — переименовать file1 в file2;-
ln -s file link — создать символьную ссылку «link» на файл;-
touch file — создать или обновить файл;-
cat > file — поместить стандартный ввод в файл;-
more file — вывести содержимое файла;-
less file — вывести содержимое файла (с постраничным просмотром);-
head file — вывести первые 10 строк файла;-
tail file — вывести последние 10 строк файла.3. File permissions (команды управления правами доступа к файлам):
-
chmod 775 file — изменить права доступа файла на 775;-
chmod -R 600 folder — рекурсивно изменить права доступа папки на 600;-
chown user.group file — изменить владельца файла на user и группу на group.4. Process management (управление процессами):
-
ps — показать снимок процессов;-
top — показать процессы в реальном времени;-
kill pid — завершить процесс с ID pid;-
pkill name — завершить процесс по имени name;-
killall name — завершить все процессы, имена которых начинаются с name.5. Searching (поиск):
-
grep pattern files — поиск шаблона в файлах;-
grep -i — поиск без учёта регистра;-
grep -r — рекурсивный поиск;-
grep -v — инвертированный поиск (показать строки, где шаблон не найден);-
grep -o — показать только совпадающую часть файла;-
find /dir/ -name name* — найти файлы, начинающиеся с name в директории /dir/.6. Network (сетевые команды):
-
ping host — отправить пинг на хост host;-
dig domain — получить DNS для домена;-
dig -x host — обратный поиск по хосту;-
wget file — скачать файл;-
wget -c file — продолжить прерванную загрузку;-
wget -r url — рекурсивно скачать файлы с URL.7. SSH (команды SSH):
-
ssh user@host — подключиться к хосту как пользователь user;-
ssh -p port user@host — подключиться, используя порт p;-
ssh -D port user@host — подключиться и использовать бинд-порт.8. Installation (команды установки):
-
./configure — настройка перед компиляцией;-
make — компиляция программы;-
make install — установка скомпилированной программы.Telegram
METANIT.COM
Список базовых команд Linux для повседневного использования
(продолжение в следующем посте)
(продолжение в следующем посте)
❤🔥11🎄7👏1
Стратегии совместного использования кода
(продолжение предыдущего поста)
Есть 4 основные стратегии совместного использования кода в микросервисной архитектуре: Code Replication (Кодовое дублирование), Shared Library (Общая библиотека), Shared Service (Общий сервис) и Sidecar (Сайдкар). Рассмотрим каждую из них подробно.
#### 1. Code Replication (Кодовое дублирование)
Суть: код, необходимый нескольким сервисам, копируется (дублируется) в каждый из них. На схеме видно, что
Преимущества:
* простота реализации — не требует дополнительных инфраструктурных решений;
* автономность сервисов — каждый сервис содержит весь необходимый код локально;
* отсутствие сетевых задержек, связанных с обращением к внешним ресурсам.
Недостатки:
* дублирование кода ведёт к увеличению объёма кода и усложняет его поддержку;
* при необходимости обновления общего кода нужно вносить изменения во все сервисы, что увеличивает риск ошибок и время на развёртывание;
* сложность синхронизации версий кода между сервисами.
Когда использовать: подходит для небольших проектов или случаев, когда код используется редко и не требует частого обновления.
#### 2. Shared Library (Общая библиотека)
Суть: сервисы используют общую библиотеку кода. На схеме показано, что
Преимущества:
* уменьшение объёма кода за счёт его централизации;
* упрощение поддержки — обновления вносятся в одном месте;
* возможность повторного использования кода между сервисами;
* поддержка версий библиотеки позволяет контролировать совместимость.
Недостатки:
* зависимость сервисов от общей библиотеки может усложнить развёртывание и обновление;
* необходимость синхронизации версий библиотеки между сервисами;
* риск конфликтов зависимостей, если сервисы используют разные версии библиотеки.
Когда использовать: оптимально для проектов с большим количеством сервисов, использующих общий функционал (например, библиотеки для логирования, трассировки, работы с API).
#### 3. Shared Service (Общий сервис)
Суть: вместо включения кода в сервисы или использования библиотек, сервисы обращаются к отдельному общему сервису по сети. На схеме
Преимущества:
* полная изоляция логики — общий сервис можно обновлять независимо от клиентских сервисов;
* централизованное управление функционалом (например, аутентификация, кэширование, обработка платежей);
* масштабируемость — общий сервис можно масштабировать отдельно от клиентских сервисов;
* упрощение развёртывания новых сервисов — достаточно добавить вызов к общему сервису.
Недостатки:
* сетевые задержки при обращении к общему сервису;
* единая точка отказа — если общий сервис упадёт, все зависящие от него сервисы потеряют функциональность;
* усложнение архитектуры и необходимость управления сетевыми вызовами.
Когда использовать: подходит для критических сервисов с высокой нагрузкой (например, сервис аутентификации, платёжный шлюз), где важна централизованная логика и масштабируемость.
#### 4. Sidecar (Сайдкар)
Суть: отдельный процесс (сайдкар) запускается вместе с сервисом и предоставляет ему дополнительные функции. На схеме
Преимущества:
* изоляция кросс-функционального кода (логирование, мониторинг) от бизнес-логики сервиса;
* возможность обновления сайдкара без изменения основного сервиса;
* упрощение внедрения общих функций (например, трассировки, аутентификации) в существующие сервисы;
* поддержка микросервисной изоляции при сохранении централизованного управления некоторыми аспектами (логирование, безопасность).
Недостатки:
* усложнение развёртывания — нужно управлять двумя процессами (сервис + сайдкар);
* дополнительные ресурсы — сайдкар потребляет ресурсы наравне с основным сервисом;
* необходимость синхронизации работы сервиса и сайдкара.
(продолжение предыдущего поста)
Есть 4 основные стратегии совместного использования кода в микросервисной архитектуре: Code Replication (Кодовое дублирование), Shared Library (Общая библиотека), Shared Service (Общий сервис) и Sidecar (Сайдкар). Рассмотрим каждую из них подробно.
#### 1. Code Replication (Кодовое дублирование)
Суть: код, необходимый нескольким сервисам, копируется (дублируется) в каждый из них. На схеме видно, что
SERVICE A, SERVICE B и SERVICE C содержат копию SHARED CODE.Преимущества:
* простота реализации — не требует дополнительных инфраструктурных решений;
* автономность сервисов — каждый сервис содержит весь необходимый код локально;
* отсутствие сетевых задержек, связанных с обращением к внешним ресурсам.
Недостатки:
* дублирование кода ведёт к увеличению объёма кода и усложняет его поддержку;
* при необходимости обновления общего кода нужно вносить изменения во все сервисы, что увеличивает риск ошибок и время на развёртывание;
* сложность синхронизации версий кода между сервисами.
Когда использовать: подходит для небольших проектов или случаев, когда код используется редко и не требует частого обновления.
#### 2. Shared Library (Общая библиотека)
Суть: сервисы используют общую библиотеку кода. На схеме показано, что
SERVICE A, SERVICE B и SERVICE C подключают модули (SC1, SC2, SC3, SC4, SC5) из общей библиотеки.Преимущества:
* уменьшение объёма кода за счёт его централизации;
* упрощение поддержки — обновления вносятся в одном месте;
* возможность повторного использования кода между сервисами;
* поддержка версий библиотеки позволяет контролировать совместимость.
Недостатки:
* зависимость сервисов от общей библиотеки может усложнить развёртывание и обновление;
* необходимость синхронизации версий библиотеки между сервисами;
* риск конфликтов зависимостей, если сервисы используют разные версии библиотеки.
Когда использовать: оптимально для проектов с большим количеством сервисов, использующих общий функционал (например, библиотеки для логирования, трассировки, работы с API).
#### 3. Shared Service (Общий сервис)
Суть: вместо включения кода в сервисы или использования библиотек, сервисы обращаются к отдельному общему сервису по сети. На схеме
SERVICE A, SERVICE B и SERVICE C делают сетевые вызовы к SHARED SERVICE.Преимущества:
* полная изоляция логики — общий сервис можно обновлять независимо от клиентских сервисов;
* централизованное управление функционалом (например, аутентификация, кэширование, обработка платежей);
* масштабируемость — общий сервис можно масштабировать отдельно от клиентских сервисов;
* упрощение развёртывания новых сервисов — достаточно добавить вызов к общему сервису.
Недостатки:
* сетевые задержки при обращении к общему сервису;
* единая точка отказа — если общий сервис упадёт, все зависящие от него сервисы потеряют функциональность;
* усложнение архитектуры и необходимость управления сетевыми вызовами.
Когда использовать: подходит для критических сервисов с высокой нагрузкой (например, сервис аутентификации, платёжный шлюз), где важна централизованная логика и масштабируемость.
#### 4. Sidecar (Сайдкар)
Суть: отдельный процесс (сайдкар) запускается вместе с сервисом и предоставляет ему дополнительные функции. На схеме
SERVICE A и SERVICE B работают вместе с SIDECAR, который отвечает за логирование, мониторинг, работу с Circuit Breaker и другие задачи.Преимущества:
* изоляция кросс-функционального кода (логирование, мониторинг) от бизнес-логики сервиса;
* возможность обновления сайдкара без изменения основного сервиса;
* упрощение внедрения общих функций (например, трассировки, аутентификации) в существующие сервисы;
* поддержка микросервисной изоляции при сохранении централизованного управления некоторыми аспектами (логирование, безопасность).
Недостатки:
* усложнение развёртывания — нужно управлять двумя процессами (сервис + сайдкар);
* дополнительные ресурсы — сайдкар потребляет ресурсы наравне с основным сервисом;
* необходимость синхронизации работы сервиса и сайдкара.
❤5👍2🔥2
Когда использовать: идеально для добавления кросс-функциональных возможностей (логирование, трассировка, безопасность) в уже развёрнутые микросервисы без изменения их кода. Также подходит для сервисов с высокой критичностью, где важно изолировать инфраструктурные задачи.
### Резюме
Выбор стратегии зависит от:
* сложности и объёма общего кода;
* требований к масштабируемости и надёжности;
* архитектуры существующей системы;
* необходимости изоляции бизнес-логики от инфраструктурных задач.
Code Replication — для простых случаев с малым объёмом кода.
Shared Library — для повторного использования кода с умеренной сложностью.
Shared Service — для критически важных централизованных функций.
Sidecar — для добавления инфраструктурных возможностей к существующим сервисам.
### Резюме
Выбор стратегии зависит от:
* сложности и объёма общего кода;
* требований к масштабируемости и надёжности;
* архитектуры существующей системы;
* необходимости изоляции бизнес-логики от инфраструктурных задач.
Code Replication — для простых случаев с малым объёмом кода.
Shared Library — для повторного использования кода с умеренной сложностью.
Shared Service — для критически важных централизованных функций.
Sidecar — для добавления инфраструктурных возможностей к существующим сервисам.
Telegram
METANIT.COM
Стратегии совместного использования кода
(продолжение в следующем посте)
(продолжение в следующем посте)
❤6👍3👀3
Основные команды Linux для получения информации о системе
(продолжение в следующем посте)
(продолжение в следующем посте)
❤6🥰1👏1
Основные команды Linux для получения информации о системе
(продолжение предыдущего поста)
1. Отобразить информацию о ядре и архитектуре системы:
2. Показать информацию о CPU:
3. Отобразить использование памяти (RAM):
4. Получить время работы системы (uptime):
5. Показать детализированное использование системных ресурсов:
6. Отобразить использование диска для всех смонтированных файловых систем:
7. Проверить текущее использование диска по директориям:
8. Показать информацию об устройствах PCI:
9. Отобразить информацию об USB-устройствах:
10. Показать информацию о сетевых интерфейсах:
11. Отобразить сообщения ядра (полезно для отладки оборудования):
12. Проверить системные журналы (для недавней активности/ошибок):
13. Отобразить информацию об блочных устройствах (диски, разделы):
14. Вывести список всех загруженных модулей ядра:
15. Показать имя хоста системы:
16. Отобразить активных пользователей:
17. Проверить запущенные процессы:
18. Показать статус батареи (для ноутбуков):
19. Отобразить журнал загрузки системы:
20. Показать общий обзор аппаратного обеспечения системы:
(продолжение предыдущего поста)
1. Отобразить информацию о ядре и архитектуре системы:
uname -a2. Показать информацию о CPU:
cat /proc/cpuinfo3. Отобразить использование памяти (RAM):
free -h4. Получить время работы системы (uptime):
uptime5. Показать детализированное использование системных ресурсов:
top6. Отобразить использование диска для всех смонтированных файловых систем:
df -h7. Проверить текущее использование диска по директориям:
du -sh *8. Показать информацию об устройствах PCI:
lspci9. Отобразить информацию об USB-устройствах:
lsusb10. Показать информацию о сетевых интерфейсах:
ifconfig11. Отобразить сообщения ядра (полезно для отладки оборудования):
dmesg | less12. Проверить системные журналы (для недавней активности/ошибок):
tail -f /var/log/syslog13. Отобразить информацию об блочных устройствах (диски, разделы):
lsblk14. Вывести список всех загруженных модулей ядра:
lsmod15. Показать имя хоста системы:
hostname16. Отобразить активных пользователей:
who17. Проверить запущенные процессы:
ps aux18. Показать статус батареи (для ноутбуков):
upower -i /org/freedesktop/UPower/devices/battery_BATO19. Отобразить журнал загрузки системы:
journalctl -b20. Показать общий обзор аппаратного обеспечения системы:
lshwTelegram
METANIT.COM
Основные команды Linux для получения информации о системе
(продолжение в следующем посте)
(продолжение в следующем посте)
👍9❤🔥8👏1
5 HTTP-статусных кодов, которые "не должны были существовать"
(продолжение в следующем посте)
(продолжение в следующем посте)
😁11❤2👏2
5 HTTP-статусных кодов, которые "не должны были существовать"
(продолжение предыдущего поста)
Многие так или иначе знакомы с протоколом HTTP и его статусными кодами. Однако мало кто знает, что есть 5 кодов состояния HTTP, которые являются необычными, забавными или проблематичными - грубо говоря, статусные коды, которые "не должны были существовать"
1. 451 — "Unavailable for legal reasons" (Недоступно по юридическим причинам)
- Используется, когда доступ к запрашиваемому ресурсу запрещён по юридическим причинам.
- Некоторые сайты применяли этот код, чтобы избежать соблюдения законодательных требований, например, GDPR.
- Символика: изображение молотка, отсылающее к судебной тематике.
2. 218 — "This is fine!" (Это нормально!)
- Код вдохновлён популярным интернет-мемом, в котором изображён горящий дом и невозмутимый пёс с подписью "This is fine!".
- Указывает, что ошибка не должна перехватываться сервером — она передаётся клиенту.
- Применяется для обхода переопределений ошибок веб-сервера Apache.
- Символика: улыбающийся смайлик с поднятым вверх большим пальцем.
3. 420 — "Enhance your calm" (Успокойтесь)
- Нестандартный код, который буквально просит клиента "успокоиться".
- Изначально использовался Twitter для обозначения ситуаций, когда клиент превышал лимиты запросов (rate limits).
- Впоследствии заменён на стандартный код 429 (Too Many Requests).
- Символика: изображение человека в позе медитации, подчёркивающее идею "успокоения".
4. 530 — "Site Frozen" (Сайт заморожен)
- Применяется, когда сайт остаётся работоспособным, но намеренно заблокирован провайдером.
- Используется компанией Pantheon (облачный провайдер) для обозначения заблокированных сайтов — например, из-за неоплаченных счетов или истёкших пробных периодов.
- Символика: изображение веб-страницы с морозными узорами, визуально отображающее "заморозку".
5. 418 — "I’m a teapot" (Я — чайник)
- Появился как шутка ко Дню смеха (April Fool’s Day) в 1998 году.
- Символизирует сервер, который не способен "сварить кофе" (выполнить запрошенное действие).
- Несмотря на шуточный характер, код был поддержан основными реализациями HTTP.
- Даже породил шуточное "социальное движение" — Save 418 movement.
- Символика: изображение чайника, подчёркивающее юмористический характер кода.
(продолжение предыдущего поста)
Многие так или иначе знакомы с протоколом HTTP и его статусными кодами. Однако мало кто знает, что есть 5 кодов состояния HTTP, которые являются необычными, забавными или проблематичными - грубо говоря, статусные коды, которые "не должны были существовать"
1. 451 — "Unavailable for legal reasons" (Недоступно по юридическим причинам)
- Используется, когда доступ к запрашиваемому ресурсу запрещён по юридическим причинам.
- Некоторые сайты применяли этот код, чтобы избежать соблюдения законодательных требований, например, GDPR.
- Символика: изображение молотка, отсылающее к судебной тематике.
2. 218 — "This is fine!" (Это нормально!)
- Код вдохновлён популярным интернет-мемом, в котором изображён горящий дом и невозмутимый пёс с подписью "This is fine!".
- Указывает, что ошибка не должна перехватываться сервером — она передаётся клиенту.
- Применяется для обхода переопределений ошибок веб-сервера Apache.
- Символика: улыбающийся смайлик с поднятым вверх большим пальцем.
3. 420 — "Enhance your calm" (Успокойтесь)
- Нестандартный код, который буквально просит клиента "успокоиться".
- Изначально использовался Twitter для обозначения ситуаций, когда клиент превышал лимиты запросов (rate limits).
- Впоследствии заменён на стандартный код 429 (Too Many Requests).
- Символика: изображение человека в позе медитации, подчёркивающее идею "успокоения".
4. 530 — "Site Frozen" (Сайт заморожен)
- Применяется, когда сайт остаётся работоспособным, но намеренно заблокирован провайдером.
- Используется компанией Pantheon (облачный провайдер) для обозначения заблокированных сайтов — например, из-за неоплаченных счетов или истёкших пробных периодов.
- Символика: изображение веб-страницы с морозными узорами, визуально отображающее "заморозку".
5. 418 — "I’m a teapot" (Я — чайник)
- Появился как шутка ко Дню смеха (April Fool’s Day) в 1998 году.
- Символизирует сервер, который не способен "сварить кофе" (выполнить запрошенное действие).
- Несмотря на шуточный характер, код был поддержан основными реализациями HTTP.
- Даже породил шуточное "социальное движение" — Save 418 movement.
- Символика: изображение чайника, подчёркивающее юмористический характер кода.
Telegram
METANIT.COM
5 HTTP-статусных кодов, которые "не должны были существовать"
(продолжение в следующем посте)
(продолжение в следующем посте)
😁14❤6👏2🤡1
Паттерн Event Sourcing (источники событий)
(продолжение предыдущего поста)
Event Sourcing (источники событий) — это архитектурный паттерн, при котором изменения состояния системы сохраняются в виде последовательного лога событий (событийного журнала), а не напрямую в виде состояния сущностей. Этот подход позволяет воссоздать текущее или историческое состояние системы, воспроизводя события в хронологическом порядке.
Разберём принцип работы по изображению:
1. App (Приложение): инициирует операции (Operations), которые преобразуются в события.
2. Event Store (Хранилище событий):
* служит центральным хранилищем, где последовательно сохраняются все события, происходящие в системе;
* события хранятся в неизменяемом (immutable) виде — их нельзя удалить или изменить, только добавить новые;
* это "источник истины" для всей системы.
3. Event Store Consumer (Потребитель хранилища событий):
* считывает события из хранилища (Consume Event);
* применяет события для формирования текущего состояния системы;
* обновляет Current State DB (БД текущего состояния) — оптимизированную базу данных для быстрого доступа к актуальному состоянию сущностей.
4. Current State DB (БД текущего состояния):
* содержит актуальное состояние системы, сформированное на основе событий;
* используется для быстрых операций чтения (например, отображения данных пользователю).
5. Replay Processor (Процессор воспроизведения):
* позволяет "перепроиграть" события из хранилища для воссоздания состояния системы на любой момент времени (Point in Time — PIT);
* полезен для отката изменений, аудита, восстановления после сбоев или анализа истории изменений.
6. Point in Time DB (БД момента времени):
* хранит состояния системы на определённые моменты времени (снимки состояния);
* позволяет быстро получить состояние системы "на дату", без необходимости полного перебора событий.
Ключевые особенности Event Sourcing:
* Децентрализованное изменение и чтение данных — события могут обрабатываться асинхронно разными компонентами системы.
* Аудит и история изменений — полный лог событий позволяет отследить, кто, когда и какие изменения вносил.
* Возможность отката — при ошибках или необходимости можно "откатить" систему до предыдущего корректного состояния.
* Масштабируемость — событийный лог легко горизонтально масштабируется.
* Сочетание с CQRS — часто используется вместе с паттерном CQRS (Command Query Responsibility Segregation) для разделения команд (изменений) и запросов (чтения).
Примеры применения:
* финансовые системы (где важна история транзакций);
* системы электронной коммерции (отслеживание изменений корзины, заказов);
* CRM-системы (логирование изменений статусов клиентов);
* игровые платформы (сохранение прогресса игрока).
В итоге Event Sourcing смещает фокус с хранения состояния на хранение изменений (событий), что делает систему более гибкой, прозрачной и устойчивой к ошибкам. Однако этот паттерн требует дополнительных ресурсов на моделирование и обработку событий.
(продолжение предыдущего поста)
Event Sourcing (источники событий) — это архитектурный паттерн, при котором изменения состояния системы сохраняются в виде последовательного лога событий (событийного журнала), а не напрямую в виде состояния сущностей. Этот подход позволяет воссоздать текущее или историческое состояние системы, воспроизводя события в хронологическом порядке.
Разберём принцип работы по изображению:
1. App (Приложение): инициирует операции (Operations), которые преобразуются в события.
2. Event Store (Хранилище событий):
* служит центральным хранилищем, где последовательно сохраняются все события, происходящие в системе;
* события хранятся в неизменяемом (immutable) виде — их нельзя удалить или изменить, только добавить новые;
* это "источник истины" для всей системы.
3. Event Store Consumer (Потребитель хранилища событий):
* считывает события из хранилища (Consume Event);
* применяет события для формирования текущего состояния системы;
* обновляет Current State DB (БД текущего состояния) — оптимизированную базу данных для быстрого доступа к актуальному состоянию сущностей.
4. Current State DB (БД текущего состояния):
* содержит актуальное состояние системы, сформированное на основе событий;
* используется для быстрых операций чтения (например, отображения данных пользователю).
5. Replay Processor (Процессор воспроизведения):
* позволяет "перепроиграть" события из хранилища для воссоздания состояния системы на любой момент времени (Point in Time — PIT);
* полезен для отката изменений, аудита, восстановления после сбоев или анализа истории изменений.
6. Point in Time DB (БД момента времени):
* хранит состояния системы на определённые моменты времени (снимки состояния);
* позволяет быстро получить состояние системы "на дату", без необходимости полного перебора событий.
Ключевые особенности Event Sourcing:
* Децентрализованное изменение и чтение данных — события могут обрабатываться асинхронно разными компонентами системы.
* Аудит и история изменений — полный лог событий позволяет отследить, кто, когда и какие изменения вносил.
* Возможность отката — при ошибках или необходимости можно "откатить" систему до предыдущего корректного состояния.
* Масштабируемость — событийный лог легко горизонтально масштабируется.
* Сочетание с CQRS — часто используется вместе с паттерном CQRS (Command Query Responsibility Segregation) для разделения команд (изменений) и запросов (чтения).
Примеры применения:
* финансовые системы (где важна история транзакций);
* системы электронной коммерции (отслеживание изменений корзины, заказов);
* CRM-системы (логирование изменений статусов клиентов);
* игровые платформы (сохранение прогресса игрока).
В итоге Event Sourcing смещает фокус с хранения состояния на хранение изменений (событий), что делает систему более гибкой, прозрачной и устойчивой к ошибкам. Однако этот паттерн требует дополнительных ресурсов на моделирование и обработку событий.
Telegram
METANIT.COM
Паттерн Event Sourcing (источники событий)
(продолжение в следующем посте)
(продолжение в следующем посте)
👍4❤2🔥2
Аутентификация на основе токенов и HMAC
(продолжение предыдущего поста)
Аутентификация на основе токенов и аутентификация HMAC являются распространенными формами аутентификации. Посмотрим, в чем они различаются.
1. Принцип работы
- Аутентификация на основе токенов (Token-based authentication):
1. Клиент отправляет логин и пароль на Authentication Server.
2. Сервер аутентификации генерирует токен (уникальную строку) и передаёт его клиенту.
3. Клиент включает токен в заголовки HTTP-запросов к Web Server при обращении к ресурсам.
4. Web Server проверяет валидность токена и, если он действителен, предоставляет доступ к ресурсу.
Суть: клиент получает токен после успешной аутентификации и использует его для подтверждения своих прав при каждом запросе.
- Аутентификация на основе HMAC (HMAC authentication):
1. Клиент запрашивает API key у Authentication Server.
2. Сервер передаёт клиенту API key (секретный ключ).
3. Клиент генерирует HMAC-подпись (hmac A) на стороне клиента, используя API key и параметры запроса (например, URI, метод HTTP, временная метка).
4. Клиент отправляет запрос к Web Server вместе с HMAC-подписью.
5. Web Server генерирует свою HMAC-подпись (hmac B) с теми же параметрами, используя свой экземпляр API key.
6. Web Server сравнивает hmac A (от клиента) и hmac B (собственно сгенерированный). Если подписи совпадают — запрос считается аутентифицированным.
7. При успешной проверке клиент получает доступ к ресурсу.
Суть: клиент и сервер независимо вычисляют HMAC-подпись, используя общий секретный ключ. Совпадение подписей подтверждает подлинность запроса.
2. Используемые механизмы безопасности
- Токены:
- Используют систему «выдать и использовать» (token issuance and validation).
- Токены могут быть JWT (JSON Web Tokens) с подписями, которые содержат метаданные (истечение срока действия, идентификатор пользователя и т. д.).
- Защита строится на валидации подписи токена и его срока действия.
- HMAC:
- Основан на криптографической функции HMAC (Hash-based Message Authentication Code), которая сочетает хэш-функцию и секретный ключ.
- Гарантирует целостность данных (данные не изменены в пути) и аутентичность отправителя (только владелец секретного ключа может сгенерировать корректную подпись).
- Секретный ключ никогда не передаётся в открытом виде — только используется для генерации подписей.
3. Этапы взаимодействия
- Токены: 4 основных шага (вход → получение токена → отправка запросов с токеном → доступ к ресурсу).
- HMAC: 7 шагов, включая генерацию и сравнение подписей (запрос API key → генерация подписи клиентом → отправка запроса → генерация подписи сервером → сравнение подписей → доступ к ресурсу).
4. Уровень сложности и вычислительных затрат
- Токены: проще в реализации, меньше вычислительных затрат на стороне клиента (только хранение и передача токена).
- HMAC: требует дополнительных вычислений на стороне клиента (генерация HMAC-подписи для каждого запроса), но обеспечивает более высокий уровень безопасности.
5. Сценарии применения
- Токены: подходят для веб-приложений, мобильных приложений, где важна простота и скорость аутентификации. Часто используются в REST API, SPA (Single Page Applications).
- HMAC: предпочтителен для API, где критична безопасность (финансовые сервисы, платёжные системы), а также для микросервисов, где требуется строгая проверка целостности запросов.
6. Уязвимости и защита
- Токены: уязвимы к перехвату (если не используются защищённые каналы, например, HTTPS). JWT могут быть подвержены атакам, если подпись не проверена должным образом.
- HMAC: более устойчив к перехвату, так как даже зная запрос, злоумышленник не сможет сгенерировать корректную подпись без секретного ключа. Однако требует строгой защиты API key.
Краткое резюме:
- Токены — удобны и быстры, но менее безопасны.
- HMAC — более сложен в реализации, но обеспечивает высокий уровень защиты за счёт криптографической проверки целостности и подлинности. Выбор зависит от требований к безопасности и архитектуры системы.
(продолжение предыдущего поста)
Аутентификация на основе токенов и аутентификация HMAC являются распространенными формами аутентификации. Посмотрим, в чем они различаются.
1. Принцип работы
- Аутентификация на основе токенов (Token-based authentication):
1. Клиент отправляет логин и пароль на Authentication Server.
2. Сервер аутентификации генерирует токен (уникальную строку) и передаёт его клиенту.
3. Клиент включает токен в заголовки HTTP-запросов к Web Server при обращении к ресурсам.
4. Web Server проверяет валидность токена и, если он действителен, предоставляет доступ к ресурсу.
Суть: клиент получает токен после успешной аутентификации и использует его для подтверждения своих прав при каждом запросе.
- Аутентификация на основе HMAC (HMAC authentication):
1. Клиент запрашивает API key у Authentication Server.
2. Сервер передаёт клиенту API key (секретный ключ).
3. Клиент генерирует HMAC-подпись (hmac A) на стороне клиента, используя API key и параметры запроса (например, URI, метод HTTP, временная метка).
4. Клиент отправляет запрос к Web Server вместе с HMAC-подписью.
5. Web Server генерирует свою HMAC-подпись (hmac B) с теми же параметрами, используя свой экземпляр API key.
6. Web Server сравнивает hmac A (от клиента) и hmac B (собственно сгенерированный). Если подписи совпадают — запрос считается аутентифицированным.
7. При успешной проверке клиент получает доступ к ресурсу.
Суть: клиент и сервер независимо вычисляют HMAC-подпись, используя общий секретный ключ. Совпадение подписей подтверждает подлинность запроса.
2. Используемые механизмы безопасности
- Токены:
- Используют систему «выдать и использовать» (token issuance and validation).
- Токены могут быть JWT (JSON Web Tokens) с подписями, которые содержат метаданные (истечение срока действия, идентификатор пользователя и т. д.).
- Защита строится на валидации подписи токена и его срока действия.
- HMAC:
- Основан на криптографической функции HMAC (Hash-based Message Authentication Code), которая сочетает хэш-функцию и секретный ключ.
- Гарантирует целостность данных (данные не изменены в пути) и аутентичность отправителя (только владелец секретного ключа может сгенерировать корректную подпись).
- Секретный ключ никогда не передаётся в открытом виде — только используется для генерации подписей.
3. Этапы взаимодействия
- Токены: 4 основных шага (вход → получение токена → отправка запросов с токеном → доступ к ресурсу).
- HMAC: 7 шагов, включая генерацию и сравнение подписей (запрос API key → генерация подписи клиентом → отправка запроса → генерация подписи сервером → сравнение подписей → доступ к ресурсу).
4. Уровень сложности и вычислительных затрат
- Токены: проще в реализации, меньше вычислительных затрат на стороне клиента (только хранение и передача токена).
- HMAC: требует дополнительных вычислений на стороне клиента (генерация HMAC-подписи для каждого запроса), но обеспечивает более высокий уровень безопасности.
5. Сценарии применения
- Токены: подходят для веб-приложений, мобильных приложений, где важна простота и скорость аутентификации. Часто используются в REST API, SPA (Single Page Applications).
- HMAC: предпочтителен для API, где критична безопасность (финансовые сервисы, платёжные системы), а также для микросервисов, где требуется строгая проверка целостности запросов.
6. Уязвимости и защита
- Токены: уязвимы к перехвату (если не используются защищённые каналы, например, HTTPS). JWT могут быть подвержены атакам, если подпись не проверена должным образом.
- HMAC: более устойчив к перехвату, так как даже зная запрос, злоумышленник не сможет сгенерировать корректную подпись без секретного ключа. Однако требует строгой защиты API key.
Краткое резюме:
- Токены — удобны и быстры, но менее безопасны.
- HMAC — более сложен в реализации, но обеспечивает высокий уровень защиты за счёт криптографической проверки целостности и подлинности. Выбор зависит от требований к безопасности и архитектуры системы.
Telegram
METANIT.COM
Аутентификация на основе токенов и HMAC
(продолжение в следующем посте)
(продолжение в следующем посте)
❤6👍5🔥3
Типы криптографии
(продолжение предыдущего поста)
В зависимости от устойчивости к квантовым вычислениям криптография делится на два основных класса:
1. Quantum-breakable (уязвимые для квантовых атак).
2. Quantum-secure (устойчивые к квантовым атакам).
#### 1. Quantum-breakable (уязвимые для квантовых атак)
Эти методы могут быть взломаны с помощью квантовых компьютеров. К ним относятся:
- RSA encryption (шифрование RSA):
- Сообщение шифруется с помощью публичного ключа получателя.
- Расшифровывается с помощью приватного ключа.
- Безопасность основана на сложности разложения на простые множители (вычисления приватного ключа из публичного).
- Diffie-Hellman key exchange (обмен ключами Диффи-Хеллмана):
- Два участника совместно создают общий секретный ключ по незащищённому каналу.
- Этот ключ используется для зашифрованной коммуникации.
- Безопасность основана на сложности задачи дискретного логарифма.
- Elliptic curve cryptography (криптография на эллиптических кривых):
- Используются математические свойства эллиптических кривых для генерации публичных и приватных ключей.
- Сложность восстановления приватного ключа из публичного связана с задачей дискретного логарифма на эллиптических кривых.
#### 2. Quantum-secure (устойчивые к квантовым атакам)
Эти методы разработаны для защиты от потенциальных квантовых атак. К ним относятся:
- Lattice-based cryptography (решётчатая криптография):
- Безопасность основана на сложности нахождения ближайшей точки в решётке с сотнями пространственных измерений.
- Приватный ключ ассоциируется с точкой решётки, а публичный — с произвольной точкой в пространстве.
- Code-based cryptography (криптография на основе кодов):
- Приватный ключ связан с кодом, исправляющим ошибки.
- Публичный ключ — это искажённая и ошибочная версия этого кода.
- Безопасность основана на сложности декодирования общего линейного кода.
- Multivariate cryptography (многомерная криптография):
- Основана на сложности решения систем многомерных полиномиальных уравнений.
- Использует сложные математические конструкции для обеспечения безопасности.
Резюме:
- Quantum-breakable методы эффективны сейчас, но уязвимы для будущих квантовых компьютеров.
- Quantum-secure методы разрабатываются для защиты данных в эпоху квантовых вычислений.
(продолжение предыдущего поста)
В зависимости от устойчивости к квантовым вычислениям криптография делится на два основных класса:
1. Quantum-breakable (уязвимые для квантовых атак).
2. Quantum-secure (устойчивые к квантовым атакам).
#### 1. Quantum-breakable (уязвимые для квантовых атак)
Эти методы могут быть взломаны с помощью квантовых компьютеров. К ним относятся:
- RSA encryption (шифрование RSA):
- Сообщение шифруется с помощью публичного ключа получателя.
- Расшифровывается с помощью приватного ключа.
- Безопасность основана на сложности разложения на простые множители (вычисления приватного ключа из публичного).
- Diffie-Hellman key exchange (обмен ключами Диффи-Хеллмана):
- Два участника совместно создают общий секретный ключ по незащищённому каналу.
- Этот ключ используется для зашифрованной коммуникации.
- Безопасность основана на сложности задачи дискретного логарифма.
- Elliptic curve cryptography (криптография на эллиптических кривых):
- Используются математические свойства эллиптических кривых для генерации публичных и приватных ключей.
- Сложность восстановления приватного ключа из публичного связана с задачей дискретного логарифма на эллиптических кривых.
#### 2. Quantum-secure (устойчивые к квантовым атакам)
Эти методы разработаны для защиты от потенциальных квантовых атак. К ним относятся:
- Lattice-based cryptography (решётчатая криптография):
- Безопасность основана на сложности нахождения ближайшей точки в решётке с сотнями пространственных измерений.
- Приватный ключ ассоциируется с точкой решётки, а публичный — с произвольной точкой в пространстве.
- Code-based cryptography (криптография на основе кодов):
- Приватный ключ связан с кодом, исправляющим ошибки.
- Публичный ключ — это искажённая и ошибочная версия этого кода.
- Безопасность основана на сложности декодирования общего линейного кода.
- Multivariate cryptography (многомерная криптография):
- Основана на сложности решения систем многомерных полиномиальных уравнений.
- Использует сложные математические конструкции для обеспечения безопасности.
Резюме:
- Quantum-breakable методы эффективны сейчас, но уязвимы для будущих квантовых компьютеров.
- Quantum-secure методы разрабатываются для защиты данных в эпоху квантовых вычислений.
Telegram
METANIT.COM
Типы криптографии
(описание в следующем посте)
(описание в следующем посте)
👍11❤2❤🔥2🐳1