Hello World на Google App Engine

Рубрика: Google, Java | 15 February 2010, 13:38 | juriy

Небольшая заметка о том, как создать и разместить свой проект на сервисе Google App Engine.

По “долгу службы” довелось пощупать интересную технологию, до которой раньше не доходили руки. Думаю, Google App Engine будет интересен не только мне, поэтому начинаю мини-цикл статей о разработке для App Engine.  [Далее...]

Разминка для хвоста

Рубрика: Java, Задачки | 2 December 2009, 01:01 | juriy

Ух, как же давно ничего не писал в блог! Отчасти тому виной твиттер. Я обязательно напишу отдельную заметку об этом “убийце блогов”. А сейчас, хочу представить вам пару свеженьких Java задачек.
[Далее...]

Project closed. Lessons learned.

Рубрика: Development, Just a life, Работа | 11 March 2009, 11:26 | juriy

Вот и подошел к концу очередной абзац моего резюме. Проект, которым я руководил последние полтора года, закончен. Как минимум, закончена его разработка с нашей, аутсорсинговой стороны.

Работая на этом проекте, я вынес для себя несколько важных уроков. Этот опыт я добывал сам: некоторые уроки дались легко, другие вылились в потерянное время и нервы. Чтобы как-то прорезюмировать проект в целом: работа над ним была _нормальной_. Практически не было овертаймов, была хорошо налажена коммуникация с заказчиками и внутри компании все «рабочие моменты» решались на удивление быстро.
[Далее...]

JavaScript applet loader.

Рубрика: Development, Java, JavaScript/Ajax | 6 February 2009, 13:50 | juriy

У каждого разработчика есть свои маленькие “заморочки” по поводу того как должно выглядеть приложение. Одна из моих любимых: пользователь должен знать минимум о том, как работает приложение и на каких технологиях оно построено. Взять, к примеру, Flash. Загружается тихонько в окне браузера, крутит пользователю картинки или видео и до тех пор, пока пользователь не начнет по нему кликать правой кнопкой, не признаЕтся кто он такой.

С другой стороны Java. Вот тебе пользователь раз логотип при загрузке апплета, да побольше, побольше, а если ты вдруг забыл про то, что работаешь с великой и могучей Java, мы тебе иконку в трей кинем, чтобы он тебе оттуда напоминал что пора качать новую версию.
Вобщем, вы мою позицию поняли.

Недавно я задался вопросом, как организовать загрузку апплета на странице так, чтобы пользователь не увидел экрана загрузки. Вместо него я бы хотел, к примеру, разместить логотип и progress bar (не настоящий, а просто картинку, которая показывает, что процесс идет). Второе обязательное требование: чтобы приложение отображалось, как только GUI прорисован. Мы не хотим заставлять пользователя ждать лишнее время.
[Далее...]

POST сюрприз

Рубрика: Java | 2 February 2009, 14:09 | juriy

Сейчас, в мире web 2.0 самый модный buzzword это давно уже не ajax. Асинхронные запросы на страничках настолько прочно вошли в нашу жизнь, что воспринимаются как должное. Более модный нынче термин – Comet. Comet – технология общения клиента с сервером, похожая на Ajax, за тем исключением, что Comet держит HTTP подключение открытым. Что это означает? К примеру, сервер может в любой момент оповестить клиента о событии, не дожидаясь, пока клиент спросит сам.
По такому принципу, к примеру, работает Google Talk из браузера.
Это преамбула.

На выходных я решил реализовать такое подключение из Java-апплета к серверу. Я хотел, чтобы _оба_ канала (и канал для запросов и канал для ответов) были постоянно открыты. Таким образом задержка передачи сообщений была бы идентична задержке TCP/IP подключения.
[Далее...]

Не верьте кодогенераторам,

Рубрика: Java | 5 January 2009, 11:57 | juriy

или история одного маленького и противного бага.

Сегодня убил некоторое время, отлавливая мерзкий баг. Баг был наглядно продемонстрирован юнит тестом, который, помимо всего прочего, проверял два объекта на эквивалентность. Сами объекты – простые java-бины с парой полей – одно типа int, второе типа String[][]. Код для equals и hashCode поручил сгенерировать eclipse’у. Подвох оказался в том, что метод equals попросту не работал – он всегда возвращал false. При детальном рассмотрении проблема нашлась:

if (!Arrays.equals(fieldTwo, other.fieldTwo))
	return false;

Все ведь просто, Arrays.equals сравнивает типы массива и количество элементов в каждом из них. Затем проверяет эквивалентность поэлементно. Первые две проверки проходят, а вот третья проваливается с треском. Ведь никакие два объекта-массива в java не эквиваленты:

System.out.println(new int[]{1}.equals(new int[]{1})) // Выведет false.

Для проверки эквивалентности многомерных массивов нужно использовать метод deepEquals, который, кстати, находится в том же классе Arrays.

Ради интереса я попробовал сгенерировать код equals и hashCode в IntelliJ IDEA. Idea отказалась учитывать многомерный массив при создании кода equals. По крайней мере, это честнее, чем создавать нерабочий код.

Учитывайте эти грабли, когда в следующий раз будете нажимать кнопочку кодогенератора.

The power of 4k

Рубрика: Development, Java | 27 November 2008, 11:25 | juriy

Уже много-много времени я увлекаюсь разработкой игр на Java. Да что тут говорить, мое первое приложение на Java была мини-игра для мобильного телефона Siemens M55, моя первая постоянная “программистская” работа была тоже связана разработкой игрушек на Java.

Эта заметка посвящена ежегодному событию, которое проходит по инициативе www.javagaming.org – состязанию Java 4k. Правила очень простые – необходимо сделать интересную игру на Java, так чтобы размер архива (jar) с игрой (и всеми ресурсами) не привышал 4 килобайта. Трюки вроде “напишу-ка я на 4 кб загрузчик, который подтянет с сайта мой 50-мегабайтный движок” не проходят.
Естественный вопрос: “что, черт побери, можно написать на 4 килобайта?”. Чтобы на него ответить достаточно взглянуть на игрушки прошлых лет:

Победитель прошлого года, простая, но интересная аркада:

Spiderball4k
А эта игра потрясет любого: изометрическая Real-Time стратегия, где есть разные юниты, можно строить здания, добывать ресурсы и воевать с AI! Комментарий к этой работе с форума javagaming выражает основную мысль как нельзя лучше: “Hey, where did you put other 100k?!”
T4anks

Есть еще множество интересных игр. В этом году я думаю присоединиться к соревнованию. Надеюсь, времени хватит.

Flex™ 3: A Beginner’s Guide

Рубрика: Книги | 29 October 2008, 13:09 | juriy

Недавно я решил расширить свой кругозор и освоить новую для себя технологию – Flex. Причин тому несколько: вначале я посетил семинар в своей компании, где сотрудники поделились историей успеха по использованию Flex для довольно крупного коммерческого Rich Client приложения. Семинар был проведен “на одном дыхании” – очень интересно и полезно. Через несколько недель я зашел в гости к Саше Шишко: он показал мне, как на Flex можно написать серьезный онлайновый игровой проект. Итак, я и сам решил разобраться в том, что же такое Flex.

После того, как базовые уроки от Adobe были проработаны, я начал искать другие источники информации. Под руку попалась книга “Flex™ 3:
A Beginner’s Guide”
. Ей и посвящен обзор.

Книга читается очень быстро – всего около 300 страниц, половина площади которых занята скриншотами приложений. При этом полезной для меня информации было страниц на 30. Несмотря ни на что, книга дает некоторое представление о технологии, с которой предстоит работать. Это и есть её основная заслуга.

Части, посвященные программированию, просто умиляют: в третьей главе автор в двух словах рассказывает об основных принципах ООП для не-программистов, а в 8-ой показывает, как пользоваться консольным(!) отладчиком. Синтаксис языка практически не описан, а примеры воспринимаются скорее интуитивно.

Наиболее полезными оказались главы 5 (States, Transitions and Behaviours), 6 (Modifying Appearance) и 8 (Debugging and Profilig, та часть, что Profilig).

Моя субъективная оценка – 4 из 10.

Сейчас читаю Essential ActionScript 3.0. Вот там все фундаментально – автор честно признается на 9-ой странице, что до 7-й главы компилировать и запускать ничего не будем, будем учить мат. часть. :-)

Synth’етичекская заметка.

Рубрика: Java | 23 October 2008, 16:55 | juriy

Новый Look And Feel – Synth – появился в Java 5, но не был особо заметен до появления живых доказательств его работоспособности, вроде Nimbus. Основная тому причина: Synth сам по себе не является Look And Feel’ом, но предоставляет достаточно удобный API для разработки laf.

Вот как красочно описали Synth в одной из заметок на ibm.com:

The goal for Synth is simple — let developers create a new look and feel without writing one line of Java code.

Не верьте ни слову – создать приличную “шкурку” для вашей программы без Java кода не выйдет. Да и груды заметок о том, какой Synth простой – скорее преувеличение. Synth не простой. Но создать LaF на основе Synth существенно проще, чем создать LaF на основе, к примеру, BasicLookAndFeel или Metal.
[Далее...]

Java 6 update 10 is out

Рубрика: Java | 16 October 2008, 10:08 | juriy

Без особого шума Sun выпустила в свет Java 6 update 10. Он просто появился на странице download на java.sun.com.

Update 10 включает в себя массу долгожданных нововведений.

Java Kernel – пользователю не нужно будет скачивать весь JRE для того, чтобы запустить Java приложение. Достаточно скачать Kernel – всего около 4Mb, дополнительные компоненты по мере необходимости будут скачиваться в фоновом режиме.

Java Plug-in: добавлена возможность указывать настройки памяти и аргументы запуска VM отдельно для каждого апплета (ну неуж-то можно будет и в апплете проинициализировать OpenGL pipeline?!).

О Java Deployment Toolkit мы уже писали. Вкратце: это JavaScript, который умеет определять версию JRE, установленную у пользователя и при необходимости обновлять её.

Нововведение, которое лично я очень хотел увидеть – возможность создавать окна неправильной формы и полупрозрачные окна. Для Rich Client’ов незаменимая вещь, которой очень нехватало.

Добавлен новый Look and Feel – Nimbus, который создан на базе Synth автором Filthy Rich Clients.

Download page:
http://java.sun.com/javase/downloads/index.jsp

Более подробный обзор Java 6 update 10:
http://java.sun.com/developer/technicalArticles/javase/java6u10/

Страница 1 из 812345678