Category: работа

Category was added automatically. Read all entries about "работа".

питер, Леша

Перезагрузка

Пришла пора устанавливать обновления Windows, и поэтому пришлось перезагрузить рабочий ноутбук.

Время работы: , почти месяц.

Как часто вы перезагружаете компьютер?
питер, Леша

Один годик

Как быстро летит время. Новой работе уже годик. А представительство компании, где я работал до этого, вообще закрылось в сентябре 2014 г., теперь остался только вид из офиса, действительно на память.

В целом — я доволен.
питер, Леша

Я в C++ шоке

Испытал настоящий шок, когда докопался до сути проблемы: C++ разрешает использовать черную магию 70 ступени…

Есть обычная функция, которая должна вернуть int. Внутри происходит черная магия: функция, выполняющая работу, вызывается через указатель… Выглядит это примерно так:

int getInt()
{
    return (int)WrapperCall((void *(*)(void *))DoGetInt);
}

int DoGetInt()
{
    return calcInt();
}

void DoUpdateInt()
{
    memberInt = calcInt();
}

В принципе ничего страшного :))

Чисто случайно после слияния вместо DoGetInt стала вызываться DoUpdateInt. Последняя функция ничего не возвращает, и в результате getInt возвращает неожиданные значения.

Но чему тут удивляться? Если функция ничего не возвращает, то сложно ожидать, что возвращаемое значение будет иметь какое-то разумное значение.

Вот и получается, что вместо результата вычислений в calcInt функция getInt возвращает мусор, оставшийся от работы других функций.

Если бы не отладчик, я бы еще не скоро заметил неладное…

P.S. Реальный код был несколько сложнее, было не так очевидно, что вызывается не та функция, которая должна бы.

питер, Леша

Создание патчей с помощью WiX

Read it in English

Для создания инсталляционных пакетов Windows Installer мы используем WiX. И тут потребовалось создать патч к уже существующему установочному пакету.

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

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

Беда в том, что обе инструкции предполагали, что есть исходный .wsx файл создания пакета. А его у меня нет. После нескольких вариантов создания, декомпиляции и т.п. все также ничего не получалось. Даже скачал обновленный билд WiX, но тоже не помогло.

Collapse )