Hatred's Log Place

DON'T PANIC!

Feb 28, 2010 - 2 minute read - Comments -

Несколько заметок по работе с Gitorious.org

Сам проект - git-хостинг. Там же хостятся проекты Qt (http://blog.gitorious.org/2009/05/11/welcome-qt/, http://qt.gitorious.org/), Qt Creator (http://qt.gitorious.org/qt-creator).

  1. регистрируемся, но, т.к. это не рашин стартап, поддерживается и вход по OpenID , что мне очень удобно и вкусно.
  2. при помощи ssh-keygen сгенерируйте ключ:``` cd ~/.ssh ssh-keygen -f id_rsa_gitorious

    1. после в веб-морде: Your dashboard (вверху) -> Manage SSH keys (в главной области окна) -> Add SSH key (в колонке справа), вставить туда содержимое ~/.ssh/id_rsa_gitorious.pub и жмякнуть Save
    2. у себя же, создать файл ~/.ssh/config, в котором должно содержаться примерно следующее:```
    Host gitorious.org
    IdentityFile ~/.ssh/id_rsa_gitorious

    что бы для сайты автоматом выбирался нужный ключ.

Теперь несколько заметок по работе.

  • заходим в нужный проект, выбираем репозиторий, в колонке справа появляется возможность клонировать репу. На ней делать изменения и потом комитить мерж-реквесты.
  • создать свой проект: Your dashboard -> Create a new project… (колонка справа) дальше все понятно: задать нужные поля, выбрать лицензию и т.д.
  • в проекте можно создавать репозитории, находясь в проекте: Add repository… в колонке справа, после создания проекта, будут даны рекомендации, что нужно сделать, что бы залить его после (подготовительные шаги для ssh мы сделали выше)

Пока не существует возможности создать приватный репозиторий, но работа ведется: http://groups.google.com/group/gitorious/browse_thread/thread/af08be1e6dd70b95/614e96c2f886b7fb?lnk=gst&q=private#614e96c2f886b7fb

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

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

Сам код Gitorious хостится здесь же, можно скачать и развернуть подобную систему у себя. Для пользователей ArchLinux доступен через AUR: http://aur.archlinux.org/packages.php?ID=34713

И есть одно больше отличие от того же github.com (ещё я там не нашел вход по OpenID), это то, что место для пользователя нелимитировано, есть только одно ограничение: объем трафика в месяц не больше 500 Мб, но если нужно залить большой проект - все решается, вот ответ от создателя проекта: >> I’m new one here and I want to ask about the space for repositories. >> How much disk space is given for account? > > As much as you need, with one big disclaimer; that you let us know > beforehand if plan on pushing any repositories larger than around > 500MB, it’s just nice behavior considering the freedom you have to let > us know first :)

Взято: http://groups.google.com/group/gitorious/browse_thread/thread/206efb9f1ea5f99b/a656b005f1e0ed80?lnk=gst&q=limit#a656b005f1e0ed80

Feb 21, 2010 - 3 minute read - Comments - programming

Мысли по написанию программ

Агрегация собственного опыта, идей, мыслей.

Итак, по шагам.

  1. Самое первое - решить, а нужно ли? возможно уже существует более лучшее решение, в котором легче допилить, то, что тебя не устраивает?
  2. Берем бумажку, блокнот (блокнот - лучшее оружие вор^Wпрограммиста!), и пишем те задачи которые должна решать программа, эдакие основные фичи, глобальные юзкейсы.
  3. Продумываем, при помощи того же блокнотика, интерфейс, если он есть.
  4. По результатам берем, рисуем блок-схему, для начала укрупненную. Особенно это нужно для диалоговых приложений.
  5. Далее начинаем детализировать блок схему, в виде отдельных схем описываем отдельные алгоритмы, помогает продумывать в том числе и общую архитектуру.
  6. Если нужна база данных, начинаем чертить таблички, придумывать поля, смотреть какого типа они должны быть, придумывать связи
  7. Когда уже получится достаточно стройная картина, обязательно переложить все это в электронный вид - если проект закрытый, будет самим легче разобраться, а если OpenSource - то сторонним разработчикам.
  8. Выбираем инструментарий: тут в основном язык, библиотеки (в том числе с опорой на лицензию, для собственного использования - пофиг, но если планируешь распространять, то озадачься).
  9. Распечатываем алгоритмы, обклеиваем ими стену - что бы всегда было перед глазами, что бы в любой момент можно было увидеть цельную картину проекта, какие части как между собой взаимодействуют.
  10. Глядим на все это дело, начинаем думать, какими структурами языка это все реализовывать: что засунуть в структуру, что - в класс, какие классы будут базовыми, какие наследоваться, какие интерфейсы внутри классов, делаем пометки на той же бумажке (результаты уже не нужно будет заносить в комп, точнее не нужно в том виде, в каком вы их, эти пометки делали).
  11. Может и не логичное место: придумайте правила оформления кода (мои заметки можно глянуть тут), от себя хочу сказать - все равно какой он будет главное:
    • соблюдайте его на протяжении всего проекта
    • используйте отступы и пусты строки для оформления блоков - читабельность кода увеличивается в разы
    • не чурайтесь комментариев (немного далее)
  12. Про комментарии сказано было, но я рекомендую сразу подумать и о системе документирования самого кода, API библиотек и тому подобного. Для себя использую Doxygen, в коде просто вставляются комментарии в нужной форме, но основе которых, при помощи Doxygen генерируется документация на код в формате HTML/RTF/man
  13. Ну, наверное, в основном - все. Для проверки - перейдите к пункту 1 :simple_smile:

Естественно, разработка это ниразу не линейный процесс, по ходу дела могут меняться требования, мысли. Главное не забывайте отражать эти изменения в документации. Что перечислено выше, отнимает достаточно много времени, но потом писать становится значительно проще, количество костылей сводится к минимуму. Да и лишний раз заставит подумать - а нужно ли оно?

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

Ссылки в тему: * Блок-схемы: * http://habrahabr.ru/blogs/xkcd_ru/47126/ - учимся читать :) * http://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%BE%D0%BA-%D1%81%D1%85%D0%B5%D0%BC%D0%B0 * http://mini-soft.ru/soft/vba/r_2.php - тут есть хороший пример реализации switch * Почитать книжку Эрика Рейнмонда “Искусство программирования для Unix”: * http://www.faqs.org/docs/artu/ * http://book.usde.ru/3788-iskusstvo-programmirovanija-dlja-unix.html

PSПишите код так…

Feb 19, 2010 - 5 minute read - Comments - life

Torrents.Ru ---> RuTracker.Org

На правах кросс-постинга: http://serj-nickel.livejournal.com/139844.html

От себя: предлагаю также репостить, и поддержать петицию.


//Уважаемые пользователи!

18 февраля 2010 года компанией “Ру-Центр” (Москва, Ленинградский проспект, д.74, корп.4, тел +7 (495) 994-46-01 +7 (495) 737-06-01, www.nic.ru ) без предупреждения, и какого либо уведомления было приостановлено делегирование домена TORRENTS.RU. По информации из “Ру-Центра” “Делегирование домена TORRENTS.RU приостановлено на основании Постановления следственного отдела по Чертановскому району Прокуратуры г.Москвы от 16.02.2010г”.

В “Ру-Центр” направлен соответствующий запрос, однако, весьма вероятно, что выяснение обстоятельств займет некоторое время, в течение которого адрес torrents.ru будет недоступен. В связи с этим мы вынуждены были в срочном порядке сменить доменное имя на rutracker.org.//

Такой вот текст можно сейчас видеть на главной странице крупнейшего русскоязычного трекера. По этому поводу - несколько мыслей.

Самая “частная” мысль: какого чёрта?! Во-первых, что это за “приостановление делегирования”? Я что-то не пойму - там что, есть решение суда?! Я не юрист, но с позиции здравого смысла мне кажется, что в столь экстренном порядке что-то закрывать можно лишь в том случае, когда это реально угрожает чьей-то безопасности. А здесь что происходит? 16 февраля накатали какую-то там бумагу - и через два дня уже всё готово, всё закрыто? Ну допустим, в России плохой суд, нечестный и коррупционный, но здесь-то не было никакого суда! Пиздец, короче. Видимо, в сраной рашке этой стране любой чиновник имеет право закрыть что угодно. В таком случае заявляю о скором издании Постановления о закрытии к ебёной матери следственного отдела по Чертановскому району прокуратуры г.Москвы от 18.02.2010г. Во-вторых, уж кто-то, а Торрентс.ру был максимально лоялен к правообладателям. В правилах там написано, что каждый запрос с документально подтверждёнными правами на материалы, выложенные на трекере, приведёт к удалению соответствующих раздач, и так в самом деле происходило! Я ещё как-то могу понять мотивы суда над Pirate Bay - эти ребята делали то же, но открыто называли себя пиратами, игнорируя все попытки с ними договориться. При этом в их родной Швеции был громкий судебный процесс, длившийся несколько месяцев, имевший огромнейший резонанс (взять хотя бы место Пиратской партии в Европарламенте!). Да и в Рунете большинство трекеров не отличается особым рвением оставаться в правовом поле. Торрентс.ру - исключение. И тем не менее наехали именно на него.

Мысль номер два: все эти т.н. правообладатели (если это они) не ведают, что творят. Ежу понятно, что файлообмен в том или ином виде победил. Нужно пытаться извлекать из этого выгоду, а не устраивать бессмысленные репрессии. Неужели они не знают, что помимо более 9000 копий экранки фильма “Аватар”, который можно найти в любой локальной сети, Торрентс.ру - хранилище ссылок на редчайшие материалы, купить которые легально просто невозможно даже в Москве, не говоря уже о провинции?! Взять хотя бы первый фильм Тарантино, оцифрованный и переведённый, как и сотни других раритетов, энтузиастами! А помните последний фильм братьев Коэн, который в нашей отсталой северной стране даже в прокат не вышел? А что насчёт собственных оцифровок виниловых пластинок? Что, в конце концов, насчёт авторских раздач, которых не так мало, как может показаться? Подскажите, где это взять легально? На Горбушке? Может быть, проведя полдня и пройдя пять километров вдоль прилавков, я таки найду половину того, чего искал. Но это в столице. А как насчёт Тулы и Рязани, не говоря уже о Барнауле и Томске? А что насчёт русскоязычного населения за рубежом? Думаете, православный храм в центре Парижа для эмигрантов полезнее, чем возможность смотреть русское кино и слушать русскую музыку? Не думаю. Пока государство занималось чёрт знает чем, люди сами решили для себя проблему культурного голода. Более объёмной и при этом структурированной коллекции произведений искусства на русском языке в свободном доступе объективно нет. Было бы чертовски несправедливо, если бы такой проект погиб из-за чьей-то банальной жадности. Торренты - дело огромной важности, действительно объединяющее носителей русскоязычной культуры по всему миру. Дадут фору любым хвалёным нацпроектам - факт.

И, наконец, третья мысль. Железным аргументом структур, пытающихся помешать свободному файлообмену, является такой: “Это незаконно!” Ах, вот ведь радетели за законность нашлись! Но даже не в этом суть. Суть в том, что закон для человека, а не человек для закона. Если реалии изменились, общество должно иметь право издать новые законы, этим реалиям соответствующие. Атеизм, гомосексуализм, эвтаназия - все эти вещи ещё совсем (по историческим меркам) недавно были под запретом. А, например, расовая сегрегация была в порядке вещей. Однако общество изменилось, и в процессе своего развития поменяло взгляды на эти вещи и, как следствие, к власти пришли люди, которые привели законодательство в соответствие с ними. Так происходит в идеале; так должно происходить. Грустный же вывод напрашивается сам собой: по видимому, в России проделать подобную корректировку законодательства мы не в силах.

PS Некоторое время назад я открыл статистику ThePirateBay.org и Torrents.ru и увидел, что количественные показатели (число зарегистрированных пользователей, раздач, сидов, личеров) у них очень близки. Принимая во внимание, что Бухту называют трекером номер один в мире, и что информация на его русскоязычном аналоге куда как лучше структурирована, я испытал чувство, которое испытываю довольно редко - гордость за то, что именно люди, которые говорят со мной на одном языке, собрали, по видимому, крупнейшую коллекцию своей культуры. Я увидел, что они испытывают потребность в культурном обмене друг с другом, что многим из них правда интересно и доставляет удовольствие потратить своё время и силы на поиск, оцифровку, перевод материала - и выложить его в свободный доступ, не прося ничего взамен, а лишь ожидая, что с ними так же поделятся чем-нибудь полезным.

Я считаю, что Торрентс.ру - более достойный предмет для гордости, чем олимпийская сборная, потому что торрент-сообщество - это сборная мира по обмену культурным наследием на русском языке, что важнее, чем катание на санях на время. И уж тем более, более достойный, чем самодержавно-православно-народные дядьки в телевизоре, учащие нас патриотизму.

PPS http://www.girus.ru/petition/33/

UPD Желающие сделать перепост - делайте! (с кнопочкой не вышло, но и вручную это не так сложно)

Feb 19, 2010 - 1 minute read - Comments - linux

info с человеческим лицом

Все знают про man страницы (man чаво?) и удобную программу apropos, все, надеюсь, ими активно пользуются.

Все знают и про info-страницы, рожденные в недрах проекта GNU, но, управление у программы info достаточно… неудобное, just for me.

Вчера дошли руки, посмотреть альтернативный браузер документации в формате инфо. Но моей лени хватило только набрать команду pacman -Ss info, среди вывода нашел такое:

community/pinfo 0.6.9-3
    A hypertext info file viewer

Поставил, запустил… Ну все, теперь и info активно пользоваться будут: * навигация в стиле links/elinks/w3m, вперед-назад - по Enter и стралками влево-вправо * выход - q * поиск - s или / * список всех топиков - d или b * переход к узлу - g просто и со вкусом. Внешние ссылки открываются, по умолчанию, в lynx, но, думаю (не разбирался пока), заменить на что-то своё будет не проблема.

Ну и снимок:

Feb 19, 2010 - 2 minute read - Comments - programming

Geeqie и закачка картинок на ImageShack

В Geeqie продолжили традцию предка GQView в части технологии инструментов, что удобно - теперь они редактируются созданием .desktop файла и могут быть расположены в любом пункте меню/подменю (не до конца доделано, но пользоваться уже можно).

Итак, что потребуется * imageshack-upload из одноименного пакета, Арчеры могут поставить пакет из AUR * xmessage или zenity для формирования диалога изменения разрешения картинки

Начнем…

Запускаем Geeqie, идем: Edit -> Preferences -> Configure editors. Откроется окно настройки редакторов, которые могут вызываться из Geeqie.

Нажимаем Create. Появится окно создания нового инструмента, где в основном окне ввода расположен шаблон, который можно подправить под себя. Начинаем с того, что в нижем окне ввода заменяем new.desktop на что-то вроде: ImageShackUpload.desktop. В качестве тела .desktop файла вставляем:

[Desktop Entry]
Version=1.0
Type=Application
Name=Image Shack Upload

# If you have zenity installed use:
#
#   cmd="zenity --list --text='$Q' --column='Selector' --column='Size' --radiolist TRUE No FALSE 1024x768 FALSE 800x600 FALSE 640x480 FALSE 400x300 || echo No" 
#
# if you have xmessage installed use:
#
#   cmd="xmessage -print -buttons 'No,1024x768,800x600,640x480,400x300' '$Q'" 
#
# If you use other dialog system, configure it, or use next command for disable resoultion selection:
#
#   cmd="echo No"
#
Exec=Q="Resize image before upload?"; cmd="zenity --list --text='$Q' --column='Selector' --column='Size' --radiolist TRUE No FALSE 1024x768 FALSE 800x600 FALSE 640x480 FALSE 400x300 || echo No"; size=`eval $cmd`; (for img in %F; do send_img=$img; if [ x"$size" != x"No" ]; then base=`basename $img`; noext=`echo $base | sed 's/.[A-Za-z0-9]*$*'`; ext=`echo $base | sed "s/^$noext*"`; send_img="/tmp/${noext}_$size$ext"; convert -scale $size $img $send_img > /dev/null 2>&1 || send_img=$img; fi; imageshack-upload $send_img 2>&1 | grep '^http:'; done)

# Desktop files that are usable only in Geeqie should be marked like this:
Categories=X-Geeqie;
OnlyShowIn=X-Geeqie;

# Show in menu "File"
X-Geeqie-Menu-Path=FileMenu/FileOpsSection

# This is a filter - $GEEQIE_DESTINATION is required
X-Geeqie-Filter=false

# It can be made verbose
X-Geeqie-Verbose=true

В зависимости от того, стоит у вас zenity/xmessages - вы должны заменить команду cmd=“…” на нужно вам. Кроме того, настройки тут говорят - располагать пункт в меню File. Нажимаем Save, возвращаемся опять в окно настройки инструментов, где наблюдаем и наш новосозданный инструмент. Закрываем.

Теперь выбираем файлы за для закачки и идем File -> Image Shack Upload, появляется диалог, в котором нам предстоит выбрать разрешение, в которое пережмется картинка, или No, если изменение размера не нужно. После закрытия окна начнется процесс закачки (если кстати прервать нельзья, только с соседнего терминала чем-то вроде killall curl), ссылки на закачанные файлы будут выведены в окне, откуда их можно скопировать и вставить в нужное вам место.

Enjoy!

Feb 18, 2010 - 1 minute read - Comments - linux

Церковь vs Linux

На правах юмора, бояна и кросспостинга


навеяно #536746, почему христианская церковь, не одобряэ Linux (да, это относится так же и к Unix): 1. там часто фигурирует число зверя – 666 2. там говорится про вилы (а чем черти колют грешников) – fork() 3. там часто фигурируют демоны 4. там часто взучат призывы убить (kill) и убить всех (killall) 5. очень часто упоминается про убийство родителей и детей 6. там обитают зомби 7. там ложь — это истина (общепринято: 1 – true, 0 – false, так в оболочке, нормальное завершение процесса, это код возврата – 0) 8. из #536746: тут ведется пропаганда детской порнографии (cp)

что ещё?

Отдельно, то, что не подходит как обощение, частно для конкретного дистрибутива/семейства 1. у FreeBSD вообще черт на логотипе 2. Толстый пингвин на логотипе — пропаганда чревоугодия

тут тоже – что ещё?

Feb 18, 2010 - 1 minute read - Comments - programming

./configure для qmake-based проектов

./configure для qmake-based проектов

Что бы очень не заморачиваться с формированием ./configure скрипта (и configure.exe программы для windows) при помощи autotools, когда вся их мощь не очень нужна, поможет проект qconf

Для Арчеводов, можно собрать из AUR svn версию: http://aur.archlinux.org/packages.php?ID=18686

Далее, на правах вольного пересказа английского README.

Intro

Итак, собираем, устанавливаем. Далее идем в корень вашего проекта, где лежит qmake файл, cоздаем там, для примера, файл myproject.qc примерно следующего содержания (это xml файл):

<qconf>
  <name>myproject</name>
  <profile>myproject.pro</profile>
</qconf>

дале пускаем: qconf myproject.qc

На выходе получаем скрипт ./confugure с функционалом, в базовой части соответствующей autotools.

Если запустить без аргумента, будет выбран первый найденный .qc файл, если их найдено не будет - автоматически будет выбран первый .pro файл, и на основе его собран минимальный .qc файл (как в примере выше).

На целевой машине qconf не нужен (нужные только его модули конфигурации, но логично распространять их с самим проектом), нужен только разработчику.

Итак, на этот момент мы имеем готовый ./configure скрипт, который запускаем без параметров или смотрим ./configure --help.

Как это работает

После запуска ./configure, будет сформирован файл conf.pri, в котором будут содержаться различные переменные, отвечающие за сборку, основные из которых: * PREFIX * BINDIR * LIBDIR * QTDIR

Этот файл вы можете включать в ваш .pro файл: include(conf.pri)

Feb 13, 2010 - 1 minute read - Comments -

Бортовой журнал переехал на главную

Т.к. основная ценность данного ресурса - это мои бредни, поэтому они заслуженно переезжают на главную страницу, тут же новости и прочая периодика.

Информация о ресурсе переехала на страницу “О ресурсе”, и приобрела чуть более линейный вид.

За сим - всё.

Feb 11, 2010 - 4 minute read - Comments - programming

Qt Creator и автоматическое создание реализации метода/прототипа

UPD: Информация больше не актуальна, теперь подобные средства кодогенерации встроены в Qt Creator.

Долгое время пользовался для написание программ, с использованием Qt4 интегрированную среду разработки QDevelop, и хотя она почти всем устраивает, за несколькими исключениями: * непонятно работает автодополнение * на 500 строках и больше начинает ощутимо поддтормаживать

Feb 5, 2010 - 1 minute read - Comments -

Medit из mercurial

Текущая версия замечательного редактора tags:medit?do=showtag&tag=medit|medit это 0.9.4 и она не обновлялась больше года. Решил собрать и попробовать сборку из mercurial, благо, смотря на даты последних изменений можно заметить, что работа ведется:

http://bitbucket.org/muntyan/moo/

Не все гладко - несколько переработан интерфейс, некоторые ошибки так и не исправлены (типа стоит галочка “переносить текст”, а он не переносится, а если убрать - будет переноситься).

Кроме того, сменили систему сборки на cmake, в результате не все доделали, и пришлось сделать два патча и один work-around для того, что бы пакет собрался вообще и с ctags, в частности. Кроме того, правила cmake пока не докрутили для python-plugin, в результате ни консоли питона, ни питоновских команд для пользовательских утилит. Хотя меня не это больше смущает - на питоне сделан терминал был, удобная, иногда, штука.

По питону, есть бага: http://sourceforge.net/tracker/?func=detail&aid=2929703&group_id=167563&atid=843451 будемс следить.

В общем, в результате изысканий, сделал правило для сборки и поместил в AUR: http://aur.archlinux.org/packages.php?ID=34336 там же необходимые патчи, хотя они тривиальны.

Да, рекомендую ознакомиться со справкой к программе, там вы найдете, в частности, как управлять поведением редактора на разных файлах (типа установить ширину отступа и кодировку, делается в манере, схожей с vim)

Feb 2, 2010 - 1 minute read - Comments - programming

C/C++ Coding Style

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

В общем вот: /C/C++ Coding Style

По ходу будет дополняться.

Jan 30, 2010 - 2 minute read - Comments -

Толи лыжи не едут...

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

Первое что понял - крепление полная опа. Нога ходит и болтается как г в проруби. Для этих лыж нужно резиновую подкладку ложить, иначе… ну не знаю, одни мучения. В общем попробую, если не поможет - буду вообще переосмысливать.

Далее, вообще не понял как идти в подъем %-) ну качусь назад и все, или мазь нужно было положить потеплее, и что с собой её не взял, хотя была положена -2 – -8. На одном подъемчике ноги так разъехались, почти шпагат вышел, мышцу потянул :)

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

Спуск… Да, сначала нужно тормозить научиться и лыжи закапываться и все, ну да, спускался по целине, учился не на лыжне. И вообще поворачивать в движении, а то я тормозить только падением освоился, благо снег мягкий.

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

Но позитив есть, хоть и не очень много :) Спасли так же бахилы, когда с лыж слезать приходилось - снега по колено, ноги не промокли, хотя подтаивало.

И на заметку: http://www.sportfamily.ru/podrostok/sky

Jan 26, 2010 - 2 minute read - Comments - linux

Настройка сетевого сканирования

Таска возникла на работе, ничего сложного и по интернетам наверное есть, заметка для себя.

Для Xerox/Samsung МФУ и сканеров рекомендую поставить sane версии не ниже 1.0.20, т.к. там появилась нативная поддержка этих девайсов, в замен глючному Unified Linux Drivers (ULD).

Серверные настройки

Сервер - тот к кому подключен сканер

  1. в /etc/sane.d/dll.conf убираем строки добавленные при установке ULD, обычно содержат в себе слово mfp, добавляем строчку: xerox_mfp
  2. в /etc/sane.d/saned.conf прописываем адреса для которых разрешено сканирование, например, для все сети:192.168.13.0/24
  3. в /etc/xinetd.d/saned disable = yes заменяем на disable = no. Возможно сдесь же, придется исправить группу и пользователя от которого будет стартовать сервер saned.
  4. рестартуем xinetd

Или запускаем saned как сервер. Вот кстати полный конфиг для /etc/xinetd.d/saned:

service sane-port
{
	disable			= no
        port        	= 6566
	socket_type 	= stream
        wait        	= no
	groups			= yes
	user        	= saned
	group       	= users
	server      	= /usr/sbin/saned
}

Клиентская часть

Клиенты - те, с которых будет производиться сканирование.

Тут настройка проста, в /etc/sane.d/net.conf прописать адрес или адреса хостов, к которым подключены сканеры, можно задать таймаут опроса.

Дополнительно

На некоторых системах потребуется монтирование usbfs, что бы организовать правильный доступ к устройству пользователей, на работе в Мандриве это: none /dev/bus/usb usbfs auto,busgid=100,busmode=0775,devgid=100,devmode=0664 0 0

У меня на ArchLinux: none /proc/bus/usb usbfs auto,busgid=108,busmode=0775,devgid=108,devmode=0664 0 0 группа для vbox :wink: ну а так, почти не отличается

ID групп и пользователя и права задаёте те, которые у вам нужны.

далее сканирование происходит как обычно - запускаем scanimage или xsane, если найдено несколько сканеров - будет предложено выбрать, если что-то не работает смотрим логи и права доступа - предварительно настраиваем сканер для локальной печати, благо это, в случае поддержки устройства, делается очень просто.

Jan 26, 2010 - 2 minute read - Comments -

Пара исправлений для FBReader

С давних пор пользуюсь для чтения электронных книг замечательной программкой FBReader. Особо мне нравилось то, что он мог на основе параметров пользователя оформлять книги, которые находятся в простом TXT файле.

Например, люди, которые делают OCR могут использовать следующие способы для выделения абзацев: * длинные строки, новый абзац с новой строки - такое правда встречается редко * в начале обзаца строка имеет отступ а 1-2-3 и т.д. пробелов или табуляций * абзацы разделены пустой строкой Второй и третий случай - наиболее частые, а сам текст обычно выравнен на 80 символов, что бы можно было читать в DOS-терминале

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

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

Конечно, данные критерии не покрывают абсолютно все случаи, но большинство - это точно.

Теперь о проблеме: в какой-то момент поломалось форматирование TXT файлов, с разделением абзацев по отступу первой строки, проявлялось так:

Отступ имела первая строка азбаца, после чего азцаз закрывался и вторая строка абзаца так же печаталась с новой строки с отступом, и это очень сильно резало глаза.

Сегодня дошли руки покопаться в исходниках, благодаря ну очень внятной структуре, разобраться много времени не заняло, да и исправления можно сказать косметические, вот патч:

--- ./fbreader/src/formats/txt/TxtBookReader.cpp.orig	2010-01-26 01:33:14.083167173 +1000
@@ -27,7 +27,8 @@
 
 void TxtBookReader::internalEndParagraph() {
 	if (!myLastLineIsEmpty) {
1. 	myLineFeedCounter = 0;
+		myLineFeedCounter = -1; /* Fixed by Hatred: zero value was break LINE INDENT formater -
+		                           second line print with indent like new paragraf */
 	}
 	myLastLineIsEmpty = true;
 	endParagraph();
@@ -76,7 +77,9 @@
 		((myFormat.breakType() & PlainTextFormat::BREAK_PARAGRAPH_AT_EMPTY_LINE) && (myLineFeedCounter > 0));
 
 	if (myFormat.createContentsTable()) {
1. 	if (!myInsideContentsParagraph && (myLineFeedCounter == myFormat.emptyLinesBeforeNewSection() + 1)) {
+	    /* Fixed by Hatred: remove '+ 1' for emptyLinesBeforeNewSection, it looks like very strange
+	       when we should point count of empty string decrised by 1 in settings dialog */
+		if (!myInsideContentsParagraph && (myLineFeedCounter == myFormat.emptyLinesBeforeNewSection())) {
 			myInsideContentsParagraph = true;
 			internalEndParagraph();
 			insertEndOfSectionParagraph();

Или альтернативная ссылка: http://codepad.org/GO5GIN7Y

Сейчас попробуем запостить разработчикам.

UPD: собственно: http://groups.google.com/group/fbreader/browse_thread/thread/a0f77eb79add8571?hl=en

Jan 25, 2010 - 3 minute read - Comments -

Аналогии

Когда объяснял процесс монтирования сменных накопителей в nix (читая курсы в ПИППКРО), родилась аналогия про прививу к дереву черенка и организации одного большого дерева (черенок это наш сменный носитель, флешка, CD/DVD и т.д.). Там же родилась юморная аналогия про один корень в nix и несколько корней в win - в nix у нас могучий дуб, а в win - несколько кустиков.

На прошедшем семинаре в коллекцию аналогий попала ещё одна, предложил камрад ad_user. Но для начала скучное техническое объяснение.

Все знают, что на большинстве IBM PC совместимых компах (какая архаика), нам на жестких дисках досталась таблица разделов, которая хранится в MBR (Master Boot Record). Сама MBR находится в первом секторе жесткого диска (в общем случае, можно подставить: flash, floppy & etc), и имеет размер 512 байт. В эти 512 байт нужно было запихнуть код загрузчика, сигнатуру, а на таблицу разделов выделил 64 байта, по 16 байт на раздел (тип раздела, его расположение)… Уже поняли? На первых PC на жеском диске можно было иметь всего 4 раздела (или диска C, D, E, F). После POST_(аппаратное_обеспечение)|POST процедур PC BIOS передает управление коду загрузчика в MBR. Именно поэтому, если хотим откзаться от MBR, нужно отказываться и от PC BIOS (как сделано в маках: EFI (Extensible Firmware Interface, вместо BIOS) + Таблица_разделов_GUID|GPT (GUID Partition Table))

Через некоторое время оказалось, что этого не достаточно, для некоторых задач требовалось делить жесткий диск больше чем на 4 раздела… А что делать - железа было уже очень много, а PC славится обратной совместимостью (когда-то это тру, когда-то - нет), исправить просто так формат - не получится… Тогда придумали совместимый алгоритм, так называемый Extended_Boot_Record|EBR (Extended Boot Record).

Что из себя представляет. В описании раздела в MBR есть поле - типа раздела, договорились, если вписать туда 0x05, это будет типом расширенного раздела, а в полях адреса, будет указан адрес EBR, в которой содержится: указатель на раздел, указатель на следующую табличку EBR и сигнатура (такая же как у MBR). На самом деле там больше полей, но часть просто не используется.

Таким образом, у нас получается по цепочке создать столько разделов сколько нужно. Кстати, были вирусы и зловредные программки, которые исправляли в EBR указатель на следующую табличку, на какую-то предыдущую, делая тем самым зацикливание. Ясно дело, при загрузке система сходила с ума :)

Условно принимают что расширенный раздел один, и остальные диски располагаются в нем, это не верно, но для восприятия в большинстве случаем - достаточно. Т.е. в общем случае у нас может быть 3 primary раздела и 1 extended, двух расширенных разделов в MBR быть не может. Стандарт. В Extended - сколько нужно logical разделов.

Ничего непонятно? :) теперь время аналогия:

у нас есть удлинитель на 4 розетки, если мы подключим туда 4 потребителя (создадим 4 primary раздела), мы больше потребителей подключить не сможем (в случае дисков - уменьшить размер существующего раздела и создать в освободившемся месте новый), а если мы сделаем так: подключим 3 потребителя, а 4е гнездо, подключим удлинитель на 2 розетки - в одну подключаем потребителя (кофеварку), а во вторую, ещё один такой удлинитель… и так пока мощности хватит :)

в общем, как-то так :)

PS да, в случае nix, нумерация primary разделов 1-4, а extended - от 5, так что не удивляйтесь, если у вас будут3 primary раздела 1, 2, 3 и сразу 5 (первый раздел в расширенном разделе).