Что-то последнее время погодка все больше напоминает пиррянскую – вчера был снег, сегодня уже ярко светит солнце и даже немножко тепло. Прогноз говорит, что послезавтра опять холодно и снежно будет. Правда прогнозы тоже последнее время не очень хорошо работают, так что все намекает на то, что у нас здесь Пирр – разве что гравитация поменьше 🙂
VS2005 Automation
Я пишу Add-in для студии, который бы позволил более эффективно компилировать проекты gcc компилятором, которым мы пользуемся.
На данный момент самой важной и насущной проблемой является управление компилятором, получение текущих настроек и установка своих, и вот тут начинаются проблемы 🙁
Для любого Add-in доступен объект типа EnvDTE2, который предоставляет доступ ко всему, что есть в студии, т.е. например EnvDTE.Solution.Projects возвращает набор проектов, без всякой привязки к конкретному языку, этого достаточно для создания всяких формочек и настроек, но не достаточно для того, чтобы можно было управлять компилятором. Поиски в документации MSDN выявили пространство имен Microsoft.VisualStudio в котором есть интересные классы – такие как VCProject, VCProjectEngine, которые предоставляют все необходимые средства для управления C++ проектом и всеми его тонкими настройками.
Существует лишь одна проблема – как получить объект VCProjectEngine?
Майкрософт пишет, что это можно сделать к примеру при помощи CoCreateInstance – но в реальности этот метод вызывает проблемы, которые выражаются в странном поведении VS2005.
Существует еще один способ, недокументированный.
Мы можем получить список C++ проектов таким образом:
Projects projects = (Projects)dte.GetObject(“VCProjects”);
После этого мы делаем следующее:
VCProjectEngine engine = (VCProjectEngine)projects.Properties.Item(“VCProjectEngine”);
К сожалению этот метод не работает 🙂 Хотя тот источник, из которого я его почерпнул пишет, что именно при помощи него они все сделали.
Последняя строчка вызывает InvalidCastException, т.е. объект возвращается, но он не является тем, что нам нужно.
Update
Получить объект VCProject и VCProjectEngine удалось.
Поиски по форумам увенчались успехом и в одном из постов какого-то чина из майкрософт я нашел подходящий код, который без всякого хакерства работает как положено 🙂
Projects projects = (Projects)_applicationObject.Solution.Projects;
VCProject vcproj = null;
foreach (Project p in projects)
{
vcproj = p.Object as VCProject;
}
Debug.Assert(vcproj != null);
Суть заключается в том, что проект из объектной модели automation хранит ссылку на объект VCProject – ну а дальше мы просто этот объект извлекаем.
Теперь для того, чтобы получить настройки компилятора нам надо получить ссылку на текущую конфигурацию. Для этого мы воспользуемся свойством Configurations.
И хотя это не текущая конфигурация, но все же то, что надо 🙂
Debug.Assert((vcproj.Configurations as IVCCollection).Count != 0);
VCConfiguration conf = (vcproj.Configurations as IVCCollection).Item(1) as VCConfiguration;
Самый главный момент, понятый мной – это то, что в пространстве Microsoft.VisualStudio в качестве контейнера используется не System.Array, а IVCCollection – эта неочевидность вынудила меня потратить лишний час на понимание сути проблемы – почему нельзя было извлечь объект из контейнера.
Теперь мы получаем ссылку на элемент Tool – это непосредственно та вещь, которая позволяет управлять всеми настройками компилятора.
Debug.Assert((conf.Tools as IVCCollection).Count != 0);
VCNMakeTool tool = (conf.Tools as IVCCollection).Item(1) as VCNMakeTool;
Так как в нашем случае используется Makefile project – то мы приводим к типу VCNMakeTool
Собсно все – теперь мы получили полный контроль над процессом компиляции.
В принципе – это лишь первый шаг – поскольку нужно отказываться от промежуточной стадии в виде makefile и создавать свой тип проекта со своими настройками сборки программы, а соответственно и совершенствовать Add-in дальше.
Гоблин о журналистах
Почитал статейку, которую налабал славноизвестный Гоблин. Задумался…
Если так посмотреть, то все, что он описал происходит не только в журналистской среде, а и во всех остальных сферах жизни, например в геймдеве 🙂
Достаточно посмотреть на то, во что превращается форум gamedev.ru – а превращается он тоже в какое-то стадо, которым рулят те же подростки, которые ничего делать не умеют, но зато очень хорошо умеют рассказывать – какие они крутые и какую убер MMORPG они скоро выпустят – вот только сетевой протокол долабают и издателя найдут.
Мысль моя останавливается на том, что проблема заключена в нежелании подходящим поколением убер-девелоперов (да и вообще всех остальных вьюношей) не слушать мнение старших – мол они (старшие) росли в другом времени, с другими технологиями и уже давно устарели.
Короче я думаю, что не смотря на то, что совок был плохим, в тогдашней школе моральные установки были очень правильными, а именно: Нужно уважать старших и прислушиваться к их мнению! Вот такие вот мысли…
Карпаты весной
На последних выходных я снова ездил в Карпаты, снова в Пилипець, но жили в другом домике – теперь с туалетом внутри, что очень удобно в холодную погоду 🙂
Эта поездка оказалась более необычной чем остальные – в этот раз в поезде мы ехали в разных вагонах, и если туда мы ехали в соседних вагонах, то обратные билеты были в 3 и в 19 вагоны, почти рядом 🙂 Правда на горке мы познакомились с ребятами, у которых билеты были в 4 и 18 вагонах, поэтому я махнулся местами с девушкой из их компании и назад мы ехали снова в соседних вагонах – все же лучше, чем в разных концах поезда. Омрачала местами поездку и одновременно веселила группа детей, возвращавшаяся из карпат. У них была явная путаница с билетами и они занимали все доступные места, ну и наши в том числе 🙂 Правда удалось отбиться. Мне повезло меньше – в моем вагоне рядом были грудные дети – эти прекрасные создания прекрасны только когда спят, когда они не спят – то уровень шума начинает зашкаливать, а ночью, когда хочется спать – это немного мешает 🙂
В горах погодка была немного так себе – в первый день валил мокрый снег и дул довольно сильный ветер, при этом похоже, что в предыдущие дни снег тоже шел довольно активно, потому что трасса была совсем неукатана. В результате я сумел влететь под снег 🙂 Одна лыжа ушла под снег и застряла там, а я полетел вперед по инерции. Следующий кадр – я ничего не вижу и думаю – не слишком ли глубоко зарылся и могу ли дышать. Оказалось не слишком, просто встал на ноги и оказался приблизительно по пояс в снегу, с одной лыжей на ноге, второй рядом не оказалось… Пришлось привести мысли в порядок, осмотреться и по своему следу понять, куда же закопалась лыжа. Я ее нашел 🙂
Больше я на целину не выезжал – решил, что хватит с меня таких приключений. Собственно их больше особо и не было.
На следующий день шел просто снежок и не было ветра – довольно неплохая погодка – если не потеет маска, а она начала запотевать – это было ужасно. В конце концов инженерная мысль победила и сказала, что надо затянуть потуже резинку, чтобы маска плотнее прилегала к лицу – это помогло 🙂 Кататься стало интереснее, но когда мы стояли в очереди выкатать последний билет (замечу, что впервые там была ОГРОМНАЯ очередь – где-то на полчаса) и уже подошли к финальному отрезку – оставалось 5 минут, то внезапно очередь застопорилась – порвался трос подъемника, тому кто был под ним, наверно было больновато…
В общем мы поперлись домой и я лег отсыпаться… Ну а как мы ехали назад – я уже описывал 🙂
Подведу итог – было прикольно!
Protected: PSP Network
Я заболел
Я стал одной из первых жертв весеннего тепла (ведь уже можно считать, что пришла весна 🙂 ). Разрадовавшись теплу я снял пуховик и одел кожанку с подстежкой, шапку снял. И намочил голову – на улице пошел дождь, а у кожанки нету капюшона. Теперь я сижу дома с квадратной головой и сильным насморком, жру таблетки и думаю – “а пофиг, зато хоть немного порадовался весне :)”. Кароче от такие от дела.
Баттлфилд 2
Игра жжот. Она жжот сильнее чем цивилизация 🙂 Я подсел на нее как на какой-то наркотик – я спешу поскорее попасть домой, чтобы побегать с толпой на сервере, повоевать в составе отделения и пользуясь голосовыми переговорами. Это сила 🙂
Интересная штука эта игра – наглядно показывает, что ходить надо толпой – если ты убежал куда-то в сторону, то очень вероятно, что тебя завалят и усе… 🙂 А так или ты прикрываешь, или тебя прикрывают, да и медику бежать не далеко.
Еще есть техника – на ней можно ездить, что весьма интересно и увлекательно, а главное создателям удалось перенести в игру даже некоторые аспекты реальности – например, на танке без прикрытия пехоты много не навоюешь – подорвут так быстро, что даже пискнуть не успеешь 🙂
В общем игра супер.
Я даже купил лицензионную версию!
Диплом
Вчера я защитил диплом, вроде даже на “отлично” 🙂
Интересно, что после того как я его защитил, мир не рухнул, не изменился и ничегошеньки не произошло 🙂
Наверно так и должно быть. Все равно, работу я нашел раньше, а больше после диплома ничего измениться и не должно было. Разве что интересно, как оно будет теперь без постоянной учебы? Все-таки 15 лет постоянного и непрерывного обучения что-то должны были отпечатать на мне.
Посмотрим короче, нифик сейчас заморачиваться 🙂
Пивко
Вчера вечером пили пиво в офисе, очень интересная компания получилась однако 🙂
Слева направо: KVaks, DDima, const (это я 🙂 )
Флюс
Вчера утром я проснулся и обнаружил, что у меня болит зуб. Сначала я подумал, что это просто непонятная боль, которая иногда бывает, но проходит. К обеду я понял, что не проходит, а даже усиливается, посмотрев на свой рот в зеркало, я обнаружил место и предположил, что режется зуб мудрости. А когда сегодня утром я проснулся в 6 утра из-за боли, то увидел, что нифига это не зуб мудрости, а очень даже банальный нарыв – этакая мягкая шишка на челюсти, которая еще и болит. Потом я узнал, что это, оказывается, называется флюс 🙂 Короче схавал я обезбаливающего и поперся на работу. Но вот час назад я понял, что работать я уже не могу – болит сцуко и все, хоть бейся, а таблеток нету. Короче пошел я к умывальнику, посмотрел на эту шнягу в зеркало и ткнул в нее пальцем. В общем теперь боли почти нету, а шишка сдулась. Осталось это дело промыть чем-нить стерилизующим.
Завтра обязательно схожу к зубному, чтобы он дочистил эту байду окончательно и сказал как жить дальше 🙂
ЗЫ: Хорошо, что после эпопеи с починкой зубов я перестал бояться стоматологов.