( с http://habrahabr.ru/blogs/i_am_advertising/93705/)
Почти полгода назад я написал на хабре статью о проекте математической поисковой системы uniquation.ru. Тогда была получена конструктивная критика, которая помогла улучшить проект.
С тех пор проект претерпел множество изменений, главное из которых — визуальный ввод формул — теперь, чтобы найти информацию о каком либо математическом объекте, необязательно знать его представление в формате TeX.
О влиянии хабра
В развитии проекта было несколько переломных точек, первая — это участие в Imagine Cup 2009, когда он был представлен публике, второй — запуск альфа-версии и анонс на хабре. После этого события со мной связался создатель dxdy.ru, и в результате сотрудничества появилась специализированная версия поиска, которая ищет только по этому форуму — uniquation.ru/dxdy, а на самом форуме — форма поиска.
В свою очередь, после прочтения статьи на хабре Опыт создания решебника на базе MediaWiki, уже я связался с автором и предложил сотрудничество — результат тот же: специализированная версия с поиском по pluspi.org — uniquation.ru/pluspi и форма поиска на сайте решебника.
Я абсолютно уверен, что эти изменения произошли бы и без влияния хабра, но позже; а раннее их внедрение спровоцировало рефакторинг кода пауков, а также части индексатора, что благотворно повлияло на архитектуру, и даже сейчас те изменения способствуют более быстрому изменению кода.
Об изменениях
Самые важные изменения с момента предыдущего запуска: добавление визуального ввода формул и группировка одинаковых по смыслу формул в выдаче. Первое позволяет пользоваться системой, не зная теха, а второе — получить нужный результат быстрее, так как теперь при запросе '\sin(x+y)' первая страница поисковой выдачи не замусорена формулами вида: '\sin(a+b)' и '\sin(x+y)' — и содержит, скорее всего, искомую формулу синуса суммы.
Кроме этого на сайте появился интерактивный учебник по языку TeX, который может быть полезен тем пользователям, которые не используют windows7.
О технологиях
Основной подход при разработке системы в выборе технологий очень прост — писать на том, на чем умею, и стремиться избежать vendor lock-in. В данном случае это язык C# и две реализации платформы: mono и .net framework.
К сожалению, исключить vendor lock-in на клиенте не удалось, так как сносный компонент для визуального ввода формул доступен в виде COM-компонента windows 7, а единственной платформой RIA с доступом к COM является silverlight 4. Его выход около месяца назад позволил быстро реализовать ввод формул.
В текущий момент идет работа над тем, чтобы сделать серверную часть распределенной. Модификация работы с базой данных позволила свести любую операцию к чтению или записи по ключу, что прекрасно ложиться на DHT. Пока используется MySQL, но, возможно, в будущем это будет что-нибудь из мира NoSQL.
Другим аспектом (помимо базы данных) создания распределенной системы является реализация общения между машинами. Стремление держаться подальше от vendor lock-in наложило табу на WCF и MSMQ, а желание минимизировать воздействие на будущее неудачными архитектурными решениями сегодня спровоцировало выбор независимых систем кодирования и передачи сообщений. В качестве кодирования была выбрана Protocol Buffers от Google — конце концов Uniquation — тоже поисковая система:) Проблема заключалась в том, что Google предоставляет API только для C++, Java и Python, а сторонние библиотеки являются слишком молодыми и тяжелыми. В качестве решения я впервые использовал IKVM.NET — программу, которая одной командой превращает java's jar в .net's dll. Данное приложение уже сейчас позволяет сконвертировать проект уровня eclipse)
О будущем
Будущее — это хорошо забытое прошлое.
Данная фраза работает и здесь. Еще в комментариях к прошлому посту была высказана идея о поиске не конкретного решения, а класса решений, совместимых с данным запросом — это позволит развить поисковую систему математической информации в CAS. Мы выступали на втором Hackday'е с этой идеей и заняли второе место, данный прототип назывался GaloisWiki (его анонс на hackday2).
Процесс работы над GaloisWiki:
Я пошел ставить win7 на виртуалку, очень уж вкусно это выглядит…
Жаль нет возможности попробовать в Linux :(
Ну да ладно… переживу…
зато есть возможность подтянуть тех :)
Не посмотрев видео сначала даже испугался, показалось что формулы можно рисовать от руки. Оказалось что так оно и есть.
Хм, мало того что привязались к Sliverlight, так еще и на Win7 завязались. И это не десктопное приложение!
Я так понимаю что распознавание идет на клиенте и это существенно сужает возможности. Попробуйте сделать на сервере, а от клиента возьмите только ввод, который можно даже на JS сделать.
>>> К сожалению, исключить vendor lock-in на клиенте не удалось, так как сносный компонент для визуального ввода формул доступен в виде COM-компонента windows 7, а единственной платформой RIA с доступом к COM является silverlight 4.
Делать подобный ввод на JS — целая эпопея, ведь готового такого точно нет.
На Хабре относительно недавно проскакивала реализация простенькой рисовалки на HTML+CSS+JS, правда за полминуты я найти не сумел. Но то, что это было — факт.
Тут, как вы могли заметить, далеко не простенькая рисовался, а уже готовый компонент распознавания формул. Проблема не в рисовании на канвасе, а распознавании рукописного текста. Но главная проблема для сервиса — готовой либы нет.
В таком случае сервер на Windows с Silverlight должен быть. В JS координаты, шлем на сервер, скармливаем распознавалке, назад забираем формулу и т.д.
Так как Silverlight 4 можно запускать вне браузера и установить на машину, то в каком-то смысле это десктопное приложение)
К сожалению, это сложно и долго, хотя и возможно. Например, несколько месяцев назад нашел интересный проект, который позволяет рукописный символ перевести в TeX команду — detexify.kirelabs.org/classify.html реализовано на JS + Canvas с распознаванием на сервере.
Привязка к Silvelight точно не минус, такая же платформа как и другие, а Win7 имеет замечательную системную возможность и уж точно не вина разработчиков этого поисковика, что другие системы не имеют такой встроенной возможности.
Офигенно. Выпустите клиента для iPad: такого типа ввод данных — его стихия. А в итоге получится отличный визуальный калькулятор.
Возможно… Я знаю, что есть такой визуальный калькулятор под Symbian — betalabs.nokia.com/apps/handwriting-calculator
славно славно, конечно платформа подкачала, но как оно справиться с более сложными задачями? точно так же? нужно поискать какойто хороший учебник по высшей математике, или лутше какую нибудь свеженькую десертацию или что то подобное…
Очень круто! Молодцы!
Выглядит очень здорово, но silverlight всё портит. Я, к сожалению, не смогу воспользоваться. Хотя с другой стороны, линуксоиды, не имеющие silverlight не редко владеют TeX'ом.
Все портит отсутствие silverlight у вас :)
у меня есть Silverlight, но Win7 в требованиях удручает больше
Отлично, впечатляет, хоть я и далек от математики. Когда удастся сделать без привязки к ОС и силверлайт — ждите предложения о покупке от Гугл :)
Если учесть что это делает в реал-тайме то нужно еще + 5 к карме приписывать разработчикам алгоритма :)
Выглядит мегакруто!
Такую штуку бы для студенческих форумов, и желательно на флеше.
Некоторые студенческие уже индексируются — dxdy.ru и mathforum.ru.
Рукописный ввод и распознавание — это, конечно круто… только, как я понял, это только для windows 7.
А насчёт форумов и флэш: Давным-давно делали такую штуку для математических задач. Затем было желание сделать на mathML и реализовать компонент для форумов, но как-то не сложилось…
Если интересно — пишите в личку.
А каким средством вы распознаёте нарисованные формулы?
Это стандартный COM-компонент windows7 — Math Input Panel.
На странице ошибка: uniquation.ru/lessons/lesson07.aspx
не могу тест полностью пройти, пишу для самопроверки у выражение
\lim_{n \to \infty}n^{\frac{1}{n}}
Пишет, что неверно, хотя вот здесь ru.numberempire.com/texequationeditor/equationeditor.php
Все правильно получается.
забыли про '=1', нужно ввести: '\lim_{n \to \infty}n^{\frac{1}{n}}=1'
понял… спасибо
А я всегда пользуюсь Wolfram Alpha
Я тоже) но uniquation и wolframalpha — разные продукты. Один ищет, другой считает. Когда поиск будет доделан (добавиться GaloisWiki), то на большом классе математических задач uniquation будет искать так же хорошо, как wolframalpha считает, а может и лучше) На hackday2 был показан прототип, давал больше нужной информации, чем wolframalpha.
Это конечно здорово. Но в Wolfram Alpha подключена Wolfram Mathematica, что очень удобно, так как можно подсчитать то что нужно прямо на сайте. Плюс там собственная база объективных данных.
Наконец-то я нашёл как решать уравнение вида
x^x=a
Я недавно, полазив по sourceforge, встречал веб решения на математическом ядре maxima.
Самая очевидная область применения визуального ввода — мобильные устройства. Я как студент-математик, задалбывающийся набором этих всех выражений на клавиатуре мобильника в вольфрам, считаю это очевидным. И вот появляется как раз то, что нужно, и как раз не работает. Обидно даже.
Но в общем — молодцы, реализуете перьевой под мобильники — цены вам не будет.
Можно реализовать что-то подобное:
Будет кроссплатформенно (даже на мобильниках пойдёт). Мне так даже больше бы нравилось.
Теперь все смогут решать матановую капчу! А так — очень прикольно. Я, конечно, не ввожу безумные мат. формулы, а те что ввожу — быстрее в вольфраме с клавиатуры получаются.
Хотя наверное на яПрокладке или планшете с пером будет удобнее…