Иногда нужно внедрить шрифты в уже существующий PDF-файл, но ссылки на шрифты в котором относительные, например, команда pdffonts показывает такое:
% pdffonts build.pdf
name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
Helvetica                            Type 1            no  no  no       2  0
Helvetica-Bold                       Type 1            no  no  no       3  0
ZapfDingbats                         Type 1            no  no  no     249  0
Courier                              Type 1            no  no  no     252  0
Symbol                               Type 1            no  no  no     253  0
Helvetica-Oblique                    Type 1            no  no  no     261  0
Helvetica-BoldOblique                Type 1            no  no  no     430  0
Видно, что все шрифты не внедрённые (колонка emb). Спасает gs:
gs -q -dNOPAUSE -dBATCH -dPDFSETTINGS=/prepress -sDEVICE=pdfwrite -sOutputFile=output.pdf build.pdf
После её выполнения всё в порядке:
% pdffonts output.pdf 
name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
BOTQQP+Helvetica                     Type 1C           yes yes no     619  0
BHJYCF+Helvetica-Bold                Type 1C           yes yes no     617  0
AUENQH+ZapfDingbats                  Type 1C           yes yes yes    865  0
KTOSAE+Symbol                        Type 1C           yes yes no     874  0
UMOKIT+Courier                       Type 1C           yes yes no     872  0
LJPUJQ+Helvetica-Oblique             Type 1C           yes yes no     901  0
YQLVGH+Helvetica-BoldOblique         Type 1C           yes yes no    1408  0
P.S.
На названия конкретных шрифтов не обращайте внимания, по сути там будут те шрифты, в которые преобразуются алиасы типа Helvetica на вашей машине.
Этот рецепт работает только для старых версий debian. Как это запретить для новых (bookworm, trixie) версий без правки существующих файлов конфигурации, я не знаю.
Отключаем насовсем использование инкрементальных обновлений метаинформации (pdiff):
# echo 'Acquire::PDiffs "false";' > /etc/apt/apt.conf.d/50nopdiff
Одноразово можно так сделать:
# apt-get update -o Acquire::Pdiffs=false
Тема заметки: конвертация музыкальных файлов (flac, mp3, wav, ape).
Меньше слов, больше дела.
Все скрипты ниже даны исключительно для образовательных целей, последние их версии всегда на гитхабе (не копипастите их с этой страницы):
git clone https://github.com/sigsergv/music-tools.git
Проблема: при отправке письма через SMTP-сервер, в письмо добавляются заголовки, содержащие ip-адрес машины, с которой было отправлено письмо, выглядит это обычно так:
Received: from your.home-address.tld
        by mx.mailserver.tld with ESMTPS id ID1.1.2.3.4.5.6.7
        (version=TLSv1/SSLv3 cipher=OTHER);
Здесь your.home-address.tld — это как раз домашний адрес (с которого письмо отправлялось), а mx.mailserver.tld — адрес почтового сервера. Exim по умолчанию использует такой формат заголовка.
Цель: настроить SMTP-сервер исходящей почты, чтобы исключить из заголовка Receieved адрес домашней машины.
Рабочее окружение: Debian, Exim4
Решил детально поисследовать редактор Sublime Text 2, который в последнее время стал сильно популярен в интернетах. В целом программа хорошая, вполне вполне сгодится как профессиональный текстовый редактор. Отлично подойдёт для программиста-на-всём (код раскрашивает, скобки подсвечивает).
Начальная конфигурация вполне удобная, хоткеи отторжения не вызывают, но требуют привыкания после Eclipse, например. Впрочем, все хоткеи настраиваемые.
Огромные возможности по настройке — всё делается через текстовые конфиги прямо в самом редакторе. Можно писать расширения на питоне. И этих расширений уже настрогал огромное количество.
Это была вводная часть, а сейчас про мой опыт работы и настройки редактора (будет расширяться со временем).
Дропбокс некоторые свои функции реализует через браузер, для этого он генерит спецссылки и открывает их в браузере. При этом алгоритм определения, какой именно браузер открывать, не особо прозрачный и понятный (речь пойдёт только о дебиане/убунте).
- Сначала dropbox ищет исполнимый файл x-www-browser, если таковой есть, то ссылка передаётся ему аргументом командной строки. Поиск файла идёт сначала в/usr/lib/dropbox/, а затем в каталогах из переменной окружения$PATH.
- Затем проверяется значение переменной окружения $BROWSER, если там что есть, то оно запускается (со ссылкой в первом аргументе).
- Затем пытается запустить /usr/bin/sensible-browser
- Затем (непонятно зачем) — /usr/bin/x-terminal-emulator
Чтобы в дебиане ссылки открывались в браузере, который указан в переменной окружения $BROWSER:
update-alternatives --remove-all x-www-browser
Всё вышенаписанное получено эмпирическим путём и не обязательно соответствует реальной логике работы программы.
Задача: нужно поставить Market (а теперь он называется Play) на андроидный виртуальный девайс. Широко известная в узких кругах процедура с копирование файла system.img больше не работает, пришлось искать новый способ.
Для работы Market на девайсе должен быть установлен Google Services Framework (gsf), это библиотека для работы с гуглоаккаунтами, нужна практически для всех гугловых приложений. В составе SDK уже есть образы с включённым gsf, именно на виртуальный девайс, основанный на таком образе, мы и будем ставить маркет.
Обновлено 2015-09-17: исправлены ссылки на программы
Приложения для андроида распространяются в виде файлов с расширением apk, внутри такого файла лежат бинарные и текстовые ресурсы приложения, манифест со всякой технической информацией о пакете, а также скомпилированный код собственно приложения. И в какой-то момент неизбежно возникает желание расковырять чужой пакет, чтобы вытащить оттуда картинку, например, или посмотреть, как устроены макеты интерфейсов.
Вот этим мы и займёмся. Традиционно здесь всё рассказывается в контексте линукса, с остальными операционками разбирайтесь сами, хотя принцип ровно такой же.
Задача: есть PDF, в котором очень широкие поля, плюс куча мусора на них типа «Украдено в Хилтоне», поэтому нужно поля по максимум отрезать. Можно, конечно, рыть интернеты в поисках подходящей программы, но за короткий срок этого сделать не удалось.
Всё решилось совершенно неожиданным путём: ставим пакет python-pypdf, пишем простейший питоновский скрипт и получаем ровно что нужно.
Внимание! Gimp 2.8 уже официально выпущен, поэтому статья уже неактуальна.
Собираем пакет с гимпом (девелоперскую ветку 2.7) для дебиана. Хоть способ и не совсем правильный и каноничный, но зато быстрый и работающий (quick and dirty). Сразу отмечу, что никакие зависимости в итоговый пакет не прописываются!
Обновление от 23 апреля 2012 г.: gegl обновлён до версии 0.2
Обновление от 14 мая 2012 г.: номер версии обновлён до 2.8
Ставим нужные пакеты для сборки, включая git:
sudo apt-get build-dep gimp
sudo aptitude install git
sudo aptitude install libtool ruby gtk-doc-tools libdbus-1-dev libtiff4-dev
Для сборки на 64-битной системе нужно также поставить пакет ia32-libs-dev.
Создаём новый пустой каталог (например, /home/user/gimp-build), в котором и будем всё собирать. Выкачиваем для начала гимп и сопутствующие библиотеки из git (довольно длительный процесс, так что запасаемся терпением), команды запускаем внутри каталога /home/user/gimp-build:
git clone git://git.gnome.org/babl
git clone git://git.gnome.org/gegl
git clone git://git.gnome.org/gimp