Как стать автором
Обновить
14
0
romy4 @romy4

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

Отправить сообщение

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

Время на прочтение5 мин
Количество просмотров16K
nginx + lua

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

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

Тема, как оказалось, не нова, исходники тянуться аж из 2014, но, тем не менее, информации о трюке, про который здесь пойдёт речь, крайне мало. Можете погуглить "websockets php". Усугубляется тема ещё тем, что найденные примеры реализации (два, точнее) не работают, включая тот, что в документации :)
Читать дальше →

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

Время на прочтение2 мин
Количество просмотров6.9K
Заметив некоторое замедление работы 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+, ниже смотрите на офсайте).
Читать дальше →

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

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

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

Читать дальше →

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

Время на прочтение8 мин
Количество просмотров72K
  Вступление большое, так как подробно объясняет зачем нужен cmake. Можете сразу под кат, если уже знаете.

Вступление


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

Ликбез

  Зачем он нужен? Чтобы при переносе на другую машину, с другими путями вы двумя командами собрали проект ничего не исправляя в файле makefile. Но есть же configure? Это альтернатива. И configure не кросплатформенный, для его генерации нужен autoconf/autogen, для которых идёт ещё свой набор правил. Только преимущества? Компиляция автосгенерированным makefile получается немного медленнее старого способа. Например, в KDE-4 является официальным инструментом выпуска.
Приступим

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

Время на прочтение8 мин
Количество просмотров41K

Введение


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



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

Читать дальше →

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

Время на прочтение4 мин
Количество просмотров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
Но это можно менять.

Читать дальше →

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

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


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

Читать на сайте Intel'а.

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

Время на прочтение1 мин
Количество просмотров1.7K
Начиная рабочий проект под 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-парсер
Читать дальше →

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

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

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

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

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

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

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

ниже будет оглавление статей.

VImperator

Время на прочтение2 мин
Количество просмотров7.4K


screenshot #1
screenshop #2

Введение


Vimperator это бесплатный плагин для Firefox, который превращает его в нечто Vim-о подобное. У него стают похожими комбинации клавиш, но вы можете назвать это модальным веб-браузером, так как комбинации клавиш различны, в зависимости от режима в котором вы работаете.
Читать дальше →

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

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

Читать дальше →

Подскажите, куда двигаться дальше?

Время на прочтение1 мин
Количество просмотров717
Для меня стал тесен PHP, как для разработчика сложных фронд-энд веб и небольших энтерпрайз приложений. Надо куда-то дальше вырываться. Java? .NET?

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

Время на прочтение1 мин
Количество просмотров614

То, чем пользуюсь я при разработке 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.

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

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

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

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

Читать дальше →

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

Время на прочтение1 мин
Количество просмотров1.1K
Задался себе вопросом: а нужна ли на столько валидация CSS, чтобы при этом экономить на кросс-браузерности? Валидация — это круто и авторитетно, но где будет тогда этот авторитет, если на одном из браузеров, что необходимо тянуть (будь они не ладны), вдруг покажет сайт криво.
Хочется ответить рифмой…

Просто так

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

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

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

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

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

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

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

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

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

Время на прочтение1 мин
Количество просмотров673
Задача: есть на входе строка «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).
1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность