Архив автора: AmdY

Вкусности 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.

Еще можно посмотреть рецепты всяких полезных штучек.

Запись опубликована автором в рубрике PHP.

Паттерн 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 новички приходят к моменту, когда хочется опробовать свои силы в реальной разработке или даже попробовать устроиться на работу. Перед ними встаёт вопрос «с чего начинать новичку«, «какой первый проект написать«. Самое удивительное, что зачастую они пытаются придумать нечто экзотическое, а нужно писать типичный проект. Один из распространённых советов — напиши гостевую книгу, это не плохой вариант, но и не лучший.

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

Социальная безысходность Google

На днях Google решил сделать очередную попытку пробиться на социальный рынок. Всё началось с установки кнопки +1, которая является аналогом фейсбуковским лайкам. Но оказалось что появляется не только кнопка, а целый сервис google plus (google +). В целом ничего инновационного они не сделали, практически всё есть в facebook и vkontakte, но у гугла местами удобнее, а местами понятно только гикам. Интересным может быть только видео комментарии, да и то. практика видео звонков показала, что люди не любят светить своё лицо при общении, предпочитают скрываться за аватарами.

Но обсудить хочется не это, а их систему инвайтов. Помним мы, как точно так же начинал усопший Google Wave. В принципе гугловские инвайты — это этакий фейк, потому что каждый зарегистрировавшийся может притащить ещё определённое число пользователей, т.е. количество зарегистрированных фактически не регулируется, лишь создаётся занавеса избранности.

Так как сервис — социальный, значит люди должны прийти сами и привести весь свой круг общения. Естественно, все коммуникабельные пользователи получили инвайты на google plus уже в первый день. Но есть одно большое НО — гугл это тусовка гиков и в сервис кроме них никто из обычных пользователе не перелезет со своих обжитых аккаунтов в вконтакте и на фейсбуке.

А дальше начинается та самая безысходность социальных проектов из заголовка статьи. О сервисе начинают писать и в комментариях появляются орды гиков, желающих заполучить аккаунт в этот самый социальный google +. То есть получается, что весь этот народ так и не нашёл в своём кругу общения знакомых имеющих инвайты. Почему же так?  Потому что гики не очень то социально активные люди, они больше любят девайсы, нежели людей.

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

И если на wave действительно были какие-то надежды, то у google plus такая же безысходность как у google buzz, который не может соперничать с не гиковским твиттером, к котором регистрируются даже политики, актёры, футболисты и прочие интересные всем люди…

Постепенно начинается обсуждаться вопрос, как отключить google plus, ещё один привет истории buzz. Я вот тоже посмотрел, пощупал. покрутил и собираюсь забыть.

p.s. Если кому из знакомых нужен инвайт, пишите, обязательно пришлю, т.к. раздавать незнакомым не собираюсь и инвайтов хватит на всех знакомых гиков.

Убиваем плохой плагин без загрузки netbeans

Недавно сделал большую глупость и установил на netbeans 7.0 плагин для поддержки smarty. Раньше пользховался этим очень хорошим плагином, но толи в новой версии netbean ситуация изменилась, толи плагин так испортился. В общем, после установки ничего не подхватилось, решил перегрузить IDE и приплыли, загрузить по новому не получилось, примерно на 70% индикатора загрузки процесс остановился.

Бросился в интернеты, искать как загрузить netbeans в режиме safe mode, чтобы не загружались все плагины и можно было в настройках отключить бажный. Ничего не нашёл. Пришлось выбрать иной путь и покопаться в конфигах, благо они в xml.

Делюсь навыком отключения плагина в netbeans через конфиги. Задим в папочку пользователя и следуем по пути .netbeans\7.0\config\Modules\ там и находим наш плагин, открываем в редакторе и видим такую структуру

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//NetBeans//DTD Module Status 1.0//EN"
                        "http://www.netbeans.org/dtds/module-status-1_0.dtd">
<module name="org.netbeans.modules.php.smarty">
    <param name="autoload">false</param>
    <param name="eager">false</param>
    <param name="enabled">true</param>
    <param name="jar">modules/org-netbeans-modules-php-smarty.jar</param>
    <param name="reloadable">false</param>
</module>

Соответственно нужный нам параметр enable выставляем в false и спокойно загружаемся. После загрузки я опять активировал плагин и больше проблем с загрузкой не было. Но вот плагин так и не подхватил tpl, даже когда создавал новый через визард и выбирал smarty template. В итоге пришлось отказаться от него. Благо у меня всего 1 проект со smarty.