Hatred's Log Place

DON'T PANIC!

Oct 31, 2011 - 1 minute read - life

Пять процентов

Подкинули ссылочку на интересную статью в компьютерее, называется “Пять процентов”

Интересная нужно сказать теория. Тут вот думаю, к каким “пяти процентам” отношусь я?

Oct 31, 2011 - 1 minute read - life

Шутки

Вообще жизнь интересная штука: каждый день, новая шуточка, даже интересно, а что ж завтра то будет?

Oct 18, 2011 - 3 minute read - linux туризм maps programming

QLandkarteGT: Экспорт всей карты в растр, а не только видимой области

В QLandkarteGT есть удобная вещь - экспорт видимой области карты со всеми отображаемыми точками, треками, измерениями и т.п. в растровый (PNG) файл.

Мне же потребовалось, что бы вся карта как есть была экспортирована. Пришлось полезть в исходники. Прямого пути сделать такое не нашлось, пришлось сделать несколько костыльно (имхо), но работоспособно (ибо нужно срочно - готовить карту к предстоящим соревнованиям).

Патч подкатом.

Oct 16, 2011 - 2 minute read - туризм maps programming

Поломанная привязка карт в QLandkarteGT

Сегодня столкнулся с тем, что привязывая карту в QLandkarteGT, получаю такую ошибку:

/usr/bin/gdal_translate -a_srs +proj=merc +a=6378245.0000 +b=6356863.0188 +towgs84=24,-123,-94,-0.02,0.25,0.13,1.1,0 +units=m  +no_defs -gcp 108 182 inf inf -gcp 3310 189 inf inf -gcp 3308 3126 inf inf -gcp 93 3119 inf inf -gcp 1704 1657 inf inf /home/hatred/maps/1/src/K-53-26-view-raw.tiff /tmp/qt_temp.B12852
Input file size is 3402, 3428
0...10...20...30...40...50...60...70...80...90...100 - done.

/usr/bin/gdalwarp -order 1 -r cubic -dstnodata "255" /tmp/qt_temp.B12852 /tmp/qt_temp.u12852

ERROR 1: Attempt to create -2147483648x-2147483648 dataset is illegal,sizes must be larger than zero.
Creating output file that is -2147483648P x -2147483648L.

Неудачно!

Сначала было подумал, что поломано в SVN версии, однако, в релизной 1.2.4 ситуация точно такая же.

Сразу и сходу смутили параметры inf в опции -gcp. Так что решил поглядеть в коде, благо собираю из SVN и он у меня всегда под рукой.

Немного времени, расстановка логов, анализ привели к тому что обнаружилось двойное преобразование координат в функции

bool GPS_Math_Str_To_LongLat(const QString& str, float& lon, float& lat, const QString& srcproj, const QString& tarproj)

в файле GeoMath.cpp

Первое преобразование было в блоке кода:

if(GPS_Math_Str_To_Deg(str, lon, lat,true))
 {
   if(pjTar)
   {
       u = lon * DEG_TO_RAD;
       v = lat * DEG_TO_RAD;
        pj_transform(pjSrc,pjTar,1,0,&u,&v,0);
   }   
 }
 else

а второе преобразование в следующем блоке кода:

if(pjTar && pjSrc)
 {
   pj_transform(pjSrc,pjTar,1,0,&u,&v,0);
 }

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

Сменил первый блок на такой:

if(GPS_Math_Str_To_Deg(str, lon, lat,true))
 {
    u = lon * DEG_TO_RAD;
    v = lat * DEG_TO_RAD;
 }
 else

пересобрал и всё заработало отлично и замечательно.

UPD: а теперь всё то же самое, но в виде патча:

Index: src/GeoMath.cpp
===================================================================
--- src/GeoMath.cpp	(revision 3010)
@@ -392,12 +392,8 @@
 
     if(GPS_Math_Str_To_Deg(str, lon, lat,true))
     {
-        if(pjTar)
-        {
-            u = lon * DEG_TO_RAD;
-            v = lat * DEG_TO_RAD;
-            pj_transform(pjSrc,pjTar,1,0,&u,&v,0);
-        }
+        u = lon * DEG_TO_RAD;
+        v = lat * DEG_TO_RAD;
     }
     else
     {

PS автору письмо отправлено

Oct 14, 2011 - 1 minute read -

USB Typewriter

Это винрарно:

Oct 12, 2011 - 1 minute read - programming

Паттерны проектирования

Случайно наткнулся на сайт: http://www.design-pattern.ru - “Справочник “Паттерны проектирования”

Прицепом:

PS а это планирую купить: http://www.ozon.ru/context/detail/id/6108824

Sep 23, 2011 - 1 minute read - programming

Изменение версии в многомодульном Maven проекте

Что бы одним махом изменить версию в многомодульном проекте, достаточно использовать плагин versions, подключив его к корневому pom:

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>versions-maven-plugin</artifactId>
                <version>1.2</version>
            </plugin>

Установить версию после этого можно командой: mvn versions:set -DnewVersion=1.0.0-SNAPSHOT

или аналогичным образом.

Подробнее:

Sep 1, 2011 - 1 minute read -

JavaMail: кодировка темы сообщения

Делается так:

MimeMessage message = new MimeMessage(mailSession);
message.setSubject(subject, "utf-8");

сообщение в этом случае должно быть типа MimeMessage, потому как в интерфейсе Message нет метода setSubject() с аргументом, указывающим кодировку.

Но можно сделать и так:

Message message = new MimeMessage(mailSession);
message.setSubject(MimeUtility.encodeText(subject, "utf-8", "Q"));

Для тела сообщения кодировка задаётся вместе с mime-типом:

message.setContent(bodyText, "text/plain;charset=UTF-8");

Jul 17, 2011 - 1 minute read -

Впервые в гонке

16 июля позвали сходить в гонку на яхте “Аккорд” в качестве откренки :) Сходил, понравилось, но ничего не понял: пока идешь от поворота до поворота, всё тихо и спокойно и как будто бы ничего не происходит, но как только поворот или, не дай божа, постановка или снятие паруса - суета, мелькание конечностей, ругань и прочая эмоция на неправильные действия. Не совсем понял, как перебираться с борта на борт, так что бы никому не помешать при повороте.

Не прошло и без аварии: сцепились с яхтой “Факт” из Славянки: проходили рядом, они свалились с волны, зацепили своим гиком, что-то порвали, произошло всё быстро, но даже если бы могли уйти влево - там тоже яхта шла.

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

Все фото: http://sfyc.ru/photo/2011/kubok-sem-futov-2011/gonki-flota/?p=1&rpp=12

Jul 14, 2011 - 1 minute read - programming

JBoss, JDBC: Closing a connection for you

Если узреете у себя такие исключения:

2011-07-14 17:11:14,652 INFO  [org.jboss.resource.connectionmanager.CachedConnectionManager] (http-localhost%2F127.0.0.1-8080-1) Closing a connection for you.  Please close them yourself: org.jboss.resource.adapter.jdbc.jdk6.WrappedConne
ctionJDK6@6ae0286d: java.lang.Throwable: STACKTRACE

Или около того, обратите внимание на этот документ: http://community.jboss.org/wiki/WhatDoesTheMessageDoYourOwnHousekeepingMean

А так же ознакомьтесь со следующей темой на форуме: http://community.jboss.org/thread/73267

А если коротко: если вы получаете подключение из пула, всегда обрамляйте работу с ним в конструкцию try/catch/finally примерно следующего вида:

Connection conn = null;
try
{
    // работа с базой...
}
finally
{
   try
   {
       conn.close();
   }
   catch (Throwable ignored)
   {
   }
}

Jul 2, 2011 - 8 minute read - туризм

Град и молния

Маршрут (запланированный): Владивосток-Красноармейский-Ручьи-С-З-З отрог-Читинза-С-В отрог-Базы отдыха-Красноармейский-Владивосток

Маршрут (пройденный): Владивосток-Красноармейский-Ручьи-С-З-З отрог-Читинза-родник-Партизанск (Каменка)-Партизанск (станция)-Владивосток

Участники:

  • Александр Дроздов
  • Екатерина Кравченко
  • Дима Киртока
  • Олег Галимов
  • Иван Горбач
  • Оксана Карнаух
  • Александр Вишневский

На 18-19 июня запланировали поход, долго думали куда понести свои тушки вместе с рюкзаками - нужно перед Камчаткой группу малость схаживать. Первым вариантом был Голец, но прикинули, что на общественном транспорте слишком мало нам времени даётся, можем не успеть. Следующим вариантом становится Читинза (она же Скалистая) в Партизанском районе, на нём и останавливаемся. Кинули клич в рассылке, для желающих разбавить наш коллектив. В среду (15 числа) в клубе составляем раскладку, смотрим что по палаткам, котлам, распределяем коллективное имущество.

Выезд запланировали на пятничной партизанской электричке в 20.07. Сбор, как обычно, в третьем вагоне с конца.

Jun 26, 2011 - 10 minute read - linux туризм maps

Готовим растровую карту для навигатора Garmin GPSMap 62s/64s

UPD 2013-11-16: обновил список программ, добавил информацию об автоматической обрезке рамок, добавил информацию о создании многослойного JNX. Убрал текст помеченный как удалённый. За остальными подробностями - в историю изменения страницы. Вики всё же :)

UPD 2024-11-15:

Задача: сделать растровую карту для навигатора Garmin GPSMap 62s.

Инструменты:

  • GDAL 1.8.0. С версии 1.10.0 научился конвертировать привязки OZI Explorer в виде .map + растр (.png, .gif и т.п.) в geotiff, рекоменду обновляться.
  • map2jnx 1.7.8. В последних версиях QLandkarteGT идёт в комплекте + уже с моими патчами для задания различного scale-factor для разных слоёв. Скачёк версии с 0.2.4 до 1.7 (или даже 1.6) случился как раз из-за включения в состав QLandkarteGT.
    • QLandkarteGT задепрекейчена в пользу новой программы от автора - QMapShack
    • map2jnx, что бы не конфликтовать по имени, из комплекта QMapShack переименован в qmt_map2jnx (QMT - QMapTool - внешний тул из комплекта QMapShack для привязки карт). Текущая версия - 1.17.1 (ноябрь 2024).
  • QLandKarteGT или QMapShack - нужны для просмотра.
  • NEW: geocrop
  • NEW: ozi2map, опционально, если у вас GDAL младше 1.10.x и есть куча растров привязанных в OZI Explorer (.gif, .png, .jpg и т.д.)

Исходные карты в формате OZFX3 (Ozi Explorer) с готовой привязкой. Если нет привязанных карт, можно почитать тут как это сделать самому. Теперь можно брать любые озиковские привязки (кроме OZFX2 и новых шифрованных OZFX3), но только если у вас версия gdal больше 1.10.0, иначе можно воспользоваться утилитой ozi2map.

Jun 25, 2011 - 1 minute read - туризм maps

OZFX в GeoTIFF

NOTE: Данный способ конвертации подходит только для карт старого, некриптованного формата OZFX3 и не подходит для карт формата OZFX, OZFX2 и для нового зашифрованного OZFX3.

Оказывается сию процедуру в Linux можно сделать при помощи утилиты gdal_translate из библиотеки GDAL: gdal_translate -of GTiff 200k–n57-01_ozf.map 200k–n57-01.tiff

Получается нормальный валидный tiff. Проблема, что геоданные о привязке не всегда перевариваются другими программами, хотя и сохраняются, вот, к примеру, фрагмент вывода gdalinfo:

Coordinate System is `'
GCP Projection = 
PROJCS["unnamed",
    GEOGCS["Pulkovo 1942",
        DATUM["Pulkovo_1942",
            SPHEROID["Krassowsky 1940",6378245,298.2999999999998,
                AUTHORITY["EPSG","7024"]],
            AUTHORITY["EPSG","6284"]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433],
        AUTHORITY["EPSG","4284"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",159],
    PARAMETER["scale_factor",1],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]]]
GCP[  0]: Id=1, Info=
          (110,92) -> (312850.595383564,6212735.20674275,0)
GCP[  1]: Id=2, Info=
          (1325,93) -> (344034.004166507,6211493.42884751,0)
GCP[  2]: Id=3, Info=
          (2544,89) -> (375221.866305868,6210477.54231118,0)
GCP[  3]: Id=4, Info=
          (100,1538) -> (311242.069242769,6175640.4309,0)
GCP[  4]: Id=5, Info=
          (1326,1542) -> (342693.733518233,6174392.90643577,0)
GCP[  5]: Id=6, Info=
          (2557,1535) -> (374149.759678358,6173372.32291538,0)
GCP[  6]: Id=7, Info=
          (91,2985) -> (309639.985652898,6138547.1302834,0)
GCP[  7]: Id=8, Info=
          (1328,2989) -> (341358.837088592,6137294.02823664,0)
GCP[  8]: Id=9, Info=
          (2568,2983) -> (373081.95597641,6136268.88603608,0)

Задел на будущие думы.

UPDATE 2013-11-18: в статье post/2011-06-26_14.58_gotovim_rastrovuju_kartu_dlja_navigatora_garmin_gpsmap_62s рассматривается вариант конвертации с исправлением ошибки в формате геоданных.