Автор: amdy

Шаблон для PHP приложений

В очередной раз увидел чей-то велосипед и решил — с меня хватит. Сейчас в мире php наступила пора стандартизации и этим нужно пользоваться, хватит лепить приложения как попало. Сел, создал репозиторий  на github и заполнил его кусками из своих проектов. Все желающие могут присылать пожелания, баги, и пулл реквесты https://github.com/AmdY/php-app-skeleton.

Читать далее »

Паттерн Decorator

В больших проектах, особенно где ядро должно оставаться стабильным зачастую требуется изменения поведения объекта рантайм без дописывания кода в сам класс. Есть несколько вариантов, в этот раз я продемонстрирую паттерн Decorator (декоратор, wrapper, обёртка). Нам довелось активно использовать сей паттерн при разработке проета для IBM на базе Sugar CRM. В шуге заложено много гибкости, но некоторые части написаны очень очень давно и наружу торчит только Bean, который мы и декорировали чтобы добавить функционал или подменить стандартную реализацию. К сожалению, это не стало серебряной пулей и нам довелось хлебать кислые щи дырявой оловянной ложкой.

Читать далее »

Вкусности twig

Не могу не поделиться. На форуме phpclub.ru задавал вопрос о том, чтоб бы посмотреть по шаблонизатору Twig. И пользователь fixxxer дал замечательную подборку ссылок. Макросы в QuickForm2 http://svn.php.net/viewvc/pear/pack…es/array-twig.tpl?revision=325495&view=markup Вывод дерева (обезличенный продакшен код ({% url .. %} — мой кастомный тэг, вставляет вызовы UrlBuilder-а в момент компиляции) http://pastebin.com/PdVbMM2b Наследование: с обычным все понятно, horizontal reuse позволяет реюзать код, когда, например, встречаются 1, 2 и 3-колоночные варианты одинаковых в остальном страниц — пример с сайдбаром в доке вполне наглядный. Человеческий эскейпинг и автоэскейпинг с понятием стратегии (в смарти — хардкод, при этом отменить экскейпинг в общем случае нельзя — есть только возможность отменить все фильтры вообще) Человеческое консистентное апи для всего: фильтров, функций, compile-time тэгов (где можно нормально работать, а не конвертить, как в смарти, обратно уже изговнянные приведением к кускам пхп-кода параметры). Можно легко сделать свой загрузчик — например, так я читаю из моделей пользовательские шаблоны. Внутри твига все сделано на том же API, в отличие от смарти. Легко через Environment протащить что угодно, в отличие от, опять же, смарти, где я не находил ничего лучше, чем срать в internal config properties. Еще можно посмотреть рецепты всяких полезных штучек.

Читать далее »

Паттерн Money.

Все знают вредные паттерны Singleton, Registry, MVC и т.д. Но есть очень полезный паттерн, который помогает нам зарабатывать и считать деньги, в то же время его не встретишь в популярных фреймворках. Задача. Нужно считать деньги, выполняя с ними обычные математические операции. Проблема. PHP как и многие языки страдает известной проблемой двоичного представления чисел. Для приведения десятичного числа к двоичному внутреннему используется деление на 2, соответственно числа вроде 1/3 округляются до энного знака. Паттерн Money реализует работу с деньгами: математические операции (+, -, *, /), сравнения (>, <, >=, <=, ==, <>) и учёт курса обмена.

Читать далее »

AJAX в Zend Framework

Издавно у меня выработалась привычка писать приложения так, чтобы они могли с лёгкостью работать и через AJAX и как его сейчас называют HMVC. При этом самое важное условие — изменения в коде контроллеров не должно быть вовсе или они должны быть минимальны. На самом деле будет написано об AJAH, потому что общение идёт через html, а не xml, но AJAX более привычное название, поэтому ниже буду использовать его. Для начала нам нужен двухшаговая шаблониция, когда в начале генерируется основной контент, а затем он вставляется в мастер шаблон. В ZF для этого есть layouts. Подключаем их в конфиге resources.layout.layoutPath = APPLICATION_PATH «/layouts/scripts/» При этом будет по дефолту рентериться layout.phtml. У себя я практикую подмену мастер шаблона на ajax.tpl.php, в ZF это можно сделать через плагины или бутстрапы, но они меня пугают своей кривой документацией и примеры из мануала зачастую не работают. Можно использовать смену контекста AjaxContext, но опять же у меня возникли проблемы, да и это не очень мне нравится.  Поэтому, следуя принципу KISS, я решил наговнокодить прямо в основном лэйауте.

Читать далее »

Meetup в Гродно: дизайн и юзабилити

27 января 2011 года в Гродно прошёл meetup по дизайну и юзабилити. И я там был, сок-кофе пил. Но начну с несколько иного события, которое расскажет как я туда попал.

Читать далее »

Комбинаторика, нахождение слагаемых по сумме

Я начинал свой программистский путь с выполнения лаб по Delphi для друга и желания замутить свой футбольный менеджер. С первым у меня всё получилось, и товарищ благополучно отстрелялся, а с футбольным менеджером не вышло и вряд ли получится, потому что я теперь осознаю что не смогу сделать графический показ матча, как у конкурентов. Но у той мечты есть положительный момент — я столкнулся с комбинаторикой. Вот один из примеров, служит для нахождения слагаемых по известной сумме. Алгоритм вроде бы не совсем мой, а переписан с варианта на pascal. $parts = array(0, 1, 2, 3, 4, 5, 7, 8, 9); rsort($parts); $sum = 23; var_dump(findSummand($sum, $parts)); function findSummand($sum, $parts, $depth = 0) { static $args = array(); foreach ($parts as $k => $part) { if ($part == $sum) { $args[$depth] = $part; return true; } if ($part < $sum) { $args[$depth] = $part; if (findSummand($sum — $part, array_slice($parts, $k + 1), $depth + 1)) { if ($depth == 0) { return $args; } return true; } } } if ($depth == 0) { return ‘Решение не найдено’; } } Этот алгоритм остался бы у меня в закромах, если бы не случайный вопрос на форуме phpclub. Да и руки давно не доходили до блога, решил совместить.

Читать далее »

Ciklum PHP Saturday

Я до сих пор не могу в поверить, но ЭТО случилось — я побывал на первой белорусской конференции веб разработчиков, где мне ВСЁ понравилось. Мне прямо сейчас нужно активно работать и нагонять время потерянное в отпуске, но не могу сдержаться и буду писать отчёт о Ciklum PHP Saturday. Это встреча php разработчиков, которая прошла в Минске 13 августа 2011 года.

Читать далее »

Yandex и приватные данные

Недавно прошла целая волна эпик фейлов с участием Яндекса, Яндекс метрики и криворуких программистов. Особенно радует позор и уязвимость shop script от Webasyst, который является коробочным решением и доказывает опасность такого выбора. Это очень хороший аргумент в общении с заказчиком, когда захочу всучить кустомное решение. Вот решил высказать своё ИМХО по поводу происходящих вещей. Ситуация не стоит и выеденного яйца, но даже среди разработчиков оказалось много тех, кто не доехал до сути проблемы.

Читать далее »

Задание на php для новичка

Проблемы новичков в php. Я уже писал о том что стоит читать новичку, теперь продолжим переходя от теории к практике. Очень часто начав изучать php новички приходят к моменту, когда хочется опробовать свои силы в реальной разработке или даже попробовать устроиться на работу. Перед ними встаёт вопрос «с чего начинать новичку«, «какой первый проект написать«. Самое удивительное, что зачастую они пытаются придумать нечто экзотическое, а нужно писать типичный проект. Один из распространённых советов — напиши гостевую книгу, это не плохой вариант, но и не лучший. В реальной жизни веб программисты оперируются всего парочкой типичных задач — вывод списка записей, просмотр одиночной записи, редактирование-добавление, удаление-изменение единичного параметра, работа с деревьями (её в некой степени можно аппроксимировать до вывода списка). Ещё важным моментом является работа с фалами, особенно изображениями.

Читать далее »