CDF Definiowanie struktury "żywego" dokumentu |
![]() |
Środowisko programu Mathematica udostępnia wiele procedur pozwalających definiować strukturę interaktywnego dokumentu. |
|
||||
Najprostszymi procedurami wnoszącymi elementy interakcji do prezentacji są procedury animacji. Dostępne są dwie podstawowe komendy z tego zakresu: Animate[...] oraz ListAnimate[...]. Pierwsza z nich pozwala wyświetlać sekwencję postaci wyrażenia, gdy wskazany jest modyfikowany parametr. Komenda ListAnimate[...] wyświetla sekwencyjnie elementy listy wejściowej, będącej argumentem komendy. ![]() Na powyższej animacji dokonywana jest zarówno zmiana wyrażenia arytmetycznego jak i wykresu rozwinięcia funkcji sinus w szereg. Animacja została wygenerowana przez procedurę Animate[...] w zapisana w pliku GIF za pomocą procedury Export[...]. Przyciski nawigacyjne w pliku GIF oczywiście nie będą działać, gdyż są one elementami interakcji w środowisku Mathematica lub CDF Player.
|
||||
|
||||
Mathematica umożliwia tworzenie interaktywnych modeli za pomocą jednej komendy Manipulate[...]. Wyrażenie Wolfram Language poddawane jest interaktywnej manipulacji za sprawą zmiany wybranych parametrów. Komenda Manipulate[...] dba o interfejs dla zademonstrowania, co się stanie, gdy będą zmieniane wybrane parametry."
|
||||
|
||||
Domyślnie każda komórka wyjściowa, wynik każdej komendy, jest komórką statyczną. Oznacza to, że jeżeli komórka ta zależna jest od wcześniej zdefiniowanych parametrów, to są one uwzględniane na etapie wyliczania wartości. Późniejsza zmiana parametrów nie wpływa na uzyskany już wynik. Takie jest standardowe zachowanie każdego języka programowania. Wolfram Language pozwala tworzyć struktury dynamiczne, gdzie zmiana parametru automatycznie modyfikuje obiekty od niego zależne. Dyrektywa Dynamic[...] pozwala na aktualizację wyrażeń w czasie rzeczywistym. Dyrektywa DynamicModule[...] pozwala pracować z obiektami dynamicznymi w warunkach lokalizacji zmiennych, czyli ograniczenia ich definicji do określonego modułu. Po co zostały wprowadzone dyrektywy Dynamic[...] i DynamicModule[...]? Jaki jest ich związek z dyrektywą Manipulate[...]? Dyrektywa Manipulate[...] realizuje wszystkie niezbędne operacje związane z dynamiczną modyfikacją obiektów. Jest w zasadzie w tym zakresie "samowystarczalna". Stanowi ona tak jakby wyższy poziom programowania. Każdy moduł zrealizowany na bazie dyrektywy Manipulate[...] może być stworzony na bazie dyrektyw dynamicznych, trzeba tylko napisać nieco więcej kodu źródłowego. Dlatego komenda Manipulate[...] jest powszechnie wykorzystywana, gdyż oszczędza czas pracy nad aplikacją. Dyrektywa ta ma jednak określone ograniczenia w zakresie np. kompozycji interfejsu aplikacji. Każdy pomysł projektanta aplikacji tak w zakresie funkcjonalnym jak i estetycznym może być zrealizowany przy użyciu dynamicznych dyrektyw. |
||||
|
||||
Dlaczego dokumenty interaktywne mogą być niebezpieczne? Każdy plik otwierany w środowisku systemu operacyjnego, jeśli zawiera w swojej strukturze wykonywalne skrypty, które są uruchamiane podczas otwierania pliku, jest potencjalnym źródłem zagrożenia. Zagrożenie to wynika z faktu, że jeśli plik pochodzi z nieznanego niezaufanego źródła, to wykonywalne skrypty mogą zawierać "złośliwe" procedury, które mogą uszkadzać strukturę plików systemu operacyjnego lub na przykład wykasować część zawartości dysku twardego. Problem ten jest ogólnej natury i nie dotyczy wyłącznie środowiska programu Mathematica. Dokładnie tak samo wygląd problem w środowisku pakietu MS Office, gdzie pliki XLSX lub DOCX mogą być wyposażone w tzw. makra, które mogą wykonywać określone operacje na przykład przy otwieraniu pliku. Jakie są sposoby wykonywania kodu i kiedy może to być potencjalnym zagrożeniem? Kod pisany w Wolfram Language w środowisku programu Mathematica może być wykonywany na trzy sposoby: zamierzone wykonanie kodu przez Shift+Enter, komórki inicjalizacyjne, obiekty dynamiczne. |
||||
Wykonanie kodu przez Shift+Enter | ||||
W środowisku programu Mathematica przyjęte jest, że świadome wykonanie kodu przez Shift+Enter nie może być źródłem zagrożenia. Uruchamiając "obcy" kod należy się upewnić, że pochodzi on z zaufanego źródła lub prześledzić jego zawartość, aby stwierdzić, że nie zawiera niebezpiecznych operacji. |
||||
Komórki inicjalizujące | ||||
Komórki inicjalizujące to kod w Wolfram Language, który jest wykonywany przed pierwszymi obliczeniami lub podczas otwierania pliku NB. Towarzyszy temu komunikat ostrzegający, że Notebook zawiera tego typu komórki i ich wykonanie może być zablokowane. |
||||
Obiekty dynamiczne | ||||
Notebook zawierający dynamiczne, interaktywne treści może automatycznie wykonywać kod po otwarciu pliku bez żadnej dodatkowej akcji ze strony użytkownika. W większości przypadków będzie właśnie o to chodziło, żeby operacje te były wykonane automatycznie, ale czasami użytkownik powinien być ostrzeżony, że dynamiczne treści zawierające potencjalnie niebezpieczne operacje są zawarte w otwieranym pliku. Jakie operacje zawarte w treściach dynamicznych będą potencjalnym źródłem zagrożeń? Wolfram Language analizuje kod otwieranego notebooka i jeśli znajdzie w nim procedury z określonej grupy, generowane jest ostrzeżenie. Do procedur tej grupy należą między innymi:
Dodatkowym zabezpieczeniem jest fakt możliwości korzystania z opcji TrustedPath, UntrustedPath oraz TrustByDefault. Tworzą one system zaufanych katalogów, dzięki czemu pliki NB mogą być zaklasyfikowane do zaufanych, niezaufanych i pozostałych, które nie są ani zaufane ani niezaufane. |