December 15th, 2010

Фраза дня, или Последний негатив

Деградировал до программиста, или Опыт разработки Java-GXT-web-приложения

Чем я занимался последний месяц (помимо прочих директорских обязанностей): писал код. Да, да, как самый последний быдлокодер, разрабатывал web-приложение. На языке, которого не знал (Java) и под фреймворк, знакомый лишь по его javascript-версии (GXT, он же Ext-GWT, java-библиотека для Google Web Toolkits).

Почему я

Во-первых, идея приложения была моя (Веб-GUI для заполнения форм, хранящихся на локальном диске, а не в сети), срок для реализации неожиданно оказался очень коротким (месяц до рабочей альфы), другому программисту можно и не успеть все объяснить. Во-вторых, знакомые программисты, почитав техтребования, разбегались как черт от ладана (да и пойди найди Java-GXT программиста в Перми!). В-третьих, незнакомые на объявления вообще не откликнулись. Так что другого выхода не было.

Метрики проекта

Старт 12 ноября, альфа-версия 15 декабря, всего 33 дня. Разумеется, без выходных, и так в месяц не уложился. Всего 3482 строки java-кода, из них примерно 1000 строк добавились в последнюю неделю (когда пошло дописывание очевидных методов). 2 рефакторинга. 9 промежуточных сборок. 15 мелко исписанных (TODO и заметками) листов А4.

Запомнившиеся проблемы

1) GXT 2.2 несовместимость с компилятором GWT версии 2.1: NumberField в Firefox просто отказался работать (а вводить надо именно цифирки). Как обухом по голове, чуть не выбросил компьютер в окно. Потом по совету разработчиков GXT откатился на компилятор 2.03 и продолжил работу.

2) Java Date() - чтобы что-то делать с датой, в Java нужно прикручивать другие классы (календари и форматтеры), что меня просто шокировало. Написал пару нужных оберток, и двинулся дальше.

3) Невозможность использования HTML парсера браузера для разбора XML - не обрабатывает русские теги. А я было раскатал губу использовать GXT DOMQuery для обработки всех данных! Черта с два, нет русских тегов в HTML, халява обломилась.

4) Полный тупик с асинхронной работой - как ловить асинхронную нить из синхронной, если синхронная быстро кончается?! Долго возился с Java wait, но так ничего и не понял. Использовал GWT Timer, а потом перешел на назначение Listener'ов.

5) Управление "резиновой" отрисовкой виджетов Ext-GWT - это просто слезы. В разных сочетаниях они ведут себя по-разному, причем я так и не смог понять (методом экспериментального тыка), что там с чем связано. Пришлось остановиться на более-менее стабильных Layout'ах, а остальные отложить до лучших времен. Но горькое послевкусие поражения - осталось.

Не проблема

1) Полное незнание Java и Ext-GWT на начало работы практически не помешало. Async и Layout - вот те мета-навыки, которых на самом деле не хватало; а конструкции языков выучились по ходу кодирования.

Отсюда мораль: учить нужно не языки, а концепции; если у кого есть на примете хорошая статья по Layout в Ext-GWT - поделитесь ссылочкой, иначе самому писать (статью) придется!

Общие ощущения от Java и GXT

1) Java - намного лучше, чем ожидал, строгая типизация оказалась весьма удобна (за все время разработки не сделал ни одной ошибки, потребовавшей больше 3 минут на обнаружение), а набор вкусностей в IDE Eclipse - шире, чем я мог даже мечтать.

2) GXT - это реально круто. Программировать GUI на Java, с развитой типизацией - и получать его работающим под любым браузером. Даже не знаю, смогу ли я теперь делать сайты не на GXT :)

Результат

Альфа-версия, которая делает что требуется, и притом довольно красиво. Самая большая из когда-либо написанных мной программ. В коде, конечно, ад кромешный, напрашивается третий мега-рефакторинг, но я не идиот делать его перед дедлайном.

Второй результат: устал как собака, и смотреть на код больше не могу :)

Национальные идеи и национальные ценности, или Русские выходят из комы

Эта заметка должна была называться "Русских не существует". Однако как в старой клоунской репризе (Дуэль по жребию, один из участников должен выйти за кулисы и застрелиться; жребий брошен, проигравший выходит, выстрел; пауза, клоун возвращается с довольной физиономией: Слава Богу, я промахнулся!), я видимо ошибался. Как показала Манежная, существование русских как нации - величина, уже отличающаяся от нуля. Ну а теперь собственно текст.

Collapse )