🏠: размышления

Хорошо не наступает

Самое большое количество суицидов — 45-47 лет, это тот самый «кризис среднего возраста». Когда мы растём, то нам говорят: если будешь делать так и так, то будет хорошо. И вот человек хорошо учится, старается всё делать правильно, находит плюс-минус интересную работу, поднимается по иерархической лестнице, у него семья, дети.

И вот уже дожил до 40, вроде бы всё делает правильно, но только «хорошо» не наступает и он понимает, что вроде бы уже и не наступит. Он попадает в ситуацию переосмысления и вспоминает, чего на самом деле хотел.

Кто дожил до 50, тому уже более-менее стало полегче, пока не дойдёт где-то до 70. Никто не говорит о суицидах пожилых людей, а их очень много. Люди оказываются в ситуации одиночества, экономических кризисов, болезней. Сложнее всего с изоляцией, потому что людям часто просто не с кем общаться; из-за проблем, например, с суставами лишний раз на улицу не выйти. Никто об этом особенно не задумывается.

Новый 2022-й

Впервые за много лет нарядил ёлку своего детства — это заняло несколько минут, а удовольствия принесло массу.

Середина 80-х 2022 г. 2022 г.

За два часа до нового года пришла печальная новость — умер Иван Пантелеевич Мозговенко, мой шеф по специальности в Гнесинке. Я поступил к нему в класс, когда ему было уже 75, а это был далёкий 1999 год. Шло время, а он всё продолжал работать и казалось, что так будет всегда, но чудес не бывает. Шеф не был теоретиком и методистом, его указания часто были непонятны — знаменитые «два такта на раз» более-менее начинали восприниматься курсу к третьему, и то так, как это я себе воображал, а про реализацию вообще не уверен. Но самое главное — и это хорошо чувствовалось, думаю, всеми — он искренне и подлинно любил своё дело и был ему горячо предан.

Новый год я не отмечаю — ложусь спать как обычно. Не вижу смысла ждать полуночи, непонятно, ради чего это нужно. Дни всё равно идут один за другим, деление на годы искусственно, и ничего с заменой циферки не изменится — весь жизненный негатив никуда не денется. Спать, конечно, особо не дают до 4 утра, но мне нравится встать 1 января утром часов в восемь и наслаждаться тем, что у меня нет алкогольного отравления и камня в желудке от тазика майонезного салата.

Погулял по Коломне пешком.

Вид на Оку с набережной Дмитрия Донского

Спираль времени

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

В интересной, хотя и чрезмерно затянутой книге Алексея Юрчака «Это было навсегда, пока не кончилось» описано, пожалуй, наиболее рациональное поведение обычного человека в такие времена.

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


Инна (1958 года рождения) окончила школу в 1975 году и поступила на исторический факультет Ленинградского университета. В этот момент ее отношение к жизни поменялось. Инна вспоминает:

«Когда я училась в школе, все, естественно, казалось предельно ясным. В восьмом классе я с большим воодушевлением вступила в комсомол. Мне хотелось внести свою лепту в общее дело. Я первой из класса вступила. Но дома, даже тогда, мы уже понемногу слушали Высоцкого и Галича. К девятому или десятому классу [1974–1975 годы] мой энтузиазм начал пропадать. Хотя я, конечно, оставалась законопослушной, потому что я понимала, что так надо. Но после окончания школы я перестала участвовать в этой жизни. Я больше не ходила на комсомольские собрания. Просто знала, что могу этого не делать без особых для себя последствий.»

В университете Инна подружилась с людьми, которые тоже избегали идеологических ритуалов системы:

«Мы никогда не ходили голосовать. Мы просто игнорировали выборы, демонстрации и т. д. Моей единственной связью с советской жизнью была работа [будучи студенткой, Инна подрабатывала в университетской библиотеке] и учеба, хотя в университет я тоже ходила редко — у нас просто не было времени.»

Инна подчеркивает, что ни она, ни ее друзья не ассоциировали такое существование с чем-то «антисоветским». По ее словам, им были одинаково безразличны как поддержка советского режима, так и сопротивление ему. Она рассказывает:

«Никто из моих друзей не был антисоветчиком… Мы просто не говорили друг с другом о работе, или учебе, или политике. Вообще не говорили. Что вполне понятно, если учесть, что мы не смотрели телевизор, не слушали радио и не читали газет примерно до 1986 года [до начала перестройки].»

В диссидентский политический дискурс этот круг тоже не особенно вникал, хотя литературу неполитического самиздата почитывал. Инна объясняет: «Мы никогда не разговаривали о диссидентах. Всем и так все было ясно, зачем об этом говорить? Это было не интересно».

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

«Как мы к ним относились? В общем-то, никак. Мы были другими. Мы были тут, а они были там… Мы это особенно не обсуждали, но всем нам казалось, что нет особого отличия между человеком, который выступает за систему или против нее. Просто знаки меняются. И те, и другие были советскими людьми. А я советским человеком себя никогда не считала. Мы от них отличались органически. Это правда. Мы просто были вне.»

Характерен язык, которым Инна описывает свою позицию. Употребляя местоимение «они» и фразу «советские люди», она включает в них не только партийных и государственных чиновников или людей, поддерживающих партию, но и ее противников. С этой позиции дискурс диссидентов и авторитетный дискурс партии рассматриваются как часть одного дискурсивного режима, несмотря на то, что первый противостоит второму. […]

Следует подчеркнуть, что Инна и ее круг были в курсе оппозиционного дискурса и не игнорировали его вовсе. Они читали самиздатовскую литературу, включая «Архипелаг Гулаг» Солженицына, однако это чтение было особенным. Оно помогало им выработать понятие «советскости» (включавшее как авторитетный дискурс партии, так и контрдискурс диссидентов), для того, чтобы дистанцироваться от этого понятия. Инна говорит: «Мы не считали Солженицына своим. Это было важно… Мы не были противниками системы, как он». По ее словам, оппозиционная литература была важна как позиция, в сравнении с которой можно было определить свою место: «Было важно понять, где мы на самом деле находимся — не относительно власти, а вообще». Инна относилась к Солженицыну с уважением, но его призывы занять активную моральную позицию по отношению к советской системе казались ей неактуальными. […]

Смысл существования вне системы — одновременно внутри и за пределами — можно проиллюстрировать фразой «вне поля зрения». В ней подразумевается, что какой-то предмет находится здесь, мы знаем о его присутствии, но он скрыт от нашего взгляда (другими объектами, своей миниатюрностью или сфокусированностью нашего внимания на другом). Субъектное состояние вне системы тоже подразумевает выпадание из поля зрения системы или, точнее, ее «режима видимости» (или «режима видимого»). Такой субъект, продолжая существовать внутри системы, может не следовать ее символическим, легальным, языковым или другим параметрам (действовать непонятным для окружающих образом, говорить на непонятном им языке, не вникать в смысл фактов окружающей реальности, интерпретировать происходящее ему одному понятным образом и так далее).

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

Путь к улучшению путём осмысления целого или автонастройка прокси-сервера на клиентских машинах

Хорошо спроектированная система обладает следующими признаками:

  • Обладает максимальным охватом всех возможных применений в рамках её предназначения
  • Управляется централизованно и имеет автоматические проверки и процедуры для минимизации влияния т. н. человеческого фактора
  • Имеет лаконичное и хорошо читаемое описание
  • Не требует большого количества исключений и их ручной настройки
  • Рационально использует ресурсы

Может быть, что-то ещё, но направление мысли, думаю, понятно. Применительно, предположим, к настройке подключения к интернету пользователей в организации — если централизованно вроде бы что-то и настроено, но при этом постоянно нужно что-то делать на пользовательских машинах, прописывать маршруты, ставить-снимать галки в свойствах браузера, делать резервирования в DHCP, разрешать прямой выход в интернет в обход прокси-сервера, просить сетевиков написать на шлюзе очередное правило для одной машины, при этом все эти 100500 изменений нигде не записаны и делаются бессистемно от случая к случаю; если в организации существуют дополнительные шлюзы, где всё открыто, потому что «надо работать и некогда разбираться» — это всё наводит на мысли, что система спроектирована как-то неправильно.

К сожалению, мало кто занимается осмыслением какой-либо системы в целом, особенно той, которая уже давно работает — люди адаптивны и привыкают практически ко всему, им лень что-то менять, да и опасно (тут прилагается большой список офисной мудрости, предписывающей сидеть тихо, максимально не брать на себя никакой ответственности и не выказывать инициатив, чтобы иметь долговременный и стабильный кусок хлеба). Как-то работает — и ладно, сейчас ещё одну проволочку прикрутим, а сбоку пластилинчика ещё налепим, и хорошо. Тем более, что всегда так настраивали и работали, в чём проблема-то?

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

Сопротивление изменениям, и особенно автоматизации, связано также и с тем, что люди очень боятся стать ненужными. Условно говоря, раньше руками сто компьютеров за день настраивали с пупочным надрывом, а теперь это делается автоматически в тысячу раз быстрее и точнее, а мы теперь становимся не нужны и нас уволят, так зачем эта автоматизация? Пусть руками, зато будет что написать в список выполненных работ, и получить премию за ударный труд.

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

Выяснилось, что за автонастройку клиентов отвечает файл wpad.dat следующего содержания:

function FindProxyForURL(url, host)
{
    $NewProxy = "PROXY proxy.domain.ru:3128";

    if (isPlainHostName(host)) {return "DIRECT";}   
    if (isInNet(host, "10.1.0.0", "255.255.0.0")) {return "DIRECT";}
    if (dnsDomainIs(host,"localhost")) {return "DIRECT";}
    if (dnsDomainIs(host,"127.0.0.1")) {return "DIRECT";}

    if (dnsDomainIs(host,"domain.ru")) {return "DIRECT";}
    if (dnsDomainIs(host,"support.domain.ru")) {return "DIRECT";}
    if (dnsDomainIs(host,"test-sps.domain.ru")) {return "DIRECT";}
    if (dnsDomainIs(host,"portal.domain.ru")) {return "DIRECT";}
    if (dnsDomainIs(host,"portal.domain.ru")) {return "DIRECT";}

    if (shExpMatch(url, "http:*")
    ||  shExpMatch(url, "https:*")
    ||  shExpMatch(url, "ftp:*")
    ||  shExpMatch(url, "gopher:*"))
    return $NewProxy;

    return $NewProxy;
     }

Не принимая в расчёт общую неструктурированность файла, дубль записи и явную копипасту раздела с url (кто вообще сегодня знает про gopher?), возникает вопрос — а почему просто не пустить напрямую весь локальный .domain.ru? «А потому что есть ресурсы в domain.ru, опубликованные на внешних IP-адресах», — ответили мне. Дело в том, что и внешний, и внутренний домен названы одинаково. Что же делать? Полез в интернет и через некоторое время обнаружил отличное описание файла конфигурации с примером, как раз подходящим в моей ситуации:

function FindProxyForURL(url, host) {
  if (
    (isPlainHostName(host) || dnsDomainIs(host, ".mozilla.org")) &&
    !localHostOrDomainIs(host, "www.mozilla.org") &&
    !localHostOrDoaminIs(host, "merchant.mozilla.org")
  ) {
    return "DIRECT";
  } else {
    return "PROXY w3proxy.mozilla.org:8080; DIRECT";
  }
}

Красивая логика — на одну ступенечку сложнее, и уже такая мощь! Пускаем напрямую имена без указания домена или весь домен, но не конкретные имена в этом же домене. Больше того, можно указывать цепочку прокси-серверов — в данном примере, если не будет доступен w3proxy.mozilla.org, то идти напрямую.

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

# Records in domain.ru zone
$domainRecs = Get-DnsServerResourceRecord -ZoneName "domain.ru" -computerName "srv-dc3" |select hostname,recordtype,@{n='IPAddr';e={$_.RecordData.ipv4address.IPAddressToString}},@{n='Alias';e={$_.RecordData.hostnamealias -replace "\.domain\.ru\."}}
# External A records
$domainARecsExt = $domainRecs |? {$_.IPAddr -match "^186" -and $_.recordtype -eq "A"}
# CNAMEs which correspond external A records
$domainCnameRecsExt = foreach ($aRec in $domainARecsExt.hostname) {
$domainRecs |? {$_.recordtype -eq "CNAME" -and $_.alias -eq "$aRec"}
}
# all external names list
$domainAllExtRecs = ($domainARecsExt + $domainCnameRecsExt).hostname -replace "$",".domain.ru" |sort

# PAC file
$pac1 = "function FindProxyForURL(url, host) {
  if (
    (isPlainHostName(host) ||
    dnsDomainIs(host, `".domain.ru`") ||
    isInNet(host, `"10.0.0.0`", `"255.0.0.0`") ||    
    isInNet(host, `"127.0.0.0`", `"255.0.0.0`") ||
    localHostOrDomainIs(host, `"localhost`")) `&`&
"

# form the list for PAC
$total = $domainAllExtRecs.count
$C = 1

$pac2 = $domainAllExtRecs |% {
    if ($c -lt $total) {
    "    !localHostOrDomainIs(host, `"$_`") `&`&"
    }
    else {
    "    !localHostOrDomainIs(host, `"$_`")"
    }
$c++
}

$pac3 = "
  ) {
    return `"DIRECT`";
  } else {
    return `"PROXY proxy.domain.ru:3128`";
  }
}
"
# Combine all pieces and dump
$pac1 + ($pac2 -join "`n") + $pac3 |Out-File ~\Documents\proxy.pac -Encoding default

По желанию можно прикрутить сверку и оповещение на почту, если что-то убрали или добавили в DNS (в примере адреса начинаются на 186). Вот итоговый файл:

function FindProxyForURL(url, host) {
  if (
    (isPlainHostName(host) ||
    dnsDomainIs(host, ".domain.ru") ||
    isInNet(host, "10.0.0.0", "255.0.0.0") ||
    isInNet(host, "127.0.0.0", "255.0.0.0") ||
    localHostOrDomainIs(host, "localhost")) &&
    !localHostOrDomainIs(host, "8mar.domain.ru") &&
    !localHostOrDomainIs(host, "wolf.domain.ru") &&
    !localHostOrDomainIs(host, "wolf1.domain.ru") &&
    !localHostOrDomainIs(host, "wolf3.domain.ru") &&
    !localHostOrDomainIs(host, "wolfapi.domain.ru") &&
    !localHostOrDomainIs(host, "docs.domain.ru") &&
    !localHostOrDomainIs(host, "old.domain.ru") &&
    !localHostOrDomainIs(host, "xonix.domain.ru") &&
    !localHostOrDomainIs(host, "services.domain.ru") &&
    !localHostOrDomainIs(host, "test.xonix.domain.ru") &&
    !localHostOrDomainIs(host, "test.services.domain.ru") &&
    !localHostOrDomainIs(host, "web.domain.ru") &&
    !localHostOrDomainIs(host, "www.8mar.domain.ru") &&
    !localHostOrDomainIs(host, "www.docs.domain.ru") &&
    !localHostOrDomainIs(host, "www.domain.ru") &&
    !localHostOrDomainIs(host, "www.xonix.domain.ru") &&
    !localHostOrDomainIs(host, "www.services.domain.ru")
  ) {
    return "DIRECT";
  } else {
    return "PROXY proxy.domain.ru:3128";
  }
}

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

А теперь уже можно заняться другими интересными вещами — отрезать назойливую телеметрию, засоряющую access.log, настраивать кэширование для того, чтобы каждый компьютер не лез в интернет за обновлением Google Chrome, а получал его с прокси-сервера, и так далее.

Что сделал на этой неделе - 2

Пока есть что-то новое и интересное помимо рутины, продолжаю.

Доделал систему прав на каталоги

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

Отчёт по почтовым ящикам — размеры и квоты

Оказалось, что со старых времён у многих ящиков стояли индивидуальные квоты всего в 100 и 200 МБ (запрет отправки), причём, это не имело значения, так как у ящиков стояло наследование от базы данных, а там-то всё выставлено нормально. Чтобы не путаться, убрал эти ничего не значащие квоты, сделал еженедельный отчёт.

Отчёт по антивирусу и антиспаму для пограничного почтового сервера

Примерно месяц назад я обновил Exchange Edge 2010 на самую новую версию, также там стоял Kaspersky for Exchange 9.0 MR2, причём Каспер умеет слать статистику почему-то только через протокол EWS, который в организации отключён. На днях я вычитал в справке по Касперу, что у него есть модуль для Powershell, который умеет выводить статистические данные в консоли, и, естественно, я сразу решил сделать отчёт именно через этот механизм. Оказалось, что в имеющейся версии MR2 команды, указанные в справке, не работают, но на сайте есть новая версия MR5, которую я вечерком из дома и установил, после чего всё пошло как по маслу — теперь имеется еженедельный отчёт по антивирусу и антиспаму на пограничном сервере. Заодно сделал в том же скрипте отдельное письмо, которое указывает на близкий срок окончания лицензии, т. к. одна из команд показывает статус самого сервера.

Статистика количества отправленных и полученных извне писем

В каждой конторе свои особенности, в данном случае иногда бывают запросы от начальства на количество писем от тех или иных сотрудников. Это бывает редко, но чтобы не возвращаться к этой теме в срочном режиме в будущем, сделал и этот отчёт — выполняется по первым числам за предыдущий месяц. Попутно пришлось придумать, как собирать местные адреса — ведь сервер Exchange Edge не в домене и ничего про внутренних пользователей не знает. В результате список адресов я брал из тех же трекинг-логов, сортируя их по наличию местного домена и уникальности. Заодно прокачал работу с датами — как получить 0:00:00 первого числа предыдущего месяца и 23:59:59 последнего дня предыдущего месяца, а в отчёте по антивирусу — то же самое, только с прошлой неделей.

Также, в связи с тем, что я закончил настройку системы управления проектами Redmine и она вошла в более-менее полноценный рабочий режим, теперь нужно записывать туда свою деятельность. Это ещё куда ни шло, но указывать также нужно и трудозатраты в часах, что, честно говоря, идея весьма сомнительная — как считать всю ту работу, которая сопутствует решению той или иной задачи? Практически всегда нужно много чего прочесть и изучить, прежде чем приниматься за непосредственное выполнение, так как систем много и все они разные.

Иногда мысли о решении приходят по дороге домой в вагоне метро, потому что я не могу выключить голову после выхода с работы, а продолжаю размышлять над задачей (может быть, у кого-то обнуляется буфер после пересечения входных ворот, но у меня нет). А порой приходишь домой и лезешь через VPN на работу, чтобы сразу проверить догадку, не упустить мысль. Это тоже включать в трудозатраты? Но тогда в день трудозатрат будет больше, чем рабочих часов. В общем, судя по всему, придётся писать что-то от фонаря, тем более, что я не сижу с таймером и не засекаю, сколько я потратил на задачу, и часто задач решаешь сразу несколько.

К тому же, само протоколирование своей деятельности занимает время, сегодня, например, я потратил около часа, так что же — вносить в трудозатраты «протоколирование трудозатрат»? Лучше уж заняться документированием в wiki, на мой вкус. Ладно, посмотрим.