телефонное меню в трансаэро

если хотите бла-бла-бла - нажмите 1
если хотите бла-бла-бла - нажмите 5
если хотите бла-бла-бла - нажмите 6
если хотите бла-бла-бла - нажмите 4
если хотите бла-бла-бла - нажмите 3

Удобный UI - но зачем?

Успехи раскинопоклонцев в области UI настолько приучили меня к мысли, что всё новое - это обычно уродливое, нелогичное, неоптимизируемое _нечто_, что на реплику коллеги в отношении другого коллеги "мне не нравится что ты сделал, по-моему этим будет неудобно пользоваться" становится как-то неловко и хочется сказать "ты о чём вообще?"

case-insensitive filesystem strikes back

Если файл инклюдится из директории "бла-бла-Packages-блабла", как "бла-бла-packages-блабла", то что будет в переменной MSBuildThisFileDirectory, packages или Packages? Ответ — иногда то, иногда это

интернет по паспортам

Производители браузеров, которые когда-то пропихнули тотальное использование javascript (вплоть до запрета его отключать), внезапно обнаружили что интернет у нас какой-то несекурный. Решение? Конечно, заставить всех получать сертификаты.

Литература:
https://bugzilla.mozilla.org/show_bug.cgi?id=873709
https://groups.google.com/forum/#!msg/mozilla.dev.platform/xaGffxAM-hs/9JiStoGhHY0J

PS: в качестве ответа на резонный вопрос "а если я не хочу платить за сертификат" предлагается поставить на сервер бекдор для сервиса, который займётся этим вопросом ( https://letsencrypt.org/howitworks/ ):

$ lets-encrypt example.com

That’s all there is to it! https://example.com is immediately live.

The Let’s Encrypt management software will:

* Automatically prove to the Let’s Encrypt CA that you control the website
* Obtain a browser-trusted certificate and set it up on your web server
* Keep track of when your certificate is going to expire, and automatically renew it
* Help you revoke the certificate if that ever becomes necessary.

long file paths in bare Windows

Представьте что вам нужно удалить или создать на голой windows длинный путь. Ставить ничего нельзя. Допустим, это набор скриптов, который должен работать везде (хотя, учитывая всё сказанное, может имеет смысл уже и подложить какой-нибудь бинарничек).

Довольно быстро выясняется что ни одна имеющихся из коробки программ это сделать не позволяет. Значит, надо программировать. Среда программирования в Windows из коробки - это powershell. Засовываем UNC path в System.IO-чего-нибудь и.. получаем сообщение о недопустимых символах. Идём в гугль, читаем: http://blogs.msdn.com/b/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx . Коротко: UNC пути в .NET запрещены. Потому что безопасность.

Надо импортировать нативный win32 API. В гугле есть рецепты. После какого-то количества копипасты всё работает. Кладём результат в long.ps1 и... он не запускается. Потому что безопасность.

В тоске перечитываем что пишет powershell.exe /? и находим что можно оказывается скрипт заbase64кодировать и указать прямо в командной строке. Тогда безопасности угрозы нет и всё выполняется. Окей. Пропускаем его через base64 -, и ничего не работает. Конечно, это же "юникод", то есть надо писать в ucs-2. Пишем, и опять ничего не работает. Начинаем сравнивать вывод [System.Text.Encoding]::Unicode.GetBytes(..) и recode utf-8..ucs-2 и обнаруживаем что порядок байтов разный - в ucs-2 первый старший, а в байтах от MS - второй. Потому что уникод, новый чудный мир, долой возню с байтами. В итоге правильная команда для фильтрации: "recode utf-8..ucs-2/21-Permutation|base64 - ".

Соединяем всё вместе, запускаем:


Результат:

Windows Error Ignoring

Пару недель назад выпросил доступ до конторского WER. Был один непростой случай с пользователем, думал, может найдётся что-нибудь. Наивный.

Во-первых, оно тормозит. От каждого клика до появления результата проходит секунд 15-20, иногда больше. Один раз я видел 5 секунд правда. Но больше такого не повторялось. Читая дальнейшее, надо иметь ввиду.

Навигация построена следующим образом: начинаешь с выбора в группы компании, там, скажем, мажорные версии продуктов. Клик - всякие беты, сервиспаки, x86/x64 варианты и прочие минорные релизы. Клик - репорты относящеся к указанному релизу, в свёрнутом дереве (то есть - одно место куда кликать: плюсик). Клик - дерево разворачивается, видно сгруппированные по бинарнику и точке падения креши. Клик - выбраная группа крешей наконец разворачивается, там есть(см. ниже) общее количество репортов и ссылки на дампы. Везде вебдваноль во все поля, никаких ссылок открывабельных в другом табе, никаких кнопок назад. Хочешь посмотреть другой релиз, другую версию - начинай всё сначала (на самом последнем шаге другие свёрнутые группы крешей видны, их можно развернуть, так что они не совсем изверги).

В самом конце выясняется что... дампов нет. Вкратце - пока один и тот же креш не случится очень много раз (порядка сотен, иногда даже тысячи, конкретно от чего это зависит мне выяснить не удалось) - дампы не собираются.

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

git: autocorrect

help.autocorrect

Automatically correct and execute mistyped commands after waiting for the given number of deciseconds (0.1 sec). If more than one command can be deduced from the entered text, nothing will be executed. If the value of this option is negative, the corrected command will be executed immediately. If the value is 0 - the command will be just shown but not executed. This is the default.


http://git-scm.com/docs/git-config

Illiterate programming #2

Ещё интересного из экосистемы microsoft.

Есть такой пакет для .net, stylecop, для проверки форматирования C# исходников. Кроме условно полезных проверок, типа просьб явно поставить скобки в сложных выражениях, и безполезных, например правила "после закрывающей скобки должен быть перенос", есть и откровенно идиотские. Например, саммари для каждой проперти должна начинаться со слов "Gets or sets ...". Очевидно, что ценность этой воды в точности никакая, и при большом числе пропертей от повторения везде одного и того же безполезного текста начинает рябить в глазах. В особенно клинических случаях требуемая фраза становится достаточно длинной, например "Gets or sets a value indicating whether" или "Initializes a new instance of the {class name} class".

Хуже всего, однако, не это, а то что лень писать эту херню породила класс продуктов "генератор документрующих комментов". Причём их авторы не ограничились на затыкании рта stylecop-у. Они начали... генерить и вовсе всю документацию. Они провели достаточно большую работу по научению своего продукта английскому языку. Теперь метод CreateItem() автоматически сгенерит текст "Creates the item", и так далее.

Это, конечно выглядит очень круто - смотрите, бот пишет документацию. Беда в том что ценность такой "документации" нулевая, ведь она просто повторяет имя метода (свойства, класса и так далее). В то время как от документации нужно чтобы она рассказывала о том что нельзя понять из имени. Это не говоря о том что это часто глючит и генерит ерунду.

К сожалению, многие windows-девелоперы этого не понимают и с радостью набивают исходники автогенерённым мусором, который потом приходится исправлять.

Литература:
http://stylecop.soyuz5.com/SA1642.html
https://www.youtube.com/watch?v=xeZqoCGcHSU (извините за видео, текстовых примеров авторы не приводят. zeitgeist такой вот)

privacy is not dead

История с Рубашкой (tm) наглядно показала что от приватности отказываться рано. Истерика может возникнуть по любому поводу, и большинство людей к истерикам уязвимы. Доктору Тейлору ещё повезло что он работает в социалистической гейропе, и его всего лишь заставили покаяться. В свободной стране за подобное увольняют ( http://techcrunch.com/2013/03/21/a-dongle-joke-that-spiraled-way-out-of-control/ ), причём не разбираясь кто прав и кто виноват - всех, на всякий случай.