Как стать автором
Обновить
0
0
Георгий Мостоловица @tequilla4white

Пользователь

Отправить сообщение

Паттерн проектирования «Декоратор» / «Decorator»

Время на прочтение4 мин
Количество просмотров90K
Почитать описание других паттернов.

Проблема


Возложить дополнительные обязанности (прозрачные для клиентов) на отдельный объект, а не на класс в целом.

Описание


Для более детального понимания проблемы, рассмотрим конкретную ситуацию. Пусть имеется некоторый объект — «кнопка», принадлежащий классу объектов «Кнопка», на который понадобилось возложить дополнительные обязанности. Под обязанностями, в данном контексте, понимаются какие-либо особенности поведения объекта. В случае с кнопкой, можно рассмотреть поведение объекта при его отображении на экране. При этом, будем считать, дополнительными обязанностями — отображение рамки кнопки, надписи, иконки. Важно понимать, что все эти обязанности должны иметь возможность быть наложенными как одновременно, так и по отдельности. Очевидно, первое, что приходит на ум — порождение классов (механизм наследования). Для данной задачи возможно это и выход — расширить класс «Кнопка» семью (23-1 = 7) различными классами, сочетающими в себе всевозможные комбинации обязанностей. Это классы: «Кнопка_С_Надписью», «Кнопка_С_Рамкой», «Кнопка_С_Иконкой», «Кнопка_С_Надписью_И_Иконкой», «Кнопка_С Рамкой_И_Иконкой», «Кнопка_С_Надписью_И_Рамкой», «Кнопка_С_Надписью_И_Рамкой_И_Иконкой». А если таких обязанностей будет не три, а хотя бы десять, не говоря уже про неудобство работы с подобной структурой. Безусловно, порождение классов в таком случае — заведомо проигрышный вариант. Однако, из этой ситуации есть выход — паттерн «Декоратор».
Читать дальше →
Всего голосов 57: ↑46 и ↓11+35
Комментарии18

Паттерн проектирования «Компоновщик» / «Composite»

Время на прочтение5 мин
Количество просмотров43K
Почитать описание других паттернов.

Проблема


Предоставить клиенту единообразный доступ к листовым и составным элементам древовидной структуры.

Описание


Существует большое количество программных систем, в которых так или иначе применяются древовидные структуры объектов. В большинстве случаев, это всевозможные конструкторы/редакторы, которые позволяют собрать что-то большое (составное) из чего-то более мелкого (листового). При этом, клиент трактует и большое и мелкое как одно и тоже, а система должна различать составные и листовые объекты соответственно.
Читать дальше →
Всего голосов 43: ↑35 и ↓8+27
Комментарии32

Безопасная авторизация с передачей хешированного пароля

Время на прочтение4 мин
Количество просмотров30K
При разработке одного проекта, появилась задача осуществить защиту в случае просмотра трафика, и просмотра исходника (могут узнать хеш пароля) злоумышленниками. Имея доступ ко всем данным, никто не должен авторизоваться на сервере, не зная исходный пароль. Варианты подмены IP адреса, получение пароля непосредственно в момент ввода (keylog), или брутфорс исключаем, это уже не забота веб сайта.

Пароль по сети передаваться не будет, поэтому используется хеширование прямо в браузере, для этого использую небольшую библиотеку JavaScript SHA-1. Почему SHA-1, а не, допустим, MD5? Считается, что SHA-1 немного надежнее, да и сама JavaScript библиотека меньше, чем аналогичная (на том же сайте) для MD5.
Читать дальше →
Всего голосов 39: ↑21 и ↓18+3
Комментарии66

VIM и JSLint

Время на прочтение4 мин
Количество просмотров3.1K
Вышло так, что я почти не пишу на хабрахабр — тому есть свои причины. Но очень хотелось бы поделиться одной вещью, которая наверняка будет полезна всем тем, кто работает с JavaScript'ом в vim’е, к тому же на хабрахабре я подобного материала не нашёл.
Читать дальше →
Всего голосов 44: ↑38 и ↓6+32
Комментарии16

Автоматическое обновление плагинов*

Время на прочтение3 мин
Количество просмотров3.1K
* на самом деле полуавтоматическое ;)

Как-то тихо в блоге VIM’а, видимо все спят — или может быть кончились в интернете огромные .vimrc? ;) Неизвестно, но точно понятно, что нужно эту тишину нарушить.

Нарушу я её сегодня одним хорошим плагином, упоминаний о котором я здесь не нашёл. Это GetLatestVimScripts (http://vim.sourceforge.net/scripts/script.php?script_id=642).

Для начала небольшой план изложения
  1. Для чего нужен этот плагин
  2. Как установить и что необходимо
  3. Как использовать
  4. Чего не хватает

// FIXME: Разработчики хабрахабра, ребята. Ну что за лабуда со ссылками происходит? Это защита от XSS такая, слово script исковеркать везде? Раньше этого не было.

Для всех — script в ссылках нужно заменить на script.
:e изложение
Всего голосов 25: ↑20 и ↓5+15
Комментарии10

Быстрочтение featuring Восприятие текста

Время на прочтение8 мин
Количество просмотров79K
Привет всем. Основываясь на предыдущем опыте, считаю нужным сразу расставить все точи над ё. Описанная ниже методика — не мое изобретение. Однако из собственного опыта могу уверить вас, что она работает. Ровно так, как обещано.
Идея, описанная в посте, появилась давно (под катом есть история), в том виде, в каком расскажу ее я, по большей части она представлена в чудесных книгах Тони Бузана Use You Head и The Speed Reading Book (в последней много воды).

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

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

Прежде чем приступить к самому главному, прошу вас пройти тест из шести вопросов на Да/Нет.

1. Чтение со скоростью свыше 1000 слов в минуту невозможно?
2. Медленная скорость чтения способствует лучшему пониманию текста?
3. Пропускать слова во время чтения — плохая привычка, ухудшающая понимание текста?
4. По умолчанию мы все читаем с «естественной» для нас скоростью, а следовательно, наилучшей?
5. Если вы не поняли слово или предложение, лучше перечитать его и понять?
6. Ваши глаза находятся в непрерывном движении во время чтения?
За результатами и, наконец-то, интересными штуками добро пожаловать под кат.
Читать дальше →
Всего голосов 169: ↑145 и ↓24+121
Комментарии100

Веб-аналитика: анализируй это! Часть 6. Action

Время на прочтение5 мин
Количество просмотров12K
Часть 1. Вступление.
Часть 2. Сбор данных.
Часть 3. Базовые метрики.
Часть 4. От статистики к аналитике
Часть 5. Разделяй и думай

Достучаться до небес


Самый активный евангелист веб-аналитики Авинаш Кошик в своем блоге уделяет значительное внимание темам, связанным с организацией работы: как убедить начальство в важности аналитики, а главное — как заставить компанию использовать полученные данные. То, что в них содержится важная для бизнеса информация, вроде бы не вызывает сомнений, но даже если руководство согласно с этим, оно обычно игнорирует выводы аналитика. В результате измерения на сайте не сопровождаются анализом изменений показателей, сам сайт делается “на глазок начальника”, а статистика используется только для рисования красивых графиков и общих оценок вроде посещаемости за месяц. Кошик называет это HiPPO, или “МСаВС” — мнение самых высокооплачиваемых сотрудников. С учетом того, что мнение на счет сайта есть у каждого сотрудника, активисту приходится ой как нелегко.
Читать дальше →
Всего голосов 28: ↑25 и ↓3+22
Комментарии17

Упорядоченные списки, счётчики и экспрешн для IE

Время на прочтение2 мин
Количество просмотров2.4K
Представьте ситуацию: в макете страницы, которую вам надо сверстать, есть упорядоченный список. Всё бы ничего, да в дизайне стиль текста в списке отличается от стиля цифр, выступающих в роли маркера каждого пункта.

И ладно, если отличие небольшое — в размере шрифта, цвете или другом свойстве шрифта. В таком случае самый простой способ реализовать подобное — задать стиль для элемента списка (это будет стиль для маркера), после чего обрамить всё содержимое пункта в блок, в котором переопределить соответствующие стили.

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

Итак, решение этой проблемы под хабракатом
Всего голосов 38: ↑34 и ↓4+30
Комментарии23

Кроссбраузерный min- и max-width на чистом HTML+CSS

Время на прочтение1 мин
Количество просмотров15K
Давно хотел поделиться одной интересной наработкой — а именно эмуляцией свойств min и max-width без использования expression и подобных вещей. Обвязка может показаться громоздкой, но главный ее плюс — она работает. Плюс подобные вещи можно с легкостью внедрять с помощью шаблонизатора одной строчкой кода.

Суть трюка проста:
‹table›‹tr›‹td width=1100› — максимальная ширина
‹div width=900 /› — распорка, минимальная ширина

Причем именно так, ширина не у таблицы, а у ячейки. Таким образом шире, чем 1100 таблица не будет (в данном случае), но при этом если она уже — скроллер не появляется. При этом если ширина рабочей области менее 900 — скроллер уже отобразится.
Читать дальше →
Всего голосов 114: ↑92 и ↓22+70
Комментарии96
12 ...
8

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Работает в
Дата рождения
Зарегистрирован
Активность