MCP
Показаны сообщения с ярлыком microsoft. Показать все сообщения
Показаны сообщения с ярлыком microsoft. Показать все сообщения

вторник, 23 мая 2017 г.

Какой тип VPN лучше

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

PPTP

Классический протокол, работает везде. На всём что шевелится. Очень быстрый (с ним только IPSec может соперничать при определённых условиях). Но есть один недостаток — дырявый. Стандартный MSCHAPv2 позволяет выяснить пароль, если перехватить сессию. Но, судя по всему, проблема только в случае MITM. Т.е., если не считаете, что ваш трафик перехватывают, то жить вроде бы можно. Есть ещё протоколы вида EAP, но с их поддержкой всё достаточно грустно.
Второй недостаток — использование в качестве транспорта протокола GRE (тоже самое что TCP, UDP или ICMP, только GRE). Иногда режется.
В общем, по общему мнению, использовать небезопасно, но быстр

IPSec

Не совсем VPN, а нечто очень клёвое и могучее, которое может шифровать или один порт между двумя компьютерами, или связывать целые подсети безопасным образом. Очень хорошо поддерживается аппартное шифрование, и сам весь шифрованный, может хоть по сертификатам, хоть по PSK ходить, работает в винде на низком уровне, в общем, чудо а не протокол. Есть только пара жирных минусов: первоначальная настройка может быть весьма муторной (с перебиранием галочек, и чтением логов), неосторожное действие может зарубить железяку (будет считать, что трафик к ней должен идти через IPSec, который не настроен), ну и настройка этого через NAT — могучий квест, для настоящих джедаев.
В общем, по жизни рекомендую связывать удалённые компьютеры с фиксированными IP в безопасную псевдо-локальную сеть. Тут он волшебен. Остальное — на любителя.
Ходит через UDP, EH и ESP протоколы, что очень хорошо для транспорта, но мутновато для фаривола. с NAT'ом добавляется UDP 4500, и куча мути.

L2TP/IPSec

Немного дурацкое название связано с тем, что сам туннель нешифрованный, соответственно поднимается туннель поверх IPSec, что приводит по мнению многих к двойной инкапсуляции и приличному оверхеду. Но т.к. IPSec сам по себе хорош, не так уж и плохо. Живьём попробовать не удалось, уж очень большой квест по настройке. Предпочитаю голый IPSec. В общем, как вы понимаете, мне не очень нравится этот туннель, но если вам кто-то его настроили он работает, то будет весьма безопасный туннель.
Ходит через UDP 1701, EH и ESP протоколы, EH не обязателен.

SSTP

Как программисту, мне очень нравится этот туннель. Ибо это тупой SSL-стрим (по умолчанию на 443-ем порту), в который всё заворачивается. Т.е. с криптографией всё нормально TLS1.2, все плюшки. Проверка сертификатов сервера, возможно клиента. Работает дубово и стабильно. Но один маленький нюанс: хорошо работает только на винде начиная с Висты и более или менее на Микротиках. Под линухом кое-как, под андроидом из коробки ничего нет, ну и в целом не очень распространён.
Тем не менее, если есть возможность его использовать со стороны системы — будет работать. 
Утверждается, что протокол закрытый, поэтому могут быть дыры, но снаружи это чистый SSL-стрим (не отличить от обычного обращения к сайту, кроме объёма данных), так что все правила безопасности соответствуют https.
Ещё один недостаток, кроме ограниченной поддержки — TCP канал для тоннеля. В чём проблема? В плохой сети. Ибо TCP-пакеты могут теряться и запрашиваться повторно. Тут получается ситуация TCP over TCP, что при потере пакетов верхнего уровня приводит к куче проблем нижнего. Т.е. два уровня начинают заниматься попытками перепосылки пакетов, что сильно проваливает скорость. Однако, при хорошей сети — всё отлично.

OpenVPN

Последний вариант, о котором я хочу рассказать, но не самый плохой. Это отдельный OpenSource клиент подо всё что шевелится, который позволяет сделать всё что угодно. Хоть примешаться к существующему SSL-трафику на 443-ем порту сервера. В общем, есть всё. Куча алгоритмов, куча вариантов. Минусов только два: нужно ставить отдельно и слегка мутновато настраивать. Если справитесь, то всё будет хорошо, хотя пользователям придётся писать развёрнутую инструкцию.
Ну и по-возможности, следует настроить его на использование UDP, а не TCP, чтобы не было проблем, аналогичных SSTP. По скорости примерно соответствует SSTP.

Скорость

Всё очень depends, зависит от тонкой настройки, аппаратной поддержки и прочего. Но мои тесты показали, что в целом скорость распределяется следующим образом
  • PPTP — самый быстрый. Очень и очень быстрый
  • L2TP/IPsec — чуть медленнее (протоколы серьёзныее)
  • SSTP — сильно медленнее
  • OpenVPN — примерно соответствует SSTP, но чуть медленнее (проверял только TCP вариант, думаю UDP будет гораздо быстрее)

Итоги

На самом деле, выбор весьма сложен. Старые протколы или сложные или дырявые, но поддерживаются везде и максимально быстро. Новые стараются сделать удобнее, но с поддержкой грустнее. Я пока не выбрал, что лучше, но думаю про SSTP, когда всё хорошо и PPTP, когда плохо с качеством и скоростью, но очень надо. При хорошей подготовке, возможно лучшим будет всё-таки IPSec, ну а хитрый OpenVPN можно настроить как нравится.

среда, 8 марта 2017 г.

Visual Studio 2017 и очередная упоротость от Microsoft

Данный пост навеян статьёй о выходе VS2017, в которой есть такая шикарнейшая фраза:

We’re now encouraging Visual Studio 2015 users to migrate to MSBuild and csproj from project.json. As I stated above, we will not be supporting any of the new .NET Core tools in Visual Studio 2015. We also won’t be updating the Visual Studio 2015 project.json-based tools.
И вот эта фраза меня убило, хотя новости ходили давно, но тут они всё-таки сделали всё "в самом лучшем виде". И я не могу не высказаться по этому поводу.

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

В результате, часть времени в проекте уходит на миграцию на новую версию, часть на обучение разработчиков как сегодня правильно писать и часть на исправление незамеченных регрессов. В общем, это хорошо так перекликается с одним из моих ранних постов про велосипеды. Я, собственно, до сих пор предпочитаю использовать .NET 4.0: он работает начиная с XP и VS2010, он не мёртвый (апдейты выходят и для него, и свежие .NET улучшают его код, ибо в реальности одно и тоже), да и в новых не так уж и много полезных фич, чтобы переходить на него. Кроме того, никаких проблем с версионированием, которые поехали дальше: 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2 — без гугла различия и не вспомнишь.

Но тут решили делать всё по-новому и перешли на .NET4.6 и .NET Core, всё-таки у Core есть хорошие плюшки в виде нативной компиляции и гарантированной работы под Linux, да и разрабатывается она давно.

Про сам .NET Core писать не буду, ибо мелочь уже написана, на на ещё один пост не набирается, но вот что понравилось безоговорочно, это файлы project.json, которые очень похожи на package.json, но для Core. Собственно, наконец-то у Microsoft получился вменяемый формат проекта, который можно редактировать ручками не в плане хотфиксов, а прямо-таки изменять поведение проекта. Ну и работать с проектом не только в студии, но хоть в саблайме.

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

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

Эээх... как же хорошо было в .NET4.0...

воскресенье, 1 ноября 2015 г.

Про продукты Microsoft

Если кто со мной знаком, то он знает, что я достаточно давно являлся защитником Microsoft, несмотря на все её проделки. Мне могли не нравится определённые продукты, у данной компании ужасный менеджмент, но в целом, некоторые вещи, очень даже крутые.

Например, Visual Studio, одна из лучших IDE, а C#, на мой взгляд — лучший язык программирования (именно в качестве языка), а MSSQL — неплохая база данных, с отличными инструментами. IIS... в принципе, терпимо. Т.е. есть отличный стек для разработки программ, но дальше начинается жесть.

Была придумана придумана клёвая технология LINQ, для работы с базой данных, а потом появился он...  Entity Framework — ужасный и тормозной монстр, который захватил всю работу с базой, и которрый, всё толстеет и толстеет. Я уже запутался в версиях, просто вижу гигабайты места, сожранного им на билд-сервере.

MVC — это был глоток свежего воздуха по сравнению с Web Form'ами, третья версия была вообще отличная, но Microsoft было не остановить, сейчас есть какой-то могучий монстр 5-ой версии, из главных достижений которого — работа с Azure и клёвая интеграция с EF (это я на сайте посмотрел, чтобы выяснить, что же клёвого).

Или взять, например, SignalR, офигеннейшая штука была, я по крайней мере два доклада про него читал. Отличная технология. Но, когда последний раз я его решил взять, я получил 5 сборок с различными компонентами для него, страшного монстра, к которому непонятно с какой стороны было подступиться. На этом, я решил больше не связываться с данной технологией.

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

И весть этот комбайн должен крутиться на очень дорогом Windows Server, или не менее дорогом и ужасном Azure...

Но при всём этом, до недавнего времени, я готов был мириться со всем этим, ведь несмотря на некоторые проблемы, в целом, всё было очень круто! Просто с другой стороны, стоял зоопарк линухов со своими косяками, проблемами, и языками программирования без тредов.

А сейчас... сейчас мир изменился. В вебе стало модно SPA и много логики на клиенте. Появился nodejs, просто работающий искаропки, появился nginx, который позволил замаскировать косяки линуксовых приложений через балансировку, появилось куча дешёвых и крутых Linux-хостингов (привет, DigitalOcean!), появился Docker.

И вся круть Microsoft'а уже стала не такой уж и крутью. Microsoft просто в очередной раз задрал цены, и сказал — жрите что дают, не предложив ничего крутого взамен.

И я уже думаю, а зачем оно мне всё? Есть столько всего вкусного. И это будет работать везде, а не только на Windows. Например, knockProxy я изначально хотел написать на C#, но потом передумал и написал на node.

В общем, Microsoft меня задолбала. Они делают клёвые штуки, но сами же втаптывают их в грязь, хотят кучу денег, лезут во все щели, но при всём этом, не делают удобно, не делают быстро, не делают понятно. И меня всё это бесит до зубовного скрежета. Я понятия не имею, что мне дальше делать.


суббота, 5 сентября 2015 г.

Microsoft EDGE

Смотрю я на данный браузер и поражаюсь, Microsoft в очередной раз сосредоточилась не пойми на чём, вместо того, чтобы сделать удобный браузер. Вся реклама основана на том, какой он быстрый, хотя в реальности ничего особо быстрого нет, обычный средненький по производительности браузер. При этом, в плане использования всё очень плохо, и видны торчащие ноги из IE.

Собственно по пунктам, банальные вещи, которые видны сразу:
  • Если обратиться к сайту на нестандартный порт, браузер не догадается что он предназначен для http и с упорством дебила пойдёт гуглить, что же ему подсунули. Ну детский сад же... UPD: это исправлено, претензия снимается
  • Восстановление сессий, вроде бы старая и must have фича, по-прежнему работает некорректно. А именно, постоянно восстанавливается куча пустых вкладок. Откуда, блин, он их берёт?
  • При запуске, если система тормозит, то при попытке ввести адрес, добрый браузер сотрёт его, и нарисует вместо него свою домашнюю страницу. Блин, я уже собираюсь уйти куда мне надо, не решай за меня!
Все эти пункты тянутся с IE и до сих пор не пофикшены, хотя в любом другом браузере — работают гораздо лучше. Неужели разработчика браузера запрещено смотреть на другие, не дай бог, сделают что-то удобное.

При этом в Edge оторвали всё хорошее из IE — акселераторы, фрагменты, плагины. Интерфейс теперь стал одним из самых габаритных среди других браузеров (а раньше хвалились, что они экономят место), окна браузера теперь все объединены в один значок, а не делятся на отдельные как в IE...

В общем, в очередной раз, Microsoft решила всё переделать, но начала переделку с копипейста и отрывания функционала. Буду с нетерпением ждать очередной реинкарнации браузера и рассказов о том, насколько теперь он быстрее.

вторник, 26 мая 2015 г.

Управление виртуалками для обычных пользователей в Hyper-V 2012 R2

Microsoft иногда очень оригинально относится к безопасности. Перекроет все щели так, что прорваться могут только админы. А потом начинает ныть, что же все сидят под админами. Ну, может быть, потому что кто-то ленится подумать про права?

В своё время, Microsoft выпустила сервер виртуализации Hyper-V, весьма неплохой, хоть и со своими тараканами. И там можно было сделать замечательную вещь: выдать пользователю права на виртуалку, которая крутится на сервере. Т.е. он мог её включать, выключать, дёргать у неё сеть, но при этом, он постоянно к ней подключён, и в тоже время не видит соседей.

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

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

Зато, после всех этих мучений, можно было весьма гранулированно раздавать права через AzMan (я, кстати, первый раз его видел, хотя, судя по всему, существовал в системе давно, с XP. Но мы-то знаем, что Microsoft не ищет лёгких путей и всегда есть по крайней мере три несовместимых технологии).

К сожалению, в 2012 R2, эта магия больше не работает. Всё сломано. Мне понадобилось достаточно длительное время, чтобы понять это, т.к. народ умудряется писать статьи о том, что всё таки работает. Не работает. Проверено. С большим скрежетом, я всё-таки нашёл, что можно с этим сделать. А сделать можно только одно: давать пользователю подключаться, к виртуальной машине. Т.е. включить он её не может, но хотя бы может работать с ней. Для того, чтобы как-то добавить права, судя по всему нужна отдельная прослойка, которая со своими жирными правами будет всё делать, уже сам раздавая права. Данной прослойкой может быть System Center Virtual Machine Manager или что-то своё самописное (можно добавить имперсонацию и рулить юзерами, действия тупо выполнять через PowerShell). Но само подключение можно реализовать чуть проще, хотя и не очень очевидно.

Собственно, для возможности подключения пользователя (не админа) к определённой виртуалке надо сделать следующее):

  1. Выдать права на виртуалку через PowerShell
    Grant-VMConnectAccess -ComputerName host_name -VMName vm_name -UserName user_name
    Есть ещё команды Get-VMConnectAccess для просмотра прав и Revoke-VMConnectAccess для отбирания
  2. В PowerShell выяснить id-нужной нам виртуалки
    Get-VM -ComputerName host_name | select id,name
  3. Установить Remote Desktop Connection Manager (стандартный не катит)
  4. В нём сделать новую группу, в группу добавить сервер, на вкладке Server Settings поставить VM Console Connect, ввести нужный Id и сохранить всё это дело


После этого можно пользоваться прямым подключением к виртуалке (возможно придётся открыть ещё порт 2179).

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



суббота, 24 мая 2014 г.

Деградация размера MFT от времени

Небольшая заметка посвящена тому, что недавно я обнаружил тот факт, что MFT в Windows не умеет уменьшаться.

MFT — это базовый служебный файл файловой системы NTFS, в котором хранится информация обо всех остальных файлах. Всё это весьма неплохо работает, но есть различные грабли. Сегодня расскажу про один косяк, связанный с тем, что MFT может только расти.

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

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

Если вы найдёте способ лучше, буду премного благодарен.

воскресенье, 29 декабря 2013 г.

Про Internet Explorer

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

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

Судя по всему, интерфейс браузера пишет отдельная команда, и делает это из рук вон плохо. Я уже привык к мелочам, что ошибки от браузера не добьёшся. Только дурацкая страница, что ты дурак и сделал что-то не то. Недавний пример: браузер захотел идти по TLS1.2, а сервер (IIS) отдал ему TLS1.1. В результате — дурацкий текст ошибки. Хорошо, что был хром, который открыл страницу и всё объяснил.

Но у интерфейса есть более серьёзные проблемы. Во-первых, IE ещё ни разу не восстановил корректно вкладки. Постоянно меняется порядок и появляются фантомные дефолтные страницы. Эта катавасия тянется с тех пор, как в нём появились вкладки. Подобных проблем нет ни у одного другого браузера.
Во-вторых, модальные окна и невозможность остановить скрипты, если что-то пошло не так (например, зацикленный alert можно убить или с помощью ловкости или убийством из таск менеджера всех процессов IE — а потому что не найти нужный). Но модальность, на то и модальность, чтобы доводить до белого каления. Представьте, у вас есть сайт, который использует NTLM-авторизацию (или клиентские сертификаты). При его открытии вылезает окно с требованием ввести логин и пароль. Если в это время перейти на другую вкладку, и сделать это в очень правильный момент, можно получить ситуацию, когда браузер упорно не реагирует на команды, ибо я должен сделать что-то в модальном окне, которое спрятано в другой вкладке. Всё, приехали. Task Manager, killall iexplore.exe

В-третьих, в IE какая-то очень сложная работа с процессами. Смерть в одной вкладке обычно приводит к рандомной перегрузке ещё нескольких соседних. Зависимости я так и не понял. Ну и повалить весь браузер не смотря на отдельные процессы не очень сложно. Я умудрялся это сделать обычным JavaScript'ом. (К сожалению руки не дошли вычистить из данного скрипта всё лишнее и отдать на растерзание общественности). 

В-чётвёртых, в IE достаточно неплохие инструменты разработки, но оооочень тормозные. DOM-дерево строится иногда секунд по 10 и требует постоянного ручного рефреша, а другие браузеры не напрягаясь рисуют его динамически сразу.

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

Вчера, последней каплей, заставившей меня написать истеричный вопль была рядовая ситуация: я открыл сайт, открыл инструменты разработчика, включил отладку Javascript, тут браузер упал весь, а после поднятия не осталось ни одной из 15-ти вкладок. Сессия потерялась вовсе, как будто бы её и не было. В результате я, посреди отладки, начал вываливаться из контекста и стал заниматься попытками восстановления нужных вкладок, чтобы потом продолжить работу. Ну вот как с таким можно жить?

суббота, 12 октября 2013 г.

Впечатления от Windows 8.1

До выхода Windows 8.1 всё меньше и меньше времени, и до того момента, как на людей польётся тонна информации об "уникальных" и "удобнейших" нововведениях, хочу поделиться тем, что я увидел в этой системе нового, приятного и удобного:

НИЧЕГО!

Да, именно так. Абсолютно ничего не изменилось. Да, сломался firewall от Comodo и упорно отказывался ставиться. Заменил на другой. Да, тема из 8 Preview сломалась, починил, отвалившуюся спячку почил, неприлично долгую загрузку-как нибудь починю, остальные мелочи несущественны.

И в общем-то всё, передо мной та же самая Windows 8. Конечно, можно посмотреть в свойства системы и узнать, но это очевидно, не за этим делаются изменения.

Можете спросить про кнопку Пуск, она ведь появилась. Да, появилась, но подобное убожество я писал самостоятельно в июле прошлого года. Да, у меня менее красиво вышло, но я ведь и не рассказываю всем окружающим с помпой про мегафичу? В общем, вместо стандартного убожества из Win8.1 и ничего из Win8, у меня сейчас стоит StartIsBack, и я чувствую себя человеком.

Также теперь есть изменения в Metro Modern UI поведении. Теперь приложения при установке не попадают на главный экран. Ну что же, прорвёмся, можно открыть все программы, и найти только что скачанную игрушку. Или не находить, всё равно они скучные.

Есть какие-то копеечные изменения в стандартных Modern'овых приложениях, но это вообще-то должен быть обычный процесс разработки, не привязанный к новой версии винды.

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

Итак, моё мнение: обновление бесплатно, так что хуже не будет, обновляйтесь. Если вы до сих пор сидите на семёрке, ничего кардинально не изменится, не обновляйтесь, продолжайте сидеть и радоваться жизни от удобной системы.

PS: Надо отдать должное, есть 2 действительно новые фичи в Windows Server 2012 R2, но это не клиентская система, кроме того, про них уже прожужжали все уши интересующимся.

суббота, 29 июня 2013 г.

Эксепшены в Task'ах

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

Конкретно речь пойдёт про Таски. Не буду про них расписывать, ибо не это тема сегодняшнего поста. Вкратце, это такие треды на стероидах с вкусными и удобными фичам.

Одна из фич, это проброс эксепшенов наружу. Примерно так:

var t = new Task(() => { throw new Exception(); });
t.Start();
// do something
try
{
 t.Wait();
}
catch (AggregateException)
{
 Console.WriteLine("Exception occurred");
 throw;
}

Т.е. мы что-то выполняем в отдельном потоке, в это время занимаемся своими вещами, а потом убеждаемся, что таск закончился и ловим исключение, которое за нас обернули в AggregateException (настоящее скрыто внутри его).
Т.е. получается вполне прикольная фича, можно честно ловить исключения из других потоков в то время, когда мы знаем, как их обработать. И этим можно активно пользоваться (например, скрывая всю параллельную работу внутри метода, но пробрасывая исключения наружу).

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

new Task(() => { throw new Exception(); }).Start();

Получается, что эксепшен куда-то потеряется? Как бы не так! Доблестные спецы из Microsoft подумали, и придумали бросать исключение в деструкторе. Оцените изящество этого решения: нарушает все вменяемые стандарты кодирования, приводит к падению приложения, и выдаёт ошибки в то время и в том месте, где их отловить невозможно вообще. Супер!

Наверное, они решили, что раз исключение в обычном треде вызывает падение приложения, то и тут надо. Только забыли про это маленькое отличие с исключениями: если мы хотим сделать безопасным обычный тред, нам достаточно написать try/catch и все станут счастливы (всё равно никто за нас ошибки не обработает). А случае с тасками, кидать исключение изнутри наружу можно и местами иногда полезно. Но получается, что за этими тасками приходится следить как за маленькими детьми, хотя нам вполне может быть глубоко наплевать в данном месте на результат конкретной операции.

Решений данной проблемы в принципе можно придумать несколько (различные врапперы, следить за использованием тасков), одно из достаточно красивых такое:

public static Task IgnoreErrors(this Task t)
{
 t.ContinueWith(x => { var e = x.Exception; }, TaskContinuationOptions.OnlyOnFaulted);
 return t;
}

private static void DoTask()
{
 new Task(() => { throw new Exception(); }).IgnoreErrors().Start();
}

Т.е. мы создаём extension-метод, который прикрепляет к нашей таске продолжение (continuation), в котором мы берём значение свойства Exception (это обязательно надо сделать! именно так таска становится опять наблюдаемой (observable)), и на этом успокаиваем систему.

Задача решена, и надеюсь, что у вас она вызовет мата меньше чем у меня в своё время, когда я попался на такую проблему. А попался я на неё ещё по одной причине.

Бонус

Я вначале не зря писал, что в Microsoft вначале сделали, а потом начали думать. А подумав, они поняли, что поведение уж больно идиотское и убивать всё приложение никому не нужно. И в 4.5 изменили логику, так что для 4.5 уже мой пост неактуален.

Но без нюансов у Microsoft не обходится, ибо 4.5 по факту подменяет собой 4.0. Сюрприз! Т.е. установив 4.5, все приложения, написанные под 4.0 начинают по факту работать на 4.5, и слегка по-другому. Например, в данном случае, ошибка уже не появится (попадаются и некоторые другие различия в поведении, но это уж слишком выраженное). Вернуть старое поведение можно конфигом, но кто же заморачивается чтением всяких безумных и бесполезных настроек?

Т.е. вы как разработчик поставили все апдейты, написали приложение, протестировали в хвост и в гриву, а падает оно только у клиента. Ибо у клиента стоит Windows Server 2003, и ваше приложение должно с ним работать, и даже работает, только падает. Иногда. С непонятным стэктрейсом. И вы пытаетесь найти хвосты и поправить всё это безобразие.

Иногда просто хочется убиться головой об стену от таких гениальных поворотов сюжета.

пятница, 8 февраля 2013 г.

История про винду поганую и крипто-про не лучше

Жил был компьютер. И жил он долго и счастливо, и решил владелец обновить его, да с седьмой винды, да на восьмую.
И обновился компьютер, и сказал, буду я работать и всё у меня будет хорошо, но не буду я апдейты ставить. Ибо 800B0001!

И пошёл владелец папки catroot2 да SoftwareDistribution удалять, очередь у службы bits вычищать, регистрировать и перерегистрировать COM-компоненты. Да не помогло это ни хрена. А гугл буржуйский только тех же страдальцев показывает, да переустановить систему с нуля предлагает.
И выяснил тут совершенно случайно владелец, что CryptoPro, продукт православный может козни подобные строить, и удалил он этот продукт с концами. И заработали апдейты, и поставились патчи, и заговорила Винда человеческим голосом: "Не выключай меня, добрый молодец, ибо обновляюсь я!". И всё стало хорошо до поры до времени.

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

Но не лыком был шит добрый молодец, помнил он ещё про крипто про подлое, ну да делать нечего, ставить крипто про надо заново. Авось да починится.
И пошёл добрый молодец крипто про ставить злобное. Семь дней и ночей ставил он крипто про без устали, а ему в лицо мерзость всякая падала: дескать, сервис мой, да интерактивный, и работать он и не будет, а и драйвер мой удаляется, да не может удалиться, ибо процесс идёт установочный!

Но одолел страшилище добрый молодец, и включился тут SSL православный и апдейты, и те не сломались!

И я там был, винду материл, крипто про материл, всё подряд материл, да невыматериволся!

четверг, 22 ноября 2012 г.

Смена темы в Windows 8 на тему из Release Preview

Я писал уже раньше, что Aero в Windows 8 у меня вызывает рвотный рефлекс. При том, что в Windows 8 Release Preview была шедевральная тема (чем-то даже лучше чем в Windows 7). И тут меня посетила мысль: а почему бы не попробовать подсунуть в релиз тему из релиз-кандидата.

Что удивительно, получилось совершенно без проблем (надеюсь не до первого сервис-пака ).
Собственно 2 картинки:
было

Стало
На мой взгляд гораздо приятнее, а ещё и с тенюшечкой и человеческой подсветкой при наведении.

Собственно, если вам это захотелось тоже проделать, то нужно поступить так.
В зависимости от версии (32 или 64 бита) скачать нужный архив:

Затем его распаковать в C:\Windows\Resources\Themes\Aero\ (нужны админские права. Возможно получится и без них в другую папку, но это уж вы сами).

После этого вам нужно создать какую-нибудь тему, сохранить её, например как "my theme", найти файл: C:\Users\<имя вашего пользователя>\AppData\Local\Microsoft\Windows\Themes\my theme.theme

Открыть его (например блокнотом). И поменять (ближе к концу):
[VisualStyles]
Path=%SystemRoot%\resources\Themes\Aero\Aero.msstyles

на

[VisualStyles]
Path=%SystemRoot%\resources\Themes\Aero\Aero_p.msstyles

После этого зайти в персонализацию и выбрать тему my theme. Всё. Можно пользоваться!

Для любителей, есть ещё встроенная тема AeroLite (можно применить таким же редактированием), но внешний вид сомнителен:


четверг, 16 августа 2012 г.

Никому не нужное очередное мнение про Windows 8

Сразу скажу, что я достаточно лояльно отношусь к Microsoft, даже Vista я воспринимал достаточно спокойно, потому что как разработчик понимал, как там внутри всё перелопачено. А уж семёрку я очень сильно ждал, на бетах и RC она была просто шедевральная (относительно предыдущих). И хотя в ней полного странностей и глюков, она тем не менее весьма и весьма приятная в работе система.

Но хочу выплеснуть свой поток сознания именно про Windows 8. Ситуация такая, что с одной стороны система мне весьма нравится, а с другой стороны хочется оторвать ноги индусам, которые это всё писали (ну не руками же такое можно написать?). И до кучи я понимаю, что рано или поздно, мне придётся переходить на эту систему (разработчик, как никак, нужно следовать трендам, а то будешь динозавром и вымрешь).

Собственно, первая часть в Windows 8 это часть, которую условно можно назвать Windows 7 R2. И если бы была только это часть, то было бы всё просто замечательно! Я много читал про изменения в ядре, про то как люди выкраивали десятки мегабайт, оптимизировали таймеры, делали разные занятные вещи, всё ради того, чтобы система была быстрее и эффективнее. Новый TaskManager, это замечательная вещь, Ribbon в проводнике тоже отлично (нравится вам это или нет, но раньше было всё совсем грустно). Единственное, что в релизе испохабили Aero, при этом в RC он был просто замечательным, так что есть шансы что ещё что-нибудь пропатчат и вернут как было (я в это верю).

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

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

 Знаете, можно жить с родителями, а можно с девушкой. У каждого из подходов свои плюсы и свои минусы. При этом несмотря на то, что у родителей всё знакомо и понятно, убрано и накормлено, в отпуск куда-то лучше ехать с девушкой, потому что у неё сиськи третьего размера вам гораздо интереснее вместе. Но Windows 8 пропагандирует другую идею: вы теперь живёте сразу в двух местах! Холодильник у вас у родителей, а микроволновка у девушки. При этом родители живут в Тутаеве, а девушка в Амстердаме. Но ничего, мы вас мгновенно будем перемещать из одного места в другое, всё для вашего удобства.

И вот это всё бесит. Так сильно, что моменты в виде тупого текста, отсутствия банальных настроек, то, что приложение погоды жрёт 100 мегабайт и тормозит, и прочие косяки, уже не актуальны. Нас загоняют лопатами в светлое будущее, точнее пытаются объяснить нам, что оно светлое, а оно унылое и отвратительное, хотя вам это мало кто скажет, ибо люди привыкают к любой фигне, а эта фигня ещё и плавная и мигает, и все счастливы, и евангилисты Microsoft объясняют как стало хорошо, и что 20 лет мы не о том думали, и о том, что WinRT наше всё, в общем всеобщая любовь, обожание и красивые графики.

суббота, 14 июля 2012 г.

Кнопка Пуск для Windows 8

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


Я давно говорил, что я ненавижу то, как Microsoft запёхивает Metro UI куда надо и куда не надо, но поскольку Microsoft'у глубоко насрать на моё мнение, придётся жить с этим ужасом ближайшее время. Собственно, почему ужас? Ну вот хотя бы как выглядит свежий тестовый сервер на Server 2012 RC после двух часов с момента установки:


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

Но ситуация ещё хуже. В Microsoft выкорчевали кнопку "Пуск". Да, я знаю, что можно увести мышку в левый нижний угол, или нажать на кнопку Win. Но есть грабли, когда открыта консоль RDP на часть экрана — эти способы не работают. Чтобы открыть меню поиска необходимо попасть в малюсенький квадратик. Примерно такого размера:

Если вы не видите эту красную точку, увеличьте в браузере размер страницы.

Вот за это хочется оторвать (если остались) руки дизайнерам Windows 8.

Чтобы хоть как-то с этим жить пришлось нарисовать псевдокнопку, которая представляет собой простейшную программу, которая нажимает на кнопку Win и имеет иконку, похожую на кнопку Пуск. Берём программу, перетаскиваем на таскбар, пинним её и получаем большую кнопку, на которую можно нажимать (только отсуп слева большой относительно семёрки, но тут уж ничего не поделать ).


Если хочется более продвинутой функциональности, то рекомендую ViStart, данная программа практически полностью эмулирует стартовое меню.

Да, и система наверняка будет ругаться на эту программу, так как она не подписана сертификатом, а подписывать такую мелочь у меня нет никакого желания, так что можете поверить на слово, что программа не делает ничего плохого и состоит из 5 строчек и иконки в ресурсах   Программа не требует установки, и как вариант можете хоть на рабочем столе иконку разместить, поведение будет таким же.

startButton.exe
startButton.zip

четверг, 12 июля 2012 г.

Ненависти к Hyper-V псто

Утро не предвещало ничего плохого. Приехал маленький сервер и на него нужно было взгромоздить Hyper-V (если быть точнее, то версии 2008 R2). Никаких проблем не ожидалось, всё-таки не первый раз ставлю Hyper-V, а уж винду тем более, но у сервера была маленькая особенность (что для серверов совсем не особенность). В нём радостно урча сидели 4 винчестера по 2Тб каждый.

Итак, немного покопаться в биосе, поднять RAID10, получив 4Тб радости, воткнуть флешку и пойти покурить, пока это всё ставится (а ставится Hyper-V около 10 минут, так что ещё на кофе остаётся время).

И тут возникла первая проблема. После копирования файлов и установки перед самой перезагрузкой, винда вдруг заявила: нехорошие диски у тебя, не буду я с них грузиться. Давай, до свидания! Я всё откатываю. Тут я слегка офигел, но быстро понял, ибо это достаточно известный факт: Windows не умеет грузиться с винчестеров более 2Тб. Или умеет, но при лётной погоде.

Эти грабли удалось побороть достаточно просто: хвала Ктулху, что RAID-контроллер позволил сделать 2 виртуальных массива. Что я и сделал. 50Гб для системы, 3950Гб для данных. Винда бодро установилась, я пошёл её настраивать, включать в SCVMM, ставить апдейты и прочую мишуру, которую обязательно делать с виндой. Когда всё уже было готово, я решил перенести пару тестовых виртуалок и тут меня ожидали вторые грабли: виртуальные диски отказывались создаваться под всякими разными надуманными предлогами. Не буду расписывать как я танцевал с бубном (нижний брейк в сочетании с пасодоблем), но выяснил, что Hyper-V очень не любит винчестеры с размером сектора в 4k. Моя проблема оказалось в том, что RAID решил для такого большого винчестера установить сектор в 1 килобайт (вместо стандартных 512 байт), что было явно не 4Кб, и решению по мнению операционки не поддавалось.

Тут меня посетила гениальная идея: разбить диски на 2 рейда по 2Тб и молиться Ктулху, чтобы в таком конфиге сектор получился в 512 байт (в дальнейшем эта идея оказалась верной). Но тут винда решила устроить маленькую подлость, и обозвать диск 1 диском 2, а диск 2 диском 1, или что более корректно: диск 0 диском 2, а диск 1 диском 1. Вы чего-нибудь поняли? Я тоже не очень разобрался, но в результате система поставилась на первый из двух виртуальных дисков, а очень нужный Recovery-раздел на 100 мегабайт на второй.

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

В общем, переставил ещё раз, сделал диски dynamic и создал spanned-том (аналог JBOD) на 3950Гб из двух псевдовиртуальных. Было очень радостно на душе от того, что такую хитропопую проблему так оригинально решил. Новые виртуалки создавались без проблем и ничего не предвещало беды... Но тут опять появился SCVMM, который начал утверждать, что он не может мигрировать виртуалки, потому что на сервере нет места *удар моей головы ап стену*. Расследование показало, что System Center не понимает dynamic-диски (ха! их ещё 2000 винда понимала), и из-за этого отказывается мигрировать виртуалки. Но что самое интересное, если перевести dynamic диск в basic, обновить информацию в SCVMM, перевести назад в dynamic, то всё замечательно работает. До первого рефреша о системе. Блин.
Каким местом это нужно было писать, я не знаю. Явно не руками, но и насчёт ног я тоже сомневаюсь. Во всяком случае, голова тут не использовалась.

Пришлось, в результате сделать 2 диска и при создании виртуалок помнить о том, что надо как-то следить за местом. Но ситуация выглядит абсолютно глупо.

Пойти что-ли прочитать про Hyper-V 2012, может там всё поправили и не надо так извращаться ради простейшей очевидной задачи.

воскресенье, 17 апреля 2011 г.

Смена админского пароля без доступа к компьютеру

Если злоумышленник имеет физический
 доступ к вашему компьютеру,
 то это больше не ваш компьютер

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

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

Итак, что нам нужно сделать:

  • Смотрим, работает ли на целевом компьютере режим залипания клавиш по пятикратному нажатию шифта (если нет, придётся испробовать другие варианты, о них позднее, концепция будет та же)
  • Загружаемся с установочного диска, нажимаем shift+F10, получаем консоль. Находим нужный диск и переименовываем cmd.exe в sethc.exe (точнее делаем бекап sethc.exe, и копируем cmd.exe в sethc.exe). Примерный синтаксис:
  • c: //методом тыка и dir находим нужный диск cd windows\system32 ren sethc.exe sethc.exe.bak copy cmd.exe sethc.exe
  • Перегружаемся по-обычному 
  • Нажимаем пять раз shift и у нас есть консоль от SYSTEM (такой, злобный админ)
  • Меняем пароль админу (будем считать что его зовут Administrator):
  • net user Administrator new_password
    Это всё сломает шифрованные файлы для данного пользователя и его приватные ключи, так что аккуратнее с этим, если есть ценные данные. Возможно лучше будет создать нового пользователя и включить его в группу Администраторы.
  • Заходим под этим пользователем в систему и делаем, что нам надо
  • Восстанавливаем sethc.exe на место
Можем ещё повеселиться и запустить explorer от пользователя System, это ещё смешно работает по RDP, в общем получается отличный удобный хоткей для запуска консоли.

Что можно сделать, если "липкие клавиши" отключены?
  • Можно посмотреть, запускается ли от бездействия скринсейвер и подменить его
  • Можно подменить ненужную службу (только придётся сделать подготовления, ибо на обычный cmd, её не заменить)
  • Можно открыть реестр и прописать в автозагрузку нужные вещи
В общем, защищаться от такого сложно (если только ограничить доступ к внешним устройствам: выломать USB, CDROM, LPT, FDD и закрыть корпус на замок), главное, не подпускать злодеев к компьютеру, тогда всё будет хорошо, и вам тоже всё будет замечательно.

суббота, 12 марта 2011 г.

Оживление системы после миграции. Мучения с AHCI

Некоторое время назад я рассказывал об одной интересной возможности миграции с использованием стандартных инструментов Windows и отдельного компьютера/жёсткого диска в качестве хранилища.

Сегодня расскажу о том, что можно сделать, если после всего этого дела, новый компьютер не хочет загружаться. Точнее о проблемах с диском, которые выражаются или в идущей загрузке с последующим внезапным ребутом или же бсодом 0x7B.

В принципе для понимания хватит статьи от Microsoft, где расписано как чинить. На этом можете заканчивать читать данный пост и использовать сведения из статьи. Но я всё же продолжу.  Уточню некоторые моменты.

Итак, проблема в том, что из-за каких-то абстрактных побуждений об оптимизации (доли секунды при загрузке) Windows 7 отключает неиспользуемые устройства при загрузке, и не включает.  Поэтому включать нужно вручную. Запустить реестр и переключить тип запуска. Данный способ отлично помогает, если мы можем загрузиться в IDE-режиме. Тогда мы сможем включить драйвера, включить AHCI и компьютер загрузится в продвинутом режиме. Но если мы не можем это сделать, или компьютер не загружается ни в каком из режимов?
Тогда берём загрузочный диск с семёркой или мегафлешку, загружаемся, открываем консоль, и запускаем regedit. В нём выбираем:
  • HKEY_LOCAL_MACHINE
  • File/Load Hive...
  • Находим реестр от нашей системы (диск наверняка будет не C:, так что находим нужный (пусть будет T:), и загружаем файл system, т.е. полный путь будет вида T:\Windows\System32\config\system
  • Выбираем любое имя для него, что-нибудь вида tmp
  • У нас появился данный раздел tmp в HKEY_LOCAL_MACHINE
  • Следуем инструкции от Microsoft и меняем значение Start на 0 в следующих ветках:
    • HKEY_LOCAL_MACHINE\tmp\ControlSet001\Services\Msahci
    • HKEY_LOCAL_MACHINE\tmp\ControlSet001\Services\IastorV
  • Имеем ввиду, что нам нужно сменить значение у активной конфигурации, поэтому может быть не ControlSet001, а ControlSet002 или 3, или 4... В общем, если сомневаетесь, меняйте везде
  • Если проблемы возникают и в IDE-режиме, то можете ещё включить pciide (по тем же путям)
  • Если у вас чипсет от nvidia, то включаем nvstor или nvraid
После этого перегружаетесь и радуетесь загруженной системе. Должно всё получиться.  Если не получилось, то проблема не в жёстком диске, а в чём-нибудь другом или же вы что-то забыли или не там изменили. Пытайтесь выяснить в чём проблема, пытайтесь включить дополнительные устройства. Естественно, если текущий компьютер имеет экзотический конфиг, для которого не подходят стандартные драйвера, то тут всё гораздо хуже, и выполнимо только при затрате большого количества усилий, нужны ли они вам, решайте сами.

Данный способ уже неоднократно выручал меня, и я сожалею, что не знал о нём раньше. Ну и лучши ненависти в Microsoft, где сделали такую "оптимизацю", которая может попортить кучу нервов.

среда, 23 февраля 2011 г.

Впечатления от Microsoft QA Days

Данный пост был написан вчера в поезде, по дороге с QA days, из изменений только проставленные ссылки и форматирование.


Сегодня я посетил мероприятие, проводимое Careerlab и Microsoft под названием Microsoft Quality Assurance Days, проходившее в офисе Microsoft в Крылатском.

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

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

Ладно, заканчиваю лирику и перехожу к самому мероприятию. Началось всё с приглашённого евангелиста Брайана Келлера. Он рассказал как всё круто с TFS и Visual Studio, какие удобные все инструменты для тестирования. И я ему верю! Правда, чтобы ощутить всё это великолепие в полном объёме, нужно несколько мега-админов, чтобы настроить TFS, Hyper-V, и всю остальную инфраструктуру. Также нужна достаточно мощная техника, но результат будет просто  замечательный. Куча информации, автоматическое и полуавтоматическое тестирование, возможность сохранения состояния, запись всех шагов — в общем сказка. Лишь бы всё это работало не только в презентациях.
Далее, Брайан рассказал про исследовательское и формальное тестирование, когда задача тестера состоит в том, чтобы оценить систему с точки зрения определённого типа пользователя и попробовать всё оригинально сломать. Впрочем, с моей точки зрения, для этого очень хорошо  подходят программисты, которых сорвали с другого проекта и дали потестировать чужой код. Тут уж вредность проявляется в полном объёме, ибо эти гады (программеры), имеют очень хорошее представление, куда ткнуть, чтобы всё сломать.  Правда не надо их этим часто загружать, иначе они расстроятся, и будут всё делать как неважный тестер, особо не думая и не разбираясь в системе.

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

Следующий доклад был ужасен и абсолютно ни про что, пропустим его

Последним был мастер-класс от Дмитрия Андреева где он рассказал про средства для отладки и улучшения качества кода, существующие в студии. К сожалению, он плохо знает решарпер, что привело к тому, что Дмитрий не осветил целый пласт возможностей по улучшению кода, без использования сторонних утилит. Ну и некоторые моменты, вроде политики редких могучих чекинов мне показались странными. Зато рассказал про интересные вещи как Pex и Moles, позволяющие упростить написание юнит-тестов (Pex — генерилка юнит-тестов, Moles — фреймворк для подмены методов, любых, включая системные, чтобы делать заглушки без изменения основного кода).

Далее, у меня было обсуждение новинок в мире Windows Phone 7 и запись подкаста, о котором я упоминал в начале, а основная масса участников зависла на сессии вопросов и ответов, даже не спешила к фуршету

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

воскресенье, 6 февраля 2011 г.

OpenXML и цифровая подпись

Тут некоторое время помучался пытаясь подписать OpenXML, хочу поделиться тем, что у меня вышло с этим неприятным форматом.

Начну издалека сбоку, про то, что явно подразумевается во всех статьях но словами леняться проговорить. Итак, OpenXML это документы формата Open Packaging. Это такой стандартизованный zip-файл, в котором в основном должны храниться XML'ки, но можно и любую другую фигню. Поэтому этот формат в принципе можно использовать для передачи апдейтов вашей программы, или хранения набора патчей, в общем для любых целей хранения стандартизованного пакаджа, который удобно читать и разбирать. Собственно, в .NET за это отвечает класс Package, он всё и умеет.

Разобравшись с общим форматом, переходим к частностям: в этом OPC формате хранятся: .docx, .xlsx, .xps и много других вещей. Соответственно работать в коде с документами вы можете абстрактно, как с пакадаждем содержащим набор частей, или взять специализированного наследника (скачав, например, OpenXML SDK, ну или использовав XpsDocument) и работать уже более детально.

А теперь, собственно о цифровой подписи и проблемах. Делается всё это на уровне Package, т.е. если мы хотим подписать вордовый документ, нам на самом деле это не принципиально, мы берём класс PackageDigitalSignatureManager, гоговорим какие секции надо подписать и подписываем.
Но вот тут и начинаются проблемы:

  • В 2007-ом офисе по умолчанию подпись будет показываться ошибочной, нужно шаманить с параметрами
  • В 2010-ом подпись по умолчанию будет показываться partial, т.е. офис будет считать что вы подписали лишь некоторые части, а не весь документ, и нервничать (кстати, вы можете подписать только стили, позволив беспрепятственно изменять текст (не через Word), и таким образом подделывать документы, если пользователь не будет настаивать на том что подпись partial).
  • В .NET реализации явно подразумевается (в смысле кодом), что сертификат для цифровой подписи может быть только RSA, да ещё будут проблемы с токенами, ибо вместо использования стандартной инфраструктуры PKI для подписи (что делает, например, сам Word), тут пытаются взять насильно приватный ключ (это плохо! а местами запрещено), кастуют его к RSA (сразу выкидываем все другие алгоритмы, например наш ГОСТ) и подписывют.
В общем, хоть на бумаге всё и гладко — 15 строчек кода, на практике эо всё превращается в весьма опасную неюзабельную штуку, которая непонятно когда и где может выстрелить, поломав всё и вся. А всё из-за криворукости индусов, которые изначально не могли всё сделать грамотно, в результате теперь сделать грамотно невозможно никому.

понедельник, 3 января 2011 г.

Миграция системы с одного компьютера на другой

Хочу рассказать про способ смигрировать операционную систему с одного компьютера на другой, с сохранением всех данных. По факту, это копирование данных с одного винчестера на другой, с использованием стандартных средств. Способ подходит для Windows 7 (возможно для Vista).
Его плюсы:

  • При некоторых условиях — малое время простоя компьютера
  • Возможно использовать на опечатанных компьютерах, когда просто нельзя заменить винчестер
  • Возможность восстановить данные на определённую дату (при соответствующих условиях)
  • Возможно мигрировать по сети
Ну и соответственно минусы:
  • Нужен отдельный внешний винчестер или отдельный компьютер, доступный по сети с достаточным объёмом свободного места на его винчестере
  • Новый компьютер должен иметь по крайней мере такой же винчестер как и на старом (или больше
Ну а теперь, собственно, сам метод. В двух словах он заключается в том, что необходимо проделать стандартную архивацию данных Windows на внешний винчестер или внешнюю сетевую папку и восстановление этих данных на новом компьютере. Дальше буду рассматривать самый интересный вариант, с бэкапом по сети (удобно для организаций, где все компьютеры подключены в сеть, и достаточно физического места).
  1. Запускаем архивацию Windows
  2. Выбираем какую-нибудь сетевую папку, куда будем складывать образ (создаём её на подходящем компьютере)
  3. Убираем все галочки с файлов, но ставим галочку "сделать образ восстановления системы"
  4. Свободного места во внешней папке должно быть по количеству даннных на диске (будет создан виртуальный диск (vhd-файл) с виртуальным размером всего винчестра, а физическим — по размеру реальных данных)
  5. Запускаем, ждём пока завершится, в это время продолжаем работать
  6. Берём свежий компьютер, загружаемся с диска или чудо-флешки
  7. Вместо установки выбираем восстановление системы
  8. Говорим, что хотим восстановиться с образа, и после тщетных попыток его найти, говорим что он расположен в сети. После этого система поднимет сетевой интерфейс (сама, в установочном режиме, она и такое умеет!)
  9. Если настройки сети не раздаются через DHCP то нажимаем Shift+F10, и в консоли набираем:
    netsh interface ip set address name="Local Area Connection" static 192.168.0.100 255.255.255.0 192.168.0.1 1
    Естественно, нужно заменить IP-шники на правильные для вашей сети (тут по порядку — IP-компьютера, маска сети, IP-шлюза). Для русской версии название будет "Подключение по локальной сети", уточнить можно через команду ipconfig
  10. Указываем сетевое размещение папки (если не получится по имени компьютера, можно использовать его IP)
  11. Указываем, если требуется логин с паролем
  12. Выбираем нужный образ (если их несколько) и восстанавливаем
  13. Ждём, перегружаемся и получаем копию старого компьютера на новом
  14. Выключаем старый компьютер, меняем его на новый, продолжаем работать (естественно, все изменения, которые произошли после архивации — потеряются, если они нужны, примите меры для их отдельной архивации)
Вот и всё. Можно работать на старом компьютере, пока не подготовится новый, при желании, компьютер даже можно загрузить с vhd-файла или просто подключить его как отдельный диск, если нужен просто полный архив, но не нужно восстановление). Можно настроить на всех компьютерах архивацию по графику и в случае физической смерти одного из компьютера, восстановить всё на другом.
Какие могт быть проблемы, и что с этим можно сделать:
  • Система отказывается восстанавливаться — убеждаемся что заархивирован винчестер целиком, новый винчестер имеет размер по крайней мере такой же как и старый
  • После восстановления есть неиспользуемое место на винчестере — заходим в управление компьютером и растягиваем разделы на всё доступное место (в упрощённом виде семёрка это позволяет). Можем просто создать дополнительный раздел или воспользоваться специализированными программами для тасования разделов.
  • После восстановления, компьютер улетает в BSOD. Самый тяжёлый случай, обычно связан с тем, что драйвера на старом и новом комьютере сильно отличаются (обычно проблема с контроллером жёстких дисков). Тут можно потанцевать с бубном, попробовать на исходном компьютере удалить все драйвера (оставить стандартные), переключить режим SATA-контроллера в IDE-режим, и только после этого сделать образ.
  • При попытке сделать архив по сети, он падает с ошибкой. — попробуйте сделать архивацию на другой компьютер, попробуйте заменить драйвера сетевой карты, ибо архивируется большой объём данных и могут выплыть проблемы в драйверах (бывали случаи, когда сетевые карты достаточно именитых производителей из-за ошибок в драйверах сжирали всю оперативную память и рушили сервер по недостатку ресурсов).
В общем, на этом всё, способ достаточно прост, я постарался расписать его подробно, уточнить проблемы и подводные камни. Надеюсь, что описание окажется полезным, и вы попробуете стандартные средства для архивации и соответствующей миграции, вместо использования сторонних.

понедельник, 1 ноября 2010 г.

Как сделать загрузочную флешку с Windows, и что ещё с этим можно делать

Тут иногда меня спрашивают, как сделать установить Windows 7 с флешки, сейчас я расскажу про это, и заодно расскажу, что ещё можно с этой флешкой делать.

Для начала с простого, как сделать загрузочную флешку. Делается всё элементарно: Идём на сайт Microsoft, находим ссылку на скачивание Windows 7 USB/DVD Download Tool, устанавливаем, следуем инструкции, получаем загрузочную флешку, теперь мы можем устанавливать свежую операционную систему, причём, опыты показывают это всё идёт весьма шустро, и гораздо тише, нежели с DVD-диска.

Теперь маленькие хитрости.

1. Если тупо заменить все файлы на флешке файлами другой системы, то мы получим загрузочную флешку другой ОС, ибо загрузчик не трогается, а у всего семёрочного семейства операционных систем Microsoft один загрузчик (возможно что и с Vista всё будет хорошо). Т.е. если мы изначально поставили русскую Windows 7 32 бита, а потом хотим поставить английский Hyper-V Server 2008 R2 x64 — то нам просто нужно заменить файлы.

2. Если где-нибудь на флешку положить Far (подходящей разрядности, разумеется), то можно загрузиться с флешки, нажать Shift+F10 в появившемся окне установки, в командной строке найти нужный диск с флешкой и запустить Far. В нём можно вполне сносно работать, ведь мы находимся в Windows PE, который нам достался беслатно вместе с установочным диском. Иногда в таком режиме можно решить некоторые проблемы с загрузкой системы.

3. Вместо Far'а можно использовать программы для восстановления файлов/разделов, некоторые из них вполне неплохо себя чувствуют в данном окружении. Т.е. если что-то случилось с системой, её можно подлечить таким образом, не прибегая к тяжёлой артиллерии специализированных систем (иногда просто их нет под рукой).

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

5. Shift+F10 во время установки системы и Far, могут весьма неплохо скрасить ожидание установки системы. Можно понаблюдать за её поведением.

6. При желанни, данную флешку можно использовать для того, чтобы сжать папку Windows. Зачем это надо, хорошо описано на Хабре (там же есть командная строка для запуска). От себя отмечу, что это помогает (только не забыть потом сделать дефрагментацию), кроме того это также экономит немного места на жёстком диске.

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