Спасибо лору.
convmv --notest -r -f cp-1252 -t cp-850 /path/to/unzipped/files
convmv --notest -r -f cp-866 -t utf-8 /path/to/unzipped/files
Спасибо лору.
convmv --notest -r -f cp-1252 -t cp-850 /path/to/unzipped/files
convmv --notest -r -f cp-866 -t utf-8 /path/to/unzipped/files
Подготовка файлов. Создаём каталоги res и ocr, разбираем PDF на страницы:
pdftoppm -png file.pdf res/out
Подготовка страниц; нужно увеличить разрешение, подкорректировать яркость и контрастность для лучшего распознавания:
cd res
FILES=`ls *.png`
cd ..
for f in $FILES; do
convert -geometry 1000x -modulate 90 -gamma 0.9 -contrast -fx G res/$f ocr/$f.tif
done
Распознавание
cuneiform out-014-g.tif -o out-014-g.tif.txt
cuneiform.У гугла есть отличный поисковик по исходным кодам различных проектов. Фигово только, что в результаты поиска выводятся порциями по десять элементов. Фиксим это при помощи юзерскрипта для оперы.
// ==UserScript==
// @name google codesearch improvements
// @include http://*.google.com/codesearch
// @include http://google.com/codesearch
// ==/UserScript==
(function(){
var e = document.createElement('INPUT');
e.type = 'hidden';
e.name = 'num';
e.value = '100';
document.forms[0].appendChild(e);
})();
Максимальное количество элементов на странице — сто.
Памяти много, hibernate делается в swap-раздел, в прочее время swap не нужен. sysctl -w vm.swappiness=1 в /etc/rc.local не помогает, поэтому настраиваем pm-utils. Все команды с правами суперпользователя.
Программа Assistant из Qt4 сделана довольно небрежно, например, даже при небольшом количестве открытых табов переключаться между ними очень неудобно. Поэтому фиксим это.
centralwidget.h исправляем параметры строки табов. Нам не нужны табы по ширине всего заголовка, обойдёмся скрыванием части заголовка за многоточием, этот параметр класса QTabBar называется elideMode, для нас подойдёт значение Qt::ElideMiddle. Теперь табы будут при необходимости «сжиматься» и исчезнет дико неудобная кнопка прокрутки табов.Печатаем, что играет амарок. Скрипт очень простой (считаем, что локаль процесса, откуда вызывается скрипт, юникодная):
#!/usr/bin/env python2.5
# -*- coding: utf-8 -*-
import dbus
bus = dbus.SessionBus()
proxy = bus.get_object('org.kde.amarok', '/Player')
player = dbus.Interface(proxy, "org.freedesktop.MediaPlayer")
metadata = player.GetMetadata()
# access metadata using operator []:
np = u"/me now listening to %(artist)s — %(title)s (album: %(album)s)" % {
'title': metadata['title'],
'artist': metadata['artist'],
'album': metadata['album']
}
print np.encode("utf-8")
Схема базы амарока, там же рядом лежит исходник схемы.
В одном посте свёл разнообразную мелочёвку о настройке клиента. В первую очередь для себя, но, может, ещё кому-нибудь пригодится.
Наконец-то дошли руки допилить код и таки включить полноценный OpenId провайдер в движке блога, теперь могу логиниться от имени блога (и сайта) regolit.com.
Заодно пофиксил несколько древних багов, до которых никак не доходили руки, и поменял цветовую схему сайта.
На очереди борьба с блогоспамерами, нужно что-то придумывать, чтобы гарантированно отсекать роботов. Капчу очень не хочется.
В замечательной книге Игоря Ашманова «Жизнь внутри пузыря» много интересного рассказано про историю Рамблера начала «нулевых», вот только все реальные имена и названия скрыты за псевдонимами. Иногда псевдонимы легко раскрываются, иногда не очень. Поэтому решил собрать в одном месте таблицу соответствий, кто был кто.
Update
Подсказали ссылку, где все псевдонимы раскрываются.
Полезная функция для печати значения переменной. Понимает и по-разному отображает различные типы.
function valueToString(v)
{
var res = "";
if (v === undefined) {
res = "undefined";
} else if (v === null) {
res = "null";
} else if (v.constructor === Array) {
var a = [];
for (var i=0; i<v.length; i++) {
a.push(valueToString(v[i]));
}
res = "[ " + a.join(", ") + " ]";
} else if (typeof v === "string" || v.constructor === String) {
v = v.replace("\\", "\\\\").replace('"', '\\"').replace("\n", "\\n");
res = '"' + v + '"';
} else if (typeof v === "object") {
res = "Object";
} else {
res = v.toString();
}
return res;
}
Задача: создать и настроить mercurial-репозиторий на debian-сервере с установленным apache2.
Всё довольно просто, но есть несколько тонких моментов. Все шаги справедливы для debian lenny и, возможно, для ubuntu (не знаю какой версии). Предполагается, что наш репозиторий будет доступен по адресу http://hg.example.com/public.
Решил написать какую-нибудь простую систему для генерации FictionBook2-файлов, разметка — нечто wiki/markdown/reStructuredText/Sphinx-подобное, плюс файл с метаданными в виде простого .ini-подобного файла.
За несколько часов настрогал, потом пару дней отлаживал. Оказалось вполне пригодно для использования. Создание/обновление книг значительно ускорилось. Уже несколько книг обработал, в частности, вот этот сборник сказок братьев Гримм.
Никакой документации, кроме демонстрационного проекта, пока нет.
Сайт проекта: metafb2.googlecode.com
В этом посте буду собирать названия полезных для любого программиста книг.
В Xorg 1.5 введена новая система конфигурации, через HAL. Для конфигурации тачпада из Eee PC 900 необходимо, во-первых, собрать модуль psmouse.ko, который этот тачпад поддерживает; а во-вторых, написать соответствующий конфиг для Xorg.
Вот мой конфиг:
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
<device>
<match key="info.product" string="ETPS/2 Elantech Touchpad">
<merge key="input.x11_driver" type="string">synaptics</merge>
<merge key="input.x11_options.SHMConfig" type="string">True</merge>
<merge key="input.x11_options.SingleTapTimeout" type="string">150</merge>
<merge key="input.x11_options.MaxDoubleTapTime" type="string">10</merge>
<merge key="input.x11_options.UpDownScrolling" type="string">1</merge>
<merge key="input.x11_options.RightEdge" type="string">1050</merge>
<merge key="input.x11_options.ZAxisMapping" type="string">4 5</merge>
<merge key="input.x11_options.ClickTime" type="string">2</merge>
<merge key="input.x11_options.FastTaps" type="string">1</merge>
<merge key="input.x11_options.MinSpeed" type="string">0.246</merge>
<merge key="input.x11_options.MaxSpeed" type="string">0.89</merge>
<merge key="input.x11_options.AccelFactor" type="string">0.178</merge>
<merge key="input.x11_options.LeftRightScrolling" type="string">0</merge>
<merge key="input.x11_options.TapButton1" type="string">1</merge>
<merge key="input.x11_options.TapButton2" type="string">2</merge>
<merge key="input.x11_options.TapButton3" type="string">3</merge>
<merge key="input.x11_options.VertEdgeScroll" type="string">true</merge>
<merge key="input.x11_options.VertTwoFingerScroll" type="string">false</merge>
</match>
</device>
</deviceinfo>
Файл кладётся, например, сюда /etc/hal/fdi/policy/11-x11-elantech.fdi, затем перезапускается hal и xorg.
Эта часть посвящена библиотеке растеризации шрифтов FreeType, а также базовым принципам растеризации, в том числе субпиксельной.
В этой части рассказывается о рендеринге и отрисовке шрифтов на стороне X-клиента.
В этой части рассказывается о классической системе рендеринга и отрисовки шрифтов в X Window System: Core X Renderer.
Разбирал завалы PDF-файлов со знаменитого процесса «Comes vs. Microsoft» и наткнулся на несколько весьма примечательных документов про агрессивный евангелизм, очень интенсивно применявшийся микрософтом в середине девяностых. Всплыло имя Джеймса Пламондона, как одного из авторов всего этого дерьма, а поиск в гугле принёс довольно много разнообразных статей на чрезвычайно интересную тему «Технологического евангелизма».
Вот один из примеров, «“Power Evangelism” and “Relationship Evangelism” Presented by James Plamondon and Marshall Goldberg». Неформальная и очень познавательная презентация (файл PLEX_2456.pdf из архива материалов), я её немного вычитал и сделал более приемлемую копию. PDF и оригинал в ODT.
Джеймс Пламондон типа раскаялся и ведёт блог на тему этого самого технологического евангелизма.
Перед тем, как приступить собственно к рассказу о шрифтовых подсистемах, необходимо сказать несколько слов об архитектуре графической подсистемы в целом. Как показал опыт, очень много пользователей Linux имеют слабое представление о принципах архитектуры системы, которой они пользуются.
Тема шрифтов поистине неисчерпаема, однако нормальных русскоязычных статей уровня «для начинающих» просто нет, а те, что есть, безнадёжно устарели. Поэтому пару лет назад задался целью написать цикл статей, рассказывающих о принципах функционирования шрифтовой подсистемы в Xorg. Результат можно посмотреть в викиучебниках.
А сейчас планирую постепенно перетащить эти статьи в свой блог, попутно исправляя ошибки и недочёты.
Этим постом открывается вторая эпоха в жизни проекта. Ужасный wordpress выкинут на помойку, вместо него — мой собственный движок, который можно охарактеризовать как «half blog, half wiki, half cms». Все данные, включая комментарии, благополучно смигрированы на новую систему.
Новая политика. На данном сайте планирую опубликовать все свои статьи, которые в настоящее время расползлись по самым разным рунетовским сайтам, и поддерживать эти статьи в актуальном состоянии. В данном блоге по-прежнему будут публиковаться исключительно статьи технического характера, однако значительно более объёмные, чем ранее — не просто заметки на пару страниц, а подробные статьи. Конечно же, будет и обратная связь в виде комментариев.
Движок сайта пока находится на самой ранней стадии развития, поэтому вполне возможны разнообразные мелкие косяки. Старые линки на статьи автоматически редиректятся на новые.
Не секрет, что в Debian Etch OpenOffice выглядит сейчас крайне ужасно. Примерно вот так:
Что-то накосячили или в OO, или в Freetype2, но результат один — в OpenOffice шрифты выглядят крайне паршиво при отключенном антиалиасинге. Сегодняшняя задача — заставить OO корректно отображать шрифты.
Пользоваться несколькими виртуальными десктопами удобно. Однако пользоваться пейджером для переключения между ними для меня оказалось сильно некомфортно, так как этот пейджер нужно сначала найти на экране, потом кликнуть по значку нужного десктопа. При этом теряется внимание, фокус и т.п. По этой причине в моём KDE пейджера нет. Однако переключаться между десктопами мышкой как-то надо.
Решение было найдено буквально пару недель назад — пользоваться колесом мыши над рабочим столом (который под всеми окнами и на котором обычно всякие иконки болтаются). Но проблема в том, что рабочим столом я не пользуюсь, так как все окна обычно распахнуты на весь экран, и крутить колесом попросту не над чем. И вот тут сама идея — уменьшить ширину таскбара (панели со значками запущенных приложений), чтобы в крайнем нижнем правом углу был виден маленький кусочек рабочего стола. Теперь, для того, чтобы мышкой переключиться на другой десктоп, достаточно увести указатель в нижний правый угол и там покрутить колёсиком!
Далее я покажу, как это выглядит, почему это удобно и комфортно, и как настроить KDE, чтобы этого добиться.
Раз в мире существует UNICODE, то им надо пользоваться! Поэтому я однажды сел и написал небольшой файлик для конфигурации XKB, чтобы можно было вводить некоторые юникодные символы прямо с клавиатуры. Сначала это были символы для русских кавычек-лапок (« и ») и длинного тире (—). Через некоторое время я наткнулся в сети на заметку в блоге Ильи Бирмана о создании им специальной типографской раскладки для непосредственного ввода кучи юникодных символов.
В панели KDE (kicker) есть кнопка аналог кнопки Start в Windows®, при нажатии на которую открывается K-меню. При желании можно на панели создавать другие кнопки со своим собственным меню. Это очень удобно, так как позволяет сэкономить место на панели и логически сгруппировать программы.
Существует такой замечательный графический редактор Gimp, особенностью которого является куча вторичных окон, путающихся под мышкой в таскбаре. Решим эту проблему таким же способом, как и в статье полезное в kwin.
У оконного менеджера kwin из состава KDE есть множество полезных функций, о полезности которых многие даже не догадываются. Одна из них — это возможность тонкой настройки поведения окон самых разных приложений.
Решил завести себе блогоподобный сайт, чтобы выкладывать сюда всякие полезные в хозяйстве заметки. В принципе, сайт предназначен только для меня и мне глубоко плевать на чьё бы то ни было мнение по нему.
Сюда буду выкладывать различные заметки, в основном, линуксовые. А также конфиги, пакеты и прочие полезные в хозяйстве вещи.