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