Рубрика «php» - 213

Представляю вашему вниманию PHP шаблонизатор, который я разрабатывал несколько лет и только недавно выложил в сеть.

Как все началось и зачем вообще нужен еще один шаблонизатор?

Smarty и другие популярные шаблонизаторы мне показались слишком громоздкими для простых проектов и я решил разработать собственный шаблонизатор. Первая версия появилась еще в 2004 году. В процессе разработки интернет проектов я постоянно внедрял новые идеи и прочие улучшения. В настояший момент движок шаблонизатора состоит из всего одного файла и все равно имеет ряд уникальных возможностей.

На сайте separate.esud.info/ вы можете скачать исходный код. Также там доступна подробная документация всех функций на трех языках – русском, английском и немецком. Я надеюсь что проект заинтересует людей и будет в будущем активно развиваться. Поэтому код я выложил в Github на сайте github.com/esud/separate

Подробное описание вы найдете на сайте ru.separate.esud.info/documentation/
Ниже я коротко опишу ключевые возможности.

Читать полностью »

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

Платежи через iTunes фактические лидеры по монетизации контента, предоставляемого мобильными приложениями. В одном из известных мне приложений доход от них в 3 раза превышает доход от Google Play пользователей при том, что посещаемость последних в 1.5 раза выше. Таким образом, с одного пользователя iTunes можно получить вплоть до 5 раз больше денег, чем с одного пользователя Google Play. Данный аргумент достаточен для интеграции платежей iTunes в мобильные приложения.

В данной статье описываются некоторые особенности верификации платежей iTunes (в т.ч. и подписок) с серверной стороны, которые, как мне показалось, не достаточно освещены в существующих статьях.

Читать полностью »

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

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

Пару месяцев назад появилась идея доработать сервис до приемлемого вида и позволить им пользоваться каждому разработчику.
Читать полностью »

Знаю, что уже есть Doctrine 2, но сейчас работаю с проектом на Doctrine 1.2.4 и думаю у многих есть проекты на этой версии ORM. Проблема существует при создании банальных запросов на update, вида:

  Doctrine_Query::create()
                    ->update('Posts')
                    ->set('Anons', $anons )
                    ->where('id = ?', $id)
                    ->execute(); 

Читать полностью »

Здравствуйте, уважаемые читатели!
Хотел бы поделится с Вами некоторым опытом организации split тестирование на проекте с которым довелось работать, также прошу не судить строго, так как это моя первая статья и действительно огромного профита ожидать не стоит.
Как мы все знаем, split (A/B) тестирование на сайте представляет собой экспериментальный подход с целью повышение конверсии по какому-либо процессу на ресурсе путем отображения различным группам пользователей разного контента.
Читать полностью »

Суть проблемы

Сейчас появляется очень много материала про юнит и нагрузочное тестирования. Все поголовно пишут тесты, код создают исключительно через TDD, используют jmeter/ab. Однако, все тестирование очень тесно связано с тестовыми данными. А их нужно генерировать/писать. Проблема не стоит остро для юнит тестирования — накидал mock, погонял его и забыл. Но как быть с нагрузочным тестированием? Когда мне нужно не 1-2-5-10 объектов, а миллионы?

Большинство (php) разработчиков, которых я встречал, сталкиваясь с задачей нагрузочного тестирования своего кода, создают несколько фикстур руками и насилуют их (ab/jmeter). Полученный результат тестирования не является достоверным, но они об этом не думают. Более продвинутые пишут скрипты для генерации данных, закидывают в БД и после этого уже играются. Похвально, но таких значительно меньше, а сам способ мне не кажется идеальным — другой программист может не разобраться в говнокоде генерилки фикстур (ведь создатель писал это быстро и для утилитарных целей) и рано или поздно все либо пойдут по первому пути, либо начнут писать новую генерилку.

Ценность правильного составления фикстур сейчас недооценена, многие просто на это забивают из-за трудоемкости такой работы (представим 15-25 связанных таблиц, писать скрипт генерации фикстур будет весьма, кхм, интересно). Я прекрасно понимаю почему разработчики так поступают, и, когда появилась такая же задача, то решил не биться головой об стену, а поискать инструментарий для нормальной генерации связанных данных.

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

Внезапная история из прошлого! Дело было так. Несмотря на то, что я программист «немного другого толку», обратились ко мне со стандартной просьбой – сделать сайт. Обычно я не берусь за подобные дела, но в этот раз решил немного подзаработать, тем более что это был не сайт-визитка или интернет-магазин, а нормальный сайт с базой некоторых объектов, объекты добавляются-редактируются-удаляются (аля CRUD) и с ними необходимо выполнять некоторые операции. О! подумалось мне, да это идеальная задача для (название фреймворка скрыто) и после всяческой бухгалтерии я незамедлительно приступил к делу.

Собственно дальше ничего интересного и необычного так и не произошло. Спустя какое-то время заказчику был продемонстрирован сайт. И… он остался доволен. Очень неожиданное завершение истории.

Правда, появилась небольшая как бы просьба. Файловый менеджер, тот, с помощью которого на сайт в статью можно вставить картинку, ему не понравился. Вот хотелось ему чтобы всё как-то проще было. А тут и кнопок целых 20! Да и действий много. А нужно-то всего-навсего загрузить картинку на сервер и вставить на страничку. Ну ладно, подумал я, их же целый интернет, да и сам я много раз делал подобные решения. Но один страшен, как чёрт, другой по одному файлу загружает за раз, а вот третий ничё так вроде, но платен. В общем, история завершилась быстро, созданием простенького файлового менеджера с нуля. Но как-то сиделось мне, да и взгрустнулось. И выпил я (сока с мякотью, конечно). И открыл IDE и понеслось…
Читать полностью »

Написание статьи навеяно habrahabr.ru/qa/34735/ и habrahabr.ru/qa/32135/ вопросами, в качестве ответов на которые не смог найти полной и подробной информации, чего очень не хватало. Я надеюсь, что она будет полезна и другим.

Проект, на чью долю пал выбор в виде ZF в качестве основного фреймворка, представлял из себя мобильную версию сервиса (адаптивный дизайн с некоторыми ньюансами) + АПИ для мобильных приложений.
Коллегиально было принято политико-техническое решение делать единое АПИ, посредством которого будет общаться и сайт, и приложения.

На этом, думаю, прелюдию можно закончить и перейти к самому интересному.
Читать полностью »

Публикую и очень просто объясняю элегантное, на мой взгляд, решение проблемы хэширования и проверки пароля по хэшу.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js