Я много работаю с текстом и активно пользуюсь клавиатурными сочетаниями (keyboard shortcuts). На макбуке и в макоси в целом писать текст очень удобно из-за мощной и эргономичной системы клавиатурных сочетаний, они предсказуемо и одинаково работают в разных приложениях. Однако много людей такой полезной функциональностью не пользуются или даже не знают про её существование, а ведь иначе работа с компактной клавиатурой макбука сильно тормозится.
Клавиатура в мак-устройствах отличается от привычной ПК-клавиатуры набором модальных клавиш. Вместо привычных Shift, Alt, Control, Win там другие: Shift, Option, Control, Command и Fn. Только Shift (и частично Fn) работает одинаково на обоих системах, но остальные клавиши — нет, например, для сохранения документа стандартное сочетание в маке Command-S вместо Ctrl-S в винде.
В этом тексте я ограничусь только командами редактирования и навигации по документам, они применимы везде, где можно печатать текст: текстовые редакторы, поля ввода в формах, браузер и так далее. Большой (но не полный) список доступных можно найти на сайте apple: https://support.apple.com/en-gb/HT201236.
Apple использует специальные символы для обозначения этих клавиш:
- Shift — ⇧
- Option/Alt — ⌥
- Control/Ctrl — ^
- Command — ⌘
Однако в этом тексте у меня только обычные осмысленные названия клавиш типа Ctrl-A. Также все они исключительно для латинской раскладки, то есть никаких Ctrl-Ф вместо Ctrl-A.
Иногда нужно выполнить простые операции над видеофайлами без установки специализированного GUI-софта. Для некоторых из них есть альтернативы из командной строки.
Чаще всего мы будем использовать ffmpeg.
Рисование буллетов и других маркеров¶
► ● • ∙ ◆ ◇ ◈ ◉ ○ ∘ ◦ ◼ ◻ ▪ ∙ ▫ ★ ☆ ♦ ♢ ✓ ☑ ☒ ∗
▶ ▼ ◀ ▲ △ ▷ ▽ ◁
← ↑ → ↓ ↖ ↗ ↘ ↙
Рисование блоков¶
Тонкие одинарные линии: ┌ ┐ └ ┘ ─ │ ┬ ┴ ┤ ├ ┼
И пример блока из них:
┌─┬┐
├─┼┤
├─┴┤
└──┘
┌ ─ ┬ ┐
│ ─ ┼ ┤
├ ─ ┴ ┤
└ ─ ─ ┘
Рисование отбивок¶
Звёздочки по центру:
❈ ❈ ❈
Линии по центру:
──────────────────
══════════════════
Брошюра — это маленькая книжка. Если вы распечатаете PDF-файл, то получите просто набор страниц, и даже если распечатать по две страницы на лист, то получится всё равно набор страниц. Однако можно документ напечатать в виде брошюры, когда страницы располагаются на листе так, что вы можете каждый сложить пополам, вложить их друг в друга и прошить/скрепить по линии сгиба. На выходе получится полноценная маленькая книжка.
В линуксе есть очень удобная программа pdfbook, которая конвертирует обычный PDF в брошюру, которую вы можете распечатать как обычный документ на обычном принтере и потом скрепить вместе по линии сгиба. Запускается она просто:
[user@shell]% pdfbook --a4paper input.pdf
На выходе получается файл input-book.pdf, который можно отправлять на печать.
pdfbook входит в состав пакета texlive-extra-utils
(в debian/ubuntu ставится стандартной командой sudo apt install texlive-extra-utils
), также вы можете поставить в макоси через brew, но для этого требуется установленный mactex.
В 2016 я написал статью Человеческим языком о цифровых сертификатах: ASN.1, X.509, PKI, в которой постарался максимально понятно рассказать о цифровых сертификатах с примерами их использования через консоль и openssl. С того времени многое изменилось: openssl версии 1 ушёл в массы, появились и стали активно использоваться его форки (libressl и boringssl), появилась (типа) поддержка гостовских алгоритмов. Плюс я получил неожиданно много обратной связи, чего совершенно не ожидал, и в итоге в 2020 году появился этот полностью переработанный и актуализированный текст.
Но настал 2024 год и уже в массы ушла версия openssl 1.1.1 с новыми крайне полезными фичами, однако я решил новую статью не писать, а постепенно актуализировать эту, плюс немного стилистически причесать.
*Целевая аудитория этой статьи — айтишники, поверхностно знакомые с понятием цифрового сертификата, сопутствующими понятиями и техническими стандартами (X.509, PKI, PKCS). Текст не является пересказом документации или сборником рецептов, воспринимайте его как короткий учебник, рассказывающий о базовых концептах криптографии и сложившейся вокруг стандарта X.509 инфраструктуры.
Чаще всего цифровой сертификат ассоциируется с браузером, веб-сайтом и шифрованием трафика в HTTPS-соединении. И обычно на самом факте существования сертификата у большинства айтишников понимание темы заканчивается. Многие статьи на эту тему с самого начала топят читателя в абстрактных и несущественных деталях (например, раз, два). Между тем, базовые концепции системы сертификатов очень простые и я о них расскажу.
В центре внимания у меня сертификат, так как именно вокруг него крутятся все остальные концепты.
Текст состоит из двух частей: достаточно подробная теоретическая основа (включая несколько базовых понятий из криптографии) и практическая часть с конкретными примерами на openssl. Все новые понятия в тексте вводятся последовательно, а примеры из практической части используют файлы, созданные в предшествующих разделах. Я старался пользоваться официальной русской терминологией, принятой в стандартах и литературе.
В жизненном цикле сертификата участвует несколько организаций или персон, исполняющих различные роли, в течение статьи я буду переключаться между ними, чтобы продемонстрировать аспекты каждой.
Для полноценной работы вам понадобится linux с терминалом и установленным openssl версии 1.0 или выше. С некоторым оговорками подойдёт macos с терминалом (в macos последних версий установлен форк openssl под названием libressl, поэтому желательно установить именно openssl, например, из homebrew).
Аутентификация в информационной системе обычно происходит через логин и пароль. Логин служит для идентификации пользователя, а пароль — для подтверждения логина. Такая схема использовалась годами, однако со временем проблема кражи личности приобрела такие масштабы, что потребовался дополнительный уровень защиты — многофакторная аутентификация (multi-factor authentication, MFA).
Смысл MFA в том, что идентификация пользователя происходит по нескольким независимым каналам (факторам) и когда результат по всем положительный, система успешно завершает процесс аутентификации.
Сделал публичный телеграмный канал для блога: https://t.me/fieryfiles («Горюче-сказочные материалы») и сопутствующий чат для обсуждения https://t.me/fieryfiles_discussions.
В канале будет больше текстов на нетехническую тематику.
В 2017 году я написал статью Смарт-карты и программирование с примерами кода C/C++. Однако для обучения этот язык подходит плохо, поскольку предполагает достаточно низкоуровневое и многословное использование функций и данных, поэтому я решил сначала переписать все примеры на Java, однако в процессе пришлось значительно переосмыслить старый текст, обновить и переработать с учётом накопившегося опыта, ошибок и замечаний.
Статья 2017 «заморожена» и я не планирую её больше обновлять, однако вы можете её читать, если хотите понять, как всё работает на сравнительно низком уровне, где вручную нужно выделять и освобождать ресурсы, инициализировать буферы и так далее.
Это очень большой текст о смарт-картах и о том, как писать клиентский софт на Java для их использования. От вас требуется только знание Java, понимание базовых алгоритмов, структур данных и, собственно, смарткарты с терминалами. Все примеры ориентированы на unix-окружение, в первую очередь это linux и mac os x. Мобильные операционные системы не рассматриваются. Код, вероятно, работает в windows-окружении, однако я это не тестировал. Все примеры полностью независимы друг от друга и не используют никакие сторонние библиотеки или общие файлы.
Язык Java я выбрал по нескольким причинам. Во-первых, он достаточно высокого уровня и вы избавлены от ручного управления памятью. Во-вторых, в Java очень богатая стандартная библиотека. В третьих, Java как платформа работает на разных операционных системах практически одинаково, что очень упрощает процесс обучения. И самое главное, в штатной поставке платформы уже есть поддержка библиотеки для работы со смарт-картами. Я выбрал современную базовую версию SDK — 11 — и все примеры кода написаны с учётом работающих в этой версии фич (типа использования ключевого слова var
для автоматического вывода типов).
❈ ❈ ❈
Для выполнения всех примеров кода вам нужен USB-терминал (ридер) для смарт-карт. В некоторых примерах можно использовать USB крипто-токен (eToken, yubico и т.п.), они используют тот же программный интерфейс.
Ещё в статье очень много новых англоязычных терминов, сокращений, ссылок на международные стандарты и спецификации. Слишком глубоко в детали я вдаваться не стану, но буду ссылаться на внешние документы. Очень желательно как минимум понимать английский, так как все оригинальные стандарты и спецификации написаны на нём.
Для более глубокого понимания вам нужно обязательно иметь под рукой упоминаемые стандарты. К сожалению, стандарты ISO/IEC недоступны для свободного скачивания, однако их при желании можно найти в интернете. Их официальные русские переводы (ГОСТ), однако, свободно доступны и ссылки на них вы найдёте в тексте.
Другие стандарты доступны для свободного скачивания и я тоже дам ссылки на них.
Здесь описывается как конвертировать HDD в виртуалбокс с fixed на dynamic и наоборот. По мотивам вот этой статьи https://www.howtogeek.com/312456/how-to-convert-between-fixed-and-dynamic-disks-in-virtualbox/.
Традиционный дисклеймер: linux, command line only.
Просто так преобразовать файл диска нельзя, его можно склонировать с изменением типа и потом «перецепить» в настройках виртуальной машины. Все операции делаются через программу VBoxManage
. Я пока рассматриваю только диски без снапшотов.
GnuTLS — это программная библиотека для работы с SSL/TLS и сертификатами. Она может примерно то же, что и openssl, но разрабатывается независимо. Аналогично в составе gnutls есть набор консольных программ для работы с сертификатами, протоколами и прочими данными: certtool, gnutls-serv, gnutls-cli и т.д.
В плане работы с файлами сертификатов, ключей и CSR-запросов утилиты gnutls умеют делать практически то же самое, что и бинарник openssl. В этой статье я детально опишу типичные сценарии использования: создание ключей, сертификатов, запросов на сертификат, подписывание сертификатов.
Другие мои статьи на эту тему, но на базе openssl:
Certtool входит в состав gnutls и в debian/ubuntu ставится командой:
$ sudo apt install gnutls-bin
На макоси gnutls ставится через Homebrew:
$ brew install gnutls