• Азбука хорошего разработчика. Книжки для чтения

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

      Паттерны проектирования

      Википедия — там, в принципе, на хорошем уровне все описано и приведены примеры на разных языках.
      Базовая книга – классика:
      «Приемы объектно-ориентированного проектирования. Паттерны проектирования» — читал книгу давно, и раза 3. Вам того же советую. Даст возможность понимать большое количество терминов, произносимых другими разработчиками.

      Рефакторинг

      «Рефакторинг. Улучшение существующего кода» — вероятно, эта книга сделала революцию в написании кода. Читается быстро и интересно. Методы рефакторинга должны отложиться в голове до конца жизни. Ваш код отныне будет лучше. В книге есть упоминание про юнит тестинг.
      Читать дальше →
    • Write once, render anywhere — используем один шаблонизатор на клиенте и сервере

      Введение


      Все вы наверняка уже слышали или используете в повседневной жизни различные шаблонизаторы, они же template engine-ы. Используем мы их обычно для генерации HTML кода. В этом процессе у нас как правило есть какая-то модель данных и HTML шаблон который мы этими данными наполняем.
      Раньше HTML страницы мы генерировали только на серверной стороное, а сегодня все чаще делаем это и на клиенте. Спрос родил предложение, и у нас стало все больше появляться шаблонизаторов которые работают на JavaScript, а есть и шаблонизаторы с реализациями на множестве языков одновременно, в том числе и на серверных, какие возможности нам это дает, я попытаюсь описать в данной статье.
      Читать дальше →
    • Google выложила руководства для начинающих SEO-оптимизаторов

        В блоге для веб-мастеров инженеры Google подготовили и выложили два руководства разной степени сложности для тех, кто еще не знаком с базовыми методами оптимизации под поисковую машину Google.

        Надо сразу сказать, что первое руководство действительно для новичков — профессионалы вряд ли обнаружат там нечто секретное и таинственное. Любопытно только то, что в Google не поленились и подготовили соответствующий одностраничный PDF-документ сразу в 13 языковых редакциях, включая и русский (английская версия). При этом документ (А4) выглядит визуально привлекательно и информативно, так что его можно распечатать и повесить в офисе, если вдруг возникнет необходимость в напоминании банальностей.

        Второй документ более серьезного уровня и уже только на английском языке. Он довольно подробно и с примерами описывает различные «best practices» вроде создания уникальных заголовков веб-страниц, заполнения мета-тегов или улучшения структуры URL. Забрать документ можно отсюда.
        Источник
      • MongoDB для разработчиков

        • Tutorial
        Всемирно известная компания 10gen, разрабатывающая опенсорсную базу данных MongoDB, представляет уникальный курс по MongoDB для разработчиков. Вы научитесь всему необходимому для создания вашего приложения на основе MongoDB. Курс позволит вам овладеть навыками установки, работы с JSON, созданием схем, запросов, сохранения данных, индексации и работы с языковыми драйверами. В процессе курса вы будете строить платформу для блога, основанного на MongoDB.
        Shut up, and take my money!
      • Yate: Яндекс.Почта перешла на новый шаблонизатор

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

          Тогда в качестве шаблонизатора мы использовали XSL, а данные передавали в формате XML. Переведя проект на новый интерфейс, мы начали искать другие способы ускорения работы интерфейса Яндекс.Почты.

          Недавно мы перевели всю Почту на JS-шаблонизатор и JSON-данные.
          И вот как это проходило
        • Различия асинхронной и многопоточной архитектуры на примере Node.js и PHP

          В последнее время наблюдается рост платформ, построенных на асинхронной архитектуре. На асинхронной модели построен самый быстрый в мире веб-сервер nginx. Активно развивается шустрый серверный javascript в лице Node.js. Чем же хороша эта архитектура? Чем она отличается от классической многопоточной системы? На эту тему было написано огромное множество статей, но полного понимания предмета они дали далеко не всем. Часто приходится наблюдать споры вокруг Node.js vs PHP+apache. Многие не понимают, почему некоторые вещи можно сделать на Node.js, но нельзя на PHP или наоборот — почему вполне правильный рабочий код на PHP сильно замедлится в Node.js, а то и повесит ее. В данной статье я бы хотел еще раз подробно объяснить разницу в их архитектуре. В качестве примеров двух систем, возьмем вебсервер с PHP и Node.js.
          Читать дальше →
        • Как откатить коммиты на github.com

            Ситуация когда у вас уже есть клон репозитория с которым вы работаете, делаете pull и смотрите что там какая то фигня накоммитчена от разработчиков.

            Выбираем нужный бранч(ветку), у меня она master
            git checkout master

            делаем откат изменений в репозитории для примера на два коммита назад
            git reset --hard HEAD~2

            Можно сделать до какого то определенного коммита по хешу
            git reset --hard HEAD hash
            Хеш можно взять в вебинтерфейсе гитхаба.

            Далее делаем принудительный коммит в основной репо на гитхабе
            git push -f origin master
            без -f будет ругаться что у вас версия младше чем в гитхабе и вам надо сделать pull
          • Профилирование JavaScript с Chrome Developer Tools

            • Translation
            Скорость сайта состоит из 2 частей: как быстро загружается страница и как быстро работает код в ней. Многие сервисы, такие как минификаторы или CDN, помогают ускорить загрузку, но скорость работы кода зависит только от вас.

            Небольшие изменения в коде могут давать огромные изменения в производительности. Всего несколько строк могут означать разницу между быстрым сайтом и диалогом “Unresponsive Script”.
            Читать дальше →
            • +58
            • 52k
            • 5
          • Edit-in-place на компонентах Bootstrap

              Привет, Хабр!
              В этой статье я коротко расскажу о библиотеке Editable for Bootstrap, позволяющей вводить данные на страницу методом edit-in-place и основанной на компонентах Bootstrap. Я использую ее в админ-части проектов, либо когда нужно оперативно сделать интерфейс с возможностью пользовательского ввода.
              Подробности под катом.
              Читать дальше →
            • IT-компот #11 Подкаст о программировании и технологиях

                image
                Общаемся о новинках от Microsoft. Говорим про светлую силу open-source. Про то, как мы использовали парное программирование и что из этого выходило.

                В выпуске:
                • Новинки от Microsoft. Windows Phone 8: трудности перехода.
                • Зачем программистам «рождать» побочный open-source. Github — наше все.
                • Парное программирование. Все ругают, а мы используем.


                Слушать в Itunes
                слушать на podfm
                скачать файл(58,7 Мб)
                Читать дальше →
                • –3
                • 564
                • 2
              • 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.

                  Читать дальше →
                • Внутренности jQuery. Поиск кода, выполняемого по событию

                    Чем дальше в лес, тем толще партизаны. Нет, не так. Чем старше веб, тем больше джаваскрипта

                    Клиентского кода в веб-приложениях с каждым годом действительно становится все больше. Подчас это десятки файлов с сотнями функций. И что делать, когда нам нужно поменять код, выполняемый по событию (например, клик по ссылке). Как его найти? Задавшись решением этой задачи, я придумал несколько разных вариантов. Каждый из них имеет свои плюсы и минусы. И в конце статьи я предлагаю метод, который мне кажется оптимальным.
                    Читать дальше →
                  • Heroku — Экспериментальная поддержка Node.js

                    • Translation
                    Сегодня мы предлагаем экспериментальную поддержку node.js ограниченному множеству пользователей. Мы знаем, что существует большой спрос, и мы будем работать с таким количеством пользователей, которое мы сможем поддержать. Подробности ниже.
                    Читать дальше →
                  • Кодировки

                      Тут на самом деле всё просто. Храните все тексты в Unicode и будет вам счастье (при условии правильно установленной опции 'encoding' конечно ;) В ином случае (у вас куча текстов в национальных кодировках) придется
                      дочитать топик до конца
                    • Upload progress средствами PHP 5.4

                      В текущее время существует множество вариантов определения прогресса загрузки файла: как с помощью клиентских технологий, так и с помощью серверных. Примером клиентских технологий служат swfupload с использованием Flash, примером серверных — nginx_uploadprogress_module.
                      Грядущий релиз PHP преподносит нам подарок в виде родного инструмента для определения прогресса закачки файла.
                      Разберемся с ним.
                      Читать дальше →
                    • Подборка html/javascript/css инструментов и библиотек от SmashingMagazine

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

                      Множество удобных инструментов, найденных командой популярного онлайн журнала SmashingMagazine, приводится под катом
                      Читать дальше →
                    • Хабравстреча в Киеве

                        Ждать снега в Киеве как всегда можно долго, а вот для хабравстречи небесная канцелярия не нужна. Посему в следующий четверг, 1 декабря, проводится Первая Киевская Хабравстреча.


                        Просим под кат
                        Читать дальше →
                      • Введение в HTML5 History API

                        • Translation
                        До появления HTML5 единственное, что мы не могли контролировать и управлять (без перезагрузки контента или хаков с location.hash) — это история одного таба. С появлением HTML5 history API все изменилось — теперь мы можем гулять по истории (раньше тоже могли), добавлять элементы в историю, реагировать на переходы по истории и другие полезности. В этой статье мы рассмотрим HTML5 History API и напишем простой пример, иллюстрирующий его возможности.

                        Основные понятия и синтаксис


                        History API опирается на один DOM интерфейс — объект History. Каждый таб имеет уникальный объект History, который находится в window.history. History имеет несколько методов, событий и свойств, которыми мы можем управлять из JavaScript. Каждая страница таба(Document object) представляет собой объект коллекции History. Каждый элемент истории состоит из URL и/или объекта состояния (state object), может иметь заголовок (title), Document object, данные форм, позиция скролла и другую информацию, связанную со страницей.

                        Основные методы объекта History:
                        1. window.history.length: Количество записей в текущей сессии истории
                        2. window.history.state: Возвращает текущий объект истории
                        3. window.history.go(n): Метод, позволяющий гулять по истории. В качестве аргумента передается смещение, относительно текущей позиции. Если передан 0, то будет обновлена текущая страница. Если индекс выходит за пределы истории, то ничего не произойдет.
                        4. window.history.back(): Метод, идентичный вызову go(-1)
                        5. window.history.forward(): Метод, идентичный вызову go(1)
                        6. window.history.pushState(data, title [, url]): Добавляет элемент истории.
                        7. window.history.replaceState(data, title [, url]): Обновляет текущий элемент истории
                        Читать дальше →
                      • Tactoom.com изнутри — социальная блог-платформа на NodeJS/NoSQL

                          Tactoom.com - under the hoodИтак, пришло время раскрыть некоторые карты и рассказать о том, как устроен Tactoom изнутри.

                          В этой статье я расскажу о разработке и выведении в production веб-сервиса с использованием:
                          NodeJS (fibers), MongoDB, Redis, ElasticSearch, Capistrano, Rackspace.
                          Читать дальше →