2012-05-05

MySQL сервер ушёл гулять

программирование, PHP

Иногда на сервере происходят сошибки типа "mysql server has gone away". Ошибка весьма достадная, тем что возникает она не всегда а только иногда. При этом, путем эмпирических действий удалось выяснить, что такое сообщение вызывается если PHP скрипт какое то время чем то сильно был занят и при этом не обращается  к базе данных. Когда после некоторго периода бездействия скрипт, наконец хочет что-либо записать в базу данных то обнаруживается, что ссылка на соединение с базой данных уже мертва и все последующие запросы вылетают с ошибкой "mysql server has gone away". Понятно, что соединение с базой данных рвется по некоему таймауту, но вот по какому и как его увеличить?

Оказалось, что дело в переменной wait_timeout которая живет в /etc/my.conf. В моем случае она оказалась установленной в 30 секунд, поэтому, если во время выполнения скрипта между запросами оказывается промежуток более тридцати секунд - соединение рвется и больше не восстанавливается.

Изменить это значение можно либо поправив my.conf,  либо после установления соединения выполнив "SET wait_timeout=1000".

 

Оставить комментарий

 
  2012-04-17

Json vs serialize vs plain php

программирование, PHP

Встал вопрос, в каком виде лучше хранить данные в конфигах. Кажется, что самым простым и надежным было бы использования нативного PHP кода, но почему то в разных популярных системах plain PHP постоянно чем нибудь заменяют.

Чтобы сравнить, что будет быстрее - выполнить PHP файл или распарсерить закодированные данные, написал небольшой скрипт который в цикле делает конфиги и читает их для разного количества переменных. Результаты работы вывели в табличку:

method/число записей 0 10000 20000 30000 40000 50000 60000 70000 80000 90000
json 0.0001 0.0189 0.0380 0.0552 0.0759 0.0911 0.1096 0.1339 0.1494 0.1660
php 0.0001 0.0350 0.0738 0.1111 0.1498 0.1953 0.2275 0.2704 0.3090 0.3466
serialize 0.0000 0.0109 0.0241 0.0357 0.0484 0.0645 0.0671 0.0895 0.1017 0.1183
 

 

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

 

Коментариев: 1

 
  2012-04-04

Infusionsoft SDK для людей

программирование, PHP

Недавно для одного из проектов нужно было реализовать интеграцию с Infusionsoft - это такая прикольная CRM SaaS. Изучая их API я нашёл его очень толковым, но когда я поглядел в их PHP SDK я очень расстроился - это нужно было постараться сделать такое уродливое SDK для такого прекрасного API

Во первых для его работы требуется сторонняя XMLRPC библиотека написанная Эдом Думбилом (Edd Dumbill) в далёком 2002 году, она не произвела на меня впечатления - PHP имеет собственное расширение для xmlrpc которое вполне мне годилось. Кроме того, в каждую функцию нужно было передавать ключ доступа, что очень не красиво. Сам iSDK это один класс с кучей методов, хотя API подразумевает использование нескольких классов. Большинство функций имеют уродливые непонятные имена - может ли неподготовленный человек догадаться, что делает функция addCon или campAssign? Хотя, в самом API все имена функций красивые и интуитивно понятные.

Поэтому я решил сделать своё собственное Infusionsoft SDK так как мне показалось правильным.

Но так как я очень ленивый, создавать SDK ручками я не стал а написал маленький скрипт который сделал почти всё за меня распарсерив их API документацию.

То что получилось, получилось вполне работоспособным, полученный код я выложил на hithub. Вдруг, пригодиться кому нибудь ещё.

Сразу скажу - поскольку из всего API мне нужно было лишь несколько функций тестировал я не все. Нужно будет ещё сделать примеры и документацию к получившимуся SDK но начало положено неплохое. Если есть желающие доработать полученную библиотеку - буду только рад.

 

Оставить комментарий

 
  2012-02-29

VML в IE8

JavaScript, программирование, ztools

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

При этом, вроде бы, иногда, что-то как-то работает в режиме совместимости, но не всегда, и только при определенных условиях типа наличия или отсутствия DOCTYPE и даже версии Service Pack.

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

И вот когда я уже почти собрался переделать код на вывод VML в отдельном iframe который бы работал только в режиме совместимости, я нашел код который работает всегда и всезде во всех режимах - это оказался все тот же raphael. Дмитрий Барановский нашел способ обуздать IE8 - весьма неочевидным и почти магическим способом он заставил это всё работать как надо.

Обновлил свой пример для работы c VML.

 

Оставить комментарий

 
  2012-01-14

Интересная JavaScript библиотека

JavaScript, программирование

Набрёл на интересную бублиотечку для создания простых трехмерных визуализаций с использованием VML. Как следстивие использовазония VML работает это только в Internet Explorer. Интересно, можно ли малой кровью сделать для неё SVG реализацию чтобы она стала полностью кроссбраузерной?

 

Оставить комментарий

 
  2012-01-05

Фракталы на JavaScript, продолжение

JavaScript, программирование, ztools

После того, как фрактал в примере получился ну архи ме-е-е-е-е-дленным, решил немного исправить ситуацию. Все дело в том, что данную программку я написал как демо для объекта z.Canvas из z.Tools а z.Canvas - это на самом деле хелпер, который рисует графические примитивы при при помощи SVG и VML в зависимости от того, что доступно в текущем браезере. Идея была сделать именно холст, на котором можно было бы рисовать и в Internet Explorer и во всех остальных браузерах, ведь IE, как известно, до девятой версии не поддерживает SVG. Как следствие, каждый примитив на этом "холсте" будет занимать память, и если нарисовать фрактал из прямоугольников на холсте 300 на 300 пикселей, то компьютеру придется выделить память для девяносто тысяч маленьких объектов, само по себе это не сильно много, но всё равно, значительно тормозит весь процесс.

Переделать это дело на "настоящий" HTML5 canvas было делом нескольких минут, вот она, версия на Canvas, работает значительно быстрее и уже не жрет большого количества памяти.

Уже выложив, придумал, как ещё немного ускорить процесс рисования - сейчас, каждая точка рисуется в отдельном потоке через setTimeOut а это тоже страшно медленно - если делать без setTimeout процесс "подвиснет" пока не завершится рассчет фрактала, но можно сделать, чтобы рисовалась не точка но целая линия - это ускорит весь процесс без "зависания" процесса рисования.

 

Оставить комментарий

 
  2012-01-03

Фракталы на Javascript

JavaScript, программирование, ztools

Пользуясь небольшим перерывом в эти новогодние каникулы сделал небольшую программку, рисующую жопу множество Мандельброта. Работает, к сожалению, медленнее чем версия на С++, зато картинка получается отменной.

 

Коментариев: 3

 
  2011-10-14

Как найти расстояние между двумя GPS точками

howto, программирование, PHP

Понадобилось посчитать дистанцию между двумя точками заданными в GPS координатах. В PHP реализация такой фунции выглядит следующим образом:

function calcMiles ($Lat1, $Lon1, $Lat2, $Lon2){
    return 3958.75 * acos(  sin($Lat1/57.2958) * sin($Lat2/57.2958) + cos($Lat1/57.2958) * cos($Lat2/57.2958) * cos($Lon2/57.2958 - $Lon1/57.2958));
}

Ответ получается в милях, для перевода в метры, полученное значение нужно ещё умножить на 1609.344.

Код взял с phpclasses.com. Кстати, глядя на код оригинального класса можно сделать вывод, что автор обладает хорошим чувством юмора - он реализовал вывод результата в десятках различных единиц, включая нанометры, парсеки и световые года.

 

Коментариев: 1

 
  2011-10-09

Текстовый редактор под Android

программирование, Java, Android

Выходные провёл с пользой - сделал ещё один простейший текстовый редактор, на этот раз под Андроид. Конечно, уже существует огромное множество готовых редакторов, но мне захотелось создать свой, ведь лучший способ научиться что-либо делать — делать самому. Собственно, идея сделать текстовый редактор появилась после того как я снёс с телефона Ted - работает весьма странно, иногда ни с того ни с сего портит кодировку файла а при сохранении постоянно спрашивает имя сохраняемого файла - это меня сильно достало, ведь сохраняюсь я постоянно, хотя, в целом ted — не плохой редактор.

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

Большое спасибо Александру Понамарёву за классный диалог выбора файлов, без него у меня бы ушло гораздо больше времени.

Ссылка на apk файл.

 

Оставить комментарий

 
  2011-09-29

PCRE поддерживает Posix литералы

PHP, программирование

Я уже писал, что нужно сделать, чтобы заменить в коде Posix регулярные выражения, которые в PHP 5.3 стали deprecated, на Perl совместимые. Оказывается Rerl совместимые регулярные выражения поддерживают литералы используемые в Posix такие как [[:allnum:]], [[:space:]] и т.д. В одном месте чужёго кода заметил это, и вот дошли руки проверить на практике: конструкция вида preg_match('/[[:space:]]/','df d') работает идентично конструкции вида preg_match('/\s/','df d') т.е. совсем не нужно при замене ereg на preg_match заменять еще и литералы, достаточно добавить слева и справа слеши "/". Кстати кроме слешей можно использовать любой другой символ, например "#" это полезно когда в регулярном выражении уже есть слеши - чтобы их не экранировать и не ухудшать читаемость кода.

 

Оставить комментарий

разное (143)
howto (103)
программирование (91)
PHP (43)
JavaScript (39)
вебмастеринг (35)
мысли (34)
гаджеты (30)
юмор (21)
полезное (17)
гондураша (17)
движек (17)
linux (14)
софт (14)
беспредел (10)
деньги (10)
видео (9)
ztools (8)
путешествия (7)
кино (7)
музыка (7)
Nokia 5800 (7)
интернет (7)
занимательная физика (7)
хостинг (7)
lifehack (6)
css (6)
вебдизайн (6)
прелоадер (5)
связной (5)
ActionScript (5)
Python (4)
козлы (4)
книги (3)
рестораны (3)
энергия (3)
oDesk (3)
synphony (3)
svn (3)
Ruby on Rails (2)
кухня (2)
Java (2)
гитара (2)
webmastering (2)
спорт (2)
языки (2)
Android (1)
software (1)
programming (1)
технологии (1)
C++ (1)
bash (1)
наука (1)
SEO (1)
аниме (1)
авторское право (1)
сайты (1)
Поиск по блогу:

Valid XHTML 1.0 Strict