barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

среда, 18 марта 2015 г.

birt: русские символы в значениях параметров отчета в JavaScript

Проблема

Есть birt-отчет, имеющий параметр, который используется в JavaScript-коде внутри отчета с помощью:
params["myparam1"].value
отчет развернут в веб-приложении birt на Tomcat, параметры в него передаются через GET. Проблема в том, что извлеченное в JavaScript значение параметра содержит некорректные значения для русских символов, как будто utf-8 строка прочиталась как cp1251.

Решение

Оборачиваем следующим образом:
decodeURIComponent(escape(params["component"].value))
Почему это работает, объяснено тут: http://ecmanaut.blogspot.ru/2006/07/encoding-decoding-utf8-in-javascript.html.

среда, 11 февраля 2015 г.

java.lang.UnsatisfiedLinkError: com.sun.glass.ui.win.WinApplication._submitForLaterInvocation

При запуске приложения, использующего JavaFX на достаточно старой JDK 1.7.0_09, получаю:
Exception in thread "Thread-2" java.lang.UnsatisfiedLinkError: com.sun.glass.ui.win.WinApplication._submitForLaterInvocation(Ljava/lang/Runnable;)V
        at com.sun.glass.ui.win.WinApplication._submitForLaterInvocation(NativeMethod)
        at com.sun.glass.ui.win.WinApplication.submitForLaterInvocation(WinApplication.java:215)
        at com.sun.glass.ui.InvokeLaterDispatcher.run(InvokeLaterDispatcher.java:101)
Лечится обновлением Java, в моем случае я обновился до 1.7.0_75. 

среда, 28 января 2015 г.

Ubuntu 14.04 Trusty Tahr на Asus EEEPC T101MT: проблема с яркостью

Поставил Ubuntu 14.04 Trusty Tahr на свой Asus EEEPC T101MT, и стокнулся со старой доброй проблемой с невозможностью поставить максимальную яркость. Решение - такое же старое, но с небольшой поправкой, связанной с тем, что в репозитории plippo/t101mt нет ветки по версию trusty:

  • apt-add-repository plippo/t101mt
  • идем в synaptic (можно конечно и через sources.list, но у меня виндовая привычка пользоваться оконными приложениями, что поделаешь), Настройки -> Репозитории -> Другое ПО, находим запись про plippo/t101mt, выделяем, жмем "Изменить", меняем в поле дистрибутив trusty на quantal
  • сохраняем, synaptic предложит обновить списки пакетов, обновляем
  • после этого устанавливаем пакет eeepc-brightness-workaround, яркость поднимется до максимальной даже без перезагрузки
  • теперь яркость максимальна, но не регулируется Fn-комбинациями. Ползунок бегает, а эффекта нет. Идем в /etc/default/grub, меняем значение GRUB_CMDLINE_LINUX_DEFAULT на "quiet splash acpi_backlight=vendor" ("acpi_osi=Linux", как я в свое время делал для Lenovo B460e, ставить не надо). Делаем update-grub, перезагружаемся.
ЗЫ По проблеме с щелчками винчествера также работает старое решение (http://barbitoff.blogspot.ru/2011/04/ubuntu.html).

Netbeans: maven и оффлайн сборка

Включить оффлайн сборку maven-проектов в Netbeans версии 8.0.2, можно, к сожалению, только глобально. Делается это следующим образом: Tools -> Options -> Java -> Maven -> Global Execution Options = --offline.

вторник, 16 декабря 2014 г.

XPath 1.0: тернарный оператор

Как такового, тернарного оператора в XPath 1.0 нет. Можно реализовать аналогичное поведение, правда, немного замысловатым образом. Следующее выражение даст $stringA, если $cond = true, и $stringB - в противном случае:
concat(substring($stringA, 1 div $cond), substring($stringB, 1 div not($cond)))

WSO2 ESB 4.5.1: использование пространства имен http://ws.apache.org/ns/synapse в XPath-выражениях

Проблема

Есть прокси-сервис, в нем есть property-медиатор, у которого в xpath-выражении в атрибуте expression используется пространство имен "http://ws.apache.org/ns/synapse" с помощью некоторого префикса, который объявлен в этом же property-теге:
<property name="XXXProp" expression="//syn:abc/text()" xmlns:syn="http://ws.apache.org/ns/synapse"/>
Если прокси-сервис отредактировать через веб-консоль шины, объявление префикса пропадает, после чего property-медиатор, естественно, начинает выдавать ошибки из-за неизвестного префикса пространства имен. Если объявление префикса перенести из медиатора выше (хотя даже в сам корневой тег прокси-сервиса), ситуация не меняется.

Решение

Похоже на баг, и вызван он скорее всего тем, что сам конфигурационный xml прокси-сервиса имеет пространство имен по-умолчанию "http://ws.apache.org/ns/synapse". Копаться в исходниках времени не было, поэтому пришлось воспользоваться workaround'ом:
<property name="XXXProp" expression="//*[local-name()='abc']/text()" />

пятница, 12 декабря 2014 г.

Java: String.split() и пустые значения

Допустим, мы читаем некую строку, в которой значений разделены разделителями-табулциями:
a\tb\tc\t\te
На выходе 
"a\tb\tc\t\te".split("\t")
ожидаем массив из 5 значений, предпоследнее из которых будет пустым. Однако, размер выходного массива будет равен 4, а пустое значение в него не попадет. Выход - немного модифицировать вызов:
"a\tb\tc\t\te".split("\t", -1)