• Модуль профайлинга «ProfilerToolbar»

      Если вы используете Kohana, то скорее всего уже видели модуль DebugToolbar. Испробовав его на нескольких проектах, стало понятно, что его возможностей явно не хватает. А при использовании Ajax запросов данный модуль становиться вообще бесполезным.

      Имея достаточно свободного времени и желание сделать удобный инструмент для разработки, я решил написать свой велосипед с блэкджеком и плюшками. В итоге получилась такая штуковина:

      ProfilerToolbar
      Читать дальше →
    • Unit-тестирование в Codeception

        Неделю назад я уже писал о Codeception и об его использования для тестирования PHP приложений. После прошлого поста несколько багов было исправлено. Спасибо за багрепорты. Если вы ещё не пробовали Codeception, советую посмотреть прошлую статью и испытать его для приемочных тестов.

        Сегодня я хочу рассказать, как в Codeception реализовано юнит-тестирование в BDD-стиле.

        Замечу, что модуль для тестирования юнитов пока экспериментальный. Не в значении «нестабильный», а в значении «может и будет расширяться для удоволетворения всех необходимых нужд».
        Читать дальше →
      • Загрузка картинок на сервер с использованием HTML5+jQuery+PHP

          Доброго времени суток!

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

          Что нам понадобится?


          Всего лишь небольшие знания HTML5+jQuery+PHP.
          Читать дальше →
        • Подборка html/javascript/css инструментов и библиотек от SmashingMagazine

          • Перевод
          Разработка вебинтерфейсов дело не самое легкое. Причем начать вроде бы несложно, а вот добиться совершенства поистинне проблематично. Уж очень многое необходимо учесть. Просто масса настроек и ньюансов, в которых легко запутаться и сделать что-то не так. К счастью, разработчики и дизайнеры склонны упрощать этот нелегкий труд и постоянно изобретают всяческие инструменты позволяющие сделать больше и лучше за то же самое время, а главное не погрязнуть в мелочах и состредоточиться на чем-то более важном.

          Множество удобных инструментов, найденных командой популярного онлайн журнала SmashingMagazine, приводится под катом
          Читать дальше →
          • +121
          • 18,7k
          • 19
        • HTML KickStart — еще один способ быстро создать интерфейс своего веб-приложения

            Не один раз в комментариях замечал что народ негодует по поводу того, что веб-разработчики стали злоупотреблять использованием Bootstrap от Twitter. Признаюсь, я и сам успел закончить несколько небольших веб-приложений с использованием этого набора скриптов и стилей. Я не против использования Bootstrap от Twitter, я против злоупотребления этим когда есть столько хороших альтернатив. Я почти каждый день натыкаюсь на интерфейсы, построенные на Twitter Bootstrap, и это начинает напрягать. Последней каплей для поиска альтернативы стало изменение интерфейса биллинг панели моего хостера на шаблон Bootstrap. В этой записи я хотел бы немного рассказать про одну из альтернатив — HTML KickStart.
            Читать дальше →
            • +133
            • 25,1k
            • 45
          • Codeception — тестирование по-новому

              PHP очень популярный язык программирования, но тестирование в нем, это скорее прерогатива экспертов, а не жизненная необходимость. Неужели это от того, что PHP-разработчики поголовно быдло-кодеры? Я считаю, что нет. Скорее всё от того, что системы тестирования порой излишне усложнены. А тесты, наоборот, должны были предельно просты: легко читаться, писаться, отлаживаться, и конечно же, быстро выполняться. Мое виденье того как это можно воплотить в PHP вылилось в проект под названием Codeception.

              С ним тесты для ваших веб-приложений могут выглядеть так:
              <?php
              $I = new TestGuy($scenario);
              $I->wantTo('create new blog post');
              $I->amOnPage('/blog/posts');
              $I->click('Create new post');
              $I->fillField('Title','Codeception, a new way of testing!');
              $I->fillField('Text','Codeception is new PHP full-stack testing framework.');
              $I->click('Send');
              $I->see('Congratulations, your post is successfully created!');
              


              Согласитесь, такой тест понятен без дополнительных комментариев.
              А теперь самое интересное: этот код без всяких изменений может быть выполнен как функциональный тест в фреймворках symfony, Symfony2,Zend Framework, а также в браузерном эмуляторе Goutte и даже через Selenium. Таким образом, вам предлагается единый интерфейс для написания функциональных тестов практически для любого сайта.
              Читать дальше →
            • Выбор цветовой палитры по фотографии

                Дизайнер Джессика из компании Seed Design Consultancy занимается подбором оригинальных цветовых палитр для сайтов и предлагает несколько методов, в том числе по произвольному цвету, по рубрикатору тем (осень, минералы, природа). Сейчас она придумала ещё один способ, который несложно реализовать самостоятельно методом статистического анализа.

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


                Читать дальше →
              • Демоны на PHP

                Памятка начинающему экзорцисту.

                Прежде, чем начать: я знаю, что такое phpDaemon и System_Daemon. Я читал статьи по этой тематике, и на хабре тоже.

                Итак, предположим, что вы уже определились, что вам нужен именно демон. Что он должен уметь?
                • Запускаться из консоли и отвязываться от неё
                • Всю информацию писать в логи, ничего не выводить в консоль
                • Уметь плодить дочерние процессы и контролировать их
                • Выполнять поставленную задачу
                • Корректно завершать работу

                Отвязываемся от консоли


                // Создаем дочерний процесс
                // весь код после pcntl_fork() будет выполняться двумя процессами: родительским и дочерним
                $child_pid = pcntl_fork();
                if ($child_pid) {
                    // Выходим из родительского, привязанного к консоли, процесса
                    exit();
                }
                // Делаем основным процессом дочерний.
                posix_setsid();
                
                // Дальнейший код выполнится только дочерним процессом, который уже отвязан от консоли
                

                Читать дальше →
              • AzaThread — многопоточность для PHP с блэкджеком

                  В сети гуляет довольно много решений для эмуляции многопоточности в php. Чаще всего они основываются на форках, но есть и вариации на тему с использованием curl, proc_open и т.п.

                  Все встреченные варианты по тем или иным причинам меня не устроили и пришлось написать свое решение.
                  Набор требований у меня был следующий:
                  • Использование форков;
                  • Синхронный режим с сохранением интерфейса при отсутствии необходимых расширений;
                  • Многократное использование дочерних процессов;
                  • Полноценный обмен данными между процессами. Т.е. запуск с аргументами и получение результата по завершении;
                  • Возможность обмена событиями между дочерним процессом-«потоком» и основным процессом во время работы;
                  • Работа с пулом потоков с сохранением многократного использования, передачи аргументов и получения результатов;
                  • Обработка ошибок выполнения;
                  • Таймауты на выполнение работы, ожидание работы потоком, инициализацию;
                  • Максимум производительности;

                  В результате получилась библиотека AzaThread (старое название — CThread).
                  Подробности
                • Работа с памятью (и всё же она есть)

                    Существует распространенное мнение, что «рядовому» PHP разработчику практически не нужно заботиться об управлении памятью, однако «заботиться» и «знать» всё же немного разные понятия. Попытаюсь осветить некоторые аспекты управлению памятью при работе с переменными и массивами, а также интересные «подводные камни» внутренней оптимизации PHP. Как вы сможете убедиться, оптимизация это хорошо, но если не знать как именно она «оптимизирует», то можно столкнуться с «неочевидными граблями», которые могут вас заставить изрядно понервничать.

                    Читать дальше →
                  • Автодокументация PHP в NetBeans 7.01 с использованием phpDocumentor, рассказываем, настраиваем, исправляем

                      В этой статье вы получите новые и старые знания, в частности некоторые из них появились совершенно недавно в рунете, а некоторые вообще введены мной прямо на месте не отходя от кассы.

                      Итак вы узнаете:
                      • Базовую информацию о том, что такое автодокументация и как она делается в PHP
                      • Настройка генератора документации phpDocumentor в NetBeans 7.01
                      • Ссылка на исправленную мной библиотеку phpDocumentor со списком внесенных изменений, думаю некоторым может сразу же понадобиться
                      • Ссылки на почитать

                      На проекте столкнулся с тем, что потребовалось создать нормальную документацию. Писать отдельно документацию не самый лучший способ, базовое описание библиотеки можно выполнить и в стиле автодокументации. Начал разбираться в вопросе и о чудо, в NetBeans 7.01 оказывается поддерживается PHPDoc, вполне достойно и удобно. Был удивлен бедностью информации по этой тематике в русском сегменте сети. Кроме того, я нашел несколько подводных камней, которые создавали проблемы при настройке под Windows.

                      Если заинтересовались, то добро пожаловать под кат
                      Читать дальше →
                    • Gitlab 2.0

                        image
                        22 декабря мы зарелизили версию 2.0.

                        Основные изменения:
                        • Переезд с gitosis на gitolite.
                        • Пересмотрен дизайн. Теперь он более удобен и практичен.
                        • Улучшенное управление правами
                        • Улучшенная система email — нотификации.
                        • Улучшение dashboard.
                        • Улучшение работы дерева файлов и каталогов.
                        • Atom лента для комитов и тасков.
                        • Багофикс + другие мелкие изменения.

                        Читать дальше →
                      • Разгони свой сайт – автоматическая СКЛЕЙКА + GZIP

                          Разгонись

                          Есть куча советов как убыстрить отдачу сайта – это и статика через nginx и кластеризация и куча еще всяческих хитрых технологий. Однако во всех книжках, советующих как можно повысить загрузку сайтов можно найти две постоянно повторяющиеся темы – «склеивание CSS/JS» и «включение сжатия».
                          Читать дальше →
                        • Битовые операции в PHP на примерах

                            Навеяно статьей об обработке критических ошибок в PHP. Обратил внимание, что несмотря на то, что коды ошибок в PHP специально заточены под битовые операции, тем не менее, что в примерах статьи, что в комментариях, для проверки кодов ошибок используются обычные операторы сравнения.

                            Например, встречались такие варианты:
                            if ($error['type'] == E_ERROR || $error['type'] == E_PARSE || $error['type'] == E_COMPILE_ERROR){…}
                            или
                            if(in_array($error['type'], array(E_ERROR, E_PARSE,  E_COMPILE_ERROR)) {…}

                            В связи с этим решил написать небольшую статью о битовых операциях с примерами их использования.
                            Читать дальше →
                          • Принтер из CD-ROM'a

                            • Перевод
                            image



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

                            Читать дальше →
                          • Простой способ передачи табличных данных из PHP в Excel

                            К написанию данного топика меня подтолкнула одна заметка о генерации xls в PHP.
                            Способ, представленный в той заметке действительно очень прост, но не всегда может быть удобен.
                            Есть множество других способов передать табличные данные из PHP в Excel, я опишу тот, который показался мне наиболее простым и функциональным. Нужно особенно отметить, что что я не говорю о генерации xls файла, а лишь предлагаю пользователю открыть полученные данные при помощи Excel так, что пользователи не искушённые в программировании не заметят подлога.
                            Читать дальше →
                          • Введение в разработку картографических и геолокационных мобильных приложений с применением QtMobility.location

                              Этот пост участвует в конкурсе „Умные телефоны за умные посты

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


                              Речь пойдет о QtMobility.location. Кстати, изображенное на скриншоте приложение содержит менее страницы кода на QML и ни строчки на C++.
                              Читать дальше →
                            • Qt для Android (Necessitas Framework) – действительно ли это работает?

                                Этот пост участвует в конкурсе «Умные телефоны за умные посты».

                                Так получилось, что у меня есть кое-какой опыт разработки приложений под Qt, а недавно появился коммуникатор на Android. Узнав о том, что существует проект Necessitas (раньше он называвался Android-Lighthouse), захотелось проверить возможность запуска Qt приложений под Android на практике.



                                Читать дальше →
                              • Строим гусеничного Bluetooth-робота с камерой. Часть 1

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

                                  Я всегда мечтал создать робота, которым можно управлять с помощью компьютера и смотреть за его перемещениями от первого лица.
                                  Весь процесс я условно разделил на три части:
                                  1. Сборка робота
                                  2. Программирование боротового микроконтроллера
                                  3. Программирование управления с ПК
                                  Читать дальше →