Замыкания удобно применять в качестве callback-функций. Замыкания создают функции, не имеющие определенных имен. Замыкания автоматически преобразуются в экземпляры класса Closure. Время жизни переменных, используемых в замыкании, может быть больше, чем у той функции, где их определили. В контексте класса для передачи $this в замыкание нужно использовать промежуточную переменную: $v = $this; use ($v) Пример (0): [...]
tech blog
Category Archives: myarcticles
preg_split и прямой вызов функций внутри замыканий
50000 0.0020001009607315 20001009607315 1884 56.68 0.0016987597370148 16987597370148 15.06 2952 100000 0.0020226094222069 20226094222069 1884 0.0017117062973976 17117062973976 15.37 2952 150000 0.0020203295516968 20203295516968 1884 0.0017234358565013 17234358565013 14.69 2952 Вывод: прямой вызов работает быстрее на 15%, но затрачивает памяти на 56% больше.
const, define и память
На простом примере проверялось число байт, затраченных на объявление 500 констант через define и const. const const real const emalloc const peak real const peak emalloc start 524288 370528 524288 431488 stop 524288 370832 524288 431488 define define real define emalloc define peak real define peak emalloc start 1048576 454548 1048576 747424 stop 1048576 454852 [...]
Rewrite с файла на файл
Требуется: по запросу /path/to/images/1.gif брать файл /path/to/images/1.gip Решение: location ~* \.(gif)$ { root /path/to/site/path/to/images; rewrite ([0-9]).gif /$1.gip break; }
Простой чат на netcat
Сервер: netcat -l localhost 8080 Клиент: telnet localhost 8080
Netcat для отлова глюков
Если вы хотите в живую видеть заголовки, отсылаемые на сервер приложением/сервером, то можно воспользоваться netcat: netcat -l localhost 8080 Все заголовки будут выводиться в консоль.
Как обновить lenny Debian до squeeze
В процессе обновления будут задаваться вопросы относительно текущих настроек, рекомендуется сохранять текущие. aptitute update aptitude upgrade Добавить в начало /etc/apt/sources.list deb http://ftp.debian.org/debian/ squeeze main contrib non-free deb-src http://ftp.debian.org/debian/ squeeze main deb http://security.debian.org/ squeeze/updates main contrib deb-src http://security.debian.org/ squeeze/updates main contrib aptitude update aptitude install dpkg aptitude apt aptitude upgrade aptitude full-upgrade reboot cat /etc/debian_version smile
Установка NODE.JS на DEBIAN
1) Ставим NODE.JS apt-get install g++ curl libssl-dev wget http://nodejs.org/dist/node-v0.4.10.tar.gz tar xvzf node-v0.4.10.tar.gz cd node-v0.4.10/ ./configure –prefix=/opt/node0410 make make install 2) Ставим менеджер пакетов (shaolin like way) wget https://nodeload.github.com/isaacs/npm/zipball/v1.0.24 unzip isaacs-npm-v1.0.24-0-g4d7d377.zip cd isaacs-npm-c94e296 ./configure node ./cli.js install -g
Пример конфигурации MONIT
set daemon 30 set logfile /var/log/monit.log set mailserver localhost set alert post@postserver.com set httpd port 1234 and use address 22.33.44.55 ssl enable pemfile /opt/monit/monit.pem allow 11.22.33.44 allow 11.22.33.55 allow monituser:monitpassword set mail-format { from: noreply@monitserver.com subject: MONIT ERROR: SERVICE: $SERVICE EVENT: $EVENT DATE: $DATE message: MONIT ERROR! DATE: $DATE SERVICE: $SERVICE EVENT: $EVENT HOST: $HOST [...]
nginx load balancing
upstream{ server u1.domain.com:8080 weight=3 ; server 127.0.0.1:8081 weight=3; server unix:/path/to/socket weight=3; server u2.domain.com:8082 backup; } 1) Три запроса обрабатываются сервером u1.domain.com 2) Следующие три запроса обрабатываются сервером 127.0.0.1 3) Следующие три запроса обрабатываются сервером на сокете socket 4) Следующие 3 запроса обрабатываются сервером u1.domain.com и так далее 5) Сервер u2.domain.com используется как резервный, и запросы [...]
Дополнение к V8 TEST (VAR OR NOT)
Было сделано три дополнительных теста, но только на Node.JS: 1) Код аналогичен указанному в предыдущем посте. Исключение в объявлении переменных. В этом тесте они объявлялись один раз в начале скрипта: var k, amax, amin, anow, acount; 2) Код с использованием while: var k, amax, amin, anow, acount, s1, s2, s3, b; s1 = 0; while(s1 [...]
v8 test (var or not)
В двух вариантах тестировались Chrome 12.0 и Node 0.4.10. В первом варианте все переменные объявлялись var, во втором – без. Код: for(var k=0;k<10;k++){ var amax = 0; var amin = 100000000; for(var j=0;j<30;j++){ var anow = (new Date()).getTime(); var acount = 0; while((new Date).getTime() – anow < 1000){ acount ++; } if(acount < amin){ amin [...]