Случилось так, что перед поездкой в Италию мне захотелось выучить, хотя бы чуть-чуть, итальянский язык. Для изучения иностранных языков сейчас есть множество различных программок, в том числе и те, что устанавливаются на мобильные телефон и когда, например, стоишь в очереди ты можешь учить иностранные слова, с пользой проводя время. Но, к сожалению, я не нашёл ни одной программы, которая позволяла бы, скажем, изучать неправильные глаголы, или скажем, для японского языка, изучать канзи и различные варианты их написания. Кроме этого, большинство таких программ или ориентированы только на работу с сайтом, либо только позволяют работать с фиксированными словарями без возможности редактировать сами словари. А ведь иногда бывает так - видишь незнакомое слово, хочется его добавить в программу и потом его периодически повторять. Поэтому, я задумал создать свой сервис для изучения иностранных языков, такой которой пригодился бы лично мне.
Несколько месяцев проектирования и, в-черне, прототип заработал. Пока это даже еще не бета, но основные функции уже реализованы. Проект пока не имеет постоянного адреса а живет на http://langs.cpage.ru/. Как только я придумаю как его обозвать сразу перенесу.
Что реализовано:
-
регистрация на сайте;
-
работа со словарями: возможность добавления, редактирования и удаления словарей;
-
работа с несколькими устройствами - пока это только телефоны на Android;
-
возможность скопировать словарь ближнего своего и работать как со своим;
-
поддержка нескольких форм перевода;
-
возможность учить неправильные глаголы;
-
возможность учить варианты произношения канзей японского языка;
-
самое главное: двусторонняя синхронизация между сайтом и мобильным клиентом;
-
создан мобильный клиент под Андроид;
Что планируется:
-
Большая работа по улучшению эргономики сайта и клиента
-
Перевод сайта на несколько языков
-
Создание клиентов под iOS и WP а также клиентов для Windows и Linux
Вот пока и всё. Всем кому интересно предлагаю протестировать сервис. Сначала нужно зарегистрироваться, скачать мобильный клиент на телефон (пока только под Android 2.2). В маркете его пока нет. Все фичреквесты можно писать в комментарии к этой записи, обязательно постараюсь учесть любые пожелания. Ну и критика приветствуется.
Иногда на сервере происходят сошибки типа "mysql server has gone away". Ошибка весьма досадная тем, что возникает она не всегда а только иногда. При этом, путем эмпирических действий удалось выяснить, что такое сообщение вызывается если PHP скрипт какое то время чем то сильно был занят и при этом не обращается к базе данных. Когда после некоторго периода бездействия скрипт, наконец хочет что-либо записать в базу данных то обнаруживается, что ссылка на соединение с базой данных уже мертва и все последующие запросы вылетают с ошибкой "mysql server has gone away". Понятно, что соединение с базой данных рвется по некоему таймауту, но вот по какому и как его увеличить?
Оказалось, что дело в переменной wait_timeout которая живет в /etc/my.conf. В моем случае она оказалась установленной в 30 секунд, поэтому, если во время выполнения скрипта между запросами оказывается промежуток более тридцати секунд - соединение рвется и больше не восстанавливается.
Изменить это значение можно либо поправив my.conf, либо после установления соединения выполнив "SET wait_timeout=1000".
Заметил, что моя векторная библиотечка не хочет работать в восьмом эксплорере. При этом в Интернете вообще мало примеров работы VML которые бы оставались работоспособными в этом замечательном браузере. Даже на сайте Microsoft примеры VML которые прекрасно работали в шестой и седьмой версии напрочь отказываются работать в восьмерке.
При этом, вроде бы, иногда, что-то как-то работает в режиме совместимости, но не всегда, и только при определенных условиях типа наличия или отсутствия DOCTYPE и даже версии Service Pack.
Убив день на исследования я так ничего не выяснил. Кто то говорит что нужно переделать все размеры в заданные явно в пикселях, кто-то указывает на баг в количестве каскадных таблиц в IE. Каждый раз когда я, наконец, думал, что локализовал проблему она появлялась с другой стороны.
И вот когда я уже почти собрался переделать код на вывод VML в отдельном iframe который бы работал только в режиме совместимости, я нашел код который работает всегда и всезде во всех режимах - это оказался все тот же raphael. Дмитрий Барановский нашел способ обуздать IE8 - весьма неочевидным и почти магическим способом он заставил это всё работать как надо.
Обновлил свой пример для работы c VML.
Набрёл на интересную бублиотечку для создания простых трехмерных визуализаций с использованием VML. Как следстивие использовазония VML работает это только в Internet Explorer. Интересно, можно ли малой кровью сделать для неё SVG реализацию чтобы она стала полностью кроссбраузерной?
После того, как фрактал в примере получился ну архи ме-е-е-е-е-дленным, решил немного исправить ситуацию. Все дело в том, что данную программку я написал как демо для объекта z.Canvas из z.Tools а z.Canvas - это на самом деле хелпер, который рисует графические примитивы при при помощи SVG и VML в зависимости от того, что доступно в текущем браезере. Идея была сделать именно холст, на котором можно было бы рисовать и в Internet Explorer и во всех остальных браузерах, ведь IE, как известно, до девятой версии не поддерживает SVG. Как следствие, каждый примитив на этом "холсте" будет занимать память, и если нарисовать фрактал из прямоугольников на холсте 300 на 300 пикселей, то компьютеру придется выделить память для девяносто тысяч маленьких объектов, само по себе это не сильно много, но всё равно, значительно тормозит весь процесс.
Переделать это дело на "настоящий" HTML5 canvas было делом нескольких минут, вот она, версия на Canvas, работает значительно быстрее и уже не жрет большого количества памяти.
Уже выложив, придумал, как ещё немного ускорить процесс рисования - сейчас, каждая точка рисуется в отдельном потоке через setTimeOut а это тоже страшно медленно - если делать без setTimeout процесс "подвиснет" пока не завершится рассчет фрактала, но можно сделать, чтобы рисовалась не точка но целая линия - это ускорит весь процесс без "зависания" процесса рисования.