вівторок, 20 грудня 2011 р.

Poperly reading xs:date from xml

Actually, correctly read xs:date from XML isn't easy task.
Let's investigate how to do it whith famous JodaTime
There is built in formatter for xs:datetime:
ISODateTimeFormat.dateTimeParser()

However, there is not formatter for xs:date - hopefully we can build next custom formatter to handle this situation:
new DateTimeFormaterBuilder().append(null, new DateTimeParser[]{
    DateTimeFormat.forPattern("yyyy'-'MM'-'ddZ").getParser(),
    DateTimeFormat.forPattern("yyyy'-'MM'-'dd").getParser()
}).toFormatter()

It works correcly in the most of cases, but according to standart, xs:date can have leading '-'. To hadle this situation, just add two more formatter with leading '-', and it'll work properly

середа, 16 листопада 2011 р.

EclipseLink

Had a chance to work with EclipseLink. If you are using Oracle and don't ahve any plans to migrate to other DBMS or support several DB at one time, you have to choose EclipseLnk, because it's defently better than Hibernate fot your aims.
Awesome things, not available in Hibernate:
1) All queries are generated with Oracle hints - it's can be useful and seems realy cool:)
2) Hierarchy queries are already supported
3) Much less open bugs in EclipseLink project
Also, EclipseLink is etalone JPA implementation.
Also, I love SQL logginig in EclipseLink. It perfect and has binding by default, also it's much more readeble that hibernate log (about logging http://wiki.eclipse.org/EclipseLink/Examples/JPA/Logging#How_To_Configure_Logging)

понеділок, 15 серпня 2011 р.

Atomic Java

Дуже корисна і цікава стаття про неблокуючі операції в джава, засновані на атоміках. Нарешті я побачив реальнокорисне використання атоіків, а не банальний код з лічильниками, яким зазвичай ілюструють цей функціонал.
Отже, в статті потокобезпечна черга та стек, в коді яких не було використано ані синхронізації, ані локів чи якихось мютексів:
http://codeidol.com/java/java-concurrency/Atomic-Variables-and-Nonblocking-Synchronization/Nonblocking-Algorithms/

PS особливого перфомансу слід чекати коли задіяно більше двох потоків

вівторок, 26 липня 2011 р.

RabbitVCS - greate SVN client for Linux

Певно багато хто з користувачів SVN звик до приємної та зручної у використані черепашки TortoiseSVN. Яка її гарна альтернатива під Лінуксом? Моя найюлюбленіша (і цілком заслужено, насправді) є RabbitVCS - rabbitvcs.org - справді швидки та пухнастий кролик.
В Убунті ставить в кілька кроків:
1) додаємо новий репозиторій
sudo add-apt-repository ppa:rabbitvcs/ppa
і апдейтимо
sudo apt-get update
2) тепер стягуємо та інсталюємо кролика
sudo apt-get install rabbitvcs-core rabbitvcs-nautilus rabbitvcs-thunar rabbitvcs-gedit rabbitvcs-cli
3) перезапускаємо (точніше тут просто вбиваємо Наутілус (звісно, якщо ви використовуєте наутілус))
killall nautilus

Після перезапуска в наутілусі по правому кліку з"явить меню роботи з SVN, а файли під системою контроля версій матимуть характерну помітку, відображаючи їх статус

четвер, 7 липня 2011 р.

About Android Market

якби я був Джоелем Спольскі, то обов"язково написав би статтю "Google, забери безкоштовні аплікації з маркету" або "Програмісти, припеніть писати під маркет". Скоріше - перше

Я вам зараз поясню. Зайдіть в анлроід маркет - там тисячі, десятки тисяч додатків, і більшість з них безкоштовні. Класно? Жахливо! Скажим ні безкоштовному софту! Чому? Бо все що там є безкоштовного - то якесь напівмертвонароджене убожество! Наприклад, давайте пошукаємо трекер для бюджету. Вау! пару десятків аплікух готові допомогти мені з моїми особистими фінансами... але яку ж обрати? функціонал у всіх схожий (якщо аплікуха дійсно буде виконувати обічяні функції)... мммм... навіть не знаю що взяти... усі мають якийсь базовий набір, усі схожі між собою як близнюки, вибрати щось не можливою Більш того - функціонал занадто примітивний - тобто таке різноманіття нічого не дає.

Ок, давайте пошукаємо серед платних додатків. Тут вибір куди поменше - і так, це тішить! Аплікухи вже мають функціонал покраще... але всеріно не те що треба. Наприклад, хотілося б бачити можливість витрачати в різних валютах з автоматичною конверацію в базову (тобто, наприклад я випав каву за 8 баксів в старбаксі і вніс цей видаток як $8, а в репорті це автоматично конвертнеться в гривні і запишитсья як 40грн). Або, наприклад - бачити динаміку витрати... Є, є подібні додатки - якщо передивитися з десяток - то щось цікаве можна знайти. так в чому причина? саме в різноманітті безкоштовних аплікух і криється корінь зла. дуже просто не знайти класну, функціональну, стабільну аплікуху в горі сміття з безкоштовних студенських поробок на маркеті, навіть якщо я готовий оплатити гарну платну програму. Але ціна теж залишає питання - ну що це за ціни в 1-2 бакси? це менші ніж ціна квитка в міському автобусі. Чому аплікуха в яку вкладено знання, досвід, час коштує як літер пального? Припустимо, що 10 євро це для деяких ринків забагато - то може маркету (тобто гуглу) слід задуматися над можливістю продавцям диференціювати ціни по країнах? Щоб отримувати адекватні об"єми продаж в різних регіонах світу.

Бо наразі не дивно, що немає серйозних гравців на ринку - продати тисячу додатків (подивіться на статистику продаж) - це вже успіх, парадоксально - це принесе лише кілька тисяч (в залежності від ціни додатку)... тобто, якщо ви напишете гарну програму, і вирішете її продавати - то після цього всього гемору можна заробити на пляшку пива і нову туфлі дружжині. Воно того варто? Наразі, писати якісний, функціональний софт під андроід банально не вигідно. А якщо ви з такої неблагополучної країни як Юкрайна - то доведеть мати купу гемору і фінансові втрати при виводі цих коштів, да-да. От, тому це все дуже сумно і при рості кількості додатків на маркеті, їх якість буде знижуватися, а ймовірність знайти справді гарний додаток, навіть за кошти - зменшуватися

вівторок, 24 травня 2011 р.

Evil Java

Шикарний пост, шикарний код, я счітаю:))

http://thedailywtf.com/Articles/Disgruntled-Bomb-Java-Edition.aspx Alexander Keul took advantage of Java's cached boxing conversions to come up with this concept: package dont.try_this.at_home; import java.lang.*; class ValueMunger extends Thread { public void run() { while(true) { munge(); try { sleep(1000); } catch (Throwable t) { } } } public void munge() { try { Field field = Integer.class.getDeclaredField( "value" ); field.setAccessible( true ); for(int i = -127; i<=128; i++) field.setInt( Integer.valueOf(i), // either the same (90%), +1 (10%), or 42 (1%) Math.random() < 0.9 ? i : Math.random() < 0.1 ? 42 : i+1 ); } catch (Throwable t) { ; } } }

JEE conf, May 21, 2011, Kiev

21 травня в київському МВЦ проходила конференція JEE Conf, присв"ячена розробці на платформі JEE, яку я з превеликим задоволенням відвідав. Можу сказати, що конференція була організована на найвищому рівні, хоча власне порівнювати мені і немає з чим. Але кава-брейки були шикарні:)
Приємно було зустріти колег з попередньої роботи, які висадилися серйозним десантом - практично половина працівників, що займала цілий ряд стільців на конференції:)
Прозвучали дуже цікаві й корисні доповіді присв"ячені практичному використанню Apache Camel, Ehcache and teracotta, Active MQ, Groovy, NoSQL DB, GC in Java and other. Доповідачі були більш ніж відомі - автори Camel, Actibe MQ, і по сумісництву - автори книг по цих технологіях)Самі книги були розіграні наприкінці конференції.
Більше прочитати про конференцію можна тут http://jeeconf.com
У розділі матеріалів обіцяють викладати власні самі матеріали:), як то презентації та відеозаписи, десь за 2а тижні має бути

Ну і трошки юмору з рекламного буклету Luxoft
http://yfrog.com/gz8dejaxj

четвер, 10 березня 2011 р.

GWT 2.2 and TreePanel

Як би то не було прикро, та звичайний простенький GWT просто не включає такого компоненту яу TreeTable, тобто таблиця яка розгортається подібно до дерева... чи то дерево, що представляється таблицею. Тому доводиться шукати щось незалежна
І не поганою, як на мене, реалізацією цього компоненту є робота Matt Boyd, компонент так і називається: TreeTable (нагугли ти дуже легко)
Бібліотека поставляєтсья однією джаркою і для її використання слід прописати в app*.get.xml:


Але під GWT 2.2 мене спіткала невдача - як виявилося, у вихідному коді причаїлася помилка, що не дозволяла вільно виконуватися коду. А локалізувалася вона в одному рядку
setHTML(row, i, null);
Добре, що це опенсорс - тж я просто змінив цей код на більш кошерний
setHTML(row, i, (String)null);
Тепер усе працює і всі з того тішуться:)

пʼятниця, 14 січня 2011 р.

SoapUI 3.6.1 start up fail on Win XP

SoapUI is the biliant tool for web-service and JMS testing purposes, but last version has a one bug - it has start up problems with the next error:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/CommandLineParser
If you'll check libs, you'll found related jar, misterious...
Don't worry - let's look at soapui.bat, and add before the line:
"%JAVA%" %JAVA_OPTS% -cp "%CLASSPATH%" com.eviware.soapui.SoapUI %*
next code:
setlocal ENABLEDELAYEDEXPANSION
if defined CLASSPATH (set CLASSPATH=%CLASSPATH%;.) else (set CLASSPATH=.)
FOR /R ..\lib %%G IN (*.jar) DO set CLASSPATH=!CLASSPATH!;%%G
It seems a bit strange, but it realy helpful;)

четвер, 13 січня 2011 р.

Groovy Soap Client, Custom Groovy Soap Client, and webservice overloading

It was beautiful winter morning, when I started creating SOAP client to our web-services. I decided to use groovy.net.soap.SoapClient. because of the applciation was written in Groovy language. The examples from official tutorial promise the easy life, so I was wondered when in ten minutes a got completed code which throws exception
XmlSchemaException "Content is not allowed in prolog"
In the line:
proxy = new SoapClient( endpoint )



First of all I checked xml and realized that it's absolutely correct. On the next step I touched: http://www.webservicex.net/CurrencyConvertor.asmx?WSDL
and my code works fine with this URL. So, I started googling...