some image

phantomjs click event, клик на любом элементе страницы не работает

Обо всем

В phantomjs 1.9+ есть очень неприятный баг, связанный с тем, что вы не можете кликнуть по-настоящему практически не по какому элементу. Вы можете вызвать событие click() с помощью jQuery, например, но это не заменяет стандартного поведения браузера. Например, кликнув на label в обычном браузере, вы меняете значение чекбокса, привязанного к нему. Здесь этого нет. Так же здесь нет каскадной передачи клика родительским элементам.
Для решения данной проблемы существует следующий хак, проверен лично на avito.ru:

function mouseclick( element ) { //расширяем возможности phantomjs, делаем новую функцию настоящего клика по элементу
    // create a mouse click event
    var event = document.createEvent( 'MouseEvents' );
    event.initMouseEvent( 'click', true, true, window, 1, 0, 0 );
 
    // send click to element
    element.dispatchEvent( event );
}

page.evaluate( //выполняем яваскрипт на странице, при этом передаем туда созданную ранее функцию
        function( mouseclick_fn ) {
            var element = jQuery( "label[for=service_4]" )[0];
            mouseclick_fn( element );
        },
        mouseclick
    );
setTimeout(function(){
	//проверяем результат
	//обязательно подождите пару секунд после клика по элементу, дайте браузеру сделать то, что вы задумали и пройти всем сопутствующим эвентам
}, 2000);

Autocomplete для списков, стилизация списков, умные списки

Обо всем

Любой человек, разрабатывающий интерфейсы, сталкивается с проблемой удобного выбора из огромного списка значений. Если список большой, его неудобно листать, неудобно делать мультиселект.
Прекрасное решение предлагает http://chosen-sass-bootstrap.herokuapp.com/ для Bootstrap. Я как программист, а не дизайнер, безумно рад что сразу, из коробки, идет, помимо отличной функциональности, еще и классный внешний вид.
Преимущества данного решения:
1) Невероятная компактность.
2) Удобный мультиселект.
3) Автозаполнение
4) Гибкий интерфейс callback’ов.

Пример использования можно посмотреть в моей Базе для риелторов

Enjoy!

Проверить использование памяти linux debian

Обо всем

Для того чтобы проверить какой процесс сколько потребляет памяти и процессора в командной строке вводим

top

Вы получите постоянно обновляемый список процессов, упорядоченный по загрузке процессора.

Чем HAVING отличается от WHERE

Метки: Работа

При помощи HAVING отражаются все предварительно сгруппированные посредством GROUP BY блоки данных, удовлетворяющие заданным в HAVING условиям. Это дополнительная возможность “профильтровать” выходной набор.

Условия в HAVING отличаются от условий в WHERE:

  • HAVING исключает из результирующего набора данных группы с результатами агрегированных значений;
  • WHERE исключает из расчета агрегатных значений по группировке записи, не удовлетворяющие условию;
  • в условии поиска WHERE нельзя задавать агрегатные функции.

SSL3_GET_RECORD: decryption failed or bad record mac

Метки: , , , Работа

Если у вас возникает ошибка SSL3_GET_RECORD: decryption failed or bad record mac при работе со сторонним сервером через SSL — попробуйте переключить SSL в версию 2 или 3 вручную. Для PHP CURL:
curl_setopt($ch, CURLOPT_SSLVERSION, 2);
или
curl_setopt($ch, CURLOPT_SSLVERSION, 3);

SoftException in Application.cpp apache2 + PHP + suPHP errors

Обо всем

Если вы видите следующие ошибки в логе apache/var/log/apache2/error.log )

[Mon Jul 15 19:43:46 2013] [notice] Apache/2.2.22 (Debian) mod_fcgid/2.3.6 PHP/5.4.4-14+deb7u2 configured — resuming normal operations
[Mon Jul 15 19:43:53 2013] [error] [client 192.168.1.49] SoftException in Application.cpp:350: UID of script «/var/www/phptest.php» is smaller than min_uid, referer: http://192.168.1.12/
[Mon Jul 15 19:43:53 2013] [error] [client 192.168.1.49] Premature end of script headers: phptest.php, referer: http://192.168.1.12/
[Mon Jul 15 19:43:53 2013] [error] [client 192.168.1.49] SoftException in Application.cpp:350: UID of script «/var/www/phptest.php» is smaller than min_uid, referer: http://192.168.1.12/

Удалите расширение:

apt-get remove suphp*

zend framework 2 (zf2) — Url Helper для Wildcard маршрута

Метки: , Работа

Есть маршрут:

'application' => array(
	'type' => 'segment',
	'options' => array(
		'route'    => '/application[/:controller][/:action]',
		'defaults' => array(
			'__NAMESPACE__' => 'Application\Controller',
			'controller'    => 'Index',
			'action'        => 'index',
		),  
	),
	'may_terminate' => true,
	'child_routes' => array(
			'default' => array(
					'type'    => 'Wildcard',
					'options' => array(
					),
			),
	),
),  

URL helper для него выглядит следующим образом (обратите внимание на application/default):

$this->url('application/default', array('controller' => 'advert', 'action' => 'index', 'phone' => $row->data['phone'] ) );

zend framework 2 (zf2) — маршрут с неограниченным числом параметров

Работа

При переходе на ZF2 с первого, столкнулся с проблемой что параметры теперь нужно хардкодить прямо в маршруте, во всех уроках так сделано и все довольны. Я же привык, еще с первой версии, что могу использовать ЧПУ вообще не меняя маршрутизацию, добавлять сколько угодно новых параметров.

Вот маршрут для обеспечения такой же функциональности в ZF2, используем тип WildCard:

'application' => array(
	'type' => 'segment',
	'options' => array(
		'route'    => '/application[/:controller][/:action]',
		'defaults' => array(
			'__NAMESPACE__' => 'Application\Controller',
			'controller'    => 'Index',
			'action'        => 'index',
		),  
	),
	'may_terminate' => true,
	'child_routes' => array(
			'default' => array(
					'type'    => 'Wildcard',
					'options' => array(
					),
			),
	),
), 

После этого легко будут обрабатываться ссылки вида /aplication/user/add/param1/value1/param2/value2.