суббота, 23 июня 2007 г.

Ещё немного о IAppHostAdminManager

Собственно такой набор:

typedef CComPtr<IAppHostAdminManager> MetaElement;

MetaElement getSiteById(UINT);
MetaElement getAppByPath(IN MetaElement, IN wstring);
MetaElement getDefaultApp(IN MetaElement);
MetaElement getDefaultVirtualDirInApp(IN MetaElement);
MetaElement getVirtualDirInApp(IN MetaElement app, IN wstring path);

wstring getAppPath(IN MetaElement app);
wstring getPathInApp(wstring, wstring);
wstring getParentVirtualDirPath(IN MetaElement, IN wstring);
wstring getPathRemainder(IN wstring path, IN wstring subpath);

bool isSubPath(wstring, wstring);

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

пятница, 22 июня 2007 г.

Былое

Берёт меня иногда тоска по моей былой жизни. Читаю вот обзор инетштучек о вебдваноль-жизни и помню, что сам был в двух шагах от неё. Читаю обзоры новинок от Apple и о простоте и могуществе Ruby. Не хватило духу на эти два шага. А теперь? Не жалуюсь. Интересно. Денежно.

четверг, 21 июня 2007 г.

Code Review

Теперь уже можно сказать, что я закончил Helicon Manager, над которым трудился последний месяц. Он входит в состав инсталляции ISAPI_Rewrite3, о котором можно почитать на сайте компании Helicon http://www.helicontech.com/isapi_rewrite/, там можно и скачать лайт или триал версию этого продукта. Самое сложное, что было реализовано в Helicon Manager - это работа с метабазой IIS7. Документации нормальной нет, примеров хороших тоже не нашлось. До много пришлось доходить самому плюс, конечно, помощь коллег.
Теперь что? Теперь - код ревью этого самого ISAPI_Rewrite.

Самый длинный день в году

Господа! Сегодня же самый длинный день в году! Лето в самом разгаре. А вы всё ещё сидите в своих кондиционируемых офисах? Прожигаете такое замечательное время за своими двухядерными компами? Не говорите только, что в августе будет отпуск и вы на неделю вырвитесь на море. Это не лето. Лето нужно ловить каждым вздохом утреннего леса. Остановитесь. Берите лето руками. Дышите им, смотрите на него. Купайтесь утром в соседнем пруду. Бродите вечером до поздна пролесками, степями, парками или на худой конец тесными уютными улочками.
Лето вокруг нас.

среда, 20 июня 2007 г.

AppHostAdminManager using

Приведу небольшую выдержку из ещё сырого, но уже почти рабочего класса для работы с метабазой при помощи AppHostAdminManager.
 UINT searchSiteChlidren(IISNodeTree*);
UINT searchAppChildren(IISNodeTree*, MetaElement);
UINT searchVirtualDirPhisChildren(IISNodeTree*, MetaElement, wstring path = L"");
MetaElement getSiteById(UINT);
MetaElement getAppByPath(IN MetaElement, IN wstring, OUT wstring*);
MetaElement getDefaultApp(IN MetaElement);
MetaElement getDefaultVirtualDirInApp(IN MetaElement);
wstring getPathInApp(wstring, wstring);
wstring GetParentVirtualDir(IN MetaElement, IN wstring);

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

IIS 7.0 Metabase

Господа! Все, кто юзает метабазу iis! Радуйтесь тому, как просто и очевидно устроена метабеза в пятёрке и шестёрке! Это когда виртуальные подкаталоги суть подузлы родительского узла виртуального каталога. Кто панкует - должен понять о чём я говорю.
Смотрим на метабазу семёрки. И? Виртуальные каталоги - это просто список, никаких вложенных подузлов или подкаталогов. Плюс application path="...".
Спасибо ребятам из Майкрософта. Не оставят они программистов без работы.

пятница, 15 июня 2007 г.

Windows Network Troubles

У знакомых менеджеров перестал работать инет на машине. После вируса. Пинги идут куда хочешь и всё. Ни http, ни почтовые протоколы, ни tracert не работают. Помогла статья Windows XP SP1 Network Problem Solver и в частности такое:

netsh winsock reset

Деревья

Мою оригинальную иконку таки не приняли. Слишком концептуальной она оказалась что ли. Но я в отчаяние не упал, а сделал простую по пикселям из двух букв rw.
За вчера-позавчера сделал фичу, которой боялся много лет, наверно с первого курса института. Это tree control, который динамически (в рантайме) создаёт себе узлы и ветки. Оказалось довольно просто. Узлы для этого дерева ищутся в метабазе IIS и директориях wwwroot. Всё замечательно работает для XP и 2003, сегодня предстоит тоже, но для Vista (т.е. для iis 7).

среда, 13 июня 2007 г.

Какие должны быть иконки

Какие же должны быть иконки? Как и в песне о логотипах и лэйбаках можно услышать: современными, технологичными, красивыми, отражать динамичность развития, устойчивость и коммуникабельность. Всё это, конечно, сопли менеджеров и слюни дизайнеров, которые набивают себе цену. На мой ни на что не претендеющий взгляд иконка должна:
  1. Быть уникальной, идентичной и не похожей ни на какую другую.
  2. Соответствовать некоторому выбранному стилю. Например, тому стилю, что выбран для линейки продуктов или всех продуктов некоторой компании вообще.
Похожа ли она на какие-то буквы, есть ли логическая связь с назначением продукта, соответствует ли цветам, которые могут ассоциироваться с продуктом - всё это не имеющие значения сопли.

Как известно даже последняя Visual Studio 2005 понимать иконки с пнг-сжатием для Vista отказывается. Мы нарыли программку ReplaceVistaIcon.exe, которая всё делает правильно. Правда есть первый сервис-пак для студии, возможно он эту проблему решит корректно. Но поставить мне его не удалось. То есть я ждал больше часа пока его инсталляция раздуплялась, но не стерпел и выключил её.

вторник, 12 июня 2007 г.

Icon for Rewrite

Сделал вчера несколько иконок для rewrite (тот самый rewrite, что для iis (не только для 5 и 6, но и бета для 7 в конце недели!)). А вечером долго не мог уснуть. Всё эти иконки крутились в голове. И уже почти заснув, я увидел среди них ту, что нам нужна. О ней - завтра. А сейчас еду в ненавистную командировку на день за три-девять земель.

понедельник, 11 июня 2007 г.

Vista icons

Все уже наверно видели иконки Windows Vista. Они теперь имеют размер 256 на 256 и сжимаются PNG. Вот на счёт PNG - молодцы, это уже давно пора. Есть даже уже проги, которые могут такие иконки правильно делать. Да вот беда - VS 6, .NET, 2005 не умеют компилировать ресурсы с такими иконками.
What's New with Windows Vista™ Icons?

пятница, 8 июня 2007 г.

Почти как mmc

Задача моя усложнилась. Теперь мне надо из метабазы iis вытаскивать не только список сайтов, но и список директорий и поддиректорий (в runtime). Красота вся в том, что часть этих директорий - виртуальные, а часть реальные в файловой системе. Плюс разные походы для работой с метебезой в iis 5 & 6 (XP, Server 2003) и в iis 7 (Vista, Longhorn).
Эх! Интересная будет будущая неделя!

Опять процесс идёт / Vista UAC

Среда и четверг немного взбодрили меня. Я опять много пишу, пробую, отлаживаю.
За эти два дня поборол следующую проблему. В всеми нами любимой Висте новая система управления аккаунтами и привелегиями пользователей UAC. Помогла мне немного понять её эта статья. Задача банальная была. Пользователь состоит в группе администраторов и моё приложение должно им запускаться с правами админа. По умолчанию в Висте оно запускается с минимальными (или какими-то нормальными) правами. Можно правда делать правый клик и выбирать Run As Administrator. Но это не хорошо, понятно думаю.
Я привожу далее решение, которое работает у меня. Может оно и не самое правильное. Но оно работает.
  1. Создаём в корне проетка файл с манифестом, пример которого есть в статье. Исправим там имя exe и его описание.
  2. В VS пишем путь к бинарникам из последнего Platform SDK (для Висты). Среди этих бинарников есть файл mt.exe, который и будет внедрять манифест в exe.
  3. В постбилд событиях для проекта пишем что-то типа

    mt.exe –manifest MyApp.exe.manifest -outputresource:$(TargetPath);1


Смотрим теперь в Висте (огромное спасибо VMware) и видим этот маленький щит на иконке файла приложения. Запускаем дабл-кликом и але-оп - окно с предложением предоставить права админа.
В этот же манифест добавляйте всё, что нужно. Например, я сперва забыл туда дописать, что приложению нужны comctrls минимум версии 6.0 (для отслеживания нажатия кнопок на PropertySheet). Долго искал в чём бок, пока не понял, что бок в манифесте.
Немного ссылок:

вторник, 5 июня 2007 г.

Пауза

Пятидневную паузу в своих путешествиях по джунглям COM, IIS и MMC я был вынужден сделать по банальной причине. Я - женился. Устал жутко.
Теперь буд-то просыпаюсь после длинного сна и начинаю вспоминать, чем я занимался последние полмесяца.