Борьба со спамом в 2020 (rpamd, SpamAssassin и нейросети)

Уже 15 лет (ужас какой!) использую для фильтрации спама SpamAssassin, и что-то стали возникать к нему притензии. С одной стороны, кажется, спама в интернете стало сильно меньше, чем в конце нулевых. По моим ощущениям, мне стало в месяц приходить ~300 писем вместо нескольких тысяч. (Возможно дело в том, что крупные почтовые сервисы его довольно успешно фильтруют, благодаря своим ресурсам, и “обычные пользователи” стали сильно менее доступны для спамеров.) С другой же стороны, стал замечать, что SA успешно отфильтровывает примерно половину спама (с достаточно консервативными настройками без false-positive). С третьей стороны не байесом же единым, за последние десять лет и нейросети выросли и какой-нибудь SVM кажется кто-то должен уже был внедрить (по крайней мере Саша Петров мне еще в своей дипломной работе его прикручивал и вроде как неплохие результаты получал, хотя до продакшн решения не доделал).

В общем решил я посмотреть на то, что у нас нового появилось в этой области: количество инструментов увеличилось, но всё это просто классификаторы (практически все на наивном байесе, хотя некоторые, вроде как заявляется, и более точные, чем тот, что внутри SpamAssassin), в отличие от SA, который еще с кучей эвристик, нацеленных именно на анализ почты (корректность заголовков, работа с RBL, скоринг для хостов, сетей и автономных систем, участвовавших в передаче письма, DMARC, DKIM, SPF и прочее).

Но на фоне всего этого болота заметил довольно развитый и живой проект rspamd. По сути примерно такой же комбайн, как SpamAssassin, только вместо перла C и lua, ну и комьюнити сильно меньше. Зато встроенный milter, вроде как более “правильный” байес, встроенная реализация dkim (можно выкинуть opendkim), встроенный грейлистинг (он вообще сейчас от спама помогает?) и даже есть экспериментальный нейросетевой классификатор.

В общем показалось, что штука довольно интересная, чтобы ее попробовать – поставил и показалось, что работает оно гораздо лучше, чем SpamAssassin.

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

Ну раз так, то устроем side-by-side сравнение на живом трафике!

Дано:

  • Свежая чистая инсталляция почтового сервера: postfix + dovecot.
  • На postfix полностью отключены все аутлупы по rbl и фильтрации HELO, которые я использовал раньше.
  • rspamd 1.9.4 с чистой базой и дефолтными настройками. (add_header = 7)
  • SpamAssassin (через spamass-milter) с +/- дефолтными настройками (включил по максимуму разные модули, в том числе pyzor, razor и txrep) и тоже чистой базой. (required_score 7.0)
  • Немножко скриптов, которые отправляют на дообучение (в оба сервика) те письма, которые были классифицированы неправильно (в тот момент, когда я перекладываю письмо в папку Junk или обратно).
  • Почтовый поток порядка нескольких тысяч писем в месяц, из которых две-три сотни – это спам.
  • Система “Спамографопостроитель 1.0”, которая рисует в реальном времени гистограммы оценок по всем полученным письмам.

Немного подробнее по гистограммам: они обновляются в реальном времени и рисуются в четырёх вариантах: общие оценки для rspamd и SA, оценки байесовского фильтра для rspamd и SA. Вертикальной чертой на каждом графике отображена граница спам/не спам, так что слева от нее мы видим не спам и фолс-негатив, а справа спам и фолс-позитив. Пока оценок мало + фильтры не натренированы графики должны быть довольно шумными, но, хочется надеяться, дальше ситуация исправится. Опять же по этим графикам можно будет прикинуть, насколько корректно выбрана граница для классификации.

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

А пока: давайте наблюдать!

PS. Дорогие спамеры, не могли бы насыпать мне побольше образцов спама на spam@gerasiov.net. Пожалуйста!

Выписка из интернет-банка Авангард, Тинькофф, Сбербанк и др. в формате OFX

Нашел у себя в блоге старый, неопубликованный черновик. Публикую.

В случае, если вы пользуетесь каким-то из инструментов домашней (и не очень) бухгалтерии, одним из животрепещущих вопросов встаёт импорт данных из различных систем интернет-банкинга.

В принципе, многие банки умеют экпортировать выписки в формате CSV или XLS и их (иногда немного помучавшись) можно скормить в тот же GnuCash. Но самый простой способ – это сгенерировать из банковского отчета файл OFX (универсальный открытый формат для банковских выписок) и его уже импортировать в бухгалтерское ПО.
Для этой задачи существует универсальная платформа ofxstatement, позволяющая генерировать такие выписки и куча плагинов, умеющих парсить выписки различных банков.

Список банков/плагинов есть на странице самого ofxstatement в README. Можно установить необходимый плагин руками. В частности репозиторий ofxstatement-russian содержит плагины для Авангарда, ТинькоффБанк, АльфаБанк, Сбербанк. Ну или можно поставить в Debian/Ubuntu пакеты ofxstatement и ofxstatement-plugins (если используете стабильный дистрибутив, то плагины лучше ставить из backports, там они более актуальные).

За выборы

Итак, как и обещал, о выборах. Точнее о “выборах” и почему бойкот, к которому призывает Навальный мне кажется более правильным действием, чем участие в этом … процессе.
Для начала некоторая аксиоматика, от которой я отталкиваюсь в своих своих рассуждениях:
1. На выборах в первом туре победит Путин.
Обсуждать это можно сколько угодно, но ни один из допущенных “кандидатов” кроме него не имеет шансов. Ок, Грудинин вместо Зю – отличный ход. Если бы это произошло год назад и этот год он провел в реальной агитации. А так 10, максимум 15 процентов. Собчак? Ну да, 6 процентов в прошлый раз голосовали за Прохорова + немножко электората Жириновского. Слабо верится, что она преодолеет 5 процентов. Ну может процента 3 возьмет. Явлинский, про которого пишут яблочники (как с дореволюционным стажем, так и новоприобщившиеся дети Каца) – это вообще жуткий нафталин. Во-первых, человек в возрасте с проблемами со здоровьем. Во-вторых, та же самая фигня: никакой работы. Даже про Митрохина что-то слышно, но не про Явлинского. Могли бы Вишневского выдвинуть или там Шлосберга, у них, как мне кажется, на настоящий момент политического капитала чуть ли не больше, а потенциал так точно есть, в отличие от. (Что вы говорите? Шлосберга уже исключили? А нет? Значит показалось, у них там постоянно какая-то внутрипартийная грызня.)
А теперь сверху набрасываем типичные фальсификации в день голосования…
2. Единственный у кого был шанс (уж не знаю как насчет победы, но на второй тур думаю да) это всё-таки Навальный.
Да он неоднозначная личность. Да он националист/вождист/популист/убил_лося/украл_весь_лес, но у него есть отличная узнаваемость, у него есть достаточная харизма и неплохо подвешенный язык. А самое главное – он единственный, кто работал последний год и строил реальную штабную и “партийную” работу, единственный кто постоянно пользовался инфоповодами для того, чтобы заявить о себе и пнуть власть, а когда инфоповодов не было, создавал их сам и весьма удачно.
Опять же учитывая вбросы и админресурс – это бабушка надвое сказала. Но, мне кажется, это реально (опять вспоминаем, что даже Прохоров умудрился набрать 6% в прошлом году).
3. Остальные допущенные кандидаты – статисты.
Скоре это даже следствие из предыдущих двух пунктов, но тем не менее.
Разве что Ксюша мне лично кажется довольно искренней во многих своих поступках, хоть и не удачных порой. Но она в любом случае вольно или невольно играет роль Прохорова.
4. Власти нужна явка.
Плюну в лицо тому, кто посмеет утверждать, что это не так. Я не буду даже про обилие наружки на тему выборов (а что там в телевизоре я просто не знаю), просто перечислю, кто меня за последнее время пригласил на выборы (по большей части адресно по имени-отчеству):

  • Собянин – 5 раз (2 раза в СМС и 3 раза письмом).
  • УИК – 4 раза через почтовый ящик (как, наверное, они это всё сами ненавидят, заполнять от руки эти идиотские пригласительные).
  • Какие-то Воробьевские псевдо-газеты – раза 3.
  • Сбербанк online – каждый раз при входе.
  • Приложение “Стрелка” МосТранАвто – 4 раза с нотификейшенами в андроиде.
  • Приложение “Мой проездной” от ВТБ – 2 раза, тоже с нотификецшенами.
  • Григорий Явлинский (его штаб) – 2 раза по телефону и 1 раз письмом (его правда можно понять, тем более он не только не только голосовать приглашает, но и ищет волонтеров, наблюдателей и т.п.)
  • ЦИК РФ – несчетное число раз рекламой в Фейсбуке, Ютубе, Твиттере, Гугле, Яндексе и т.п. (сколько же бабок на это спустили?)
  • ГосУслуги – было письмо точно и еще на сайте постоянно баннеры лезут.
  • ЦИК снова – вспонил, были же еще СМС, больше 2 штук, скорее всего по номеру из ГосУслуг и e-mail.
  • МосИзбирКом – СМС 1 штука (видимо из-за регистрации на pgu.mos.ru)
  • МЧС – а нет, эти гады просто достали прогнозом погоды.

Ну короче вы в той же подводной лодке и должны видеть и осозновать весь этот ад. Про массовое принуждение к голосованию, которое творится по всей стране и прекрасно видно на Карте Нарушений я даже не буду писать.
5. Власти нужна любая явка (в смысле любых избирателей).
Этот тезис спорный. Именно его пытаются опровергать (в первую очередь сторонники Явлинского). Да, конечно, тут сложно что-то доказать, но с другой стороны, в половине сообщений на КН, которые я немножко мониторю, в письмах и сообщениях встречается “голосовать можете за кого угодно, главное прийти на участок”. Опять же идет не мобилизация “подконтрольных”, вроде клиентов соцобеспечения, а всех поголовно, в том числе студентов (которые весьма стремный с точки зрения политтехнологий контингент, мало ли чего выкинут). Но самое главное, что подтверждает это утверждени – это следующий тезис.
6. Сложнее всего фальсифицировать явку.
Я не один раз был в составе избирательных комиссий в разных статусах. Явка считается очень просто: сидишь себе тихонько и ставишь галочки в бумажке. Фальсификации, вбросы, неправильный подсчет – это всё непонятная суета, там не уследили, тут вбросили, тут бюллетени из одной пачки в другую положили, здесь наблюдателей выгнали с подсчета. А явка – это люди. Если наблюдатель сидит и считает и у него получилось 200 человек, то никак не может быть официальным результатом 600, хоть ты тресни. Ну на 20 человек можно было ошибить, ну на 50, но никак не в 2-3 раза.
Именно поэтому я могу с уверенность говорить, что на президентских выборах в 2011 году на участке где я наблюдал были вбросы. (Какие именно, кто как и когда я узнал/понял много позже. Еще позже я понял, какими действиями я мог бы попытаться что-то изменить, хотя, скорее всего получил бы банальное удаление с участка, как у меня было в статусе ПРГ два раза!) Я знаю, сколько людей реально пришло, я знаю, сколько было написано в протоколе и из этого получаю величину вброса. Так как я знаю, за кого у нас вбрасывают (в том числе потому что видел во время подсчетов пачки вброса, где все голоса были за Путина), то плюс-минус честно будет вычесть эти “голоса” именно у него. И внезапно оказывается, что он получил на моем участке не 56%, а чуть меньше 40. А старичок Зю не 21, а почти 30. И всё играет новыми интересными красками. И это еще не учитывая карусели из работников администрации, которые точно были (о чем мне лично признавались с хохотом эти работники). И при условии, что считали бюллетени честно (но у нас фальсификации были именно на вбросах и приписках, а не на подсчете как таковом, насколько я могу судить).
То есть еще раз:
Посчитать явку легко!
По разнице между реальной явкой и официальной очень легко оценить масштаб вбросов и понять реальную картину на отдельном участке!
Из таких картинок с отдельных участков можно более-менее оценить цифры по региону и понять реальный порядок голосов.
Если вы приходите на участок – разница между реальной и нарисованной явкой уменьшается, картина смазывается. Не приходите – растет. Потому что на многих УИКах официальные цифры по явке будут спущены сверху (опять же исходя из моего опыта) и на них будут тянуть любой ценой (вбросами, приписками, каруселями и т.д.).
Поэтому: приходя на участок и голосуя за кого угодно, вы работаете на явку и на Путина, а вовсе не на абстрактную “демократию”.
А тех, кто чувствует себя не в своей тарелке, оттого, что он не голосует лично, я еще раз призываю: идите в наблюдатели. Это достаточно интересный опыт, это личностный рост, самоуважение и… “папа, что ты делал, когда нашей страной 38 лет правил этот лысый, закомплексованный маразматик с ядерной кнопкой?”
Комментировать можно в FB.

Vugera VG-20S и 64ГБ MicroSD

Очень меня радует видеорегистратор Vugera VG-20S. В первую очередь качеством картинки и своей компактностью. К сожалению, по официальной спецификации, максимальный поддерживаемый объем карты памяти у него 32ГБ. Чего хватает часов на 8 что ли. В общем сильно меньше, чем дневная поездка куда-то далеко.

В интернете информации о реальной ситуации не нашлось, но я попробовал в него вставить карту на 64 ГБ (Lexar MicroSDXC 300x 64GB UHS-I LSDMI64GBBNL300) отформатированную в FAT32 и она вполне себе завелась, регистратор успешно работает. Решил вот сюда про это написать для гугла.

Back to the Windows

“простым смертным” надо просто клик хере и у них 99% функционала работает, а на остальное им пофигу. А нам чуть что так либо виртуалка либо на свободный раздел либо несовместимость форматов либо ещё какая хрень. А годов уже далеко не двадцать и жизни осталось не бесконечность. — Никита Ющенко про виндузовый рай

Началось всё с того, что у меня в ноутбуке стоит SSD Transcend TS256GMTS400. (При чем не от производителя ноутбука, а купленный на амазоне и установленный самостоятельно.) Вроде бы работает нормально, но изредка (иногда раз в неделю, иногда пять раз за день) вдруг подвисает на пять-десять секунд, после чего происходит пачка таймаутов операции чтения на ata, выполняется hard link reset и всё работает дальше как ни в чем не бывало. При чем обычное чтение всего устройства проходит без проблем.
Возможно в фоне ядро вызывало TRIM на устройстве, а эта операция на некоторых SSD приводит (или раньше приводила) к заметным проседаниям производительности (вплоть до вот таких подвисаний). Не знаю деталей, посмотрел я на версию прошивки, глянул в интернете, вроде на скриншотах много где указана версия старше, при чем значительно, так что надо обновлять. Более-менее привычная задача.
Тут-то всё и завертелось…
Вначале я залез на сайт производителя. (Ну если быть совсем честным, я туда залез чуть раньше, когда пытался понять какая версия прошивки сейчас актуальная, и уже тогда начал подозревать…) Производитель явно не отличается дружелюбностью. В разделе Support/Download для данного SSD лежит одна единственная ссылка на нечто, называемое SSD Scope. Какая-то утилита, которая работает под виндой и выводит “состояние здоровья” вашего накопителя. Правда на скриншотах было видно, что один из пунктов в интерфейсе называется “Firmware status/upgrade”. Так что, выходило, что надо качать и ставить этот софт под винду.
Так как это прошивка для SSD, подключаемого по M.2, да еще и того, на котором стоит система, то обойтись виртуалкой с пробросом в нее физического устройства скорее всего не получится (а даже если и получится, то как-то слишком рискованно). Переставить SSD в другой компьютер тоже проблематично: и интерфейс редкий и разбирать X240 крайне много мороки (чертовы китайцы!). Значит нужна живая винда. =(
Надо сказать, что на тот момент у меня на ноутбуке даже были какие-то остатки предустановленной винды. Проблема только в том, что из коробки винда стояла где-то на sda3, при этом sda1 был EFI boot раздел с ейным загрузчиком. Когда я поставил SSD, я первым делом сделал EFI boot раздел на sdb1 (то есть на этом самом SSD), sda переразбил, снеся всё ненужное, а виндовый загрузчик положил на sdb1. И даже заставил эту винду загружаться. Проблема только в том, что потом, в какой-то момент, я переносил данные с другого ноутбука, и, совсем забыв про винду, перезаписал в числе прочего и EFI boot раздел целиком. Так что винда у меня вроде как была, но её загрузчика уже не было.
Ну ок, починять свой загрузчик винда умеет аж со времен Windows NT 4.0, значит надо забутиться с инсталляционного носителя и восстановить, делов-то. Не тут-то было. Во-первых, как выяснилось, у винды до сих пор туго с загрузочными USB. Нельзя просто взять и записать ISO образ на USB, как уже давно делается в приличном обществе. Надо либо запускать встроенный мастер создания инсталляционного носителя (который будет качать все 4 ГБ из Интернета), либо использовать сторонние инструменты вроде rufus (которые берут данные из iso образа, но всё равно копируют файлы весьма медленно). Ну и, понятно, работает это всё только под виндой, благо у меня есть некоторое количество виртуалок, пробросить внутрь которых USB накопитель не представляется сложным.
Попробовал восстановить загрузчик… Два раза… Оба раза было так: загружается инсталлятор, я ему говорю, что хочу починить свою винду, он радостно говорит “у вас поврежден загрузчик, щас починю”, после чего рисует какой-то BSOD и… больше с этого USB диска уже загрузиться не получается, потому что, судя по всему, загрузчик он чинит сам у себя. “Разрешите я выстрелю себе в ногу, сэр!”
Черт с ним. Решил поставить винду с нуля. Фиг. Не нравится ей что-то. Пишет что на данный раздел установить винду невозможно, потому что диск имеет разметку GPT. После некоторого чертыхания, удаление раздела, затирания данных на разделе и т.п. таки удалось уговорить инсталлятор, что ставить можно и нужно и винда-таки поставилась…
Уже во времена приснопамятного Windows NT 4.0 виндовый загрузчик был достаточно умный. Он поддерживал менюшки, chainload других загрузчиков и всё такое. Конечно инсталлятор не мог понять всякие там линуксы, биэсди и прочее, тупо затирал MBR своим stage 1 bootloader, и в меню добавлял только другие найденные инсталляции той же винды. Но то был прошлый век. Сегодня у нас всё технологичнее, есть UEFI, с его стандартизованным процессом выбора загрузчика и т.п. Но фиг там. Винда заставила меня биться в истерике… первый раз…

21 век. Космические корабли, всё такое… Для совместимости и интероперабельности в области загрузки персональных компьютеров изобретен стандарт (U)EFI, со специальным разделом, куда разные ОС могут складывать свои загрузчики, чтобы потом их запускать из начальной микропрограммы EFI.
А долбаный Windows 10 ПРОДОЛЖАЕТ УДАЛЯТЬ ЗАГРУЗЧИКИ других операционных систем. Но так как теперь по стандарту они ему не мешают, он, для надежности, при инсталляции переформатирует все найденные EFI Boot разделы!

Реальность оказалась еще более фееричной. После того, как починил загрузку рабочей системы, я вернулся к исходной задаче, то есть к перепрошивке SSD. Загрузился в винду, поставил SSD Scope, перешел в раздел с информацией о прошивке… “Для вашего устройства есть более новая прошивка, скачать?” – радостно спросила меня программа. “Конечно да”, – ответил я. После чего ничего не произошло. Но в Диспетчере задач (а надо сказать, что диспетчер задач и прогрессбар файловых операций – это две реально отличные новые фишки в восьмой винде) было видно, что что-то оно-таки качает. Через некоторое время вдруг всплыло окошко “Новая прошивка скачана. Открыть?”
На самом деле об этом можно было догадаться раньше. Как можно из винды обновить прошивку накопителя, с которого, возможно, эта винда и загружена? Конечно инженеры Трансценда тоже об этом подумали. И, конечно, решили, что безопаснее будет, если пользователь загрузится с чего-то другого. Например с USB. К сожалению, это не прошивка BIOS и не устройства на какой-нибуть legacy шине, типа PCI, поэтому из DOS этого сделать не получится. Windows PE, конечно, более-менее подойдёт, но весит много, сложна в лицензировании и не все просто с поддержкой аппаратуры. Какую ОС выбрать для такого носителя, чтобы она +/- везде загрузилась и увидела все устройства без всяких там миллионом драйверов? Ну да, вы правильно догадались. SSD Scope просто скачал мне архив, в котором лежал образ специального Линукса, руководство и программка под винду, которая умеет переформатировать флэшку и записать на нее выбранный образ. Так со мной случилась истерика второй раз.
Но и это еще не все. Воспетая Никитой стратегия “клик хере” не сработала, флэшка записывалась, но при загрузке с нее не оказывалось ни иксов, ни программы прошивки. Разбираться не стал, выдрал прошивальщик с файлами из архива, загрузился по сети в GParted Live, запустил прошивальщик и… он сказал, что щас всё с SSD сотрёт полностью. Не знаю, что в такой ситуации делают “простые смертные”, а мне пришлось еще сдампить всё содержимое вначале на диск, а потом после перепрошивки обратно на SSD.
В общем задача решена: SSD, вроде, больше не подвисает, но лулзов и потраченного времени, как по мне, так несколько слишком. Единственное что не могу понять, так это какая из всего этого мораль, видимо придётся додумывать читателям.

i386, amd64, crypto

Есть у меня очень удобный Eee PC 1015B. Маленький, живет 6 часов от батарейки, потерять не жалко… Ну точнее как не жалко, сама железка стоила 10 тысяч несколько лет назад или даже дешевле, а сегодня таких почему-то больше не делают, так что, если потерять, то не понятно будет чем заменить. Это с одной стороны. С другой стороны, там есть некоторое количество информации, приватность которой меня волнует. Понятно, что надо всё шифровать и т.п.
В тот момент, когда я эту железку купил, шифрование всего диска требовало каких-то телодвижений, а мне было то ли некогда, то ли лень, то ли всё сразу, поэтому я ограничился тем, что все, что очень надо, шифровал в юзерспейсе. Некоторое время назад, инсталлируя очередной ноутбук, использовал cryptsetup прямо из инсталлятора и обнаружил, что он вообще ничего не требует и нормально работает. Так что подумал о том, чтобы всё-таки зашифровать содержимое EeePC.
Решил не париться, проинсталлировать его с нуля, заодно перейти с i386 на amd64, который теперь уже совсем-совсем дозрел. Но так как в нетбуке стоит слабенький Brazos, были некоторые опасения, не станет ли он совсем тормозить из-за дополнительного шифрования. Поэтому померил его производительность старым добрым бенчмарком “Собери ядро 3.16”.
Тестируемая система:
ASUS EeePC 1015B
AMD Brazos C-50 (1ГГц, 2 ядра (на самом деле что-то вроде HyperThreading), 64bit)
RAM 4GB
SSD 256GB (какой-то A-Data)
Результаты:
i386 без шифрования

$ time make -j2 modules
real 241m20.022s
user 443m10.388s
sys 21m6.952s

i386 (chroot на amd64 хосте) с шифрованием

$ time make -j2 modules
real 244m18.927s
user 445m4.748s
sys 21m45.132s

Как видно, включение шифрования почти не дало падения производительности на задачах, где надо не очень интенсивно читать/писать много маленьких файлов.
После этого я решил заодно проверить, насколько сейчас оптимизирована компиляция под amd64 и собрал то же ядро с тем же конфигом, но на amd64 хосте. Результат получился не совсем ожиданный (для меня). Под amd64 всё собралось заметно быстрее:
amd64 с шифрованием

$ time make -j2 modules
real 222m59.369s
user 381m12.240s
sys 29m23.844s

Выигрыш – 10%.
График:

Удаление письма из хранилища dovecot

Отправил случайно в список рассылки письмо на много десятков мегабайт и оно разлетелось по всем разработчикам, что не есть хорошо, потому что у всех почта на нашем сервере и сразу полгига места ушло.
Решил удалить его прямо у пользователей из Maildir’ов. Вначале убедился, что ищутся правильные письма:
doveadm search -A FROM git@lvk.cs.msu.su LARGER 10M HEADER X-Git-Newrev 252417435200cca7d6ac33b8be24018100513527
Вроде, всё Ok, пытаюсь удалить:
doveadm -D expunge -A FROM git@lvk.cs.msu.su LARGER 10M HEADER X-Git-Newrev 252417435200cca7d6ac33b8be24018100513527
Получаю:

To avoid accidents, search query must contain MAILBOX in all search branches

Ну, в принципе, логично и правильно, от греха… Но у меня-то случай особый! =) Понятия не имею кто по каким папкам раскладывает коммит-логи, так что надо всё-таки удалять из всех, а не только из явно перечисленных. Пришлось в изысканиях дойти до исходников, где нашел, что можно указать не конкретную папку, а globe:
doveadm -D expunge -A mailbox '*' FROM git@lvk.cs.msu.su LARGER 10M HEADER X-Git-Newrev 252417435200cca7d6ac33b8be24018100513527
Вот так сработало.

The smallest video monitoring daemon ever

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

Лицензирование ПО в современном мире

Рассказывал сегодня про лицензирование ПО (в первую очередь про свободные лицензии).

Исходник тут.
Очень понравилось как работает libreoffice-presenter-console. (Надо ставить отдельно пакетом.) Must Have.