Tag Archive for 'Microsoft'

Неортодоксальные текстовые редакторы рулят

Как истинный приверженец vim, я устанавливаю его первым делом на любой мой рабочий компьютер с Майкрософт Уиндоуз, чем раз и навсегда отбиваю у коллег всякое желание что-либо делать на нем без меня. Очень, очень полезное свойство, но люблю я vim вовсе не за это.

Наступил я сегодня на грабли. Впрочем, наступил на них я уже давно, согласившись писать юнит-тесты для C++ кода на MSTest, но сегодня я нашел особо детские грабли.

Полагаю, что некоторые особо просвещенные читатели моего уютного бложека в курсе, что MSTest позволяет “облегчить” написание так называемых Data-Driven юнит тестов. Как обычно, облегчение это приходит в полном соответствии с корпоративным стандартом майкрософт – “теперь  выстрелить себе в ногу стало еще легче”. Казалось бы, прикрепи себе атрибут [DataSource] перед тест-кейсом и вперед, на танки мегабайты входных данных, что может быть прекраснее?

Откуда же я знал

Еще одна причина, почему shelves в TFS лучше не пользоваться.

Я уже как-то писал, что “изобретатель” shelves в TFS – по всей видимости человек, одаренный особыми, неподвластными нам, простым смертным, качествам. По сути наличие в системе контроля версий “возможности” временно сохранить что-о  не в репозитории, а в каком-то странном четвертом измерении противоречит самой идее системы контроля версий. Какой такой идее, спросите Вы? Да очень простой – изменил код – коммить изменения. Если коммитить нельзя (кто сказал, что нельзя? Плюнь ему в рожу!), все равно коммить. Займи, но выпей, то есть, создай свой бранч, но коммить!

Отступления от этого правила, впрочем, обычно ни к чему плохому не приводят. Однако, вы видели хоть один программный проект, который протекал бы как обычно? Нюанс, как говорится в анекдоте.

Зарисовка с натуры – продукт ушел в печать, код заморожен. Релиз уже завтра (или позавчера), и тут тестеры находят баг. Или бажище. Или Баг Шредингера, который проявляется только в 50% случаев, если его искать специально. Как бы то ни было, баг есть. Исправить его – тоже “есть”. А вот теперь тот самый нюанс – коммитить изменения в основное дерево низзя!  Особенно если проект большой и тяжелый, решение о том, как и в каком виде подавать багфикс, может приниматься на самом верху – то ли хотфикс выпустить, то ли сервис-пак готовить, то ли забить и ждать новой версии. Пока политки играют в свои игры, программисты у себя в подвале решили изменения в shelve положить, дабы собрать-протестировать-провести code review. Сказано – сделано. А тут, не прошло и полгода, большие боссы постановили – сервис-паку быть!

Недолго думая, сделали бранч. И… обломались очень жестко. TFS позволяет делать unshelve’ код только в ту же ветку, откуда ему сделали shelve. И никак иначе. С SVN все проще, чем два байта переслать – svn copy, svn switch и следующий коммит будет уже в новую ветку. TFS же, к счастью, предлагает возможность сделать unshelve в другую ветку. Если установлены TFS power toys (как? У Вас еще не  установлены?), без которых в TFS 2005 даже банальнейшего tree difference нет, то можно из командной строки сделать tfpt unshelve /merge. К несчастью, это не всегда работает – в моем случае попытка завершалась маловразумительным сообщением вроде “Cannot determine workspace”.

Решать проблему пришлось дедовским методом – доставать beyond compare и тупо сравнивать каталоги на диске. Кстати, если кто рискнет повторить сей трюк – сделать зарание Check-out всего дерева в той ветке, куда собираемся коммитить – очень, очень хорошая идея.

Pause for X seconds in batch file?

Everyone who ever tried to automate routine tasks in windows knows that there is no sleep() program or its analogue. At least in default windows installation.

But there is quite an unexpected workaround:

ping -n 2 127.0.0.1 > nul

will stop batch execution for 2 seconds. (Replace 2 with your number for longer pause.)

Very simple and neat. Or is it?

Мыкрософт. Не перестает удивлять.

Работало. Отлично работало. До сего дня отлично работала сеть. Беспроводная.

В одной комнате нотебяк А с Уистой (Г). К нему подключен принтер Е.

В другой комнате нотебяк Х с XP. К нему ничего не подключено. Связь между объектами Г и Х осуществляется посредством модулированных сверхвысокочастотных электромагнитных колебаний сдандарта IEEE 802.11g

Так вот, до сего дня нотебяк Х мог печатать на принтер Е, подключенный к А, работающим под управлением Г.

А сегодня что-то случилось. Г перестала пускать объект Х на свои шары. И даже не пингуется, сволочь!

Уже все перетрахнул.

Впрочем, будет продолжать выебываться – на А вместо Г встанет какая-нибудь Убунта.

Upd. Однако, M$ непосредственно тут оказались ни при чем. То есть, на них вина по умолчанию лежит несмываемая, но мои проблемы вызвал, внимание Norton Internet Security. Который мне подусунули вместе с нотебякой и который решил так изящно сдохнуть, сука! Видать, в нем тоже был фаервол. Который тоже сдох. Что интересно, снести это поделие стандартными средствами не удавалось, пришлось скачать с Симантека и установить (!) удалятор этого Нортона. Как они еще не разорились – не понимаю.

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

Очередная пятиминутка ненависти

Сегодня под раздачу попадает чудо рук майкрософтовских – фреймворк для юнит-тестов MSTest.

Когда я его увидел, первое впечатление было “красивая свистелка, но держаться от нее нужно подальше”. Опыт использования этого угребищного куска говна на солюшене из 30 проектов с mixed  кодом показал, что первое впечатление не обмануло.

Во-первых (и в главных), его не могли написать люди, которые что-то понимают в юнит тестировании. Его писали какие-то человекоподобные обезъянки в полной изоляции от внешнего мира (интернет им, похоже, тоже отключили). Простейший пример – один из тестов не прошел, сработал ассерт. Что сделает нормальный программист? Кликнет на сообщении о проваленном тесте в надежде сразу прыгнуть на место ассерта в кода. Именно так работает, к примеру, cppunit. Что сделали гении из MS? Правильно, под даблклику вылезает восхитительное по своей долбанутости окно с “подробной информацией об ошибке”, которое, в духе M$, имеет бесконечно отрицательную информационную ценность. До места ассерта, что характерно, приходится добираться вручную, причем, если у вас в тесте ассертов больше одного и Вы не расставили вручную сообщения вроде “ассерт 1″ и “абсолютно невозможный ассерт”, то поиск места ошибки превращается в увлекательную игру-угадайку.

Уже одного это должно быть достаточной причиной не использовать это поделие в своем проекте. Но, если Вы, превозмогая все трудности и лишения, все же используете ЭТО, то знайте, что рано или поздно Вас ждет бетонная стена. Дело в том, что MSTest каким-то образом завязан на IntelliSense,  которая, в свою очередь, известна тем, что норовит вызывать забавные спецэффекты на сколько-нибудь большом проекте. По крайней мере, это так в 2005 студии. Так вот, будьте готовы к тому, что после нажантия на кноп “запустить тест” можно будет смело идти на обед – Студия уходит в себя  минут на 15-20.

Особой пикантности процессу разработки можно добавить, используя MSTest для тестирования нативного С++ кода. Если студия не зависнет, то ее добъет отладчик mixed mode, который не менее весело вешается в случайных случаях.

Что характерно, в M$ о всех вышеперечисленных проблемах знают. Их признают. И нихуя не делают.

“WOW!” или Конкурс “обосравшиеся года”

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

M$ продлевает поддержку XP до 2014 года. И даже официально заявляет, что все желающие смогут в любой момент проапгрейдить Уиндоуз Уисто до XP безо всякой оплаты, хотя возобновлять продажи XP и не планируют.

M$ наступили на свои собственные грабли. Пипл Уисту хавать не стал.

Интересно, этот пример войдет в учебники по маркетингу?

Приношу свои извинения

за все, что я высказал в адрес TFS ранее.

Это не отстой, нет. Отстой – слишком гордое звание для этого уебищного куска говна. Как обычно, у майкрософт получился пылесос, который нифига не сосет.

В целях обеспечения безопасности предприятия и предотвращения массовых несчастных случаев на производстве детали описывать пока не буду.

WCF services development made easy in VS 2008?

Or what?

Yes, I am C++ maniac and would write everything in C++, if I could, but I am not an idiot. I have written distributed network applications in C++ before, this is why for a new project I decided to see how .Net eases such tasks.

That’s true – Windows communication foundation looks pretty good. It’s straightforward, it hides all network stuff behind and even newly released VS 2008 has sufficient project templates that make WCF services creation as easy as can be.

Read more – it is not as easy as it seemed…




8 visitors online now
8 guests, 0 members
Max visitors today: 13 at 06:52 am MST
This month: 13 at 03-09-2010 02:06 am MST
This year: 41 at 01-23-2010 03:43 am MST
All time: 41 at 01-23-2010 03:43 am MST