Hatred's Log Place

DON'T PANIC!

Mar 21, 2012 - 2 minute read - Comments - programming

RESTEasy, JAXB, XML, JSON и другие

Столкнулся с непонятной проблемой в JBoss и RESTEasy:

Когда сервис принимает или отдаёт данные в JSON формате Jackson (сериализатор/десериализатор JSON) игнорирует JAXB аннотации @XmlElement(name = "bla_bla") вместо указанного имя поля всегда используется имя поля в классе, т.е. такое:

@XmlRootElement
class SimpleJson
{
  @XmlElement(name = "my_name")
  public String megaName;
}

сериализуется в это:

{
  "megaName" : ""
}

а не, как ожидается, в это:

{
  "my_name" : ""
}

А так же игнорируется @XmlJavaTypeAdapter, что есть пичалька.

Тут по ходу сочинения заметки пришло в голову, что Джексон не настроен использовать JaxbAnnotationIntrospector - повод рассмотреть.

Пока же использую work-around, в виде дополнительного навешивания Jackson-аннотаций вроде:

@XmlRootElement
class SimpleJson
{
  @XmlElement(name = "my_name")
  @XmlJavaTypeAdapter(Iso8601DateAdapter.class)
  @JsonProperty(value = "my_name")
  @JsonSerialize(using = JsonIso8601DateSeializer.class)
  @JsonDeserialize(using = JsonIso8601DateDeserializer.class)
  public Date megaName;
}

Подкатом, бонусом, классы Iso8601DateAdapter, JsonIso8601DateSeializer, JsonIso8601DateDeserializer.

Mar 21, 2012 - 1 minute read - Comments - linux

Клавитурные сокращения в vimdiff

| ctrl+w ctrl+w | Переключиться на другое окно. | | ctrl+w Up/Down/Left/Right | Переключиться на другое окно. | | do | Получить изменения из другого окна в текущее. | | dp | Вставить изменения из текущего окна в другое. | | ]c | Перейти к следующему изменению. | | [c | Перейти к предыдущему изменению. | | :diffupdate | diff update | | :syntax off | выключить подсветку синтаксиса | | zo | раскрыть свернутый кусок текста | | zc | свернуть кусок текста |

Feb 27, 2012 - 1 minute read - Comments - life туризм

Соревнования по технике спортивного туризма "Вызов 2012"

В эти выходные на базе школы №53 г.Владивостока прошли зальные соревнования по технике спортивного туризма. Был в составе судейского корпуса, гудят ноги, но вцелом понравилось, особенно наведенение дистанции :)

Фотографии можно поглядеть тут: http://gfst-vl.ru/v12/v_photo2012.html

Информация по соревнованиям: http://gfst-vl.ru/v12/v12.html

Feb 24, 2012 - 1 minute read - Comments - linux

Набор для кросс-компиляции для Linux на ARM

Потребовалось сделать окружение для отстройки приложений для системы Linux, запущенной на платформе с процессором ARM.

Внутри есть eglibc, поэтому решено было попробовать сделать окружение с этой библиотекой Си, а не повсеместно используемой newlib.

Процесс чтения манов, проб, нервов занял около двух дней. Помогли разобраться следующие документы: * http://www.eglibc.org/cgi-bin/viewvc.cgi/trunk/libc/EGLIBC.cross-building?view=markup - официальное руководство по кросс-компиляции eglibc * http://www.pgroup.com/userforum/viewtopic.php?t=1636 - помогло разобраться в одной ошибке * http://gcc.gnu.org/install/configure.html - изучение секции Cross-Compiler-Specific Options в частности на предмет опций --with-sysroot и --with-build-sysroot

Особо поразило мозг решение проблемы “кто первый: курица или яйцо?”

В результате получился набор правил для сборки окружение под ArchLinux (пакеты идут в порядке сборки): * arm-linux-gnueabi-binutils * arm-linux-gnueabi-linux-api-headers * arm-linux-gnueabi-gcc-stage1 - первый кросс-компилятор для отстройки базовых компонент стандартной библиотеки * arm-linux-gnueabi-eglibc-headers - базовый набор стандартной библиотеки - только заголовочные файлы и несколько стабов. Ещё не пригодна для линковки. * arm-linux-gnueabi-gcc-stage2 - компилятор уже пригодный для отстройки стандартной библиотеки * arm-linux-gnueabi-eglibc - готовая стандартная библиотека Си * arm-linux-gnueabi-gcc - компиляторы Си и Си++

Ну и несколько библиотек сразу в придачу: * arm-linux-gnueabi-zlib-static * arm-linux-gnueabi-bzlib-static * arm-linux-gnueabi-boost

Feb 16, 2012 - 1 minute read - Comments -

ImageMagick: вырезание произвольной области изображения

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

Рассматриваемый инструмент - ImageMagick или GraphicsMagick.

Решение нашлось тут: http://studio.imagemagick.org/pipermail/magick-users/2006-March/017281.html

Коротко суть: на основе исходного изображения (по сути используется только, что бы задать размеры) создаётся временное изображение-маска и нарисованной фигурой/фигурами которые образуются, если их обрисовать полигоном. Остальные пиксели на маске - прозрачные. Далее маска накладывается на исходное изображение и извлекается только нужная его часть…

Теперь на примере.

Есть изображение:

Нужно вырезать область, заданную полигоном (для простоты - треугольник) с координатами: (10,10)-(400,200)-(100,200)

Шаг 1. Делаем маску: convert screenshot.png -matte -fill none -draw ‘color 0,0 reset’ -fill white -draw ‘polygon 10,10,400,200,100,200’ polygon.png

Получаем следующее (картинка белая :simple_smile: ):

Шаг 2. Вырезаем область: convert screenshot.png -matte polygon.png -compose DstIn -composite out.png

Получаем чего желаем:

Команды рисования можно посмотреть тут: http://www.imagemagick.org/Usage/draw/

Jan 17, 2012 - 1 minute read - Comments - life linux

Amp, a layer3 player

Накатило, решил найти исходники этой программки. Что делает? Да просто берёт и играет mp3 файл. Чем знаменита? :) А тем, что это мой первый проигрыватель mp3 на Linux, который попался мне случайно на купленном диске во Владивостоке, во времена, когда у меня не было интернета и в своём городе-посёлке я был единственным пингвиноводом.

(на этом сайте) | Source2 | Где найдено

Никаких внешних зависимостей, исходники на чистом Си, в распакованном виде - 290Кб.

PS при сборке на современных системах нужно будет применить такой патч:

--- /home/hatred/download/tmp/mp3/amp-0.7.6/guicontrol.c	1997-08-23 22:30:51.000000000 +1100
@@ -375,7 +375,8 @@
 	break;	
       case GETHDR_SYN: warn("oops, we're out of sync.<br/>n");
 	break;
1.      default: 
+      default:
+        ;
       }
       break;
     }

по сути, после default:, поставить точку с запятой :simple_smile:

Jan 12, 2012 - 2 minute read - Comments -

DokuWiki, BlogTNG, плагин googleplusone и доработка шаблона

Что бы при использовании плагина googleplusone совместно с BlogTNG при попытке “поделиться” постом в Google+ вставлялся не абы какой текст, а то, что вам нужно, следует внести некоторые модификации в используемый вами шаблон.