Cellar Door

31 августа 2005

FreeBSD Mailing Lists

Добрый час подписывался на списки рассылок FreeBSD. Таковых заинтересовало ровно четверть сотни :) Вот на всякий случай перечень:
  1. cvs-doc
  2. cvs-projects
  3. cvs-src
  4. freebsd-announce
  5. freebsd-arch
  6. freebsd-audit
  7. freebsd-cluster
  8. freebsd-current
  9. freebsd-doc
  10. freebsd-emulation
  11. freebsd-fs
  12. freebsd-gnome
  13. freebsd-hackers
  14. freebsd-libh
  15. freebsd-net
  16. freebsd-performance
  17. freebsd-pf
  18. freebsd-platforms
  19. freebsd-ports
  20. freebsd-ports-bugs
  21. freebsd-qa
  22. freebsd-realtime
  23. freebsd-security
  24. freebsd-security-notifications
  25. freebsd-stable
Эх, как же я люблю сообщество и инфраструктуру, организованные вокруг BSD UNIX :)

30 августа 2005

Альтернативные Window Managers: wmi, wmii

На этот раз у нас целых два поколения программ, а значит и два этапа развития представлений разработчиков о идеальном WM. Безусловно наибольшее внимание хочется уделить второму поколению - wmii, - но и wmi заслуживает как минимум упоминания. Благодаря подкупающе простой и элегантной реализации подхода, в котором сочетаются традиционный и "фреймовый" подход к организации рабочего пространства. Есть и еще одна характерная для обоих wmi и wmii особенность - традиционное меню заменяет удобная строка, вмещающая все обнаруженные в PATH команды, и поддерживающая автодополнение (к сожалению, имена файлов-параметров в автодополнении не участвуют). Второй такой же модуль открывает доступ ко всем внутренним командам wmi. Есть один нюанс: при установке wmi из портов FreeBSD каталог styles рискует остаться незамеченным. Формат каждого файла настройки описан в отдельных man-страницах. Наличествует и графический конфигуратор wmizer, написанный с использованием py-gtk2...

Так уж сложилось, что разработчики, проникшись концепциями Plan 9, Oberon и Larswm, веско заявили, что будущее за реализацией динамического управления окнами, и следующее поколение их детища предстало в совершенно новом виде. Попутно переписанное с С++ на С и уменьшенное в размере со 190 до 66KB. А главным новшеством стала реализация весьма любопытного метода IPC-взаимодействия - библиотека Libixp, построенная на основе UNIX-сокетов и предстающая нашему взору в виде оригинальной виртуальной ФС. Нетрудно догадаться, что спроектирована она по образу и подобию протокола 9P из Plan 9, получившего развитие в виде 9P2000 в четвертом издании данной ОС, Styx из Inferno OS и нескольких opensource-реализаций - v9fs, Portable 9P client and server на Python и Portable 9P/Styx client and server на Java. Подобная реализация IPC делает wmii открытой для взаимодействия с любыми - не только скриптовыми - языками программирования и позволяет модифицировать каждый аспект интерфейса и поведения wmii в реальном времени.

Влияние Plan 9 проявляется и в реализации механизма - тоже в некотором роде IPC - Plumbing. Его суть, значительно упрощая, состоит в том, что текст в буфере обмена анализируется на предмет соответствия регулярным выражением для определения того, какой программе его следует передать. В Plan 9 это одна из центральных идиом пользовательського интерфейса, правда там действия механизма программно-зависимы и сочетаются с чем-то вроде mouse gestures. Реализацию, содержащуюся в самом wmii, вряд ли можно назвать полноценной, но в разделе Tools сайта есть и гораздо более функциональный Ruby-вариант, а принципы описаны здесь.

Каталог contribs архива с исходным текстом wmii содержит несколько приложений на Python, в числе которых графический (py-gtk2) браузер пространства имен IXP и средство для монтирования дерева каталогов IXP в заданную точку файловой системы. В наличии и реализации самой Libixp на Python...
Порт последней версии wmii-2 на данный момент доступен только в базе GNATS.
Не вдаваясь в дальнейшие подробности - например описания всех 4 способов организации рабочего пространства, - замечу, что данная разработка, несмотря на некоторые недочеты, на мой взляд, представляет наиболее интересную концепцию организации рабочего пространства... Да и IPC-методику решительно стоит взять на заметку.

URL: http://wmi.modprobe.de/index.php/WMI/Home
Manual: http://www.inf.tu-dresden.de/.../beginnersguide.html

Альтернативные Window Managers. Ion

Разработчики таких программ веско заявляют, что современные GUI более чем неудобны. Следовательно, у нас есть возможность оценить их взляд на проблему организации рабочего пространства, воплощенный в таких экспериментальных продуктах, как larswm, ion, ratpoison, orion, wmi и wmii.

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

Нельзя не заметить, что ветка ion-3ds развивается весьма динамично, - обновления исправно выходят каждый месяц, а все изменения подробно описаны... В портах FreeBSD последней на данный момент версией является ion-3ds-20050728, но обновление ion-3ds-20050820 не составит труда отыскать в базе данных GNATS.

Сильнейшей стороной Ion является применение языка Lua для описания всех настроек, тем и расширений. На сайте доступно великолепное 89-страничное руководство Configuring and extending Ion3 with Lua, документирующее все аспекты применения Lua для настройки и расширения Ion. Любопытно, что больше половины объема документа занимает описание собственного API. Нужно ли говорить, что, будучи подобным образом документированным, встроенный движок Lua-скриптинга открывает практически неограниченные возможности. На сайте проекта есть определенное количество готовых Lua-расширений, в частности расширения для не в меру функционального ion-statusbar.

Превосходная командная строка с автодополнением имен программ и путей делает традиционное меню вовсе ненужным, есть аналогичный модуль для быстрого запуска Lua-кода, да и полезно расширение Execute and display. Применение данного действительно удобного WM может быть омрачено лишь проблемами при запуске приложений, не удовлетворяющих стандарту ICCCM, или же сложностями с организацией работочего простанства для приложений из разряда, к примеру, Instant Messaging. Впрочем, есть возможность создать отдельный рабочий стол с более традиционным путем управления окнами.

URL: http://iki.fi/tuomov/ion/

28 августа 2005

BSD Unix: Power to the people, from the code

Три месяца лежала в ScrapBook'e одна статья - до тех пор пока, наконец, не нашел время прочитать... Оказалось - весьма емко и интересно. Более чем стоит требуемого для чтения времени.
BSD Unix: Power to the people, from the code, by Andrew Leonard :: Page 1

23 августа 2005

Graphviz - Graph Visualization Software

Теория графов предоставляет формальный способ представления знаний, - записи множества элементов и связей между ними. GraphViz представляет собой набор инструментальных средств, нацеленных на прикладную область под названием graphdrawing - рисования графов. Данный набор инстументальных средств вышел из стен AT&T и Bell Labs.

Фактически сердцем системы является программа dot, реализующая собственный проблемно-ориенированный язык dgl (dot graph language) - в равной мере простой и выразительный. Мощные способности dot позволяют управлять представлением всех элементов результирующего графа.
Полное описание атрибутов dot занимает скромных 36КВ. К чести Bell Labs, graphviz оснащена и настолько качественными руководствами, что документированность системы может служить объектом для подражания...
Всего в инструментальный набор вошли 24 команды, среди которых, кроме средств создания направленных и ненаправленных графов, наборы фильтров, преобразователей графов, препроцессоров, просмотрщик и редактор для системы X Windows.
Спектр поддерживаемых графических форматов выходного файла весьма широк и покрывает, вероятно, все возможные требования.

GraphViz является крайне полезным средством из области "графического представления знаний".
Разработчикам ПО он способен помочь просто и элегантно решить проблему высокоуровневого документирования, облегчить создание предпроектной документации. Широта применения graphviz ограничена главным образом фантазией разработчика: так, встраивание в программные системы кода, генерирующего dgl-описания, открывает неожиданные перспективы отладки, профилирования или изучения самой программной системы, представляя наглядное изображение компонентов и происходящих процессов. Широки перспективы применения данного средства и в инженерном деле, и даже в работе системного администратора... Тем временем, большинство упомянутых областей применения остаюся потенциальными. Особенно удивляет отсутствие особого интереса со стороны разработчиков ПО, тогда как в качестве средства создания документации graphviz получил определенное признание - так, среди исходных текстов, созданных в рамках проекта документации FreeBSD, присутствует некоторое количество dgl-описаний...

URL: http://www.graphviz.org/. Список ресурсов, посвященных Graph Drawing можно найти на странице проекта open directory: dmoz.org/Science/Math/Combinatorics/Software/Graph_Drawing/.

20 августа 2005

Небезполезная экзотика

Так выглядит функция быстрой сортировки на языке J:
qsort =: ]`(($:@:((}.<:{.)#}.)),{.,($:@:((}.>{.)#}.)))@.(*@#)
Лаконично, не так ли? А предшественник этого языка - APL - знаменит тем, что его символьный набор выходил за рамки привычного ASCII, заставляя применять специальные клавиатуры вроде следующего:


Причем Array Processing Language - крайне мощный язык, получивший некоторую популярность в научных и финансовых применениях. Любопытная цитата Edsger Dijkstra:
"APL is a mistake, carried through to perfection. It is the language of the future for the programming techniques of the past: it creates a new generation of coding bums."

19 августа 2005

FreeTechBooks.com

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

Packit

Средство аудита сети, предназначенное для инжекции пакетов и мониторинга трафика. Позволяет определить практически все заголовки пакетов протоколов TCP, UDP, ICMP, IP, ARP, RARP и Ethernet, объединять различные опции с помощью логических операторов.
Кажется, весьма полезный инструмент для разнообразных задач аудита: тестирования пакетных фильтров, IDS-систем, симулирования сетевого трафика и, в конце концов, - для изучения сетевых протоколов...
URL: http://packit.sf.net
Доступно для Free/Net/OpenBSD, MacOS X и Linux...

17 августа 2005

Снова о FORTH

По адресу http://forthfreak.net/jsforth.html есть онлайн-интерпретатор Форта, дающий возможность ознакомится с языком посредством JavaScript без установки транслятора.
То, что на Форте написан начальный загрузчик (loader) системы FreeBSD, - довольно известный факт, но мне показалась интересной та деталь, что он основан на FICL. В целом, загрузчик имеет весьма широкие командные возможности; на страницах руководства описан командный язык и расширения, привнесенные проектом FreeBSD.
Раз уж упомянул об этом, нельзя оставить без внимания и написанную на Форте систему Open Firmware, которая с успехом заменяет SPARC'ам и Mac'ам традиционный для нас BIOS.
Еще пара полезных ссылок: список проектов NASA, использующих Форт, книга "The Evolution of FORTH" (сайт компании FORTH, Inc располагает и другой документацией...) и не менее любопытная книга Ф. Купмана "Stack Computers: the new wave". К тому же ссылка Random на панели навигации Forth Programming Webring может привести к интересным тематическим ресурсам...

Разное...

Наконец-то нормально организовал секцию ссылок.

Пришло время отправиться читать эту книгу:
С.В. Зубков "Ассемблер для DOS, Windows и UNIX"


Интересно: оказалось, что это единственная изданная в Украине, да и России тоже, книга, где хоть немного внимания уделено языку ассемблера для UNIX. Да и в мировом масштабе ситуация, по-моему, не намного лучше. Нашел электронное издание знаменитой книги Randall Hyde "The Art of Assembly Language"; свободно доступны ее версии, ориентированные на Linux, Windows и DOS, а также статьи-сравнения ассемблеров; есть документация и другие ресурсы, касающиеся HLA (High Level Assembly). Сайт обнаружен благодаря FreeTechBooks.com Последний также возьму на себя смелость порекомендовать.

16 августа 2005

FORTH

Forth Programming Webring

FORTH, детище гениального инженера Чарльза Мура, создано им для управления телескопами в Национальной радиоастрономической обсерватории в конце 60х. Это черезчур ёмкое слово, чтобы дать его полное определение, но попытаться следует. Форт - это:
  • язык высокого уровня
  • язык ассемблера
  • язык проектирования
  • операционная система
  • набор инструментальных средств
  • философия решения задач
Прежде всего языковая составляющая вселенной Форт - это "метаязык" для создания собственных проблемно-ориентированных языков... Суть этого процесса состоит в реализации необходимого для решения задачи инструментального набора, словаря. Форт, будучи использован правильно, приближается к уровню функционального языка. Ключевым отличием от традиционных языков является то, что: "Язык Форт предлагает вместо фиксированного набора порождающих понятий единый механизм порождения таких порожающих понятий." [Баранов, Ноздрунов "Язык Форт и его реализации"]

Язык предоставляет максимальный доступ ко всем средствам его реализации и потоку исполнения "шитого" кода. Неделимые в остальных языках операции, например конструкция процедурного вызова, здесь разложены на элементарные составляющие, доступные программисту без какого-либо контроля (так, для упомянутой конструкции процедурного вызова доступно управление точкой возврата). Доступна и внутренняя структура каждого слова, семантика слов-определений как времени исполнения, так и времени компиляции. Сама форт-система постепенно расширяется по мере разработки... Здесь нет нерушимых правил. Сохраняется соответствие между исходным текстом и результирующим машинным кодом. Во главу поставлена простота, свобода и расширяемость. Отстутствие какого-либо контроля является еще одной характерной чертой языка Форт. Следствием такой неограниченной свободы видится то, что программирование на Форте представляется в гораздо большей степени искусством, чем на любом другом языке...

Средства, которые предоставляет язык Форт, позволяют реализовать практические любые недостающие расширения языка (например локальные переменные, многопоточность или реализация Модула-подобных модулей размером в 3 строки текста...) и перекроить по своему опыту и разумению все существующие средства... В случае четкого понимания поставленой задачи, простота и элегантность профессиональной реализации ни с чем не сравнимы. Результирующий код становится концентрированной смесью концепций, чистейшим выражением абстрактного замысла.

Несмотря на то, что Форт интерпретируемый язык, он исполняет скомпилированный код. В целом Форт превышает все другие высокоуровневые языки по скорости работы, а по компактности - и ассемблерный код. Критичные к скорости исполнения участки кода на любом этапе разработки могут быть переписаны на встроенном ассемблере.
В полной инструментальной среде многозадачная Форт-система с интерпретатором, компилятором, ассемблером, редактором, операционной системой и другими утилитами поддержки занимает около 16 КБайт, при этом вполне заурядный размер для ядра системы со словарем - около 4К, а для встроенного ассемблера - 1К.
О еще одном важном свойстве - переносимости - форт-кода свидетельствует наличие многих микроконтроллеров и DSP-процессоров, основанных на Форте...

Форт имеет достаточно широкое применение в научных и промышленных целях, а также встраиваемых системах, с начала 70-х. Хотя его можно считать языком будущего, популярность Форта стабильна в течение продолжительного периода времени и, увы, вряд ли можно ожидать её скачкообразного роста.

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

Осталось ответить на еще несколько вопросов...

Трансляторы Форта
Для системы FreeBSD и остальных opensource-систем семейства UNIX доступны реализации Gforth проекта GNU, PFE http://pfe.sourceforge.net/ (Portable Forth Environment), а также интерпретируемый язык FICL http://ficl.sourceforge.net/ (Forth Inspired Command Language). Последний дополняет стандартный Forth объектно-ориентированными свойствами и идеально подходит для интеграции с другими приложениями и "встраиваемых" применений.

Литература
Её немного, но качество и ценность имеющихся изданий поразительны. Книга "Starting FORTH" Leo Brodie послужит более чем удачным вводным курсом. "Язык ФОРТ и его реализации" С.Н. Баранова, Н.Р. Ноздрунова также заслуживает наивысших оценок. А "Thinking FORTH" Leo Brodie, освещающий вопросы техники и стиля в цикле разработки программного обеспечения, представляет исключительную ценность для программистов на любых языках и может занять достойное место рядом с "Искусством программирования" Дональда Кнута, "Мифическим человеко-месяцем" Фредерика Брукса или "Совершенным кодом" Стива Макконнелла...

Все перечисленные книги можно найти на сайтах forth.org и forth.org.ru. Второе издание Thinking FORTH легально доступно на SourceForge, в т.ч. в виде исходных текстов системы LaTeX. Также стоит посетить Forth Programming Webring, страницу проекта Open Directory и домашнюю страницу Чарльза Мура.
О самом изобретателе лучше всего говорит цитата из статьи Дж. Фокса "Тощий компьютинг": "...Это самый продуктивный программист, которого я когда-либо видел. За последние 15 лет он написал 15 KB кода: несколько десятков популярных ОС, систему проектирования СБИС, с помощью которой создал работающие микропроцессоры, и десяток масштабных систем управления, функционирующих по сей день...".

Одним словом, перед нами еще одна крошечная бездна, нечто крайне отличное, как по своей структуре, так и по философии, от всего, с чем приходилось иметь дело до сих пор, средство открывающее совершенно иные пути решения "вечных" проблем.
В заключение еще одна цитата: "Форт подобен Дао: это Путь, и осознается он, когда ему следуешь. Хрупкость его есть его сила; его простота есть его направление." (Майкл Хэм, победитель конкурса Mountain View Press на описание Форта в двадцать пять слов или меньше.)

05 августа 2005

ELF shell

...или elfsh - интерактивная скриптинговая среда для изучения и модификации исполняемых файлов и разделяемых библиотек формата ELF. Поле её применения охватывает модификацию, внедрение стороннего кода, исследование бинарников в таких областях, как reverse ingeneering (не могу найти адекватный перевод данного термина...), аудит безопасности и обраружение вторжений. Работает на архитектурах x86, SPARC32, SPARC64, MIPS32, ALPHA64 и ОС Linux, Solaris и семейства BSD.
В готовящейся к выходу версии 0.65 множество нововведений, в т.ч. модуль, добавляющий возможность генерации графов в формате системы graphviz, о которой напишу отдельно.

Официальный сайт проекта ELF shell, его зеркало.
Спецификация формата ELF лежит здесь, а описание SPARC ABI (вдруг кому-то надо?) здесь.

Разработчики elfsh проделали большую работу по разработке на его базе встраиваемого отладчика, не использующего системный вызов ptrace, а значит - лишенного многих его недостатков и способного успешно работать в средах, не реализующих данный системный вызов. Также была проделана большая работа по его портированию на многие архитектуры (x86, alpha, sparc, mips) и решению вопросов работы в средах с технологией защиты PaX.
Одним словом, по-моему более чем перспективная разработка...

Великолепный источник дополнительной информации - журнал Phrack, точнее статьи Embedded_Elf_Debugging из выпуска #63 и The_Cerberus_ELF_interface из #61.