Pull to refresh
14
0

Пользователь

Send message

Быстрый пул для php+websocket без прослойки nodejs на основе lua+nginx

Reading time 5 min
Views 15K
nginx + lua

Кратко: nginx не умеет пулить websockets, а php работает per request. Нужна прослойка которая будет держать открытыми вебсокеты и при поступлении данных соединяться с php (через тот же fastcgi) и отправлять обратно ответ.

update: Здесь не идётся про решения на php, так как по сравнению даже с nodejs, они гораздо медленнее.

Тема, как оказалось, не нова, исходники тянуться аж из 2014, но, тем не менее, информации о трюке, про который здесь пойдёт речь, крайне мало. Можете погуглить "websockets php". Усугубляется тема ещё тем, что найденные примеры реализации (два, точнее) не работают, включая тот, что в документации :)
Читать дальше →
Total votes 14: ↑13 and ↓1 +12
Comments 30

Заставляем совместно работать open_basedir + realpath_cache

Reading time 2 min
Views 6.8K
Заметив некоторое замедление работы PHP на постоянных проверках lstat всех путей открываемых файлов и директорий, решил поднастроить производительность, увеличив realpath_cache_size. Был немного удивлён, когда получил из
var_dump(realpath_cache_size(),realpath_cache_get());

int(0); array(0) {}


Ещё больше удивило, что этот баг до сих пор не решён в последних версиях PHP 5.6, а в документации про него ни слова (один комментарий пользователя месяц назад).

Некоторым гуглением было найдено решение: расширение, совмещающее в себе open_basedir и работающее через кеш путей php. Turbo_realpath.

В Pecl его нет, поэтому скачиваем архив с офсайта (для версий 5.4+, ниже смотрите на офсайте).
Читать дальше →
Total votes 17: ↑13 and ↓4 +9
Comments 14

Простейший SMTP сервер для разработок

Reading time 2 min
Views 26K
Для ленивых и не желающих возиться, сдувать пыль с бубна по настройке exim4/postfix/sendmail предлагается простейший сборщик почты написанный на Python[1].

Его работа заключается в сборе всей почты, посылаемой этому фейковому smtp серверу и складывании её в указанную папку /tmp/mails в виде файлов писем nobody@mail.local.1 с порядковым номером.

Читать дальше →
Total votes 28: ↑20 and ↓8 +12
Comments 21

Используем Cmake для автоматической генерации makefile в проектах

Reading time 8 min
Views 69K
  Вступление большое, так как подробно объясняет зачем нужен cmake. Можете сразу под кат, если уже знаете.

Вступление


  Компилирование проекта руками — пустая трата времени. Это фактически аксиома и об этом знают те, кто программирует. Но чтобы всё скомпилировалось автоматически необходимо задать правила, так ведь? Часто и по-старинке используют makefile для *nix или какой-нибудь nmake для windows.
  Я хоть и не первый год программирую, и руками составлял простые автосборщики проектов на основе makefile, но стоит немного подзабыть и приходится заново изучать как же составить эту хитрую схему. В основном приходится делать проекты расчитанные на какую-то одну систему, будь то linux или windows, и часто между собой не кросскомпилируемые. Для переносимости makefile используется automake и autogen, но их синтаксис ещё более запутан. Не скажу, что выбор идеальный, но для себя я решил перейти на cmake, благо он портирован под всё доступное. Мне он показался более человекопонятным. Попробую объяснить основы. Вы пишите словами правила, а из них генерируется makefile, который вы уже запускаете стандартным способом.

Ликбез

  Зачем он нужен? Чтобы при переносе на другую машину, с другими путями вы двумя командами собрали проект ничего не исправляя в файле makefile. Но есть же configure? Это альтернатива. И configure не кросплатформенный, для его генерации нужен autoconf/autogen, для которых идёт ещё свой набор правил. Только преимущества? Компиляция автосгенерированным makefile получается немного медленнее старого способа. Например, в KDE-4 является официальным инструментом выпуска.
Приступим
Total votes 44: ↑39 and ↓5 +34
Comments 45

Конфигурационные файлы. Библиотека libconfig

Reading time 8 min
Views 38K

Введение


Как-то находясь в поиске как мне прикрутить конфигурационные ini файлы или json к моему сервачку перебирал варианты, но почему-то они были неудобны или слишком простые, или велосипеды. И хоть я люблю xml конфигурирование, но порою это чрезмерно огромные файлы и неудобно для небольшого количества настроек писать много текста. Раз задал другу вопрос по этой теме, он то мне и подкинул библиотеку. Напоминает она json в смеси с yaml.



Библиотека имеет два интерфейса: функциональный и объектный. Они очень похожи, так как объектный использует внутри функциональную реализацию, но имеют некоторые различия, рассмотренные в данном посте.

Читать дальше →
Total votes 20: ↑13 and ↓7 +6
Comments 10

Мой вариант .htaccess

Reading time 4 min
Views 171K
В одном из предыдущих тематических постов о .htaccess для нубов я хотел предложить свой вариант с разными обработками и запретами, ну и определённой логикой структурирования, но так как карма была в минусе, то выкладываю сейчас.

Вашему вниманию мой вгляд на правила обработки URL с объяснениями и коментариями «почему так?».

Сперва логика


Объясню сперва логику:
1) все страницы имеют .html окончания.
2) все языки для страниц имеют вид pagename.en.html или pagename.html для языка по умолчанию. Никто, конечно, не запрещает иметь ссылки, где язык идёт вначале как /en/
3) «входной» скрипт только один в docroot.
4) Разрешены запросы на другие скрипты только в docroot
5) Соглашение по определению окончаний в url:
# site.com/
# site.com/index -> site.com/
# site.com -> site.com/
# site.com/file/ -> site.com/file.html
# site.com/file -> site.com/file.html
# site.com/dir/file ->site.com/dir/file.html
# site.com/dir/file/ -> site.com/dir/file.html
Но это можно менять.

Читать дальше →
Total votes 90: ↑57 and ↓33 +24
Comments 51

Как разрабатывались первые процессоры Intel

Reading time 1 min
Views 723
Спустя примерно год после запуска электронного монетоприемного механизма в производство бывший глава компании Mars Inc., Форест Марс-старший (Forest Mars, Sr.) обратился к г-ну Хайману за разъяснениями принципов действия и возможностей устройства. Он, в частности, попросил г-на Хаймана организовать встречу с главой Intel д-ром Робертом Нойсом (Robert Noyce), и спустя неделю такая встреча действительно состоялась. Пространное повествование д-ра Нойса о постоянно расширяющейся деятельности Intel «на переднем крае высоких технологий» привело к тому, что г-н Марс, привыкший иметь дело с продукцией, способной обеспечить стабильно устойчивую прибыль в долгосрочной перспективе, потерял всякий интерес к приобретению фирмы, занимавшейся разработкой никому тогда еще не ведомых кремниевых устройств. Как отмечает г-н Хайман, «если бы кремниевые технологии не развивались столь стремительными темпами, Intel вполне могла бы стать подразделением компании Mars, Inc»


Я думаю, интересно будет вам почитать именно про самое начало разработок.

Читать на сайте Intel'а.
Total votes 17: ↑9 and ↓8 +1
Comments 3

Шаблонная библиотека cxxtools

Reading time 1 min
Views 1.6K
Начиная рабочий проект под Linux, я застрял в поисках С++ библиотеки, которая бы 1) была free, 2) умела работать с сокетами и можно быстро было поднять свой сервер, 3) нужна была оббёртка над потоками для плюсов. Сперва я наткнулся на Qt, но через некоторое время Qt стал слишком тяжелым для поставленной цели. В итоге поиски подтолкнули к cxxtools.

Кратко
Кратко о том, что умеет делать библиотечка:
  • умеет работать с TCP сокетами и поднимать на их основе слушающий сервер;
  • умеет парсить http запросы и отдавать ответы;
  • умеет работать с SSL;
  • реализован быстрый механизм сигналов (как раз похожий на Qt);
  • имеется похожий на boost-овский, но более удобный шаблон Function / Method; необходим для callback-функционала
  • умеет работать с потоками (threads): attached и detached threads;
  • удобный шаблон пула (pool);
  • гораздо удобнее smart pointer (ну имхо конечно), чем тот же std::smart_ptr и auto_ptr. Позволяет использовать разные политики управления классом и подсчёта ссылок, что удобно и необходимо для многопотоковых реализаций
  • удобный механизм логирования
  • ini-парсер
Читать дальше →
Total votes 49: ↑45 and ↓4 +41
Comments 33

модификация PHP: своё расширение

Reading time 1 min
Views 628
Это вводная статья, что начнёт цикл посвящённый модификации php. Основные цели этого занятия: а) доделать мне свой проект; б) будет подталкивать меня хоть что-то делать, и в) может и вам пригодится.

И так, что необходимо мне в модуле и зачем он нужен
а) множественное наследование или реализация что-то типа mixins. Да, я знаю, что есть такое уже написанное похожее, но я это хочу разобрать и показать что, как и зачем происходит.
а-2) разъяснить для чего какие структуры используются.
б) добавить разные удобные функции, которыми часто пользуюсь, но которые на чистом php не достаточно быстро работают.
в) попытаться модифицировать синтаксис php (а в друг получится)
г) попытаться написать что-нибудь на c++ для php.
д) Д
е) может что-то реализовать то, что кто-то хотел, но не знал как

упд.
ж) хочу переписать/дополнить Closures, чтобы они попадали в область видимости, в которой определяются, а не в глобальную и в них использовался this

упд2. я хочу описать внутренние алгоритмы так, чтобы было понятно. а что получится, то получится

упд3. так как карму сбили, то написать теперь ничего не выйдет.

пока что можно накидать вопросов или предложений.

ниже будет оглавление статей.
Total votes 39: ↑19 and ↓20 -1
Comments 21

VImperator

Reading time 2 min
Views 7.3K


screenshot #1
screenshop #2

Введение


Vimperator это бесплатный плагин для Firefox, который превращает его в нечто Vim-о подобное. У него стают похожими комбинации клавиш, но вы можете назвать это модальным веб-браузером, так как комбинации клавиш различны, в зависимости от режима в котором вы работаете.
Читать дальше →
Total votes 16: ↑12 and ↓4 +8
Comments 17

Учим InternetExplorer хорошему: расширяем прототипы DOM элементов.

Reading time 2 min
Views 679
Возникла у меня проблемка расширять стандартные HTMLElement объекты, только не в Firefox'e, а в IE. Можно использовать библиотеку Prototype или JSX. Но мне не понравилось это решение из-за того, что используется надстройка, а не приятный глазу механизм обращения к элементам через DOM. Например, хочу, чтобы в IE появился новый метод
someDOMElement.getLastChild()

Читать дальше →
Total votes 7: ↑5 and ↓2 +3
Comments 3

Тема девелопмента

Reading time 1 min
Views 577

То, чем пользуюсь я при разработке PHP скриптов и как этим пользуюсь.



1. Редактор FAR + plugins: colorer5, Regualar Search & Replace, Autocomplete
Это моя привычка со времён «волкова»: синий экран, моношрифты и куча-куча настроенных макросов. Сейчас можно было бы использовать Eclipse, но как-то облом и оно очень громоздкое.

2. Консолька. Даже две. Без этого, никак. При чём не важно—винда это или линух. Для винды есть порт основных команд.
Первое окно—шел, для быстрого запуска-перезапуска всяких демонов и крон-скриптов.
Второе окно—лог. Команда `tail -f error.log -f php_error.log` FOREVER!

3. XDebug прикрученый к пхп. Вконце отладки включаю ещё профайлер + KCacheGrid|WinCacheGrid. error_reporting = E_ALL | E_STRICT | E_NOTICE;

4. La music какой-нибудь приятный. (важный пункт, кстати!)

5. turn off или в режим невидимости icq и skype.

6. Кофе, печенье, апельсины и пр. хавчик в больших количествах.

7. Фреймворк у меня свой для моих проектов. Так же советую использовать Symphony или ZendFramework.
Total votes 10: ↑4 and ↓6 -2
Comments 4

Консольные раскопки

Reading time 1 min
Views 736
Дело было давно. Писал в консольке всякие скрипты, но некоторые могут вполне понадобиться и в PHP системных вызовах. Очень актуально на больших и очень больших текстовых файлах.

1. Замена символов в файле
2. Уберание windows-like переносов
3. Быстрый подсчёт строк
4. Вырезать столбцы из CSV-like файла
5. Сортировка файла по столбцам
6. Разбор базы на основе ini-файла

Я использую в п. 4,6 awk. Если кто не знает, то это специализированный с-подобный язык (кстати, напоминает очень пхп) для обработки текстовых данных. Работает очень и очень быстро.

Читать дальше →
Total votes 5: ↑5 and ↓0 +5
Comments 0

Так ли нужна валидация CSS?

Reading time 1 min
Views 1K
Задался себе вопросом: а нужна ли на столько валидация CSS, чтобы при этом экономить на кросс-браузерности? Валидация — это круто и авторитетно, но где будет тогда этот авторитет, если на одном из браузеров, что необходимо тянуть (будь они не ладны), вдруг покажет сайт криво.
Хочется ответить рифмой…
Total votes 14: ↑8 and ↓6 +2
Comments 45

Просто так

Reading time 2 min
Views 633
В жизни каждого программиста настаёт момент, когда он становится самостоятельным. Человек вырастает из программиста-ребёнка в программиста-взрослого. Этот момент особо характеризуется тем, что программист способен сам находить ответы на свои вопросы, а не задав его на десяти форумах сидеть и ждать ответа. В качестве примера могу привести «толк» пхп-клуба. В дальнейшем судьба программиста может развиваться разными дорогами, но основные можно выделить следующие (в порядке ухудшения профессионализма):

1) программист себе спокойно пишет нужные ему вещи, попутно ища мануалы, и лишь с большой редкостью заглядывает на форумы, подобные «пхп-клубу» и не заморачивается на остальных. Такой программист сам себе ищет приключение. И находит. И многого достигает. Это гуру.

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

2б) как дополнение к уровню 2, аналогично программисту (3б) но уже натасканый по мануалам и имеющий большой опыт, все ещё по привычке хаит других. Такой программист считает свои слова истиной в первой инстанции, хотя и не признаётся в этом. Спор с ним на форуме, скорее всего закончится баном тому, кто с ним спорил.

3) программист среднего уровня. Пишет хороший код, но имеет небольшие проблемы в работе (то ли с логикой не всё нормально, то ли упускает много чего, что в последствии ему возвращается в виде багов от QA). Уже умеет пользоваться мануалом, но всё ещё

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

5) нуби (noobie). Мануалы читает редко. Любит много спрашивать и мало думать. Постоянно требует от других что-то ему объяснить или показать. Спорит. Код плохой, не имеет отработанного стиля.

6) программист-новичок, который то ли сам понял, то ли имеет покровителя 1-2 уровня, но который читает мануалы и спрашивает только то, что ему не понятно, по опыту и в чём ему ещё не дано разобраться самостоятельно. Стиля собственного не имеет, но старается ошибки отлаживать и исправлять самостоятельно.
Rating 0
Comments 0

PREG: условные маски

Reading time 1 min
Views 602
Задача: есть на входе строка «single param=true param2=»string fgfg"", необходимо разобрать на параметры.

upd: добавлен захват синглов; добавлены именованные захваты.
для решения пользуемся регуляркой
/(\w+)([=])?(?(2)([\"\'])?(?(3)(.*?)(?!\x5c)\3|([^\s]+)))/ms
регулярка с именованными захватами:
/(?P<lvalue>\w+)(?P<ref>[=])?(?(ref)(?P<quote>[\"\'])?(?(quote)(?P<multi>.*?)(?!\x5c)\3|(?P<signle>[^\s]+)))/ms

Важный момент: "([\"\'])?" мы ищем строку в кавычках или слово без них. Загвоздка в том, что в приведённом выражении нам надо либо получать backref #2 либо не получать, чтобы выражение "(?(2)" сработало. Если знак вопроса (?) поставить к списку символов "([\"\']?)", то обратная ссылка №2 будет всегда захватываться и условие "([^\s]+)" никогда не выполнится.

upd: В добавок хочу сказать, что в PHP мане не указано про именованные захваты "(?P<name>)", но они таки работают (по крайней мере в 5.2.4).
Total votes 10: ↑8 and ↓2 +6
Comments 16
1

Information

Rating
Does not participate
Registered
Activity