Expertus metuit
Sergey Stolyarov | 2013-01-21 в 16:33

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

Sergey Stolyarov | 2012-12-21 в 15:00

Этот рецепт работает только для старых версий debian. Как это запретить для новых (bookworm, trixie) версий без правки существующих файлов конфигурации, я не знаю.

Отключаем насовсем использование инкрементальных обновлений метаинформации (pdiff):

# echo 'Acquire::PDiffs "false";' > /etc/apt/apt.conf.d/50nopdiff

Одноразово можно так сделать:

# apt-get update -o Acquire::Pdiffs=false
Sergey Stolyarov | 2012-11-22 в 21:55

Тема заметки: конвертация музыкальных файлов (flac, mp3, wav, ape).

Меньше слов, больше дела.

Все скрипты ниже даны исключительно для образовательных целей, последние их версии всегда на гитхабе (не копипастите их с этой страницы):

git clone https://github.com/sigsergv/music-tools.git
Sergey Stolyarov | 2012-11-20 в 16:01

Проблема: при отправке письма через 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

Sergey Stolyarov | 2012-08-09 в 16:14

Решил детально поисследовать редактор Sublime Text 2, который в последнее время стал сильно популярен в интернетах. В целом программа хорошая, вполне вполне сгодится как профессиональный текстовый редактор. Отлично подойдёт для программиста-на-всём (код раскрашивает, скобки подсвечивает).

Начальная конфигурация вполне удобная, хоткеи отторжения не вызывают, но требуют привыкания после Eclipse, например. Впрочем, все хоткеи настраиваемые.

Огромные возможности по настройке — всё делается через текстовые конфиги прямо в самом редакторе. Можно писать расширения на питоне. И этих расширений уже настрогал огромное количество.

Это была вводная часть, а сейчас про мой опыт работы и настройки редактора (будет расширяться со временем).

Sergey Stolyarov | 2012-07-25 в 16:00

Дропбокс некоторые свои функции реализует через браузер, для этого он генерит спецссылки и открывает их в браузере. При этом алгоритм определения, какой именно браузер открывать, не особо прозрачный и понятный (речь пойдёт только о дебиане/убунте).

  1. Сначала dropbox ищет исполнимый файл x-www-browser, если таковой есть, то ссылка передаётся ему аргументом командной строки. Поиск файла идёт сначала в /usr/lib/dropbox/, а затем в каталогах из переменной окружения $PATH.
  2. Затем проверяется значение переменной окружения $BROWSER, если там что есть, то оно запускается (со ссылкой в первом аргументе).
  3. Затем пытается запустить /usr/bin/sensible-browser
  4. Затем (непонятно зачем) — /usr/bin/x-terminal-emulator

Чтобы в дебиане ссылки открывались в браузере, который указан в переменной окружения $BROWSER:

update-alternatives --remove-all x-www-browser

Всё вышенаписанное получено эмпирическим путём и не обязательно соответствует реальной логике работы программы.

Sergey Stolyarov | 2012-03-08 в 13:33

Задача: нужно поставить Market (а теперь он называется Play) на андроидный виртуальный девайс. Широко известная в узких кругах процедура с копирование файла system.img больше не работает, пришлось искать новый способ.

Для работы Market на девайсе должен быть установлен Google Services Framework (gsf), это библиотека для работы с гуглоаккаунтами, нужна практически для всех гугловых приложений. В составе SDK уже есть образы с включённым gsf, именно на виртуальный девайс, основанный на таком образе, мы и будем ставить маркет.

Sergey Stolyarov | 2012-02-26 в 21:32

Обновлено 2015-09-17: исправлены ссылки на программы

Приложения для андроида распространяются в виде файлов с расширением apk, внутри такого файла лежат бинарные и текстовые ресурсы приложения, манифест со всякой технической информацией о пакете, а также скомпилированный код собственно приложения. И в какой-то момент неизбежно возникает желание расковырять чужой пакет, чтобы вытащить оттуда картинку, например, или посмотреть, как устроены макеты интерфейсов.

Вот этим мы и займёмся. Традиционно здесь всё рассказывается в контексте линукса, с остальными операционками разбирайтесь сами, хотя принцип ровно такой же.

Sergey Stolyarov | 2011-08-03 в 15:50

Задача: есть PDF, в котором очень широкие поля, плюс куча мусора на них типа «Украдено в Хилтоне», поэтому нужно поля по максимум отрезать. Можно, конечно, рыть интернеты в поисках подходящей программы, но за короткий срок этого сделать не удалось.

Всё решилось совершенно неожиданным путём: ставим пакет python-pypdf, пишем простейший питоновский скрипт и получаем ровно что нужно.

Sergey Stolyarov | 2010-08-27 в 23:51

Внимание! 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
© 2006—2024 Sergey Stolyarov | Работает на pyrengine