• Symfony2 Voters и Doctrine Filters на страже безопасности

      Все началось, когда я настраивал систему безопасности одной CRM. Как это часто бывает, в ней были пользователи с разными уровнями доступа к основным данным (назовем их entities). Вид основного грида у них был одинаковый, необходима была гибкость настроек доступа к entities. Сперва я подумал об ACL, но…
      Читать дальше →
      • +9
      • 12.9k
      • 9
    • Верстка email рассылок от А до Я для чайников

      Уже 3 с лишним года занимаюсь дизайном и версткой почтовых рассылок, которые ориентированы на англоязычных пользователей. За время работы перелопатили огромную кучу информации, перепробовали много вариантов верстки, набили достаточное количество шишек. Были найдены и исправлены типичные баги, которые в той или иной мере повторялись во всех почтовых клиентах. Также нашлись проблемы с некоторыми CSS свойствами — различные почтовые клиенты интерпретировали их по разному. Каждое письмо тестировалось на самых популярных почтовых клиентах: Gmail, Outlook, Yahoo, Android, iOS, MozillaThunderbird, Microsoft Outlook, The Bat. Рассылки ходят на сотни миллионов пользователей и приносят очень хорошие результаты. Итак, приступим к изучению.
      Читать дальше →
    • Несколько интересностей и полезностей для веб-разработчика #32

        Доброго времени суток, уважаемые хабравчане. За последнее время я увидел несколько интересных и полезных инструментов/библиотек/событий, которыми хочу поделиться с Хабром.

        ICEcoder



        Это не просто песочница, а полноценный open source редактор в вашем браузере. Вообще существуют десктопные версии, но по-моему, наибольшие внимание разработчики уделают веб-версии. ICEcoder поддерживает HTML, CSS, LESS, SASS, JS, Coffee, PHP, RonR, Python, C/C++/C#, Java, Lua, Rust, SQL, Markdown, всего более 60 языков! Фичи: возможность совместной работы с кодом, Emmet, LiveReload, работа с БД, колопикер, diff tool, линтеры и еще целое множество удачных интерфейсных решений. Повторюсь — это все в вашем браузере!

        Читать дальше →
        • +45
        • 50.7k
        • 9
      • Постраничная верстка rel=«next|prev»

        • Translation
        Наряду с использование атрибута rel=«canonical» для указания поисковому боту на дублирование контента, теперь возможно использовать для HTML ссылок значение rel=“next” и rel=“prev” для обозначения положения текущей страницы в отношении соседних в рамках навигационного блока. В рамках веба встречаются различные варианты использования постраничной навигации — статья, разделенная на несколько страниц, либо категория товаров распределенных по нескольким страницам, либо ветка форума, разделенная на последовательность URL-ов. Теперь, включив rel=“next” и rel=“prev” в верстку страниц, мы можем указать Google:
        • Создать консолидированный индекс страниц, чтобы ссылки не рассеивались между отдельными страницами page-1.html, page-2.html, и так далее
        • При поиске направить пользователя на наиболее релевантную страницу среди всех остальных, например в начало статьи, разбитой на несколько страниц
        Подробности и нюансы использования
      • Кастомные социальные кнопки

        Недавно участвовал в разработке одного проекта — фото конкурса. По задумке, рейтинг фото альбомов должен формироваться из суммы всех публикаций в социальных сетях: Facebook, Вконтакте, Twitter. Т.е. общий рейтинг фотоальбома расчитывается:
        Рейтинг фотоальбома = кол-во «Share» в Facebook + кол-во «Сохранить» в Вконтакте + кол-во «Retweet» в Twitter

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

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

        Итак:
        • количество лайков будем получать от REST сервисов каждой социалки
        • кнопки рисуем свои и обрабатываем событие click

        Читать дальше →
      • Treelogic Mini 4Gb, обзор плеера

          Всем привет.
          В качестве вступления: время моих ежедневных поездок на работу и с работы в среднем составляет 2,5 часа не считая пеших переходов между видами транспорта. Тут-то и возник вопрос — на чём слушать музыку?! Первое время выручил телефон, но поскольку я немного рассеян и постоянно забываю его зарядить, есть риск остаться без связи. Я сформулировал свои требования к плееру и пошел выбирать. Итак, знакомьтесь, Treelogic Mini 4Gb.
          Внутри — фото, описание и опыт использования. (трафик)
          image

          Читать дальше →
        • Алхимия. Привет из прошлого

            О чём речь ?


            Alchemy — игра для DOS-а, цель которой создать новую цивилизацию.
            Мир в котором всё можно построить из воды, земли, воздуха и огня.



            Игра развивает память и тренирует мышление.
            Она по своей сути гениальная, я подсел на неё очень крепко и уже второй вечер трачу на её прохождение :)
            Скрины, хинты и ссылки внутри
          • Одновременное использование нескольких операционых систем при помощи colinux, Virtual PC и утилиты Desktops

              Преамбула:


              Последнее время, мне приходится писать немного кода, и есть необходимость тестировать результаты его работы под разными платформами. Естественно я использую виртуальные машины.
              Так как, кроме меня, моим ноутбуком пользуется еще и жена то основная ОС на нем winxp. Мне в принципе все равно с чем работать поэтому пусть будет windows…

              Раньше, когда у меня в качестве оконного менеджера использовался IceWM, мне нравилось то что я могу использовать несколько «рабочих столов», для запуска различных тематических приложений в отдельно отведенном для них месте. Под windows такая возможность тоже есть, но те утилиты которые я пробовал, имели те или иные недостатки, поэтому рано или поздно мне приходилось от них отказываться… В конце концов я остановился на Desktops (от sysinternals) она тоже не лишена недостатков, но стабильность ее работы и небольшой размер перевесили все «минусы».

              Цель:


              Чего мы пытаемся добиться:
              • запустить на каждом из «рабочих столов» по отдельной операционной системе
              • сделать переключение между ними максимально удобным и быстрым


              Читать дальше →
            • «Прибитый» к низу футер без заморочек

                Доброго времени суток, Хабраюзеры.
                Ввиду непонятного назначения сего топика — CSS Sticky Footer / Прилипающий футер и того, что моя не является зарегистрированным юзером Хабрахабра, предлагаю свой вариант.

                Вариант стар и испробован сотнями проектов, но для начала опишу минус вышеупомянутого способа:
                — если Вам нужен попап или много попапов (в неаяксовых вариантах) внутри #main, то разделив #main и #footer глобальным z-index-ированием (для ИЕ6) Ваши попапы будут залезать под Ваш футер, т.к. хотя бы для ФФ, но z-index у #footer надо будет указывать больше, чем у #main.

                И так, метод:

                <div class="page">

                <div class="header">
                </div>

                <div class="content">
                </div>

                <div class="footer">
                </div>

                </div>

                Также прилагается стилевая часть шаблона:

                .page { width: 100%; min-width: 996px; min-height: 100%; position: relative; z-index: 1; }
                .header { width: 100%; height: 150px; position: relative; z-index: 3; }
                .content { width: 100%; padding-bottom: 50px; position: relative; z-index: 2; }
                .footer { width: 100%; height: 50px; left: 0; right: 0; bottom: 0; position: absolute; z-index: 4; }

                Для ИЕ6 думаю стили всем известны, но всё же опишу то, что использую лично я, то, что испытанное несколькими сотнями проектов и то, что ни разу не подвело даже в самых непростых дизайнах:

                * html .page { height: 100%; width: expression((document.compatMode && document.compatMode == 'CSS1Compat') ? (document.documentElement.clientWidth < 996 ? "996px" : "auto") : (document.body.clientWidth < 996 ? "996px" : "auto")); }

                Многие будут ругаться на длинный экспрешн, но он отлично работает и он нужен один, в отличие от предыдущего способа!
                Способ очистки после плавающих элементов в принципе тот же.

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

                Плюсы:
                • один expression для ИЕ6 на ширину
                • нет лишних, ненужных блоков

                Минусы:
                • фиксированная высота


                P.S. Не ругайте за форматирование, я обязательно сделаю во втором посте всё красиво.

                UPD: Пример

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

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

                  (если можно то как именно это делается в гимпе или фотошопе...)
                • Ускорение загрузки Windows for fun and profit

                    image Пожалуй, начну с того, что если перегружаться 15 раз в год, то любой «тюнинг» процесса загрузки отнимает больше времени, чем будет выиграно на перезагрузках за все время жизни системы. Однако, спортивный интерес берет свое, тем более, что люди интересуется процессом оптимизации быстродействия. А загрузка оказалась самым очевидным кандидатом в примеры того, как на мой взгляд должен выглядеть этот самый процесс. Сразу скажу, что грузиться будем с 5400 rpm винта, грузиться будем в «рабочую» систему: помимо недобитой вендорской крапвари там стоит еще куча всякого типа вижуал студии, антивируса, скайпа, стима, гуглапдейтера и пр…

                    Про то, почему отключение pagefile-а скорее вредно, чем полезно — как нибудь в другой раз, а пока…
                    Под катом много однообразных картинок и немножко унылого текста
                  • Принудительное перемещение и/или установка приложений на карту памяти без Root'a

                    Данный топик посвящен пользователям ОС Android а в частности решению насущной проблемы с нехваткой внутренней памяти устройства.
                    А самое главное что действия описанные в статье не требуют получения Root прав, что является отпугивающим фактором для большинства рядовых пользователей, так как рутованный Андроид лишается гарантии и получения официальных обновлений. Всех кто заинтригован прошу под кат.
                    Читать дальше →
                  • Формы в Angularjs. Как я обрел любовь

                    Мне предстояло в очередной раз сделать это. Казалось бы ничего ужасного, я делал это сотни раз. Но чувство… чувство, что все это неправильно, так не должно быть и должен быть другой выход, не покидало меня. Тогда я еще не знал, что в скором времени мне предстоит встреча, которая навсегда изменит мой мир, откроет глаза и наполнит жизнь смыслом. Смыслом вставать каждое утро, смыслом делать то, что практически перестало доставлять мне удовольствие, смыслом делиться этим чувством с другими.
                    Читать дальше →
                  • Директивы в Angularjs для начинающих. Часть 1

                    • Tutorial
                    На мой взгляд, директивы являются основной изюминкой декларативного стиля Angularjs. Однако, если открыть комментарии пользователей в разделе официальной документации Angularjs, посвященной директивам, то вы увидите, что самый популярный из них: «Пожалуйста, перепишите документацию, сделайте ее более доступной и структурированной. Начинающему разработчику на Angularjs сложно в ней разобраться» («Please rewrite a clearer well structured documentation of directives., this is not friendly to first time angular developers»). С этим трудно не согласится, документация пока еще сыровата и в некоторых моментах приходится прилагать большие усилия, чтобы разобраться в логике и сути функционала. Поэтому я предлагаю вам свой вольный пересказ данной главы в надежде, что кому-то это позволит сэкономить время, а так же рассчитываю на вашу поддержку и участие в комментариях. Итак, поехали!
                    Читать дальше →
                  • Установка Atom от GitHub на Ubuntu, OpenSUSE и Windows. Краткий обзор

                    • Tutorial
                    image

                    Вчера вышла сборка редактора Atom от GitHub для Windows, до этого был доступен только для Mac OS.
                    А установка для *nix систем описана в официальном репозитории проекта.
                    Здесь я расскажу как мы его устанавливали для следующих ОС, в порядке убывания сложности:
                    • Windows 7
                    • Ubuntu 14.04
                    • OpenSUSE 13.1

                    А так же первые впечатления от его использования.
                    Сразу оговорюсь, для Windows и Ubuntu установка — это пара шагов. Для OpenSUSE, чуть больше.
                    Внимание трафик — картинки.
                    Подробности
                  • Приводим в порядок css-код. Опыт Яндекса

                      Всем привет!

                      Я работаю над фронтендом огромного проекта — поисковой выдачи Яндекса. И у нас, как и у любого другого большого веб-проекта, есть огромное количество css-кода и немаленькая команда, которая с ним взаимодействует.

                      Когда много людей, используя разные инструменты, пишут и редактируют css, со временем этот css может получиться очень запутанным, неконсистентым и в целом начинает выглядеть плохо. Например, кому-то удобнее писать вендорные префиксы в одном порядке, кому-то — в другом, кто-то ставит кавычки вокруг url, кто-то — нет, а кто-нибудь фикся срочную багу к релизу мог бы, к примеру, написать position: relative в начале блока свойств, незаметив что где-нибудь внизу между color и box-shadow, уже есть position: absolute, и долго гадать, почему у него ничего не работает.



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

                      Как мы этого добились, можно прочитать под катом.
                      Читать дальше →
                    • Подборка полезных CSS рецептов, или чем мы занимаемся на голых пятницах

                      • Tutorial


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

                      Итак, представляем вашему вниманию сборку интересных и (надеемся) малоизвестных HTML и CSS-рецептов. Будем рады, если каждый из вас узнает что-то новое!
                      Вперед!
                    • Правильная адаптивная типографика с FlowType.JS

                        image


                        Согласно правилам типографики, контент страницы хорошо читается, если в строке от 45 до 75 символов. При разработке адаптивного дизайна это сложно реализовать только лишь с помощью Media Queries. Появился jQuery плагин FlowType, который помогает добиться такого соотношения при любом размере экрана и ширине окна.

                        FlowType меняет размер шрифта и междустрочный интервал в соответствии с шириной блока контента. Кроме того можно задавать параметры плагина, например максимальную и минимальную ширину окна, при которой FlowType будет работать.
                        Читать дальше →
                        • +20
                        • 15.1k
                        • 7
                      • Генераторы в действии

                        Небольшое вступление


                        Не так давно я решил для себя, что пора восполнить большой пробел в знаниях и решил прочитать про переходы между версиями PHP, т.к. понимал, что остался где-то между 5.2 и 5.3 и этот пробел необходимо как-то устранить. До этого я читал про namespaces, traits и т.д, но дальше чтения не уходило. И вот тут я заметил генераторы, почитал документацию, одну из статей на хабре на этот счет и после этого возникла мысль — а как раньше без них жили-то?

                        Данным переводом хочу помочь хотя бы новичкам, поскольку на php.net документация по генераторам на английском и, на мой взгляд, должным образом не раскрывает всю идею и места применения. Текста много, кода чуть меньше, картинок нет. Потребуются общие знания, например, про итераторы. Очевидный код комментировать не буду, а вот сложные для понимания примеры постараюсь объяснить в силу своих знаний.

                        UPD1: Изменил расплывчатую формулировку, про которую говорили в комментариях.
                        UPD2: Добавил решение с принудительным break.

                        И сразу под хабракат