Первая и единственная "литературная" заметка. Информация по существу начинается с раздела "Для Затравки".
О себе
В ответ на вопросы о моей карьере (Как тебя так угораздило? :) я обычно отшучиваюсь: обмишурился, дескать, в 1978 году, когда, будучи студентом МАИ, написал свою первую программу (на перфокартах, разумеется) и с тех пор "подсел на иглу". Нет большего пространства для творчества, чем цифровой мир. Где все ограничивается только пределами нашей фантазии, полетом мысли. Где не нужно тратить силы и время для добывания холстов и красок, как художник, или бегать по спекулянтам в поисках нужной микросхемы, как радиолюбитель, или разгружать по ночам вагоны, чтобы купить "фирменные" струны для самодельных гитар, как музыкант известного на весь микрорайон вокально-инсрументальный ансамбля (в 70-х так было положено называть свою рок-группу :)
Позвольте, странный контекст получается. Среди таких возвышенных понятий как Искусство, Музыка, Полет Мысли, Творчество, слово Ремесленник похоже на оскорбление. За что ж я так себя, любимого?
О Промышленном Программировании
-
Вы программист на Майкрософте? Ооо! Стало быть, большой математик! Мехмат? Физтех?
-
Да нет, "от станка" мы, знаете ли. С математикой у нас так себе. То есть какого-нибудь революционного алгоритма видео компрессии от нас не дождутся.
-
Ха, так что же Вы тогда делаете на Майкрософте?
-
Дело в том, что "полет мысли", творчество, и.т.п. (см. первый абзац) занимает в промышленном производстве коммерческих программных продуктов очень небольшое (не по важности конечно, а по объему вложенных средств и времени) место. Все остальное – это технологические процессы, профессиональные навыки, огромное количество мелких деталей. Одним словом, РЕМЕСЛО.
Об этих Заметках
Российская математическая школа сильна, это всем известно. И Майкрософт действительно с удовольствием принимает на работу выпускников математических кафедр из России. Но с вопросами технологии промышленного производства им приходится осваиваться прямо "на месте", и это не всегда происходит безболезненно.
В этих заметках я собираюсь, в абсолютно неструктурированной форме, делиться теми маленькими кусочками знания и 20+ летнего опыта работы в индустрии, которые мне и позволяют делать то, что я умею делать – участвовать в промышленном производстве (Making Stuff That Works). Поэтому я пишу слово Ремесленник с большой буквы.
О Читателях этих Заметок
Кому это может быть интересно? TechNet.com ориентирован на IT-Pro, в отличии от MSDN.com что для программистов-разработчиков. Но мы-то с Вами знаем, что в России IT специалист, который вообще не умеет программировать, еще долго будет нонсенс. Поэтому есть надежда, что "маленькие хитрости" из различных областей системного программирования могут быть не только интересны, но и практически полезны тем, кто понимает роль маленьких деталей и цену маленьких оплошностей.
Как положено, Об Ответственности (Disclaimer)
-
Всё опубликованное в этих заметках является личным мнением автора. Иначе говоря, я не имею права и не говорю от лица Майкрософт.
-
Вся информация в этих заметках предоставляется на правах КАК-ЕСТЬ (AS-IS), то-бишь: хотя я пишу то, что знаю и не пишу того, что "слышал, но забыл где", это не означает, что никогда и нигде не может быть никаких ошибок. Если Вы используете предоставленную информацию, то под свою ответственность.
Предположения и Соглашения
-
Предполагается, что читатели этих заметок уверенно владеют C/C++, программированием для Microsoft Windows (разумеется), и (конечно же) без ума от C#.
-
Про русско-английскую смесь. Конечно же, я смеюсь вместе со всеми над Задорновским "Вам чиз наслайсать или целым писом", но также хорошо помню свои сложности, когда впервые увидел полностью русифицированный Windows-98. Поэтому многие технические термины будут использоваться в англоязычной транскрипции.
-
О вреде и "пользе" курения. В стародавние времена, в советских НИИ, курилка не только наносила вред здоровью, но и была местом естественного обмена технической информацией: "Ух, я только что чего нарыл..!!" Поэтому вместо распространенной в Америке формы предоставления информации "Did you know that…" (А Вы знали что...) мне больше нравится форма "I didn’t know that.." (я не знал, что..)
Для Затравки
(чтобы представить, как эти заметки предположительно должны выглядеть)
Компилятор C++ из Visual Studio 2005 предоставляет вложенному классу прямой доступ к protected and private members класса объемлющего. Поэтому вложенный класс больше не обязательно объявлять как friend.
class Outer
{
void usedByHelperOnly();
void onHelperReleased();
public:
Outer() { .. }
~Outer() { .. }
class Helper
{
Outer& _rHost;
public:
Helper(Outer& host) : _rHost(host) { ; }
~Helper() { _rHost.onHelperReleased(); }
void DoTheJob() { _rHost.usedByHelperOnly(); }
};
friend class Helper; // Not required in Visual Studio 2005
}; // Outer
Есть мнение :) что интерфейс IMalloc, полученный из CoGetMalloc(), "тяжелее" чем "чистый" Win32 HeapAlloc. На самом деле реальной разницы в скорости нет.
IMalloc* pMalloc = NULL;
HRESULT hr = CoGetMalloc(MEMCTX_TASK, &pMalloc);
if( FAILED(hr) ){ .. }
После получения интерфейса,
pData = pMalloc->Alloc(123456);
это тоже самое что и
pData = HeapAlloc(GetProcessHeap(), 0, 123456);