Pull to refresh

Comments 27

Все это конечно хорошо и выполнена просто огромная работа, но тут есть подводные камни.

1. Кто профессионально работает с системами компьютерной алгебры, в основной массе, очень не любят навороченный и чрезмерно перегруженный интерфейс.
2. Здесь каких-то только систем нет. Значит надо делать для каждой свою документацию по пользованию. Там одно оглавление будет на несколько сотен страниц, да и поиск будет давать на конкретный вопрос опять несколько сотен ссылок. В результате, проще залезть в документацию первоначального продукта, например в GSL (GNU Scientific Library), и по ней все сделать. Я на конференции задавал одному из (восторженных) разработчиков этот вопрос, но вразумительного ответа не получил.

Сам, поскольку мне нравится Python, пытался пользоваться лет 7 назад, даже студентам на практике задачи давал на Sage, но мне кажется проще считать на wxMaxima, SymPy и SciPy, чем пользовать этого монстра. Вдобавок написать на Python конвертер из одного формата данных в другой для своей конкретной задачи достаточно просто и работать он будет на специализированных данных гораздо быстрее.

А так, Ваша мечта, мне нравится.
Огромное Вам спасибо за обратную связь! Скажу честно — вы не одиноки в таком мнении. Я тоже пытался научить своих студентов работать в Sage и даже возникали похожие мысли. У Sage есть одна особенность, из-за которой я так и не перешёл на Python Notebook. Sage самостоятельно следит за точностью расчётов, и это жутко удобно. Например, если Вы хотите поделить 2/3, то Sage выдаст дробь 2/3. Sage самостоятельно определит и даст числу 2/3 тип «дробное число». Если я попробую то же самое на чистом Python, я получу ноль.



Что касается студентов, я пришёл к следующему выводу. Им тяжело составить алгоритм. И проблемы на самом идут именно из этого. Уже потом я пришёл к мнению, что автоматизацию расчёта следует делить на две части:

Первая часть — человек берёт книгу например с расчётом зубчатого колеса и просто пишет по-порядку последовательность действий. Сначала вычислить одну величину, потом другую, третью взять из базы данных, зная то-то и то-то. На этом этапе не нужно думать, как этот алгоритм будет реализован на каком-либо языке программирования. Требуется сам алгоритм.

Вторая часть — человек берёт уже готовую последовательность действий и думает только, как реализовать алгоритм.

Я уже успел частично протестировать это на двоих и увидел, что у людей трудности начинаются уже на первом этапе. И если они только его осилят, им, надеюсь, уже будет без разницы, какая программа или язык программирования. Но последнее утверждение пока ещё нуждается в проверке.
А в чем именно преимущества перед IPython? Сходу заметил только 3D-графику «из коробки» (в IPython вроде пока нет такого).
Я к сожалению почти не работал в IPython Notebook. Отвечу, что знаю. Помимо 3D из коробки это:
  1. Бо'льшее число магических команд
  2. Sage самостоятельно следит за точностью расчётов
  3. Поддержка биндингов Vim и Sublime Text
  4. Поддержка мультикурсорности
  5. Можно написать своё приложение, которое на js обрабатывает результат расчёта на сервере SMC

Может, потом вспомню что-то ещё…
Вы вполне можете получить 0,6666666666666666 после деления в IPython, если возьмёте третью версию Python, либо напишете во второй from __future__ import division. Но вот получить рациональную дробь так не получится, нужно что‐то более сложное. Возможно, можно создать (или даже уже есть) дополнение для IPython, которое это делает. Впрочем, взять уже готовое из Sage проще, чем возиться с доделкой IPython.
Про эту инструкцию импорта я знаю. В Sage получение дробного числа производится за счёт встроенного препарсера. Этот препарсер передаст Python вместо кода 2/3 выражение Integer(2) / Integer(3), где Integer — это класс, написанный специально для Sage. При необходимости препарсер можно отключить.
Преимущество IPython Notebook в том числе то, что разработанный в ней алгоритм/куски кода можно просто скопипастить безо всяких изменений в питоновский файл и получить готовую программу/модуль для запуска. Разрабатывать алгоритмы «с нуля» удобнее в notebook, а потом для распространения готовой программы, которую будут запускать множество людей, получается обычный питоновский файл.
С другой стороны, там много удобных фич для написания технических отчётов с кодом, графиками, пояснениями. Есть форматирование, markdown (в том числе генерируемый программно), экспорт в latex, pdf, web и т.п. Так же можно достаточно удобно создавать динамические части на python+javascript. Можно в одном документе работать с python, cython, R, C/C++, bash и многими другими языками — в общем возможностей полно!
У нас в институте достаточно популярен ipython, а вот веб-sage я вообще первый раз увидел — поэтому и интересуюсь, что полезного можно из него получить дополнительно :)

Из перечисленных вами не совсем понял 3, 4, 5 пункты — можете немного пояснить? А символьные вычисления (в том числе дробей) — это конечно хорошо на этапах разработки, но в итоге-то в программе обычно всё равно нужно переходить к вычислениям с float/double…
Мне нужно несколько дней, чтобы сделать видео, демонстрирующее работу биндингов и мультикурсорность. Вкратце, можно поставить несколько курсоров, как в Sublime Text и одновременно в нескольких местах напечатать один и тот же текст (это мультикурсорность). У меня включены биндинги Sublime Text, и у меня в SMC работают комбинации клавиш Sublime Text. Например, сочетание клавиш ctrl+shitf+стрелка вверх/вниз перемещает строку вверх/вниз точно также, как и в Sublime Text. Про пятый пункт (js + python) я найду код и Вас уведомлю.
Спасибо за полезную статью. Что мне не нравится в Sage — это его ориентированность на онлайн-версию. Если Интернета нет или он медленный, то ничего сделать невозможно. И не люблю, когда мои документы лежат где-то кроме моего компа. Пробовал оффлайн-версию Sage — он всё равно запускается через вёб интерфейс. Мне больше нравятся фронтенды наподобие wxMaxima. Для себя сейчас использую для численных расчётов Octave, а если иногда нужно что-то посчитать символьное — то Maxima.

Нужно заметить, что на Маткад у нас подсажены не только студенты, но и преподаватели.

Я сейчас в течение двух лет провожу эксперимент над своими студентами — перевёл семинары по цифровой обработки сигналов на Octave вместо Matlab/Mathcad. В этом году эксперимент завершается, т.к. курс ликвидируют в связи переходом на бакалавриат. Там мы изучаем как посчитать спектр сигнала, окна, синтез цифрового фильтра и т.п. Устанавливать свою ОС на компах, где проходят л.р. нельзя, поэтому используем Octave для Windows. Интерфейс у Octave под Windows мягко-говоря не очень дружественный (консольный). Ещё сказывается отсутствие под Windows нормальной консоли. На первой лабораторной раздаются вопли: «А в Маткаде всё понятно, а здесь консоль!». Потом студенты понемногу привыкают. Ещё распространённая жалоба: «А у меня в Windows8 (дома) ничего не работает». У нас часть семинаров выполняется в виде ДЗ. Некоторые приносят результат выполненный в Матлабе. Возможно следовало взять Scilab, который хотя и менее популярен, но имеет более дружественный интерфейс у версии для Windows. Наиболее успешно выполняют лабораторки студенты, у которых есть Linux. Их удаётся пересадить с Маткада на open-source математическое ПО.

Результаты данного эксперимента неоднозначные. Перевести учебный процесс на open-souce ПО возможно, но для этого требуется выделить специальные компы, на которые можно установить Linux, так как полноценно работать с математическим open-source ПО можно только под Linux.
Лично я, когда обучал студентов Sage, ставил на компы лаборатории VirtualBox + Xubuntu. Я согласен, что не совсем хорошо, что документы лежат где-то ещё, но с другой стороны студентам не надо ничего устанавливать, достаточно иметь только браузер. Отпадают требования к ОС, расчёты можно запускать на относительно слабых компьютерах. Кроме того, некоторые возможности (например, совместная работа) возможна только через интернет.

Вообще говоря, у SMC есть очень мощное API. Увы, недокуменированное. Однако этот момент вполне мог бы решить задачу создания декстопного клиента SMC как минимум для Linux. Мы ставим серверную часть (оболочка; загружаемая в браузере, нам тогда не нужна), нативное приложение и сервер держим на одном компе.
Интернет, к сожалению, есть не повсеместно, а там где он есть в учебных учреждениях — может быть медленным, т.к. например на одном шлюзе сидит несколько аудиторий, набитых компами.
С такими учебными учреждениями наверно будет сложнее. Единственное, что я могу сказать сейчас — для каждого учебного учрежедения (и даже для каждой кафедры) вопрос внедрения нужно решать индивидуально. У меня есть планы показать SMC главе НУК МТ (Машиностроительные Технологии) МГТУ им. Баумана. Может быть, ему понравится :)
>Перевести учебный процесс на open-souce ПО возможно
Какой в этом смысл, если на работе будет Matlab, в среде которого производительность труда выше? Эксперименты ради экспериментов.
Извините, а можно вкратце, за счёт чего производительность труда в Matlab выше? Я с ним знаком очень поверхностно (были лабораторные в вузе).
Ну у нашей специальности Матлаба на работе не будет, а будет спираченный Маткад. Задачи для которых его используют (по сути дела программируемый калькулятор), можно успешно решать на open-source ПО.

Octave представляет собой Matlab без части тулбоксов и с консольным интерфейсом. Вот здесь mydebianblog.blogspot.ru/ где-то было сравнение Octave и Matlab. Фундаментальные проблемы Octave — отсутствие графического встроенного фронтенда и вывод графики через Гнуплот, в котором курсорные измерения отсутсвуют. Обе проблемы можно решить. Как с этим дела в Python — не знаю, т.к. Python не использую.
Начиная с 3.8.0 у Octave есть встроенный GUI. Но даже без него, кстати, особой проблемы нет. Код прекрасно пишется и в emacs. Проблема Octave в том, что аналогов многих матлабовских тулбоксов под него нет и производительность ниже.

Если выбирать из свободного ПО, то, как мне кажется, Python + IPython + библиотеки будут лучшим выбором, когда производительность не столь важна. Sage почти не использовал, так как особых преимуществ перед IPython не вижу.
Например, полноценная среда (а-ля IDE) с дебаггером, анализом графиков и прочими казуальными штуками типа drag'n'drop с автоматическим импортом исходных данных, легкий вызов java, mcc (автоконверт подмножества языка в си), если есть parallel toolbox, можно за пару часов собрать кластер из офисных компьютеров. Что-то в octave уже есть (например, последний раз, когда я устанавливал octave, GUI из коробки не было, теперь какой-то примитивный есть), только в более сыром виде с худшей документацией.
Интересно, а с чем связан выбор именно Octave для преподавания? Обязательно нужна совместимость с Matlab? Я не преподаватель, но мне более предпочтительными кажутся либо какой-нибудь научный дистрибутив Питона типа Anaconda, либо R + RStudio. Во-первых, все-таки более продвинутые языки, чем в Matlab, во-вторых, в вышеупомянутых дистрибутивах есть IDE (Spyder в Анаконде, RStudio для R), которые независимо от ОС выглядят примерно одинаково и не так будут пугать начинающих, как командная строка. Ну и количество библиотек на все случаи жизни побольше, чем для Octave (насколько я знаю, не все матлабовские тулбоксы с ним работают). Если говорить с точки зрения идеологии:), то Octave, имхо — это точно такой же способ подсадить людей на проприетарный Matlab, как и пиратская версия Matlab.
Я значительно лучше владею Matlab/Octave, чем Python. Ещё студенты могут взять любой учебник по цифровой обработке сигналов, в котором есть скрипты на Matlab и запустить их в Octave. Поэтому выбрал Octave.

Anaconda используется на кафедре математики ВШЭ, там прошлом году даже прошёл семинар по переходу на него. R больше используют специалисты по статистике.

Сейчас можно сделать вывод, что Python в мире математического свободного ПО побеждает всех остальных. Он и развивается активнее, и больше библиотек под него делают. В будущем, если будет такая необходимость, нужно будет давать студентам Python.
Честно, не понимаю Вашего комментария. Если бы ссылка была на сайт с рисунками, созданными в Sage или хотя бы Python, я бы ещё мог понять. Но тут на itunes…
Комментарий только к первой картинке, а в itunes програмка которая генеририт похожие картинки
О, спасибо, большое, а то я продукцией Apple не пользуюсь… Правда, для меня остался вопрос, что общего между трёхмерной поверхностью и этой картинкой.
Эти картинки и есть поверхность вида z=f(x,y), где f — случайным образом сгенерированная функция. После значение z преобразуется в цвет, в самом простом случае из белого в черный, но можно сделать более сложную последовательность цветов например как в радуге.
В картинке выше например просматриваются гипербола и синусоида.
Для интересующихся, ребята из IPython недавно стартанули пооект Jupyter. По сути это эволюционное развитие IPython с уходом от конкретного языка Python. Языки для интерактивных вычислений могут быть любые, та же Julia, например, что уже давно поддерживается на уровне ipython kernels. В рамках этого проекта ведётся работа над coLaboratory — интерактивной вычислительной средой на базе IPython Notebook с возможностью совместной работы через гуглодоки и расширение для Chrome.

Кому интересно, подробности тут:
jupyter.org
colaboratory.jupyter.org/welcome/
github.com/jupyter/colaboratory
Спасибо за отзыв. Я слышал про проект Jupyter, но к сожалению толком не разбирался. В целом я понял, что мне нужно осветить сходство и различие Ipython, Jupyter и Sage Worksheet. Как только я разберусь, я обязательно расскажу об этом на Хабре в виде новой статьи.
Андрей, спасибо за описание, очень интересный сервис.
Sign up to leave a comment.

Articles