Функциональные сети на основе библиотеки SynapseGridАрсений ЖижелевБиблиотека Scala FRP, позволяющая конструировать системы потоковой обработки сигналов. Библиотека имеет хороший фундамент в виде теории сетей Петри. Применялась как основа системы обработки речи в режиме реального времени, в качестве интеграционной платформы распределённой ETL-системы.
Доклад представлялся на конференции fpconf.ru (15.08.2015)
Функциональные сети на основе библиотеки SynapseGridАрсений ЖижелевБиблиотека Scala FRP, позволяющая конструировать системы потоковой обработки сигналов. Библиотека имеет хороший фундамент в виде теории сетей Петри. Применялась как основа системы обработки речи в режиме реального времени, в качестве интеграционной платформы распределённой ETL-системы.
Доклад представлялся на конференции fpconf.ru (15.08.2015)
3. Текстовый принцип
Текстовый принцип работы с машиной позволяет отвлечься
от конкретных частей компьютера, вроде системной
клавиатуры и видеокарты с монитором, рассматривая
единое оконечное устройство, посредством которого
пользователь вводит текст и передает его системе, а
система выводит необходимые пользователю данные и
сообщения. Такое устройство называется терминалом . В
общем случае терминал - это точка входа пользователя в
систему, обладающая способностью передавать текстовую
информацию. Терминалом может быть отдельное внешнее
устройство, подключаемое к компьютеру через порт
последовательной передачи данных (в персональном
компьютере он называется "COM port"). В роли терминала
может работать (с некоторой поддержкой со стороны
системы) и программа (например, xterm или ssh ).
Наконец, виртуальные консоли Linux - тоже терминалы,
только организованные программно с помощью
подходящих устройств современного компьютера.
4. Терминал
Терминал - устройство
последовательного ввода и
вывода символьной информации,
способное воспринимать часть
символов как управляющие для
редактирования ввода, сигналов и
т. п. Используется для
взаимодействия пользователя и
системы
5. Терминал
Свойство терминала передавать только
символьную информацию приводит к тому, что
некоторые из передаваемых символов должны
восприниматься не как текстовые, а как
управляющие (например, символы, возвращаемые
клавишами Backspace и Enter ). На самом деле
управляющих символов больше: часть из них
предназначена для экстренной передачи команд
системе, часть - для редактирования вводимого
текста. Многие из этих символов не имеют
специальной клавиши на клавиатуре, поэтому
их необходимо извлекать с помощью
клавиатурного модификатора Ctrl .
6. Команда CAT
Для завершения работы программы cat,
которая построчно считывает данные с
клавиатуры и выводит их на терминал,
можно воспользоваться командой " ^C "
или " ^D ":
[methody@localhost methody]$ cat Any
Text Any Text^C [methody@localhost
methody]$ cat Any Text agaim^[[Dn Any
Text again^D[methody@localhost
methody]$
8. Терминал должен уметь
передавать текстовые данные от
пользователя системе;
передавать от пользователя системе
немногочисленные управляющие
команды;
передавать текстовые данные от системы
пользователю;
(необязательно) интерпретировать
некоторые данные, передаваемые от
системы пользователю, как управляющие
последовательности и соответственно
обрабатывать их
9. Командная строка
Основная среда взаимодействия с
Linux - командная строка. Суть ее
в том, что каждая строка,
передаваемая пользователем
системе, - это команда, которую
та должна выполнить. Пока не
нажата кнопка Enter, строку
можно редактировать, затем она
отсылается системе:
11. Параметры команд
В большинстве случаев при
разборе командной строки первое
слово считается именем команды,
а остальные - ее параметрами
[methody@localhost methody]$ cal 3 2005
Марта 2005Вс Пн Вт Ср Чт
Пт Сб 1 2 3 4 5
6 7 8 9 10 11 1213
14 15 16 17 18 1920 21
22 23 24 25 2627 28 29
30 31
12. Подсистема помощи
Пока же Мефодий решил, что
узнал о командной строке
достаточно для того, чтобы
воспользоваться главными
командами Linux (по частоте их
употребления при изучении
системы) - man и info
13. Подсистема помощи
Работать с Linux, не заглядывая в
документацию, практически
невозможно. На это способны
только седые аксакалы, у которых
все нужные знания не то что в
голове - в кончиках пальцев, и
новички. Всем прочим
настоятельно рекомендуем,
приступая к работе, а тем более - к
изучению Linux, пользоваться
всеми доступными руководствами.
14. Страницы руководства (man)
Больше всего полезной
информации содержится в
страницах руководства
(manpages), для краткости мы
будем называть их просто "
руководство ". Каждая страница
посвящена какому-нибудь одному
объекту системы. Для того чтобы
посмотреть страницу руководства,
нужно дать команду системе man
объект:
15. Страницы руководства (man)
[methody@localhost methody]$ man cal
CAL(1) BSD General Commands
Manual CAL(1) NAME cal - displays
a calendar SYNOPSIS cal [-smjy13]
[[month] year] DESCRIPTION Cal
displays a simple calendar. If arguments
are not specified, the current month is
displayed. The options are as follows:.
. .
16. Страницы руководства (man)
Страница руководства занимает, как правило,
больше одной страницы экрана. Для того чтобы
читать было удобнее, man запускает программу
постраничного просмотра текстов - less.
Управлять программой less просто: страницы
перелистываются пробелом, а когда читать
надоест, надо нажать " q " (Quit). Перелистывать
страницы можно и клавишами Page Up/Page
Down, для сдвига на одну строку вперед можно
применять Enter или стрелку вниз, а на одну
строку назад - стрелку вверх. Переход на начало
и конец текста выполняется по командам " g " и "
G " соответственно (Go). Полный список того, что
можно делать с текстом в less, выводится по
команде " H " (Help).
17. RTFM
Оказывается, использование кавычек Мефодий
придумал не сам: спросил у товарища, опытного
пользователя Linux по фамилии Гуревич. Гуревич
охотно показал, где ставить кавычки, а вот объяснять,
что они делают, отказался: "Там отличное руководство!
Читай!" Документация в Linux играет важнейшую роль.
Решение любой задачи должно начинаться с изучения
руководств. Не стоит жалеть на это времени. Даже если
рядом есть опытный пользователь Linux, который,
возможно, знает ответ, не стоит беспокоить его сразу
же. Возможно, даже зная, что нужно сделать, он не
помнит как именно - и поэтому (а также потому, что он
- опытный пользователь) начнет с изучения
руководства. Это - закон, у которого даже собственное
название: RTFM, что означает "Read The Fine Manual".
18. RTFM
Руководство - это не учебник, а скорее
справочник. В нем содержится
информация, достаточная для освоения
описываемого объекта, но никаких
обучающих приемов, никаких
определений, повторений и выделения
главного в нем обычно нет. Тем более не
допускается усечение руководства с
целью представить небольшие по объему,
но наиболее важные сведения. Так
принято в учебниках, причем сведения
раскрываются и объясняются очень
подробно, а остальные присутствуют в
19. Ключи
Некоторые параметры имеют собственный
смысл: это имена файлов, названия разделов и
объектов в man и info, числа и т. п. Другие
параметры собственного смысла не имеют, их
значение можно истолковать, лишь зная, к какой
команде они относятся. Например, параметр " -a "
можно передать не только команде man, но и
команде who, и команде last, при этом значить
для них он будет разное. Такого рода параметры
называются модификаторами выполнения или
ключами (options):
[methody@localhost methody]$ dateВск Сен 19
23:01:17 MSD 2004[methody@localhost methody]$
date -uВск Сен 19 19:01:19 UTC 2004
20. Однобуквенные ключи
Для формата ключей нет жесткого стандарта,
однако существуют договоренности, нарушать
которые в наше время уже неприлично. Во-
первых, если параметр начинается на " - ", это -
однобуквенный ключ . За " - ", как правило,
следует один символ, чаще всего - буква,
обозначающая действие или свойство, которое
этот ключ придает команде. Так проще отличать
ключи от других параметров - и пользователю
при наборе командной строки, и программисту,
автору команды:
[methody@localhost methody]$ who -m methody
tty1 Sep 20 13:56 (localhost)
[methody@localhost methody]$ cal -m
21. полнословный формат
ключ начинается на два знака " -
", за которыми следует полное
имя обозначаемой им сущности.
Таков, например, ключ " --help "
(аналог " -h "):
[methody@localhost methody]$
head --help
22. Интерпретатор командной
строки (shell)
В Linux нет отдельного объекта под именем "система".
Система - она на то и система, чтобы состоять из
многочисленных компонентов, взаимодействующих
друг с другом. Главный из системных компонентов -
пользователь. Это он командует машиной, а та его
команды выполняет. В руководствах второго и третьего
разделов описаны системные вызовы (функции ядра )
и библиотечные функции. Они-то и есть
непосредственные команды системе. Правда,
воспользоваться ими можно только написав программу
(чаще всего - на языке Си), нередко - довольно
сложную. Дело в том, что функции ядра реализуют
низкоуровневые операции, и для решения даже самой
простой задачи пользователя необходимо выполнить
несколько таких операций, преобразуя результат
работы одной для нужд другой
23. Интерпретатор командной
строки (shell)
Возникает необходимость выдумать для пользователя другой -
более высокоуровневый и более удобный- язык управления
системой. Все команды, которые использовал Мефодий в
работе, были частью именно этого языка.
Из этого несложно заключить, что обрабатывать эти
команды, превращать их в последовательность системных и
библиотечных вызовов должна тоже какая-нибудь
специальная программа, и именно с ней непрерывно ведет
диалог пользователь сразу после входа в систему. Так оно и
оказалось - программа эта называется интерпретатор
командной строки или командная оболочка ("shell").
"Оболочкой" она названа как раз потому, что все управление
системой идет как бы "изнутри" нее: пользователь общается с
нею на удобном ему языке (с помощью текстовой командной
строки ), а она общается с другими частями системы на
удобном им языке (вызывая запрограммированные функции).
24. Интерпретатор командной
строки (shell)
командных интерпретаторов в Linux несколько.
Самый простой из них, появившийся в ранних
версиях UNIX, назывался sh, или "Bourne Shell" -
по имени автора, Стивена Борна (Stephen
Bourne). Со временем его везде, где только
можно, заменили на более мощный, bash, "Bourne
Again Shell" 6. bash превосходит sh во всем,
особенно в возможностях редактирования
командной строки. Помимо sh и bash в системе
может быть установлен "The Z Shell", zsh, самый
мощный на сегодня командный интерпретатор
(шутка ли, 22 тысячи строк документации!), или
tcsh, обновленная и тоже очень мощная версия
старой оболочки "C Shell", синтаксис команд
которой похож на язык программирования Си
25. Слова и разделители
Разделитель - это символ, разделяющий
слова; таким образом, командная строка
- это последовательность слов (которые
имеют значение) и разделителей
(которые значения не имеют). Для shell
разделителями являются символ пробела,
символ табуляции и символ перевода
строки (который все-таки может попасть
между словами способом, описанным в
лекциях 6 и 7). Количество разделителей
между двумя соседними словами
значения не имеет.
26. Пример
methody@localhost methody]$ echo One
Two Three One Two Three
[methody@localhost methody]$ echo One
"Two Three" One Two Three
[methody@localhost methody]$ echo
'One> > Ой. И что дальше?> А, кавычки
забыл!' One Ой. И что дальше? А,
кавычки забыл!
[methody@localhost methody]$
27. Пример
В первом случае команде echo было передано три
параметра - " One ", " Two " и " Three ". Она их и
вывела, разделяя пробелом. Во втором случае
параметров было два: " One " и " Two Three ". В
результате эти два параметра были также
выведены через пробел. В третьем случае
параметр был всего один - от открывающего
апострофа " 'One '" до закрывающего ...забыл!' ".
Все время ввода bash услужливо выдавал
Мефодию подсказку " > " - в знак того, что набор
командной строки продолжается, но в режиме
ввода содержимого кавычек