Иногда нужно внедрить шрифты в уже существующий 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