пятница, 30 ноября 2012 г.

Про участие в зарубежной конференции

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

Осенью подала доклад на профильную международную конференцию. Приезжать не собиралась, у них было указано, что приезд необязателен. Просто хотелось, чтобы какая-то из статей, в написании которых участвую, была хорошо видна в Google Scholar. Ну и если на защите спросят - мол, как ваши результаты соотносятся с международным уровнем, не без основания сказать "отлично соотносятся!".

Далее был волнительный период ожидания, сроки объявления о том, возьмут ли доклад отодвигались пару раз. В разделе "статистика" конференции было написано, что в разных секциях конференции процент принятых статей варьируется от 28% до 42%. Ну то есть не хухры-мухры все. Затем пришло долгожданное письмо, мол, congratulations, и так далее.

Следующим шагом было предписано заполнение регистрационной формы на сайте и оплата регистрационного взноса. И вот тут-то я неприятно удивилась, поскольку в регистрационной форме было написано, что в моем случае (for academics) регистрационный взнос составляет аж 615 евро! Если честно, то я ожидала по нашим деньгам максимум 5 тыс. руб.

На всякий случай написала письмо организаторам, мол, нельзя ли снизить регистрационный взнос, поскольку я хочу только прислать статью, а очно участвовать не буду (ну просто там была основная сумма на покушать и возможно на проживание). Организаторы ответили отказом (ну или точнее написали, что могут снизить не ниже 516 евро).

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

Когда я поспрашивала коллег и посмотрела на сайты других конференций, в которых тоже хотела участвовать, то увидела, что там тоже большие регистрационные взносы. Правда, в основном поменьше, и были даже по 200 евро для студентов, но все же тенденция ясна.


В итоге урок: прежде чем отправлять статью на зарубежную конференцию, узнайте, каким будет регистрационный взнос!


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

среда, 26 сентября 2012 г.

Программы для морфологов (для морфометрии)

Имеются в виду не те морфологи, которые филологи, а которые изучают срезы тканей во время клинических исследований :) Оказывается, есть куча опен-сорсного софта. По опыту научного тыка трех таких программ могу сказать, что самой лучшей является программа  ImageJ.

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



вторник, 21 августа 2012 г.

Настройка общей папки в гостевой Ubuntu (VirtualBox)

Как выяснилось, программистские задачи типа работы с bitbucket гораздо проще решаются в Ubuntu, чем в Windows. Поэтому на компьютере была установлена VirtualBox, и в качестве гостевой системы поставлена Ubuntu 12.04. Далее встала задача расшарить папку проекта, которая находится в Windows, так, чтобы она была видна в Ubuntu. Для этого была выполнена следующая последовательность действий (перечисляю только удачные):

1. В программе "VirtualBox" создаем общую папку:

2. В гостевой Ubuntu устанавливаем дополнения гостевой ОС (я заходила в "Домашняя папка"(первый значок ниже кнопки "Пуск"->Устройства->VBOXADDITIONS->"Открыть предложение автозапуска"->и т.д.)

3. Запускаем терминал (я заходила через Пуск->Недавние приложения, если в окне нет иконки терминала, можно начать набирать "terminal" в строке поиска)

4. В терминале пишем

sudo mkdir /media/itask (создаем точку монтирования)
sudo chmod 777 /media/itask
(разрешаем записывать в папку всем пользователям виртуальной ОС)
sudo -s(становимся пользователем root)
sudo mount -t vboxsf itask /media/itask (монтируем) (монтируем)
sudo echo itask /media/itask vboxsf defaults 0 0 >> /etc/fstab 
(настраиваем автоматическое монтирование при загрузке виртуальной ОС)

5. Перезагружаем виртуальную ОС, т.е. Ubuntu.

P.S. Я не являюсь специалистом по настройке Ubuntu, поэтому в тексте инструкции могут присутствовать какие-то ошибки и неточности. Данная задача решалась не путем вдумчивого чтения мануала, а просмотра вот этой страницы и применения метода "научного тыка". Так что, если что-то не получается, лучше спрашивайте там :)

четверг, 16 августа 2012 г.

Слайды и материал с конференции АКТО-2012

По просьбам интересующихся размещаю слайды доклада с конференции АКТО-2012:


А вот тут можно посмотреть препринт доклада.
Кстати, в последнем слайде презентации ошибка - неправильная таблица вычисления значений ожидаемой полезности. Какой она должна быть, можно без проблем догадаться, прочитав препринт.
Слайды нашего с Дмитрием совместного доклада можно увидеть тут.

вторник, 22 мая 2012 г.

Использование South в PyDev-Django проекте (шпаргалка)

Следующая последовательность действий оказалась удачной:

1. Скопировали папку South в корневую папку проекта

2. В main/settings.py дописали такую строку: sys.path.append(os.path.join(PARENT_PROJECT_ROOT, 'south'))

3. В bash (командной строке) написали команду python manage.py syncdb

4. В bash написали команды

./manage.py schemamigration tasks --initial
./manage.py schemamigration students --initial
(Потому что у меня в проекте два package - students и tasks, в которых есть файлы models.py)

5. Изменила tasks.models.py (добавила два новых поля)

6. В bash написала следующее:

./manage.py schemamigration tasks ei --auto
(после этого в папке migrations проекта создалась миграция с названием 0003_ei, поскольку между шагом 5 и 6 у меня было несколько неудачных попыток миграции, в ходе которых я создала еще один слепок БД, а потом его стерла)

./manage.py migrate tasks 0001 --fake
./manage.py migrate tasks 0003_ei

Информационные источники: Дмитрийеще один Дмитрийблог Анатолия Вострякова

вторник, 1 мая 2012 г.

Локализация области действия скрипта Mathjax

В разрабатываемом приложении, которое позволяет студентам интерактивно решать задачи по линейной алгебре, студент вводит части своего решения (формулы) с помощью специального элемента управления, который для краткости называется шагом студента. Для студентов предусмотрено два вида интерфейса ввода шагов: "легкий" и "трудный". В легком интерфейсе студенту предоставляется шаблон("скелет") формулы, который он может заполнять математическими символами с помощью drag-and-drop.

Дмитрием был разработан тестовый пример, в котором на странице располагалось текстовое представление шаблона формулы (на рис - 1), математические символы, которые можно тащить и бросать в шаблон (2), сам шаблон, сгенерированный на основе текстового представления (3), и динамически генерирующееся скриптом Mathjax представление измененного шаблона (4).



А вот как выглядел этот пример при частично заполненной формуле:


Далее выяснилось, что если на html-странице расположено несколько шаблонов формул (а они в разрабатываемом приложении все заполняются математическими символами из одной и той же таблицы), то при заполнении очередного шаблона "гадится" генерирующееся mathjax'ом представление других шаблонов.

В тестовом примере обращение к элементам на странице шло по классу CSS. Например:


Для решения этой проблемы создала тестовый пример с двумя шаблонами для заполнения. 
Всем значимым элементам html дала id, при этом id назначала так:

То есть, у одинаковых по функциональному назначению элементов id отличались только номерами в конце. Функцию, которая обрабатывает бросание математического символа на шаблон формулы, изменила так: То есть, алгоритм был такой: получаем идентификатор шаблона, куда сброшен математический символ. 
Из него получаем номер шаблона (1 или 2), далее формируем идентификатор визуального представления, которое должно обновиться и просим Mathjax обновить только одинhtml  элемент -- с этим идентификатором.

В процессе решения этой проблемы помогла страница, которую порекомендовал Дмитрий.

среда, 29 февраля 2012 г.

moodle-coordinate-question: пример

Немного разобралась с этим плагином. Выкладываю пример настройки одной из задач к курсу. Проверяла работоспособность только для Moodle 2.0. Это то, что хотим получить на выходе:



Существенные настройки:

поле "Random variables"

поле "Subquestion answer 1->Default answer mark" : 1
поле "Subquestion answer 1->Local variables" : 1

поле "Subquestion answer 1->Answer type" : Numerical formula
поле "Subquestion answer 1->Answer":

поле "Subquestion answer 1->Grading criteria": Absolute error == 0.00
поле "Subquestion answer 1->Subquestion text":



Хочу отметить несколько вещей.

Во-первых, не стоит копировать subquestion text в соответствующее поле нового вопроса типа "Formulas", и сразу же пытаться сохранить этот вопрос, чтобы посмотреть, как Moodle будет отображать его условия. Пока не будут заполнены все поля типа "Subquestion answer 1->Local variables" и "Subquestion answer 1->Answer", условия вопроса будут отображаться некорректно.

Во-вторых, в поле "Subquestion answer 1->Subquestion text" нужно вставлять текст так: нажать на кнопку "редактировать HTML код" и вставлять в открывшееся окно.

В третьих, Moodle вылетает, если использовать много случайных переменных, например, если захотите, чтобы каждый элемент матрицы или вектора представлял из себя случайное число из некоторого диапазона, скорее всего, такое не получится. По опыту - лучше стараться использовать как можно меньше случайных переменных. Для уменьшения их числа можно варьировать только некоторые цифры вопроса, ну или исхитряться так, как показано в вышеприведенном примере.

пятница, 24 февраля 2012 г.

moodle-coordinate-question: отображение формул в формате tex

Для части задач курса (самых простых) было решено попробовать использовать плагин moodle-coordinate-question. Но возникла следующая проблема: в тексте вопросов, создаваемых с помощью данного плагина, можно использовать только формулы, интерпретируемые средствами Moodle (не Mathjax'ом). Оказалось, что не настроены стандартные средства интерпретации. Настраивала так.

В Moodle открыла Администрирование->Плагины->Фильтры->Формулы в формате tex. Увидела, что напротив путей к исполняемым файлам latex, dvips, convert стоят красные крестики (т.е. пути недействительны).

Для того, чтобы установить интерпретатор latex, нужно поставить texlive (tetex больше не поддерживается, см. тут). В терминале набрала su -, нажала enter, ввела пароль root'а, и написала такую команду: apt-get install texlive.

Все установилось так, что не понадобилось менять пути к исполняемым файлам. Но формулы все равно не отображались так, как нужно. Отладчик теха в Moodle (<сайт, а котором находится Moodle>/filter/tex/texdebug.php) при выборе опции Show command execution output from the algebraic expression rendered with Tex/Ghostscrip выдал такие сообщения:

Error: latex executable (/usr/bin/tex) is not readable Error: dvips executable (/usr/bin/dvips) is not readable Error: convert executable (/usr/bin/convert) is not readable

Сообщила об этом администратору сервера, указав, что это может быть связано с переменной open_basedir (см. тут). Он там что-то сделал, и формулы начали отображаться.

Главное, при настройках таких вещей не забывать очищать кэш Moodle, а также кэш браузера. Иначе своевременно не удастся заметить положительные изменения :)

пятница, 20 января 2012 г.

Maxima и Moodle интеграция

В продолжение темы интеграции maxima и moodle. Сегодня нашла статью "Реализация сервис-ориентированных распределенных систем на основе технологии Ice". В ней пишут, что апробация описанного подхода на практике велась в том числе сервиса доступа к системе компьютерной алгебры Maxima, при этом использовалась реализация контейнера сервисов на языке C++, аналогичная описанной в статье. И еще нашла такую статью: "Разработка Grid-сервиса для системы компьютерной алгебры Maxima на основе промежуточного программного обеспечения Ice". Аннотация статьи многообещающая: "Изложены результаты работы по созданию Grid-сервиса компьютерной алгебры на основе системы Maxima (с открытым исходным кодом) средствами промежуточного программного обеспечения Ice (Internet Communications Engine). Данный сервис предоставляет пользователю простой механизм удалѐнного вызова операций Maxima, а также возможности создания/удаления исполняемых процессов Maxima на удалѐнном хосте. Статья содержит описание основных способов программного взаимодействия с системой Maxima и принципов реализации сервиса." Попробую скачать эту статью в понедельник.

среда, 11 января 2012 г.

Создание модуля в Moodle 2.x типа activity (часть 8)

Цель: поставить в gradebook оценку, введенную студентом с помощью submit_form.php. Этого можно достичь, добавив в файл view.php следующие строки:
и
Также пришлось подправить код функции itask_grade_item_update в файле <...>itask/lib.php следующим образом:
И заработало:

вторник, 10 января 2012 г.

Создание модуля в Moodle 2.x типа activity (часть 7)

Следующий шаг - сделать так, чтобы при нажатии на кнопку "Сохранить" пользователю записывалась в gradebook та оценка, которую он выбрал. Попробую для начала получить данные, введенные пользователем в форму. Посмотрела на файл <...>/moodle/mod/glossary/import.php и написала следующие строки в файл <...>/itask/view.php:
Функцию get_data() нашла в файле formslib.php. Тут написано, что get_data() - "Получить данные формы после всех проверок на стороне клиента и сервера. Данные получаются в виде объекта, именами полей которого являются имена заданных в функции definition() объектов, а значениями - значения полей в форме (по умолчанию или введенные)." Так что дописала еще такие строки:
Кстати, вывод footer'а тут нужен для того, чтобы сбоку на новой странице после нажатия кнопки "Сохранить" в окне activity типа itask оставалось стандартное меню Moodle.

Теперь при открытии конкретного activity типа itask Moodle стал выдавать следующую ошибку: "You must specify a course_module ID or an instance ID". Далее я заметила, что в файле <...>/moodle/lib/formslib.php конструктору класса moodleform на самом деле подается несколько параметров со значениями по умолчанию, в их числе параметр $customdata, про который в комментариях написано, что "param array $customdata if your form defintion method needs access to data such as $course $cm, etc. to construct the form definition then pass it in this array. You can use globals for somethings".

Если в файле view.php закомментировать все, что связано с submit_form, и написать
То при открытии одного activity типа itask каждый раз будет выводиться "n=0, id=8", а для другого - "n=0, id=9". Если попробовать вывести course->id, то будет выводиться "2", непонятно почему, ведь в настройках курса в поле "идентификатор курса" я ставила значение 1. Правда, в справке Moodle к полю "идентификатор курса" написано, что "Идентификационный номер курса необходим только при использовании его во внешних системах." Так как это поле можно оставить пустым, видимо, этот идентификатор и "системный" - две разные вещи. Тогда создала экземпляр класса mod_itask_submit_form так:
И заработало, теперь при нажатии кнопки "Сохранить" на новой странице браузера вместо элементов управления submit_form выводится выбранная оценка.

Создание модуля в Moodle 2.x типа activity (часть 6)

Следующий шаг - видоизменение формы, отображающейся на экране, когда открывается некий activity типа itask. В книге написано, что "the two main functions to add form elements to your form are addElement и createElement. These are essentially the same function, except that createElement returns the created form element object without adding it to the form<...>You should typically use addElement, unless you need to perform extra processing on the element before adding it to a form."

Я хочу на этой форме сделать выпадающий список с заголовком "Какую оценку вы хотите за это задание?". Элементами выпадающего списка должны быть цифры от 1 до 5. Закомментировала строки, соответствующие старым элементам управления, т.е. текстовому полю с названием "itask name", и дописала в файл <...>/itask/submit_form.php следующие строки:
При открытии activity Moodle стал ругаться на функцию get_string(). Похоже, настала пора разобраться с русификацией.

Вот тут написано, что синтаксис у функции get_string другой. Должен быть еще один параметр - имя модуля, т.е. в данном случае надо писать "get_string('left_label', 'itask')". Далее, в каталоге <...>/itask/lang создала папку с названием "ru". Скопировала туда из папки <...>/itask/lang/en файл itask.php.

В конец файла <...>/itask/lang/en/itask.php дописала такую строку: "$string['left_label'] = 'left label';", а в конец файла <...>/itask/lang/en/itask.php - такую - "$string['left_label'] = 'Выберите себе оценку';".

Первый раз при запуске activity типа itask показались какие-то кракозябры. Я пересохранила файл <...>/itask/lang/en/itask.php в кодировке UTF8, потом открыла его в программе Notepad++, увидела там кракозябры, переправила, нажала "сохранить как", в открывшемся окне нажала "сохранить". Потом обновила модуль (изменив файл version.php, Администрирование->Уведомления в самом Moodle) и увидела, что русификация заработала:

Создание модуля в Moodle 2.x типа activity (часть 5)

В этом посте была описана попытка видоизменения формы, которая отображается на экране, когда открываешь некий activity типа itask. Застряла на том, что параметры $id и $n получают только значения по умолчанию. Немного потыкав то-се, выяснила, что правильнее использовать следующий код:
В этом случае начинает создаваться экземпляр класса "mod_itask_submit_form", запускается function moodleform_mod($current, $section, $cm, $course), но затем эта функция выводит следующее сообщение об ошибке: "Use $modname parameter or rename form to mod_xx_mod_form, where xx is name of your module". Поскольку эта функция ожидает, что имя вызвавшего ее класса должно иметь вид "mod_itask_mod_form", а я не могу переименовать этот класс (такой уже есть), надо как-то понять, как можно использовать параметр $modname. Я не поняла, и начала искать другой путь.

Следующей идеей было посмотреть, а как же вызываются в других модулях формы с именами, отличными от "стандартных". Наугад зашла в модуль "glossary" и увидела там файл import_form.php. В этом файле определен класс "mod_glossary_import_form", являющийся расширением класса "moodleform". Поэтому я решила попробовать также сделать класс "mod_itask_submit_form" расширением класса "moodleform". В файле <...>/itask/submit_form.php поменяла соответствующую строку, также закомментировала строку
(Moodle на нее ругался при отладке). Затем в файле view.php оставила следующие строки после строки с add_to_log:
И вот что стало показываться при открытии activity типа itask:
Ура!Заработало:)

А строки эти с $id и $n лучше вернуть к первоначальному виду, а то когда открываешь то одно activity типа itask, то другое, выскакивает ошибка - что-то связанное с базой данных.

воскресенье, 8 января 2012 г.

Создание модуля в Moodle 2.x типа activity (часть 2)

К сожалению, при попытке сохранения activity типа itask (см. предыдущий пост) выдается ошибка: "moodle_database::insert_record_raw() no fields found". Поизучала исходники moodle и обнаружила, что в папке шаблона модуля в файле lib.php есть такие строки:
В результате заполнения пользовательской формы в базу данных должна добавляться запись. По-видимому, нужно явным образом описать заполнение всех полей при добавлении этой записи (поскольку в таблице itask есть куча полей, и среди них наверняка есть обязательные к заполнению без значений по умолчанию). Добавила соответствующие строки:
Не помогло. Также заметила, что в XMLDB editor'е перед редактированием таблиц отображается странное значение поля Path: "mod/newmodule/db" (наверное все-таки должно быть "mod/itask/db". Зашла в /db/install.xml и поменяла значение тега "XMLDB PATH". Тоже не помогло.

Потом тут вычитала, что человеку удалось соединить Moodle 2.0 и вот этот вот шаблон модуля. Отмечу, что для локального тестирования лучше скачивать Moodle for Windows. Ура! Для вышеуказанного шаблона модуля и релиза Moodle 2.0.7 for Windows эта ошибка не выдается:)

Создание модуля в Moodle 2.x типа activity (часть 1)

Модули типа activity в Moodle позволяют вовлечь студентов в некоторую "образовательную деятельность": интерактивное решение тренировочных задач, видеочат с учителем и группой других студентов, и т.д. По результатам участия в такой деятельности студенты могут получать оценки.

Насколько мне известно, информация по созданию таких модулей пока доступна только по Moodle 1.9. В данном посте будут изложены результаты по адаптации этой информации к Moodle 2.2.

Для начала необходимо скачать шаблон нового модуля. Я назвала свой модуль itask (поскольку в дальнейшем его планируется переделать в модуль для интерактивного решения задач). Далее во всех файлах с расширением php скачанного шаблона необходимо поменять слова newmodule и NEWMODULE на itask и ITASK соответственно. Я это сделала с помощью программы TextCrawler. Также в папке <...>/lang/en необходимо поменять имя файла с newmodule.php на itask.php. Затем переименовываем скачанную папку шаблона модуля в itask и копируем ее в корень папки /moodle/mod (в этой папке содержатся все модули).

Согласно туториалу, редактируем базу данных с помощью XMLDB editor, обновляем файл version.php, и т.п. В общем, выполняем п. 6 и 7 туториала.

Далее, согласно книге "Moodle 1.9 Extension Development", мы должны отредактировать в папке нового модуля файл mod_form.php. В результате ее редактирования мы должны получить форму вот такого вида:
Эта форма появляется на экране, после того, как к некоторой теме (или неделе курса, смотря как у кого в настройках) добавляется activity типа itask:
Пока шаблонный код не отредактирован, эта форма выглядит вот так:
Попробуем видоизменить эту форму так, чтобы на ней осталось только единственное обязательное поле "itask name". Для этого закомментируем некоторые строки, обновим файл version.php, далее в меню Moodle зайдем в Администрирование->Уведомления и нажмем там кнопку "Обновить". Ниже приведен код, оставшийся незакомментированным в теле функции definition (файл mod_form.php):
Этот код генерирует вот такую форму:

Архив блога