Свободный софт в научной области
Свободный софт в научной области
Автор: Шутов, Илья
Государство, разбуженное делом Поносова, заинтересовалось тем, какой софт используется в учебных и научных учреждениях, что немедленно привело к спуску вниз приказов и инструкций «удалить нелицензионное ПО со всех компьютеров». Автор статьи предлагает свой вариант решения проблемы, когда старых программ на компьютере уже нет, а денег на новые еще не дали. И неизвестно, дадут ли.
Компьютеры научных сотрудников в настоящий момент представляют собой софтверную пустыню с редкими оазисами. Официальная политика сформулирована достаточно просто – заменить коммерческие продукты их open source/freeware-аналогами. То есть Windows Linux, MS Office Open Office, Origin QtiPlot и т. д. При этом предлагается взять на вооружение ранее выстроенную парадигму использования софтверных продуктов. Возможно, это болезненный шаг, но, с другой стороны, именно сейчас предоставляется прекрасная возможность осмотреться и попробовать выстроить новую концепцию использования ПО с чистого листа. Тем более что за последние десять лет появилось множество замечательных открытых продуктов, практикующих иные подходы к работе с текстом и обработке данных и пр., а продукты, существовавшие ранее, но выглядевшие очень слабыми, получили сильное развитие. Оставив в стороне вопросы офисного ПО (почтовые клиенты, утилиты для записи дисков, редакторы графики), обратим внимание на программы, которы енужны для решения научных задач. Что можно включить в эту категорию?
Прежде всего систему для набора и верстки текста, содержащего огромное количество формул, иллюстраций, библиографических ссылок. Далее можно указать систему для создания презентационного материала, опять же содержащего формулы, специфические картинки (например, химические формулы или диаграммы Фейнмана) и библиографию.
Следующий блок – ПО для рисования графиков. И в качестве ежедневного инструмента – пакет, позво-ляющий проводить сложные математические расчеты, а для экспериментаторов еще и язык разработки/модификации софта по управлению экспериментальными установками, сбору и обработки данных. Далее вкратце рассмотрим, что можно противопоставить парадигмам работы, предлагаемым Word/Origin/C++. Для этого проследуем стандартным путем – сформулируем требования к ПО и попытаемся подобрать максимально отвечающий им продукт.
ТЕКСТ
Какие требования обычно предъявляются к системам работы с текстом?
• стабильность работы;
• малый объем файла;
• совместимость форматов файлов как вниз, так и вверх;
• возможность работы с многостраничными документами, содержащими сотни, а то и тысячи формул;
• стабильная и простая работа со ссылками (номера формул, страницы, номера пунктов, библиография, ссылки на рисунки и таблицы);
• возможность внедрения графических объектов по ссылкам;
• разделение содержания и внешнего представления.
Мой опыт работы с различными текстовыми редакторами и с издательскими системами показывает, что лучше LaTeX в этой области нет ничего. Самый популярный дистрибутив LaTeX для Windows (а менять ОС вряд ли кто решится – купить все же проще) – MikTeX.
Отсутствие WYSIWYG, совершенно иной подход к созданию документов и большой набор команд на первый взгляд существенно усложняют работу с системой. Но это впечатление обманчиво. Достаточно сделать над собой небольшое усилие и немного поработать с объемистым документом физико-математической направленности, как преимущества подхода разделения содержания и представления становятся очевидны. Имея на руках чистый ASCII-файл страниц на сто, можно безболезненно проводить над ним жуткие с точки зрения систем а-ля Word операции: переставлять формулы, удалять абзацы, вставлять/удалятькартинки, перенумеровывать библиографию и пр. А в интеграции с системой контроля версий (рекомендую обратить внимание на Subversion, subversion tigris org, и его Windows-клиента TortoiseSVN, tortoisesvn net) можно сохранить всю историю создания документа, совместную работу над большой статьей или книгой, возвращаться к написанному ранее и выбирать наиболее удачные формулировки.
Немаловажно и то, что работа с библиографией встроена в LaTeX практически бесшовным образом. Поскольку число ссылок в библиографической БД редко превышает несколько тысяч, а скорость доступа к записям особой роли не играет, то хранение БД в виде текстового файла (bibtex) полностью подпадает под правила работы с основным материалом, набранным в TeX. Более того, существует ряд продуктов, которые позволяют работать с библиографической БД с помощью удобных интерфейсов. В частности, заслуживает внимания замечательный пакет JabRef (jabref sourceforge net).
ПРЕЗЕНТАЦИИ
Теперь очередь продукта для создания презентационного материала. В голове у большинства пользователей сразу возникает монумент с огромной надписью «PowerPoint». Несомненно, презентации в PPT уже стали стандартом де-факто. Однако четкого разделения содержания и представления в PowerPoint нет. Трудность изменения оформления презентации, сделанной с отступлениями от базовых стилей и макета (99% случаев), формулы, неприспособленная система макетов требуют колоссальной ручной работы при незначительных изменениях оформления презентации. Неудобные средства анимации не позволяют сделать что-либо кра-сивое с документами, содержащими массу формул. Что же можно предложить в качестве альтернативы? Ответ может выглядеть парадоксальным – это все тот же LaTeX, но с тремя дополнительными пакетами: beamer (latex-beamer sourceforge net), pscyr и pgf+TikZ (последние версии pscyr, pgf и xcolor необходимо брать либо из дистрибутива MiKTeX, либо с домашних страниц – на sourceforge в связке с beamer лежат старые версии). Исходник презентации в ASCII-формате, жесткое разделение содержательной части от оформления, возможность многократного использования своих собственных команд по выводу блоков текста, формул или графического материала, поддержка послайдовой анимации путем текстовой раскадровки, использование возможностей pdf для интеграции с внешними источниками (exe, avi и пр.) позволяют подготовить материал с огромным количеством формул и иллюстраций буквально в считанные часы. При этом за счет сбалансированных стилевых файлов документ будет выглядеть профессионально. При необходимости изменение дизайна презентации проводится в течение одной-двух минут – достаточно выбрать новый стилевой файл и перекомпилировать исходный документ. Также можно получить содержимое презентации в печатном виде: скриншоты экранов с комментариями к каждому кадру.
А язык TikZ для рисования иллюстраций, являющийся, по сути, пакетом LaTeX, позволяет включать графический материал непосредственно в исходный документ презентации (in place или же в виде команд – зависит от частоты использования). На этом языке можно создавать и иллюстрации, оперируя концепциями предметной области, будь то ядро и электрон, или граф и ребра, или фотон и другой фотон… Более того, графика TikZ, скооперированная с возможностями покадровой анимации beamer, позволяет делать красивые и элегантные вещи путем незначительных затрат.
МАТЕМАТИКА
И, наконец, последний составной элемент базового рабочего места научного работника – пакеты для математических расчетов, графическое отображение результатов и системы для управления экспериментальными комплексами. В этом сегменте предлагается обратить внимание на популярный язык программирования, принадлежащий семейству динамических языков, Python (www python org, www activestate com). Интересен язык не сам по себе (обсуждение его возможностей – тема для отдельной большой беседы), а именно в контексте поставленных задач. Достоинством Python является то, что он, поддерживая ООП-парадигму, может с одинаковой легкостью быть использован и в качестве калькулятора, и в качестве скриптового языка склейки/пакетной обработки, и в качестве языка для управления программно-аппаратными комплексами. Благодаря огромному количеству пакетов, решение очень многих задач существенно упрощается.
Для математических расчетов есть масса специализированных программ (например, wiki python org/moin/NumericAndScientific, www enthought com), существуют сборки, содержащие огромное количество специализированных пакетов (например, code enthought com/enthon). Есть отдельные пакеты для рисования графиков, например MatPlotLib (matplotlib sourceforge net). Это очень удобный вариант, особенно если рассматривать связку «экспериментальная установка + документ». Данные, полученные с экспериментальной установки (или численного эксперимента) под управлением ПО, созданного на Python, проходят предварительную обработку (опять Python), информация выдается в файлы в виде графиков (2D, 3D, прочие форматы), а после этого при помощи python-скриптов частично формируется и запускается на компиляцию latex-документ, использующий эти графики. [Автоматизация на Питоне – штука довольно распространенная. Так, например, в студии ILM на Питон завязан весь процесс производства визуальных эффектов. – В.Г.] В результате в полностью автоматическом режиме можно получить на выходе профессионально созданный pdf-файл с отчетами о проведенном эксперименте. Также с использованием Python достаточно легко можно писать GUI к различным программам (например, пакеты TkInter, wxPython, TraitsUI). И многое-многое другое.
Полагаю разумным сделать паузу и предоставить читателям возможность сходить по незнакомым ссылкам и подробнее ознакомиться с упомянутыми материалами. Разумеется, все упомянутые продукты непросты в освоении, но усилия, потраченные на овладение ими, того стоят. Воспользовавшись возникшим вакуумом, можно не пытаться воссоздавать ранее бывшее окружение путем поиска эрзацев, а попытаться сменить видение. Решать эту задачу в одиночку сложни тяжело, но, с другой стороны, существует огромное количество технологий и продуктов, позволяющих объединять усилия различных людей в одном направлении. И эти технологии очень хорошо вписываются в структуру научного сообщества, дополняя и расширяя существующие связи между научными группами. Наличие инициативной группы, являющейся неформальным ядром такого сообщества, позволит сменить парадигму достаточно безболезненным образом. Болеетого, такая система является системой с положительной обратной связью, и, будучи запущена, может поддерживать себя сама. В качестве результатов работы такой группы можно продемонстрировать ресурс «TeX в Институте математики и механики УрО РАН». Ему уже около четырнадцати лет (восемь из них посвящены работе с MiKTeX), и история его развития может служить показательным примером того, как можно успешно внедрять новые технологии в научных учреждениях.
Почему так
Наверняка многие читатели скажут, что существует множество замечательных пакетов и продуктов, которые позволяют решать указанные задачи. Это действительно так. К сожалению, если начинать описывать все возможные комбинации продуктов с уче– том версий и особенностями интеграции, то получится многотомный труд с малоупотребимыми результата– ми, вследствие их быстрого устаревания. Поэтому в статье предложен только подход к решению задач и указаны пакеты и продукты, которые были выбраны на основе личного опыта и прошли экспериментальную апробацию в различных областях деятельности, а не только в научной.
1. Почему начато с LaTeX?
Потому, что текстовый редактор – самый частый инструмент в обиходе научного работника. Это раньше можно было получать зар– плату и заниматься измерениями. А теперь – непрерывные заявки на гранты/отчеты/статьи/презентации и прочие оргвещи, позволяющие другим членам группы проводить научные изыскания. LaTeX выбран как единое средство для написания статей, подготовки презентаций. Более того, поскольку входные файлы имеют понятный ASCII-формат, автоматизированные системы наполнения документов пишутся очень легко. И делается это при помощи скриптовых языков.
2. Почему речь идет о Python, а не о С++. Все просто. Имея опыт промышленной разработки C++, я хорошо представляю, каковы накладные расходы, связанные с его использованием.
Какие же требования следует предъявить к языку программирования для научных работников?
Опыт показывает, что следующий список близок к оптимальному:
• однозначность конструкций языка, прозрачный синтаксис;
• легкость понимания, приемлемая кривая обучения;
• кроссплатформность;
• гибкость;
• компактность программ;
• поддержка в научном
• сообществе;
• широкий набор библиотек;
• сокрытие технологических сложностей (COM, работа с XML, списки, хеши, таблицы, работа со строками, итераторы);
• возможность с равной легкостью разрабатывать как CLI-склейки, так и GUI;
• удобство отладки;
• поддержка ООП-концепций;
• быстрота выдачи готового кода (желательно с автотестами);
• возможность интроспекции.
• Имея опыт работы с C++, Java, Perl, Python, я остановился на последнем. И на нем много чего было сделано. Изумительно просто можно организовать генерацию Excel-отчетов (с раскраской и форматированием), не зная глубинно о OM. С XML очень удобно работать… и масса дру-гих вещей.
3. На Matplotlib свет клином не сошелся. Пакетов много, но я говорю о конкретном решении, которое я собрал (оценивая по многим параметрам). Перечислять все пакеты в популярной статье, наверное, ни к чему. Я хотел рассказать об общем подходе в создании АРМ научного работника.
Смысл не в том, чтобы метаться от пакета к пакету, а в том, что можно собрать под себя инструмент и далее оттачивать свое мастерство в решении конкретных задач. Я вовсе не настаиваю на конкретном пакете, я говорю о концепции. Люди, которые решат использовать open source, так или иначе должны будут включиться в community и оглядеться вокруг повнимательнее.