суббота, 25 апреля 2009 г.

Доставка из Китая

Искал аккумулятор для ноутбука в Москве. Оказалось, что цена его в районе $120. Ну плюс доставка около $20. Нашел аналог в США. Цена $45 с доставкой. Доставляют сразу из Китая, т.к. оттуда ближе, чем из США пересылать. Доставка в этой сумме составила около $5. Это получается, что из Китая доставка в 4 раза дешевле, чем из Москвы в Подмосковье...

понедельник, 20 апреля 2009 г.

Tracepoints

В Visual Studio 2008 есть такая удобная штука — «tracepoint». Из названия ясно, что в определенной точке программы можно вывести какое-либо сообщение. А удобство в том, что не нужно менять код, чтобы добавить отладочные трейсы. Создается такая точка также как breakpoint, через меню по правой кнопке:

При вставке появляется диалог, в котором можно настроить точку:

Можно выводить значения переменных и прочую информацию(возможностей достаточно) не меняя код программы и не перекомпилируя.

У меня возникла только одна проблема: обрезаются очень длинные текстовые переменные. Пока идея только в том, чтобы в точке вызывать макрос и в нем выводить текст — не знаю сработает или нет.

UPD: В макросе тоже текст обрезался до длины в 200 символов. Но в Text Visualizer отладчика показывает полностью, значит способ есть...

пятница, 17 апреля 2009 г.

Окно на нужном мониторе

У меня два монитора.

У других разработчиков, вероятно, был только один. И поэтому мне, как пользователю приходится страдать. Проблема вот в чем: если разработчик не позаботился о нервах пользователя, то все всплывающие окна будут показываться на основном мониторе. Если окно программы находится на втором(третьем и т.д.) мониторах, то курсору мыши приходится преодолевать огромные расстояния, чтобы нажать какую-либо кнопку на всплывающем окне. Ну и головой вертеть тоже неприятно.
При этом избежать проблемы очень просто. Нужно создавать окна на том мониторе, где находится курсор мыши. Следующая функция поможет вывести окно по центру монитора, на котором пользователь оставил курсор:
RECT WherePlaceWindow( long win_width, long win_height )
{
    POINT point = { 0 };
    MONITORINFO mi = { sizeof(MONITORINFO), 0 };
    HMONITOR hMonitor = 0;
    RECT rcArea = { 0 };

    ::GetCursorPos( &point );
    hMonitor = ::MonitorFromPoint( point, MONITOR_DEFAULTTONEAREST );
    if ( ::GetMonitorInfo( hMonitor, &mi ) ) { // тут GetMonitorInfo сработало
        rcArea.left = ( mi.rcMonitor.right + mi.rcMonitor.left - win_width ) /2;
        rcArea.top = ( mi.rcMonitor.top + mi.rcMonitor.bottom - win_height ) /2;
    } else { // если не сработало, то придумает что-то другое
        ::SystemParametersInfo(SPI_GETWORKAREA, NULL, &rcArea, NULL);
        rcArea.left = (rcArea.right + rcArea.left - win_width)/2;
        rcArea.top = (rcArea.top + rcArea.bottom - win_height)/2;
    }  

    // теперь rcArea.left и rcArea.right содержат координаты левого верхнего угла окна
    return rcArea;
}
Основная идея в том, чтобы найти монитор с помощью функции MonitorFromPoint, а затем получить его координаты на десктопе. Для тех мониторов, которые левее и/или выше основного, координаты будут отрицательными, поэтому нужно быть готовым к отрицательным координатам окна везде в программе.

пятница, 10 апреля 2009 г.

reintegrate merge и сборка Subversion на Ubuntu Hardy

В Subversion с версии 1.5 есть функция reintegrate, которая позволяет влить изменения бранча в основную ветку. У нас репозитарий находится на сервере под управлением Ubuntu 8.04 LTS, а там Subversion версии только 1.4.
Выяснилось, что в backports есть версия 1.5, но установка её не привела к работе указанной функции, поэтому пришлось собрать Subversion из сорсов. Сделать это просто, но не тривиально.

Первым делом нужно скачать сорсы. Находятся они на subversion.tigris.org. Далее нужно установить все необходимое для сборки. Проще всего это сделать через apt-get. Но для начала нужно включить в репозитории сорсов через Synaptic, как на рисунке ниже:


Или поправив файл sources.list, добавив туда строки deb-src, например так:
deb-src http://ru.archive.ubuntu.com/ubuntu/ hardy restricted main
deb-src http://ru.archive.ubuntu.com/ubuntu/ hardy-updates restricted main
deb-src http://ru.archive.ubuntu.com/ubuntu/ hardy-security restricted main

После этого можно устанавливать зависимости следующей командой:
apt-get build-dep subversion

Дальше переходим в каталог сорсов и пытаемся выполнить ./configure, но не все так просто, если хочется использовать Berkeley DB. В arp-utils есть баг, который не дает apu-config выдать с какой версией Berkeley DB она слинкована. Решается это созданием скрипта apu-config в папке с configure следующего содержания:
if [ "$1" == "--libs" ]; then
echo -ldb-4.6
exit
else
apu-config $1
fi

Файл нужно сделать исполняемым командой chmod +x apu_config. Затем можно запускать configure командой:
./configure --with-apr-util=. --prefix=/usr

Дальше make install и получим нужно версию Subversion. Ещё необходимо выполнить svnadmin upgrade на каталоге с репозитарием. После этого можно использовать все новые функции Subversion (не забыв обновить клиентскую часть, конечно).

пятница, 3 апреля 2009 г.

Google street view

Какое-то время назад у Google появилась возможность на карте спустится до уровня улицы и смотреть по сторонам как будто вы стоите на земле. Хотя разработка этой фичи ведется с 2007 года, я заметил её совсем недавно. Функция Street View позволяет прогуляться вдоль домов или полей. Карта Америки снята очень подробно, можно побывать практически везде. Ещё они поездили по Австралии, Японии и некоторым странам Европы. В России они ещё не побывали. Очень захватывающе надо сказать...

Снималось вся эта красота с движущейся машины, оборудованной 9-ю камерами снимающими одновременно для получения вида в 360°. Иногда там, где автомобиль не мог проехать, использовались велосипеды. Объем данных огромный по моим прикидкам. Пока развитие предполагается в увеличении покрытия, но надеюсь, что когда-нибудь можно будет смотреть виды в режиме реального времени — камер полно стоит на улицах, нужно только склеить картинки.



UPD: Кстати, вот ссылка на набережную в Ницце.