- PVSM.RU - https://www.pvsm.ru -
Неделю назад Дуглас Макилрой (Douglas McIlroy), разработчик конвейера UNIX и автор понятия «компонентно-ориентированное программирование», рассказал [1] об интересных и необычных UNIX-программах, не нашедших широкого применения. Публикация запустила активное обсуждение на Hacker News. Мы собрали самое интересное и будем рады, если вы присоединитесь к дискуссии.
[2]
Фото — Virginia Johnson [3] — Unsplash
В UNIX-подобных операционных системах есть стандартный набор инструментов для форматирования текста. Утилита typo позволяла просматривать документ на наличие опечаток и гапаксов [4] — слов, встречающихся в материале только один раз. Что интересно, для поиска опечаток программа не использует [5] словари. Она опирается только на информацию в файле и проводит частотный анализ по триграммам (последовательность из трех символов). При этом все необходимые счетчики хранятся [1] в массиве 26x26x26. По словам Дугласа Макилроя, такого объема памяти едва хватало для нескольких однобайтных счётчиков. Поэтому в целях экономии их писали в логарифмическом виде.
Сегодня typo заменили более современные и точные программы проверки правописания на основе словарей. Однако про инструмент все еще помнят — несколько лет назад энтузиаст представил [6] реализацию typo на Go. Репозиторий обновляется до сих пор.
Еще один инструмент для работы с документами из 80-х — пакет Writer's Workbench от Лоринды Черри (Lorinda Cherry) и Нины Макдональд (Nina McDonald) из Bell Labs. В его состав входили [7] инструменты для определения частей речи и стиля документа, поиска тавтологий и излишне сложных предложений. Утилиты разрабатывали в качестве подспорья для студентов, и одно время их использовали [8] учащиеся Государственного университета Колорадо в США. Но к началу девяностых о Writer's Workbench позабыли, потому что его не включили в Version 7 Unix. Однако этот инструмент продолжил дорогу подражателям — например, Grammatik [9] для IBM PC.
В UNIX также имеются стандартные средства, упрощающие работу с формулами. Есть препроцессор языка для оформления математических выражений eqn. Он примечателен тем, что для отображения формулы разработчику достаточно описать её простыми словами и символами. Ключевые слова позволяют смещать математические знаки по вертикали и горизонтали, менять их размеры и другие параметры. Если передать утилите строку:
sum from { k = 1 } to N { k sup 2 }
На выходе будет сгенерирована следующая формула:
В 1980–1990-х eqn помогал [10] ИТ-специалистам писать мануалы к программному обеспечению. Но позже его заменила система LaTeX, которую использует [11] даже Habr. Но eqn — это первый инструмент подобного класса, остающийся частью UNIX-подобных ОС.
В тематическом треде резиденты Hacker News отметили несколько редко используемых утилит для работы с файлами. Одной из них была [12] comm для их сравнения. Это — упрощенный аналог diff [13], заточенный под работу в скриптах. Его написал [14] сам Ричард Столлман (Richard Stallman) вместе с Дэвидом Маккензи (David MacKenzie).
Вывод программы состоит из трех столбцов. В первую колонку попадают значения, уникальные для первого файла, во второй — уникальные для второго файла. Третий столбец включает общие значения. Для корректной работы comm сравниваемые документы должны быть лексически отсортированы. Поэтому один из резидентов площадки предложил [15] работать с утилитой в следующем виде:
comm <(sort fileA.txt) <(sort fileB.txt)
Comm удобно использовать для проверки написания слов. Достаточно сравнивать их с эталонным документом-словарем. Учитывая тонкости, связанные с необходимостью сортировки файлов, есть мнение [16], что Столлман и Маккензи написали свою утилиту исключительно для этого юзкейса.
Фото — Marnix Hogendoorn [17] — Unsplash
Также участник обсуждения на HN отметил [18] возможности оператора paste, которые были для него неочевидны. Он позволяет чередовать потоки данных или разделить один поток на две колонки при выводе:
$ paste <( echo -e 'foonbar' ) <( echo -e 'baznqux' )
foo baz
bar qux
$ echo -e 'foonbarnbaznqux' | paste - -
foo bar
baz qux
Один из пользователей заметил [19], что часто для выполнения этих простых операций применяют не самые оптимальные решения: начиная с fmt [20], ex [21] и заканчивая mlr [22] с jot [23] и rs [24].
Какие стандартные возможности UNIX-подобных операционных систем стали открытием для вас?
О чем мы пишем в нашем корпоративном блоге:
Как развивалась система доменных имен: эра ARPANET [25]
История системы доменных имен: первые DNS-серверы [26]
История DNS: когда доменные имена стали платными [27]
История системы доменных имен: «войны» протоколов [28]
Автор: 1cloud
Источник [29]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/blog-kompanii-1cloud-ru/350575
Ссылки в тексте:
[1] рассказал: https://minnie.tuhs.org/pipermail/tuhs/2020-March/020664.html
[2] Image: https://habr.com/ru/company/1cloud/blog/493718/
[3] Virginia Johnson: https://unsplash.com/photos/QmNnZj_Ok-M
[4] гапаксов: https://ru.wikipedia.org/wiki/%D0%93%D0%B0%D0%BF%D0%B0%D0%BA%D1%81
[5] не использует: http://man.cat-v.org/unix-6th/1/typo
[6] представил: https://github.com/robpike/typo
[7] входили: https://en.wikipedia.org/wiki/Writer%27s_Workbench#Package_contents
[8] использовали: https://bit.ly/2U9mSjT
[9] Grammatik: https://en.wikipedia.org/wiki/Grammatik
[10] помогал: https://news.ycombinator.com/item?id=22582548
[11] использует: https://habr.com/ru/docs/help/posts/#allowed_tags_formulae
[12] была: https://news.ycombinator.com/item?id=22583046
[13] diff: https://ru.wikipedia.org/wiki/Diff
[14] написал: https://linux.die.net/man/1/comm
[15] предложил: https://news.ycombinator.com/item?id=22583686
[16] мнение: https://web.archive.org/web/20090402013730/http:/apicom.org.ua/blog/2009/02/16/komanda-comm/
[17] Marnix Hogendoorn: https://unsplash.com/photos/VB1XqDcp6sc
[18] отметил: https://news.ycombinator.com/item?id=22583803
[19] заметил: https://news.ycombinator.com/item?id=22585103
[20] fmt: https://ru.wikipedia.org/wiki/Fmt
[21] ex: https://ru.wikipedia.org/wiki/Ex_(Unix)
[22] mlr: https://github.com/johnkerl/miller
[23] jot: http://www.nsc.ru/cgi-bin/www/unix_help/unix-man?jot
[24] rs: https://www.freebsd.org/cgi/man.cgi?query=rs&sektion=1&apropos=0&manpath=freebsd
[25] Как развивалась система доменных имен: эра ARPANET: https://1cloud.ru/blog/era-arpanet?utm_source=habrahabr&utm_medium=cpm&utm_campaign=unixtools&utm_content=blog
[26] История системы доменных имен: первые DNS-серверы: https://1cloud.ru/blog/pervie-dns-serveri?utm_source=habrahabr&utm_medium=cpm&utm_campaign=unixtools&utm_content=blog
[27] История DNS: когда доменные имена стали платными: https://1cloud.ru/blog/platnie-dns-imena?utm_source=habrahabr&utm_medium=cpm&utm_campaign=unixtools&utm_content=blog
[28] История системы доменных имен: «войны» протоколов: https://1cloud.ru/blog/voini-protokolov-dns?utm_source=habrahabr&utm_medium=cpm&utm_campaign=unixtools&utm_content=blog
[29] Источник: https://habr.com/ru/post/493718/?utm_campaign=493718&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.