Андрей Жаркевич
@azhark
Пишу статьи, готовлю обзоры новостей и аналитические исследования. Специализируюсь на ИТ и ИБ, финансах и инвестициях. Увлекаюсь ЗОЖ и фитнесом.
463 posts

Сжатие данных: от кода Хаффмана до zstd

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

Цифровая реинкарнация

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

Случайные числа не такие случайные, как вы думаете

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

0,1 + 0,2 ≠ 0,3 или почему компьютеры не умеют считать

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

Сборка мусора: кто убирает за разработчиками

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

Файловые системы: fsync и потерянные данные

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

Linux, мы не договаривали: glibc, OpenSSL и «просто скопируй бинарник»

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

Что такое символ и почему Unicode — самая глубокая кроличья нора в программировании

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

КриптоПро CSP на macOS

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

Как успокоиться и продолжать жить

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