Как создать плагин (дополнение) для SMath Studio

Как создать плагин (дополнение) для SMath Studio - Сообщения

#21 Опубликовано: 08.11.2010 22:12:48
Andrey Ivashov

Andrey Ivashov

2270 сообщений из 3734 понравились пользователям.

Группа: Super Administrator

Очень интересная тема. Думаю интерфейс для подключения маткадовских пользовательских библиотек - востребованная вещь. Меня довольно часто об этом спрашивают и всегда с сожалением приходится отмечать, что готовые функции, написанные для маткада, подключать нельзя. Если такая возможность будет - в отдельных случаях появится серьёзный аргумент для попытки перехода на SMath Studio. На мой взгляд нужная функциональность - в будущем буду рад поспособствовать чем смогу.

P.S.: Прошу прощение, что последнее время редко здесь отмечаюсь - взял небольшую передышку, что бы решить огромное количество вдруг навалившихся на меня жизненных проблем.

С уважением.
#22 Опубликовано: 09.11.2010 06:15:50
build_your_web

build_your_web

4 сообщений из 127 понравились пользователям.

Группа: User

Насчет AlgLib - можно взять C++ версию и использовать её для повышения скорости.

Выяснил еще одну деталь.
Некоммерческая AlgLib распространятется под GPL, что в итоге обяжет открыть исходники SMath Studio
Коммерческая стоит 270 USD.
#23 Опубликовано: 09.11.2010 06:49:51
Samar

Samar

2 сообщений из 107 понравились пользователям.

Группа: User

Интересно, а кто-нибудь ее покупал?

p.s.: Исходники самой SMath Studio не откроет, а только плагина, который будет эту библиотеку использовать.
www.math.by
#24 Опубликовано: 09.11.2010 07:36:42
build_your_web

build_your_web

4 сообщений из 127 понравились пользователям.

Группа: User

Нет, согласно GPL нужно открывать любой продукт, в производстве или работе которого использовался инструмент под GPL.

Так недавно был скандал из-за того, что один из университетов в работе над военным заказом использовал в работе программу под GPL, что обязывает сделать публичным всю работу над данным проектом.

Использование компонентов под GPL опасно как для SMath Studio, так и для пользователей, которые будут использовать программу в своих коммерческих работах. И программу, и расчеты придется открыть.

А самое плохое будет то, что пользователь SMath Studio будет даже не в курсе о тех обязательствах, которые накладываются на результат всей его работы, в котором будет хотябы одна формула из SMath Studio.

Вобщем для меня GPL - зло. Лучше присмотреть что-то из Apache или Creative Commons с разрешением на использование в коммерческих продуктах.
1 пользователям понравился этот пост
Mikka 09.11.2010 07:43:00
#25 Опубликовано: 10.11.2010 13:45:55
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Цитата

Очень интересная тема. Думаю интерфейс для подключения маткадовских пользовательских библиотек - востребованная вещь. Меня довольно часто об этом спрашивают и всегда с сожалением приходится отмечать, что готовые функции, написанные для маткада, подключать нельзя. Если такая возможность будет - в отдельных случаях появится серьёзный аргумент для попытки перехода на SMath Studio. На мой взгляд нужная функциональность - в будущем буду рад поспособствовать чем смогу.

Ну, значит попробуем реализовать. Идеи есть. Мне тут для комплекта не хватает такой функциональности как прерывание работы функции пользователем. Как отслеживать Esc внутри плагина? В Маткаде была специальная функция:
BOOL isUserInterrupted( void );
Дело ещё осложняется тем, что статическая привязка, используемая в UserEFI работала с разными версиями lib-файлов, т.е. mcaduser.dll, которую мне нужно будет написать самому, была разной в разных версиях, что приводило потере функциональности пользовательских библиотек в новых версиях Маткада. Некоторые товарищи обошли это дело, использовав динамическую привязку. Т.е. придётся потрудиться, чтобы написать универсальную библиотеку mcaduser.dll для любых пользовательских библиотек. Может даже сделаем Валерию Фёдоровичу подарок При помощи такого интерфейса его набор библиотек для Mathcad'а можно будет использовать в SMath простым копированием без перекомпиляции или новой разработки.

Между прочим, тогда тем товарищам, кому был ближе старый сишный интерфейс будет проще писать плагины для SMath
Что, вообще говоря, не очень хорошо.
Россия навсегда! Вячеслав Мезенцев
#26 Опубликовано: 13.11.2010 11:12:43
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

По поводу функции isUserInterrupted(). Маткадовские библиотеки можно для определённости представить как вторичные плагины или плагины второго уровня (численные).

Вот заголовочный файл (немножко мной модифицирован), который описывает интерфейс для работы с пользовательскими библиотеками Mathcad по технологии UserEFI: mcadincl.h.

Насколько я понял, в SMath создаётся поток для работы функций пользовательских библиотек и при нажатии на Esc он просто приостанавливается, либо "убивается". В маткаде, что странно, функции выполнялись в основном потоке и для прерывания вычислений использовалась специальная функция isUserInterrupted() (Mathcad через эту функцию показывал библиотеке состояние клавиши Esc). Её просто вставляли где-то по ходу вычислений и она постоянно опрашивалась на предмет необходимости прерывания цикла вычислений. Когда я писал свой отладчик, я долго придумывал способ межпоточного взаимодействия в терминах С++ (не владел азами), т.к. свои отладочные функции запускал в отдельных потоках, иначе Маткад не перерисовывал своё окно.

Т.о. я просто поставлю заглушку на эту функцию, а её реализация в плагинном интерфейсе SMath не нужна. Так я понимаю?
Россия навсегда! Вячеслав Мезенцев
#27 Опубликовано: 13.11.2010 11:28:54
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Пример плагина для рисования в 3D
Функция CreateMesh(): Plot3D_Class1.pdf
Остальное добавлю, когда идеология рисования "подтянется" до уровня идеологии работы с выражениями. Одной линией много не нарисуешь.
Россия навсегда! Вячеслав Мезенцев
#28 Опубликовано: 13.11.2010 11:40:02
Andrey Ivashov

Andrey Ivashov

2270 сообщений из 3734 понравились пользователям.

Группа: Super Administrator

Wrote

Насколько я понял, в SMath создаётся поток для работы функций пользовательских библиотек и при нажатии на Esc он просто приостанавливается, либо "убивается".


Идея была такая: поток для GUI + по одному потоку для каждого листа, в котором будут производиться вычисления. Соответственно плагины работают в потоке вычисления текущего листа. Если пользователь прерывает вычисление, то поток просто убивается.

Wrote

Т.о. я просто поставлю заглушку на эту функцию, а её реализация в плагинном интерфейсе SMath не нужна. Так я понимаю?


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

P.S.: Насчёт исходников в PDF-ах - мне кажется по сравнению с этим исходные файлы на русском в репозитории всё равно выглядят намного привлекательнее. Без этого, как минимум, невозможна совместная разработка. А в некоторых случаях использование непроверенных библиотек невозможно без изучения исходников, ибо иначе убедиться в безопасности (во всех смыслах) логики внутри никак нельзя и тогда иметь единое место с сорцами - максимально удобное для всех решение.

Большое спасибо за труды!
#29 Опубликовано: 13.11.2010 19:41:00
zhuk

zhuk

13 сообщений из 120 понравились пользователям.

Группа: User

build_your_web по-моему ты в случае с alglib уж слишком комплексно рассматриваешь ядро и плагин. На мой взгляд было бы разумно организовать все на подобие миранды, т.е. есть официальная версия (ядро + какие-то плагины), имеющая свой определеный функционал, распространяемая по своей лицензии, а есть архив плагинов от сторонних разработчиков. Официально будет распространяться и поддерживаться только оф. версия, а пользователь по своему усмотрению сможет расширить ее функционал за счет сторонних плагинов. Эти плагины уже будут распространяться на своих условиях, совершенно не затрагивая с юридической точки зрения оф. сборку (вот там уже хоть нагло тырь, хоть по GPL распространяй). Выбор что и как прикручивать будет целиком и полностью за пользователем, на его совести. Для удобства конечных пользователей нужно лишь создать раздел форума со списком всех доступных дополнений + какие-то пользовательские сборки на подобие мирандовских. Такая организация даст большую свободу при разработке плагинов, функционал которых со временем может перекочевать в ядро.
неофициальный справочник https://sites.google.com/site/mikkhalichlab/home jabber конференция smath@conference.jabber.ru
#30 Опубликовано: 13.11.2010 20:23:40
Samar

Samar

2 сообщений из 107 понравились пользователям.

Группа: User

Wrote

build_your_web по-моему ты в случае с alglib уж слишком комплексно рассматриваешь ядро и плагин. На мой взгляд было бы разумно организовать все на подобие миранды, т.е. есть официальная версия (ядро + какие-то плагины), имеющая свой определеный функционал, распространяемая по своей лицензии, а есть архив плагинов от сторонних разработчиков. Официально будет распространяться и поддерживаться только оф. версия, а пользователь по своему усмотрению сможет расширить ее функционал за счет сторонних плагинов. Эти плагины уже будут распространяться на своих условиях, совершенно не затрагивая с юридической точки зрения оф. сборку (вот там уже хоть нагло тырь, хоть по GPL распространяй). Выбор что и как прикручивать будет целиком и полностью за пользователем, на его совести. Для удобства конечных пользователей нужно лишь создать раздел форума со списком всех доступных дополнений + какие-то пользовательские сборки на подобие мирандовских. Такая организация даст большую свободу при разработке плагинов, функционал которых со временем может перекочевать в ядро.



На все 100% согласен и полностью поддерживаю.
www.math.by
#31 Опубликовано: 15.11.2010 08:10:28
build_your_web

build_your_web

4 сообщений из 127 понравились пользователям.

Группа: User

Согласен.

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

Может быть это соглашение можно позаимствовать у той же миранды (не думаю, что соглашение о копирайте запатентовано или является объектом авторского права).
1 пользователям понравился этот пост
Mikka 15.11.2010 09:03:00
#32 Опубликовано: 17.11.2010 13:55:07
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Закоммитил, блин, со второго захода только. Прошу извинить за "мусор" в логах и базе.

В репозиторий добавил проект Plot3D. Как мог прибрался в коде, чтобы можно было по аналогии добавлять в библиотеку другие функции (там увидите). Каждая функция "оборачивается" отдельным статическим классом и имеет методы аналогичные используемым плагинным интерфейсам. Это сделано для того, чтобы разделить коды функций: каждой функции свой файл, т.к. размеры их могут быть очень большими (и будут). По аналогии сделал поддержку интернационализации (слово то какое).
Россия навсегда! Вячеслав Мезенцев
1 пользователям понравился этот пост
Andrey Ivashov 18.11.2010 21:10:00
#33 Опубликовано: 17.11.2010 15:45:22
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Изменил проект AlgLib (см. проект в репозитории). Основан на AlgLib 3.1.0.
Структура та же самая, что и в предыдущем случае. Проверял, вроде работает (на примере работы КИХ-фильтра).

Документ для теста: КИХ фильтр.sm
Россия навсегда! Вячеслав Мезенцев
2 пользователям понравился этот пост
Mikka 18.11.2010 03:50:00, Andrey Ivashov 18.11.2010 21:10:00
#34 Опубликовано: 17.11.2010 16:56:33
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

До кучи ещё добавил проект плагина ODESolvers. Rkadapt() большей своей частью взят из Numerical recipes 3-го издания. Но там алгоритм перебора шагов другой. Я подобрал алгоритм подбора шага так, чтобы параметры вызова функции и сетка шагов соответствовали функции rkfixed(), как у Mathcad. Хотя на самом деле вызов функции нужно делать немного по-другому.
Россия навсегда! Вячеслав Мезенцев
1 пользователям понравился этот пост
Mikka 18.11.2010 03:50:00
#35 Опубликовано: 18.11.2010 02:08:35
Carlos

Carlos

19 сообщений из 134 понравились пользователям.

Группа: User

Верно. SMath выигрывает засчет своей компактности и легкости. Бездумно раздувать его никому ненужными библиотеками или функциями глупо. Так мы в итоге получим маткад в 500 мегабайт весом.
#36 Опубликовано: 18.11.2010 04:36:50
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Цитата

Учавствовать могу, но на уровне кодинга.
Об архитектуре, целях и приоритетах нужно будет думать тебе, т.к. в этой области у меня голова сейчас занята другим проектом.

Руслан, посмотри на теперешнюю библиотеку. Осталось чисто только функции набивать... самая нудная часть. Я сделал пять примеров. Решатель диффура на себя возьму.

Там если по шагам описать, то для добавления функции нужно:
1. Создать новый класс с именем добавляемой функции.
2. Взять в качестве шаблона код из другого такого класса и полностью его вставить в созданный.
3. Заменить в нескольких местах имена и описания, а также количество переменных.
4. Написать обработчик численного вычисления (обёртку для функции из alglib ).
5. Вставить по аналогии функции вызова в файл: AlgLib.cs

И так больше полусотни раз. Не знаю уж, что там может понадобиться из библиотеки. Что мне нужно было я уже взял. Ещё можно статистические функции "обернуть".

Я сделал префикс для функций "al_", чтобы они не конфликтовали с другими стандартными. Статические классы, чтобы не писать вот так:
a = ( new RemezFIRFilter() ).remez( numTaps, bands, desired, weights, RemezFIRFilter.BANDPASS );
Тут просто исходник не мой, а вообще с явы переделанный. Кстати, добавил плагин FIRFilterDesign. Это пример из него.

П.С. Можно, кстати, разделить код плагина отдельно от кода самой библиотеки. Честно говоря, как это делается в C# я не знаю. Наверное просто компилируется и всё, а потом подключается как зависимость. Это можно сделать, чтобы по сто раз библиотеку alglib не компилировать. Плагин сам в этом случае будет небольшой.
Россия навсегда! Вячеслав Мезенцев
#37 Опубликовано: 18.11.2010 08:26:22
build_your_web

build_your_web

4 сообщений из 127 понравились пользователям.

Группа: User

Обертки наверное будем писать по мере появления запросов на форуме.
Не хочу тратить время на невостребованные плагины.
#38 Опубликовано: 18.11.2010 21:18:56
Andrey Ivashov

Andrey Ivashov

2270 сообщений из 3734 понравились пользователям.

Группа: Super Administrator

Вячеслав, большое спасибо за созданные плагины! Да и сами реализованные функции очень интересны! Думаю, многим они будут полезны.
#39 Опубликовано: 19.11.2010 10:04:26
zhuk

zhuk

13 сообщений из 120 понравились пользователям.

Группа: User

Создайте пжл отдельный раздел по плагинам на форуме и отдельную тему для каждого плагина. В теме описание, прямая ссылка на скачку .net и mono сборки. Там же багрепортить будем и пожелания высказывать))
неофициальный справочник https://sites.google.com/site/mikkhalichlab/home jabber конференция smath@conference.jabber.ru
#40 Опубликовано: 19.11.2010 10:12:52
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

По части форума можно взять пример с Far'а: http://forum.farmanager.com/viewforum.php?f=23
Россия навсегда! Вячеслав Мезенцев
  • Новые сообщения Новые сообщения
  • Нет новых сообщений Нет новых сообщений