Рекомендации для разработчиков по достижению совместимости с Wolfram CDF Player Pro
Программирование для CDF Player Pro
Почти все программные и вычислительные функции, доступные в Mathematica, могут быть использованы для создания приложений для CDF Player Pro с некоторыми программными ограничениями:
- Oперации Wolfram Symbolic Transfer Protocol, включая .NET/Link, не поддерживаются. Избегайте использования таких команд, как Install, LinkConnect, Links и так далее. Это включает ссылки на удаленные ядра Mathematica, такие как gridMathematica.
- InputField не будет допускать ввода произвольных программ Mathematica, однако будет принимать математические выражения и другую вводимую информацию, которая не похожа на программу Mathematica.
- Альтернативные интерфейсы для ядра, например, написанные на Java, C/C++ или .NET, не поддерживаются. Единственный поддерживаемый метод использования ядра — через интерфейс блокнота Mathematica.
- GUIKit не поддерживается.
Предварительная загрузка данных
Приложения CDF Player Pro не требуют встраивания данных, так как вы можете загружать внешние данные, когда это необходимо. Однако если ваша цель - сделать приложение как можно более самодостаточным, примите во внимание следующие рекомендации.
Существует два основных подхода к встраиванию:
Инициализация
Небольшие фрагменты кода и данных можно встроить в команду Manipulate, используя опцию Initialization. Например:
Manipulate[myfunction[mydata,n],{n,0,1},
Initialization:>(myfunction[dat_,n_]:=...;mydata={...})];
SaveDefinitions
Для больших фрагментов кода, пакетов или больших файлов данных может быть удобнее определить их до создания команды Manipulate, и затем сохранить их состояние в команде Manipulate, используя опцию SaveDefinitions. Например:
<<MyPackage`
mydata=Import[...];
Manipulate[myfunction[data,n],{n,0,1},SaveDefinitions->True];
Использование внешних файлов
Возможность CDF Player Pro обращаться к внешним файлам во время выполнения обеспечивает несколько преимуществ.
Организация и защита кода
Для более крупных проектов, организация кода в пакеты (в том числе и в Wolfram Workbench) способствует удобной разработке. Вместо того, чтобы включать ваш код в Manipulate с использованием команды Initialization, вы можете включить вызов пакетов. Все пакеты должны быть закодированы либо с помощью команды Encode, либо с помощью DumpSave для создания двоичного .mx файла. Для получения дополнительной информации смотрите этот видеоролик.
Затем вы можете загрузить его из динамического интерфейса. Например:
Manipulate[myfunction[n],{n,0,1},Initialization:>Needs["EncodedPackage`"]]
Еще одно преимущество заключается в том, что это шифрует ваш исходный код.
Данные в реальном времени или указанные пользователем
Существует несколько способов включения вызовов внешних данных в блокноты, чтобы пользователи CDF Player Pro могли использовать свои собственные данные или получать предварительно заданные данные в реальном времени. Типовые примеры:
- Инициализация приложения с данными из удаленного источника:
Manipulate[...,Initialization:>(data=Import["http://server.domain.com/latestdata.dat"])] - Захват данных с веб-камеры:
Manipulate[...,Button["Get image", data=Import["http://server.domain.com/webcam.jpg"] - Попросите пользователя выбрать локальный файл данных для анализа:
Manipulate[..., Button["Load data", mydatapath = SystemDialogInput["FileOpen"]]]
Блокноты и другие файлы
Можно открывать только блокноты, созданные Mathematica—блокноты без действительных кэшей структуры файлов открывать нельзя. Файлы, не являющиеся блокнотами, не могут быть открыты.