пятница, 11 ноября 2011 г.

На права без взяток 2 - Свершилось!

    Ура! Урааааа!!!!! Свершилось! 9 ноября я сдал экзамен в ГАИ, и что самое для меня приятное - ни копейки не заплатив мимо кассы. Нет, я отнюдь не жлоб, но я не люблю когда мне навязывают свои условия и терпеть не могу, когда мне говорят "Все так делают - и ты делай...". А теперь немного подробнее:
 
   Еще до того как записаться на курсы, я решил, что по крайней мере попробую сдать экзамен в ГАИ самостоятельно. Не то, чтобы я принципиальный борец против взяток и коррупции, скорее имелся чисто спортивный интерес - а смогу ли я? С самого начала занятий в автошколе я засел за решение билетов, тратил в день минут по 20-30 на их решение, не так уж много, согласитесь? Всего имеется 93 билета по 20 вопросов(Харьковские билеты). В итоге, за 2 месяца тренировок я уже на 90% вопросов отвечал верно и был уверен в своих силах, при условии, что меня не будут валить. Мне стопиццот раз рассказывали, что в ГАИ для проведения экзамена имеется специальная программулина и она заточена таким образом, что "нужные" люди сдадут экзамен неважно правильно они отвечают на вопросы или нет. Естественно было бы предположить, что она может работать и в обратном направлении. Немного забегая наперёд, поделюсь наблюдением - в программулине есть внизу строка состояния, она показывает на сколько вопросов ты уже ответил, сколько неправильных ответов, сколько времени осталось до конца, и особенно мне бросилось в глаза поле "Режим" и его значение "Обычный" :-)
 
   С вождением все было немного сложнее - всё мое вождение ограничилось 10-тью занятиями по регламентированно 2, а реально по 1,5 часа из которых я к тому же одно пропустил. Первое занятие было как и первый блин - тык-мык, то глохнет, то прыгает, то не едет. Дальше все пошло веселее, за рулём я начал себя чувствовать увереннее, начал успевать следить одновременно за управлением авто, знаками, светофорами и дорожным движением. Пару слов об учебном авто - Dacia Nova GTI, ядовито желтая, без усилителя руля(о чем я, кстати, ни разу не пожалел на сдаче вождения в ГАИ), с непонятно как отрегулированными педалями - короче, не сразу мы с ней сошлись. Инструктор неплохой мужик опытный, не давал мне партачить за рулём, хоть и трепались мы с ним всю дорогу постоянно, но работу свою делал четко, следил за мной как Око Саурона. Я ему сразу заявил, что сдавать буду сам, на что он ответил "Ну, если билеты выучишь, вполне можешь и сдать. На вождении тебя валить никто не будет". На площадке в ГАИ мы были всего 3 раза. Упражнения на экзамене, если кто не знает, такие:
  • заезд задом в "гараж"
  • разворот в ограниченном пространстве
  • эстакада - трогание на подъем с ручника
Всего лишь 3 упражнения. В принципе, как мне кажется, у меня все получалось довольно неплохо - я никогда не спрашивал у инструктора нормально у меня получается или нет, а он всегда молча мне ставил в табель "4-". Только на последнем занятии он сказал, что есть в группе девчёнки до которых мне еще расти и расти, хотя и опыта вождения у них до автошколы не было.
 
   Внутренний экзамен в автошколе по теории я сдал всего лишь с одной ошибкой, хотя его все "сдали". Экзамен в ГАИ для всей группы был назначен на 8 ноября. 8 ноября у меня прийти не получалось так как предстояла командировка в Киев. В итоге, с преподавателем договорились, что приду 9-го числа после обеда и буду сдавать один. 9-го числа я отпросился с работы "Иду сдавать экзамен в ГАИ. - Платил? - Нет, сам хочу попробовать. - Значит не сдашь. Доказано миллион раз" и снова мне начали рассказывать страшилки о злобных гаишниках, отчаянных дураках, которые пытались сдавать сами да потом все равно несли деньги, поджатых педальках тормоза на эстакаде и тд.  Короче настрой был не самый лучший. В полтретьего я был в ГАИ, зашел в экзаменационный класс, меня посадили за компьютер, кроме меня никого не было, я с дрожью в теле и замиранием сердца начал отвечать на вопросы в "Обычном" режиме :-). Как ни странно на первые 2 вопроса я ответил правильно, на последующие 5 или 7 тоже. потом ошибка, потом правильно, еще правильно, снова верно, "лять, ошибка!"..."Андрей, молодец, сдал" - это сказал гаишник, который сидит на пульте и контролирует процесс сдачи. 18 из 20! Как заказывали! "Только машины дежурной уже нет, можешь завтра прийти с утра сдавать вождение."  Ненене! Я начал вызванивать инструктора, чтобы он приехал и я сдавал на его машине(так можно!!!), инструктор был занят, потом увидел машину нашей автошколы во дворе, позвонил преподавателю, он сказал, это машина директора автошколы, что можно найти его и попросится сдать на его машине. Я его нашел, но он не разрешил. В итоге, мы с гаишником пошли на площадку, выдернули там машину другой автошколы - Chevy Aveo с усилителем руля, плавным ходом педалей, а оказалось, что это таааак непривычно и неудобно! ведь я то привык к своей учебной машинке, где руль поворачивать нужно тремя руками, а чтобы обороты ловить нужно иметь особое строение ушной раковины. Вообщем, как-то поехали, как-то заехали задним ходом в гараж, как-то взобрались на эстакаду, как-то вернулись на исходную, потом пошли обратно в ГАИ и написали мне в документах, что я сдал экзамен :-) Только вот права сразу не дали - нет бланков. Но это уже нестрашно, пару недель я потерплю.

вторник, 18 октября 2011 г.

На права без взяток? да ну как же!

Сижу учу ПДД. Экзамен в ноябре. Буду пробовать сдаться своими силами - договорился о нескольких дополнительных индивах по вождению, конкретно налегаю на билеты... Млин! КАК? сдавать экзамен, если даже в онлайн-билетах содержатся подвохи?!


В данной ситуации водителю грузовика опережение запрещено, так как в населенном пункте максимальная скорость движения 60 км/ч.  НО "правильный" ответ - опережение "Разрешено" потому, что знак 3.26 "Конец запрещения обгона" превратился в 3.30 "Конец ограничения максимальной скорости" 50 км/ч, а мы оказались вне населенного пункта почему-то. Пардоньте! Во-первых, где знак "Конец населенного пункта"? Во-вторых, где там взялся знак 3.30, за деревом спрятался, как обычно?

Ну я, конечно, слышал слухи, что при сдаче теории в ГАИ неправильные ответы имеют место быть "по умолчанию", но, чтобы так откровенно... Напомню, билеты на этом сайте - это реальные билеты(Киевское издание) для сдачи экзамена в ГАИ.

UPDATE: Йода Магистр в билете несомненно этом условие составлял.


пятница, 2 сентября 2011 г.

Здравствуйте, я ваш кастомер!

История одного фэйла :)

Сегодня к нам приехал из Штатов кастомер. Сам он индус,  живет там уже почти 30 лет. Прикольный дядька,компанейский такой. Ну, короче, познакомились, "хау ду ю ду?", "глэд ту си ю!", то да сё, и кто-то предложил вечером сходить двинуть пивка в ближайший кабак. Да гавно вопрос!... Сидим в кабаке пьем. А Рао(кастомер) последние полтора суток питался только ништяками, которые в самолетах дают, стало быть голодный как волк, но молчит из вежливости. "Давай", - говорим, - "покушать себе закажи, пока сознание не потерял". А он: "Да я, мол, не в курсе чего у вас тут съедобное, закажите мне чего-нибудь на ваш выбор". Ну и я, от всей души желая спасти Рао от голодной смерти, выискал в меню самый увесистый стэйк из телятины и картошку-фри и попросил официантку все это как можно быстрее приготовить и подать. Когда блюдо принесли, Рао бросил на нас озадаченный взгляд и сконфужено спросил "Is it beef?"("Это телятина?"). Ну мы в ответ - "Йес, мол, да - самая лучшая телятина, вкусно, ням-ням!".

FAIL: Только через полчаса меня осенило! Корова у индусов - священное животное, её не то что есть, пальцем трогать грешно! И было мне и стыдно, и смешно одновременно. Вот такая фигня сегодня случилась.


А стэйк Рао все-таки съел. :) Голод даже индусу не тётка.

среда, 6 июля 2011 г.

Идиллия

Настоящая идиллия глазами программера:
Приходишь с работы часиков в 9 вечера, дома бардак, комп занят, за компом любимая девушка шпилит в "Как достать соседа". Зашел, рыкнул - ррраз! кушать подано, комп свободен, кот забился в кладовку. Лепота!


пятница, 1 июля 2011 г.

Константная ссылка на временный объект

Век живи - век учись!

Только намедни узнал о том, что привязка временного объекта к константной ссылке продлевает жизнь временного объекта до тех пор, пока живет сама ссылка. Это декларирует Стандарт(р12.2.5).

Например, в результате работы следующего кода, на экран будет выведено "temporary string". Удивительно, не правда ли!

string foo()
{
    return string("temporary string");
}

int _tmain(int argc, _TCHAR* argv[])
{
    const string& str = foo();
    cout << str.c_str(); // outputs "temporary string"

    return 0;
}

суббота, 25 июня 2011 г.

Интересные задачки для собеседований по C++

Помимо выслушивания зазубренных ответов на стандартные вопросы типа

"Что такое полиморфизм?",
"Что представляет собой STL?",
"Какое отличие между std::auto_ptr и boost::shared_ptr?",

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

Вот чтобы выявлять таких вот нерадивых кандидатов, я решил помимо  списка вопросов составить список задачек, которые буду предлагать на собеседованиях. Приглашаю всех поучаствовать в составлении.
  • Заменить в битовом представлении числа самый правый ноль на единицу.
int ReplaceLastZeroWithOne( int i )
{
    return i | ( i + 1);
}

  • Вывести число как последовательность битов в прямом и обратном порядке.
// Решение в лоб
void OutputBitsReverse( int i )
{
    while( i )
    {
        if( i < 2 )
        {
            cout << i;
        }
        else
        {
            short bit = i % 2;
            cout << bit;
        }

        i /= 2;
    }
}
 
void OutputBitsReverse(unsigned val)
{
    unsigned reverseMask = 1;
    printf("%u = ", val);

    for( unsigned i = 1; i <= 32; i++)
    {
        putchar(val & reverseMask ? '1' : '0');
        val >>= 1 ;
    }   
}

void OutputBitsForward(unsigned val)
{
   unsigned forwardMask = 1 << 31;
   printf("%u = ", val);

   for( unsigned i = 1; i <= 32; i++)
   {
      putchar(val & forwardMask ? '1' : '0');
      val <<= 1 ;
   }
}
  • Реализовать функцию atoi() для целых неотрицательных чисел в десятичном формате.
// Решение в лоб, без дополнительных проверок на переполнение
int atoi_( const char* src )
{
    if( !src )
    {
        return 0;
    }
 
    int result = 0;
    int strlen = 0;
    const char* tmp = src;
    char ch;

    while( ch = *tmp++ )
    {
        if( ( '0' > ch ) || ( '9' < ch ) )
        {
            return 0;
        }

        ++strlen;
    }

    while( *src )
    {
        int digit = *src++ - '0';
        double base = 10;
        result += digit * pow( base, --strlen );
    }

    return result;
}

воскресенье, 12 июня 2011 г.

Кто что слушает на работе?

Open space - есмь Зло! Хрен оспоришь. Постоянный гул, ржач, коллы с кустомерами, споры и холивары. Конечно, все эти прелести во многом зависят от культуры вас окружающих людей, но факт остается фактом - Open Space = Ад! В одной из моих прошлых контор, я мог начать работать только часов в 5 вечера, соответственно домой приходил к ночи.

Вот почему в опен спейсе у каждого работника есть огромные студийные наушники - Коссы, Шенхейзеры, Свэны и т.д. Иногда просто нужно сосредоточиться на некоторое время, чтобы ни на что не отвлекаться и никого не слышать.

Но интеллектуальная деятельность совместима далеко не с любыми видами музыки, и музыка может отвлекать и мешать сосредоточиться не меньше чем факторы окружающей среды. Например, тяжелая музыка просто вырубает мозг, рэпчик отвлекает внимание так как начинаешь вслушиваться в речетатив, ну и так далее. Мне более всего подходит jazz, ambient, просто легкая фоновая музыка, new age, иногда. У меня нет любимых исполнителей на этом поприще, я даже не задумываюсь, что я слушаю и для души я слушаю совершенно другую музыку. Но для фона такая музыка самое оно - успокаивает, поднимает настроение, помогает сконцентрироваться, отрешиться от окружающего мира.

Чаще всего я слушаю радио Abalone. Попробуйте, может и вам поможет.

ЗЫ Это не реклама =)



вторник, 7 июня 2011 г.

Получение букв дисков приаттаченых к USB девайсам (Enum drive letters attached to USB devices)

WinAPI-шная функция GetDriveType() имеет существенный недостаток - она определяет USB hard drive'ы как фиксированные диски DRIVE_FIXED. Недавно мне понадобился функционал, который бы отличал настоящие жесткие диски от USB. Как оказалось, задача почему-то решается нетривиально - либо через WMI, либо через SetupAPI. WMI не подходил всвязи со спецификой проекта, оставался SetupAPI. Полдня изучения основ SetupApi и полдня гугления, изучения экзэмплов и чтения форумов привели меня на CodeProject, где я и нашел решение.  Так вот хочу я вам сказать, мои дорогие друзья, я бы в жизни не подумал, что эта задача решается настолько через жопу!
Но нашелся у меня в тиме человек, который буквально за полтора часа  родил компактное и лаконичное решение. Собственно, не могу не поделится.

bool IsUsbDevice( wchar_t letter )
 {
  wchar_t volumeAccessPath[] = L"\\\\.\\X:";
  volumeAccessPath[4] = letter;

  HANDLE deviceHandle = CreateFileW(
   volumeAccessPath,
   0,                // no access to the drive
   FILE_SHARE_READ | // share mode
   FILE_SHARE_WRITE, 
   NULL,             // default security attributes
   OPEN_EXISTING,    // disposition
   0,                // file attributes
   NULL);            // do not copy file attributes

  // setup query
  STORAGE_PROPERTY_QUERY query;
  memset(&query, 0, sizeof(query));
  query.PropertyId = StorageDeviceProperty;
  query.QueryType = PropertyStandardQuery;
  
  // issue query
  DWORD bytes;
  STORAGE_DEVICE_DESCRIPTOR devd;
  STORAGE_BUS_TYPE busType = BusTypeUnknown;

  if (DeviceIoControl(deviceHandle,
   IOCTL_STORAGE_QUERY_PROPERTY,
   &query, sizeof(query),
   &devd, sizeof(devd),
   &bytes, NULL))
  {
   busType = devd.BusType;
  }
  else
  {
   std::wcout << L"Failed to define bus type for: " << letter;
  }
  
  CloseHandle(deviceHandle);

  return BusTypeUsb == busType;
 }

четверг, 26 мая 2011 г.

Проблемы со Skype - Май 26, 2011

Тем временем как весь мир находится в панике по поводу неработающего Skype, у меня все очень даже работает =) Тем не менее, я не могу не поделится со страждущими.

Переводить лень, так что как-нибудь сами


A small number of you may have had problems signing in to Skype. This predominantly affects people using Skype for Windows. We have identified the problem and will issue a fix in the next few hours.
In the meantime, you can follow the steps below to fix the problem manually.

Windows

       
  1. Click Start, type run and press Enter. (On Windows XP: Click Start and then Run.)
  2.    
  3. Type the following and click OK.
  4.    %appdata%\skype    
  5. Locate and delete the file shared.xml
  6.    
  7. If you cannot find this file:    
             
    1. Click Start, type run and press Enter. (On Windows XP: Click Start and then Run.)
    2.        
    3. Type the following and click OK.
    4.        control folders        
    5. In the View tab, ensure that Show hidden files and folders is enabled.
    6.        
    7. Repeat steps 1-3.
    8.    
       
  8.    
  9. Restart Skype. 

Mac

       
  1. Open Finder and locate the following folder:
  2.    ~/Library/Application Support/Skype    
  3. Delete the file shared.xml.
  4.    
  5. Restart Skype.
Please note that the ~ sign means your home folder. You can find your home folder by opening Finder and selecting Go > Home from the menu bar or pressing Command (Apple), Shift and H keys at the same time.

Linux

       
  1. Go to the following folder:
  2.    /home/YourLinuxUserName/.Skype    
  3. Delete the file shared.xml.
  4.    
  5. Restart Skype.
Remember: The Skype folder is a hidden folder - please check Show hidden files in your file browser to view and access it.

Обновляющееся ссылко на первоисточник http://heartbeat.skype.com/2011/05/problems_signing_into_skype_an.html

пятница, 4 марта 2011 г.

[ВИДЕО] Волшебники Электронной Эры

Достопочтенный хабровчанин artifex поделился очень интересным документальным фильмом "Hackers - Wizards of the Electronic Age" снятом в 1984 году, и рассказывающем о хакерах того времени.

При участии:  Steve Wozniak, Andy Hertzfeld, Bill Atkinson, Lee Felsenstein, Richard Stallman, Richard Greenblatt, Steven Levy and others.

 Фильм оказался очень интересным и весьма познавательным. Ну, во-первых, начнем с того, что в контексте фильма "хакерами" называют не тех людей, которые взламывают сайты Пентагонов или пишут вирусы, а компьютерных энтузиастов, создающих революционные продукты ради забавы. Также оказалось, что понятие share-ware и open-source software возникло в начале 80-х годов, и уже тогда люди делали на этом бизнес, сапортя ПО и занимаясь консалтингом. И уж вообще я офигел, когда некий бородатый малый продемонстрировал програмулину до боли похожую на старый добрый Paint, в которой он редактировал фотографии, залитые с цифровой камеры. Я почему-то думал, что в те годы единственным интерфейсом пользователя были зелененькие буквочки на черном экране размером меньшим чем у моего КПК. В 1995 году отец притащил с работы системник от Sinclair'a, он переделал старую ч/б Березку под моник и  раздобыл где-то квадратную клаву, похожую на печатную машинку - я думал, что это крутейший комп. Там стоял TR-DOS, был текстовый редактор, можно было катать в Принца Персии, и даже писать музыку! И теперь я понял, что являлся обладателем винтажного барахла. Немного, знаете ли обидно за трудное детство...

Ну да ладно воспоминаний - давайте смотреть кино...


вторник, 22 февраля 2011 г.

God Mode в Windows7




Что такое режим Бога в Windows 7 - это возможность управлять всеми настройками системы из одного окна! Настройки разбиты по категориям. Всего элементов настройки 279, по крайней мере у меня.

Войти в режим Бога можно следующим образом - на рабочем столе создаете новую папку, переименовываете ее в GodMode.{ED7BA470-8E54-465E-825C-99712043E01C} - на Рабочем Столе появляется иконка с названием God Mode. Даблкликаете по иконке и открывается окно с настройками. Все, Вы - Бох :-)





















UPDATE:
  1. На самом деле папку можно назвать как угодно - имеется ввиду, что не обязятельно называть ее GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}. Тот же трюк прокатит, если Вы назовёте ее, например, DescendantsOfSatan.{ED7BA470-8E54-465E-825C-99712043E01C}.
  2. Ходят слухи, что на 64-разрядной системе, использование этого хака может привести к крэшу системы, поэтому используйте его на свой страх и риск.

понедельник, 21 февраля 2011 г.

VsBuildStatus add-in для MSVC или "Время == деньги"

Обычно, когда мне нужно сбилдить большой солюшн, я запускаю билд, сворачиваю Visual Studio и дальше занимаюсь своими делами на компьютере. Допустим, солюшн билдится минут 20, и я это знаю и считаю, что у меня есть свободных 20 минут посидеть в инете или почитать книжку. Но я не знаю, что в код закралась синтаксическая ошибка, соответственно билд свалился, но я об этом узнал только спустя 20 минут, когда решил, что пора снова начинать работать. Или же я как дурачек через каждые 2-3 минуты открываю студию и смотрю, а не свалилось ли че-нить. И в том, и в другом случае я теряю драгоценное время - в первом на то, чтобы снова запустить сборку, во втором я тупо не могу в течении 20-ти минут на что нибудь спокойно отвлечься.

VsBuildStatus add-in для Visual Studio - это прекраснейшее средство мониторинга процесса сборки. Он выглядит как окошко-тулбар, которое открывается, когда вы запускаете build/clean/rebuild, и содержит список проектов Вашего солюшна. Для каждого проекта отображается прогресс - это особенно удобно, когда у вас многопроцессорная система и несколько проектов собираются одновременно. Также отображается общий прогресс, исходя из которого Вы можете приблизтельно прикинуть сколько времени осталось, и спокойно себе пить кофе и сёрфать по Хабру, к примеру.



Также в окне отображаются проекты которые уже были собраны, какие еще нет, какие собрались с ошибками.

Но самая вкуснятина досталась счастливым обладателям Window 7 - при сворачивании Vusual Studio, прогресс сборки отображается прямо в значке студию на тулбаре.



Если в процессе сборки была выявлена ошибка, это будет сразу же отображено в строке прогресса.


Красотища? Определённо! Теперь можно и вовсе не отвлекаться на то, чтобы открывать-закрывать IDE!

И напоследок - least but not last - еще одна приятная плюшка. Макрос для Visual Studio, который автоматически прекращает сборку при обнаружении первой ошибки

Private Sub OutputWindowEvents_OnPaneUpdated(ByVal pPane As OutputWindowPane) Handles OutputWindowEvents.PaneUpdated
        If Not (pPane.Name = "Build") Then Exit Sub

        Dim foundError As Boolean = pPane.TextDocument.StartPoint.CreateEditPoint().FindPattern(": error")
        Dim foundFatal As Boolean = pPane.TextDocument.StartPoint.CreateEditPoint().FindPattern(": fatal error")

        If foundError Or foundFatal Then
            DTE.ExecuteCommand("Build.Cancel")
        End If
    End Sub


    Private Sub BuildEvents_OnBuildProjConfigDone(ByVal Project As String, ByVal ProjectConfig As String, ByVal Platform As String, ByVal SolutionConfig As String, ByVal Success As Boolean) Handles BuildEvents.OnBuildProjConfigDone

        If Success = False Then
            DTE.ExecuteCommand("Build.Cancel")
        End If

    End Sub

Задеплоить макрос очень просто:
  1. В IDE выбираем в меню Tools->Macros->Macro IDE(или Alt+F11)
  2. В открывшемся Macro IDE в Project Explorer раскрываем список Samples
  3. В списке Samples открываем Environment Events и копипастим текст макроса между маркерами Begin Module и End Module
  4. Сохраняем
  5. PROFIT!

Ссылки:

вторник, 15 февраля 2011 г.

Джентельменский набор маньяков - Windows reverse engineering

Так как моя работа уже более полугода как связана с сабжем, приведу список инструментов без которых не обходится ни один мой рабочий день. Номер в списке с приоритетом никак не связан.
  1. Microsoft Visual Studio 2008 Professional - средство разработки и отладки. Думаю, комментировать тут нечего.
  2. Книга "Windows Internals 5th.ed." - авторства знаменитого Марка Руссиновича, рассказывает о том, что осталось за бортом официальных мануалов Microsoft'a. И, скажем так, Microsoft от этого не в восторге. Если описывать в двух словах, я бы описал ее так - "Тру кулХацкерам посвящается...".
  3. Утилита Procexp - из набора Sysinternals Suite, разработки того же Руссиновича. Представляет продвинутый Task Manager. Из всех фич, я более всего ценю следующие:
    • Список запущенных процессов представлен древовидной иерархией.
    • Список модулей, загруженных процессом
    • Списко хэндлов открытых процессом
    • Информация о запущенных потоках с возможностью просмотра стэка
  4. Утилита Procmon - из вышеупомянутого набора. Монитор активности процессов c потрясающим механизмом фильтрации событий. Составляет журнал всех операций совершенных процессом по отношению к реестру, файловой системе, операций связанных с сетевой активностью. По каждой операции можно просмотреть ее аргументы(например, имя открываемого файла, или с какими правами он открывается), результат выполнения и стэк. Незаменимая утилита при анализе ошибок в работе приложений, когда нет ни исходных кодов приложения, ни отладочной информации, ни документации - короче, черный ящик.
  5. Отладочная информация для системных dll-ок - взятая с Microsoft Symbol Server. Используется Procexp и Procmon утилитами для показа читабельного стэка вызовов. Загружается с серверов Microsoft'a по мере надобности автоматически, хотя можно скачать весь пакет сразу.
  6. Утилита WinDbg - использую для просмотра crash dump'ов. Но может использоваться и для отладки запущенных приложений. Пока не очень хорошо в ней разбираюсь, посему, скромно промолчу.
  7. Microsoft Visual Studio Remote Debugging Monitor - использую для удаленной отладки приложений вкупе с MSVC.
  8. Виртуальная машина на базе VMware Workstation - так как реверс инжинеринг - это дело весьма низкоуровневое и хачить систему приходится постоянно, то всегда существует опасноть того, что в любой момент может накрыть Синька, оно же BSOD, оно же Синий Экран Смерти, и дабы не подставлять основную ось под "Крававый Молот Рагнарёка"(кодовое название моего проекта =) ), отладка и тестирование ведется на виртуальной машине.
  9. http://www.reactos.org/ - эти хлопцы весьма успешно продвигаются в создании ОС аналогичной Windows, но с открытыми кодами. Аналогичной - мягко сказано, можно сказать, что они передирают ее один в один, с сохранением сигнатур API-шных функций и структур данных. Реализация функций тоже весьма схожа, хлопцы наверное часами сидят с декомпилятором. В эти исходники я частенько заглядываю, чтобы узнать, как работает та или иная API функция или посмотреть на структуру, на которую указывает хэндл возвращаемый? например, OpenScmManager().
  10. http://www.insidetheregistry.com/ - описание назначения всевозможных ключей реестра
  11. MSDN - как ни крути, а все же основной источник информации
  12. Много кофе
  13. Железные нервы
  14. Стена, об которую можно биться головой, если нервы таки сдают.

пятница, 4 февраля 2011 г.

Как козаки в футбол доигрались

Наконец-то мне починили коленный сустав. Спустя аж 4 месяца после футбольной травмы. Началось все как "простое растяжение", а закончилось:

Мр-признаки повреждения латерального мениска 3-й ст., медиального мениска 2-й с., частичного разрыва передней крестообразной и латеральной коллатеральной связок, реактивного синовиита.


Лечится это дело с помощью оперативного вмешательства - так называемая артроскопия, относящаяся к разряду малоинвазивных процедур. Мелоинвазивных - значит, что операция проводится с наименьшими повреждениями живых тканий. Выглядит это приблизительно так - в области коленного сустава проделываются 2 отверстия диаметром с карандаш и глубиной пол-сантиметра. Через отверстия водятся различные хирургические инструменты - скальпели, щипцы, крючки и т.д. Так же в отверстие вводится маленькая камера, которая дает хирургам оценить степень повреждений, ну и вообще помогает контролировать свои действия.

А вообще, лучше один раз увидеть...


Вот такая вот бяка.

По сути, ничего страшного в этой операции нет. Выписали меня на следующий день, прописали костыли в течении 3-х дней, специальную гимнастику. А через пару недель можно потихоньку приступать к физическим нагрузкам - пробежки, велосипед...вообщем восстанавливается все довольно быстро.
 
В моем случае, единственная проблема - это разрыв крестообразной связки, которая придает усточивость суставу. Вообщем, мне часть этой связки удалили, так как она оторвалась и болталась как культя. В перспективе, это чревато тем, что у меня может "вылетать" из сустава колено, собственно, это и случилось при травме. Если такое случиться снова, придся делать еще одну операцию, наааамного менее приятную, - пластика связки.


 Побежали мурашки? У меня тоже. Надеюсь, этого все-таки не случиться. Ну и напоследок, фото с линии фронта



UPDATE: Таки колено в суставе не держится. Недавно опять вылетело, практически на ровном месте - боль адская. Врач говорил, что порванная связка приросла в другое место, что в принципе хорошо. Так вот, по-моему, она оторвалась снова. Нацелен на повторную операцию - пластику связки. Ходить, в принципе могу, бегать только трусцой и только по ровной поверхности, но после пробежки все-равно колено болит. Вообщем, не хочется себя чувствовать инвалидом....А! Поправился за все время на 8 кг, т.к. активным спортом заниматься не могу! Короче, лето еще погуляю. и под нож... о результатах доложу

четверг, 27 января 2011 г.

Debug Visual C++ Redistributable Package своими руками

Довольно частое явление когда у клиента девственно чистый компьютер - в смысле без Visual Studio, а вам необходимо запустить debug версию вашего приложения на C++ для отладки например. Если ваша сборка использует динамическую линковку системных DLL, то почти наверняка ваше приложение не загрузится. Скорее всего причина кроется в том, что у клиента не установлен Visual C++ Redistributable Package. На сайте Microsoft лежат такие package, но только для release, для debug вы их там не найдете:

Microsoft Visual C++ 2005 Redistributable Package (x86)
Microsoft Visual C++ 2005 Redistributable Package (x64)
Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)
Microsoft Visual C++ 2005 SP1 Redistributable Package (x64)
Microsoft Visual C++ 2008 Redistributable Package (x86)
Microsoft Visual C++ 2008 Redistributable Package (x64)
Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)
Microsoft Visual C++ 2008 SP1 Redistributable Package (x64)


Так как же быть? Создадим такой package сами. Открываем Visual Studio, создаем новый solution. В диалоге выбора типа проекта выбираем Other Project Typoes
Setup Project. Потом добавляем необходимые merge module в проект и компилируем. Учтите, что для каждой платформы будь то x86 или x64 необходимо создать свой project в solution. Не забываем добавлять соответствующие policy. В х64 вариант обьязательно добавляем merge module для x86. Ниже приведен список необходимых merge module для:

Visual Studion 2005 (DebugCRT x86)
Microsoft_VC80_DebugCRT_x86.msm
policy_8_0_Microsoft_VC80_DebugCRT_x86.msm
Visual Studion 2005 (DebugCRT x64)
Microsoft_VC80_DebugCRT_x86.msm
Microsoft_VC80_DebugCRT_x86_x64.msm
policy_8_0_Microsoft_VC80_DebugCRT_x86.msm
policy_8_0_Microsoft_VC80_DebugCRT_x86_x64.msm
Visual Studion 2008 (DebugCRT x86)
Microsoft_VC90_DebugCRT_x86.msm
policy_9_0_Microsoft_VC90_DebugCRT_x86.msm
Visual Studion 2008 (DebugCRT x64)
Microsoft_VC90_DebugCRT_x86.msm
Microsoft_VC90_DebugCRT_x86_x64.msm
policy_9_0_Microsoft_VC90_DebugCRT_x86.msm
policy_9_0_Microsoft_VC90_DebugCRT_x86_x64.msm

Если вы используете MFC, то дополнительно добовляете MFC merge module в соответствующий проект по аналогии - имена должны содержать DebugMFC.

Остается только скомпилировать ваш solution и в результате вы получите msi для установки на компьютере клиента. Рекомендую также правильно и солидно назвать исталляцию и сменить имя msi файла, чтобы на стороне клиента это все не выглядело поделкой на коленке.

P.S. Стиль когда нужные сисетмные DLL кладутся в проект рядом с вашим приложением на мой взгляд является анахронизмом, хоть и работает. С другой стороны мне несложно придумать конфигурацию, когда такой фокус уже не прокатит. Самый простой пример: ваше приложение для x86 и для x64 лежат в одном каталоге.

P.P.S Все доступные merge module хрянятся в "%CommonProgramFiles%\Merge Modules".


Cсылка на источник: http://workblog.pilin.name/2009/02/debug-visual-c-redistributable-package.html

Автору огромный Респект!

Апгрейд Windows XP Home до Professional без переустановки

Сегодня я расскажу вам о способе, который позволяет без переустановки проапгрейдить Windows XP Home до Professional. Официально, это невозможно, а значит способ этот не совсем легитимный, хотя может использоваться и на вполне законных основаниях. Под законными основаниями я подразумеваю, что Вы каким-то образом раздобыли лицензию для XP Pro - купили, украли, нашли...неважно. Если у Вас есть лицензия, Microsoft не будет против. Другое дело, если лицензии у Вас нет, то есть, фактически, вы злобно хачите Windows, лишая мелкомягких своих кровных. В таком случае, Microsoft наказывает. Жестоко наказывает! А именно, Вы лишаетесь и той лицензии, которой обладаете, то есть Ваша Windows становиться пиратской. Хотя кому я это говорю - в стране, где 99% софта тупо тырится, этим никого не проймёшь.

Довольно слов, перейдем к делу
  1. Откройте редактор реестра - выполните команду "regedit"
  2. В редакторе откройте раздел HKEY_LOCAL_MACHINE/SYSTEM/ControlSet00X/Control/ProductOptions, где X - самое большое число.
  3. Удалите ключ ProductSuite
  4. Создайте новый ключ типа DWORD с именем Brand
  5. Назначьте созданному ключу значение 0
  6. Перезагрузите систему
  7. При перезагрузке, после появления экрана BIOS, нажмите F8, чтобы попасть в меню загрузки Windows
  8. Выбирите раздел Last Known Goog Configuration(LNG) и нажмите Enter
После выполнения этих инструкций система загрузится как Windows XP Professional Edition.

ЗЫ Прочтите следующую информацию, дабы избежать недоразумений при выполнении 2-го пункта инструкций.

Для дублирования настроек Windows важной информации по драйверам, сервисам и т.д. в ветвях реестра — появились ветви реестра


HKEY_LOCAL_MACHINE\SYSTEM\CONTROLSET001, HKEY_LOCAL_MACHINE\SYSTEM\CONTROLSET002 и так далее

Каждая из этих ветвей содержит в себе конфигурацию системы в разные моменты времени, а ветвь реестра HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET является лишь ссылкой на один из приведенных подразделов реестра Windows которая загружена в тек.момент.

В ветви HKEY_LOCAL_MACHINE\SYSTEM\SELECT есть параметры.

Default - определяет какая копия раздела CONTROLSET будет загружена при нормальной загрузке системы
Current - определяет номер текущей копии раздела CONTROLSET, на которую ссылается подраздел CURRENTCONTROLSET.
LastKnownGood - параметр копии раздела COTROLSET, при использовании альтернативной загрузки ЗАГРУЗКА ПОСЛЕДНЕЙ УДАЧНОЙ КОНФИГУРАЦИИ
Failed - параметра определяет раздел COTROLSET, при предыдущей загрузке которого произошел какой-то сбой, и загрузка была прервана.


Ссылка на источник: http://www.mydigitallife.info/2008/06/13/convert-and-upgrade-windows-xp-home-to-professional-without-reinstalling/