пятница, 24 июля 2009 г.

Цветовыделение ls и язык консоли

Чтобы ls не выделял цветом имена файлов при выводе, добавил строку
alias ls='ls --color=never' в ~/.bashrc

Чтобы переключить язык и кодировку консоли с кривой русской однобайтовой (cp1251 кажется) на английскую, добавил строки
LANG="C"
export LANG
LC_MESSAGES="C"
export LC_MESSAGES
в .bash_profile


Надо ещё будет разобраться как цвета в цветовых схемах vim поменять, а то задолбало читать синий текст на чёрном фоне.

суббота, 18 июля 2009 г.

PulseAudio Ubuntu компоненты заклинания

В один прекрасный момент потерялся звук на моей Ubuntu. Пришлось учить новые заклинания. Так как на машине стоят две звуковухи, то сложность заклинаний значительно возросла.

gnome-sound-properties - Указывается, куда направить звуки. Путь воина - все направить в PulseAudio sound server.
pavucontrol - Сама полезная тулза для настройки вывода данных PulseAudio
padevchooser - аплет в трее - помогает при составлении итогового заклинания
paman - PulseAudio Manager, я бы его не менагером, а монитором окрестил, один хрен только посмотреть можно
gnome-volume-control - в представлении не нуждается
paprefs - Тут самое интересное - вкладка Simultaneous output

Вот вроде и все базовые компоненты заклинания, осталось только составить из них итоговое заклинание.

Что у меня полчуилось:
  • найдены все ползунки громкости (6-7 штук)
  • научился звук налету перекидывать между звуковухами
  • научился делать идентичный звук на звуковухах
  • научился играться с звуковыми потоками
  • вернул звук в систему
  • вернул звук в флеш
З.Ы. В очередной раз понял, что винда нервно курит в сторонке.

пятница, 17 июля 2009 г.

Каждый сам за себя?

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


Пастор Мартин Нимёллер, узник Заксенхаузена и Дахау

пятница, 10 июля 2009 г.

3 секунды или 5 секунд?

Возникла проблема при установлении соединения с базой данных. 99.9% коннектов проходило за милисекунды, но единичные выстрелы проходили или за 3 или за 5 секунд в зависимости от ОС (Linux, FreeBSD). Причём промежуточных значений не было. Локализация показала, что проблема при установлении большого числа tcp соединений в короткий отрезок времени. Спасибо, техническому директору и админам, что решение было найдено достаточно быстро.

Надо было увеличить сетевые буферы.
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_max = 262144

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

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

среда, 8 июля 2009 г.

Говнокод

Открыл /etc/crontab на одной из машин и увидел

* * * * * root /usr/bin/mysql dbname -e 'show full processlist' | grep 'LEFT JOIN followers AS fl ON m.user_id=fl.user_id AND fl.follower_id=' | grep 'LEFT JOIN users AS reply ON reply.login=m.reply_to_login AND reply.domain=m.reply_to_domain AND reply.name' | awk '{print "kill "$1";"}' | /usr/bin/mysql

понедельник, 27 апреля 2009 г.

Аспекты реализации

Давайте рассмотрим сущности, которые потребуются для будущей системы, а также некоторые требования к этим сущностям.

Текст
Класс для работы с текстом. Это, пожалуй, один из базовых классов для начальной работы с материалом. Он должен уметь провести общий анализ текста:
- чистка текста от лишних знаков, в зависимости от того, что планируется дальше делать с этим текстом. На текущем этапе работы класс должен оставить от текста группы русских букв в нижнем регистре, разделённые одним пробелом. Эти группы букв будут называться словами.
- класс должен уметь превратить текст в коллекцию слов.
- статистические данные по тексту - количество символов, количество байт, гистограмма популярности символов в тексте.
- аккумулировать данные из двух объектов этого класса в один.

Коллекция слов
Коллекция слов представляет собой класс для работы с неупорядоченным набором слов. Функции данного класса:
- количество слов;
- уникализация коллекции;
- сбор гистограммы триграмм по коллекции;
- итератор по словам;
- базовые методы работы с коллекцией - поиск, пересечение, объединение.

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

Случай склонения
Так как, видимо, будет слишком сложно параметризовать алгоритм анализа слова на возможные склонения с учётом развития информационной базы. Придётся наплодить кучу реальных классов наследованных от общего абстрактного. А если посмотреть на число случаев склонения существительных, то можно примерно оценить необходимый объём кода. Кода, очевидно, будет очень много. Написание и структурирование этого кода, на мой взгляд, будет оправдано только в случае, если будет подготавливаться релиз версия кода.

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

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

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

четверг, 23 апреля 2009 г.

Продолжение существительных

[овь] [овь] [ви] [овь] [овью] [ви]
любовь
Исключение. Чередующийся корень.

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

[ок] [ка] [ку] [ок] [ком] [ке]
рассудок, цветок, мешок, переулок, кусок, порядок, подбородок, зевок, свёрток, чесночок, пирожок, рывок, уголок, потолок, смешок, голосок, поселок, звонок, слушок
Мужской род. Неодушивлённые.

[я] [и] [и] [ю] [ей] [и]
комиссия, история, милиция, администрация, пригоршня, функция, антимония, физиономия, лекция, рептилия, эволюция, доля, биология, информация, экспедиция, конструкция, обсерватория, реакция, депрессия, анархия, траектория, семья, колония, демократия, серия, ситуация, полиция, неделя, компания, аудитория, симпатия, кремация
Женский род. Неодушевлённые. Окончание <согласная>-ия. В правило не вписываются слова пригоршня, доля, семья, неделя.

[ая] [ой] [ой] [ую] [ой] [ой]
справочная, прямая, вселенная
Это как ни крути прилагательные, просто используются как существительные. Женский.

[й] [я] [ю] [й] [ем] [и]
гравий
Вот одно такое странное слово.

[ень] [ня] [ню] [ень] [нем] [не]
камень, уровень, перечень
Мужской род.

[а] [ы] [е] [у] [ей] [е]
улица, половица, луковица, царица, мельница, птица, красавица, учительница, соучастница
Женский род. Перед окончанием ц.

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

[а] [] [ам] [а] [ами] [ах]
ворота, чернила, небеса
Женский род. Неодушевлённое.

[а] [и] [е] [у] [ей] [е]
крыша, галоша, калоша, тысяча, сдача, видеопередача, встреча, неудача
Женский род. Неодушевлённое. Базовая форма оканчивается на ч или ш.

[ё] [я] [ю] [ё] [ём] [е] ружьё, бельё. Средний род.

[] [] [] [] [] [] рандеву, депо. Исключения не склоняемые слова.

[е] [я] [ю] [е] [ем] [е]
лукоморье, платье, море, подполье. Средний род.

[ый] [ого] [ому] [ого] [ым] [ом]
учёный. Образовано от прилагательного. Мужской род.

[ец] [ца] [цу] [ец] [цом] [це]
конец, огурец, дворец. Мужской род. Неодушевлённое. Изменяющийся корень.

[ец] [ьца] [ьцу] [ьца] [ьцем] [ьце]
доброволец, комсомолец, пришелец. Мужской род. Одушевлённое. Базовая форма оканчивается на -ол -ел.

[ец] [ца] [цу] [ец] [цем] [це]
запорожец, колодец. Мужской род. Неодушевлённое.

[ая] [ей] [ей] [ую] [ей] [ей]
прихожая. И снова прилагательное.

[ийся] [егося] [емуся] [егося] [имся] [емся]
нижеподписавшийся. Ну вот, разнообразие, теперь - причастие.

[ол] [ла] [лу] [ол] [лом] [ле]
угол. Изменяющийся корень.

[я] [ени] [ени] [я] [енем] [ени]
время, имя, племя, семя. Женский род. Неодушевлённое. -имя -емя

[ь] [я] [ю] [ь] [ём] [е] рубль, гвоздь. Мужской род.
[я] [и] [е] [ю] [ёй] [е] чешуя, земля, свинья. Женский род.

[ель] [ля] [лю] [ель] [лем] [ле] кашель. Изменяющийся корень.

[ек] [ка] [ку] [ек] [ком] [ке] горошек, полтинничек, подарочек. Мужской род. -чек. Я не удивлюсь, если суффикс -щек тоже сюда входит.

[он] [на] [ну] [он] [ном] [не] сон. Изменяющийся корень.

[ец] [ьца] [ьцу] [ец] [ьцем] [ьце] палец. Изменяющийся корень.

[ей] [ья] [ью] [ья] [ьём] [ье] воробей. Изменяющийся корень.

[ь] [я] [ю] [я] [ём] [е] царь, конь. Да уж. Родственные слова, однозначно.

[] [а] [у] [а] [ем] [е] царевич, муж, принц. Мужской род. Одушевлённое. ц ч ж

[ец] [ца] [цу] [ца] [цом] [це] молодец, отец
[ец] [ца] [цу] [ца] [цем] [це] молодец
Тут отличный пример омонимов. Вероятно можно пока запихнуть в исключения.

[ь] [я] [ю] [я] [ем] [е] лебедь, гость. Мужской род, одушевлённое.
[ь] [и] [и] [ь] [ём] [и] путь. Мужской род, неодушевлённое.
Да, видимо мягкий знак на конце мужского рода встречается не часто.

[й] [я] [ю] [й] [ем] [е] апогей, рай, покой. Мужской род, неодушевлённое.

[] [а] [у] [] [ем] [е] экипаж. Иностранное слово, на сколько я понимаю.

[ел] [ла] [лу] [ел] [лом] [ле] узел, замысел
[ёл] [ла] [лу] [ла] [лом] [ле] орёл
Мужской род, На сколько я понимаю. Буква ё тут выступает наравне с е.

[ь] [ери] [ери] [ь] [ерью] [ери] дочь, мать. Устаревшие слова. Изменение формы. В исключения однозначно.

[я] [и] [е] [ю] [ей] [е] деревня, простыня. Женский род -ня. Анимешники ликуйте.

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