Архив категории: programming

desktop html5 java javascript programming

Как разрабатывать HTML 5 Desktop приложения на Java?

vaadin-desktopМотивация

Кому могут понадобиться Desktop приложения, использующие веб-страницы в качестве UI? Отвечу прямо — всем! Всем кто страдает, пользуясь неудобными и некрасивыми приложениями.

Для меня, как для разработчика, очень важно делать пользовательские интерфейсы удобными, интересными и позволяющими пользователям не отвлекаться от работы. Кроме того, очень хочется, чтобы интерфейсы были привлекательными и их было приятно показывать. Все эти соображения приводят нас к неутешительному выводу: существующие UI фреймворки для настольных приложений ужасны.

Так что же такое есть в веб-приложениях, чего нет в настольных?

  • Разнообразие визуального оформления
  • Адаптивные и идеально-масштабируемые интерфейсы
  • Развитые анимации
  • Богатый набор компонентов и библиотек для разработки UI

Похожими возможностями обладают WPF для .NET приложений и JavaFX из мира Java. Но их компоненты не могут угнаться за стремительно развивающимися web-технологиями.

Читать далее »

enterprise event java programming

JavaOne 2015 и все-все-все

Как я попал на JavaOne ?
Если я буду рассказывать с самого начала, то мне придётся рассказывать 5 долгих лет, так что вкратце.

javaone2015

Мы приехали на JavaOne со своим продуктом, платформой для разработки приложений на Java — CUBA Platform.  На выставке у нас был свой стенд, а на самой конференции выступал наш Developer Advocate с докладом о разработке расширяемых продуктов. Кроме того, я вёл занятия Hands on Lab для участников конференции, на которых они могли попробовать создать небольшое приложение на CUBA.

JavaOne_Cuba_Logo_Final_transparentjavaone

В этом топике я постараюсь передать атмосферу конференции и поведать вам немного о докладах и стендах выставки.

Читать далее »

git linux

Компактное хранение исходного кода

kernel-zip-src

При реализации проекта DistTest возникла необходимость собирать ядро linux из разных версий исходников. И первым решением было загружать готовые архивы исходников с kernel.org для каждой отдельной версии. Но вскоре стало понятно, что данный подход требует значительного дискового пространства: 0.5-1ГБ на каждую версию, которых в данный момент порядка 1000. А также данные подход позволяет собирать только именованные версии, но не версии соответствующие отдельным коммитам.

Для решения проблемы дискового пространства можно хранить несколько базовых версий и приводить их к необходимому виду с помощью патчей, но это приводит к значительному объёму I/O со случайным доступом, что выполняется медленно на HDD и приводит к износу SSD. Тот факт, что исходники необходимой версии требуются лишь временно, подсказывает использовать tmpfs. Но есть более эффективный подход в плане использования оперативной памяти — хранить в tmpfs только отличающиеся от уже имеющихся файлов, что позволяет сделать aufs.

Читать далее »

java programming web

Самое важное на конференции GWT.create 2015

gwt-create-logoВ январе прошла интересная конференция GWT.create, на ней было сделано несколько важных анонсов и представлено видение разработчиков GWT относительно будущего фреймворка. Я постараюсь рассказать вам о самых важных новостях из мира GWT разработки.

Основные компании участники:

  • Google
  • Vaadin
  • Sencha
  • Arcbees
  • LinkedIn

По ощущениям, вся конференция затевалась, чтобы заявить миру — GWT жив и будет жить. Считаю, что у них совсем неплохо получилось.

Ну а теперь про сами доклады.

Читать далее »

c sharp groovy java programming scala

Типобезопасный биндинг данных для UI компонентов

Хныканье про UI биндинги

Мне по долгу службы приходится иметь дело с UI компонентами и их API. Я постоянно разрабатываю их, расширяю и интегрирую существующие, пишу к ним тесты и документацию. За 5 лет я видел много разных подходов и хотел бы обсудить одну существенную деталь из мира UI разработки.

Связь с данными — довольно болезненный вопрос при работе с различными полями ввода. Мы постоянно используем различные сложные абстракции — Property, DataSet, DataSource, Binding,  Adapter и ещё в довесок кучу костылей вроде ручной реализации реакции на изменение данных в модели и в компоненте. При этом основных подходов для подключения источника данных к UI компоненту всего два:

  1. Реализация интерфейса Property { get; set; }
  2. Подключение свойства объекта при помощи рефлексии по имени

Первый вариант довольно громоздок и требует реализации интерфейса доступа к данным в каждом месте, где требуется биндинг. Второй вариант очень часто применяется, но у него есть существенный недостаток — он плохо поддаётся рефакторингу, очень легко пропустить строку с именем свойства в дебрях UI при переименовании самого свойства.

suspension_bridge

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

Читать далее »

programming xml

Безумие XQuery

Довольно часто мне бывает нужно выделить часть данных по некоторым критериям из файлов формата XML. И каждый раз я писал небольшие скрипты или даже целые Java приложения, которые разбирали XML и анализируя файл выдавали необходимые данные. Сегодня я решил так не делать и попытался воспользоваться стандартом XQuery, предназначенным для выборок данных из XML.

Задача была простая — выбрать из файла Gnucash список счетов (Id, описание) и все транзакции (Описание, с какого счета, на какой счёт, сколько).

Первое на что стоит обратить внимание — очень много реализаций стандарта XQuery и целая куча редакторов. Редакторы есть как онлайн так и для настольных систем с ОС Windows / Linux.

Начал я изучение XQuery со статьи на Wiki, в которой не написано ну совсем ничего полезного. Потом продолжил поиск на w3c и stackoverflow. Кривая поиска вывела меня на довольно годный проприетарный редактор oXygen, его триальную версию я и поставил.

oXygen XQuey editor Читать далее »

android groovy java network programming video web Wi-Fi

Диванная автоматизация видеоплеера VLC

vlc_cat

Давным давно сделал себе пульт управления проигрыванием видео в виде приложения для мобильного телефона. Ведь это так приятно — лёжа на диване, прибавлять звук на компьютере или ставить фильм на паузу. Приложение было написано в режиме классического ночного безумия одним набегом.

Я пользуюсь дома замечательным видеоплеером VLC, чего и вам советую. Он отлично подходит для удалённого управления, поскольку имеет встроенный веб-интерфейс.

Приложение на GitHub diy-remote

Релизы брать тут: https://github.com/jreznot/diy-remote/releases

Для работы вам потребуется:

  • Wi-Fi сеть
  • Запущенный сервер на вашем компьютере
  • Настроенный веб-интерфейс в VLC
  • Android приложение на телефоне

Читать далее »

java programming

Тезисы Effective Java — Создание и уничтожение объектов

Создание и уничтожение объектов

1 Отдайте предпочтение статическим методам, а не конструкторам

  • Статические методы имеют имена
  • Статические методы не требуют создавать объекты на каждый вызов
  • Статические методы могут возвращать объекты подтипа
  • Статические методы сокращают параметризованные объявления
  • Помните, что классы только лишь со статическими методами создания,  без публичных или защищенных конструкторов не могут быть унаследованы
  • Статические методы для получения экземпляров объектов не отличимы от других статических методов, что может ухудшить читаемость кода

Читать далее »

javascript programming web

Используем Leaflet JS для географических данных

Итак, задача на сегодня:

  1. Отобразить некий уголок земного шара на карте
  2. Выделить интересную область карты
  3. Пометить ключевые объекты
  4. Добавить описания
  5. Реагировать на зум карты, отображая только нужную информацию

Для всего этого воспользуемся открытыми картами — Open Street Map и библиотекой JavaScript — Leaflet JS.

Читать далее »

DSL java perl programming

Не нравится язык? Напиши его себе сам.

Во время поиска документации по незнакомым функциям стандартной библиотеки, наткнулся на удивительную фичу Perl’а — source filters. Она позволяет выполнять препроцессинг исходного кода перед выполнением. Обработка может производится как кодом на C, так и кодом на самом Perl’е, что является наиболее переносимым вариантом.
Так чего же он нам позволяет добиться?
Многого! Например можно добавить возможность использовать прототипы функций с именованными аргументами, которые появятся только в Perl6.

Или изменить синтаксис чуть сильнее:

Читать далее »