классвьюшнопобедное
29.03.11 14:34 // оригинал
При разборе косяков с ClassView в 2010-й студии было сразу понятно, что предпосылки проблемы восходят к тем уже далеким временам, когда один здоровый монолитный проект был разнесен по десятку dll. Первый подход был кривоват, полезли перекрестные ссылки подпроектов, которые через некоторое время пришлось разрулить железной рукой, при этом поперли кросс-ссылки инклюдов, которые разруливались в основном через активное использование forward-описаний классов (что, конечно, подпорки, но гораздо проще и быстрее долгого выстраивания правильного порядка инклюдов - опять же, не всегда достижимого).
В сочетании же с пространствами имен простое forward-описание приходится превращать в более громоздкие конструкции. Т.е., если в MyClass1 используется указатель на MyClass2, а живут они в разных пространствах имен, выглядеть это будет так:
namespace NS2
{
class MyClass2;
}
namespace NS1
{
class MyClass1
{
//...
MyClass2* m_pXXX;
};
}
Кроме того, в описании классов/функций из dll активно использовался вполне традиционный подход с выносом __declspec(dllexport/dllimport) в макросы, чтоб убрать поддержку двух наборов хедеров:
#ifdef MYDLLIMP
#define MYDLLEXP __declspec(dllexport)
#else
#define MYDLLEXP __declspec(dllimport)
#endif
После чего можно использовать это как
class MYDLLEXP MyClass
{
//...
};
MYDLLIMP определялся только в проекте, где класс нужно было экспортировать, так что в реализации класс оказывался с dllexport, а в пользовательских проектах с dllimport.
Именно эти две вещи и сломали ClassView. Крышеснос с непопаданием в место с описанием случился от MYDLLEXP - ну не врубался новый IntelliSense в эти макросы между ключевым словом class и именем класса. Пришлось чуть подправить:
#ifdef MYDLLIMP
#define MYDLLEXP dllexport
#else
#define MYDLLEXP dllimport
#endif
class __declspec(MYDLLEXP) MyClass
{
//...
};
Теперь все стало лучше, __declspec все-таки воспринимался как валидное ключевое слово, а что там внутри него, ClassView, к счастью, не волновало.
Ну а дубли в дереве возникли от сочетания forward-описаний с пространствами имен - каждое такое описание добавляло лишнюю строчку в дерево классов. Причем дубль возникал даже при описании дружественного класса из того же пространства имен:
namespace NS1
{
class MyClass1
{
friend class MyClass3;
};
}
Причина была понятна сразу, на устранение ушло несколько месяцев неспешных поисков (поскольку жить это особо не мешает, лишь тревожит чувство прекрасного).
Сначала искал подходящие настройки, потом подходящие прагмы, остановился же в итоге на следующем варианте, за который даже немного стыдно:
//stdafx.h
#ifndef __class
#define __class class
#define __struct struct
#endif
//myclass1.h
namespace NS2
{
__class MyClass2;
}
namespace NS1
{
class MyClass1
{
friend __class MyClass3;
//...
MyClass2* m_pXXX;
};
}
Поскольку еще из опыта с __declspec стало понятно, что у ClassView особые отношения с макросами, был применен тот же подход, но уже в мирных целях, и этот грязный хак вполне прокатил - компилятору пофиг, в дереве чисто.
классвьюшное
27.03.11 16:18 // оригинал
Когда я только начинал работать с Visual C, ClassView был отличной штукой. Но за прошедшие полтора с лишним десятка лет он не особо улучшился, а местами даже усложнил жизнь - особенно последняя версия.
С мелкими проектами, конечно, проблем нет, а вот на больших, где число классов идет на сотни, все становится довольно скучно. Собсно говоря, всего-то и нужно от отображения списка классов - дать возможность создавать в нем иерархии и раскладывать классы по папкам. Если мне память не изменяет, в районе какой-то из первых .net студий эта возможность появилась, причем в первых реализациях классы в папки можно было переносить, а не копировать (оставляем за скобками такую мелочь, как стабильный вылет одной из версий студии при переносе классов в папки через меню, а не через перетаскивание мышкой). Но в какой-то момент (кажется, в 2005 студии) перенос заменили копированием, что сделало практическую пользу от папок в крупных проектах минимальной. Ну да, туда можно вытащить наиболее часто используемые классы, но перетряхнуть так весь список классов практически нереально - если в случае переноса классы, не сгруппированные по папкам, сразу на виду, то тут фиг разберешь, все ли уже посчитаны, или нет.
На помощь пришли пространства имен - по счастью, ClassView их понимает и умеет использовать для группировки классов. В конце концов, и с точки зрения логики проекта полезно было рассортировать классы, ну а то, что непосредственным поводом для этого стала такая сугубо косметическая вещь, как их отображение в дереве - да и ладно.
На некоторое время все устаканилось, но когда подоспела 2010 студия, обновленный IntelliSense сошел на нашем проекте с ума, а аккуратно отсортированное дерево классов превратилось в страх и ужас - часть классов засветилась там по нескольку раз, при этом клик на имени класса запросто мог выкинуть не на полное, а на forward-описание, а клик по функциям и просто игнорироваться. Пришлось разбираться, но об этом уже в следующий раз.
студийное
26.03.11 20:09 // оригинал
Ну надо же, в VS 2010 SP1 все-таки включили внешний help-вьювер, прислушались к стонам. Надо будет глянуть, насколько он лучше H3Viewer, если вообще.
докторктошное
25.03.11 01:47 // оригинал
Хе-хе, How/Where To Start Watching Dr. Who? Слабаки, я честно начал с первого доктора, добравшись уже до третьего и 9 сезона (72 год). Конечно, при переходе на третьего случился качественный скачок, хоть там был перерыв всего полгода. Что с технической точки зрения (все-таки цвет резко меняет восприятие, плюс декорации, видимо, поэтому стали гораздо менее картонными), что с точки зрения сюжета и характеров. И сам доктор, ставший в исполнении Пертви значительно менее склочным и суетливым, и команда поддержки (в первую очередь умерший буквально месяц назад Куртни в роли Летбридж-Стюарта).
атишноконтрастное
19.03.11 17:11 // оригинал
В последнюю неделю при просмотре любимых сериалов совершенно достала пренеприятная скачкообразная смена уровня освещенности вскоре после смены сцены. Поначалу винил кодеров, но эффект стал вылезать на видео с разных трекеров. Ну а вспомнив, что как раз с неделю назад обновил атишные драйверы, полез в их настройки. И увидел там в разделе видео толпу улучшайзеров, которых раньше не было. Настроек много, (бес)полезность каждой проверять еще лениво, но главный виновник обнаружился сразу - включение динамического контраста. Совершенно антигуманное изобретение, как-то включал его на мониторе, исплевался - и нате, тихо врубили по умолчанию.
цветовое
19.03.11 12:35 // оригинал
IE9 стал третьим браузером под Windows с поддержкой цветовых профилей - причем сразу ICC4, в отличие от Safari и FireFox с ICC2 (в FF некоторое время назад случился даунгрейд с ICC4 на ICC2). Тем, кто слышит про все это в первый раз, проще всего зайти на эту страницу и увидеть разницу воочию. К сожалению, FF по-прежнему остается единственным браузером, в котором можно включить принудительное использование цветовых профилей для текстовой части страницы и untagged-изображений из предположения, что они готовились в RGB (что справедливо для подавляющего большинства веб-картинок). Последнее, впрочем, принципиально только для счастливых владельцев мониторов с расширенным цветовым охватом (а точнее, для их незначительного подмножества, которое как-то волнует адекватность выводимой картинки, остальные будут просто восторгаться "сочностью" цветов).
еще мвидийное
14.03.11 00:00 // оригинал
Тут нарылась замечательная инструкция (от другого банка, но правила вряд ли существенно отличаются) по работе с картами: http://www.eastbridge.ru/doc/card23.doc
Из нее можно сделать следующие выводы:
- изъять карту кассир может и безусловно должен, если от оператора поступило такое указание;
- за разъяснениями держатель карты должен быть послан направлен в свой банк;
- изъятие оформляется соответствующим актом в двух экземплярах.
Итого, претензии к кассиру по поводу факта изъятия не катят - это ее право и обязанность. А вот лепет про Газпромбанк и отсутствие оформления - уже довольно приличные косяки (хотя не исключено, что того самого "старшего кассира" ждали ровно для оформления).
мвидеоневидимо
13.03.11 20:28 // оригинал
Ну чисто беспредел в М-Видео.
Предъявляем, значит, кассирше карту, которую то ли она сама сдуру размагнитила, то ли фиг знает что (хотя класть карту на покупки - ну не знаю, лично я карты только в момент оплаты из рук выпускаю, есть подозрение, что это относится и к большинству людей). Тут же даем другую с теми же атрибутами (типа "ну ладно, тогда вот эту попробуйте"). Полчаса громко (я дико извиняюсь, но некоторое представление о ...ммм... характерном modus operandi потерпевшего дает возможность это предполагать с высокой степенью достоверности) удивляемся, что происходит (а там всего-то и случился переход на ветку обработки ситуации с ярко выраженными признаками фрода). Требуем жалобную книгу, говорим сотрудникам все, что о ней думаем, пытаемся забрать с собой, возмущаемся обвинениям в краже имущества в виде этой самой книги.
Беспредельщики, да.
Update: хотя сейчас повнимательнее перечитал - я слегка погорячился, карты разные были. Наиболее вероятными видятся два варианта:
1. Карта не размагнитилась (шанс был, она ж не вплотную ей терла), а старую к этому моменту просто заблокировали (ну а заверениям в банке, что ей можно пользоваться год, я бы верил очень осторожно, от операционисток иногда таких чудес наслушаешься), откуда и отмашка на изъятие (собсно которую изначально мог даже дать сам Альфа-банк).
2. Да, размагнитила, стала оформлять по телефону, в процессе выясняют, что карта была перевыпущена в связи с заменой пина, далее см. предыдущий пункт.
айпаднопамятное
12.03.11 20:33 // оригинал
iFixit уже расковыряли второй айпад. Лично меня больше всего интересовал вот этот момент: "...and 512 MB of Samsung manufactured RAM". Ну не гигабайт, конечно, как у всех остальных планшетов этого года, но хоть что-то. Ну и да, ремонтопригодность на 4 из 10 (стекло приклеено к корпусу, lcd присобачен к стеклу скотчем).
айпаднонакруточное
10.03.11 13:13 // оригинал
Любопытно, в сониридере накрутка на второй айпад не так уж велика, как можно было предположить - 4 штуки по сравнению с первым. Жаль, правда, что только с 3g, но сам факт приятен.