• Composer — менеджер зависимостей для PHP

      Composer (getcomposer.org) — это относительно новый и уже достаточно популярный менеджер зависимостей для PHP. Вы можете описать от каких библиотек зависит ваш проект и Composer установит нужные библиотеки за вас! Причём Composer — это не менеджер пакетов в классическом понимании. Да, он оперирует с сущностями, которые мы будем называть «пакетами» или библиотеками, но устанавливаются они внутрь каждого проекта отдельно, а не глобально (это одно из основных отличий от старого-доброго PEAR).

      Кратко, как это работает:
      1. У вас есть проект, который зависит от нескольких библиотек.
      2. Некоторые из этих библиотек зависят от других библиотек.
      3. Вы описываете в своём проекте те библиотеки, от которых непосредственно зависит ваш код.
      4. Composer находит нужные версии требуемых библиотек для всего проекта, скачивает их и устанавливает в папку вашего проекта.

      При создании Composer авторы черпали идеи и вдохновение из аналогичных проектов: npm для Node.js и Bundler для Ruby.

      Изначально он был спроектирован и разработан двумя людьми Nils Adermann и Jordi Boggiano, сейчас в проекте участвует более двадцати контрибьюторов, Проект написан на PHP 5.3, распространяется под лицензией MIT и доступен на github.

      Первые коммиты были сделаны апреле 2011 года и на сегодняшний день Composer находится в стадии «alpha3». Однако, он уже достаточно стабилен и используется многими популярными PHP проектами (например, Symfony 2). Список проектов использующих Composer можно посмотреть на сайте packagist.org — это официальный репозиторий Composer пакетов. Кстати, на недавней конференции Devconf 2012 разработчик фреймворка Yii в своём докладе упомянул, что Yii2 скорее всего тоже будет использовать Composer.

      В этой статье я кратко опишу основные возможности Composer и мы попробуем создать демонстрационный проект использующий Composer для загрузки необходимых библиотек. Все примеры будут доступны на github.com и bitbucket.org.

      Читать дальше →
    • Backbone.js для «чайников»

        Backbone.js для чайников
        Как то поздним вечерком мне пришла мысль изучить Backbone.js и привязать его к уже написанному на jQuery сервису. Сервис уже серьёзно расширился и меня достало это нагромождение обработчиков кликов, запросов и логики. Поэтому, я как усердный школьник полез в официальную документацию. Но либо я тупой, либо мой английский меня подкачал, либо то и другое вместе, но я не черта не понял. Я прочитал уже второй раз, внимательно, и для особо одарённых мест использовал google translate. Прочитал также и пример ToDo List. Всё показалось понятно, ровно до той поры пока я не стал писать. После чего я взял всё что нашел по этой библиотеке, как на английском так и переводы. Прочтя кипу документации я решил, что сейчас вроде всё понял. Я напрягся, но… Не вышел каменный цветок у мастера Данилы, т.е. вышло, но это явно был не цветок, и камень как то неправильно пах. Тогда, как прилежный ученик, я решил написать «Hello, KittyWorld» с нуля. Попутно комментируя и сохраняя шаги в hg, у меня получилось введение в backbone.js framework для таких как я, особо одарённых.
        Данные 7 шагов с комментариями.
      • Клавиатурные сокращения с Javascript

          Mousetrap — маленькая библиотека (1.4 KB) для обработки клавиатурных нажатий.

          // single keys
          Mousetrap.bind('4', function() { highlight(2); });
          Mousetrap.bind("$", function() { highlight(3); }, 'keydown');
          Mousetrap.bind('x', function() { highlight(4); }, 'keyup');
          
          // combinations
          Mousetrap.bind('command+shift+K', function() { highlight(7); });
          Mousetrap.bind(['command+k', 'ctrl+k'], function() { highlight(8); });
          
          // gmail style sequences
          Mousetrap.bind('g i', function() { highlight(11); });
          Mousetrap.bind('* a', function() { highlight(12)});
          
          // konami code!
          Mousetrap.bind('up up down down left right left right b a enter', function() {
              highlight([15, 16, 17]);
          });
          

          Как видно, поддерживаются как одиночные нажатия, так и сочетания и клавиатурные комбо.

          Работает в Internet Explorer 6+, Safari, Firefox, Chrome (с включенным Vimium не работает).

          Пробуйте — craig.is/killing/mice
        • Размещение приложения node.js на dotcloud.com

            dotCloud — облачная платформа для хостинга веб-приложений. Бесплатный аккаунт хорошо подходит для обучения.

            Ее преимущества:
            • можно бесплатно использовать два сервиса. В отличие от heroku, можно сделать полноценное приложение с базой данных.
            • файловая система доступна для записи — удобнее будет вести логи
            • хорошая документация.


            Но есть и недостатки:
            • бесплатные сервисы «засыпают», если ими никто не пользовался последних полчаса. Это означает, что возможна такая ситуация: вы заходите на свой сайт и вместо него видите стандартную страницу сервиса с просьбой подождать. Через какое-то время (до нескольких минут) сервис «просыпается» и начинает работать, как положено.
            • по умолчанию используется версия node 0.4.10. Но это можно исправить.

            Читать дальше →
          • Цитаты о разработке программного обеспечения

            • Translation
            Несколько цитат о дизайне и разработке программ. Думаю, каждый найдет что-нибудь себе по вкусу. В дополнение к этому топику.

            Простота — дух эффективности. // A. Freeman
            Читать дальше →
          • Плохие привычки программистов

            • Translation


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

            Наши привычки постоянно развиваются и меняются. Изменяется стиль кодирования, подход к написанию кода в целом. Обычно это хорошо, но иногда этот процесс минует некоторые плохие привычки и они надолго остаются с нами. Я хотел бы поделиться размышлениями о некоторых «не очень хороших» привычках, которые я наблюдал в себе и в других людях на протяжении многих лет. Некоторые даже могут быть не похожи на плохие…
            Читать дальше →
          • Работа с изометрическими матрицами. Часть 1

              Изометрия — вещь, стара как компьютерные игры.
              Сейчас пришло время, когда интернет и игры стали совмещаться в браузере (flash не в счет).
              Примеров браузерных игр много, большая часть из них казуалки, но для гиков более интересны жанры action, RTS и RPG, а для разработчиков — их реализация.



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

              Под катом я расскажу:
              1. Как рисовать изометрическую матрицу
              2. Как нарисовать fullscreen изометрическую матрицу

              Читать дальше →
            • Искусство публичных выступлений

                Эта статья открывает серию статей — если окажется, что Хабраколлеги сочтут ее интересной, ибо первое правило публичных выступлений гласит: рассказывай людям о том, что им интересно!

                Если вы раньше не выступали на публике или боитесь это делать — вам под кат. Если вы считаете себя опытным докладчиком, для вас будет вторая статья серии.

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

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

                Читать дальше →
                • +211
                • 55.7k
                • 59
              • Улучшаем производительность HTML5 canvas

                • Translation
                В последнее время мне везет натыкаться на интересные статьи для перевода. На этот раз – статья на HTML5Rocks о производительности HTML5 canvas. Автор пишет о некоей стене, в которую упираются разработчики при создании приложений. Какое-то время назад в нее уперся и я при портировании старой-доброй игры на canvas.

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


                image
                1. Вступление
                2. Тестирование производительности
                3. Предварительно отрисовывайте в виртуальный canvas
                4. Группируйте вызовы
                5. Избегайте ненужных изменений состояния
                6. Отрисовывайте только разницу, а не весь холст
                7. Используйте многослойных canvas для сложных сцен
                8. Избегайте shadowBlur
                9. Различные способы очистить экран
                10. Избегайте нецелых координат
                11. Оптимизируйте анимации с помощью 'requestAnimationFrame'
                12. Большинство мобильных реализаций canvas – медленные
                13. Заключение
                14. Ссылки



                Вступление


                HTML5 canvas, который начинался, как эксперимент компании Apple, – наиболее широко распространенный стандарт для 2D режима непосредственной графики в интернет. Многие разработчики использую его в широком круге мультимедиа проектов, визуализаций и игр. Как бы то ни было, с ростом сложности приложений, разработчики нечаянно натыкаются на стену производительности.
                Читать дальше →
              • Split button dropdown без javascript

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

                  Совсем недавно мне нужно было сотворить некий multi-action control для списка записей. На ум сразу же пришло использование split button dropdown, т.е. в данном случае кнопки отправки формы совмещенной с выпадающим списком экшенов. Подобные контролы не редко можно встретить в современных интерфейсах. Также существуют готовые решения входящие в сборки типа Twitter Bootstrap.

                  Однако реализации подобные бутстраповским не нравятся по нескольким причинам:
                  • излишняя и не совсем нейтивная разметка
                  • заточенность под javascript

                  Именно по этим причинам я решил заделать собственный вариант подобного контрола. Сразу хочу отметить, что все идеи реализовать так и не удалось, поэтому способ не претендует на полную замену js-решениям. Опять же, выкладываю его только для тех, кому будет полезно.
                  Читать дальше →
                • Простая кастомизация Checkbox и Radio

                    Вместо вступления


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

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

                    К сожалению, одного только CSS частенько не достаточно, чтобы с легкостью оформить тот или иной элемент формы. Наверное поэтому многие используют штуки вроде Uniform для своих форм. Лично я всегда стараюсь сократить количество Javascript, используемого в подобных целях, поэтому хочу рассказать о совершенно нативном HTML+CSS методе кастомизации радио-кнопок и чекбоксов.

                    Уверен, что на большая часть специалистов на Хабре, применяют схожие методы, для тех же, кто использует js-библиотеки, вроде Uniform, надеюсь будет полезной эта статья.

                    Поехали!


                    Итак, сразу поставим цель: оформить чекбоксы и радио-кнопки, чтобы внешне они были похожи на js-магию Uniform, но сделать это максимально простым, нативным по отношению в HTML и CSS способом, а также избежать применения лишних тегов, сохраняя семантику. Как-то так.
                    Читать дальше →
                  • Реалтайм-система мониторинга активности пользователей на сайте. Теперь на Node.js + Socket.IO

                      Добрый день.

                      В этой статье я расскажу о том, как реализовать систему мониторинга активности пользователей с помощью Node.js и Socket.IO. Выглядит это примерно так:
                      image
                      Читать дальше →
                      • +18
                      • 13.1k
                      • 2
                    • Сборник советов и фактов по оптимизации PHP-скриптов

                        image Эту статью давно стоило переписать (слишком много «экономии на спичках»), но руки не доходят. Пускай весит и напоминает о том, как мы глупы в молодости.
                        Одним из основных критериев успешности любого интернет-ресурса является скорость его работы и с каждым годом пользователи становятся всё более и более требовательными по этому критерию. Оптимизация работы php-скиптов — это один из методов обеспечения скорости работы системы.
                        В этой статье я бы хотел представить на суд общественности свой сборник советов и фактов по оптимизации скриптов. Сборник собирался мною достаточно долго, основан на нескольких источниках и личных экспериментах.
                        Читать дальше →
                      • Debian: Apt-Pinning на примере php5-fpm и nginx 1.0.4 (Debian way)

                          Всем Debian'щикам известно, что Debian настолько же стабилен, насколько тормознут на «новинки». В частности, пакета php5-fpm, так многими любимого, в стабильном репозитории до сих пор нет. Решив чуток поискать, как делают люди, понял, что многие собирают его из «сорцов». Мне это как-то стало не по душе. Поэтому сегодня я поставил его в стиле Debian-way, с помощью Apt-Pinning.

                          Apt-Pinning, вкратце, это технология, которая показывает, из какого репозитория предпочтительнее ставить пакет.
                          Читать дальше →
                        • Я медленно удаляю apache с сервера

                            image
                            Есть у меня серверок (да, да, именно серверок, сервером его назвать сложно). Железо старенькое (2 гига оперативы, AMD Athlon(tm) 64 Processor 3500+, програмный RAID). Админю я его сам, без особых навыков и познаний. Когда-то давным давно (больше года назад) поставил на него Debian 5.0 Lenny (это была вторая в жизни установка linux-системы, до этого ставил только Ubuntu на рабочий ноутбук) и панель управления ISPConfig3 по мануалу. Держу на нем несколько (штук 40) сайтов друзей и клиентов, Redmine, SVN и еще немного по мелочам.
                            Периодически все это безобразие падает (load average > 20), и приходится на сервере раз в пару часов перегружать apache или высасывать из пальца очередную попытку оптимизации. В общем полный раздрай и разруха. И вот в одну прекрасную субботу я подумал — а почему бы не решить вопрос раз и… И вот в общем.
                            Под катом — история убитых выходных + предыстория. Интересна в первую очередь мне, чтобы потом легко вспомнить что именно и зачем я ставил. Может быть интересна новичкам в интересном и нелегком (ох, ...) деле серверной оптимизации постепенным(!) переводом сайтов из-под Apache c его ModRewrite под Nginx (кстати, правильно это слово читается «энжинкс»меня поправили, Сысоев на конференциях не раз говорил, что название сервера стоит читать, как «энжин-икс», спасибо bayandin и DorBer ). Возможно, будет интересна более-менее опытным товарищам, оказавшимся в тех же условиях (Debian Lenny, ISPConfig3, слабое железо, несколько хороших, не сильно хороших и разных сайтов). И более опытным может быть интересно зайти, оставить пару комментариев.
                            Если интересно - нажмите сюда, если нет - нажмите звездочку ниже
                          • Backbone.js и routes без хэшей

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

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

                            <a href="http://myapp.com/catalog/#action1">Сделать что-то полезное</a>

                            или даже

                            <a href="http://myapp.com/catalog/#action1/42">Сделать что-то полезное с параметром</a>

                            и всё прекрасно работало. Пользователь, в свою очередь, мог сохранить каждую из этих ссылок, и, в последствии, перейти по ним, сразу же активировав нужную функциональность. Единственный негативный момент во всём этом великолепии — наличие символа "#" (решетка). Не то, чтобы она была плоха сама по себе, но читабельность и «красивость» (с задних рядов мне ещё кто-то про RESTful что-то подсказывает) URL она портила.
                            Читать дальше →
                          • Facebook Timeline

                            • Translation
                            • Tutorial
                            Facebook Timeline делает большую революцию в мире социальных сетей, придает новый вид для пользовательских профилей. Сегодня, посмотрим как просто можно реализовать этот проект с помощью jQuery и CSS.



                            Читать дальше →
                          • Уязвимость PHP в режиме CGI

                            • Translation
                            Существует уязвимость на некоторых настройках основанных на CGI (на Apache + mod_php и Nginx + PHP-FPM не влияет), которая оставалась не замеченной, по крайней мере 8 лет. В 7 разделе спецификации CGI говорится:
                            Некоторые системы поддерживают метод для передачи [sic] массив строк в CGI скрипт. Используется только в случае «индексных» запросов. Определяется «GET» или «HEAD» HTTP-запрос со строкой поиска URL не содержащей незакодированных "=" символов.

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