browser chrome firefox lifehack web

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

google-chrome-hidpi

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

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

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

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

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

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

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

linux virtualization

Запуск дистрибутива linux как приложения

Запуск виртуальной машины с последовательным портом в качесте консоли и перенаправлением его в stdio процесса qemu:

Для примера работы эмулятора будем использовать дистрибутив tinycore linux:

Пересборка initrd образа:

Пример вывода(перенаправление консоли ядра отключено для наглядности):

programming xml

Безумие XQuery

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

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

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

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

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

lowlevel performance

glibc’s memory allocator

malloc_never_fails_tshirt-r8bdfeac6456e4703803a0d7bb91679da_va6lr_512
Когда приложение интенсивно создаёт и удаляет различные объекты при этом не производя над ними каких-либо ресурсоёмких вычислений, производительность приложения ограничивается в основном подсистемой управления памятью. И для более аккуратной разработки приложения необходимо воспринимать эту подсистему уже не как «чёрный ящик», а уже учитывать некоторые его особенности. Рассмотрим аллокатор из библиотеки glibc на платформе linux x86_64.

Какое же API предоставляет аллокатор из glibc? Как он работает? Какие неожиданности в себе таит? Читать далее »

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 приложение на телефоне

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

electronic

Записки о NES / APU. Cчетчик кадров

Внезапно я осознал, что держать все в голове невозможно. Поэтому буду делать небольшие заметки об устройстве NES, которые я смог выяснить, изучая различные версии документаций и играясь с Visual 2A03. Некоторая информация, которую я здесь привожу, нигде не упоминается, но учитывается в современных эмуляторах.
Здесь я постарался описать работу счетчика кадров, который отвечает за генерацию сигналов для остальных частей APU в определенное время на кадре.
Читать далее »

java programming

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

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

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

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

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

javascript programming web

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

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

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

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

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