vadim_kataev (vadim_kataev) wrote,
vadim_kataev
vadim_kataev

Categories:

Жизнь в Linux. От скрипта до агента.

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


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

cd ~; mkdir scripts; cd scripts
echo "find / -name \"*.\$1\" > \$1" > find_types.sh
chmod u+x find_types.sh


Теперь если мы будем вызывать наш скрипт с параметром, показывающим определённое расширение, он будет находить и составлять список всех файлов такого типа, например, составим списки всех mp3 и avi файлов системы:

./find_types mp3
./find_types avi


После этого мы имеем два списка файлов, один для mp3, другой для avi. Теперь посмотрим, что полезного могут дать нам списки файлов.


MUSIC
А, например, как мы слушаем музыку ?
Используя наш список mp3 мы можем легко организовать плейлист. Что нам надо? Правильно, ещё один скрипт, назовём его play-mp3:

echo "cat mp3 | grep -i \"\$1\" | mpg123 --shuffle -@ -" > play_mp3.sh
chmod u+x play_mp3.sh


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

./play_mp3.sh enja

будет проигрывать все файлы в пути или имени которых есть слово enja или похожее на него:
/mnt/pub/jet/old_disk_D_copy/musik/4soul/enya - May it be.mp3
/mnt/pub/jet/old_disk_D_copy/musik/4soul/Enya - Now We Are Free (Gladiator Theme).mp

Если хотите, что бы скрипт играл всё, то укажите *, если у вас mp3 файлы отсортированы по стилям то укажите название стиля и т.д. и т.п. Выбор может ограничиться только вашей фантазией.
Такой скрипт удобен ещё и потому, что легко подключается к программе распознования голоса или к демону пульта дистанционного управления или ещё к чему нить. Для проигрывания следующего файла используется сигнал Ctrl+C, для выхода быстро два раза Ctr+C.


VIDEO
Напишем по аналогии с mp3 следующий скрипт:

echo "cat avi | grep -i \"\$1\" | mplayer -fs -playlist -" > play_avi.sh
chmod u+x play_avi.sh


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

./play_avi ai_lecture

Точно так же, такой скрипт легко подключить к системе распознавания голоса или к интеллектуальному агенту, которому вы можете просто сказать какое у вас настроение и агент поставит вам например хард-рок видеоклипы :)


INTERNET
По этой части отдыхают все, кроме нас с вами, линуксоидов:)
Типичная ситуация, когда на сайте множество ссылок и хочется скачать всё, но в долго тыкать по каждой ссылке. Кто то использует FlashGet и ему подобные менеджеры в винде, ну а мы используем для этого нашу скриптовую силу:

cat > down.sh
i=2
iend=100
while [ "$i" -lt "$iend" ]
do
wget -c "http://www.gorodok.ru/video/small/$i.mpg"
i=$(expr $i + 1 )
echo $i
done

Ctrl+C

Данный скрипт может качать не только файлы-видео программы Городок. Если вы присмотритесь внимательно, то на типичной веб-странице если есть много линков, то части их имён обычно отличаются упорядоченными номерами - просто меняйте в скрипте адрес и номера начала и конца.
Например, если вы любите новости недели, то можете поставить такие параметры:

i=3539
iend=3559
wget "http://video1.rfn.ru/vesti7/$i.asf"

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

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


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

В системе крутятся несколько демонов:
1.Демон- Распознователь голоса генерирует список распознанных фраз
2.Демон- Управление реакциями на определённые фразы из списка
3.Множество скриптов - реакций агента
4.Генератор голоса агента

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

"покажи что ты видишь")
if [ "$state" = "ready" ]; then
say "Пожалуйста {Pause:300}"
cd $SPEECHSCRIPTS/vision
./detector /dev/video1 &
cd -
fi
state="void"
;;

"сколько времени?")
if [ "$state" = "ready" ]; then
$SPEECHSCRIPTS/say-time.sh
fi
state="void"
;;


Вот примерная схема работы всей системы в целом:
вот тут
и вот тут

Агент получает внимание следующим образом:

"Джек")
state="atention"
;;

"ты тут?")# |"слушай"|"мне нужна твоя помощь")
if [ "$state" = "atention" ]; then
[...]
state="ready"
fi
;;


т.е. сначала я произношу имя агента, а потом просьбу помочь и только потом я прошу его конкретно о том что мне нужно. Такая система привлечения внимания позволяет добиться того, что я могу с кем нибудь разговаривать и быть уверенным что агент не среагирует неправильно. Он реагирует только на обращение к себе и процент правильного узнавания фразы колеблется между 70-80%. С помощью хитрых средств (например, переспрашивание вопросами на которые я могу только ответить да/нет) удаётся добиться весьма высокого качества общения.

Что может такой агент ?
Конечно же, он может не только показывать картинку с вебкамеры (впрочем ещё и с детектором движения - и надеюсь скоро агент сможет распозновать хозяина по-лицу) или время или прогноз погоды или актуальные новости или цены на интересующие хозяина товары. Агент может ооооочень многое - по сути, потенциально, агент может всё, что есть в интернет либо на локальном носителе. Агент очень простой, это скорее простой рефлекторный агент, но он потенциально может перерабатывать всё что есть в интернете а это значит, что ему не обязательно уметь например видеть, что бы писать на форумах или торговать на eBay.

Всё что могут скрипты, может и агент. Кстати, характер агента вы можете так же сформировать по желанию или в зависимости например от актуальной погоды, получаемой с каких нибудь веб-сервисов. Например, агент может прочитать анекдот, полученный с os3e или включить грустную музыку если новости грустные на cnn или стереть самого себя :)

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

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

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


http://www.compuvisor.net
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 19 comments