
Текст «Войны и мира» в UTF-8 занимает около 3,2 МБ. Команда gzip сжимает его до 1,2 МБ — почти втрое. HTML-страница типичного сайта проходит через Brotli и уменьшается в 5–7 раз, прежде чем браузер получит первый байт. Образ Docker, ядро Linux, бэкап базы данных — всё хранится и передаётся в сжатом виде. Сжатие настолько вездесуще, что мы его не замечаем.

Алексей считал себя мастером восстановления данных. Клиенты приносили ему жёсткие диски после пожаров, наводнений, ударов молнии — всего, что могло убить электронику, но не надежду на спасение семейных фотографий, рабочих проектов, последних писем от близких.

В 1999 году группа программистов из компании Cigital обнаружила, что онлайн-покер-рум ASF Software перемешивает колоду генератором псевдослучайных чисел, который инициализируется от системных часов Windows. Начальное значение (seed) — 32-битная метка времени с миллисекундной точностью.

Откройте консоль любого языка — Python, JavaScript, Go, Rust — и введите:

В 1959 году Джон Маккарти работал над языком Lisp в MIT и столкнулся с проблемой, которая преследует программистов по сей день. Программы на Lisp создавали сложные структуры из связанных ячеек — списки, деревья, графы. Некоторые из этих структур переставали быть нужными по ходу вычислений, но определить какие именно и когда — задача, которую Маккарти не хотел перекладывать на человека.

Представьте: вы записали конфигурационный файл. Программа отработала без ошибок. Через секунду отключилось питание. Вы перезагружаете машину и обнаруживаете, что файл пуст. Или, что ещё хуже, содержит смесь старого и нового содержимого, например, половину старого JSON и половину нового.

Большую часть программистской жизни — а это больше тридцати лет — я программировал под Windows. Всякое бывало: COM, MFC, .NET, нативный C++, Delphi. Привык к определённым вещам. Скомпилировал программу — получил .exe. Скопировал на другую машину — работает. Нужна библиотека? Положи рядом .dll или слинкуй статически. Система предсказуема.

Спросите любого программиста, сколько символов в строке "Привет", и он ответит «шесть». Спросите, сколько символов в "👨👩👧👦", и начнётся заминка. Один? Четыре? Семь? Двадцать пять? Все ответы одновременно верны — зависит от того, что считать символом. За этим вопросом скрывается одна из самых запутанных тем в программировании — Unicode. Стандарт, который должен был навести порядок, а вместо этого показал, насколько сложна человеческая письменность.

Я уже пару лет как полностью перенёс свою работу с Windows на macOS. Единственное, что у меня оставалось на Windows — это КриптоПро CSP для подписи документов в системе электронного документооборота (ЭДО). Переключаться между системами неудобно, поэтому перед новым годом я купил в Cryptostore лицензию КриптоПро CSP для macOS и теперь планирую переезд. Времени на это пока не хватает, так что решил начать с обзора: разобраться, что такое КриптоПро CSP, как оно работает на маке и чего ожидать при установке.

Последние дни марта я провёл в ожидании блокировочно-запрещательного апокалипсиса. Не то, чтобы я ждал, что рунет совсем отключат от глобального интернета, но были и такие опасения. Веры в здравомыслие власти не осталось.