Архив автора: Yuriy Artamonov

Yuriy Artamonov

До последнего времени Юрий принимал активное участие в разработке опенсорс-фреймворка CUBA Platform, специализируясь на архитектуре и фронтенд-технологиях. Преподавал в Самарском университете разработку приложений для мобильных устройств, основы UI/UX и менторил студентов. В настоящее время работает в компании JetBrains в команде IntelliJ IDEA Ultimate. Когда выдаётся свободное время, пишет статьи и контрибьютит в проекты с открытым исходным кодом. Обожает реализовывать странные идеи с лозунгом: «А почему бы и нет?».

Пробуем Teamcity с Docker

Teamcity — это, пожалуй, один и самых любимых мною продуктов JetBrains. Он и удобный, и гибкий, и вообще приятный в работе.

Бывает так, что я хочу попробовать свежую версию и не хочу париться с его настройкой и установкой. Теперь, сделать это проще простого: берём образы Docker и в путь!

Официальные образы лежат тут:

Казалось бы, запускать их уже и так просто, куда ещё упрощать?

Как бы не так! Можно проще при помощи docker-compose.

1. Устанавливаем docker-compose из пакетов:

2. Создаём каталог ~/test/teamcity

3. Пишем файл docker-compose.yml

4. Запускаем это всё

Радостные идём на http://localhost:8111/ тыкать мышкой для дальнейшей установки.

Если вдруг захотите запускать Teamcity в Docker на продакшен серверах, то рекомендую посмотреть тут готовые конфиги с Nginx и PostgreSQL: https://github.com/Egregors/teamcity-docker-compose

Отличные иконки для LibreOffice как в MS Office 2013

Я много раз начинал пользоваться LibreOffice и постоянно не понимал, что же мне в нём не нравится.

Теперь я знаю ответ на этот вопрос — меня раздражают иконки инструментов.

Иконки LibreOffice

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

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

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

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

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

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

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

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

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

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

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

javaone2015

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

JavaOne_Cuba_Logo_Final_transparentjavaone

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

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

Тюним масштабирование браузера для hidpi Windows

google-chrome-hidpi

Имеется: ноутбук 14″ с разрешением Full HD 1920×1080, Windows 8.1 и браузеры Firefox и Chrome

По умолчанию Chrome и Firefox достаточно хорошо масштабируют картинку, но для некоторых приложений получается уж слишком большое изображение и на экране помещается мало контента.

Задача: заставить браузеры использовать другой коэффициент масштабирования всего интерфейса, не используя масштабирование страниц. При масштабировании страниц, Chrome и Firefox используют другой алгоритм, нежели когда для всего браузера выставлен нестандартный коэффициент масштабирования.

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

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

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

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

  • Google
  • Vaadin
  • Sencha
  • Arcbees
  • LinkedIn

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

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

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

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

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

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

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

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

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

suspension_bridge

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

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

Безумие XQuery

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

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

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

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

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

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

vlc_cat

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

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

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

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

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

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

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

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

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

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

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

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