• Принцип цикады и почему он важен для веб-дизайнеров

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

    Однако, в зависимости от вида, каждые 7, 11, 13 или 17 лет периодические цикады одновременно массово вылезают на свет и превращаются в шумных летающих тварей, спариваются и вскоре умирают.

    Хотя наши странные цикады весело уходят в иной мир, возникает очевидный вопрос: это просто случайность, или числа 7, 11, 13 и 17 какие-то особенные?
    Читать дальше →
  • SVN hooks: изменение комментария к ревизии

      Не секрет, что по умолчанию изменение текста комментария к ревизии в SVN не разрешено. Пост предназначен для тех, кто хочет сделать это возможным, но не знает как.
      заодно почитаем про хуки
    • О структурном программировании

      Многие в комментариях к посту об операторе goto высказывали одно и то же мнение, которое звучит примерно так: «За n лет написания программ мне ни разу не понадобился goto, и использовать его в будущем я тоже не собираюсь». И они абсолютно правы, уже давно доказана теорема о структурировании, в которой говорится, что любая простая программа функционально эквивалентна структурированной программе составленной с использованием функций и предикатов исходной программы, а также с использованием дополнительного счетчика. Доказательством является алгоритм составления той самой структурированной программы:
      1. пронумеровать все узлы схемы, при этом порядок обхода произвольный;
      2. пронумеровать все дуги схемы следующим образом: выходной дуге схемы припишем номер 0, всем остальным дугам присвоим номер вершины, в которую данная дуга входит;
      3. для каждого функционального узла исходной программы, имеющего номер i и выходную дугу j, составить новую простую последовательную программу Gi с номером входной дуги i
      4. для каждого предикатного узла с номером i составить новую простую программу
      5. построить программу типа while do с do-частью в виде структры, проверяющей значения L.

      Читать дальше →
    • Эффективные совещания



        Итак, мы приходим на работу и, вуаля, через 40 минут назначено совещание (митинг). Тема «Обсудить решение текущих проблем», продолжительность 1 час, в списке приглашенных 8 человек. 40 минут томительного ожидания и мы на месте — здороваемся с коллегами, настраиваемся на конструктивный лад. Появляется организатор, бодренько стартует и… уже через пять минут мы понимаем, что в очередной раз теряем время. Вроде бы, и обсуждаемые проблемы вполне реальны, и присутствует достаточно людей, но совещание неуклонно превращается в бесцельную дискуссию.

        Уверен, эта ситуация знакома многим и много написано о том, какими совещания быть не должны. И все же, есть проблемы, которые рискованно решать в одиночку и без совещания не обойтись. Эта статья о том, как в этих случаях потратить свое и чужое время эффективно.
        Читать дальше →
      • Чек-лист вёрстки. Что можно отдавать клиенту, а что надо переделывать

          Идеальная вёрсткаВы 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, даже если вы ничего не понимаете в вёрстке.
        • Интеграционное тестирование web-приложения с Selenium WebDriver

            Интеграционное тестирование (в отличие от Unit- или модульного тестирования) это тестирование не отдельных атомарных компонентов системы (классов) а результата их взаимодействия между собой в какой-либо среде.

            Волею судеб я занимаюсь разработкой своего рода интерфейсного фреймворка заточенного на определенные корпоративные нужды. Среда исполнения фреймворка — браузер, а по сему язык — JavaScript.

            О том, как можно Unit-тестировать JavaScript я писал ранее, сейчас же расскажу о процессе интеграционного тестирования, применяемого в команде.
            Читать дальше →
          • Настоящие online, offline события

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



              Кратко — online, offline сигнализирует нам, что пользователь вручную переключился в оффлайн либо у него нет ни одного соединения с сетью. Фактически эти 2 события бесполезны в том виде в котором они представлены — я не знаю кто будет вручную переключать таб в режим онлайн/оффлайн, и с сетевыми подключениями тоже все плохо. Ну и, конечно, доисторические бразуеры не знают эти события.

              Под катом элегантное и 100% кросбраузерное решение, позволяющее получить настоящие online, offline события.
              Читать дальше →
            • Текстовый анализатор: распознавание авторства (окончание)

                Эта статья об алгоритме распознавания авторства, реализованном в проекте «Текстовый анализатор». В окончании статьи мы рассмотрим, как собираются частотные характеристики, и в общих чертах познакомимся с нейросистемой Хэмминга. (Начало и продолжение).

                Структура статьи:
                1. Анализ авторства
                2. Знакомство с кодом
                3. Внутренности TAuthoringAnalyser и хранение текстов
                4. Разбиение на уровни конечным автоматом на стратегиях
                5. Сбор частотных характеристик
                6. Нейросеть Хэмминга и анализ авторства

                Дополнительные материалы:
                • Исходники проекта «Текстовый анализатор» (Borland C++ Builder 6.0)
                • Тестирование нейросистемы Хэмминга в Excel'е ([xls])
                • Таблица переходов для КА, разбивающего текст на уровни ([xls])
                • Расчет благозвучия отдельных букв ([xls])
                • Презентация дипломного проекта «Текстовый анализатор» ([ppt])
                • Презентация проекта «Карта благозвучия» ([ppt])
                • Все эти материалы в сжатом виде ([zip], [7z], [rar])


                Читать дальше →
              • Эволюция юнит-теста

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

                  Коротко: BDD — это дальнейшее развитие идей TDD, стало быть, его и надо использовать. А разницу между TDD и BDD я попробую объяснить на простом примере.

                  Рассмотрим 3 ревизии одного юнит-теста, который я нашёл в одном реальном проекте.

                  Попытка номер №1


                  Первая версия этого юнит-теста была такой:
                  Читать дальше →