some image

Обо всем

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

Обо всем

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

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

Enjoy!

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

Обо всем

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

top

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

Качество интернета в Шерегеше

Обо всем

Хочу поделиться впечатлениями о жизни и работе в Шерегеше .

Поехали мы с другом пожить, поработать (благо работаем вместе) и покататься в Шерегеш на 9 дней.

С погодой повезло, все время нашего пребывания было тепло и много снега. Фрирайд получался очень захватывающий.

20140305_140931

На удивление в геше все очень цивилизованно в плане аренды жилья. За неделю до поездки мы сняли отличнейшую однокомнатную квартиру только только после ремонта за 1300р/сутки. Я думаю, если поторговаться, можно еще снизить цену, мы не торговались.

Шерегеш. Вид с горы Зеленая.

Интернет в Шерегеше

Интернет есть почти во всех съемных квартирах. Местный провайдер дает его через коаксиальный кабель, вместе с кабельным TV. К антенне подключается приставка, которая и дает интернет на роутер. Как результат — сносные пинги, но маленькая скорость (в районе 1мбит/сек, т.е. даже ролики на ютуб в нормальном качестве не успевают грузиться, хотя 2 RDP держит хорошо).

Так же большая тройка покрыла весь поселок 3G хорошего качества , т.ч. в любом случае остаться без интернета можно не бояться, любой современный телефон может быть использован как переносная точка доступа.

1OyAbwsFtd8

Тайм менеджмент

Удаленная работа на горнолыжном курорте дело тяжелое. Не все могут осилить работать просто из дома, а тут еще и соблазн в виде высоченной горы за окном. Так что поездка с полным рабочим днем — хороший урок по тайм менеджменту. Чтобы все успеть нужно очень ценить свое время. Мы работали с 9 до 13, далее с 13 до 17 катались, и потом с 17 до 21-22 снова работали. В целом очень комфортный график, остается даже прилично времени на ничегонеделание.

И, если учесть, что заработали мы за это время столько же, сколько потратили (еда, проживание и подъемники), то это просто мега крутая тема: бесплатно 9 дней, изо дня в день кататься в горнолыжной Мекке Сибири:) Enjoy!

Шерегеш. Фрирайд.

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*

2147483647

Обо всем

Не дает покоя число 2147483647? Да у вас, батенька, переполнение. Используйте bigint.

Parallel Curl, параллельная загрузка и обработка страниц в PHP

Обо всем

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

Хочу представить вашему вниманию малоизвестную, но очень полезную библиотеку parallelcurl, являющуюся надстройкой над мультипотоковым curl.

https://github.com/petewarden/ParallelCurl

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

Подключаем библиотеку, создаем объект класса:

$parallelcurl = new ParallelCurl(10);

 

Аргумент — число потоков для одновременной загрузки.

Весь механизм работы очень похож на js callback’и.

Стартуем загрузку, можно в цикле:

$parallelcurl->startRequest('http://example.com', 'on_request_done', array('something'));

 

Можно стартовать хоть 1000 запросов одновременно. Они все складываются в очередь. Выполняется, скажем, 10 одновременно. Как только 1 выполнился, сразу же из очереди берется следующий, а для выполнившегося потока стартует callback функция, переданная параметром:

on_request_done($content, 'http://example.com', $ch, array('something));

 

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

В основной ветке при этом можно работать как ни в чем ни бывало, никого не дожидаясь, а для того, чтобы дождаться выполнения всех запросов и callback’ов к ним, нужно выполнить:

$parallelcurl->finishAllRequests();

 

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

Безусловно, многое нужно допилить под свои нужды, но как начальный каркас — очень рекомендую.

Регулярные выражения — исключить слово

Обо всем

Для того чтобы исключить слово из регулярного выражения, или набор слов, или даже целое предложение, используем конструкцию:
((?!word1|word2).)*

Пример: получить все последовательности символов такие, которые начинаются с begin, заканчиваются end и не содержат ни слова word1, ни слова word2:
begin((?!word1|word2).)*end