Показаны сообщения с ярлыком начинающим. Показать все сообщения
Показаны сообщения с ярлыком начинающим. Показать все сообщения

20090922

Как нарисовать стрелку в Inkscape

Очень люблю Inkscape, и часто в нём рисую разные схемы. А для того, чтобы рисовать схемы, нужны стрелки. Готового инструмента «стрелка» в Инкскейпе нет*, поэтому творю из подручных материалов сообразно вкусу и потребностям. В общем-то, минутное дело, умеючи...

Я подумал, что кому-то, возможно, будет интересно увидеть, как можно самому нарисовать практически любую стрелку. Предлагаю небольшой видеоурок, где показываю как нарисовать стрелку попроще и стрелку позатейливей:



Это мой первый скринкаст. Прошу строго не судить. Кино немое, просто с титрами.

* В инкскейпе есть маркеры конца и начала линии. Красить их нельзя, они всегда чёрные. Впрочем, подсказывают из зала, можно — создав стрелку, надо «оконтурить обводку», получить два контура (древко и острие), вручную их подправить-подравнять, и получится полноценная контурная стрелка. Я пока остаюсь приверженцем своего способа создания контурных стрелок. Впрочем, смотрите на другой способ сами (подал идею и сделал видео freedomfidaj).

20090410

Иерархия числовых типов в Haskell

В Хаскеле очень затейливая иерархия числовых типов. Всё дело в том, что кроме обычных машинных целых и чисел с плавующей точкой, в ней нашлось место и числам произвольной точности (настоящим целым и рациональным), и комплексным, и числам с фиксированной точностью.

Цитирую по официальному описанию языка:
Класс Num числовых типов является подклассом класса Eq, так как все числа можно сравнить на равенство; его подкласс Real также является подклассом класса Ord, так как остальные операции сравнения применимы ко всем числам, за исключением комплексных (определенных в библиотеке Complex). Класс Integral содержит целые числа ограниченного и неограниченного диапазона; класс Fractional содержит все нецелые типы; а класс Floating содержит все числа с плавающей точкой, действительные и комплексные.
С одной стороны, система устроена очень логично: введение дополнительных операций расширяет множество чисел. Так, деление целых дополняет целые — рациональными. Логарифмы и экспоненты требуют действительных. Однако сразу представить и запомнить всю иерархию классов непросто. Лучше один раз увидеть! Поэтому хозяйке себе на заметку и другим на потеху я составил вот такую памятку:


Исходник диаграммы

Оформил как «диаграмму классов», чтобы всем привыкшим к ООП было понятно, что от чего «наследуется» (линия со стрелкой к родителю). Почти все эти типы являются абстрактными («интерфейсами» в ОО-терминологии). Конкретные же числовые типы я обвёл серыми рамочками (можно было обвести и Ratio). Полиморфные классы обозначил прямоугольниками со скруглёнными углами. Типы параметров таких полиморфных классов указал «аггрегацией» (линия с ромбиком на стороне полиморфного класса). При составлении ориентировался на первоисточник.

Also in English.

20090316

Wacom Bamboo Fun в Debian Lenny

Начну с приятного. Планшет Bamboo Fun* в Debian Lenny поддерживается, в смысле, что собирать самостоятельно драйвера Wacom не надо. Годятся дистрибутивные. У меня стоят соответственно пакеты wacom-tools и xserver-xorg-input-wacom версии 0.7.9.3-2.

* а вот владельцам Bamboo One, похоже, повезло меньше, судя по-всему им придётся установить драйвера самостоятельно, поддержка Bamboo One заявлена лишь начиная с wacom-tools 0.8.2.2


Однако для нормального использования, нужно внести настройки планшета в /etc/X11/xorg.conf. Во-первых, я добавил туда раздел ServerLayot, которого по-умолчанию там не было:

Section "ServerLayout"
Identifier "Default Layout"
Screen "Default Screen"
InputDevice "Configured Mouse"
InputDevice "Generic Keyboard"

InputDevice "stylus" "SendCoreEvents"
InputDevice "eraser" "SendCoreEvents"
InputDevice "cursor" "SendCoreEvents"
InputDevice "pad"
EndSection


Во-вторых, добавил описания для все четырёх устройств ввода планшета (оба конца пера, указатель курсора и кнопки планшета).

Section "InputDevice"
Identifier "stylus"
Driver "wacom"
Option "Type" "stylus"
Option "USB" "on"
Option "Threshold" "10"
Option "Device" "/dev/input/wacom"
EndSection

Section "InputDevice"
Identifier "eraser"
Driver "wacom"
Option "Type" "eraser"
Option "USB" "on"
Option "Threshold" "10"
Option "Device" "/dev/input/wacom"
EndSection

Section "InputDevice"
Identifier "cursor"
Driver "wacom"
Option "Type" "cursor"
Option "USB" "on"
Option "Threshold" "10"
Option "Device" "/dev/input/wacom"
EndSection

Section "InputDevice"
Identifier "pad"
Driver "wacom"
Option "Device" "/dev/input/wacom"
Option "Type" "pad"
Option "USB" "on"
EndSection


После этого нужно перезапустить графическую подсистему («иксы»). Т.е., если используется графический экран входа в систему, то подключить планшет нужно ещё до появления этого экрана. Если курсор там управляется планшетом нормально — входить и работать. Если же планшет там не подхватился, то, не входя в систему, нажать Ctrl + Alt + Backspace. Графическая система перезапустится. После этого планшет должен уж точно подхватиться.

Внимание! Если планшет отключить (выдернуть из USB-порта), то придётся выходить из системы, чтобы он заработал опять. Не очень удобно, но так вот пока сделано... Зато работает и стёрка, и перо, и кнопки. В Убунту по-умолчанию планшет подхватывается сам, но чтобы заработала и стёрка, и кнопки, придётся всё равно сделать как в Debian.

После этого в используемом приложении (Gimp, Inkscape) нужно указать, какие устройства планшета надо включить. Конкретно в Gimp 2.4 нужно пойти в Файл, Настроить, Устройства ввода, Настроить дополн. устройства ввода. Далее последовательно выбрать все устройства планшета (stylus, eraser, cursor, pad) и включить каждое из них, установив режим «Экран» или «Окно». Нажать Сохранить.

Включить планшет в Gimp

Дополнительные возможности регулировки нажима кисти есть в новом Gimp 2.6, но в Debian Lenny старый добрый 2.4. В нём всё минималистично:

Настройки чувствительности кисти в Gimp 2.4

Утилитки wacomctl в Debian Lenny нет. Впрочем, может и к лучшему. Настроить параметры планшета и запрограммировать его кнопки можно из коммандной строки с помощью xsetwacom. Есть также графические утилитки Gnome Tablet Apps, которых в Lenny тоже нет, но поставить несложно. Выглядят они вот так:

Gnome Tablet Apps: регулируем чувствительностью планшета к нажатию

Однако вернёмся к не такой яркой, но универсальной утилитке xsetwacom. Ниже я расскажу, как регулировать чувствительность к нажатию. Для себя я описываю его «гаммой» нажатия. Гамма равная 1 соответствует настройке по умолчанию, гамма равная 2 соответствует очень сильной чувствительности к слабым нажатиям, гамма равная 0 соответствует очень слабой чувствительности к слабым нажатиям.

Параметры кривой чувствительности планшета вычисляются для данной гаммы длинной командой, которую я его сделал алиасом (pressgamma ниже). В ~/.bashrc поместил следующее:
alias pressgamma="awk 'BEGIN{ b=3.14*ARGV[1]*0.25; x=int(50*1.41*cos(b)); y=int(50*1.41*sin(b)); print x, y, 100-y, 100-x; }'"
function setwacomgamma { xsetwacom set stylus PressCurve `pressgamma $1` ; }
Теперь, посмотреть параметры кривой чувствительности для произвольной гаммы,
$ pressgamma 0.7
60 36 64 40
А установить нужную чувствительность планшета можно командой
xsetwacom set stylus PressCurve `pressgamma 1.2`
или просто
setwacomgamma 1.2


Дополнение. На сайте Wacom можно зарегистрировать свой планшет указав операционную систему Linux.

20081127

Подключаем сетевой принтер в GNOME

Задача: подключить сетевой принтер к клиентской машине. Предполагается, что используется GNOME в Debian/Ubuntu.

Решение:

1. Запускаем утилиту настройки принтеров (Система → Администрирование → Печать из меню GNOME или sudo system-config-printer).

2. Указываем отображать принтеры, подключенные к другим машинам (Сервер → Параметры в утилите настройки, ставим нужную галочку).



3. В появившемся списке принтеров выбираем принтер по-умолчанию (правой кнопкой из контекстного меню). Чтобы напечатать пробную страницу, дважды щёлкаем по принтеру, и в его свойствах выбираем «Пробная страница».



Вот, в общем, и всё.

20080930

Ошибка сохранения файла в GIMP при нехватке памяти

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

Увидеть, сколько занимает изображение в памяти GIMP можно в строке состояния окна изображения. Например, в данном случае изображение занимает в памяти 164 МБ:


Если это значение сопоставимо с размером оперативной памяти компьютера, то GIMP не только будет работать медленно (из-за обращения к диску), но и может испытывать сложности с сохранением изменённого файла. При редактировании изображения это значение растёт.

Однако при большом количестве изменений значительная часть памяти приходится не на хранение самого изображения, а на хранение промежуточных результатов (необходимых, чтобы работала функция «отмены»). Если удалить историю действий, то можно обычно освободить немало памяти. Выбираем в меню редактируемого узображения «Правка → История действий» и видим такой диалог:


На иллюстрации помечена кнопка, позволяющая принудительно очистить историю изменений. После этого перестанет работать функция «Отмены», но зато освободится память.

Вообще, настроить желаемое количество уровней отмены можно в разделе «Окружение» настроек GIMP.

PS: Кто-нибудь знает, каким свободным софтом можно обрабатывать действительно большие изображения (т.е. такие, которые не помещаются в оперативную память)? Желательно, чтобы программа умела подгружать изображение «по частям». Меня интересуют прежде всего операции кадрирования, поворота на произвольный угол, коррекция кривых и цветов. Спасибо читателям за подсказку, что действительно большие изображения можно редактировать в nip2 (обзор здесь). Разбираюсь.

Смотрю с большой надеждой на формат JPEG2000, в котором есть поддержка произвольного доступа к областям изображения, но пока он, похоже, поддерживается только в ImageMagick. При этом ковертация JPEG→JPEG2000 требует много больше памяти, чем размер несжатого TIFF-а с тем же изображением. В придачу большинство просмотрщиков работать с JPEG2000 не могут.

20080219

Резервное копирование и шифрование архивов с помощью cpio (или tar) и gpg

Есть много программ для организации резервного копирования, простых и сложных. Однако часто достаточно самого простого: запаковать, зашифровать и положить на удалённую машину (записать на внешний диск, DVD и т.д). А это делается простыми (стандартными) инструментами — cpio и gpg — всего пара команд. Или tar и gpg — тоже пара команд.

Создание архива:
$ cd ~/work && \
find . -depth -print0 | \
cpio -0 -o | \
gpg -c -a > /mnt/remote/backup/work.cpio.gpg
find найдёт в текущем каталоге (~/work) все файлы и каталоги, cpio упакует их в единый архив, gpg спросит пароль и зашифрует симметричным алгоритмом.

Восстановление из резервной копии:
$ mkdir ~/work-restore && \
cd ~/work-restore && \
gpg -d /mnt/remote/backup/work.cpio.gpg | cpio -idv


Можно ещё и сжать bzip2, если между cpio и gpg вставить bzip2 -c. Создание архива:
$ find . -depth -print0 | cpio -0 -o | bzip2 -c | gpg -c -a > arhive.cpio.bz2.gpg
Восстановление из резервной копии:
$ gpg -d archive.cpio.bz2.gpg | bzcat -c | cpio -idv

Проще уже некуда. И при этом вся гибкость find к нашим услугам. А это значит, что гораздо проще заархивировать только нужные файлы, а не все подряд. Например, файлы изменённые за последние двое суток легко отбираются с помощью:
$ find . -ctime -2


P.S. Конечно, вместо cpio можно пользоваться и tar. Вот только использовать тогда find для выбора нужных файлов — затруднительно. Если нужно запаковать каталог целиком, то поступать можно так:
$ cd ~/work && \
tar cj . | gpg -c -a > /mnt/remote/backup/work.tar.bz2.gpg
а распаковать так:
$ mkdir ~/work-restore && \
cd ~/work-restore && \
gpg -d work.tar.bz2.gpg | tar jx
Дополнение:Как заметил в комментариях Alexey, упаковать найденные find файлы можно и используя tar. В этом случае используется опции tar -T (читать список файлов из файла) и --null (имена файлов разделены нулевым байтом). Поясняю на примере, создание зашифрованного архива:
$ find . условия поиска -print0 | tar c --null -T - | gpg -c -a > файл_с_архивом.tar.gpg
и распаковка:
$ gpg -d файл_с_архивом.tar.gpg | tar x

В общем, дело вкуса.

Смотрите также:

Синхронизация каталогов по SSH+rsync и по FTP
Как сделать копию удалённого репозитория Subversion

20080111

Как в убунту установить разные обои

Недавно заглянул в статистику Google Analytics, и с удивлением обнаружил, что в мой блог заходит довольно много народа по поисковому запросу «как в убунту установить разные обои».

Ну раз уж народ так этим интересуется, то открою тайну :) Пользователям Ubuntu, а также всем пользователям рабочего стола типа GNOME, для того, чтобы сменить обои рабочего стола надо:

1. Щёлкнуть правой кнопкой мыши по рабочему столу
2. Выбрать «Изменить фон рабочего стола»
3. Выбрать фон из списка, или ператащить мышкой в открывшееся окно любой файл с картинкой (выбрать в меню «Переход / Домашняя папка», чтобы открыть обозреватель файлов)
4. Выбрать нужный способ наклеивания обоев (увеличивать, уменьшать, с полями или без, замостить черепицей или положить по центру...) — на этом этапе удобно взглянуть на результат переключившись на секунду на соседний пустой рабочий стол
5. «Закрыть» диалог

У меня в Debian testing, после недавнего апгрейда, диалог выбора фона рабочего стола выглядит вот так:


Довольно интересные результаты можно получить выбирая полупрозрачные обои и градиент (цвета можно выбрать в том же диалоге выбора обоев). Полупрозрачные обои есть в пакете gnome-backgrounds в Debian.

А для тех, кому этого мало, есть ещё и программка gbackground, позволяющая переодически менять обои. Другая подобная программка для переодической смены обоев называется drapes. Я эти программы не пробовал, но в репозиториях они лежат.

P.S. Вызывать диалог изменения фона рабочего стола можно также через меню «Система / Параметры / Внешний вид», и выбрав там вкладку «Фон».