Инструменты для алготрейдинга на Python. SMA + Полосы Боллинджера на акциях Северстали + код готовой стратегии

Предыдущая статья о «Расчете дневного изменения цены«

Когда я писал прошлую статью (она была первой из цикла) я не предполагал, что читатели разделятся на 2 категории:
1. Те, кто верят, что в алготрейдинг
2. Те, кто верят, что я шарлатан

Для обоих групп я напоминаю, что цель алготрейдинга — это увеличить вероятность получить прибыль от сделки
Или же, как говорят в «теории игр» — сделать математическое ожидание от игры положительным

Поэтому, предлагаю аудитории договориться о следующем:
1. Если ваш комментарий несет научный смысл, то пишите его под постом в Хабре.
2. Если ваш комментарий несет дискуссионный посыл, то прошу задавать его в специально созданном канале в телеге:

Собственно, здесь я перехожу к сути данной статьи.

SMA (Simple Moving Average, Скользящее среднее) — индикатор, основанный на подсчете среднего значения цены закрытия ценной бумаги.

Для тех, кто не знает что такое SMA, приведу алгоритм его подсчета:
1. Взять цену закрытия «close» ценной бумаги за период от t1 до t2 и отсортировать ее от t1 к t2.
2. Взять таймфрейм из первых N значений цены close.
3. Посчитать среднее арифметическое значение таймфрейма (simple average).
4. Сдвинуть таймфрейм вперед на одно значение (происходит moving) и выполнить пункт 3
5. Пункт 4 проводить до тех пор, пока таймфрейм не дойдет до точки t2

Отрисуем график SMA (N=20) для цены close акций Северсталь (тикер CHMF) за 27 мая 2021г.:

По графику видно, что SMA является сглаженной версией цены Close с временным лагом в 20 периодов.

Полосы Боллинджера (Bollinger Bands)

В 1980х годах Джон Боллинджер предложил рассчитывать не только SMA, но и STD (standart deviation, среднеквадратическое отклонение). Таким образом, мы будем видеть не только график изменения средней цены, но и ее волатильность.

Обычно, значения std устанавливают равным 2. В таком случае, с вероятностью в 95% следующее значение цены close будет лежать внутри полосы Боллинджера и только в 5% случаях оно будет выходить из этой полосы.

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

И тут у трейдера срабатывает чуйка: покупаем на низах, продаем на хаях (никак не наоборот).

Весь код с использованием полос Боллинджера привел на Google Colab. Данная стратегия принесла +1,7% за 1 день (но это не точно).

В следующей статье поговорим об RSI

ссылка на оригинал статьи https://habr.com/ru/post/560078/

Квантовый процессор Google осознает себя? Почему квантмех и свобода воли (не) связаны, и почему это неочевидно

Недавно вышел препринт с забавным названием “Есть ли у роботов с квантовым процессором свобода ослушаться?”. Идея статьи в том, что квантовый процессор — возможно, достаточно сложная система, чтобы внутри нее возникло сознание, обладающее свободой воли (да, звучит как научная фантастика). 

Обычно про связь квантовой физики и сознания пишут всякие псевдоученые, и основным посылом там является что-то типа “мышление формирует реальность”, что следует просто из неправильной интерпретации проблемы измерения. В общем, я бы проигнорировала эту статью, если бы одним из авторов не был основатель квантовой лабы Google, и если бы статья не была про, собственно, квантовый процессор Google. 

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

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

Как квантовая механика связана со свободой воли?

Обычно под свободой воли подразумевается возможность сделать выбор независимо от обстоятельств. Другими словами, это значит, что в одних и тех же обстоятельствах можно принять разные решения. В этой статье я буду использовать именно такое определение (существуют и менее мейнстримные определения, такие как компатибилизм, но я не буду их затрагивать). С точки зрения внешнего наблюдателя такая свобода воли означает, что, зная все внешние условия, невозможно предсказать, как будет вести себя субъект.

Что это значит с практической точки зрения?

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

Естественно, невозможность предсказания поведения — не достаточное условие наличия свободы воли. Легко представить себе ситуацию, когда нельзя предсказать поведение системы, но свободой воли она не обладает. Например, вряд ли свободой воли обладают электроны, точную координату которых мы не можем измерить из-за принципа неопределенности Гейзенберга. Но точно верно обратное — если система обладает свободой воли, то мы не можем предсказать ее поведение, то есть это является необходимым условием.

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

Предыдущие попытки связать квантмех с сознанием

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

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

Может быть, можно связать со свободой воли не принцип неопределенности, а коллапс волновой функции? Коллапс в квантовой механике тесно связан с проблемой измерения. Он используется для объяснения, как из состояния суперпозиции (из которого нельзя предсказать результат измерения, но можно — вероятности различных результатов) получается наблюдаемое измеренное состояние. Процесс, когда суперпозиция “ломается” вследствие измерения, называется коллапсом. У научного сообщества нет единого мнения о том, в какой именно момент происходит этот коллапс, как его описывать, и происходит ли он вообще, что открывает пространство для спекуляций.

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

Квантовое состояние вселенной менялось во времени линейно, в соответствии с уравнением Шредингера, в течение миллиардов лет, пока не появились первые наблюдатели (люди? обезьяны? пришельцы?) и посмотрели вокруг — и в этот момент состояние взяло и внезапно сколлапсировало!

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

Квантовый процессор и Найтовская неопределенность

Но вернемся к нашему квантовому процессору. Как все же авторы статьи делают вывод, что в нем возможна свобода воли? 

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

Дело в том, что Google уже умеет делать системы, в которых около 100 кубитов (т.е. элементарных вычислительных ячеек – в данном случае особых систем из сверхпроводников). Такая система является достаточно большой, чтобы у нас не хватило всей памяти на Земле для того, чтобы записать ее состояние. А если мы не можем его записать, то и предсказать результаты измерений мы тоже не можем.

Рассмотрим подробнее, как так получается. Если мы привели процессор в некоторое состояние, которое определяется квантовыми флуктуациями, то, чтобы его измерить, нужно записать волновую функцию системы из 100 связанных кубитов, которая описывается 2100 комплексными числами. Чтобы записать эти числа с точностью хотя бы 2 знаков после запятой, на каждое число понадобится около 20 бит. Тогда для записи всех этих чисел понадобится примерно 3*109 Зеттабайт. Это примерно в 47 миллионов раз больше, чем все данные, сгенерированные на планете Земля в 2020 году. А если кубитов будет уже не 100, а 300, и мы будем считать, что способны записать одно комплексное число в любой атом, то атомов во вселенной не хватит, чтобы записать состояние такой системы.

Найтовская неопределенность и свобода воли

Итак, резюмируем промежуточные выводы: для свободы воли необходима квантовая механика, но неясно, как квантовая механика может обеспечивать свободу воли. Google утверждает, что их процессор может обладать свободой воли из-за Найтовской неопределенности, но не объясняет, как именно свобода из этой неопределенности следует. Соответственно, возникает вопрос: как одно следует из другого? 

Более того, если свобода воли следует из Найтовской неопределенности, то мы должны наблюдать что-то похожее на нее и в нашем мозге. Ведь изначально свобода воли у нас ассоциируется именно со способностью людей принимать решения. Если в нашем мозге нет никакой Найтовской неопределенности, то “свобода воли” квантового процессора вряд ли имеет что-то общее с тем, что мы обычно называем этим понятием. 

Оказывается, есть большая статья на эту тему. Ее автор, Скотт Ааронсон, считает, что Найтовская неопределенность в мозге физически возможна, и рассуждает на тему того, как она может приводить к свободе воли. Он считает (в некотором смысле, постулирует), что для свободы воли необходимо отсутствие возможности предсказывать поведение субъекта даже вероятностно.

Важно отметить, что он не утверждает, что все его рассуждения действительно верны, а лишь рассматривает, как свобода воли могла бы быть устроена. Его аргументы местами выглядят фантастически, и первым делом хочется с ними не согласиться. Но, если вдуматься, они действительно являются корректными в том смысле, что не противоречат известным физическим законам. Я коротко приведу здесь цепочку рассуждений Скотта Ааронсона:

  • Где в природе может возникать Найтовская неопределенность?

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

  • На что Найтовская неопределенность, обусловленная начальной волновой функцией вселенной, может влиять прямо сейчас?

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

  • Как это связано с мозгом?

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

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

  • Как отсюда следует свобода воли?

Все фундаментальные законы физики (например, квантовая механика и общая теория относительности) обратимы относительно времени. Эта фраза означает следующее: если мы любой физический процесс снимем на видео и прокрутим его задом наперед, то такой процесс также будет описываться известными физическими законами. Например, если посмотреть на поглощения фотона задом-наперед, то получится испускание фотона. 

Про обратимость квантовой механики во времени

Можно возразить, что квантовая механика не обратима относительно времени, потому что процесс измерения связан с коллапсом волновой функции и необратим. На это можно ответить следующим образом: в современной картине мира измерение связано с процессом декогеренции, которая описывается обратимым во времени уравнением Шредингера (если измеряемую систему расширить до “система + измерительный прибор”).

Из этого следует, нет причин (кроме наших субъективных ощущений) считать, что время течет из прошлого в будущее, а не наоборот. Такую картину мира философы называют “блок-вселенной” (Block Universe) — в ней вселенную можно представить как 4-мерное пространственно-временное многообразие, “замерзшее” во времени. Тогда причинно-следственные связи приобретают другое значение. Теперь предложение “Я съел яблоко, потому что к этому привело предыдущее микросостояние вселенной” имеет столько же смысла, как “Я съел яблоко, потому что захотел”. Более того, фраза “Я съел яблоко, потому что к этому привело будущее микросостояние вселенной” также имеет смысл! 

Другими словами, ничего не мешает нам направить причинно-следственные связи в другую сторону (например, от нашего текущего психологического состояния к состоянию вселенной в момент большого взрыва), и это все еще не будет противоречить законам физики. Значит, мы можем сказать, что наш мозг поглотил фотон реликтового излучения минуту назад, потому что сейчас мы решили съесть яблоко. 

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

В любом случае, даже если принять, что время “объективно” течет вперед для процессов с возрастающей энтропией, ничего не мешает нам направить причинно-следственные связи в другую сторону для тех процессов, в которых энтропия не возрастает — а такие в природе тоже есть. Фотон реликтового излучения, излученный при большом взрыве и направляющийся к нам, как раз является таким процессом.

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

Почему все вряд ли так работает

Я надеюсь, что читатели получили удовольствие от попыток представить, как мы принимаем решения, испуская фотоны в прошлое (по крайней мере мне очень нравится осмысливать такие мозговыносящие гипотезы). Но теперь вернемся в реальность и подумаем, почему все скорее всего так не работает.

Для начала заметим, что в этой логической цепочке очень много неоправданных допущений. Вот только некоторые из них:

  1. Начальное состояние вселенной можно описать волновой функцией. На самом деле это утверждение не следует из современной космологии. Оно может быть как верным, так и неверным.

  2. Квантовые флуктуации играют значимую роль в активации нейронов. Хоть это утверждение и не противоречит современным представлениям, опять же никто не доказал, что это правда так.

  3. Активации одного нейрона достаточно, чтобы принять решение. Многие современные нейробиологические модели рассматривают кодирование информации в кластерах нейронов. Не факт, что случайная активация одного нейрона может на что-то повлиять.

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

Естественно, это не полный список вопросов, которые возникают к гипотезе о связи Найтовской неопределенности и свободы воли. Стоит отметить, что на многие возражения, которые могут прийти в голову, автор уже ответил в оригинальной статье. Но если вспомнить, что автор не утверждает, что все действительно устроено именно так, а просто стремится показать, что наличие свободы воли физически возможно, то представленные в статье аргументы мне кажутся достаточно сильными. Действительно все, что в ней написано, не противоречит законам физики. Более того, многие утверждения автора фальсифицируемы (т.е. потенциально проверяемы экспериментом) — например, утверждение о том, что квантовые флуктуации влияют на активацию нейронов.

Заключение

Если мы придерживаемся научной картины мира, для объяснения явлений следует выбирать наиболее простые теории — это называется Бритвой Оккама. С моей точки зрения, наиболее простым объяснением является отсутствие связи между Найтовской неопределенностью и свободой воли, и, за неимением других механизмов, обеспечивающих свободу воли, и отсутствие свободы воли. 

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

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

ссылка на оригинал статьи https://habr.com/ru/post/560284/

Почему я считаю Haskell хорошим выбором с точки зрения безопасности ПО?

Команда Typeable понимает ценность безопасности. Мы любим Haskell, но стоит ли его выбирать, если ваша цель – создание защищенного программного обеспечения? Хотелось бы сказать «да», но как и для большинства эмпирических вопросов о разработке ПО, здесь просто нет объективного доказательства, подтверждающего, что Haskell – или ещё какой-нибудь язык программирования – обеспечивает большую безопасность, чем любой другой. Нельзя сказать, что выбор языка в Typeable не имеет значения для безопасности, но какое именно значение он имеет, еще нужно подумать.

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

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

   Чисто техническая            Уязвимость, относящаяся         уязвимость                исключительно к предметной области         ↓                                  ↓         ┠───────────╂───────────╂──────────┨              ↑            ↑          ↑       Инструментарий Инструментарий  Нужно      должен исправить может помочь  подумать

На оси выше показан источник различных уязвимостей программного обеспечения. На крайнем правом конце мы видим ошибки, связанные исключительно с доменной областью, то есть ошибки, совершенно не зависящие от используемого инструментария. Примером такой ошибки являются «контрольные вопросы», которые в начале 2000-х использовались многими веб-сервисами для восстановления паролей. Зачастую это были вопросы типа «Девичья фамилия вашей матери?». Позднее, примерно в 2009-2010 годах, возникло такое явление, как социальные сети, и неожиданно «девичья фамилия матери» перешла в категорию общедоступной информации. Неважно, какую технологию вы используете для реализации такой схемы с «контрольными вопросами». Эта схема все равно не работает.

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

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

В таких сервисах обычно есть соблазн записать файл пользователя непосредственно в файловую систему сервера. Однако под каким именем файла? Использовать непосредственно имя файла пользователя – верный путь к катастрофе, так как оно может выглядеть как ../../../etc/nginx/nginx.conf, ../../../etc/passwd/ или любые другие файлы, к которым сервер имеет доступ, но не должен их изменять.

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

Использование шкалы

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

В идеале современный инструментарий должен практически полностью устранять чисто технические уязвимости. Например, большинство современных языков, таких как Haskell, C# и Java, по большей части обеспечивают защиту содержимого памяти и в целом предотвращают переполнение буфера, попытки дважды освободить одну и ту же ячейку, а также другие технические проблемы. Однако от правильного инструментария можно получить еще больше пользы. Например, легко представить себе систему, в которой имеется техническая возможность разделить абсолютный и относительный пути к файлу, что упрощает контроль атак с обходом каталога (path traversal), таких как загрузка пользователем файла поверх какого-нибудь важного конфигурационного файла системы.

Haskell – нижняя часть шкалы

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

// From imaginary CSRF token protection: if ($tokenHash == $hashFromInternet->{'tokenHash'}) {   echo "200 OK - Request accepted", PHP_EOL; } else {  echo "403 DENIED - Bad CSRF token", PHP_EOL; };

Видите, в чем здесь проблема? В большинстве динамических языков, таких как PHP, «тип» записи JSON определяется в процессе выполнения и зачастую основывается на структуре входных данных. Кроме того, в объектно-ориентированном программировании «тип» используется для выбора поведения с помощью динамической диспетчеризации, что фактически позволяет злоумышленнику выбирать, какой код будет исполнен. Наконец, в языке PHP равенство, выраженное через ==, зависит от типа вводимых данных, и в приведенном выше примере атакующий может полностью обойти защиту.

Аналогичная проблема возникла с Java (и другим языками, см. https://frohoff.github.io/appseccali-marshalling-pickles/). Java предложил исключительно удобный способ сериализации любого объекта на диск и восстановления этого объекта в исходной форме. Единственной досадной проблемой стало отсутствие способа сказать, какой объект вы ждете! Это позволяет злоумышленникам пересылать вам объекты, которые – после десериализации в вашей программе – превращаются во вредоносный код, сеющий разрушения и крадущий данные.

Это не значит, что вы не можете создать безопасный код на PHP или не можете получить такие же ошибки в Haskell, однако по своей природе Haskell не склонен к таким уязвимостям. Если переложить приведенный выше пример кода на Haskell, он будет выглядеть примерно так:

data Request = Request {csrfToken :: Token, ... other fields} doSomething :: Session -> Request -> Handler () doSomething session request   | csrfToken session == csrfToken request = ... do something   | otherwise = throwM BadCsrfTokenError

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

Haskell – середина шкалы

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

Прежде всего, в Haskell имеется возможность моделировать данные более точно по сравнению с такими языками, как как C, Javascript или даже Java. В основном это обусловлено удобством его синтаксиса и наличием типов-сумм. Точное моделирование данных имеет значение для безопасности, поскольку код домена в основном представляет собой модель некоторого реального явления. Чем меньше ее точность, тем больше возможностей имеют злоумышленники.

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

data SSN = Unknown | Redacted | SSN Text

А теперь сравним моделирование той же идеи с использованием строковых величин "", "<REDACTED>" и "191091C211A". Что произойдет, если пользователь введет "<REDACTED>" в поле ввода SSN? Может ли это в дальнейшем привести к проблеме? В Haskell об этом можно не беспокоиться.

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

storeFileUpload :: Path Abs File -> ByteString -> IO () storeFileUpload path = ...

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

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

Haskell и ошибки домена

Чисто доменные ошибки выше описывались как ошибки, не зависящие от используемых инструментов. Это не совсем верно. Инструменты не выбираются случайным образом. Сообщества, объединяющие единомышленников, зачастую образуются вокруг различных инструментов. При этом такие сообщества могут иметь несхожие взгляды на безопасность.

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

Однако это все догадки. Сообщество Haskell до сих пор достаточно мало, чтобы не быть объектом атак, а специалисты по Haskell в общем случае еще не так сильно озабочены проблемами безопасности, как разработчики на Javascript или Python.

Заключение

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

ссылка на оригинал статьи https://habr.com/ru/company/typeable/blog/560286/

Простая архитектура приложений на фреймворке Angular

Введение в атомарный дизайн

Можете ли вы с первого взгляда определить, что находится внутри общего модуля? И, не открывая другой файл, сказать, в каких компонентах есть зависимости или привязки к другим компонентам? Каким бы ни был ваш ответ, я предлагаю вам заварить чай или кофе и разобраться со мной в основах теории атомарного дизайна, придуманной Брэдом Фростом

Определение атомарного дизайна в контексте Angular

 

Структура каталогов при атомарном дизайне в Angular
Структура каталогов при атомарном дизайне в Angular

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

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

Атомы и молекулы — «глупые» компоненты

Это простые по сути и удобные в тестировании фрагменты кода, которые могут использоваться многократно. Они получают данные на входе (@Input) и могут что-то выдавать на выходе (@Output). Следовательно, они идеально подойдут для описания библиотек пользовательского интерфейса.

  • Атомы — самые крохотные модули, многократно применяемые во всем проекте. Обычно представляют собой одиночный HTML-элемент с базовым стилем.

  • Молекулы — отдельная группа атомов.

Организмы и шаблоны — простое представление «умных» компонентов

Шаблоны помогают сократить объемы типового HTML-кода, упрощая «умные» компоненты, а организмы являются их аналогом для TypeScript.

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

А все дело в том, что их необходимость осознаешь тогда, когда уже поздно. Проектируя сложный «умный» компонент, мы изначально рассматриваем его как единое целое. Мы создаем полную страницу, постепенно добавляя небольшие фрагменты кода. И тут внезапно этот «умный» компонент раздувается до пятисот строк TypeScript и тысячи строк HTML-CSS. В получившемся болоте каждый последующий шаг дается сложнее, чем предыдущий. Даже если логика простая, с файлом трудно обращаться из-за его размеров.

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

Шаблоны

Рассматривайте шаблоны как скаффолды и скины компонентов. Обычный код HTML-CSS с элементом ng-content.

Шаблоны используются в высокоуровневых компонентах (таких как страницы или организмы), чтобы снизить вариативность стиля и уменьшить количество типового HTML-кода. У таких компонентов не должно быть никаких входных или выходных данных, логики и зависимостей от конструктора.

Давайте рассмотрим простой пример:

Компонент-шаблон, который группирует типовой код оберток наряду со стилем и не обладает логикой.
Компонент-шаблон, который группирует типовой код оберток наряду со стилем и не обладает логикой.

 

Страница или «умный» компонент на основе компонента-шаблона. В нем нет стилей, но он управляет логикой.
Страница или «умный» компонент на основе компонента-шаблона. В нем нет стилей, но он управляет логикой.

Такой подход оправдывает себя не только в отношении небольших фрагментов кода, таких как карточки в Angular Material, но и для макетов на всю ширину экрана. Он полезен в ситуациях, когда не удается обойтись одним компонентом макета с элементом router-outlet или когда нужно разбить код на фрагменты. Как только вы стабилизируете первоначальный код, его рефакторинг под использование шаблонов сводится к простым операциям «копировать/вставить» и занимает всего несколько минут.

Организмы

Это относительно сложная группа молекул, которая ведет себя как один модуль. На сайте Брэда в качестве примера организма приводится заголовок страницы.

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

Это «умные» или «глупые» компоненты? Однозначного правила в этом отношении нет. Я предпочитаю по возможности собирать все зависимости от сервисов и логику в странице/контроллере. Но имея дело со сложными страницами, иногда разумнее структурировать их как макет и разнести логику на несколько дочерних компонентов-организмов, имеющих собственные зависимости.

Страницы — «умные» компоненты

В общем случае считаются функциональными компонентами в рамках классической структуры проекта типа core/features/shared (базовые модули / функциональные компоненты / общие компоненты). «Умные» компоненты управляют входами/выходами, взаимодействующими с базовыми модулями приложения через сервисы.


Перевод подготовлен в рамках курса «JavaScript Developer. Professional».

Всех желающих приглашаем на открытый урок «Async Patterns в JavaScript». На этом занятии разберем асинхронное программирование в JavaScript, функцию обратного вызова в программировании, функции map, reduce и многое другое. Присоединяйтесь!

ссылка на оригинал статьи https://habr.com/ru/company/otus/blog/560208/

Cognitive therapy и мобильные приложения против невротической депрессии

Только примерно 20% больных реальной депрессией ищут медицинскую или психологическую помощь, причем большинство из них обращаются к участковым терапевтам и неврологам. Те, в свою очередь, не всегда готовы к правильной диагностике, вследствие чего лишь около 30% депрессий (из числа 20% обратившихся) диагностируются своевременно и из них лишь 25% пациентов, в среднем, получает необходимую антидепрессивную терапию, лекарственную или иную. Трагичность (почему бы и не да) этих цифр тем более очевидна, если учесть тот факт, что в 60-70% случаев правильное научное лечение приносит пациентам быстрый желаемый эффект.

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

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

Весь прикол КТ в том, например, что известен эксперимент, в котором однажды один ученый впрыскивал в кровь испытуемым добровольцам в большой дозе адреналин, не говоря им, что это он. Люди становились психосоматически и объективно, по показаниям приборов, возбужденными, но 2/3 из них заявляли, что не испытывают «никаких эмоций», а 1/3 говорила, что испытывала что-то «похожее на эмоцию». Исследования других ученых показали, что одного физиологического возбуждения (или другого ощущения) недостаточно для возникновения эмоции, необходимо, чтобы человек распознал это реальное возбуждение, осознал, оценил и обозначил его словесно, мысленно, как это ему свойственно. Например, учащенное после подъема по лестнице на 10-й этаж сердцебиение ипохондричный пессимист назовет «страшным приступом тахикардии», а спортивный оптимист — «кайфовой тренировкой кровообращения». Изменения в организме у обоих одинаковые, но через минуту или час у первого настроение и здоровье ухудшится («приболел»), а у второго — улучшится («потренил»), причем не только субъективно, но и объективно, по показаниям самых современных высокоточных  приборов.  Получается, что отрицательные или положительные эмоции — следствие привычного (чаще наученного или наследственного) оценивания и убеждения в том, что они вызваны вредной или полезной данной конкретной причиной. Приблизить субъективное к объективному ради здоровья и успеха первоклассно помогает как раз КТ.

Начало практики  когнитивной самокоррекции  включает более подробное информирование о её «философии»  (коротко повторим — эмоциональные проблемы вызывают не сами события, а их оценка) и о последовательных этапах восприятия события человеком в виде:

Ао —> Ас —> В —> C

Ао — объективное событие (как бы описанное научной группой каких-либо внешних наблюдателей), Ас — субъективно воспринятое событие (описанное вами), В — ваша система оценки, предопределяющая, какие параметры объективного события будут восприняты и будут значимы, С — эмоциональные и поведенческие последствия воспринятого события, в том числе и медицинские симптомы.

Описательные мысли, как уже отмечалось, соединены с оценочными установками связями разной степени жесткости. Начиная от абсолютно исключающих какие-либо варианты, протекающих по типу рефлекса, при которых отношение к событию уже предопределено и тогда можно говорить о наличии у вас иррациональной установки (ИУ), заканчивая многовариантными, когда при принятии решения о действии осуществляется анализ альтернативных вариантов, хотя он может протекать неосознанно, и тогда можно говорить о наличии рациональной установки. Цель КТ – перевод в проблемных ситуациях с иррациональных, депрессивных и стрессовых установок на максимально рациональные и приятные.

Работа в КТ всегда строится с учетом схемы «А, В, С». Сначала:

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

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

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

Вторичный выигрыш от болезни также может исказить осознание испытываемых эмоций. Для достижения цели второго этапа используется, кроме того, ряд специальных приемов:

а) самонаблюдение за мимическими проявлениями при вашем воспоминании об эмоции и предоставление письменной обратной связи вами самими,

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

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

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

a)         «вспоминательная» фокусировка на тех мыслях, которые приходили Вам на ум в момент столкновения со стрессовым событием,

b)         высказывание вами самими гипотетических предположений типа «У меня в такой стрессовой ситуации возникли бы следующие мысли»,

c)         вопросы с проекцией в будущее время, например: «Предположим, что произойдет самое худшее в ситуации стресса, что же это будет?» и др.

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

Самая распространенная группа ИУ, создающих всеразличные проблемы  — это «катастрофические установки» (отмечайте тут возможные ваши):

·        Я настолько расстроен(а) и несчастлив(а), что не могу это выдержать.

·        Мое будущее безнадежно, и ничто не может измениться к лучшему.

·        Я чувствую, что как личность, я полный(ая) неудачник(ца).

·        Я полностью не удовлетворен(а) жизнью и мне все надоело.

·        Я постоянно испытываю чувство вины.

·        Я чувствую себя уже наказанным(ой).

·        Я себя ненавижу.

·        Ко мне приходят мысли покончить с собой, но я не буду их осуществлять.

·        Я виню себя во всем плохом, что происходит.

·        Раньше я мог(ла) плакать, а сейчас не могу, даже если мне хочется.

·        Теперь я постоянно чувствую, что раздражен(а).

·        Я полностью утратил(а) интерес к другим людям.

·        Я с трудом заставляю себя сделать что-либо.

·        Я полностью утратил(а) сексуальный интерес.

·        Мой аппетит теперь значительно хуже.

·        Я очень обеспокоен(а) своим физическим состоянием и мне трудно думать о другом.

Если у вас даже один или более плюсов – следует обратиться к врачу-психотерапевту или психологу. Есть про это опросники, вот два примера аппликаций в ГуглПлее — Тест на депрессию и моя старая модификация Тест оценки депрессии.

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

Следующие же духовные враги психосоматического здоровья и эффективного развития, которых тоже желательно заменять на более оптимистичные и уверенные убеждения, менее катастрофичны и опасны, нежели предыдущие, но зато чаще встречаются у всех нас (ставьте мысленно плюсы, если есть соответствия): 

·        Я расстроен(а).

·        Я все время расстроен(а) и не могу от этого отключиться.

·        Я чувствую, что озадачен(а) будущим.

·        Я чувствую, что меня ничего не ждет в будущем.

·        Я чувствую, что пережил(а) больше неудач, чем другие люди.

·        Когда я оглядываюсь на мою жизнь, я вижу в ней очень много неудач.

·        Я не получаю столько же удовольствия от жизни, как и раньше.

·        Я больше не получаю удовлетворения ни от чего.

·        Достаточно часто я чувствую себя виноватым(ой).

·        Большую часть времени я чувствую себя виноватым(ой).

·        Я чувствую, что могу быть наказан(а).

·        Я ожидаю, что могу быть наказан(а).

·        Я разочаровался(ась) в себе.

·        Я себе противен(на).

·        Я критикую себя за ошибки и слабости.

·        Я все время обвиняю себя за свои проступки.

·        Сейчас я плачу чаще, чем раньше.

·        Теперь я все время плачу.

·        Я более легко раздражаюсь, чем раньше.

·        Я меньше интересуюсь другими людьми, чем раньше.

·        Я почти потерял(а) интерес к другим людям.

·        Я чаще, чем раньше, откладываю принятие решения.

·        Я больше не могу принимать решения.

·        Я знаю, что выгляжу безобразно.

·        Мне необходимо сделать дополнительное усилие, чтобы начать делать что-нибудь.

·        Я совсем не могу выполнить никакую работу.

·        Сейчас я сплю хуже, чем раньше.

·        Я просыпаюсь на 1-2 часа раньше обычного и мне трудно заснуть опять.

·        Теперь я устаю быстрее, чем раньше.

·        Я устаю почти от всего, что я делаю.

·        Я не могу ничего делать из-за усталости.

·        Мой аппетит стал хуже, чем раньше.

·        Сейчас я значительно меньше интересуюсь сексуальными вопросами.

·        Меня очень тревожат проблемы моего соматического здоровья, такие как боли, нарушения дыхания, сердцебиения, расстройства желудка и многие другие

·        Я настолько обеспокоен своим физическим состоянием, что больше ни о чем не могу думать.

Результаты:   0-1 –  нормально, до 5 плюсов – требуется помощь психолога, более 5 – нужно к врачу-психотерапевту или психиатру.

Цель диагностического этапа реализована, когда в области стресса или депрессии выявлены такие или им подобные ИУ, показан характер связи между ними и отношениями в семье, на работе и т.д.  Уточнение рациональных установок и целей также необходимо, поскольку они составляют ту позитивную часть отношения, которая в последующем может быть расширена. Что мы и сделаем, насколько это возможно, чуть дальше. Хотя в приложения есть хорошие для здесь и сейчас), например — Mindspa: психологическая помощь в любой момент или Психология самооценки: 6 практик. Личностный рост с BestHelp — Психологическая помощь онлайн.

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

Чтобы успешно уменьшить депрессию и любые неприятные мысли, обязательно нужно понять и принять базисное и наиглавнейшее положение когнитивной самокоррекции о зависимости эмоций от мышления: «Если мы хотим изменять чувства, надо изменять вызвавшие их идеи». КТ уже началась сразу после осознания и принятия вами самими (и только так) некоторых ваших суждений и идей о проблемах и желаниях с постепенным переводом некоторых из них на позиции улучшения ИУ.

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

Максимально быстрое осознание способов неадекватной обработки информации и замена их правильными — таковы главные общие задачи когнитивной самокоррекции. Она наиболее показана людям с 14-16 лет со способностью к самонаблюдению и анализу своих мыслей. Т.е. «сознательным товарищам».

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

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

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

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

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

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

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

Вы можете сказать — «хватит указывать, кто виноват, лучше опишите что, когда и как делать!». Чрезвычайно согласен, настолько, насколько это только возможно.

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

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

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

Следующий этап условно получил название изменение правил регуляции поведения. Согласно когнитивной самокоррекции, люди для регуляции своей жизни и поведения других используют правила (предписания, формулы). Эта система правил в значительной степени предопределяет обозначение, истолкование и оценку любых событий. Правила регуляции поведения, которые носят чрезмерный и абсолютный характер, влекут за собой регуляцию поведения, не учитывающую реальной ситуации и поэтому создают ваши проблемы. Для того, чтобы у вас не было этих проблем, нужно изменять правила, делать их менее абстрактными, менее паранойяльными, более гибкими, больше учитывающими сиюминутную реальность.

Содержание правил регуляции поведения центрируется вокруг двух основных параметров: опасности — безопасности и боли — удовольствия. Ось опасности — безопасности включает события, связанные с физическим, психологическим или социальным риском. Хорошо адаптированный человек обладает достаточно гибким набором высокоточных правил, позволяющих соотносить их с ситуацией, интерпретировать и оценивать имеющуюся степень риска и успеха.

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

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

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

ссылка на оригинал статьи https://habr.com/ru/post/560296/