Архивы автора: vlad

keychron k8 pro

Обнаружил шоурум keychron в 5 минутах от своего дома. Божественные клавы с bluetooth и hotswap свитчами. На фото процесс замены дефолтных gateron pro brown на durock silent t1 shrimp 67g.

Про современный линукс

Многие годы я восхищался экосистемой linux и opensource. Я видел насколько сложные задачи и интеграционные проблемы решают энтузиасты. Там же миллионы проблем:
— ядро
— bootloader
— драйвера
— тонна мелких утилит
— desktop environment

Читать далее

Про локали C

В наше тяжелое время иногда хочется посмеяться на кем-нибудь другим. Автор mpv аргументированно бомбит на идиотский стандарт локалей: https://github.com/mpv-player/mpv/commit/1e70e82baa9193f6f027338b0fab0f5078971fbe

Очередной сервер

Несколько недель назад, без объявления войны, меня атаковал роскомпозор. Без моего стандартного vpn перестали открываться все сайты *.vtyulb.ru
Сначала сломался акадо, потом получил еще несколько внешних репортов, статистика 50/50. Пытался нагуглить себя в черных списках, не смог.

Спустя пару дней всплыли статьи с хабра:
https://habr.com/ru/news/t/594087/
https://habr.com/ru/news/t/594399/

Как известно, с террористами не договариваются, поэтому теперь у меня новый сервер. Tor relay (exit запрещен) развернут так, чтобы не задевать всех остальных.

Сначала прикрылся cloudflare. По политическим же мотивам, это было временным решением. Не нравится идея, что у кого-то есть полностью расшифрованный трафик. Целая точка отказа на самом деле, у меня же облако тоже здесь поднято.

Давно хотел себе новый сервер, помощнее, и с большим количеством ip-адресов, так что переезд надолго не задержался.

decent uptime

Читать далее

Russian AI Cup 2020: CodeCraft

В этом году узнал о соревновании меньше, чем за неделю до начала. Документация была сложной, графика и плеер боев — страшные и непонятные, но меня купило малое количество участников. У меня было всего несколько дней на написание стратегии, но при 600 участниках это было не важно. Традиционно, основал свою архитектуру на максимальном количестве костылей. Забрал 224 место в первом раунде. После него нашел десятки ключевых багов, но толку исправлять их не было, потому что появилась куча народа, которые не успели написать стратегию к первому раунду. В общем, футболку выиграл, цель выполнил.

Очень обидно, что mail.ru решили не поддерживать старые соревнования. Было бы прикольно сохранить бои / таблицу результатов. А так от воспоминаний осталась только старая запись в блоге: https://blog.vtyulb.ru/?p=1113
Я вот в своей олимпиаде слежу, чтобы все контесты за все время были рабочими: https://ejudge.vtyulb.ru/ejudge/

CTF от безопасников

К сожалению, у меня полностью отсутствует опыт решения CTF-контестов. Олимпиадного программирования — сколько угодно, а вот взламывать сайты мне было научиться негде. Первый раз поучаствовал во внутреннем соревновании яндекса, и решил только первую тестовую задачу. Сейчас уже почти все решения опубликованы, и тут я узнал, что в одной задаче, которую я не прочитал, нужно было взломать cryptsetup зашифрованный диск, имея на руках полный дамп памяти. Это было обидно, такое я мог бы сделать без проблем. Решил развлечься, и проверить на практике.

Спустя 3 инсталляции kali linux и несколько нерабочих (как обычно) инструкций, собрал что-то свое. Забавно, что на моем основном ноуте используется практически тот же режим шифрования, что и в дистрибутиве от безопасников. У меня xts-plain64/256, а у них xts-plain64/512. Интересно насколько реально провернуть такую атаку против ноутбука. Теоретически, наверное можно его охладить жидким азотом и переставить с него планку памяти, но вот смог ли кто-то такое в реальности сделать? Ну и еще интересно можно ли это сделать, если память просто распаяна будет.

Читать далее

thread-safe lock-free shared_ptr — приключение на полгода

Есть такой смешной вопрос «Is shared_ptr thread-safe?». Обычно либо человек сразу понимает о чем речь, либо ответа понять сходу невозможно.

Проблема достаточно простая — shared_ptr нельзя модифицировать и читать из нескольких потоков одновременно. Контрольный блок дает thread-safe гарантии, тогда как сам shared_ptr — нет. Копирование shared_ptr состоит из трех операций:
— Скопировать указатель на объект
— Скопировать указатель на контрольный блок
— В контрольном блоке атомарно поднять refcount

Если во время чтения shared_ptr какие-то из этих полей будут обновлены, то мы можем поднять refcount не у того объекта, либо попытаться получить доступ к уничтоженному контрольному блоку. То что нельзя уничтожать объект shared_ptr во время его копирования достаточно очевидно, но то что его нельзя обновлять (за исключением манипуляций на refcount) — уже не так очевидно.

Читать далее

Баги в продакшене

Bitflip — наша реальность, а также про уже софтовые баги от мира С++. Очень крутой доклад, чужие баги всегда показывают что, где, когда и как было неправильно спроектировано. Это несет максимальное количество ценной информации.

Читать далее