воскресенье, 18 ноября 2012 г.

1920x1080 #3

Итак, Java/Swing приложения настроены на использование GTK+ L&F темы, а опции антиалиасинга включены - все равно остаются две проблемы.

Проблема #1: меню и контролы рисуются правильным шрифтом, но с full-хинтингом. В то, что Java под Linux использует неотключаемый full-хинтинг можно удостовериться включив временно такой же хинтинг во всей системе (я все таки предпочитаю slight) - приложения на Java/Swing и родные приложения станут похожи. Как чинить это не совсем понятно. Некоторые предлагают патчить OpenJDK

Проблема #2: В элементах, которые отрисовывает само Java/Swing приложение (например все текстовые редакторы) шрифты отрисовываются в неправильных размерах. Например, мне приходится выставлять в IDEA в качестве моноширийного шрифта шрифт размером 16pt, тогда как в нативных приложениях с этой ролью справляется шрифт размером 10pt. Суть проблемы в том, что под Linux рендерингом занимается сама Java, вычисляя размер в пикселах относительно фиксированного разрешения в 72 DPI. Остается завидовать владельцам маков, где такая проблема решена. Само несоответствие размеров - полбеды, беда в том, что при этом хинтинг работает неправильно и рисунок шрифта кардинально отличается от того, что должно быть. При этом full-хинтинг делает буквы тонкими и ажурными, что терпимо в случае меню и контролов, но вызывает раздражение в моноширийном шрифте текстового редактора.

Некоторые предлагают вырезать из шрифта весь хинтинг. Шрифт действительно становится более мясистым, но при этом возникает куча артефактов, что, конечно, никуда не годится

Я уже приготовился смириться с этим и выставил Lucida Typewriter 16 pt, как наиболее удобоваримый шрифт в моей ситуации, но мне на глаза попалась утилита ttfautohint, которая удаляет встроенный в шрифт хинтинг, заменяя его своим. Попробовал обработать пару шрифтов и вот оно! - желаемая мясистость моноширийного достигнута, причем без каких-либо заметных артефактов.

вторник, 13 ноября 2012 г.

1920x1080 #2

Вдогонку к посту про высокое разрешение

Следующие волшебные опции полностью убирают мусор из хинтинга в Java/Swing приложениях в случаях когда они либо не используют GTK+ тему; либо используют, но у них еще есть текстовый редактор, который отрисовывается не через GTK-библиотеки.

-Dswing.aatext=true
-Dawt.useSystemAAFontSettings=lcd

Приложения, конечно, все равно не выглядят такими же как родные, но при этом выглядят идеально

воскресенье, 11 ноября 2012 г.

1920x1080

Не было печали - на работе подогнали новый ноут. Sony Vaio SVS1511, зверь-машина: 4 ядра, i7-3612QM, RAM 8GB (up to 12GB), SSD 220GB, USB 3.0, матовый 15'' 1920x1080. До этого почти три года сидел на Asus 15'' 1366x768 и десктопах. Соответственно после перехода на новый ноут экранный DPI увеличился почти в полтора раза - спасибо хоть не ретина с ее двухкратным удвоением. Но все равно на экране всё стало очень мелким и работать в таком режиме стало тяжело.

В Unity/Gnome3, как известно, значение DPI больше нельзя выставить вручную так, как это можно было сделать в старом добром Gnome 2. В данный момент там можно выставить только "коэффициент увеличения шрифта" и то, только после дополнительно установки gnome-tweak-tools. Это стало последней каплей, которая окончательно переполнила мое терпение - Unity, давай, досвидания! Поставил XFCE - тот же Gnome 2, только лучше. Установил в настройках разрешающую способность в 120 DPI, в качестве основного выбрал шрифт Ubuntu 10 - все стало отлично. Почти.

Оболочка и родные GTK-, QT-приложения работают замечательно. В редких случаях (Sublime 2) приходится просить увеличить шрифт в редакторе, но практически всё прекрасно отображается и так. Приложения Java/SWT (Eclipse, Xmind) работают также отлично.

Консольный шрифт, там где он нужен (xfce4-terminal, gnome-terminal, guake) приходится доустанавливать вручную (DejaVu Sans Mono 10), иначе он какой-то не такой.

Приложения Java Swing похоже жестко завязаны на фиксированный DPI и игнорируют значение DPI установленное в системе. Установка L&F стиля в значение "GTK+" помогает привести текст в меню, окнах и сообщениях в надлежащий вид. Но даже при установке этого стиля приходится вручную увеличивать размер моноширийного шрифта до 16-18 пунктов для всяких редакторов и отображений результатов. Установить тему GTK+ можно либо покопавшись в настройках приложения (далеко не все это позволяют), либо с помощью опции "-Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel" или "-Dswing.systemlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel" в строке запуска. Некоторые приложение не дают настроить L&F в настройках, но при этом еще и игнорируют опцию в командной строке - устанавливая L&F жестко в коде. В таком случае последней надеждой является возможность настройки шрифтов индивидуально (на практике это позволяют многие приложения).

Для Swing-темы JGoodies (Aquafold Datastudion, Soap UI) есть специальные переключатели позволяющие устанавливать необходимый шрифт через системные опции.

JAVA_OPTS="${JAVA_OPTS} -DPlastic.controlFont=\"Ubuntu-plain-18\""
JAVA_OPTS="${JAVA_OPTS} -DPlastic.menuFont=\"Ubuntu-plain-18\""

Firefox и Thunderbird. Меню, окна, сообщения - все хорошо. Контент - плохо, очень мелко. Во многих местах размер шрифтов задается в px - и потом так же честно в мелких пикселах и отображается. Одним из решений является увеличение значения настроек font.minimum-size.* до значения 15 и выше. Это ограничивает размер шрифтов снизу, однако, к сожалению, зачастую приводит к расползанию верстки на сайтах, поскольку шрифты увеличиваются, а вот контейнеры в которых содержится текст - нет. Другим вариантом, который и оказался самым выигрышным, является увеличение значения настройки "layout.css.devPixelsPerPx" до 1.3, что приводит к плавному увеличению всего контента. При этом некоторая пиксел-оптимизированная графика выглядит размыто, но она, к счастью, уже является редкостью и анахронизмом.

Единственным неприятным моментом является то, что затейливые изогнутые табы в Thunderbird при этом визуально расползаются. Я уже оформил баг, а временным решением является корректировка XUL-верстки файлом ${THUNDERBIRD_PROFILE}/chrome/userChrome.css

@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");

.tab-background {
  background: transparent!important;
  margin: 0px !important;
}

.tab-background[selected=true] {
  background: -moz-Dialog!important;
} 

.tabmail-tab:not([selected]):not(:hover) +
.tabmail-tab:not([selected]):not(:hover)::before {
  background: transparent!important;
}

В браузере Chromium все еще хуже - там даже интерфейс рендерится без учета системного DPI. Я особо Chromium не пользуюсь, поэтому пока ничего особого не делал - только установил увеличение по-умолчанию в 125% в настройках.

Еще один найденный источник проблем - приложения Wine. Я пользуюсь парочкой виндовых утилит, поэтому пришлось разобраться. Микроскопичность устраняется с помощью настроек в winecfg. Во-первых, на вкладке "Graphic" есть ползунок устанавливающий DPI. Во-вторых, на вкладке "Desktop Integration" можно вручную выставить все шрифты (я поставил везде Ubuntu 10). После этих двух мероприятий приложения Wine выглядят почти также, как и родные.

И последнее - подключение к виртуальной Windows-машине через rdesktop. В Windows уже давно можно изменять общее увеличение/уменьшение размера шрифтов, но оказалось, что в RDP-сеансе изменение этого масштаба игнорируется - он остается таким же мелким. Проблема уже решена оперативным патчем от Микрософт.

среда, 5 сентября 2012 г.

Быстрая раздача файлов

Для того чтобы быстро отдать файл/директорию на другую машину или мобильное устройство через HTTP можно использовать два способа (кроме использования DropBox).

  • Питоновский скриптик woof (есть в репозитории)
  • Питоновскую же команду python -m SimpleHTTPServer
  • Команда (echo -e "HTTP/1.1 200\nContent-Disposition: attachment; filename=my.file\nContent-Type: application/octet-stream\nConnection: close\n";cat my.real.file.here) | nc -l 8888

пятница, 29 июня 2012 г.

Ubuntu 12.04: Network Manager

Совершенно внезапно оказалось, что в новой десктопной версии Ubuntu 12.04 используется новая схема резолвинга сетевых имен. Сервис Network Manager больше не пишет настоящие адреса DNS-серверов в файл /etc/resolv.conf. Вместо этого туда прописывается nameserver 127.0.0.1, а на порту 127.0.0.1:53 гордо восседает dnsmasq.

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

Тут описана причина и подробности: http://www.stgraber.org/2012/02/24/dns-in-ubuntu-12-04/

This was done to better support split DNS for VPN users and to better handle DNS failures and fallbacks. This dnsmasq server isn’t a caching server for security reason to avoid risks related to local cache poisoning and users eavesdropping on other’s DNS queries on a multi-user system.

воскресенье, 24 июня 2012 г.

Brasero

Уже вторую подряд версию дистрибутива Ubuntu на моем лэптопе Brasero не записывает диски - также как и встроенный в Nautilus записыватель.

Судя по всему баг скрыт где-то в недрах libburn и присутствует не у меня одного. Проблема пока что решается отказом от записи-на-лету (on-the-fly). В таком режиме Brasero тратит дополнительное время (и дисковое пространство) на подготовку ISO-образа - после чего запись происходит без проблем. Так же лучше на всякий случай отключить в Brasero все включенные по умолчанию плагины - там все равно ничего полезного.

четверг, 21 июня 2012 г.

Skype 4.0.0.7

Как уже всем известно - вышел новый Skype четвертой версии.

Самый беспроблемный способ начать с ним работу прямо сейчас - скачать статический дистрибутив и распаковать его в /opt (под рутом конечно). Старый Skype из штатного репозитория удалять не нужно.

Один баг я уже запостил.