RU EN

Паттерн Strategy

 

Тип: по классификации GoF относится к паттернам поведения (Behavorial Patterns).

Назначение: определяет семейство алгоритмов, инкапсулирует их, и делает взаимозаменяемыми.

Где применять:

  • Имеется много родственных классов, отличающихся только поведением. Статегия позволяет сконфигурировать класс, задав одно из возможных поведений.

  • Нужно иметь несколько разных вариантов алгоритма. Например, можно определить два варианта алгоритма, один из которых требудет больше времени, а другой - больше памяти. Стратегии разрешается применять, когда варианты алгоритмов реализованы в виде иерархии классов.

  • В алгоритме содержатся данные, о которых клиент не должен знать. Используйте парттерн Статегия, чтобы скрыть сложные, специфичные для алгоритма структуры данных.

Пример:

Strategy pattern

Комментариев: 0
30.01.2013 07:13


Bash CLI colors

 

Полный список доступных цветов в Bash:

# Reset
Color_Off='e[0m'       # Text Reset

# Regular Colors
Black='e[0;30m'        # Black
Red='e[0;31m'          # Red
Green='e[0;32m'        # Green
Yellow='e[0;33m'       # Yellow
Blue='e[0;34m'         # Blue
Purple='e[0;35m'       # Purple
Cyan='e[0;36m'         # Cyan
White='e[0;37m'        # White

# Bold
BBlack='e[1;30m'       # Black
BRed='e[1;31m'         # Red
BGreen='e[1;32m'       # Green
BYellow='e[1;33m'      # Yellow
BBlue='e[1;34m'        # Blue
BPurple='e[1;35m'      # Purple
BCyan='e[1;36m'        # Cyan
BWhite='e[1;37m'       # White

# Underline
UBlack='e[4;30m'       # Black
URed='e[4;31m'         # Red
UGreen='e[4;32m'       # Green
UYellow='e[4;33m'      # Yellow
UBlue='e[4;34m'        # Blue
UPurple='e[4;35m'      # Purple
UCyan='e[4;36m'        # Cyan
UWhite='e[4;37m'       # White

# Background
On_Black='e[40m'       # Black
On_Red='e[41m'         # Red
On_Green='e[42m'       # Green
On_Yellow='e[43m'      # Yellow
On_Blue='e[44m'        # Blue
On_Purple='e[45m'      # Purple
On_Cyan='e[46m'        # Cyan
On_White='e[47m'       # White

# High Intensity
IBlack='e[0;90m'       # Black
IRed='e[0;91m'         # Red
IGreen='e[0;92m'       # Green
IYellow='e[0;93m'      # Yellow
IBlue='e[0;94m'        # Blue
IPurple='e[0;95m'      # Purple
ICyan='e[0;96m'        # Cyan
IWhite='e[0;97m'       # White

# Bold High Intensity
BIBlack='e[1;90m'      # Black
BIRed='e[1;91m'        # Red
BIGreen='e[1;92m'      # Green
BIYellow='e[1;93m'     # Yellow
BIBlue='e[1;94m'       # Blue
BIPurple='e[1;95m'     # Purple
BICyan='e[1;96m'       # Cyan
BIWhite='e[1;97m'      # White

# High Intensity backgrounds
On_IBlack='e[0;100m'   # Black
On_IRed='e[0;101m'     # Red
On_IGreen='e[0;102m'   # Green
On_IYellow='e[0;103m'  # Yellow
On_IBlue='e[0;104m'    # Blue
On_IPurple='e[0;105m'  # Purple
On_ICyan='e[0;106m'    # Cyan
On_IWhite='e[0;107m'   # White

Их текстовые обозначения:

txtblk='e[0;30m' # Black - Regular
txtred='e[0;31m' # Red
txtgrn='e[0;32m' # Green
txtylw='e[0;33m' # Yellow
txtblu='e[0;34m' # Blue
txtpur='e[0;35m' # Purple
txtcyn='e[0;36m' # Cyan
txtwht='e[0;37m' # White
bldblk='e[1;30m' # Black - Bold
bldred='e[1;31m' # Red
bldgrn='e[1;32m' # Green
bldylw='e[1;33m' # Yellow
bldblu='e[1;34m' # Blue
bldpur='e[1;35m' # Purple
bldcyn='e[1;36m' # Cyan
bldwht='e[1;37m' # White
unkblk='e[4;30m' # Black - Underline
undred='e[4;31m' # Red
undgrn='e[4;32m' # Green
undylw='e[4;33m' # Yellow
undblu='e[4;34m' # Blue
undpur='e[4;35m' # Purple
undcyn='e[4;36m' # Cyan
undwht='e[4;37m' # White
bakblk='e[40m'   # Black - Background
bakred='e[41m'   # Red
bakgrn='e[42m'   # Green
bakylw='e[43m'   # Yellow
bakblu='e[44m'   # Blue
bakpur='e[45m'   # Purple
bakcyn='e[46m'   # Cyan
bakwht='e[47m'   # White
txtrst='e[0m'    # Text Reset

Ссылка на источник.

Комментариев: 0
30.01.2013 06:44


Отличия MyISAM InnoDB

 
  • В InnoDB при записи блокируется строка, в MyISAM - вся таблица. Поэтому там, где планируется большое кол-во запросов на запись, выгоднее использовать InnoDB.

  • В InnoDB поддерживаются транзакции.

  • В InnoDB поддерживаются внешние ключи.

  • В MyISAM поддерживается сжатие таблиц.

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

  • В InnoDB при восстановлении от сбоя используется лог транзакций. В MyISAM для восстановления нужно сканировать таблицы. При увеличении объёма MyISAM данных увеличивается и время восстановления. В InnoDB восстановление занимает одно и то же время.

  • В InnoDB есть необходимость периодически сбрасывать данные в лог.

  • В MyISAM есть встроенный полнотекстовой поиск.

  • В InnoDB возможны взаимоблокировки процессов (deadlock).
Комментариев: 0
07.12.2012 07:16


UML из командной строки

 

Для того, чтобы быстро сгенерировать UML схему классов, можно воспользоваться ресурсом yuml.me. Пишем yml-скрипт:

[note: Диаграмма классов API{bg:cornsilk}]
[note: Контроллер в котором инициализируются все фабрики{bg:cornsilk}]-[ApiManager||-init();+run()]
[AbstractApiManager||+init()]^[ApiManager||-init();+run()]
[ApiManager||-init();+run()]-.->[ServiceFactory||+getService();+getOutput();+getError();]

Затем этот скрипт вставляем в поле формы и получается вот такая схема:

Схема

Есть так же версия для использования из командной строки. Скачать можно здесь.

Комментариев: 0
23.11.2012 17:09


pg_dump: invalid command "\N"

 

В конфиге надо прописать значение:

standard_conforming_strings = off

В Debian (squeeze) в пакетном postgresql-8.4 по-умолчанию данная команда закомментирована

Комментариев: 0
21.11.2012 11:12