Новый сервер

Неожиданно для самого себя из-за идиотских блокировок телеграмма всплыла тема выбора провайдера для vpn сервера. Последние 3 года мой vpn находится в Нидерландах у провайдера ramnode — это 500Gb трафика, около 20 мбит практической скорости openvpn tcp.

Пока гулял по lowendbox, lowendtalk опять вспомнил всех провайдеров уже физических серверов, и тут я понял, что у моего провайдера основного сервера — hetzner на аукционе выставлена цена на мой же сервер аж на 5 евро дешевле. 5 евро — это цена какого-нибудь хорошего облачного сервера с возможностью переброса в другую локацию и без ограничения трафика, который у меня регулярно заканчивается. Короче, как я увидел это предложение, так сразу и купил.

Core i7-3770, 2x3TB hdd, 28.76 евро в месяц. Сеть стандартная — белый ipv4, подсеть ipv6, дополнительные адреса по 1 евро / месяц за штуку, при превышении 20TB исходящего трафика скорость режется с гигабита до 10 мегабит.

Переброс данных занял удивительно маленькое время. Я сделал актуальные бекапы всех 8 виртуалок, скопировал их на новый сервер и развернул там через qmrestore. Также пришлось скопировать несколько правил iptables. Также настроил zsh и перенес немножко данных с bsa. Даунтайм основной пачки сайтов составил около 20 минут — время на бекап главной виртуалки, ее передачу и восстановление. Параллельно как раз DNS обновлялся.

Короче, это было очень легко, система из виртуалок показала себя очень хорошо. Шлюзом в интернет служит одна из виртуалок, так что буквально пара правил iptables и перенос виртуалок — и все сервисы работоспособны. Раньше это выливалось в несколько дней и пачку проблем с ejudge / owncloud и т.п.

Это вряд ли конец, так как я уже почувствовал запах халявы — если к концу месяца у hetzner’a еще на пару евро дешевле станет, то я и еще один переезд устрою. На сдачу всегда можно взять какой-нибудь arm сервер от scaleway, vpn на них одно удовольствие настраивать.

uptime старого сервера

Митинг за свободный интернет

А я вчера утром узнал про митинг за свободный интернет. И пошел на него. Вроде бы это был первый митинг, так что было очень интересно. Огромная толпа; рамки с металлоискателями; камазы, перекрывшие дорогу; полиция, стоящая каждые несколько метров.

Блестящая операторская работа

  1. Я очень боялся, что мне снесет крышу. Феномен стандартный, чем больше человек находится в группе, тем более они тупые. Крышу не снесло, голова была ясной, никакие вещи не орал, идиотам не хлопал. Вообще не хлопал, и раскачать мое состояние у выступающих не удалось
  2. Народу было очень много, я думал, что прийдет всего несколько сотен человек. СМИ говорят о семи тысячах, а я на глаз оценивать не умею
  3. В какой-то момент начались нехорошие движения. За лозунги «Мы не знаем что делать с презиндентом, но мы знаем что делать с царем!!!» надо сажать хотя бы на 15 суток. Нехрен тут
  4. В целом народу было 20-30 лет, были большей частью смешные плакаты.
    rm -rf roskomnadzor
  5. Я стоял в нескольких десятках метров от трибуны, и в какой-то момент я услышал, как толпа заорала. Потом какой-то голос начал бесноваться, и я его узнал — это был алексей навальный. На митинг я пришел только тщательно проверив что этого дегенерата там не будет, поэтому я тут же развернулся и пошел на выход. Идти в обратную сторону было тяжело, но народ был культурный — расступался и пропускал. По моим ощущениям таких как я было процентов 10, к сожалению оценить очень сложно. Но синхронные разговоры с моим продвижением назад про то что сюда пришли за интернет, а не за политику я слышал

Отток людей из-за прихода дегенерата

Честно говоря я был очень расстроен когда уходил. Ни с кем не пообщался, пришел не пойми к кому. Конечно мою футболку узнал один человек, но этого явно не достаточно. На самом деле дичь на митинге втиралась и до прихода дебила, просто он уже дискредетирован достаточно, чтобы это был хороший повод свалить.

Лучшее в мире селфи. Толпа где-то в километре от меня, я поздно спохватился

Сегодня утром у меня была прострация 2.0, когда я прочитал описание митинга на континенталисте: от Юлии Витязевой, от Potap1956. Что тут сказать, «Это не придурки, это больные люди» (c) мистер Смит, Шматрица. Я давно перестал смотреть и читать политических блоггеров, потому что я соображаю лучше них и делаю внутреннюю аналитику лучше них. Единственное исключение — Анатолий Шарий, которого я практически не смотрю, потому что мне жалко времени, но которому я всецело доверяю, ибо у него идеальная репутация в моем понимании. Что в указанных статьях, что у них в комментариях происходит полная дичь. Люди не понимают чем плохи блокировки. Люди не понимают, что многомиллиардные убытки корпораций из-за роскомпозора будут оплачены из их кармана. Люди не понимают, что любой парень типа меня может поднять свой телеграм (vps + teamspeak) забесплатно менее чем за час. Я ничего не имею против тех, кто не разбирается. Но имею очень многое против тех, кто не разбирается, но толкает всем свое мнение. Не знаешь ситуацию — сиди и помалкивай. В противном случае ты ничем не отличаешься от главного мудака, который выступал вчера перед толпой.

Информация, во всей ее бесконечности

Я большой поклонник информации. Когда я чувствую, что событий произошло больше, чем я в состоянии осознать и пропустить через себя, я перехожу в странное состояние.

Наиболее хорошо, конечно, это чувствуется на книжках вида «Армагед-дом», серии «Буджолт», всех сериях Алексея Пехова, сериях игр Half-Life, Portal, Doom — все эти произведения повествуют о слишком больших отрезках времени. Мозг не в состоянии додумать пропущенные интервалы и в итоге выпадает в нирвану. Человеческой жизни не хватит на осмысление, ее не хватает даже на обработку собственного временного промежутка.

Конечно, мышление моего поколения слегка повреждено — этот феномен называется «Клиповое мышление». Из-за него также начинает пронимать и простой экшн а ля все книги Лукьяненко, Интерстеллар. Эти произведения показывают очень короткие промежутки времени, которые описываются очень красиво, но не оставляют за собой ощущения безграничности.

Есть и третий тип событий. Это невероятные события. События, которые не могли произойти, но тем не менее произошли. Мистер Манхеттен в фильме Хранители на Марсе оценивает вероятность появления женщины, которая находится перед ним, и даже его нечеловеческий разум понимает, что слишком большое количество событий произошло, чтобы эта женщина существовала. Также весьма характерен здесь невероятностный двигатель из «Автостопом по галактике» или речь пришельца из Люди в черном 3.

Читать далее

О накопившихся багах

Мне тут оказалось нужно как-то объяснить железячникам как кодировать и декодировать сообщения нашего формата. Прикинув сколько у нас Qt-контейнеров начал разбираться что же происходит после исполнения команды вида:
QDataStream() < < QDateTime() << QString() << QVector()

Для этого пришлось залезть в исходники Qt 4.8.6, где мой глаз зацепился за этот ужас:

Всего лишь несколько безобидных формул преобразования дат

Читать далее

Немного о безопасности, приватности и анонимности

Ничто не предвещало беды, я всего лишь зашел на торрент-трекер rarbg.to

Надпись «С вашего ip-адреса поступает слишком много запросов» меня смутила. Такое бывает только когда я захожу на трекер напрямую без vpn. Только вот проблема, без vpn я давно в интернет не выхожу — в России без vpn бродить по сайтам невозможно, слишком много всего заблокировано не по делу.

Короче, мой ручной vpn дал сбой. Как оказалось, ipv6 трафик идет мимо него. Роутер в квартире был настроен провайдером, и этот самый провайдер начал поддерживать ipv6. ArchLinux автоматом подхватил ipv6. Rarbg ответил через ipv6. В один момент у меня оказался вполне себе белый ipv6 адрес (скорее всего какая-нибудь подсеть, доступа к роутеру толком нет). И в этот самый момент часть моего трафика оказалась видна в России. Полная жесть, меня просто трясет от того как можно все пропалить сидя из-под vpn будучи параноиком.

Скрина с rarbg нет, потому что rarbg мне теперь доверяет.

по ipv4 мы заходим из Нидерландов, по ipv6 — из Москвы

Ну а пока что я пытаюсь попеременно сломать ipv6 под арчем и починить openvpn на сервере для полной маршрутизации трафика.

UPD: +1 день
Долго пытался сделать переадресацию ipv6 трафика в туннель, но в итоге забил. Грохнул поддержку ipv6 на уровне системы через sysctl как кому-то это понадобилось.

Овца, Собака и Волк: прохождение 15 лет спустя

Когда-то очень давно у меня был диск с игрушкой «Овца, Собака и Волк». Игра мне сразу не понравилась: пройти дальше стартовой площадки было не возможно из-за кривого перевода и полного отсутствия описания управления я не смог понять как развернуться (нужно было зажать шифт), и что надо посмотреть наверх (нужно было посмотреть наверх, этого не было сказано в обучении), потом была проблем с поиском клавиши Z, которая отвечала за быстрый бег. Абсолютно убийственно, по текущим меркам, выпускать игру, где негде посмотреть управление. Я не помню сколько прошло времени от первого запуска до прохождения первого уровня, наверное около года.

На десятом уровне случилась загвоздка — босса было невозможо пройти. Он просто прыгал на месте, создавая волну, которая убивала овец, а я сам ничего не мог сделать. Я не знаю сколько часов было на него потрачено, но это было много часов. Мои друзья из Черноголовки по воле случая имели эту же игру и застряли на том же уровне. Он был непроходимым.

Читать далее

Критические уязвимости во всех процессорах

Я как-то сразу не осознал насколько все плохо. Уязвимости Meltdown и Spectre оказались намного серьезнее, чем это могло показаться на первый взгляд.

Проблема сидит где-то между математикой и физикой — побочный эффект от конвейерной обработки данных. У процессора можно запросить данные чужого участка оперативной памяти, конечно же, процессор их не даст, но можно попросить на основе этих данных уже свой участок оперативки. Он тоже не будет предоставлен, но будет помещен в кеш. Нормально это описано в этом комментарии.

Объяснение от меня:
Процессор знает телефон Путина. Мы хотим вычислить его поциферно. Мы выкладываем десять листков бумаги на пол, на каждом из них написана цифра — предполагаемая первая цифра. Мы говорим процессору: если 100 поделить на 0 == 666, то пометь, пожалуйста, первую цифру телефона крестиком. Процессор начинает вычислять 100 / 0, а пока он этим занимается, чтобы не терять времени он делает более быструю операцию — узнает телефон, берет его первую цифру и заносит свой виртуальный карандашик над листком. Права доступа при этом не проверяются — это более долго, это можно сделать и потом.

Деление завершается с ошибкой, и поток, задавший неудобный вопрос будет убит. Но можно успеть создать ребенка, он же не будет ответственен за родителя, верно? Ребенок смотрит на десять одинаковых, непомеченных листков, и начинает командовать процессору метить поочередно все листки крестиком. Только к пометке одного из листков процессор будет готов, остальные будут метиться медленнее — их нет в кеше. Таким образом из побочного эффекта в виде скорости доступа мы можем получить информацию о чужом участке оперативки. К чему это приводит известно на примере Heartbleed.

На физическом уровне вместо операции записи (пометить крестиком) используется операция чтения (просто посмотреть на то что написано на листке). На моей машине воспроизводится. Уязвимо тотально все, что осталось целым пока непонятно. Железного фикса не сделать, как выпускать новые поколения процессоров я пока не понял. Софтовый фикс состоит в том, что после каждого прерывания зачищать кеш. Падение производительности при этом катастрофическое (5-30%).

Пока что не понятно можно ли воспроизвести эту дыру через javascript, но скорее всего можно. Так что уязвимы все устройства, где есть браузеры. Особо уязвимы хостеры виртуалок, потому что изоляции между виртуалками больше не существует.

Исходные статьи дублирую здесь: spectre, meltdown.

Пущинская новогодняя олимпиада 2017

Неделю назад провели нашу очередную олимпиаду. На этот раз по новым правилам, но вроде бы получилось неплохо. Самая сильная сюжетная линия из всех, которые у нас были, да и самих задач целых 12 штук. 3 города — Пущино, Дубна и Дмитров. В двух лигах из трех Пущино победило.

Отказывало все подряд, все некритично. Условия пришлось заливать на ftp сервер, что могло быть чревато, если бы мой сайт не был бы в white листе цензоров целиком. Уже после олимпиады починил в nginx’е отправку больших client_body_size. Это не лимит php, это что-то в nginx’e и wordpress’e.

Также после олимпиады я узнал, что одна из участниц написала несколько решений на бейсике, и они не скомпилировались. Еще бы — не настроено же совсем. Хотя наверное на какой-то из установок оно у меня и работало — я ни разу не проверял. С джавой было то же самое, только на ней еще никто не писал. С учетом того что девочка писала онлайн из дома, и у нее в конце каждой программы была пауза, то я ей пересчитал баллы вручную неофициально. Вся цель нашей олимпиады в том чтобы ловить подобных детей и показывать им каким интересным может быть этот мир. Шестой класс, надеюсь она еще вернется с нормальным языком.

Еще я первый раз увидел участника из четвертого класса. Не знал что так бывает, но времени у него, конечно, еще много.

О последних нескольких неделях

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

Я хотел бы сказать, что больше никогда и ни при каких обстоятельствах не свяжусь с грантами от нашего великого и могучего государства, но это не так. Наверное об этом как-нибудь потом напишу и, скорее всего, напрямую на geektimes.

В это воскресенье будем проводить нашу новогоднюю олимпиаду в гимназии. На этот раз будут новые правила, и совсем топовые задачи.

Собираю ЗиЛ-131, по скорости примерно как у академика — с середины августа где-то процесс идет.

Russian AI Cup

Каждый год господа из mail.ru придумывают очередную игру для соревнования стратегий.

Я участвовал в CodeTanks, но с аккаунта, который уже не существует. Место у меня там было в районе 500ого, но всех знакомых я тогда обогнал.

Я участвовал в CodeTroopers, но тогда мне не было 18, и претендовать на призы я не мог. Что, впрочем, не помешало мне получить футболку и забрать места из начала второй сотни.

Я формально участвовал CodeHockey, но так и не научился забивать шайбы в ворота, так что у меня быстро исчез интерес.

Я участвовал в CodeRacing, но моя стратегия была всего лишь заглушкой. Мне тогда было очень весело получать свою футболку на соплях — это было крайне высокое отношение цена/качество. Тем не менее, я до сих пор жалею, что не отправился за первым местом. Моих знаний и навыков хватило за то чтобы потолкаться в финале, генетический алгоритм для поиска оптимальной траектории это вполне по мне. Но тогда катастрофически не хватало времени.

Я не участвовал в CodeWizards, потому что Дота — вселенское зло, и ее отголоски надо презирать и уничтожать. Короче, было неинтересно.

Я не собирался участвовать в CodeWars. Мне было непонятно какую стратегию писать. Но меньше чем за неделю до первого раунда я посмотрел на количество участников — чуть больше 500 — и решил отправиться за халявной футболкой. Простейшая заглушка дошла до ~220ого места, так что я остался вдохновлен. После этого рейтинг начал падать и грохнул кучу времени в Стратегию. Стратегия оказалась на редкость хреновой, допилить ее до конца я не успел, но времени грохнул тьму. В первом раунде вошел в топ-100.

Текущее состояние CodeWars. Несколько минут назад завершился первый раунд

Короче, я отправляюсь за толстовкой. Цель — попасть в топ-50. До встречи через 2 недели.