Pull to refresh

SageMath и CoCalc: как всё начиналось. Часть вторая

Reading time22 min
Views1.5K
Original author: William Stein
Вторая часть перевода автобиографической статьи Уильяма Стайна «Mathematical Software and Me: A Very Personal Recollection», в которой он рассказывает о предпосылках и первых годах разработки системы SageMath (ранее называвшейся Sage). Первая часть перевода, предисловие переводчика и описание соглашений, принятых в тексте (использование жирного и подчёркнутого шрифтов, а также ссылок), — в этом посте: habr.com/ru/post/484476.

Публикуется с разрешения автора.


image
Источник фото: страница Стайна в Facebook.

План первой части


  • 0. Детство, логарифмические линейки, калькуляторы. Начало 1990-х. Студенчество, инженерные специальности, Mathematica, MATHCAD, Maple
  • 1. Абстрактная алгебра. 1994. Cayley. 1997. Опыт с MATLAB, Linux, C/C++
  • 2. Кризис в написании диссертации. Алгебры Гекке, квадратичные поля. PARI. Гипотеза Манина — Мамфорда. Погружение в тему модулярных форм
  • 3. 1998-й. Дальнейшее погружение в модулярные формы. HECKE, LiDIA, NTL
  • 4. 1999-й. Знакомство с Magma. Числа Тамагавы модулярных абелевых многообразий и гипотеза Бёрча — Свиннертон-Дайера
  • 5. Вовлечение в Magma. Приём в группу разработчиков Magma. Линейная алгебра. Первые мысли о собственной системе

План второй части



6. 2002. Знакомство с Python. ПО с открытым кодом. Python/C API. Возвращение к Linux. Многотомник о математике в Magma Кэннона и Книга по теории чисел автора


В 2002 Уильям Рэндольф Хёрст III (William Randolph Hearst III) выделил деньги Гарварду для покупки мне кластера компьютеров, и в 2003-м я захотел найти способ легко скриптуемого запуска множества заданий параллельно. Коль скоро Magma не имела каких-либо возможностей по параллелизации, я наткнулся на некий язык под названием «Python» (версия 2.3), который выглядел во многом похожим на Magma, но был разработан как скриптовый язык общего назначения. Я стал использовать его для запуска многих параллельных вычислительных задач на том кластере. Это был наилучший инструмент, который я мог бы найти для такой работы.

Я также начал более упорно работать над тем, чтобы сделать доступными онлайн те данные, что были вычислены мной при помощи Magma, и разумеется я обратился к Python. Димитр Жечев (Dimitar Jetchev, студент из Гарварда) и я написали код для того, чтобы сделать данные легко запрашиваемыми через веб-интерфейс, а также код, который делал так, чтобы можно было производить вычисления в Magma (или в ряде случаев PARI) через веб. Одна из инкарнаций этого хостится на сайте Magma: http://magma.maths.usyd.edu.au/calc/.

По мере моего изучения Python случилась забавная вещь. К тому моменту у меня был большой список претензий к Magma. Как то: документация и примеры в справочном руководстве Magma не тестировались автоматически на предмет того, соответствуют ли выдаваемые ими данные ожидаемым, и часто они были рассинхронизированы с актуальным кодом. Python во многом походит на Magma: сам язык в какой-то мере похож и он реализует ту же философию «батарейки в комплекте» («всё включено»). Удивительное дело, но Python решил дюжины основных проблем, которые у меня были с Magma! Я был взбудоражен этим в 2003-м, а также в течение моей следующей (и последней) рабочей поездки к группе разработчиков Magma в Сидней, и стал пытаться встраивать эти решения в мой новый Magma-код и пытаться объяснить то, что я выучил, Джону и другим. Сразу после возвращения из Сиднея я позвонил, взволнованно объясняя всё это, Дэвиду Голдшмидту (David Goldschmidt), находясь на ресепшне на встрече в AMS.

Я был весьма удивлён, когда месяц или два спустя, в начале 2004-го, Джон Кэннон достаточно безапелляционно отверг мои идеи и даже задал одному из своих сотрудников переписать мой новый код, относящийся к абелевым многообразиям, с целью избавиться от него. Глядя ретроспективно, имея сейчас запущенным большой проект по разработке программного обеспечения, я смог понять почему он не принял то, что я делал. Но тогда я был очень удивлён. Также я поехал на большую конференцию по Magma в Париж, в IHP, где Манджул Бхаргава (Manjul Bharghava, молодой профессор из Принстона), я и многие другие люди проводили несколько серий выступлений. Я вспоминаю, как слушал выступление Манджула, в котором он излагал пояснения по исследовательской задаче, над которой он работал, и в течение своего выступления он дал понять, что вся вера в его исследования стеснена тем, что Magma являлась программой с закрытым исходным кодом. Ему было необходимо адаптировать некоторую относительно малую часть некоторого алгоритма в Magma, относящегося к квадратичным формам и он элементарно не мог этого, так как такая возможность отсутствовала на уровне интерпретатора Magma. Это казалось просто неправильным.

Ещё я как-то обедал с Джоном Кэнноном во время этого семинара, когда он поведал кое-что о своих грандиозных планах, связанных с редактированием огромной серии томов о математике, лежащей в основе алгоритмов, реализованных в Magma. [Впоследствии были изданы, например, такие книги Кэннона: k1, k2, k3, k4, k5 — прим. пер.] Я предположил, что было бы неплохо, если бы они были доступны свободно, но он не считал это возможным. Он хорошо разработал свою идею, да и я фактически опубликовал статью в первом таком томе: http://wstein.org/papers/bsdmagma/. Я написал эту статью в Windows с помощью Microsoft Word (и только в самом конце сконвертировал в LaTeX с использованием WinEdt, несвободного интерфейса к LaTeX)!

Наконец, на том семинаре в IHP я осознал еще две вещи. Во-первых, я узнал, что семинар — это невероятно эффективный способ разработки математического программного обеспечения, гораздо более эффективный, чем модель Magma, заключающаяся в найме людей на несколько месяцев, с последующим их вылетом в Сидней, и, безусловно, намного более эффективная, чем то, как делаются Maple, Mathematica и MATLAB, стоимость которых буквально исчисляется сотнями миллионов долларов в год. Во-вторых, припоминаю, как я подслушал разговоры тамошних обитателей о языке Magma во время перерывов на чай, которые хотя и были заинтересованы семинаром, но не были одурманены «нектаром» Magma, и из этих разговоров стало ясно, что я не единственный, кто находит язык Magma ущербным.

Я начал читать Slashdot в начале 2004 года, главным образом ради интересных технологических новостей, и в комментариях упоминалось понятие «открытый исходный код», на которое я, честно говоря, не обращал никакого внимания раньше. Заинтригованный, я решил окинуть взглядом то, как обстояли дела с открытым математическим ПО с тех пор, как я отказался от него в 1999 году. NTL больше активно не развивается, проект LiDIA оказался почти мертв, PARI не сильно изменился (за исключением удаления всего моего старого кода), пополнившись, однако, некоторыми алгоритмами для относительных числовых полей. Таким образом, за пять лет ситуация в сфере теоретико-числового программного обеспечения с открытым исходным кодом ухудшилась. Я понял, что похоже я сам частично виноват, так как пытался убедить всех знакомых мне специалистов в области теории чисел использовать Magma и часто предоставлял им открытый доступ, чтобы они могли это делать. Я поспособствовал тому, чтобы «зацепить» целое поколение.

Примерно тогда же я занимался написанием книги по элементарной теории чисел (которая в конечном итоге стала вот этой книгой: http://wstein.org/ent/). Я планировал главу о теории чисел, в который использовалась бы каждая из программ: Mathematica, PARI, Magma, и Maple. У меня были первые три, но не было доступа к Maple. image Кто-то предположил, что тот факт, что я преподаватель и пишу книгу, должно быть хорошим аргументом в пользу того, чтобы Maple отправил мне бесплатную копию, поэтому я связался с ними. Человек из Maplesoft позвонил мне и объяснил, что, хотя я и пишу книгу с главой о Maple, они не могут дать мне бесплатную копию. Тем не менее, они могут дать мне специальную академическую скидку в 500 долларов. Я спросил, может ли он предложить что-нибудь по лучше, и он позвонил мне на следующий день и сказал: «Если вы можете собрать 4-х своих коллег, чтобы купить Maple по 250 долларов каждый, я могу продать вам его за 250 долларов». Я был оскорблён, так что взял триальную версию и всё равно приступил к написанию своей главы. Я начал пробовать все те же вещи, которые я легко делал в PARI и Magma, например, проверку чисел на простоту и т. д. Я был совершенно удивлен, обнаружив, что Maple ужасен, будучи значительно медленнее PARI, Magma или Mathematica для большинства элементарных теоретико-числовых задач, относящихся к моей книге. (Кстати, Maplesoft был куплен какой-то японской компанией несколько месяцев спустя.)

А ещё я установил Linux на виртуальную машину (работавшую под Windows), чтобы понять почему столько суеты вокруг этой ОС, и обнаружил, что теперь я всё время использую Linux вместо Windows, по причине того, что ПО там лучше (даже Magma работает под Linux намного лучше, чем под Windows). Я удалил Винду и поставил Linux. Ну а ещё я начал окончательно осознавать, что мой список проблем с Magma никогда не разрешится, и это всё больше расстраивало меня, поскольку в Python-то этих проблем не было.

Я начал обсуждать с Томасом Барнет-Лэмбом (Thomas Barnet-Lamb) сумасшедшую идею создания новой математической программной системы с открытым кодом, с читаемыми реализациями алгоритмов, где ничего не было бы скрыто в каком-то идиотском проприетарном слое. Томас учился тогда на первом курсе аспирантуры в Гарвардскогм университете, победив на международной олимпиаде по программированию, поэтому я решил, что тема софта будет ему по душе. Ещё я много беседовал об этой безумной идее с Диланом Тёрстоном (Dylan Thurston); Дилан поступил в аспирантуру в Беркли тогда же, когда поступил в аспирантуру я, выпустился синхронно со мной и работал на тех же первых двух работах, что и я, и состоял в должности доцента (Assistant Professor). Оба они, Томас и Дилан, подкинули мне множество идей касательно того, какие из языков программирования посмотреть, включая OCaml (который нравился Томасу), Haskell (большим фанатом которого был Дилан), и т. д. После многих лет использования Magma, с её высоко оптимизированными алгоритмами, я позарез нуждался в быстром языке. Но кроме того я хотел, чтобы язык был легко читаемым, чтобы математики могли бы выучить его без особых проблем, поскольку желал, чтобы люди, подобные Манджулу, когда-нибудь начав использовать эту систему не прекращали своих исследований. И я знал по опыту, что нечитаемый открытый код ничем не лучше закрытого.

Я не собираюсь нагонять негатив по поводу каких-либо языков. Хотя я много использовал Python, долгое время я вообще не рассматривал серьёзно его применение в этом моём сумасшедшем проекте, так как пытаясь реализовать некоторые основные арифметические алгоритмы на Python, обнаружил, что они работают слишком медленно, чтобы конкурировать с Magma (или C). Я также очень старался использовать SWIG, чтобы сделать C++ доступным в Python, но SWIG чрезвычайно угнетает и имеет ужасную производительность (из-за наличия многослойной обёртки), по крайней мере, по сравнению с тем, что могла бы выдать Magma.

В октябре 2004-го, когда я летел из Европы (с парижской конференции по Magma), я начал читать справочное руководство по Python/C API. Я понял, что Python — это гораздо, гораздо больше, чем просто транслятор. Это библиотека C, которая реализует всё, что нужно, и имеет хорошо определённый и хорошо документированный API. Будучи на борту самолёта я сделал несколько пробных тестов, и без особого удивления обнаружил, что я мог писать код расширений на Python так же быстро, как это было бы сделано для Magma путём модификации его ядра, поскольку под капотом обе системы были написаны на C. В течение того же полёта я осознал, что поскольку в интерфейсе Python/C использовался подсчёт ссылок, было бы намного проще писать нужные мне расширения на C, используя некоторый язык, который я бы разработал. Вернувшись домой я как-то наткнулся на Pyrex, который оказался как раз тем, что я и собирался написать. Я попробовал его, сделал тесты, и понял, что у меня есть победитель.

С использованием Pyrex и Python я мог бы реализовать алгоритмы и сделать их столь же быстрыми, как в Magma, если предположить, что я смогу найти правильный алгоритм. Кроме того десятки открытых для меня вопросов по функциональности, для которых не было средств развития в языке Magma, были уже разрешены в Python. И Python будет продолжать своё движение вперёд без какой либо работы с моей стороны. Так было в середине 2004-го, и вслед за Python вся экосистема программного обеспечения улучшилась по сравнению с 1999-м годом, несмотря на то, что теоретико-числовой программное обеспечение не сильно продвинулось в развитии.

7. PARI C API, pexpect. Первая версия Sage — Manin. Первые попытки интеграции с GAP, Macaulay 2, Singular, Axiom, Maxima. Поиски модели разработки. “Наконец мы что-то сделали”


Я начал посещать (и иногда устраивал у себя) собрания Бостонской группы пользователей Python, что имело довольно большое значение и обеспечило мне много полезного фидбэка. И я решил, что пришло время миновать стадию тестирования и прототипирования и приступить к работе. Мой план, как я объяснил Томасу, заключался в том, чтобы создать полноценную новую систему с нуля, используя Python и Pyrex. Весь код должен представлять из себя легко читаемую реализацию на Python, которая была бы хорошо документирована, для некоторого кода будет иметься принципиально более быстрая реализация на Pyrex и т. д. С этим наивном планом я засел за главный файл по эллиптическим кривым из исходников PARI и начал переводить.

Как сейчас помню, я реализовал это через одну функцию. Там, где некоторые могли бы упорно придерживаться такого подхода в течение многих лет, я быстро потерял терпение. На самом деле, когда дело касается ПО и программирования, я могу оказаться очень нетерпеливым. Я понял, что весь мой план был безрассудным и займёт слишком много времени. У меня были беседы с Томасом, Диланом и другими, и все те, кого я знал и кто серьёзно относился к теоретико-числовому компьютингу, использовали Magma, так что мне стало понятно, что придётся делать весь этот проект самому. Так что я понял, что перевод был обречён. Каким-то образом, даже со всем своим опытом, я значительно недооценил сложность алгоритмического здания, которое представляет из себя любая серьезная математическая программная система.

Я прочёл справочное руководство по PARI C API и использовал Pyrex для написания обёртки, так что я мог вызывать некоторые базовые функции PARI из Python. Я реализовал основные рациональные и целочисленные типы, используя Pyrex и GMP, и производительность была разумной. Однажды я использовал Matplotlib (Python-овскую библиотеку) в целях отрисовки некоторых графиков для Барри Мазура (Barry Mazur), что предполагало явные вычисления с неполной гамма-функцией, и был разочарован, так как ни PARI, ни Magma не содержали реализации этой специальной функции на тот момент. У Гарварда имелась лицензия для сайта Mathematica, так что у меня была копия системы Mathematica, и я писал код, использующий Python-библиотеку pexpect для того, чтобы держать открытой один сеанс Mathematica и использовать его для вычисления неполной гамма-функции. Проблема решилась. Это стало зарождением интерфейсов между Sage и другими математическими программными системами.

В январе 2005-го будучи на встрече Американского Математического Общества в Атланте, Штат Джорджия, я был занят написанием своего кода, когда ко мне подошёл Дэвид Джойнер (David Joyner) и спросил, что я делаю. До того момента я не показывал людям мою Python/Pyrex-овую математическую программу. На то было несколько причин, включая уверенность в том, что она была слишком сложной для понимания, а также что работа над чем-то подобным серьёзно разозлит Джона Кэннона и т. д. Но я пошёл на смелость и показал Дэвиду, чем я занимаюсь, и, на моё удивление, он нашёл это интересным. Я пообещал запостить онлайновую копию, которую он бы смог скачать.

Дэвид Джойнер был первым, кто признал, что было бы неплохой идеей сделать ПО несложным для него! Поэтому мне пришлось упростить загрузку и установку моей программы, которую я в то время называл Manin (в честь одного из моих любимых математиков [В первой части Юрий Иванович Манин уже упоминался, а именно упоминалась гипотеза Манина — Мамфорда, и была дана ссылка на вики-страницу о Манине, см. также подпись под фото Ю.И. в этой части — прим. пер.]). Моя целевая аудитория была не «Debian», это были не «программисты на Python», это не была хакерская элита — это был Дэвид Джойнер. Моя задача была сделать эту программу тривиальной для него в части установки, работы с ней, разработки и т д. Я подумал о том, как буквально съедалось огромное количество времени только на то, чтобы только сбилдить Python, GMP, PARI и прочее из исходников в директории для разработки, и явно представил, что Дэвид ни за что не продвинется в Manin если я расскажу ему, что первым делом ему потребуется выяснить, как сбилдить все эти программы, а после вернуться ко мне. image Поэтому я смастерил нечто, что сделает это автоматически само по себе. Он попробовал, эта штука сработала, и он очень вдохновился и начал писать код для Manin. Дэвид является специалистом в теории кодирования и заинтересован в том, чтобы в Manin присутствовал функционал относящийся к теории групп и теории кодирования, однако не хочет писать всё это сам с нуля, поэтому он попросил по электронной почте о том, чтобы Manin и GAP смогли бы как-нибудь взаимодействовать друг с другом. Я показал ему pexpect-код для управления системой Mathematica, и он адаптировал его к созданию интерфейса к GAP.
image
Юрий Иванович Манин — советско-американский математик-универсал, широко известный в научном мире своими работами по алгебраической и диофантовой геометрии, а также рядом работ по математической физике и computer science, популяризатор математики, в частности автор популярных книг “Доказуемое и недоказуемое”, “Вычислимое и невычислимое”. Один из первых (и чуть раньше Ричарда Фенйнмана (Richard Feynman)) выдвинул идею квантовых вычислений. Прототип Вечеровского из повести А. и Б. Стругацких “За миллиард лет до конца света” (с авторами которой Ю.И. близко дружил). Первую версию системы Sage Уильям Стайн назвал в честь Юрия Ивановича “Manin” (“в честь одного из моих любимых математиков”).

Дэвид помимо прочего работает в Военно-морской академии США, где он, очевидно, преподаёт множество курсов по математическому анализу и дифференциальным уравнениям. image Поиграв с системой Manin Дэвид попросил добавить возможность производить символьные вычисления. Шёл 2005-й год, и лично я никогда ранее не использовал какое-либо ПО для символьных вычислений, кроме Mathematica и Maple за 12 лет до того, поскольку рассматривал символьные вычисления как имеющие очень мало отношения к теории чисел, а мат. анализ, который я преподавал, никогда не требовал компьютера, тем более компьютеры не были разрешены на экзаменах. (Теперь-то я думаю, что никакая вычислительная техника не может рассматриваться, как априорно не относящаяся к исследованиям в теории чисел!) Поэтому я спросил Дэвида о доступных открытых решениях, и он сказал, что таковыми являются Axiom и Maxima, image ни об одной из которых я и слыхом не слыхивал. Я не припоминаю, как мы остановили выбор на Maxima вместо Axiom, но это было что-то связанное с тем, что систему Maxima было легче собрать, проще понять, и она имела в 1000 раз больше пользователей. Так или иначе, как и PARI, GMP и Python, она вместе с GAP была добавлена в дистрибутив Manin. А ещё я сменил название с Manin на SAGE = Software for Algebra and Geometry Experimentation (ПО для экспериментов в Алгебре и Геометрии).

Дэвид также убедил меня, что Sage нуждается в коммутативной алгебре. Сначала он разговаривал с людьми и пытался реализовать всё с нуля, но даже получившаяся арифметика была ужасно медленной. image Базис Грёбнера был кошмаром, ожидающим на горизонте. Мы оба были нетерпеливы, так что решили попытаться найти программу с открытыми исходниками, в которой всё это бы уже было, и просто заюзать её. У нас был следующий выбор: Macaulay 2 [Система названа в честь английского математика Фрэнсиса Сауэрби Маколея (Francis Sowerby Macaulay) — прим. пер.] и Singular, которые во-многом пересекались по функционалу. Для того, что мы хотели — базовая коммутативная алгебра — оба были тем, что нужно. image Singular легко собирался из исходников за несколько минут на каждом из компьютеров, которым я посвящал внимание. Macaulay 2 было до смешного трудно сбилдить и это занимало кучу времени. Я думаю, в основном поэтому мы выбрали Singular. Обнадёживало также то, что у Singular была относительно большая команда разработчиков, а также то, что он показал себя лучше в ряде опробованных мной бенчмарков.

Одновременно со всем вышеописанным я много путешествовал и проходил огромное множество собеседований по трудоустройству в разных местах. У меня было несколько предложений по найму, когда внезапно меня озарила сумасшедшая идея: если бы я поработал на Sage в режиме фуллтайм пару лет, это не повредило бы моей карьере. Это меня основательно вдохновило. Мои исследования в теории чисел существенно подзатихли, и я долго тратил всё свободной время на Sage.

Помните Дэвида Коэла, который шесть лет назад в 1999-м впервые познакомил меня с Magma? Оказывается, он подобно мне проводил год за годом в написании большой программной библиотеки поверх Magma для исследований в области теории чисел и криптографии. Однако в какой-то момент у него возникли серьёзные фейлы с группой Magma, детали чего я опущу. Достаточно сказать, что как и я, он был по крайней мере мотивирован в поиске других вариантов. Он начал собирать и использовать Sage и стал делать огромную работу над Sage, например систематически внедрять в Sage морфизмы и категории, писать тонны кода, относящегося к эллиптическим кривым, алгебраическим многообразиям и т. п. Дэвид Коэл учился на биолога и обладал чудесным виденьем общей структуры. У него также было множество технических трудностей с Magma, преимущественно не совпадавших с моими. Например, он чувствовал, что разработчики Magma сделали ошибку с дизайном морфизмов и он не желал, чтобы у Sage были такие же ошибки. И он не напрасно беспокоился, поскольку в том, что не входило в круг моих интересов, я просто копировал Magma… или, как говорил Дэвид, «копировал ошибки Magma».

Я переехал в Сан-Диего, и Джо Уэзерелл, впервые познакомивший меня с модулярными символами в 1997 году, тоже втянулся в разработку Sage, хотя в основном с позиции обсуждений. Давным-давно, в начале девяностых, Джо оставил учёбу в аспирантуре чтобы основать компанию по производству программного обеспечения, потом ушёл в отставку и вернулся в аспирантуру, в связи с чем у него были зрелые перспективы в отношении разработки ПО, и он обладал обширными знаниями по теории чисел и алгоритмам оптимизации. Так что 2005-й — это был долгий, долгий год, когда Дэвид Коэл в Австралии, Дэвид Джойнер в Мэриленде и я в Сан-Диего, писали код.

В конце 2005 трое из нас написали тонну кода, объединили многочисленные компоненты и, наконец, что-то сделали. 6 декабря Яап Шпиес (Jaap Spies) упомянул Sage в новостной группе sci.math.symbolic, в ответ на что какой-то парень по имени Ричард Фейтман (Richard Fateman) объявил Sage любопытным и сделал некоторые неутешительные утверждения о том, как устроен мир (относительно пользователей, финансирования и т. д.): http://mathforum.org/kb/message.jspa?messageID=4132045&tstart=0

8. Роковое письмо Кэннона. “Хватит это терпеть”. Решительный шаг к самостоятельности. Широкая известность в узких кругах. Sage Days 1. Привлечение замечательных людей. Sagetex, начало Sage Notebook


Я был весьма уверен в том, что Sage в любом случае потерпит неудачу, и что то, что мы хотели сделать с Sage, было совершенно невозможно, поэтому комментарии Фатмана не могли помешать мне дальше. Мне было все равно, что Sage был обречен. Я не мог не продвигаться дальше.
Джон Кэннон узнал о Sage, возможно, в результате публикации на sci.math.symbolic, и прямо перед Рождеством в 2005 году прислал мне следующее письмо:
---------------------------------------------------------------
Date: Mon, 19 Dec 2005 16:54:09 -0800
From: "Джон Кэннон" <john@maths.usyd.edu.au>
Subject: Калькулятор Magma
William,

Официально заявляю, что ваше разрешение на запуск калькулятора общего назначения на основе Magma заканчивается 31 декабря 2005 года. Первоначально оно было дано по вашему запросу, чтобы учащиеся ваших курсов в Гарварде могли иметь простой доступ к Magma.

Подтвердите получение данного письма.
С пожеланиями счастливого рождества,
Джон
---------------------------------------------------------------

Это письмо меня не на шутку напугало. Хотя к этому моменту я уже вовсю трудился над Sage порядка года, я честно говоря не предполагал, что Sage действительно сможет заменить Magma для меня. Magma была коммерчески финансируемым результатом фуллтайм-работы в течение десятилетий (фактически начиная с 1973 года, с первой версией Cayley). Объём работы с Magma, по сравнению с тем, что я имел с Sage к декабрю 2005-го, был по-прежнему совершенно монументальный. Я даже не знал, может ли это сделать один человек. Более того, насколько я мог судить, многие из многие из критических алгоритов для линейой алгебры, которые мне нужны (делающие минутными вычисления, которые могли бы выполняться год), существовали только в секретном ядре Magma и в голове Аллана Стила, и они собирались оставаться там настолько долго, насколько я мог предвидеть. Например, в июне 2004 года (до того, как появилась система Sage), мы с Алланом были вместе на конференции ANTS VI. Я начал просить Аллана объяснять некоторые алгоритмы, и он объяснял всё до определенного момента, но не в той мере, чтобы получить реальную реализацию. И похоже он дал мне этим понять, что он знал, что я что-то пытаюсь из него вытрясти.

Разве не странно, что математика может делаться таким образом? В 2004-м практически все в мире, кто производил серьёзные вычисления с эллиптическими кривыми, модулярными формами и т. д., использовали Magma. Система Magma являлась промышленным стандартом, она выиграла на годы вперёд. Мы с Дэвидом Коэлом были существенной тому причиной. И тем не менее, какая же это математика, когда большая часть моей работы коренным образом зависит от множества секретных алгоритмов? Это просто безумие. Более того, получается, что эти алгоритмы, о которых я говорю, действительно прекрасны (и они теперь являются стандартом, а в некоторых случаях существуют их версии, которые лучше чем в Magma, благодаря большой работе таких людей, как Гизбрехт (Giesbrecht), Перент (Perent), Калтофен (Kaltofen), Шторйоханн (Storjohann), Сондерс (Saunders), Альбрехт (Albrecht) и т. д.)

Но всё равно, письмо Джона Кэннона вогнало меня в панику. Я никоим образом не был уверен, что Sage когда-нибудь заменит Magma в моей работе и в преподавании, и у меня были большие планы, включавшие использование интерактивных математических веб-страниц. Реализация этих планов была на какое-то время остановлена, поскольку я был увлечён Sage. Но они никуда не делись. Что Джон сделал этим своим письмом, так это недвусмысленно сообщил мне, что если я собираюсь создавать те интерактивные математические веб-страницы, они не могут зависеть от Magma. «Официально заявляю, что ваше разрешение на запуск калькулятора общего назначения на основе Magma заканчивается». Я был в смятении. Впервые я увидел насколько энергия Джона Кэннона властвовала над моей жизнью и моими мечтами. Это письмо было отправлено по прихоти. У меня не было какого-либо официального разрешения на запуск калькулятора Magma в течение определённого отрезка времени (а лишь неограниченное разрешение). Джон дал мне ясно понять, что он может нарушить все мои долгосрочные планы по своей прихоти. Я огляделся в поисках вариантов, но другого не оставалось. Sage был обязан преуспеть. Но я был по-прежнему убеждён, что это было просто по-человечески невозможно, учитывая то, мне пришлось выполнять практически всю работу в условиях ограниченного финансирования и времени.

В то время у меня был грант NSF, а также стартовые средства от UCSD (University of California San Diego, Калифорнийский университет в Сан-Диего), и я мог бы сделать пересмотр бюджета по некоторым из моих грантов от NFS. Дэвид Джойнер предложил нам запустить «Sage Days», наименование которых, я полагаю, ведёт своё происхождение от Дней компьютерной алгебры Восточного побережья (East Coast Computer Algebra Days, ECCAD). Мы с Дэвидом организовали их первый раз, и Дэвид проделал потрясающую работу, собрав грандиозный состав спикеров, включая Стива Линтона (Steve Linton) от GAP, Себастьяна Паули (Sebastian Pauli) от KANT и т. п., и Джо Булер (Joe Buhler), который тоже жил в Сан-Диего, приложил усилия, чтобы на запланированном нами семинаре смогло появиться много людей. Мы провели Sage Days в начале февраля, и я представил версию Sage 1.0 в своей речи, которая открывала семинар. Выступления прошли замечательно, люди были полны энтузиазма в отношении Sage, спринты интенсифицировались: была написана первая версия Sagetex, затем Стивом Линтоном был написан нынешний замысловатый интерфейс к GAP, Киран Кедлая (Kiran Kedlaya) и Дэвид Рой (David Roe) реализовали интерфейс для Macaulay 2, и у меня возникла первая искра озарения о том, как сделать Sage Notebook, после того, как я посмотрел выступления Роберта Керна (Robert Kern) о некоторой неудачной попытке сделать интерфейс IPython notebook. Тогда впервые я понял, что интерфейс в стиле блокнота имеет определённую ценность. И Гонсало Торнария (Gonzalo Tornaria) заставил нас наконец начать использовать систему контроля версий для наших исходников (!), что означало, что люди теперь могли легко вносить свой вклад. (Я использовал контроль версий ранее, до Magma, но с Sage я лишь регулярно делал снэпшоты.)

Непосредственным результатом Sage Days 1 стало ускорение процесса разработки. Двумя месяцами позже я переехал в Вашингтонский Университет (Сиэтл). Как бы то ни было, летом 2006-го года я был приглашён MSRI (Mathematical Sciences Research Institute, Институт исследований по математическим наукам. Основан NSF, находится в Беркли, штат Калифорния — прим. пер.) для проведения двухнедельного летнего семинара по модулярным формам перед аудиторией из порядка сорока аспирантов. Я пригласил Дэвида Коэла и ещё двух спикеров. На тот момент некоторые аспекты Sage, честно говоря, оставляли желать лучшего. Я написал огромное количество кода для действительно широкого круга вещей. Степенные ряды, поля частных, числовые поля, модулярные символы, линейная алгебра и т. п. Наверное, я должен был просто использовать Magma для семинара, и действительно по крайней мере один оратор именно так и поступил. Но я этого не сделал… и это стало поворотным моментом. Некоторые из студентов, такие как Дэвид Харви (David Harvey), аспирант Гарварда, Роберт Брэдшоу (Robert Bradshaw) из Сиэтла, Крейг Ситро (Craig Citro) и многие другие очень заинтересовались тем, чтобы пофиксить многочисленные недостатки, с которыми им пришлось столкнуться в Sage. После выступлений у нас были длительные ночные кодинговые спринты в фойе общежития. Студенты постоянно задавали мне вопросы о том, как сделать ту или иную штуку в Sage, и мой был неизменен: «Это просто. Реализуй это и пришли мне патч!»

9. Sage Days 2 и последующие. Акцент на веб-версии. Всё только начинается


В следующий раз мы начали планировать Sage Days 2 в Сиэтле в конце 2006-го. Вторые Sage Days тоже удались на славу и имели результатом выработку фундаментальных направлений развития. Например, Дэвид Харви взял на себя редизайн приведения типов и Дэвид Рой загорелся идеей реализовать каждую модель представленной в p-адических числах (по прошествии трёх лет это всё ещё не было реализовано). Сабастьян Паули выступил с речью, в которой объяснил, что всякий, кто изучает курс алгебраической теории чисел, знает (или обращает внимание на Вейля [т.е. обращает внимание на работы французского математика Андре Вейля, имя которого уже фигурировало в первой части, в контексте гипотезы Таниямы-Шимуры-Вейля — прим. пер.]), что имеет место аналогия [см. также: ff1 — прим. пер.] между числовыми и функциональными полями, так что все алгоритмы переносимы между ними. Угадайте у чего? У Magma имеется замысловатая имплементация всех алгоритмов, относящихся к случаю функциональных полей благодаря работе Флориана Гесса (Florian Hess), которая в свою очередь основывается на работе группы KANT и др., при этом в PARI нет ничего относящегося к алгебраической теории чисел над функциональными полями. Себастьян объяснил, что фактически Magma — единственная программа в мире, доставляющая обе стороны этой аналогии, я надеюсь, мы что-нибудь сделаем с этой проблемой. (На момент написания статьи, в 2009-м, ещё ничего не произошло — Magma остаётся единственной программой в мире для функционально-полевой части алгебраической теории чисел. Гыы.)

У нас было около 13 выступлений в первый день Sage Days 2. Под конец дня, Дэвид Савитт (David Savitt, студент Ричарда Тейлора (Richard Taylor), а теперь профессор в Аризоне) посмотрев на меня, сказал, что я сумасшедший.
image
Ричард Лоуренс Тейлор — британо-американский математик, специалист в теории чисел. Являясь академическим “сыном” Эндрю Уайлса, помог ему завершить доказательство части гипотезы Таниямы-Шимуры-Вейля, поставив тем самым точку в доказательстве Большой теоремы Ферма. Академический “отец” (см. предыдущую ссылку на Mathematics Genealogy Project в этом же примечании) упомянутых в этой статье Томаса Барнетт-Лэмба, Кевина Баззарда, Дэвида Саввита.

После Sage Days 2 я провёл два очень, очень болезненных месяца за реализацией модели приведения типов Дэвида Харви. Я узнал (точнее, вспомнил), насколько трудны такого рода изменения в большой сильно связной библиотеке. А ещё студент из Сан-Диего, Алекс Клемеша (Alex Clemesha), последовал за мной с Сиэтл, и я оплачивал его работу над Sage в режиме фуллтайм из своего стартового капитала. Он реализовал 2d-графику для математиков (а не для учёных, которую доставляет matplotlib), а также сильно поспособствовал с первой версией Sage Notebook. Фактически перед началом использования Sage он был большим почитателем Mathematica, и ему реально не хватало Mathematica Notebook, по сему он хотел чего-то подобного в Sage. Когда он использовал Mathematica у него были веб-страницы программирования заданий с использованием webMathematica, так что он очень хотел чего-то, в чём объединялись бы идеи Notebook-а с веб-станицей. Мы насочиняли разных идей. Затем я нанял студента Тома Бутби (Tom Boothby), который недавно оставил шестилетнюю карьеру веб-программиста, чтобы вернуться к учёбе. Втроём мы разобрались, как писать AJAX-приложения, — так родилась первая версия ноутбука.

В то время было спорным решением написать web-приложение вместо традиционного GUI-приложения. Было много причин, подтолкнувших нас на это, но лично для меня это было обусловлено тем, что (1) я написал несколько серьёзных локальных GUI-приложений ранее, и знал, что они не просты в написании, не переносимы и сложны в части сборки из исходников, и (2) я попробовал wxMaxima (локальный GUI-интерфейс для Maxima) и был просто потрясён, увидев, насколько это было плохо из-за необходимости изобретать велосипед, — нужно было реализовать текстовые диалоги, вкладки, всё с нуля; напротив, с web-приложением многое предоставляется беззатратно. Так что моя мотивация заключалась в том, чтобы быстро создать десктопное приложение. Так получилось, что для пользователей это также упростило сотрудничество, дало возможность использовать Sage notebook через сеть и т.д., что явилось отличным бонусом. И на данный момент ясно, что веб-приложения (такие как Facebook, Gmail и т. п.) чрезвычайно популярны сейчас и будут только набирать популярность в будущем.

В 2007 году проект Sage начал по-настоящему набирать обороты. Бобби Моретти (Bobby Moretti), ещё один студент UW (University of Washington, Вашингтонский университет), увлёкся идеей обеспечения возможности производить символьные вычисления в самой системе Sage. До того момента, как код Бобби был добавлен в Sage в середине 2007-го, абсолютно все символьные вычисления в Sage могли быть выполнены только через явные неестественные вызовы Maxima и включали туманные и запутанные преобразования. Бобби, я и другие провели большую работу разрабатывая первый интерфейс символьных вычислений для Sage, и Бобби написал экспериментальную реализацию-прототип, которая для этого «за кулисами» использовала Maxima через псевдотерминал. Это заняло у него месяцы и, вероятно, негативно сказалось на всех других аспектах его жизни. Но он героически принял это. Войдя в разработку Sage он кардинально изменил ситуацию — внезапно оказалось, что Sage действительно может быть использован для некоторых вузовских курсов. Это резко увеличило интерес к Sage.

Несколькими месяцами позже, в ноябре 2007 года, Sage был номинирован на Trophées du libre, и Мартин Альбрехт представил Sage на встрече финалистов. Мы заняли первое место в категории «Научное ПО». Это привело к молниеносному росту популярности (например, нескольких статей на Slashdot и статей в изданиях по всему миру на многих языках), а также значительно увеличило количество загрузок Sage.

Примерно в это время мы также проводим Sage Days 5 в Математическом институте Клэя, и Крэйг Ситро убеждает нас перейти на 100-процентную экспертную оценку и 100-процентное покрытие тестами нового кода Sage. Кроме того, я на год нанимаю Майкла Абшоффа (Michael Abshoff) для управления релизами, что временно освобождает меня для работы над кодом, предложениями по грантам и собственными исследованиями.

В этой истории есть ещё очень, очень много всего. Но всё ещё слишком свежо, и иногда историю не следует рассказывать, пока не пройдёт достаточно времени.

Декабрь 2009
Tags:
Hubs:
+1
Comments0

Articles