Блог об энергетике

Планирование процессов

Исходя из трех основных состояний процесса «готов», «выполнение», «заблокирован». Планировщик должен знать, какой процесс находится в каком состоянии. Все усложняется, если ЦП содержит несколько вычислительных ядер. Поэтому в ОС вводятся различные очереди (списки) для планирования процессов.

Исходя из трех состояний процесса вводятся 3 очереди:

  1. Очередь задач: множество всех процессов, которые есть в системе

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

  3. Очередь ожидающих: множество всех заблокированных процессов.

Последовательности событий

Для того чтобы добавить возможность применения последовательности событий к начальному состоянию автомата введем функцию applyEvents:

      -- Функция, применяющая события к начальному состоянию.
applyEvents :: State ->  -> State
-- Результат = состояние, если событий больше нет.
applyEvents st [] = st
-- Иначе делаем переход и-- осуществляем рекурсивный вызов.
applyEvents st (e:es) = applyEvents (gotEvent st e) es

-- Новая функция main.
main = print $ applyEvents LampOff 

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

      -- Тип функции переходов.
type SwitchFunc state event = state -> event -> state

-- Функция, применяющая список событий к начальному-- состоянию автомата при помощи функции переходов.
applyEvents :: SwitchFunc st ev -> st ->  -> st
applyEvents _ st [] = st
applyEvents swF st (ev:evs) = applyEvents swF
        (swF st ev) evs
------------------------------------------------------- Реализация счетного триггера-- при помощи приведенного выше библиотечного кода.-- Типы событий и состояний для счетного триггера.
data TriggerEvent = ButtonClick deriving Show 
data TriggerState = LampOff | LampOn deriving Show
-- Функция переходов для счетного триггера.
triggerSwF LampOff ButtonClick = LampOn
triggerSwF LampOn ButtonClick = LampOff

-- Функция, вызываемая системой.
main = print $ applyEvents triggerSwF LampOff 

Отметим, что новая версия функции applyEvents является левой сверткой (одна из стандартных операций функционального программирования) списка событий по функции переходов. Поэтому можно заменить всё определение функции applyEvents на applyEvents = foldl.

Состояния

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

  • — режим постоянного свечение, мы назвали его именем

  • — режим мигания, мы назвали его

  • — режим нарастания яркости, мы назвали его

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

В каждом режиме наше устройство делает что-то уникальное, отличное от того,
что происходит в других режимах. Текущим может быть лишь один режим. А
возможные переходы чётко определены: каждый следующий включается при нажатии кнопки.
Такие системы называются конечными автоматами, а их режимы называются
состояниями (англ. state).

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

Что ж, мы делаем конечный автомат — отлично. Текущее состояние, т.е. режим
свечения будем хранить в переменной с именем , которую изначально
установим в значение . Таким образом, при включении Arduino
система будет находиться в режиме постоянного свечения.

О предназначении других макроопределений и переменных поговорим по ходу дела.

Типы сигналов

POSIX определяет 28 сигналов, которые можно классифицировать следующим образом

Название Код Действие по умолчанию Описание Тип
SIGABRT 6 Завершение с дампом памяти Сигнал посылаемый функцией Управление
SIGALRM 14 Завершение Сигнал истечения времени, заданного Уведомление
SIGBUS 10 Завершение с дампом памяти Неправильное обращение в физическую память Исключение
SIGCHLD 18 Игнорируется Дочерний процесс завершен или остановлен Уведомление
SIGCONT 25 Продолжить выполнение Продолжить выполнение ранее остановленного процесса Управление
SIGFPE 8 Завершение с дампом памяти Ошибочная арифметическая операция Исключение
SIGHUP 1 Завершение Закрытие терминала Уведомление
SIGILL 4 Завершение с дампом памяти Недопустимая инструкция процессора Исключение
SIGINT 2 Завершение Сигнал прерывания (Ctrl-C) с терминала Управление
SIGKILL 9 Завершение Безусловное завершение Управление
SIGPIPE 13 Завершение Запись в разорванное соединение (пайп, сокет) Уведомление
SIGQUIT 3 Завершение с дампом памяти Сигнал «Quit» с терминала (Ctrl-) Управление
SIGSEGV 11 Завершение с дампом памяти Нарушение при обращении в память Исключение
SIGSTOP 23 Остановка процесса Остановка выполнения процесса Управление
SIGTERM 15 Завершение Сигнал завершения (сигнал по умолчанию для утилиты kill) Управление
SIGTSTP 20 Остановка процесса Сигнал остановки с терминала (Ctrl-Z). Управление
SIGTTIN 26 Остановка процесса Попытка чтения с терминала фоновым процессом Управление
SIGTTOU 27 Остановка процесса Попытка записи на терминал фоновым процессом Управление
SIGUSR1 16 Завершение Пользовательский сигнал № 1 Пользовательский
SIGUSR2 17 Завершение Пользовательский сигнал № 2 Пользовательский
SIGPOLL 22 Завершение Событие, отслеживаемое Уведомление
SIGPROF 29 Завершение Истечение таймера профилирования Отладка
SIGSYS 12 Завершение с дампом памяти Неправильный системный вызов Исключение
SIGTRAP 5 Завершение с дампом памяти Ловушка трассировки или брейкпоинт Отладка
SIGURG 21 Игнорируется На сокете получены срочные данные Уведомление
SIGVTALRM 28 Завершение Истечение «виртуального таймера» Уведомление
SIGXCPU 30 Завершение с дампом памяти Процесс превысил лимит процессорного времени Исключение
SIGXFSZ 31 Завершение с дампом памяти Процесс превысил допустимый размер файла Исключение

Направленный граф

Ориентированный граф

Классическая форма диаграммы состояний конечного автомата (FA) — ориентированный граф со следующими элементами (Q, Σ, Z, δ, q , F):

  • Вершины Q : конечный набор состояний, обычно представленных кружками и помеченных уникальными обозначениями или словами, написанными внутри них.
  • Входные символы Σ : конечный набор входных символов или обозначений
  • Выходные символы Z : конечный набор выходных символов или обозначений

Выходная функция ω представляет собой отображение упорядоченных пары входных символов и состояний на выходные символы, обозначаемые математически со  : Σ × Q Z .

  • Ребра δ : представляют переходы из одного состояния в другое, вызванные вводом (обозначены их символами, нарисованными на краях). Ребро обычно изображается в виде стрелки, направленной от текущего состояния к следующему состоянию. Это отображение описывает переход состояния, который должен произойти при вводе определенного символа. Математически это записывается как δ  : Q × Σ Q , поэтому δ (функция перехода) в определении FA задается как парой вершин, соединенных ребром, так и символом на ребре на диаграмме, представляющей эту FA. . Пункт δ (q, a) = p в определении FA означает, что из состояния с именем q под входным символом a в этой машине происходит переход в состояние p . На схеме , изображающей эту FA, это представлено ребром , помеченном в указывающем от вершины , помеченной д к вершине , помеченной р .
  • Состояние запуска q : (не показано в примерах ниже). Начальное состояние q ∈ Q обычно представлено стрелкой без начала координат, указывающей на состояние. В старых текстах начальное состояние не отображается и должно выводиться из текста.
  • Состояние приема F : Если используется, например, для приема автоматов, F ∈ Q является состоянием приема . Обычно его рисуют в виде двойного круга. Иногда принимает государственную функцию (ы) в качестве « F ынал» (Стойте, запертые) состояний.

Для детерминированного конечного автомата (DFA), недетерминированного конечного автомата (NFA), обобщенного недетерминированного конечного автомата (GNFA) или машины Мура вход обозначается на каждом ребре. Для машины Мили вход и выход обозначены на каждом краю, разделены косой чертой «/»: «1/0» обозначает изменение состояния при встрече с символом «1», вызывающее вывод символа «0». Для машины Мура выходные данные состояния обычно записываются внутри круга состояния, также отделенного от обозначения состояния косой чертой «/». Есть также варианты, сочетающие эти два обозначения.

Например, если состояние имеет несколько выходов (например, «a = двигатель против часовой стрелки = 1, b = сигнальная лампа неактивна = 0») диаграмма должна отражать это: например, «q5 / 1,0» обозначает состояние q5 с выводит a = 1, b = 0. Это обозначение будет написано внутри круга государства.

Пример: DFA, NFA, GNFA или машина Мура.

S 1 и S 2 являются состояниями, а S 1 — состоянием приема или конечным состоянием . Каждое ребро помечено входом. В этом примере показан акцептор для двоичных чисел, содержащих четное количество нулей.

Пример: машина для мучных работ

Понятия и терминология

Состояние является описанием состояния системы , которая ждет , чтобы выполнить переход . Переход — это набор действий, которые должны выполняться при выполнении условия или при получении события. Например, при использовании аудиосистемы для прослушивания радио (система находится в состоянии «радио») получение стимула «следующая» приводит к переходу к следующей станции. Когда система находится в состоянии «CD», «следующий» стимул приводит к переходу к следующему треку. Одинаковые стимулы вызывают разные действия в зависимости от текущего состояния.

В некоторых представлениях конечного автомата также можно связать действия с состоянием:

  • действие входа: выполняется при входе в состояние, и
  • действие выхода: выполняется при выходе из состояния.

Основные параметры влажного воздуха

Выделяют шесть основных параметров влажного воздуха:

  1. Температура t  показывает меру нагретости влажного воздуха. В системах вентиляции и кондиционирования наибольшее значение имеет диапазон температур от -30°С до +40°С.
  2. Влагосодержание (абсолютная влажность) d [г/кг.сух.возд.] показывает, сколько грамм воды приходится на 1 килограмм сухого воздуха в имеющемся влажном воздухе. Обычно изменяется от 0 до 30г/кг. Сколько воды должен расходовать увлажнитель, определяют именно по изменению влагосодержания.
  3. Парциальное давление водяного пара p  показывает, какое давление имел бы содержащийся во влажном воздухе водяной пар, если убрать сухой воздух, но сохранить занимаемый объём. Так как в воздухе содержится относительно мало влаги, то и парциальное давление водяного пара относительно мало: обычно до 5кПа (сравните, например, с атмосферным давлением 101кПа)
  4. Относительная влажность ϕ  показывает, насколько данный воздух насыщен влагой. Если насыщен, то ϕ=100%. Если насыщен наполовину (т.е. готов вобрать ещё примерно столько же влаги), то ϕ=50%. В СКВ мы работаем с полным диапазоном влажности от 0% до 100%.
  5. Энтальпия i [кДж/кг] – это мера энергии влажного воздуха. Чем больше его температура и выше влажность, тем больше в нем энергии и наоборот. Нагрев и охлаждение воздуха правильнее всего считать именно по энтальпии, а не по температуре.
  6. Давление воздуха  – барометрическое давление влажного воздуха.

5 из 6 параметров влажного воздуха отражены на психрометрической ID-диаграмме в виде линий. Шестой параметр (давление) носит более глобальный характер: он не отражен на диаграмме, поскольку сама диаграмма сама ID-диаграмма построена для заданного давления (как правило, для нормального атмосферного давления 101 325 Па).

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

Физический смысл точки росы – это температура поверхности, при соприкосновении с  которой начнет выпадать конденсат.

Структура диаграммы

Диаграмма Молье h, x показана в наклонной системе координат

Выбор наклонной системы координат увеличивает точность считывания ненасыщенной области влажного воздуха, что важно для технических приложений. Чтобы построить наклонную диаграмму, предложенную Молье, ось x поворачивают по часовой стрелке до тех пор, пока изотерма t = 0 ° C в ненасыщенной области влажного воздуха не будет проходить горизонтально

Линии постоянной удельной энтальпии проходят сверху слева направо. Линии постоянного содержания воды (в том числе и водной нагрузки) проходят вертикально.
ЧАС{\ displaystyle h}Икс{\ displaystyle x}

По практическим причинам горизонтальная ось ( абсцисса ), на которой отложено содержание воды, не проходит через начало координат. Парциальное давление водяного пара может быть указано в качестве второй оси абсцисс, поскольку оно зависит только от содержания воды и давления воздуха . Удельная энтальпия отложена по вертикальной оси ( ординате ) . На некоторых диаграммах температура неправильно отображается по ординате.
Икс{\ displaystyle x}пш{\ displaystyle p _ {\ text {w}}}Икс{\ displaystyle x}п{\ displaystyle p}ЧАС{\ displaystyle h}

На диаграмме показаны семейства кривых температуры воздуха, плотности влажного воздуха и относительной влажности .
т{\ displaystyle t}ρж{\ displaystyle \ rho _ {\ text {f}}}ϕ{\ displaystyle \ phi}

На некоторых диаграммах вокруг показана так называемая граничная шкала с отношением изменения удельной энтальпии к изменению водной нагрузки . С помощью шкалы краев изменения состояния можно легко представить графически, например Б. изменение состояния при пароувлажнении.ΔЧАСΔИкс{\ displaystyle {\ frac {\ Delta h} {\ Delta x}}}

Индекс показывает, что энтальпия влажного воздуха складывается из энтальпии сухого воздуха и энтальпии воды . Масса сухого воздуха выбрана в качестве эталонного значения .
1+Икс{\ displaystyle 1 + x}ЧАСМы б{\ displaystyle H _ {\ text {ср}}}ЧАСл{\ displaystyle H _ {\ text {l}}}ЧАСш{\ displaystyle H _ {\ text {w}}}мл{\ displaystyle m _ {\ text {l}}}

ЧАС1 + хзнак равноЧАСМы бмлзнак равноЧАСл+ЧАСшмлзнак равноЧАСл+Икс⋅ЧАСш{\ displaystyle h _ {\ text {1 + x}} = {\ frac {H _ {\ text {Mi}}} {m _ {\ text {l}}}} = {\ frac {H _ {\ текст {l}} + H _ {\ text {w}}} {m _ {\ text {l}}}} = h _ {\ text {l}} + x \ cdot h _ {\ text {w} }}

Иксзнак равномшмл{\ displaystyle x = {\ frac {m _ {\ text {w}}} {m _ {\ text {l}}}}}

Структура диаграммы h, x. На рисунке показаны доли энтальпии для двух состояний с одинаковой температурой на изотерме, нарисованной красным цветом. Точка 1 находится в области ненасыщенного воздуха, точка 2 — в области тумана. Символы означают: h = удельная энтальпия в кДж / кг, s = состояние насыщения, t = температура в ° C, c = удельная теплоемкость в кДж / кг · K и x = содержание воды в г / кг. Индекс p означает постоянное давление (обычно 1 бар), расширения индекса — L для воздуха, D для водяного пара и W для жидкой воды. Наконец, следует упомянуть энтальпию испарения при 0 ° C.р{\ displaystyle r_ {0}}

Линии одной и той же температуры (изотермы) немного поднимаются в области ненасыщенного воздуха, а именно на ощутимую часть энтальпии водяного пара. В точке насыщения (относительная влажность φ = 1) линии изгибаются вниз, потому что за пределами максимальной доли пара вода может содержаться в воздухе только в жидкой форме в виде маленьких капель воды (тумана). В области тумана изотерма отклоняется только на низкую воспринимаемую энтальпию дополнительного содержания воды от изэнтальпии, проходящей через точку насыщения . Начало диаграммы — 0 ° C для сухого воздуха ( ).
Иксзнак равно{\ displaystyle x = 0}

В области ненасыщенного воздуха теперь есть кривые равной относительной влажности φ, которые создаются путем равномерного разделения соответствующих изотермических участков между φ = 0 и φ = 1. Относительная влажность становится все ниже и ниже, тем теплее воздух становится, если количество воды й не меняется.

Алгоритмы расчета для создания психрометрической диаграммы для влажного воздуха, которая также предназначена для создания компьютерных программ или макросов для состояния и физических характеристик сухого и влажного воздуха (удельная теплоемкость, теплопроводность, вязкость, теплопроводность, найденное число Прандтля подходит), в «Бернд Глюк: состояние и материальные ценности (вода, пар, воздух) и расчет горения» .

Для практического использования нулевые точки энтальпии для сухого воздуха и воды определяются следующим образом: при температуре 0 ° C применяется для сухого воздуха и кипящей воды .ЧАСлзнак равно{\ displaystyle h _ {\ text {l}} = 0}ЧАСш′знак равно{\ displaystyle h ‘_ {\ text {w}} = 0}

Создание

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

Многолетнее международное сотрудничество в области исследования свойств воды и водяного пара, позволило разработать и внедрить международные нормативные материалы, содержащие уравнения для описания различных свойств, в специальные таблицы. На основании этих уравнений, соответствующих требованиям Международной системы уравнений для научного и общего применения (The IFC Formulation for Scientific and Generale Use), были составлены и опубликованы подробные таблицы теплофизических свойств воды и водяного пара, которые широко применяются в практике инженерных теплотехнических расчётов. Данные, полученные путём расчёта по международным уравнениям, были приняты и в СССР , и получили определение таблиц термодинамических свойств воды и водяного пара. В них также включили данные по динамической вязкости.

Wikimedia Foundation
.
2010
.

Смотреть что такое «H, s-диаграмма» в других словарях:

Для системы Fe H2O … Википедия

Диаграмма Исикавы т. н. диаграмма «рыбьей кости» (англ. Fishbone Diagram) или «причинно следственная» диаграмма (англ. Cause and Effect Diagram), а также как диаграмма «анализа корневых причин». Один из семи основных… … Википедия

Диаграмма Герцшпрунга Рассела (варианты транслитерации: диаграмма Герцшпрунга Рессела, Расселла, или просто диаграмма Г Р или диаграмма цвет звездная величина) показывает зависимость между абсолютной звёздной величиной,… … Википедия

Диаграмма Герцшпрунга Рассела (варианты транслитерации: диаграмма Герцшпрунга Рессела, Расселла, или просто диаграмма Г Р или диаграмма цвет звёздная величина) показывает зависимость между абсолютной звёздной величиной,… … Википедия

Диаграмма Герцшпрунга Рассела (варианты транслитерации: диаграмма Герцшпрунга Рессела, Расселла, или просто диаграмма Г Р или диаграмма цвет звездная величина) показывает зависимость между абсолютной звёздной величиной, светимостью,… … Википедия

Диаграмма Герцшпрунга Рассела (варианты транслитерации: диаграмма Герцшпрунга Рессела, Расселла, или просто диаграмма Г Р или диаграмма цвет звездная величина) показывает зависимость между абсолютной звёздной величиной, светимостью,… … Википедия

Диаграмма Герцшпрунга Рассела (варианты транслитерации: диаграмма Герцшпрунга Рессела, Расселла, или просто диаграмма Г Р или диаграмма цвет звездная величина) показывает зависимость между абсолютной звёздной величиной, светимостью,… … Википедия

Диаграмма Герцшпрунга Рассела (варианты транслитерации: диаграмма Герцшпрунга Рессела, Расселла, или просто диаграмма Г Р или диаграмма цвет звездная величина) показывает зависимость между абсолютной звёздной величиной, светимостью,… … Википедия

Диаграмма Герцшпрунга Рассела (варианты транслитерации: диаграмма Герцшпрунга Рессела, Расселла, или просто диаграмма Г Р или диаграмма цвет звездная величина) показывает зависимость между абсолютной звёздной величиной, светимостью,… … Википедия

Диаграмма Герцшпрунга Рассела (варианты транслитерации: диаграмма Герцшпрунга Рессела, Расселла, или просто диаграмма Г Р или диаграмма цвет звездная величина) показывает зависимость между абсолютной звёздной величиной, светимостью,… … Википедия

Что такое диаграмма Исикавы

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

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


Так выглядит незаполненная диаграмма Исикавы Инфографика: Майя Мальгина для Skillbox Media

Диаграмму разработал японский организационный теоретик, профессор Университета Токио Каору Исикава. В 1952 году её внедрили на металлургическом заводе «Кавасаки», чтобы управлять качеством продукта. Позже модель стали использовать в менеджменте в любых отраслях.

Инструмент используют для улучшения процессов и результатов. Схема не только помогает найти истинные причины проблем и решения для них. Она позволяет разобраться в бизнес-процессах, снизить риски при планировании решений. Диаграмму часто используют при разработке программ управления качеством.

Случайный

Когда начальное состояние и состояния принятия игнорируются, DFA из n состояний и алфавита размера k можно рассматривать как орграф из n вершин, в котором все вершины имеют k выходных дуг, обозначенных 1,…, k ( k- выход орграф). Известно, что когда k ≥ 2 — фиксированное целое число, с большой вероятностью самая большая сильно связная компонента (SCC) в таком k- выходном орграфе, выбранном равномерно случайным образом, имеет линейный размер и может быть достигнута всеми вершинами. Также было доказано, что если разрешено увеличиваться k по мере увеличения n , то весь орграф имеет фазовый переход для сильной связности, аналогичный модели Эрдеша – Реньи для связности.

В случайном DFA максимальное количество вершин, достижимых из одной вершины, с большой вероятностью очень близко к количеству вершин в самом большом SCC . Это также верно для наибольшего с минимальной степенью, который можно рассматривать как направленную версию .

Работа со схемой запроса Промо

Стандартом взаимодействия с реляционной базой данных стал язык SQL. Приемником SQL в 1С является язык запросов. Язык запросов, также как и SQL, является структурированным. Составляющие структуры запроса отвечают на разные вопросы о том, какие данные требуется получить и какие манипуляции с множествами данных необходимо произвести при получении. В простых случаях текст запроса можно написать вручную, однако в сложных случаях, а также при программном формировании, — лучше воспользоваться объектной моделью запроса и использовать объект «Схема запроса». В статье дается описание объектной модели и особенностей работы с ней, а также приводится решение, упрощающее взаимодействие с объектом «Схема запроса».

1 стартмани

Описание формата внутреннего представления данных 1С в контексте обмена данными

Фирма 1С не рекомендует использовать внутреннее представление данных для любых целей, которые отличны от обмена с 1С:Предприятием 7.7. Но сама возможность заглянуть на «внутреннюю кухню» платформы с помощью функций ЗначениеВСтрокуВнутр(), ЗначениеВФайл(), ЗначениеИзСтрокиВнутр() и ЗначениеИзФайла(), дала возможность сообществу программистов 1С разработать новые приемы разработки и анализа.

Так, именно на использовании внутреннего представления был построен алгоритм «быстрого массива», который позволяет практически мгновенно создать массив в памяти на основании строки с разделителями. С помощью разбора внутреннего представления можно «на лету» программным кодом выполнить анализ обычной формы и даже сделать редактор графической схемы. Во внутреннем формате сохраняют свои данные между сеансами различные популярные внешние обработки. А еще это возможность сделать быстрый обмен с внешними системами.

1 стартмани

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Курс на развитие
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: