Home
Всякая всячина
Свежачок 

Реклама

Настроить
2-Дек-2009 05:57 pm - Впечатления от IDEA 9
Выглядит симпатично. По ощущениям побыстрее IDEA 8. Уже нашел баг с деревом вызовов. Но в целом доволен. Если более серьезных тараканов не обнаружу, через недельку снесу IDEA 8. J2EE в ближайшем будущем не предвидится, так что бесплатная CE как раз для меня.
Кто не в курсе, идет сюда: http://www.jetbrains.org/
С девятой версии релизы IDEA делится на Community Edition и на Ultimate Edition. Первое бесплатно, но не содержит поддержки J2EE технологий. Второе платное и является полной версией этой IDE.
Сравнение фичности редакций
Для J2ME полностью хватает бесплатной версии. Ура, товарищи!
А Нетбинс идет лесом как минимум из-за непонятно зачем введенной строгой иерархии каталогов внутри проекта (холиворщики, вперед! :) ). Ему, кстати, предвещают скорый кирдык. Что сильно огорчает.
Очень полезная тема тут: http://forum.juga.ru/showthread.php?s=&threadid=19669
Портал для разработчиков тут: BlackBerry - BlackBerry Developer Zone
JDE (SDK с эмулятором и MDS сервером) тут: http://na.blackberry.com/eng/developers/javaappdev/javadevenv.jsp

Для портирования мидлета ничего переписывать не надо, BB поддерживает CLDC 1.1 и MIDP 2.0 в полном объеме.
Эмулятор в точности повторяет реальное устройство с той же прошивкой (Nokia, SE и другим есть чему поучиться) и содержит хренову тучу настроек вплоть до эмуляции заданного уровня сигнала GSM.
Получить готовый cod файл из мидлета можно так: rapc.exe -import=%path_to_jde%\lib\net_rim_api.jar -codename=%your_codename% -midlet %your.jad% %your.jar%
Если приложение именно J2ME мидлет, то не получится задействовать софт-клавиши. Обычно клавиша 'Q' - это левый софт, а клавиша 'P' - правый.
Для работы с сетью на эмуляторе надо запустить MDS сервер.

Этой информации хватило, чтобы в фоновом режиме за три дня получить работающее приложение для BB из J2ME мидлета. Самое неприятное - это нерабочие софты.
24-Ноя-2009 06:28 pm - О BlackBerry
У компании случилось сильное желание сделать порт J2ME-приложения под BlackBerry, что совпало с моим желанием "позырить", а как там оно.
Первые ощущения:
1)Навороченный эмулятор, который подает надежды, что эмулируется физическое устройство, а не сферический конь в вакууме
2)SDK заточен на идиота. Пока обнаружена только одна консольная утилита, делающая вообще все от компиляции до упаковки и подписывания. И не обнаружено к ней документации.

Если будет пробегать опытный в BB народ - дайте знать, плз.
То есть, через полужопу.
Nokia PC Suite и сама E52 отказываются понимать файл, содержащий много VCard. Первая или падает, или запихивает все в один контакт. Вторая берет самую последнюю визитку, игнорируя остальные.
Написал ращепитель файла с несколькими визитками, который на каждую VCard создает отдельный файл в указанном каталоге. Собственно, этого я ожидал, - написание тулзы, которая подготовит контакты, как их сохраняли утилиты для Sony Ericsson, к виду, который смогут переварить утилиты Nokia.
Утилита на Java, то бишь для запуска нужна JRE.
VCFSplitter.jar
VCFSplitter source
Решил упорядочить, чтобы не писать по новой, когда снова спросят.

1)Фреймворк заточен на то, чтобы абсолютно любое действие пользователя летело на сервер, где и обрабатывалось бы. Банальный дизейбл/енейбл элементов в зависимости от состояния чекбокса очень трудно и через ж... сделать яваскриптом. При этом приходится использовать конструкции action=" onchange: setSomeFields( \#{self}, \#{idTextBox} ) ". Если нужно отслеживать, что пользователь вводит в инпуте, то событие по вводу нового символа стучится на сервер.
2)Парсинг ZK превращает страницу в полный п. Идентификаторы контролов не сохраняются. Так что для работы с ними из ява скрипта надо писать что-то вроде document.getElementById( idTextBox ).childNodes[0].childNodes[0], где idTextBox - хитрым способом переданный в яваскрипт параметр.
3)Фреймворк очень располагает программистов к захреначиванию ява-кода в в страницы. Одна из страничек в проекте содержала четыре разных языка: jsp, javascript, java и zul (птичий язык ZKoss'а)
4)Для некоторых банальных вещей не сделана поддержка динамических параметров (под динамическими подразумеваю параметры, которые могут обновляться через AJAX-запросы)
5)Крайне хреновая документация, размазанная по нескольким Javadoc, туториалу, small talks, developer's guide, developer's reference и форуму. Причем в своей статье, как делать то или иное, могут запросто дать ссылку на тему в форуме, где это обсуждалось, и даже не скопировать в статью саму суть.
6)Свой птичий язык ZUL, который по идее должен был заменить JSP, но не имеет банальных тегов if, которые бы не были завязаны на контроле. Причем если для конкретного контрола можно задать условие, то оно не может быть вычисляемым и динамическим (насчет динамики, правда, не уверен). То есть банальное if="${!someBoolField}" не прокатит. Надо заводить отдельное поле notSomeBoolField и писать if="${notSomeBoolField}". Возможности сравнить значение поля с числом, соответственно, нет.
7)Возможно этот пункт относится ко всем фреймворкам с сохранением состояния. Но конкретно с ZK была проблема, что делать, если пользователь открывает ссылки в новых окнах/закладках? Состояние хранится для конкретной страницы. Можно увеличить количество хранимых состояний страниц, но что делать, если пользователь откроет N+1 страницу?
8)Не совсем явная интеграция со Spring и JSP.

Если знаете, что какой-то пункт ошибочный, то, плз, пишите. Не стесняйтесь.
Наткнулся на поисковик по содержащимся в jar'ах классах findJAR.com. Вводите имя класса (необязательно полное), он вам выдает список библиотек, где он содержится. Потом можно тыкнуть в нужный джар, посмотреть его версию, содержимое, ну и скачать, естественно.
Уже успел пригодиться.
В общем, то, что я слабал, полная фигня, и решает проблему в частных случаях.
На самом деле все проще.

Решение тут. Проверено! :) )



Используем Tomcat, датасорсы настраиваются как бины в контексте томката. Пул соединений — apache commons-db.
В сети нашел, как справится с wait_timeout для встроенного Hibernate'овского пула C3P0. Но его не советуют использовать даже сами авторы хибернейта.
Для апачевского пула есть возможность указать validationQuery в качестве параметра к датасорсу. Но этот запрос, пусть даже select 1, будет выполняться при каждом запросе коннекта из пула соединений. Короче, накладно. Решил слабать свой класс, который после некоторого времени простоя пробегается по всем JNDI бинам, и для каждого найденного мускульного датасорса делает этот самый select 1. Вызов статического метода делается один раз за пользовательскую сессию, например, при логине пользователя в систему.
Есть советы/другие варианты?


Классовая борьба с MySQL под катом )
Прочитав вот это: "The Last Java Garbage Collection Guide You Will Ever Need", решил написать свой тест. Естественно, "самый правильный".
Придумал алгоритм учета создаваемых и уничтожаемых объектов без финализаторов, несколько ухищрений, чтобы исключить влияние обвязки теста на показатели памяти. Вроде даже более менее вменяемые результаты получались, пока не решил проверить с финализаторами. Весь тест оказался чушью собачьей. По моим показателям в хипе три тысячи объектов, эталонная проверка через финализаторы говорит, что менее ста.
Сейчас опять есть несколько мыслей, как сделать алгоритм еще хитрее, чтобы "теперь то уж точно оттестить все как надо". Но понимаю, что получится та же самая фигня.
Похоже, если по каким-то причинам необходима тонкая настройка GC, то в исследование подсистемы памяти в яве придется уйти минимум на несколько дней.
Были у кого-нибудь реальные причины тюнить управление памятью? Речь, естественно, не о -Xmx, -Xms. Какие полезные ресурсы посоветуете?
15-Апр-2009 03:16 am - Осторожно, ZK
Задача: есть класс
public class MyObj
{
  private boolean isEnable;
  private boolean check1;
  private BigDecimal money1;
  private BigDecimal money2;
  private Boolean check2;
}
Есть соответствующие им геттеры и сеттеры.
Печальное продолжение под катом )



Такое чувство, что их делают люди, чей девиз "Лучше купить новое железо, чем нанять грамотных специалистов". Или чем еще может быть обусловлено желание на каждый чих на клиенте стучаться на сервер? ZK при обработки у текстбокса события onChanging на каждое нажатие клавиши посылает аджакс-запрос. Пипец...
При этом возникает чувство, что доступ к возможностям клиентской стороны (яваскрипт, то бишь) сознательно затрудняется. Другого объяснения, почему я должен писать что-то вроде action=" onchange: setSomeFields( \#{self}, \#{idTextBox} ) " для вызова скриптового метода, я не вижу. А в самом методе для доступа к текстбоксу с идентификатором idTextBox (это айди до компиляции, после нее там вообще мусор, не поддающийся человеческому прочтению) надо написать что-то вроде document.getElementById( idTextBox ).childNodes[0].childNodes[0] - и вот это будет нужный нам текстбокс, если в следующей версии ZK что-нибудь не изменится.
Еще один интересный случай: как вызвать яваскрипт сразу после загрузки страницы?
А сам сайт с форумом как бы говорит нам: "Весь Ajax - говно". Особенно форум, там за пару минут можно почувствовать на себе все минусы неграмотного применения этой технологии. Ну и размазанная по геттинстартедам, смолтолкам, гайдам, референсам, апи, вики, форуму, факам и еще невесть чему документация оптимизма не добавляет. Они в своих доках запросто могут сослаться на тему в форуме, мол там все было объяснено, нам влом сюда копировать.
Жопа, короче. Или я не умею их готовить. Пока мысль, что самоличное написание всех красивых контролов и интеграция DWR или Jason-RPC для Ajax'а в Spring Web MVC было бы разумнее и быстрее, набирает баллы.

Есть что возразить? Можете посоветовать другой фреймворк?
Думаю, многим будет интересно.
Можно избавиться от тормозов при переключении из IDEA в другое приложение (то есть при потере IDEA фокуса). IDEA в этот момент автоматически зачем-то каждый раз сохраняет свои настройки, файл проекта и файлы модулей, даже если ничего не менялось. Если последние два становятся черезчур большими (у меня файл проекта занимал девять с лишним мегабайт), то как раз и наблюдается загрузка процессора до 100% несколько секунд подряд. Соответственно, надо каким-либо образом сделать эти файлы меньше (отключение ненужных плагинов, например) вплоть до редактирования их вручную. Но конкретно мне помогло убивание датасорсов в IDEA, именно они составляли ( 9Мбайт минус 35Кбайт ) размера файла.
http://www.jetbrains.net/devnet/message/5232642#5232642 — первоисточник решения проблемы.


Даже не верится... Теперь можно включить автосохранение файлов при потере фокуса и автоматическую синхронизацию при получении :)))
21-Мар-2009 01:40 am - Через тернии
Пост к частой дилемме: можно ли тратить рабочее время на самообучение; или все силы на результат для компании без личного развития и с возможной дальнейшей ограниченностью в принятии решений из-за отсутствия соответствующих знаний.
В проекте надо было сделать одну довольно обычную и необходимую вещь. Я, в общем-то, понимал, что далеко не первый с этим столкнулся, что задав вопрос на программерском форуме, а точнее даже воспользовавшись поиском, нашел бы в течении дня простое решение. Но это сидело где-то в подсознании, которое сознательно глушилось, а в сознании было четкое желание познакомиться с аспектно-ориентированным программированием. В конечном счете сделал через AOP. Потом узнал правильный путь, занявший бы в несколько раз меньше времени. Смешно, конечно, и даже чуть обидно. Но знания в песок не уйдут и даже будут необходимы для следующей задачи, что и утешает. Думаю, поступил правильно в том числе и для компании.
18-Мар-2009 04:28 pm - IBM хочет купить SUN?
http://www.reuters.com/article/idUSTRE52H1GS20090318
С Java навряд ли что-то изменится, даже если сделка состоится. Но интересно посмотреть, к чему это приведет. Как бы монополии аля Микрософт не приключилась.
Core Spring, Moscow: 5-8 May 2009
Хотел бы посетить, но...
88000 рублей за четыре дня - они охренели? За что такие бабки? Хотел бы узнать, что входит в семинар. Какие компании, интересно, пошлют сотрудников на это обучение?
А float и double как раз только в виде классов, чтобы не искушать неопытных разработчиков. Ну или тоже примитивными, но с ошибками при компиляции, если не указано специального параметра, чтобы программист выбор этих типов делал осознанно.
Даже не новички за каким-то хреном пытаются впихнуть деньги в double.
Юнит-тесты, CI, даже нагрузочное тестирование - все это так себе.
Вот кто может посоветовать автоматическое тестирование пользовательского интерфейса? Оно имеет смысл?
15-Янв-2009 08:17 pm - Альтерантива CruiseControl?
Хотя уже вроде все настроил, но хочется, чтобы кто-нибудь посоветовал альтернативу. В CC некоторые места вообще ни разу не логичные, и, подозреваю, что и в будущем можно огрести проблем, даже если не считать инструктаж коллег.

UPD: про Hudson кто что может сказать? На рсдне увидел, что кто-то посоветовал. Правда, только один раз :)
Хотя CC похоже заработал так, как надо, и мозг больше можно не парить по этому поводу.
В очередной раз на просьбу оставить свое мнение о субже написал, что было б неплохо, если IDEA будет работать быстрее. Не думал, что будет ответ. Однако, через несколько часов пришло письмо, где советовали перейти на 8.0.1, в которой решили некоторые вопросы производительсноти, и дали ссылку на их статью по этой теме.
Но все равно думаю, нафига мне восьмерка дома, если только под J2ME программлю? Пятерка летает, и ее возможностей хватает с головой.
26-Ноя-2008 08:26 pm - Чертов Spring MVC
Два часа убил, чтобы понять (точнее найти), какого хера CustomDateEditor, который регистрируется в биндере, работает только в одну сторону - setAsText, а getAsText при отображении не пашет.
Оказалось, вся эта радость будет работать в обе стороны, только если в ModelAndView запихать binder.getBindingResult().getModel(), что уже ни разу не интуитивно понятно. А я к тому же работаю с MultiActionController, где в методы ни Binder, ни BindingResult не передаются, так что пришлось извращаться с сохранением биндера в реквесте.
Но теперь Date везде правильно мапится, и не надо по тысяче раз проверять в валидаторе поля с датами. Вот думаю, стоило оно того? Наверное, все-таки, стоило.
NOTE: This default implementation on Calendar just repeatedly calls the version of roll() that rolls by one unit. This may not always do the right thing. For example, if the DAY_OF_MONTH field is 31, rolling through February will leave it set to 28. The GregorianCalendar version of this function takes care of this problem. Other subclasses should also provide overrides of this function that do the right thing.

Сначала хотел выделить жирным последнее предложение, потом понял, что читать надо полностью, ценно каждое слово.
Отожгли.

... уже релиз вышел. Быстры, однако. 05.11 RC2, 06.11 релиз.
Доступна через EAP, по умолчанию поставляется с JRE 6 Update 10.
Мне кажется, что очень сильно возросло быстродействие интерфейса и загрузка самой среды. Багов за полдня пока не замечено. В общем, рекомендую.
Кто уже поставил? Впечатления?

Хозяйке на заметку: EAP'овские билды IDEA можно использовать 30 дней без регистрации, а за это время обычно выходит еще один билд, который тоже можно использовать 30 дней на халяву, и т.д.

Реклама

Настроить
This page was loaded Дек 4 2009, 6:04 pm GMT.