• Производительный и читабельный XSLT: сборник советов

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

    Именованные шаблоны

    Многие «проблемы» XSLT связаны с тем, что мы слишком часто пытаемся писать на нём в процедурном стиле. Мы постоянно пытаемся сделать из него Smarty, но упираемся в один простой факт — XSLT является декларативным языком, как бы необычно это для нас не выглядело.
    Например, мы пытаемся использовать именованные шаблоны, воспринимая их как процедуры, выводящие данные в определённом формате:

    <xsl:template name="CreateItemLink">
        <xsl:param name="item"/>
        <a href="/item/?id={$item/id}">
            <xsl:value-of select="$item/name"/>
        </a><br/>
    </xsl:template>


    * This source code was highlighted with Source Code Highlighter.

    Наверное, многие программисты именно так написали свой первый шаблон. И он неплохо решает свою задачу. Декларативный XSLT предлагает немного другой подход:

    <xsl:template match="item">
        <a href="/item/?id={id}">
            <xsl:value-of select="name"/>
        </a><br/>
    </xsl:template>


    * This source code was highlighted with Source Code Highlighter.

    Разница совсем не велика. Дело вкуса и стиля программирования. Давайте посмотрим, как шаблон будет использоваться в дальнейшем.

    Читать дальше →
  • Виджет выпадающих списков Chosen: реализуем динамическое добавление позиций

      По мотивам топика Chosen: сделай выпадающие списки более дружественными.

      Довольно симпатичный виджет, иногда даже может быть полезен (допустим когда есть определенные требования к дизайну). Но в данный момент виджет не позволят добавлять позиции динамически, что возмутило товарища alexsrdk, да и меня тоже :) Сейчас попробуем это дело исправить.
      Читать дальше →
    • Chosen: сделай выпадающие списки более дружественными

        Плагин Chosen создан для оформления красивых и удобных выпадающих списков с помощью jQuery и Prototype. Для установки плагина достаточно просто скачать файлы и прописать одну строчку:

        $(".chzn-select").chosen()
        (версия для jQuery)

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

        Поскольку Chosen заменяет стандартный элемент HTML, то не нужно беспокоиться, как он работает с браузерами без поддержки JavaScript. Также не нужно ничего менять в бэкенде: формы сабмиттятся как обычно, изменения только в пользовательском интерфейсе.

        Некоторые форки:
        Chosen для MooTools
        Модуль Chosen для Drupal 7
      • Прозрачное кэширование в nginx для всех и каждого

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

          С версии 0.8.46 в nginx появились опции, позволяющие легко и просто настроить прозрачное кэширование для анонимных пользователей.

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

          Читать дальше →
        • Обновление Kaspersky Rescue Disk — update

            Всем привет!

            Ранее тут уже поднималась тема. Как показала практика, некоторым утилита понравилась, но разработчик обновил grub на диске — и в итоге старая версия стала нерабочей.

            Кому нужно — обновил утилиту. Пользуйтесь.

            Как обычно, мануал простой.
            Читать дальше →
          • Стратегия восстановления поврежденной таблицы в MySQL

            Началось все с того, что в один прекрасный момент ядро прибило демона mysqld и mysql_safe автоматом его перезапустил и все бы хорошо, да только таблицы в БД использовались MyISAM. В итоге пришлось воспользоваться myisamcheck но это совсем другая история. В процессе проверки и починки индексов пострадала одна таблица и было принято решение восстанавливать из бекапов, хорошо, что раз в сутки делаются.

            Исходные данные:
            • имеем сервер БД с MySQL на борту;
            • поврежденную таблицу логов(статистики) чего угодно, что постоянно заполняется и может например не использоваться какое-то время;
            • суточный бекап;
            • бинарные логи с последнего суточного(полного) бекапа.

            Задача:
            • сервер должен быть доступен для работы;
            • новые данные должны попадать в таблицу;
            • восстановить целостность данных.

            Ожидаемый результат:
            данные в поврежденной таблицы восстановлены без останова базы дынных;
            таблица содержит все данные включая текущие.
            Читать дальше →
            • +33
            • 7,7k
            • 9
          • jQuery для начинающих. Часть 4. Селекторы



              Последнее время мне всё чаще задают вопрос как выбрать тот или иной элемент в DOM'е, и данный пост будет сплошь посвящен селекторам в jQuery, возможно большинство из них Вы видели в различных источниках, но собрать их воедино все же стоит…
              Читать дальше →
            • Как полностью восстановить аппаратное ускорение звука в Windows Vista/7

                Как вы, возможно, помните, в этих двух топиках рассказывалось о том, что начиная с Vista Майкрософт отключило обычный механизм работы со звуковыми картами через DirectSound и оставила только эмуляцию. Эмуляция не позволяла работать с многоканальным выводом и с расширениями типа EAX и CMSS-3D.

                Надо сказать, меня это настолько возмутило, что я долго искал по форумам решение. В конце концов, звуковая карта никуда не делась. Изменился только софт. Значит, надо его изменить обратно.

                И тут на одном форуме я обнаружил интересную вещь. Во-первых, оказывается, в Windows 7 хранятся еще и старые версии DX для совместимости со старыми играми (впрочем, это для моей задачи было не важно). И второй факт — MS вовсе не переписывала DirectSound, она просто удалила из него аппаратную часть.

                И тут я взял и сделал самую тупую вещь, которую можно было сделать. Я взял файл \windows\system32\dsound.dll с раздела Windows XP и заменил им аналогичный файл в семерке.

                Запустил видео.

                Запустил игры.

                Всё заработало!

                «Невозможная проблема» решилась заменой всего одного файла. Кстати, вот он (и пара еще возможно надо заменить) (в 64x тоже работает).

                Я пока не на 100% уверен в результате, но, кажется, всё действительно работает. Прошу вас попробовать сделать то же самое и сообщить результаты.

                UPD2: Для владельцев Sound Blaster — необходимо войти в Звук-Динамики-Свойства-Sound Blaster и отключить там всё. А то программные фильтры наложатся на аппаратные, и CMSS-3D, например, будет работать криво. А так, после отключения, все работает идеально! Как в XP!

                UPD3: Вообще, получается, что Microsoft обманула весь мир, включая корпорации уровня Creative, которые были вынуждены писать свое Alchemy, не зная, что DirectSound прекрасно работает, просто его искусственно вырезали. Советую кому-нибудь перевести этот топик на английский, потому что этого решения нет вообще НИГДЕ. Я думаю, если Creative об этом узнает, она не постесняется подать на M$ в суд.

                UPD: Кажется, в настройках MPC лучше выбирать не Default DirectSound Device, а DirectSound Device: Динамики.

                Пример настроек.

                UPD: Для правильно работы CMSS-3D в наушниках необходимо также настроить динамики как 5.1:

              • Чек-лист вёрстки. Что можно отдавать клиенту, а что надо переделывать

                  Идеальная вёрсткаВы PM. Как узнать – готова ли вёрстка к реальному использованию?
                  Вы заказчик. Как убедиться, что работа выполнена качественно?
                  Как оценить качество вёрстки?

                  Когда я стал тим-лидом, а позже PM, передо мной стала задача проверять вёрстку наших проектов. Нужно было выработать формальные, легкопроверяемые критерии, соответствие кода которым, должно было давать некую гарантию, что не будет факапов и ни клиент, ни программеры не сказажут потом “WTF?”.

                  Клиенту неважно насколько красив ваш код, но ему важен результат. Качественный код нужен фирме, т.к. он надёжней и в будущем его будет легче поддерживать.

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

                  Итак что же это за список?

                  Краткая версия теперь доступна на html5checklist.com (github), где можно вносить pull-request'ы.

                  История обновлений:
                  • 2015/08/11: Актуализировал рекомендации по оптимизации скорости загрузки. Добавил требование поддержки Retina. Дополнил «19. Мелочи» требованием что изображения должны масштабироваться в зависимости от размера окна.
                  • 2015/08/10: актуализирован список исключений для CSSLint
                  • 2015/07/29: актуализирован пункт №13 «плохо»/«хорошо»
                  • 2015/04/08: добавлено требование использования препроцессоров и рекомендация использования систем сборки
                  • 2013/04/25: добавлены анализаторами качества кода: CSSLint и JSHint, указан сайт подбора css font stack (спасибо @fliptheweb), мелкие уточнения (работу интерактивных элементов страницы, что не пропадает фон на высоких разрешениях, не должно быть пустых презентационных блоков, при проверках контента — пробовать удалять заголовки, менять местами блоки)
                  • 2013/04/24: добавил пункт об минимизации каскада (БЭМ-техники, MCSS, SMACSS), необходимости вписывания в экран моб. устройства, заменил ссылку на проверочный текст отображения стандартного html на код с normalize.css, поправил пример где в рекомендации встречался длинный каскад, упомянул про Opera на Presto и новый уровень семантики — в именах классов BEM.
                  • 2012/04/12: отсортировал пункты проверки в порядке важности, выделил главные, дополнил статью подробностями
                  • 2011/12/07: дополнил согласно доклада на WSD Минск'2011.
                  • 2011/07/19: добавлено про повышение надёжности вёрстки благодаря html5-тэгам, про необходимость favicon/apple-touch-icon, отсутствие багов при ресайзе textarea
                  • 2011/06/15: добавил пояснения какие ошибки валидации допустимы, рассказал про отсутствие официальной кнопки «HTML5 Valid» и про официальное лого HTML5 на сайте.


                  Далее с примерами - как проверить html, даже если вы ничего не понимаете в вёрстке.