Интересная задачка по программированию

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

Использование CSS3 mask для создания универсальных иконок

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

Перехват вызова функции в JavaScript

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

JS для начинающих. Урок 1.18: Использование регулярных выражений

using-regular-expressions-javascript

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

JS для начинающих. Урок 1.17: Синтаксис регулярных выражений

js-regular-expressions-syntax

Регулярные выражения — это язык, который описывает шаблоны строк, основанные на метасимволах. Метасимвол – это символ в регулярном выражении, который описывает некоторый класс символов строки, указывает на положение подстроки, указывает количество повторений или группирует символы в подстроку. Например, метасимвол \d описывает цифры, а $ обозначает конец строки. В регулярном выражении могут присутствовать и обычные символы, которые описывают самих себя. Набор и значение метасимволов в регулярных выражениях описывает стандарт PCRE, большинство возможностей которого поддерживается в JS. Продолжить чтение

Адаптивный текст в несколько колонок на CSS

multicolumn-text-css

С развитием технологий, мониторы становятся всё шире и шире, а вместе с ними и блоки текста на сайтах. Известно, что человеку наиболее комфортно читать около 67-75 символов в строке, но некоторое время браузеры не позволяли реализовывать верстку в несколько колонок с помощью встроенного функционала. Благо технологии не стоят на месте и всё больше браузеров внедряют поддержу многоколоночного текста, о которой и пойдет речь в этой статье. Продолжить чтение

Шаблонизация на стороне клиента

client-side-templating

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

Целевая страница: создание и оптимизация

sozdanie-i-optimizaciya-celevoi-stranicy

Целевая страница отличается от всех других страниц сайта тем, что она оптимизируется под поисковый запрос. Грамотная оптимизация позволяет продвинуть страницу в результаты поисковой выдачи на высокие позиции. Продолжить чтение

JS для начинающих. Урок 1.16: Приведение типов

dataTypes2

JavaScript — язык с динамической типизацией данных. Это значит, что в одну и ту же переменную можно записывать значения различных типов, при этом тип самой переменной будет меняться. Подобное поведение часто позволяет забыть о различном поведении переменных с разным типом, но помнить об этой особенности всё же необходимо. Продолжить чтение

Итерирование объектов в php. Встроенные классы-итераторы. Объект как массив

iterirovanie-php

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