воскресенье, февраля 21, 2010

Java сообщества

Подписался на некоторые java рассылки/сообщества. Поражен количеством людей не понимающих как оно работает и способных рассуждать только на уровне оберток/фреймворков. Интересно есть термин для программиста способного механически писать только в любимом фрейморке и не понимающего сути?

воскресенье, февраля 14, 2010

Про будущее вёрстки

Не прошло и года, как подвернулся случай изучить "GWT 2.0 Layout system". Случай подвернулся после того как в очередном проектике IE успешно не смог ничего показать, хотя ничего сложного от него не требовалось. В общем впечатления от "standards mode" пока сугубо положительные. Я как человек верстающий крайне редко, всегда убивал много времени на несложные вещи типа хедер с двумя колонками, правая резиновая и тп. Теперь куча проблем решена за меня практически из коробки: http://code.google.com/webtoolkit/doc/latest/DevGuideUiPanels.html . Задействование мозга конечно никто не отменял, но в целом многое упростилось и про хрень типа "а под IE мы напишем хак" в светлом будущем видимо можно будет забыть (да и сейчас при переходе на gwt layout'ы мой проектик мгновенно заработал в IE). Вобщем такими темпами скоро потребность в волшебных верстальщиках для проектов на GWT отпадёт.

Кстати если кто не был на GDD09(как например я), то тут есть записи: http://code.google.com/intl/ru/events/developerday/2009/sessions.html. Пробежавшись по заголовкам я просмотрел "GWT App Architecture Best Practices". В принципе сейчас это и в хелпе есть частично (про MVP), но всё равно советую посмотреть. На русском смотреть не советую - переводчик жжот местами. Жаль не было этой презентации года 3 назад, когда я городил похожее сам и собирал все шишки тоже сам (например злоупотреблял шиной для посыла всего и получал дикую прожорливость и тормознутость из-за этого - тут же докладчик сразу говорит что так делать не стоит, что сбережёт многим много нервных клеток). Правда на практике не всё так гладко как он рассказывает получается с MVP, но для ознакомления с концепцией в принципе и этого примера вполне достаточно чтобы загрузить средний мозг. А все сложности можно решить - главное понимать идею.

вторник, февраля 09, 2010

Лучший способ убить GAE

Если вдруг у вас в логах появились сплошные сообщения "Request was aborted after waiting too long to attempt to service your request. Most likely, this indicates that you have reached your simultaneous dynamic request limit. This is almost always due to excessively high latency in your app. Please see http://code.google.com/appengine/docs/quotas.html for more details." и вы недавно задеплоили новую версию, то не стоит первым делом проклинать гугл который не даёт вам по крону запускать относительно лёгкий на ваш взгляд скрипт. Потому что заподозрив гугл в плохом я стал искать признаки того что моя jvm постоянно релоадится из-за того что на сайт нету нагрузки извне и заниматься прочими глупостями. А всё оказалось очень просто. Относительно несложный regex натравленный на пару килобайт текста сжирал весь процессор в одну харю ну а дальше по цепочке не хватало процессора всем бэкграундным скриптам (которые впрочем успевали переодически пробиваться и худо-бедно работать). Самое хреновое что при этом почему-то и логгинг не работал(те чекпойнты заботливо прописанные по скрипту тупо ничего не писали в лог, а писалось только сообщение которое я привел выше), так что выделив методом исключения фрагмент кода на котором GAE ложился пришлось тупо догадаться в чём дело. :)

воскресенье, февраля 07, 2010

GAE как сделать rollback в java

Почему-то GAE сильно ориентирован на питонистов и в ошибках часто даёт подсказки только для них. Или может считают что те кто на джаве пишут сами догадаются...

Вобщем наконец я смог сломать своё приложение до состояния когда пришлось пользоваться консолью. Во время очередного деплоймента мне показалось что оно зависло и я отменил его и перезапустил eclipse. В итоге стал получать сообщение вида: "Another transaction by user *** is already in progress for this app and major version. That user can undo the transaction with appcfg.py's "rollback" command.". Вобщем пришлось лезть к консольным GAE тулзам в eclipse (*path to eclipse*)/plugins/com.google.appengine.eclipse.sdkbundle_VERSION/appengine-java-sdk/bin/ и там запустить (вариант для винды) appcfg.cmd -e vasyapupkin@gmail.com rollback <путь к war директории проекта eclipse>.

Также попробовал GAE "Task Queues". На мой взгляд замечательная вещь, очень удобно по сравнению со стандартными велосипедами на кроне. Жаль пока это экспериментальная фича и повально использовать даже в своём тестовом проектике я не буду пока.

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