Про планшет

Итак, я всё-таки поддалась веянию времени. :(

Даже как-то стыдно немного.

Выбор пал на ASUS MemoPad ME301T, потому что я тотальная нищебродка (читай: не хочу платить двойную цену за понты и ненужные навороты). Самый простенький Асус, какой только был, без мобильной связи и док-станции. Отсутствие первой успешно компенсируется наличием рядом телефона с вай-фай-адаптером. Что касается второго, то клавиатуру всегда можно подключить по USB, если припечёт, а набирать на таком экране большие тексты всё равно неудобно.

А мотивировано всё изначально было тем, что я решила после работы почитать электронные книжки и поняла, что при моей скорости чтения меня дико раздражает усилие, необходимое для перелистывания страниц на PocketBook iQ, не говоря уже о тормозах и графических артефактах.

И главное и несомненное преимущество: ОН БЕЛЫЙ!!!11

Работать за планшетом не получится, конечно. Не попрограммируешь и книгу не попишешь. А вот отдохнуть после работы, почитать/посмотреть чего — самое то.

Правда, Игорь тонет, чтоб его.

320430714

Нет, ну некоторые годные игры под Андроид есть. Aquaria там, Scribblenauts Remix. Есть Warcraft II, портированный народными умельцами с помощью опенсорсного движка. Хотя и то играть, постоянно водя пальцем по экрану, лично мне неудобно. Мышкой привычнее как-то.

Пока осваиваюсь. Для видео поставила VLC, для почты — AquaMail (бесплатную версию), в качестве браузера — Firefox. Он хоть и в этой инкарнации заслуживает репутацию Тормозиллы, зато там есть Adblock (который Гугл по понятным причинам в свой браузер никогда не вставит) и возможность принудительного отображения десктопной версии сайта. Что есть гут, ибо некоторые сайты, опознав Андроид, настойчиво пихают урезанные мобильные версии даже при разрешении 1280×800. Читалку электронных книг оставила штатную, вполне себе няшная.

Как всегда, в комплекте идёт куча всякой ненужной социально-облачной дребедени, которая оскорбляет мои чувства самим своим присутствием в списке приложений. Естественно, не удаляется. По-хорошему надо бы получить рута и перепрошить, как я поступила с телефоном, но пока лень, да и не знаю, есть ли для столь новой модели неофициальные прошивки. Хоть нужный язык есть из коробки, а то у HTC в стандартной прошивке были только русский и английский.

Ну и жаловаться на такую мелочь, как неотключаемое 12-часовое время в штатном виджете часов, было бы уже свинством с моей стороны. Это называется «зажралась». Заменила на Fancy Widgets.

Пока радуюсь.

Про GWT

GWT — зло.

Вообще у меня есть подозрение, что все языки, компилируемые в JavaScript — это зло. Но у меня нет достаточного опыта работы с такими языками, как CoffeeScript и TypeScript, чтобы судить о них. По крайней мере выглядят они интересно. Кроме того, они, по сути, расширяют синтаксис JS, а не пытаются спрятать его от разработчика. Но всё-таки это компилируемые языки, а значит, неизбежны задержки при загрузке страницы и несоответствие набранного кода коду в браузере.

Но GWT — это особая песня.

«А давайте сделаем вид, что никакого JavaScript у нас нет! Мы типа пишем на Java типа гуй в стиле Свинга.»

Отсюда эмуляция половины стандартной библиотеки. Отсюда абсолютно раздутая собственная Java-библиотека, в которой сами разработчики путаются. Отсюда описание интерфейса в Java-коде, отсюда все эти заигрывания с ClientBundle, только усложняющие переиспользование и переопределение CSS, отсюда костыли вроде UiBinder. Опять-таки ненужные.

«А давайте сделаем декларативный язык разметки для интерфейса!»

Алё, гараж. В web-клиентах уже лет двадцать есть декларативный язык разметки интерфейса. HTML называется.

Велосипеды, велосипеды, сплошные велосипеды.

Не получается абстракция-с. JS прёт наружу. Закон текучих абстракций ещё никто не отменял. Сделать вид, что у нас JVM, всё равно не получится. Не работает рефлексия, многопоточность, I/O и ещё много чего, что никогда не будет поддерживаться в браузере. Стандартный API календаря и форматирования даты/времени тоже почему-то не поддерживается, вместо него свой костыль, да ещё и продублированный в двух пакетах.

И так у них всё.

При этом попытка скрестить ужа с ежом, то есть подогнать паттерны Java под паттерны JavaScript, смехотворна. В JS есть много кошерных вещей, невыразимых в Java. Прототипы, first class functions, apply/call/bind, eval и new Function (зло, но и у них есть свои области применения), динамическое переопределение объектов, интеграция с JSON и т.д. В GWT для каждой нестыковки лепят свой отдельный костыль. Вариантов прикручивания к GWT того же JSON существует как минимум штук пять, и у каждого свои косяки.

При этом GWT ещё и пытается изолировать программиста от уже устоявшихся клиент-серверных парадигм. REST? JSON-запросы? Не, не слышали. А берите-ка GWT-RPC, давайте делать вид, что мы гоняем по сети Java-объекты — естественно, с диким оверхедом на самопальную сериализацию. Естественно, серверная сторона становится ни с чем не совместимой, кроме GWT-клиентов. А попробуйте-ка написать для этой байды юнит-тесты и сравните с лёгкостью юнит-тестирования REST-ресурсов Restlet или JAX-RS.

В качестве попытки исправить косяки GWT-RPC эти клоуны написали RequestFactory. Который ещё хуже, ибо гвоздями прибивается к реализации на сервере. А ещё клиент привязывается к схеме базы данных, что уже вообще ни в какие ворота не лезет.

Кстати, о юнит-тестах. Одной из целей GWT заявляется как раз лёгкость юнит-тестирования. В итоге это выливается в то, что они предлагают выполнять автоматизированное тестирование GWT-клиентов… в браузере! Интересно, откуда возьмётся браузер на headless-сервере, где тесты гоняются автоматически в каком-нибудь jenkins’е. И чем это лучше тестирования JavaScript в браузере? Кстати, проблема с тестированием JavaScript решается вообще элементарно: Rhino + envjs для эмуляции браузера.

Что имеем в сухом остатке?

Тестирование на JavaScript:

  1. Внести изменения в код
  2. Перезагрузить страницу

Тестирование на GWT:

  1. Внести изменения в код
  2. Запустить тяжеленный сервер с devmode, еле ворочающийся с -Xmx512m
  3. Дождаться запуска
  4. Перезагрузить страницу
  5. Дождаться, пока тормозной компилятор распарсит ВЕСЬ клиентский Java-код, игнорируя слайсы и runAsync
  6. Выругаться на ошибки deferred binding, вылезающие в зависимости от погоды на Марсе
  7. Перезагрузить страницу
  8. Перезагрузить страницу
  9. Выругаться на OutOfMemoryError из-за текучего и тормозного браузерного плагина
  10. Перезапустить сервер, повторить шаги 2-5
  11. Наконец дождаться загрузки формы логина
  12. Залогиниться
  13. Подождать, пока компилятор подгрузит всё остальное…

Ну вы поняли.

А сначала-то какая у меня была эйфория, когда начальник решил использовать GWT. Шанс изучить новую технологию, да ещё и на Java! Это сейсас я понимаю, что на чистом JS я бы написала веб-морду гораздо быстрее и при этом меньше мучалась бы с багами разных сопутствующих библиотек в разных браузерах.

«Если вы не отзовётесь, мы напишем в Спортлото!»

Итак, позвонил сотрудник ГАИ.

Оказалось, указанные участки не относятся к дорогам общего пользования, поэтому на них ГОСТ не распространяется.

То есть по их логике получается, что здесь всё так и должно быть, и никто ремонтировать ничего не будет.

IMAG0035

А вот этот участок…

IMAG0032

…является газоном! Потому что находится между проезжей частью и тротуаром.

Интересно, если это газон, могу ли я насыпать туда земли и посадить цветы?

Каждый день узнаёшь что-то новое.

Ещё он предлагал выйти и пообщаться лично — «моя машина, мол, стоит возле вашего дома». Я отказалась.