Записи за месяц: August 2015

Конни Виллис, “Книга судного дня” / The Doomsday Book

Прочёл завалявшуюся у меня книжку, которая называется “The Doomsday Book”, её написала тётка по имени Конни Виллис, которую я сначала принял за дядьку по имени Конни Вильямс.

Про то, как историки из Оксфорда отправили экспедицию в средние века за несколько лет до эпидемии чумы. Но что-то пошло не так, и в самом Оксфорде начинается сначала пустячная, а потом всё более серьёзная эпидемия неизвестной болезни. И девушка, попавшая в прошлое, тоже ей заражена. И в то же время, возможно, перепутана точка прилёта и девушка попала в ту самую холодную осень, когда в средневековую Англию на самом деле приходит “чёрная смерть” – болезнь, которая выкосила половину Европы, оставляла пустыми целые города, при которой мёртвых бросали на улицах и сваливали в ямы, а живые копали могилы себе и своим близким.

Сначала повесть немного скучновата, герои чуть комичны и неправдоподобны, но во второй трети она становится жуткой, и дальше уже сложно оторваться. Это книга-катастрофа, как фильм “Титаник”, только про эпидемию. Эта часть в ней написана безупречно, и я так и знал, что книга наверняка награждена критиками, так и оказалось: это одна из немногих книг, получивших сразу Хьюго и Небулу – как, например, “Игра Эндера” и “Дюна”.

А неизвестная мне тётка затем написала продолжение, которое получило Хьюго, а затем ещё одно, которое опять и Хьюго и Небулу, и вообще у неё почти каждая книга собирает полки наград, а я ничего о ней не слышал (У них там с Урсулой ле Гуин всё поделено).

О названии: Domesday book – был такой исторический документ 1086 года, перепись населения и имущества в Англии. Книгой страшного суда её назвали потому, что как записали, так потом брали налоги, и изменить решение было нельзя.

Структура анимешных песен

Большинство анимешных песен устроены по схеме:
куплет-припев, куплет-припев, проигрыш с обломками припева, куплет-припев
Я когда бегаю в качалке, слушаю песни, чтобы не скучно было, и эта схема почти везде. Проигрыш по длине обычно чуть меньше куплета+припева, поэтому первые два куплета это чуть больше половины.

А все анимешные опенинги построены по схеме “активный припев – заглавие сериала – длинный куплет – активный припев – конец”. Можно научиться прыгать через опенинг так, что песня как будто и не прерывалась.

Бэкдор-апдейты

Кстати, поскольку апдейты в винде теперь почти принудительные, а содержание их внезапно перестали документировать, резко возрастает вероятность, что апдейт могут поставить “лично одному человеку”. Например, ФСБКГБ решило за вами последить, направляет запрос в Майкрософт и те вам удалённо ставят следилку.

В России заблокирована Википедия.
UPD: Разблокирована.

Наверное, воду пробуют. Чтобы потом “ну так это уже давно”, “не в первый раз блокируют же”.

Skype export

Сделал простой скрипт skype-export, который экспортирует все контакты скайпа и все логи переговоров с ними в текстовом формате, каждый контакт в свой файл. Так их можно архивировать на случай, если Скайп вдруг начнёт удалять старые логи или слетит при переустановке.

Сделал ещё такую штуку: когда Скайп стоит на нескольких компьютерах, он плохо синхронизирует сообщения, обычно на одном компьютере одни, на другом другие, хотя он и должен это делать. Вместе со skype-export есть skype-merge: выбираете общее место в каком-нибудь дропбоксе, копируете туда базу скайпа с одного из компьютеров, а дальше время от времени делаете в неё skype-merge с каждого, она будет их все собирать. Скайп поверх неё запустить нельзя, но с неё можно сделать skype-export, и так получить все свои переговоры везде.
Может, кому пригодится.

Plastic Memories

(спойлер)Э. ты что делаешь, как тебя там, generic anime male char #n?! “Подпишите вот тут, чтобы утилизировать вашего друга”. “Ну пожалуйста, можно не утилизировать?” “Надо, брат.” “Ну ладно, подписываю”. Ты так и в газовую камеру бы друга-еврея отправил, да?
Такая проблематика вообще. “Мир устроен так, что нужно соглашаться, так любуйтесь же, как герой взрослеет и понимает необходимость соглашаться”. Он больше не ребёнок, который сбежал бы с другом и всё бы кончилось плохо. Всё кончится хорошо!

Mercurial local per-repo .hgignore

What do you do if you need to ignore some local files, but would prefer not to commit that rule to everyone in .hgignore?
(E.g. you've created a folder in the repo for your own needs)

There's a global .hgignore which you can configure from %PROFILE%\hgrc, but using it to list all exceptions from everywhere is ugly.

Turns out you can add per-repository .hgignore overrides this way too! Edit repo's hgrc:
[ui]
ignore = .hg/.hgignore-local

It wouldn't be committed as it's inside .hg, and it would be parsed in addition to repo's normal .hgignore.

28 лет

Да, пока не забыл, мне 28 лет. Я же только что про 27 писал! Так никаких шуток не напасёшься.

Секретно не выключалась!

Один из секретов быстрой загрузки Windows 10 в том, что иногда она и не выключалась! Этот сюрприз можно обнаружить в эвентлоге. Говоришь ей “Выключить компьютер”, винда закрывает программы, завершает пользовательский сеанс и… уходит в глубокий спящий режим, причём полусекретный: не мигает лампочкой на корпусе. Когда в следующий раз включаешь компьютер, она просто просыпается, а чтобы обмануть глупых человеков, показывает обычную заставку.
Поэтому может выйти, что думаешь, что после установки программы уже пять раз перезагружался, а на самом деле ещё ни разу.

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

Component-Based Servicing (CBS)

Пока OneGet собирается стать package manager для винды, в винде уже некоторое время есть работающий менеджер пакетов. Называется он CBS (Component-Based Servicing). Он работает так, как положено нормальному менеджеру: помнит, какой файл кто перезаписал, и может удалить пакет А, если некоторые его файлы перезаписаны пакетом Б. Даже лучше, он хранит все версии файла с помощью WinSxS (Side-by-side assemblies). Он поддерживает обновление всех установленных пакетов через Windows Update (это та самая галочка “Получать обновления для других продуктов Майкрософт”).

Он содержит хоть и не исчерпывающую компонентизацию Windows, но гораздо большую, чем видно в системе на первый взгляд. Более подробной была только компонентизация XP Embedded в билдере. Вершину этого айсберга можно увидеть в “Установке и удалении программ”, “установка компонентов Windows”. Представленный там список – это так называемые Features. В CBS каждый пакет может содержать одну или несколько отключаемых опций, как компоненты установки в MSI. А число пакетов гораздо больше, большинство из них не содержат никаких Features.

Но как обычно, кто-то в Майкрософт сделал полезное дело, а другой приказал всё спрятать и запретить. Большая часть пакетов скрыта, а сам CBS запрятан так глубоко в недра системы, что о нём почти никто не слышал. Прежде, чем им пользоваться, нужно посрывать некоторые предохранители. Считайте это проверкой, как в Гарри Поттере: некоторые заклинания можно использовать только тем волшебникам, которые сумели до них додуматься.

Пакеты перечислены в
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\
Чтобы нормально с ними работать, нужно взять ownership всего раздела Component Based Services с детьми + дать на него с детьми право записи Администраторам.

Большая часть системных пакетов скрыта, у них Visibility=2. Чтобы пакеты были видны в dism.exe, нужно поставить 1.
У любого пакета может быть подключ Owner, где перечислены родительские пакеты. В таком случае самостоятельно его удалить нельзя. Большая часть системных пакетов входит в состав родительских “гранд-пакетов” Windows Home, Windows Pro и Windows Enterprise. Чтобы их можно было удалять, нужно их оттуда исключить и сделать самостоятельными пакетами. Массово это делает утилита install_wim_tweak (видимость она тоже включает):
install_wim_tweak /o

Для управления пакетами есть утилита dism.exe:
dism /Online /Get-Packages
Показывает все установленные пакеты, у которых в параметре Visibility стоит 1.

dism /Online /Get-Features
Показывает все отключаемые компоненты (те, что видно в “Удаление компонентов Windows”). Компоненты группируются по пакетам, но у большинства пакетов компонентов нет, а видимые компоненты на самом деле лежат в паре виртуальных пакетов. В общем, простым взведением флагов компонентизировать остальные пакеты нельзя.

dism /Online /Get-Features /Packagename=[имя]
Можно убедиться, что у большинства пакетов выключаемых компонентов нет, и их можно только удалять.

dism /Online /Remove-Package /Packagename=[имя]
Удаляет пакет из системы навсегда. Чтобы восстановить его, /Add-Package придётся скормить установочный .cab-файл, которого у вас нет, так что думайте. Существует слабый шанс выдрать этот файл из установочного диска винды, но обычно там всё уже в распакованном виде. Скорее всего, для восстановления удалённых пакетов придётся делать repair-install системы.
Обновления по удалённым пакетам приходить не будут.

Почему /Online – потому, что dism может редактировать оффлайн-образы системы в папке. Также dism заодно умеет просматривать установки MSI с помощью /Get-Apps и устанавливать-удалять пакеты Appx (/Get-AppxPackage), чем все пользуются для удаления установленных в винду стильных модных калькуляторов.

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

Как понять, какие пакеты что значат? Это сложно, у большинства пакетов названия неговорящие, а часто и не такие, как у конечного продукта. Пакеты также описаны в:
C:\Windows\servicing\Packages
На каждый там лежит XML-файл с описанием пакета, компонентов и обновлений, иногда есть описание (description), хотя редко. По ряду пакетов есть информация в MSDN, хотя она больше касается unattended installation и того, какие параметры пакета можно настроить. Кроме этого остаётся гуглить, часто название технологии что-нибудь подсказывает.

Также во время обслуживания пакетов подключается ключ HKLM\COMPONENTS из C:\Windows\system32\config\COMPONENTS, который содержит много непонятной информации. Как с его помощью сопоставить файлы (assemblies) пакетам я пока не выяснил.

Логи к CBS ведутся в C:\Windows\Logs\CBS, это волшебное место и при диагностике ошибок Windows Update.

Пакеты, которые можно с удовольствием удалить:

Ненужные фичи:
Microsoft-Windows-OneDrive-Setup-Package – окончательно добивает OneDrive, который дедка бил-бил, не разбил.
Microsoft-Windows-OfflineFiles-Package – кто-нибудь этим пользуется?
Microsoft-Windows-Shell-HomeGroup-Package
Microsoft-Windows-Shell-HomeGroup-Package-printscan
Microsoft-Windows-EnterpriseClientSync-Host-Package – это WorkFolders.
Microsoft-Windows-WorkplaceJoin-Package – ещё одна разновидность “синхронизации папок с работой”. Briefcase, OfflineFiles, WorkFolders, WorkplaceJoin, кто больше?
Microsoft-Windows-PeerDist-Client-PackageBranchCache, если у вас сервера BranchCache-документов нет, то не нужен.

Ненужные свистелки и бренчалки:
Microsoft-Windows-Cortana-Package – но осторожно: возможно, удалится и поиск вообще
Microsoft-OneCore-Networking-XboxLive-Package – некоторые другие пакеты по Xbox, возможно, не стоит удалять – какие-то игры могут на них рассчитывать
Microsoft-OneCore-Networking-XboxLive-WOW64-Package

Ненужные технологии:
Microsoft-Hyper-V-* – Пакетов 30 на эту тему. Если адреналин задул в паруса души, можно поудалять.
Microsoft-Windows-IIS-WebServer-Package – впрочем, отключается и из Features.
Microsoft-Windows-IIS-WebServer-AddOn-Package
Microsoft-Windows-IIS-WebServer-AddOn-2-Package

Майкрософт следит за тобой:
Microsoft-WindowsFeedback-Package
Microsoft-Windows-Prerelease-Client-Package [он же Microsoft-Windows-DiagTrack-Package]

CBS просто замечательны в том, что разбивают Винду на пакеты. Чего же в них недостаёт?
1. Зависимостей между пакетами. Сейчас можно удалить пакет, который нужен другому пакету. В компонентизаторе Windows XP Embedded зависимости были, хотя зачастую пакеты и тянули за собой всё подряд потому, что их зависимости были плохо компонентизированы.
2. Установки из онлайн-репозиториев. Здесь преуспевает OneGet, а CBS умеет устанавливать только cab-файлы.
3. Регистрации нескольких репозиториев. Не все хотят обновляться только через Windows Update, какие-то программы хотели бы выкладывать обновления в собственных репозиториях.
4. Подробной информации о содержимом пакета. Куча пакетов непонятно зачем нужна.

Бонус!

Пока я писал эту заметку, я написал свою собственную утилиту для управления пакетами! Называется CBSEnum:

Она представляет их в виде дерева (хотя вообще в реестре они лежат кучей), позволяет удалять пачками, показывает какую-то справку, какую удалось добыть из Windows\servicing. Также может скрывать/восстанавливать пакеты от DISM.