Показаны сообщения с ярлыком работа. Показать все сообщения
Показаны сообщения с ярлыком работа. Показать все сообщения

суббота, 11 августа 2012 г.

Как я в Индию летел

Сюжет так лихо разворачивается, что не пожалею для него поста. Следует заметить, что само действо еще не закончилось,  а находится в самом разгаре, так что заметки непосредственно с места событий. Буду обновлять по ходу дела...

Предистория: нарисовалась коммандировка в Индию, резко так причем нарисовалась длительностью в 3 недели. Так как сказали "Фпирьот!" всего за несколько дней, то варианты маршрута были ограничены и заранее не спланированы: либо через ехать из Харькова в Киев поездом, потом самолетом с пересадками Киев-Домодедово-ОАЭ(Абу Даби)-Индия(Хайдарабад), либо прямо из Харькова на самолете Харьков-Москоу-Абу Даби-Хайдарабад. Ну я, конечно, выбрал второй вариант - во-первых, не нужно пилить в Киев, во-вторых, вылет на день позже, а значит больше время на сборы. Не учел одного - в Москоу нужно будет сменить аэропорт, а именно из Шереметьево пилить в Домодедово. Ну да не беда, между аэропортами ходит такая штука Аэроэкспресс, ходит она конечно с такой же скоростью как и все остальные допотопные электрички, но в отличии от них идет без остановок и внутри поприличней - чистенько нарядненько. Но и тут прокралось западло - нет прямого аэорэкспресса между аэропортами, нужно ехать от Шереметьево на экспрессе до ст. метро Белорусский Вокзал, потом на метро до Павелецкого вокзала, потом от него опять на аэроэкспрессе до Домодедова. Кстати, стоит он недешево - весь трансфер около 150 грн. Заняло это по времени 2 часа, Итого, где-то за полтора часа до вылета я был в Домодедово. И вот там я в который раз с отечественным нашим родным "все через жопу": очередей организованных нет, а людей тьма просто, работники аэропорта какие-то озлобленные, сломался конвеер, который шмотки в рентгеновский ящик передвигает, в итоге, работницы орали "Пассажиры, двигайте вещи внутрь сами". Из-за наплыва людей личного отключили кабину металлоискатель и люди просто проходили сквозь нее непрерывным потоком чуть ли не по трое в шеренгу. Какой-то дикий и темный народ напяливал бахилы прямо на обувь вместо того чтобы сдавать ее в досмотр и одевать бахилы на ноги, вообщем цирк. Дальше больше, наш аэропорт попал в ПРОБКУ(Москва такая Москва...) и вылет задержался на 2 часа. Из-за этого, прилетев из Домодедово в ОАЭ на пересадку, я помахал ручкой вслед улетевшему без меня самолету( на 10 минут буквально опоздал ) и пошел в Customer Service решать вопрос. Вопрос решился крайне замечательным образом - меня определили, ясен пень бесплатно, на следующий рейс, который, внимание!, через СУТКИ. На сутки меня поселил в зал ожидание очень такой неплохой, с бесплатной и очень вкусной(и не потому, что халявной!) едой и напитками. В данный момент ищут возможность определить меня в гостинничный номер при аэропорте. Вообщем, не так все плохо и печально. Одно напрягает - багаж мой еще не нашли...
На пока всё. Меня дико вырубает спать, я не спал уже сутки, и еще хочется жахнуть алкоголя снять стресс, что я, наверное, сейчас и сделаю...

Далi буде, не перемикайте канал...

Фото зала ожидания(Al Reems Lounge)




UPD: 8 часов до вылета, 2PM по местному. Комнату в отеле мне не предоставили, хотя, наверное, должны были и мне следовало быть настойчивей. Зато предложили арендовать за 150$, хотя администратор в зале ожидания говорила мне, что стоит она 85$, на эту сумму на тот момент я готов был раскошелиться, просто помирал так спать хотелось. Еще один момент, если я снимаю(или мне предоставляют) комнату в отеле, то я больше не могу ходить в зао ожидания и кушать там бесплатную вкусную еду :) Вообщем, я остался в зале ожидания.

А вот так я там спал


К этому времени у меня полностью сдохла батаррея ноута и почти сдохла батаррея на планшете. Розетки в аэропорту Абу-Даби совсем не такие как у нас или штатах, так что мой переходник оказался никуда не годным. Подошел к администратору, он наделил меня мега-универсальным переходником так, что теперь я опять на связи. Правда в залог взяли мой boarding pass, главное теперь не забыть его забрать. Воооттт.... пока всё

Вот такой переходник и розтка, может кому пригодится данная информация






UPD: Вот и долетел =) Прикольно, торговаться начинают уже в аэропорту как только ты прошел таможенный контроль. Разменял 20 баксов - начали уламывать разменять больше. Конечно, в аэропортах курс рупии самый высокий в Индии. Дальше в Duty Free купил 2 бутылки Jack Daniels по 30 баксов, с 2 минуты уламывали взять 2 разных бутылки - вторая стоила 49 долларов.
Ну, вообщем-то, тут тема рассказа исчерпана, но далi буде непременно...

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

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

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

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

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


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

воскресенье, 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;
 }

понедельник, 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. Стена, об которую можно биться головой, если нервы таки сдают.

четверг, 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

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