Hatred's Log Place

DON'T PANIC!

Dec 3, 2009 - 1 minute read - linux

Немного про распознавание текста (OCR) в Linux

Наверное самое слабое место для Linux систем. Хотя проектов достаточно много, например gocr, tesseract или ocrad, но многие из них до сих пор не вышли из зачаточного состояния, требуют для более-менее удовлетворительной работы длительное обучение, и даже после оного достаточно отвратительно распознают текст.

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

Но, несмотря на это, в настоящее время - это лучшая программа для распознавания под Linux.

На данный момент существует несколько способов её использования:

  1. из командной строки, доступна из коробки
  2. программа cuneiform-qt, довольно убога на данный момент
  3. программа yagf - достаточно удобна, хотя ещё и не достаточно функциональна, может работать сразу со сканером при помощи xsane
  4. веб интерфейс - CuneWebForm, ссылки тут: * http://cunewebform.nntc.nnov.ru/ - попробовать непосредственно в работе, поддерживает закачку в виде отдельных картинок и в виде пакета в zip архиве. * http://fireforge.net/frs/download.php/434/cunewebform-0.2svn.tar.gz - ссылка на скачивание, дабы дома или в локальной сетке развернуть.

Куниформ работает и потихоньку эту свою работу делает, надеюсь будет развитие.

Nov 17, 2009 - 1 minute read - programming

Medit: работаем с FreeBasic

По аналогии с medit: ‘PHP check syntax’ tool создаем фильтр для FreeBasic Compiler:

<filter id="FreeBasic" name="FreeBasic">
  <match what="stderr" pattern="(?P&lt;file&gt;[^:]+)<br/>((?P&lt;line&gt;<br/>d+)<br/>) error <br/>d+:.*" style="output-error" />
  <match what="stdout" pattern="(?P&lt;file&gt;[^:]+)<br/>((?P&lt;line&gt;<br/>d+)<br/>) error <br/>d+:.*" style="output-error" />
</filter>

Дополнительно, помещаем файл синтаксиса для Бейсика в директорию ~/.local/share/medit/language-specs, предварительно распаковав: basic.lang.gz

После создаем инструмент Run Basic, файлы - *.bas; тип - Команда оболочки; вывод - Панель вывода; фильтр - FreeBasic, сам код такой:

fbc -lang qb $DOC -Wl -L/usr/share/freebasic/lib/linux/
if [ $? -eq 0 ]; then
  termit -e "bash -c '$DOC_DIR/$DOC_BASE; read -p <br/>"Hit <Enter> for continue<br/>"'"
fi

Вместо эмулятора терминала termit можно использовать xterm, функционал сохранится. Клавишу для запуска рекомендую F9, т.е. классическая F5 уже занята для перезагрузки документа.

Все, после этого можно полноценно набирать программы на диалекте QBasic в редакторе, имея при этом подсветку синтаксиса, автоотступы, букмарки, выполняя их по клавише F9. Если в тексте программы будут ошибки, после запуска компилятора они будут выведены в панели вывода и подсвечены красным.

Стоит отметить, что используя графические режимы (типа “screen 9”) программы запускаются в виде окна, перевести в полноэкранный режим можно нажатием сочетания клавиш Alt-Enter, текстовые программы будут вести диалог в текстовом окне терминала.

Все, пробуйте :)

Nov 17, 2009 - 5 minute read - linux programming

Текстовый редактор Medit

Про этот редактор я уже упоминал. Мне кажется у меня это будет не последний рассказ про расширения к редактору, поэтому сделаю краткое ревью ему самому, дабы потом можно было ссылаться.

Требования

Как-то я озадачился выбором текстового редактора, который бы было одинаково комфортно использовать как для редактирования кода и разработки, так и для быстрого открытия и редактирования обычных текстов. При этом что бы он был простым для простых вещей, и расширяемым для сложных. Таком образом выработался набор требований:

  1. т.к. нужно редактировать код, нужна подсветка синтаксиса, должна быть возможность создавать свои схемы подсветки
  2. автоотступ, как при вводе кода, так и при обычном текстовом редактировании
  3. отображение номеров строк, мне привычно - отдельной колонкой
  4. многооконный интерфейс образованный вкладками
  5. отступ блока кода и обратный отступ
  6. фолдинг - сокрытие блока кода
  7. поддержка кодировки текста
  8. поддержка поля вывода для внешних команд
  9. собственно вызов внешних команд
  10. боковые панели для быстрой навигации по дереву каталогов и открытия файлов (удобно работать в проекте)
  11. расширяемость - простые средства добавления нового функционала, без написания кода.

Знакомимся - MEdit

Повторю то, что кратко сказал в первом посте про данный редактор:

MEdit((http://mooedit.sf.net)) замечательный редактор, написанный на Gtk, пока, за малым исключением, удовлетворяет все мои запросы. Корнями уходит графическому интерфейсу GGAP((http://ggap.sourceforge.net/)) для GAP((http://www.gap-system.org/)).

Теперь же давайте рассмотрим его соответствие моим требованиям к хорошему текстовому редактору:

  1. подстветка синтаксиса: есть, описание в xml файлах, можно делать свои схемы
  2. автоотступ: есть
  3. отображение номеров строк: есть
  4. многооконный интерфейс образованный вкладками: есть
  5. отступ блока кода и обратный отступ: есть, в конфигурации по-умолчанию клавишами Tab и Shift+Tab соответственно
  6. фолдинг: нет, но как оказалось, в тех редакторах, что он есть, мною не использовался.
  7. поддержка кодировки текста: есть, но иногда после переключения нужно делать File -> Reopen With Codepage…
  8. поддержка поля вывода для внешних команд: есть + поддержка фильтров, но это подробнее позже
  9. собственно вызов внешних команд: есть, через механизм Инструментов (или Тулов, от английского Tools)
  10. боковые панели для быстрой навигации по дереву каталогов и открытия файлов: есть
  11. расширяемость: есть, через механизм плагинов (C или Python), через механизм Инструментов, которых реализован ооооочень удобно.

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

Инструменты

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

Сами инструменты могут быть описанием программы на встроенном Python, LUA или быть командой оболочки (в большинстве случаев - BASH).

Общие параметры для всех языков, это:

  • Включен - определяет включен инструмент или нет
  • Файлы - задает, в случае открытия какого файла будет доступен данный инструмент (например в зависимости от того файл какого языка мы редактируем). Тут могут быть заданы маски файлов, выражение типа: langs: c++, c, pascal или регулярное выражение типа: regex:<br/>.[ch]$. Пустое значение подразумевает что доступно при редактировании всех документов. На основе этого я сделал свой тул для валидации кода php.
  • Параметры - определяют при каких условиях инструмент будет отрабатывать, представляет собой разделенный запятыми список:
    • need-doc - документ должен быть открыт
    • need-file - инструмент не будет работать для новых, ещё не сохраненных на диск файлов
    • need-save - документ будет сохранен перед выполнением команды
    • need-save-all - все открытые документы будут сохранены перед выполнением команды

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

Для Типа команды “Команда оболочки” доступны так же следующие параметры:

  • Ввод - что будет посылаться на стандартный ввод команды, скрипт должен уметь принимать стандартный ввод
  • Вывод - куда будет посылаться вывод команд:
    • Ничего - никуда, редактор будет недоступен пока команда не завершится
    • Ничего, асинхронно - никуда, можно сразу продолжать работу с редактором
    • Панель вывода - собственно текст будет выведен в панель вывода, к этому выводу можно определить фильтр, о чем скажу ниже
    • Последние пункты соответственно вставят результаты или в текущую позицию в документе или в новый документ.
  • Фильтр - как будет восприниматься текст в панели вывода. Например, если это сообщения компилятора, можно выделить строки содержащие сообщения об ошибках компиляции, подсветить их красным и сделать возможность перехода на строку с ошибкой по клику мыши. Определено несколько стандартных фильтров:
    • Default - ничего не подствечивает, если строка вывода начинается с имя_файла:номер_строки то по клику по такой строке будет произведена попытка открыть файл и перейти на указанную строку.
    • Остальные специфичны для конкретных применений. Посмотреть их описания можно в /usr/share/moo/filters.xml

Описания языка LUA и Python можно посмотреть в справочном руководстве к редактору, в формате HTML, если он у вас установлен по тем же путям, то можно открыть по этой ссылке: /usr/share/doc/medit/help/sect-user-tools.html

Для SHELL скриптов, как самых простых в реализации, рассмотрим переменные окружения к которым можно обращаться:

  • $DOC - имя документа без пути к нему
  • $DOC_DIR - полный путь к документу
  • $DOC_BASE - имя документа без расширения (последнего элемента отделенного точкой)
  • $DOC_EXT - расширение документа
  • $LINE - номер строки в которой стоит курсор
  • $DATA_DIR - директория в которой хранятся настройки medit, бывает удобно, что бы некоторые сценарии сохраняли или читали от туда свои настройки.

Как реализовывать конкретный функционал, уже удел вашей фантазии.

Да! На каждый созданный документ, можно после в Изменить -> Настройка горячих клавиш, можно настроить свою клавишу. Оду и ту же клавишу можно назначать на разные инструменты, если они выбираются для разных файлов. Если будет отображаться одновременно два инструмента с одинаковой горячей клавишей, будет выполнен тот, который идет раньше.

Остальное

Тут кратко рассмотрю основные интересности о medit:

  • описание синтаксиса можно сохранять в пользовательскую директорию: ~/.local/share/medit/language-specs
  • свои фильтры можно добавлять в файл ~/.local/share/medit/filters.xml причем нужно писать только сам фильтр, например: ```xml <match what=“stderr” pattern=".Parse error:. in (?P<file>[^:]+) on line (?P<line>
    d+)" style=“output-error” / <match what=“stdout” pattern=".Parse error:. in (?P<file>[^:]+) on line (?P<line>
    d+)" style=“output-error” /

Nov 16, 2009 - 3 minute read - life

Я - препод

Почти по аналогии: Я - робот.

С 9 по 14 ноября читал первый курс лекций для учителей информатики в ПИППКРО по программе “Установка и администрирование Пакета Свободного Программного Обеспечения (ПСПО)”.

Попробую поделиться своими впечатлениями по этому поводу с разных точек зрения…

Собственно начнем с того, что читать лекции мне понравилось :)

Но теперь о нехорошем: изначально данная программа рассчитывалась на 9 дней по 8 академических часов, при этом можно ещё было избежать какой-то каши в голове. Но даже в этом случае, она не была способна выполнить тех задач, которые ставились. Непонятно было, для чего рассказывать учителям об основах языка C++.

На самом же деле, программу сократили до 6 дней по 10 часов, в результате 12 часов у нас вылетело и бежать приходилось галопом по европам, но оставим это на совести организаторов.

Непонятным в программе с названием “Установка и администрирование” стало наличие раздела - Программное обеспечение для Объектно Ориентированного программирования… программисты и администраторы разные люди.

Непонятным для меня этапом стало то, что курс администрирования читается учителям информатики… Получается, помимо учительской нагрузки на них ложится нагрузка, как минимум: сетевого администратора (установка серверов, проектирование сети), системного администратора и оператора (поддержка пользователей, устранение их проблем), техника (монтаж оборудования и сети) и инженера по информационной безопасности (обеспечение конфиденциальности и целостности данных, политики обеспечения информационной безопасности). И это за те же деньги, что получает сам учитель, ну может какие надбавки, но это же не соизмеримо с зарплатами 5 человек!

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

Диким стало что они учат детей Ворду и Экселю! Нельзя же учить конкретной программе, для этого есть отдельные специализированные курсы. Нельзя использовать подобные слова-паразиты. Есть строго определенные: Текстовые процессор, Электронная таблица и т.д. Нельзя строить программу обучения на специфицических, и, что греха таить, частично удобных функциях, конкретных приложений, без возможности адаптации и реализации заданий в других продуктах, начиная от Лексикона и редактора Слово и Дело до OpenOffice Writer, AbiWord и KOffice Word для текстовых процессоров и от каких-то простеньких электронных таблиц до OpenOffice Calc, Gnumeric и KOffice Spreadshit.

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

В заключении хочу сказать, что, возможно, кому-то будет неприятно читать, что я написал выше, возможно меня после этого не будут приглашать читать лекции, пусть, но молчать тоже нельзя. А то все говорят, вот наша школа, наши ВУЗы… Пока учителя не научатся сами учиться, пока курсы повышения квалификации будут только галочкой в личном деле, они ни каким образом не смогут причислить себя больше к интеллигенции и наше образование будет лететь в Тар-Тар.

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

Nov 16, 2009 - 1 minute read -

Последние события жизни LUG

Крайне кратко и обзорно.

31 октября провели Arch Linux Install Fest, поставлен на несколько машин, некоторым помогли разобраться с возникшими проблемами, в частности о установке и создании RAID1, потому как оригинальный мастер установки этого не позволяет, но есть всё необходимое, дабы это реализовать.

Как раз проведение совпало в первым снегопадом, но людей было много, настоящие пингвины снега не боятся :)

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

Второй снегопад совпал с проведенной мини-туксовкой (был я, leen, morphey) 15 ноября, на которой разбирали, вопрос с корректным выключением и перезагрузкой борды на арме, собственно появилось несколько решений, вспомнил старый добрый SourceNavigator, который опять начал развиваться.

Следущее мероприятие, ориентировочно - 5го декабря.

Oct 30, 2009 - 6 minute read - linux

Как запустить...

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

Oct 27, 2009 - 1 minute read -

Макробиблиотека CyrillicTools для OpenOffice

Юзал давно, недавно опять вспомнил, сходу найти не смог, поэтому оставляю эту заметку.

Библиотека представляет собой набор макросов на OpenOffice Basic для работы с кирилистическим текстом, всякие заявленные “сумма прописью” я не использую, но вот когда открываешь документ в старом формате MS Office 95 (пользователям 1C посвящается), то часто там битая кодировка, помогает преобразить текст конвертация Latin1->Cyrillic.

В документации сказано как установить библиотеку для всех пользователей в системе, но, если нужно по быстрому, то в OpenOffice 3.x и выше можно воспользоваться услугами менеджера расширений:

  • скачать архив библиотеки: http://openoffice.vspu.ac.ru/cyrtools1.3.uno.zip
  • в запущенном OpenOffice выбрать Tools -> Extension Manager, нажать Add… и выбрать скачанный вами архив
  • перезапустить OOo и наблюдать новый пункт меню Cyrillic Document

Сайт проекта: http://openoffice.vspu.ac.ru/ Документация проекта: http://openoffice.vspu.ac.ru/doc/

Из дополнительных интересных расширений советую посмотреть LanguageTool((Домашняя страница: http://www.languagetool.org/)), в некоторых сборках OpenOffice он уже идет в комплекте, проверьте свою.

Oct 22, 2009 - 2 minute read - linux programming

medit: 'PHP check syntax' tool

Medit((http://mooedit.sf.net)) замечательный редактор, написанный на Gtk, пока, за малым исключением, удовлетворяет все мои запросы. Корнями уходит графическому интерфейсу GGAP((http://ggap.sourceforge.net/)) для GAP((http://www.gap-system.org/)). Будет время, напишу более полную заметку про него, благо, писать есть что.

Но сегодня рассмотрим вопрос создания тула ‘PHP syntax check’.

Oct 21, 2009 - 3 minute read - linux

NetworkManager

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

Это пост-размышление и попытка найти золотую середину.

Итак, исходное: нетбук Asus EeePC 1000H, дистрибутив ArchLinux, из тех менеджеров, что можно найти в стандартных репозитариях: networkmanager, wicd, nuts (в AUR или в чакра-проджект).

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

wicd

Исторически так сложилось, что это был первый мененджер сетевых подключений, который я использовал. Он меня всем устраивал, даже тем, что можно было указать только под одному сетевому интерфейсу для проводной и беспроводной сети. Все, больше ничего лишнего: не VPN, не PPPoE, ни подключения телефона и т.п. Только управление профилями проводных и безпроводных (WIFI) сетей.

Изначально обладал только графическим клиентом - wicd-client, в последних версия обзавелся и консольным - wicd-curses, и все бы было хорошо, если бы не написан на питоне (есть у меня предубеждения к этому языку, считаю его идеальным для обучения хорошему стилю кодирования, но не как не для создания полноценных приложений, по сути, в мире *nix он стал эквивалентом Visual Basic для Windows).

Ладно, мне главное ехать, а не шашечки. Но в какой-то момент времени стали наблюдаться непонятные события - при отключении сетевого подключения (например если просто вынуть кабель) долгие тормоза, при этом от системы никакого отклика. Те же события при подключении, причем, я не могу выловить закономерности (мало-мало грешу на флеш в Firefox, конкретно - всякие ролики типа с Ютуба). Это меня сподвигло на поиск альтернативы.

NetworkManager

Логичной альтернативой стал NetworkManager, разработанный в рамках проекта Gnome. Исследуя его зависимости, оказалось, что сам демон (NetworkManager) от gnome никак не зависит, а вот с клиентами чуть каша (про это позже).

Краткие возможности: написан на Си, что несколько радует, позволяет настраивать сеть по нескольким сетевым интерфейсам, как проводным так и беспроводным, позволяет настраивать соединения по PPPoE, поддерживает настроку VPN (OpenVPN, pptp и ещё что-то), но через допольнительные плагины (которые требуют, для чего-то, установленного network-manager-applet)

Стандартный клиент - gnetwork-manager-applet (вызывается nm-applet), встраивается в системный трей, откуда можно вызвать и конфигуратор, имеет гномовские зависимости: gnome-keyring, policykit-gnome, notification-daemon

Есть клиент для KDE - knetworkmanager, к сожалению есть только в AUR((http://aur.archlinux.org/packages.php?ID=19526)) и только для KDE3

Для консоли, клиент cnetworkmanager-git или cnetworkmanager, опять таки только в AUR((cnetworkmanager-git - http://aur.archlinux.org/packages.php?ID=18097 или cnetworkmanager - http://aur.archlinux.org/packages.php?ID=29595)). Клиент написан на питоне.

В общем, GUI клиента без лишних DE зависимостей пока найти не удалось, так что если кто предложит, написанный только на QT/Gtk, буду благодарен, а пока наблюдаю работа в nm-applet.

nuts

Орешки :) Но пока я его не расколол - в клиенте так и не увидел ни одного профиля. Из минусов программы: жесткая настройка сетевых профилей в конфигурационном файле, но работать может с несколькими интерфейсами. В комплекте графический клиент на QT4 - qnut и консольный - cnut.

Доступен из AUR((kdemod-nut-git - http://aur.archlinux.org/packages.php?ID=28846)) или из репозитариев чакра-проджект((У них есть отличное руководство - http://chakra-project.org/wiki/index.php/Get_NET_with_NUT)), для отстройки нужен пакет kdemod-openresolv((http://aur.archlinux.org/packages.php?ID=28847)) и хотя оба пакета в своём названии содержат kdemod, никаких kde зависимостей они не тянут((openresolv вообще набор скриптиков)).

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

Oct 20, 2009 - 5 minute read - programming

Arduino: небольшой отчет по мастер-классу

Итак, в субботу случилось данное событие, всех и себя поздравляю :)

Все исходники по семинару (презентация, схемы, разводка, листинги программ) приложены в конце статьи.

Количество пришедшего народу несколько порадовало, хотя очень расстроило, что не было никого из политена (народное название ДВГТУ), кто сейчас там учится или преподает, особенно электрические машины, ведь, по сути, я продемонстрировал готовый вариант ШИМ управления двигателем, и применить подобную наработку в какой нибудь курсовой или дипломной работе - милое дело.

Вот новых лиц было малова-то: с Русланом Остапенко (учитель информатики из села Раздольного) приехали 4 школьника, надеюсь им было интересно и информация хоть частично осядет в их головах, и было 2 студента из ДВГУ— увидели объявление, заинтересовались.

В общем, главное, что был интерес.

Oct 19, 2009 - 2 minute read -

EeePC: 2.6.31.4 + wifi

EeePC 1000HA, wifi, карторчка Atheros (чип - AR2425, согласно этому, это AR5007EG, хотя lspci называет её как AR5001), ядро 2.6.31.4

возможные драйвера:

  • ath5k - стоковый
  • madwifi-hal - из AUR
  • ndiswrapper - из core + виндовый драйвер (нужны *.sys и *.inf файлы)

Поведение:

ath5k

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

UPD: с какой-то версии ядра данный драйвер стал прекрасно работать, сейчас, на 2.6.36 он прекрасно трудится и не чихает. Немного можно почитать тут

madwifi-hal

Работает. Не сумел завести карточку в режиме 802.11g, хотя она это поддерживает, как и точка доступа. Скорость крайне медленная, меньше 1 мбита, хотя точка в 1.5 метрах. Иногда бывают затыки, потом на короткое время соединение опять поднимается.

ndiswrapper

наконец дошли руки попробовать, точне довело: раньше нормально работал madwifi-hal, поставил, особо ничего трудного, в вики есть немного информации. Карта встала как 802.11g, скорость в выводе iwconfig светится как 54Mbit, но, судя по всему, сумма в обе стороны, скачка большого файла с сервера идет со скоростью примерно 2.7 Мбайт/сек, что примерно равно 24мбит. Пока ещё наблюдаем, надеюсь, с madwifi-hal что–то сделают.

UPD: а у этого способа оказался свой косяк: убивается, со временем, шина USB, перестаёт реагировать мышка, принудительная выгрузка модулей помогает, но следующий слет USB приводит к Kernel Panic

Настройка

Для настройки сетевых подключений использую wicd, остальные настройки, ниже.

ath5k/ath9k

ath9k драйвер используется для новых карточек 802.11n

  1. /etc/rc.conf: bashMODULES=(... !ndiswrapper ath5k !ath_hal !ath_pci ...)
  2. /etc/modprobe.d/wifi_balacklist.conf: blacklist ndiswrapper blacklist ath_hal blacklist ath_pci
  3. при использовании acpi-eeepc-generic, */etc/conf.d/acpi-eeepc-generic.conf//: bashWIFI_DRIVERS=("ath5k")

madwifi-hal

  1. скачиваем из AUR: http://aur.archlinux.org/packages.php?ID=20857, распаковываем, строим, устанавливаем, без подробностей.
  2. /etc/rc.conf: bashMODULES=(... !ndiswrapper !ath5k ath_hal ath_pci ...)
  3. /etc/modprobe.d/wifi_balacklist.conf: blacklist ndiswrapper blacklist ath5k blacklist ath9k
  4. /etc/modprobe.d/madwifi.conf: options ath_pci autocreate=sta ratectl=minstrel countrycode=0 xchanmode=1 intmit=1 ath_debug=1 ieee80211_debug=1 вы можете поиграться с этими опциями, посмотреть можно по modinfo ath_pci
  5. при использовании acpi-eeepc-generic, */etc/conf.d/acpi-eeepc-generic.conf//: bashWIFI_DRIVERS=("wlan_tkip" "wlan_ccmp" "ath_pci" "ath_rate_sample" "ath_hal" "wlan_scan_sta" "wlan")

ndiswrapper

Пока использую его на последнем ядре.

  1. Устанавливаем ndiswrapper и ndiswrapper-utils
  2. /etc/rc.conf: bashMODULES=(... ndiswrapper !ath5k !ath_hal !ath_pci ...)
  3. /etc/modprobe.d/wifi_balacklist.conf: blacklist ath_pci blaclist ath_hal blacklist ath5k blacklist ath9k
  4. распаковать виндовый драйвер (можно взять отсюда последний: http://www.atheros.cz), выполнить команды от рута: bashndiswrapper -i netathw.inf ndiswrapper -l ndiswrapper -m
  5. при использовании acpi-eeepc-generic, */etc/conf.d/acpi-eeepc-generic.conf//: bashWIFI_DRIVERS=("ndiswrapper")

Oct 16, 2009 - 1 minute read - linux

Перечень и краткое описание основных команд при работе операционной системе Linux и список рекомендуемой литературы

Часто в последнее время приходится показывать пользователям, что помимо GUI и всяких WM/DE есть ещё команды. В ответ интересуются, а где про них прочитать? Случайно наткнулся на эту статью:

Перечень и краткое описание основных команд при работе операционной системе Linux и список рекомендуемой литературы

Так что, на будущее, буду рекомендовать.

Oct 16, 2009 - 1 minute read - life

Уважаю БГ!

Нет, это не дядя Билли, это другой, тот самый БГ!

Почему уважаю? Недавно вышел новый альбом Аквариума “Пушкинская, 10”, так вот скачать песни можно официально и бесплатно или заплатив кто сколько хочет, по желанию.

Oct 11, 2009 - 2 minute read -

exo: решение проблемы с кодировками при монтировании от разработчиков

Версия exo 0.3.104, репортуют о решении проблемы с установкой кодировки при монтировании сменных устройств.

Version exo 0.3.104, developers reporting us about resolving problem with code-page setup on mounting removable devices.

Russian

Анализ кода дал следующий результат:

    else if (strcmp (device->fsoptions[m], "umask=") == 0
                   && strcmp (fs, "ntfs-3g") == 0)
            {
              /* we need to pass umask=0077 to ntfs-g3 or else it gets 0777 perms */
              options[n++] = g_strdup ("umask=0077");
            }
          else if (strcmp (device->fsoptions[m], "iocharset=") == 0)
            {
              /* get the charset from a variable set by the user or glib */
              charset = g_getenv ("EXO_MOUNT_IOCHARSET");
              if (G_LIKELY (charset == NULL))
                if (g_get_charset (&charset))
                  charset = "utf8";

              if (G_LIKELY (charset != NULL && *charset != '<br/>0'))
                options[n++] = g_strdup_printf ("iocharset=%s", charset);
            }

Они так и не ушли от тупого жесткого указания опций в коде. Да, кодировку теперь можно указывать через переменную окружения, но как задать те опции монтирования, что не предусмотрели разработчики??? По сути это Alt’овци пропихнули свой патч. Теперь баг закроют, потому как проблема не будет наблюдаться, но сделано-то криво. Я расстроен.

PS как чуял неладное: перешел на openbox + pcmanfm + lxpanel (вариация на тему lxde).

PPS Если кто считает, что мой патч нужен - отзовитесь.

PPPS Если кто может перевести этот пост на английский язык - помогите пожалуйста.

English

Code analysis gave me following result:

    else if (strcmp (device->fsoptions[m], "umask=") == 0
                   && strcmp (fs, "ntfs-3g") == 0)
            {
              /* we need to pass umask=0077 to ntfs-g3 or else it gets 0777 perms */
              options[n++] = g_strdup ("umask=0077");
            }
          else if (strcmp (device->fsoptions[m], "iocharset=") == 0)
            {
              /* get the charset from a variable set by the user or glib */
              charset = g_getenv ("EXO_MOUNT_IOCHARSET");
              if (G_LIKELY (charset == NULL))
                if (g_get_charset (&charset))
                  charset = "utf8";

              if (G_LIKELY (charset != NULL && *charset != '<br/>0'))
                options[n++] = g_strdup_printf ("iocharset=%s", charset);
            }

Mount options are still hardcoded. Yeah, now we can choose code-page setting up environment variable. But how we can setup another mounting options? Now bug will be marked as fixed, but bugfix is horrible. I’m disappointed.

Oct 8, 2009 - 3 minute read -

Генерация меню в IceWM

Подробно это описано в АрчВики по следующим ссылкам:

Рекомендую использовать первый способ, а ещё - подкорректировать вики, у меня пока руки не доходят.

Беда в том, что меню генерируется без картинок. Пошаманив немного, а если быть точнее - подсмотрев в Mandriva 2009.1 как это сделано, сделал небольшой патч для xdg_menu который добавляет иконки в меню:

--- xdg_menu.old	2009-10-08 15:27:26.387920020 +1100
@@ -65,6 +65,89 @@
     }
 }
 
+sub findicon
+{
+
+#       my $theme = "hicolor";
+
+        my $iconname = shift;
+
+
+        my $home = $ENV{"HOME"};
+        my $xdg_data_dirs = $ENV{"XDG_DATA_DIRS"};
+
+        my (@xdg_data_dirs);
+        @xdg_data_dirs = split(":",$xdg_data_dirs);
+
+        my (@icon_search_path);
+
+        my (@categorylist);
+        @categorylist = ("apps", "places", "devices", "actions", "animations", "categories", "emblems", "emotes", "filesystems", "intl", "mimetypes", "status", "stock");
+
+        my (@sizelist);
+        @sizelist = (16, 22, 24, 26, 32, 36, 48, 64, 72, 128, 192, 256);
+
+        my $thisdir = $home."/.icons";
+        ( -d $thisdir ) && push @icon_search_path, $thisdir;
+        foreach my $dir (@xdg_data_dirs)
+        {
+                my $theme = "hicolor";
+                my $size;
+                my $category;
+                foreach $size (@sizelist)
+                {
+                        foreach $category (@categorylist)
+                        {
+                                $thisdir = $dir."/icons/".$theme."/".$size."x".$size."/".$category;
+                                ( -d $thisdir ) && push @icon_search_path, $thisdir;
+                        }
+                }
+                $thisdir = $dir."/icons/mini";
+                ( -d $thisdir ) && push @icon_search_path, $thisdir;
+                $thisdir = $dir."/icons";
+                ( -d $thisdir ) && push @icon_search_path, $thisdir;
+                $thisdir = $dir."/icons/large";
+                ( -d $thisdir ) && push @icon_search_path, $thisdir;
+                $theme = "gnome";
+                foreach $size (@sizelist)
+                {
+                        foreach $category (@categorylist)
+                        {
+                                $thisdir = $dir."/icons/".$theme."/".$size."x".$size."/".$category;
+                                ( -d $thisdir ) && push @icon_search_path, $thisdir;
+
+                        }
+                }
+        }
+
+        push @icon_search_path, "/usr/share/pixmaps";
+
+        my $filename;
+
+        #if ( -f $iconname )
+        #{
+        #        return $iconname;
+        #}
+        #else
+        {
+
+                foreach my $dir (@icon_search_path)
+                {
+                        foreach my $ext ('','.png','.xpm')
+                        {
+                                $filename = $dir."/".$iconname.$ext;
+                                ( -f $filename ) && return $filename;
+                        }
+                }
+        }
+}
+
+sub add_png_extension_if_needed ($)
+{
+        my ($f) = @_;
+        return $f =~ /<br/>.(png|xpm|svg)$/ ? $f : "$f.png";
+}
+
 sub scan_AppDir ($$;$)
 {
     my ($pool, $dir, $topdir) = @_;
@@ -1565,11 +1648,13 @@
     $indent = 0 unless defined $indent;
 
     my $menu_name = $menu->{'PrepName'};
+    #my $menu_icon = $menu->{'PrepIcon'} || "folder" ;
+    my $menu_icon = findicon($menu->{'PrepIcon'} || "folder");
 
     if($indent)
     {
 	$output .= ' ' x $indent;
1. $output .= "menu <br/>"$menu_name<br/>" folder {<br/>n";
+	$output .= "menu <br/>"$menu_name<br/>" $menu_icon {<br/>n";
     }
 
     foreach my $entry (@{$menu->{'entries'}})
@@ -1580,9 +1665,10 @@
 
             my $name = $desktop->{'PrepName'};
             my $exec = $desktop->{'PrepExec'};
+            my $icon = findicon(add_png_extension_if_needed($desktop->{'Icon'})) || "-";
 
             $output .= ' ' x $indent;
1.            $output .= " prog <br/>"$name<br/>" none $exec<br/>n";
+            $output .= " prog <br/>"$name<br/>" $icon $exec<br/>n";
         }
         elsif ($entry->{type} eq 'menu')
         {

У меня получилось примерно следующее: