tel8618217223380 / oasychev-moodle-plugins

Automatically exported from code.google.com/p/oasychev-moodle-plugins
0 stars 0 forks source link

Подсказки для mistakes from lexical_analyzer и вообще подготовка к релизу #337

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
a)typo_mistake
1) what_is - показывает текст лексемы. Код уже 
существует, нужно только проверить его в 
смысле того, какую именно лексему он 
показывает - правильное написание или 
ошибочное - раньше они были одинаковыми. 
Интересный вопрос, какое именно надо 
показать. Я за ошибочное, иначе это уже 
подсказка как исправить. Могу взять на себя.
2) how_to_fix_pic - картинка с исправлением 
лексемы, можно ре-юзе из существующего кода 
отрисовки большой картинки

b) лишний и пропущенный разделители
1) what_is - аналогично, показывает текст 
лексемы (лексем) в ошибочном написании. 
Могу взять на себя.
2) how_to_fix_pic - показывает как склеить или 
разделить лексемы (надо ли?). Можно ре-юзе из 
существующего кода большой картинки, 
только здесь уже обе строки показываются - 
как склеивается или расходится на 
несколько лексема.

Других вариантов придумать не могу. Есть 
идеи?

Original issue reported on code.google.com by oasyc...@gmail.com on 20 Mar 2015 at 12:29

GoogleCodeExporter commented 9 years ago
wherepic на данный момент не работает вообще и 
картинку не генерирует

whatis показывает текст из правильного ответа.

Original comment by oasyc...@gmail.com on 20 Mar 2015 at 11:21

GoogleCodeExporter commented 9 years ago
wheretxt как я понимаю тоже не работает. 

При первой возможности постараюсь все 
поправить.

Original comment by mamontov...@gmail.com on 21 Mar 2015 at 6:03

GoogleCodeExporter commented 9 years ago
C wheretxt проблем не обнаружил. Возможно нужны 
более хитрые тесты.

Original comment by oasyc...@gmail.com on 21 Mar 2015 at 1:34

GoogleCodeExporter commented 9 years ago
what_is пофикшено и сделано, чтобы для ошибки 
перемещения, описание бралось из ответа 
студента.
Новую версию wherepic протестировал еще на 
перемещении и удалении, а так же вставке 
лишних лексем. Вроде проблем нет, все 
рисуется правильно.

how_to_fix_pic будет позднее. Кстати, может 
выберем для нее более короткое название? А 
то в ограничение таблицы хинтов на 12 
символов можем не влезть...

Original comment by mamontov...@gmail.com on 30 Mar 2015 at 7:58

GoogleCodeExporter commented 9 years ago
what_is должна использовать ответ студента 
всегда кроме удаления, т.е. и для опечаток и  
т.д. - не только для перемещения

how_to_fix_pic можно конечно fix_pic наверное 
назвать. А в надписи уже "Hint how to fix typo" (или 
другой вид ошибки).

Original comment by oasyc...@gmail.com on 30 Mar 2015 at 8:43

GoogleCodeExporter commented 9 years ago
Она и использует теперь.

Original comment by mamontov...@gmail.com on 31 Mar 2015 at 6:08

GoogleCodeExporter commented 9 years ago
Залил на edu.vstu.org свежую версию плагина из 
репозитория, которая включает в себя 
реализацию how_to_fix_pic .

Original comment by mamontov...@gmail.com on 31 Mar 2015 at 7:22

GoogleCodeExporter commented 9 years ago
Потещу в ближайшие пару дней - редактировал 
статью Бирюковой, высплюсь - проверю.

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

Original comment by oasyc...@gmail.com on 1 Apr 2015 at 1:20

GoogleCodeExporter commented 9 years ago
А можно меня тогда в соавторы её внести? 
Просто получается что часть материалов 
статьи готовил я...

Original comment by mamontov...@gmail.com on 1 Apr 2015 at 8:04

GoogleCodeExporter commented 9 years ago
Я уже думал об этом. :)

Но тогда вам еще помочь Маше с поиском 
необходимых ссылок (я ей там замечания 
накидал где точно надо) и составление 
приличного списка источников.

Original comment by oasyc...@gmail.com on 1 Apr 2015 at 8:43

GoogleCodeExporter commented 9 years ago
Ну, мне и так все равно собирать статистику. 
Списком больше, списком меньше...

Original comment by mamontov...@gmail.com on 1 Apr 2015 at 9:11

GoogleCodeExporter commented 9 years ago
Мария и Дмитрий - надо разобраться что 
происходит с Lexical error threshold. Он либо не 
влияет на генерацию прав, либо криво 
передается.

Полюбуйтесь на вопрос 
http://edu.vstu.org/question/preview.php?id=20&courseid=2 
Он должен получать в качестве ответа
unsigned short int separator ;
Введите ему
unsi gned shartint separator ;

и полюбуйтесь как он залихватски 
исправляет опечатки больше 50% длины слова 
при Lexical error threshold в настройках вопроса 0,1 
(кстати, это значение по умолчанию скорее 
всего слишком низкое для правильной работы 
- надо уточнить по налаживанию приличное 
значение по умолчанию).

Просьба разобраться на каком участке кода 
проблема (неправильно сохраняется в 
вопросе, криво передается в lexical_analyzer или до 
look_for_matches - или look_for_matches так его 
замечательно игнорирует... И пофиксить, а 
также подобрать вменяемое значение по 
умолчанию...

Original comment by oasyc...@gmail.com on 1 Apr 2015 at 6:42

GoogleCodeExporter commented 9 years ago

Original comment by oasyc...@gmail.com on 1 Apr 2015 at 6:43

GoogleCodeExporter commented 9 years ago
И Дмитрий, не забывайте вытягивать когда я 
выталкиваю свои коммиты, мержить же 
приходится...

Original comment by oasyc...@gmail.com on 1 Apr 2015 at 6:48

GoogleCodeExporter commented 9 years ago
Кстати, по списку литературы. Почему для 
опечаток нельзя сослаться на доклад 
Левенштейна, который есть в списке 
литературы? Вроде бы он излагал там, что тот 
набор ошибок является оптимальным, и 
опирался как раз на статистику... 

Original comment by mamontov...@gmail.com on 1 Apr 2015 at 7:57

GoogleCodeExporter commented 9 years ago
Все кроме этого по списку написал 
Бирюковой.

Original comment by mamontov...@gmail.com on 1 Apr 2015 at 8:18

GoogleCodeExporter commented 9 years ago
Есть куда более плохая ситуация. На 
сравнении ответов в 14+ лексем программа 
съедает всю память в recurcive_backtracking. Как 
оказалось - такие ответы весьма 
реалистичны. 

Original comment by mamontov...@gmail.com on 2 Apr 2015 at 7:05

GoogleCodeExporter commented 9 years ago
Брр. С чего бы рекурсии жрать столько 
памяти, это ж не в ширь, а в глубь.
а) надо прежде всего пофиксить проблему с 
пределами, которую я вчера нашел. Там 
количество генерируемых пар и 
соответственно объем бэктрекинга может 
резко упасть в этом случае - и все будет 
нормально
б) если рекурсия жрет много памяти - туда 
скорее всего криво передаются параметры, 
где-то происходит копирование массива или 
чего-то подобного в рекурсивном вызове; 
обычно нахождение такого параметра и 
передача ссылки вместо копии проблему 
решает (в PHP можно сделать объект - как бы 
там не массивы целых чисел копировались 
при передаче...).

Еще если там new где-то внутри рекурсивной 
функции - надо delete сделать когда не нужно.

Original comment by oasyc...@gmail.com on 2 Apr 2015 at 7:21

GoogleCodeExporter commented 9 years ago
Как я понял, там просто очень много пар 
создается. Надо бы еще выцепить саму 
ситуацию, в общей картине её не видно. 
Вообще, этому коду реально нужен 
рефакторинг, все эти bloking, unlock и прочее 
неподдерживаемы толком.

Original comment by mamontov...@gmail.com on 2 Apr 2015 at 8:03

GoogleCodeExporter commented 9 years ago
Примеры мест где тормозит:

Ответ студента    Правильный ответ
float projection[4] [4];  float projection[4];
p=p+p2-p1;  p += p2-p1;

Видно, что здесь много совпадений. Нет ли 
возможности как-то оптимизировать перебор?

Original comment by mamontov...@gmail.com on 2 Apr 2015 at 8:09

GoogleCodeExporter commented 9 years ago
Еще:
int n=(*ptr)*2; и int n = 2 * *ptr;

Original comment by mamontov...@gmail.com on 2 Apr 2015 at 8:30

GoogleCodeExporter commented 9 years ago
Ну вот во-первых - очень много пар может 
создаваться еще и из-за того странного 
бага, где очень много ошибок дозволяется в 
слове.

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

Перебор там хитрый, там нужно подобрать 
набор пар так, чтобы не использовать ни 
одну лексему дважды, по двум критериям 
оптимизации
а) использовать максимальное количество 
лексем
б) при равном количестве лексем 
минимизировать суммарное редакционное 
расстояние

Как это сделать оптимальнее чем перебор с 
отсечениями - вопрос интересный...

Original comment by oasyc...@gmail.com on 2 Apr 2015 at 8:34

GoogleCodeExporter commented 9 years ago
Вы забываете, что GC в PHP очень примитивный и 
вообще старается не собирать мусор почти 
никогда. Сам язык не был на это рассчитан.

Но дело не в этом - я напихал в некоторые 
места gc_collect_cycles, что должно было заставить 
его работать быстрее.

Однако, как я понимаю, что он находит очень 
много лишних пар, потому что ошибка 
происходит либо до, либо во время обхода 
массива status.

Я завтра посмотрю, можно ли как-то обойти 
через верное использование lexicalerrorthreshold, но 
на высоких его значениях проблема 
останется.

Original comment by mamontov...@gmail.com on 2 Apr 2015 at 8:40

GoogleCodeExporter commented 9 years ago
Пары составляются в look_for_matches, если порог 
взять 100% то пар будет вообще жуткое 
количество, порог должен сильно влиять на 
число пар...

Original comment by oasyc...@gmail.com on 2 Apr 2015 at 8:46

GoogleCodeExporter commented 9 years ago
Сейчас порог как-то странно считается - в 
block_formal_langs_token_base::look_for_matches считается

$result = core_text::strlen($this->value) - core_text::strlen($this->value) * 
$threshold; ($threshold - наш родной $lexicalerrorthreshold).

Далее с округленной версией этого 
сравнивается расстояние с другой лексемой 
в операциях и расстояние вернется верно 
только в  этом случае.

Такое ощущение что тут две ошибки:

1) Если лексема не из правильного ответа, то 
операции будут сравниваться с порогом из 
сравниваемого ответа, что недопустимо

2) Должно хватить просто 
ceil(core_text::strlen($this->value) * $threshold)

Original comment by mamontov...@gmail.com on 2 Apr 2015 at 8:52

GoogleCodeExporter commented 9 years ago
Ссылку на код киньте, хочу глянуть чот с 
этим result делается...

А то формула прямо странная - получается 
что порог интерпретируется прямо наоброт 
что-ли - чем ниже порог тем больше ошибок 
позволяется??

Original comment by oasyc...@gmail.com on 2 Apr 2015 at 9:02

GoogleCodeExporter commented 9 years ago
Как я понимаю, да.

https://code.google.com/r/mamontovdp-mariabirvg-formallangs/source/browse/blocks
/formal_langs/tokens_base.php

см. с. 709-715

Original comment by mamontov...@gmail.com on 2 Apr 2015 at 9:14

GoogleCodeExporter commented 9 years ago
result это количество символов на которое 
могут отличаться 2 лексемы.
соответственно, если порог 0,3, то для 10 
символов - отличие составляет 7 символов
для порога 0,7, только 3 символа. Расчет 
корректен

Original comment by mariabi...@gmail.com on 3 Apr 2015 at 11:53

GoogleCodeExporter commented 9 years ago
int y=hypercube[4][5][9][14]; и int hypercube[5][6][8][10][15]; 
hypercube[0][0][0][0][0]= 0; 

Ещё вариант, на котором много проблем.

Original comment by mamontov...@gmail.com on 5 Apr 2015 at 7:37

GoogleCodeExporter commented 9 years ago
не удивительно что в нем много проблем. 
Наборов создается много из-за скобок 
одинаковых

Original comment by mariabi...@gmail.com on 7 Apr 2015 at 7:59

GoogleCodeExporter commented 9 years ago
не удивительно что в нем много проблем. 
Наборов создается много из-за скобок 
одинаковых

Original comment by mariabi...@gmail.com on 7 Apr 2015 at 7:59

GoogleCodeExporter commented 9 years ago
Дописал разбор дерева для языков C\C++.

Original comment by vad23k...@gmail.com on 16 Apr 2015 at 2:38

GoogleCodeExporter commented 9 years ago
Добился более-менее стабильной работы 
модуля в этом моменте. Задеплоил текущий 
код на edu.vstu.org, с учетом enum_analyzer. 

Однако при слиянии от Вадима прилетело две 
ветки. Я сливался с 2313, в которой вроде 
последние коммиты. Помимо этого, при 
слиянии оказалось, что  
qtype_correctwriting_string_pair::clone дублируется, перенес 
код из второй в первую.

Залил - вроде бы работает. Задачу по 
добавлении поля для перечислений ставлю 
отдельно.

Original comment by mamontov...@gmail.com on 1 May 2015 at 11:42

GoogleCodeExporter commented 9 years ago
1) При слиянии и развертывании, а также 
создании вопросов возникла проблема - в 
форме нет настройки для включения 
анализатора перечислений. Вадим, в вашем 
репозитории она есть (в смысле она 
перезатерлась в моем, а у вас нормально), 
или реально что-то не так? Да и строк 
локализации недостает для формы, пока 
сделал свои. 

2) По умолчанию также в объекте question 
включены enum_analyzer и syntax_analyzer, предлагаю 
выключить оба (на всякий случай).

3) Также, если этого нигде нет - мне 
изменения лучше вытолкнуть их в 
https://code.google.com/r/mamontovdp-mariabirvg-correctwriting2-enumsupport/sour
ce/browse (так как там изменения для него 
координируются). Или в какой-то другой 
лучше выталкивать?

4) Ещё заметил, что is_lang_compatible никак не 
проверяется при валидации формы - думаю, 
что надо тоже проверять. Думаю, надо 
проверять.

Пока создал тестовые вопросы в Hinting question 
types, можно попробовать и протестировать их. 
Все вопросы названы следующим образом: 
Question of XXX analyzer (setting test)

Original comment by mamontov...@gmail.com on 8 May 2015 at 8:47

GoogleCodeExporter commented 9 years ago
Что сейчас сделано плохо со стороны Вадима:

1) Переименовать qtype_correctwriting_proccesedstring в 
qtype_correctwriting_processed_string (серьезно)

2) Привести код строки к исправленному (см. 
приложение) + убрать лишние геттеры и 
сеттеры из магических методов. Текущий код 
в твоем репозитории рушит систему геттеров 
и сеттеров от родительского кода.

3) Исправить warning на главном сервере.

Необходимо исправить в течение пары дней.

Также мне очень не нравится то, что много 
патчей не моего кода находятся у меня в 
локальном репозитории. Предлагаю создать 
репозиторий для подготовки к релизу.

Original comment by mamontov...@gmail.com on 13 May 2015 at 6:56

Attachments:

GoogleCodeExporter commented 9 years ago
Первые два поправил, занят warning'ом.

Original comment by vad23k...@gmail.com on 15 May 2015 at 11:34

GoogleCodeExporter commented 9 years ago
Варнинг закрыт, теперь не предлагает 
подсказку, но все равно пишет что ответ 
почти правильный. Не знаю с чем это 
связанно.

Original comment by vad23k...@gmail.com on 20 May 2015 at 10:17

GoogleCodeExporter commented 9 years ago
А сами перечисления генерируются? Кроме 
этого - откуда надо вытянуть код?

Original comment by mamontov...@gmail.com on 21 May 2015 at 4:24

GoogleCodeExporter commented 9 years ago
Да, генерируются.

Сейчас вытолкну в 
https://code.google.com/r/vad23klev-clone-to-support-enumerations/source/browse 

Original comment by vad23k...@gmail.com on 21 May 2015 at 9:36

GoogleCodeExporter commented 9 years ago
Вытолкнул. Еще заметил что в слитой версии, 
нехватает моей настройки для количества 
порядков. Она позволяет настроить 
производительность. Ее стоит вернуть.

Original comment by vad23k...@gmail.com on 21 May 2015 at 10:01

GoogleCodeExporter commented 9 years ago
Кинь мне ссылку на файл репозитория, где 
она находится, чтобы я быстро слил. 

Original comment by mamontov...@gmail.com on 21 May 2015 at 10:05

GoogleCodeExporter commented 9 years ago
https://code.google.com/r/vad23klev-clone-to-support-enumerations/source/browse/
question/type/correctwriting/settings.php

Original comment by vad23k...@gmail.com on 21 May 2015 at 10:10

GoogleCodeExporter commented 9 years ago
Вадим, а у вас есть тест на такое же 
объявление структуры, как я создал на 
edu.vstu.org? Если нет, то создайте и проверьте, 
особенно enum_catcher. У меня почему-то не 
переставляются лексемы, я отладил и пришел 
к тому, что это потому что enum_catcher в момент 
оценки не возвращает перечисления.

Original comment by mamontov...@gmail.com on 25 May 2015 at 6:15

GoogleCodeExporter commented 9 years ago
Снимаю вопрос, какая-то совершенно 
сумасшедшая ошибка в парсере возникла.

Original comment by mamontov...@gmail.com on 25 May 2015 at 6:24

GoogleCodeExporter commented 9 years ago
Нашел в чем было дело. Исправлено в 
mamontovdp-mariabirvg-formallangs. В ближайшее время залью 
на главный сервер, но сначала сольюсь с 
кодом Вадима.

Original comment by mamontov...@gmail.com on 25 May 2015 at 6:56

GoogleCodeExporter commented 9 years ago
Перезалил, исправил все проблемы.

Что осталось с моей стороны:

1) Сейчас валидация зависимостей 
анализаторов и их зависимостей от языков 
захардкожена. Надо поправить, сделать как 
полагается.

2) ??? (Есть ли еще какие-то проблемы, которые 
должен я сделать и протестить, кроме 1?)

Original comment by mamontov...@gmail.com on 25 May 2015 at 7:29

GoogleCodeExporter commented 9 years ago
Как, вариант, можно рискнуть и заняться 
https://code.google.com/p/oasychev-moodle-plugins/issues/detail?id=333&colspec=I
D%20Type%20Status%20Priority%20Component%20Milestone%20Owner%20Summary . 
Например добавить в глобальный конфиг 
параметр, который будет менять поле answer на 
textarea.

Original comment by mamontov...@gmail.com on 25 May 2015 at 7:36

GoogleCodeExporter commented 9 years ago
UPD. Переделал валидацию формы. Теперь 
работает, как полагается.

Original comment by mamontov...@gmail.com on 25 May 2015 at 8:24

GoogleCodeExporter commented 9 years ago
1)  enum+sequence
struct  MyNiceStructure {  long Padding;int   char  SmallPart; FirstField; } 
DefaultValue;
очень странные ошибки
  name of long integral field is missing; there is extra ""FirstField"".
хотя там только переставлено

2)  lexical+enum+sequence
struct  MyNiceStructure {  long Padding;  char  SmallPart;intFirstField;  } 
DefaultValue;
ошибки выводятся верно, но картинка крайне 
глючная

Original comment by oasyc...@gmail.com on 26 May 2015 at 12:52

GoogleCodeExporter commented 9 years ago
В пункте 2) имеется ввиду большая картинка. 
Картинка при хинтах в порядке, как и все 
хинты.

Original comment by oasyc...@gmail.com on 26 May 2015 at 3:23