Користувальницькькі налаштування

Налаштування сайту


sage_tricks

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Both sides previous revision Попередня ревізія
sage_tricks [2015/03/24 08:59]
wombat Запуск произвольных программ на Sage-сервере
sage_tricks [2015/03/24 09:43] (поточний)
wombat
Рядок 1: Рядок 1:
 +===== Запуск произвольных программ на Sage-сервере =====
 +
 +Чтобы запустить программу,​ написанную не на Python, а на других языках программирования (C/C++, Fortran, ...), на Sage-сервере,​ используя Sage Notebook только как графический веб-интерфейс для этого, можно:
 +
 +**1.** //​**Загрузить**//​ в какой-либо рабочий лист (например,​ новый) свой файл с программой. Назовём его для примера ''​program.c''​
 +
 +**2.** //​**Скомпилировать**//​ программу в исполнимый файл. Для этого в одной из ячеек рабочего листа выполнить команды:​
 +
 +  os.chdir(DATA)
 +  os.system('​gcc -o program.bin -program.c'​)
 +
 +или
 +
 +  os.system('​cc -lm -fopenmp -o program.bin program.c'​)
 +
 +или
 +
 +  os.system("​gfortran -o program.bin *.f90"​)
 +  ​
 +
 +**3.** Затем //​**выполнить**//​ скомпилированную программу
 +
 +  os.chdir(DATA)
 +  os.system('​./​program.bin'​)
 +
 +==== Примечание:​ Вывод на экран ====
 +
 +Если в программе используется вывод чего-либо на экран (например,​ ''​printf()''​ в языке C), то программа будет работать только тогда, когда её рабочий лист открыт в окне браузера. Это связано с тем, что вывод на экран буферизируется,​ и когда вы закрываете рабочий лист, буфер начинает заполняться,​ так как реального вывода на экран не происходит. После заполнения буфера ядро ОС приостанавливает работу программы до тех пор, пока всё накопившееся в буфере не будет //​реально//​ выведено на экран.
 +
 +Чтобы избежать остановки расчётов через пару минут после закрытия браузера,​ существует несколько вариантов:​
 +
 +  * Не использовать вывод на экран в программе вообще (выкинуть все ''​printf()''​-ы) //​(плохой,​ неудобный вариант)//;​
 +  * Вместо вывода на экран запрограммировать вывод в файл (заменить все ''​printf(...)''​ на ''​fprintf(file,​...)''​) //​(плохой,​ негибкий вариант)//;​
 +  * Перенаправить вывод программы в файл средствами командной оболочки (запускать как ''​./​program.bin > program.log''​) //​(хороший,​ гибкий вариант)//;​
 +
 +FIXME Если использован последний из вариантов (хороший,​ годный),​ то вывод программы можно всегда проверить вручную,​ выполнив ''​**(а оно не выполнится!!!)**''​
 +
 +  os.chdir(DATA)
 +  os.system('​tail program.log'​)
 +
 +
 +===== Загрузка архива на Sage-сервер =====
 +
 +Если на сервер нужно загрузить сразу несколько файлов или просто сжать файлы для передачи,​ вместо самих файлов можно загрузить архив, содержащий их. Тогда для работы с этими файлами в одной из ячеек соответствующего рабочего листа Sage нужно выполнить команду распаковки загруженного архива. В зависимости от типа архива,​ команды могут быть такими:​
 +
 +  os.chdir(DATA) # вход в каталог -- общая для всех
 +  os.system('​unzip infinite_cycle.zip'​)
 +  os.system('​tar -xf infinite_cycle.tar.xz'​)
 +  os.system('​tar -xf infinite_cycle.tar.bz2'​)
 +  os.system('​tar -xf infinite_cycle.tar.gz'​)
 +  os.system('​unxz infinite_cycle.c.xz'​)
 +  os.system('​bunzip2 infinite_cycle.c.bz2'​)
 +  os.system('​gunzip infinite_cycle.c.gz'​)  ​
 +
 +Эти команды подразумевают,​ что в архиве находится сама программа (состоящая из одного или более файлов),​ а не вложенный каталог,​ содержащий программу. Поэтому нужно либо архивировать файлы с текстами программы напрямую (в корень архива),​ либо после распаковки переходить в распакованный вложенный каталог с файлами программы.
 +
 +
 +===== Тонкая настройка matplotlib =====
 +
 +http://​matplotlib.org/​users/​customizing.html
 +
 +<code python>
 +import matplotlib as mpl; 
 +mpl.rcParams['​font.family'​] = '​STIXGeneral';​
 +mpl.rcParams['​axes.labelsize'​] = '​18';​
 +mpl.rcParams['​xtick.labelsize'​] = '​18';​
 +mpl.rcParams['​ytick.labelsize'​] = '​18';​
 +mpl.rcParams['​axes.grid'​] = '​True';​
 +mpl.rcParams['​figure.figsize'​] = '​5,​4';​
 +mpl.rcParams['​savefig.pad_inches'​] = '​0.1';​
 +mpl.rcParams['​savefig.bbox'​] = '​tight';​
 +</​code>​
 +
 +===== Русский текст на рисунке =====
 +
 +http://​ask.sagemath.org/​question/​11355/​cyrillic-text-on-the-plot
 +
 +===== Произвольный маркер в list_plot =====
 +
 +http://​ask.sagemath.org/​question/​9581/​markers-in-list_plot/?​answer=14317#​post-id-14317
 +
 +<code python>
 +list_plot([(1,​2),​(2,​2),​(3,​3)],​plotjoined=True,​linestyle='',​marker='​v'​)
 +</​code>​
 +
 +
  
sage_tricks.txt · В останнє змінено: 2015/03/24 09:43 by wombat