Сайт Романа ПарпалакаБлог

Мастер костылей, или сущности в DOMDocument

21 января 2023 года, 01:19

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

Для извлечения текста из html-исходников решил взять DOM API, как советует народ. Вообще, конечно, регулярки — наше всё :) Но HTML нормально распарсить регулярками нельзя. А мне надо распарсить, чтобы удалить из исходника стили, скрипты и комментарии (попробуйте на досуге написать регулярку, которая будет определять, находится ли разделитель в контексте комментария или нет). Кроме того, парсинг поможет точно разбить текст на абзацы, чтобы их дальше разбить на предложения. Поэтому я взял волю в кулак, посмотрел, как использовать DOM API, и рекурсивно обошел dom-дерево на PHP.

Как оказалось, DOM API не поддерживает HTML5. Это выливается в практическую проблему с непоследовательной обработкой сущностей HTML. Например, если в исходнике написать & ★, при получении текстового содержимого из dom-узла получим & ★. Видим, что первая сущность из HTML предыдущих версий распознается и раскодируется, а вторая из HTML5 — нет. Такие ошибки приведут к искажениям при выводе сниппетов.

Моя первая идея — прогнать текстовое содержимое через html_entity_decode($a, ENT_HTML5);. Действительно, что не доделал встроенный парсер, доделает эта функция. Но проблема в том, что раскодирование неидемпотентно. Если на вход подать ★, то после DOM API мы получим ★. И на этапе повторного раскодирования мы не будем знать, нужно ли раскодировать ★ еще раз, или нет.

Поиск проблемы в гугле разумного решения не выявил. В классе DOMDocument есть какое-то свойство substituteEntities, но в моем случае оно ни на что не влияло. Я уже было подумывал о возврате к регуляркам. Но всё-таки смог придумать обходное решение.

Для начала нужно все вхождения амперсанда заменить на его сущность:

$text = str_replace('&', '&', $text);

После этого DOM API раскодирует копии только одой сущности — этого самого амперсанда. При рекурсивном обходе в текстовом содержимом узлов dom-дерева тегов (то есть символов < и >) не будет, а все сущности будут закодированными. Если их нужно раскодировать, можно вызвать html_entity_decode($a, ENT_HTML5);.

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

    5 комментариев

Отладка запросов к FastCGI из консоли

13 января 2023 года, 15:25

Обычно протокол FastCGI применяется для общения между веб-сервером и бэкендом. Например, связка nginx и PHP-FPM работает по этому протоколу. Для таких случаев есть типовые конфигурации, всё начинает работать из коробки, и особая отладка не требуется.

Однако как быть, если у вас есть собственный сервис, работающий по протоколу FastCGI (скажем, простая асинхронная очередь через PHP-FPM), и вам нужно его отладить? Как понять, где ошибка, если что-то не работает?

Можно было бы настроить в nginx отдельный location, подключить к нему отлаживаемый сервис и отправлять http-запросы через через веб-сервер. Однако есть способ проще, который не требует изменения конфигурации сервисов.

Предположим, у вас есть скрипт, который забирает входные данные из $_POST['formula'] и $_POST['extension']. Тогда вызвать этот скрипт с данными formula=12345 и extension=svg можно вот так:

user@tau:~$ echo "formula=12345&extension=svg" | sudo -uwww-data \
> CONTENT_TYPE='application/x-www-form-urlencoded' CONTENT_LENGTH=28 \
> SCRIPT_FILENAME=/var/www/.../.../cache_processor.php \
> REQUEST_METHOD=POST cgi-fcgi -bind -connect /var/run/php_fpm.sock

В консоли мы увидим ответ, например, такой:

PHP message: PHP Warning: file_get_contents(...): failed to open stream: No such file or directory in ... on line 88Content-type: text/html; charset=UTF-8

В этом методе используется утилита cgi-fcgi, которая проксирует запрос из консоли к FastCGI.

    Оставить комментарий

Про войну

9 января 2023 года, 17:52

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


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

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

Немного помогали проявления солидарности с Украиной в повседневной жизни. Вот, например, 26 февраля украинский флаг на гирлянде с управляемой подсветкой:

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

Из рациональных мыслей в начале войны у меня была одна, которой можно поделиться. Нападение Путина на Украину можно сравнить с нападением Сталина на Польшу в 1939 году. Он тоже проводил «военную операцию» в Польше после подписания пакта Молотова — Риббентропа и секретного протокола к нему (подлинность этих документов подтверждена МИДом в 2019 году). Но Сталин смог оказаться среди победителей во второй мировой войне и участвовать в ялтинском разделе мира только из-за безумного диктатора, Гитлера. В первые дни на основе этой аналогии можно было предположить, что Путин договорился о каком-то разделе сфер влияния с правителями Китая, который тоже вот-вот оккупирует какую-нибудь страну. Но сейчас мы видим, что в мире второго безумного диктатора не оказалось. И нормальных выходов у Путина из этой ситуации нет.

Выходить на протесты я не стал. Сейчас любой протест автоматом означает задержание. И польза от протестов может быть только в расколе элит, что возможно при численности митингов от миллионов или хотя бы нескольких сот тысяч людей. Сегодня это непредставимые числа. 10 лет назад была совершенно другая атмосфера. Как очевидцу событий на Болотной мне было ясно, что Путин самостоятельно из Кремля не уйдет. А уже 8 лет назад, когда происходили события в Крыму, «очнувшимся» людям с вопросом «а что можно сделать?» оставался только один ответ — «валить». Хотя тогда всё еще можно было выйти на марш против войны, но его численность была на порядок меньше необходимой.

В новостях сообщали о задержаниях людей даже с пустым листом бумаги. Известный анекдот советских времен про мужика, разбрасывающего пустые листовки, стал реальностью. Кроме того, стали реальностью даже лозунги из оруэлловской антиутопии «1984»: «война — это мир, свобода — это рабство, незнание — сила».


Кстати, Марш мира и Марш правды — это ответ на вопрос о том, где я был 8 лет назад. И у меня для вас есть встречный вопрос — а где вы были 11 лет назад, когда Путин в нарушение конституции возвращался в кресло президента, чтобы оставить более заметный след в учебнике истории? Если бы он не пошел на выборы в 2012 году, его бы все вспоминали как хорошего президента. А как его будут вспоминать теперь?

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

    1 комментарий

Прокси-сервер через ssh

27 февраля 2022 года, 20:50

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

ssh -D 1337 -q -C -N example.com

Разумеется, вместо example.com нужно подставить ваш хост. После запуска вы можете использовать localhost и порт 1337 как параметры SOCKS5 прокси-сервера в браузере и других программах. При этом данные будут идти через соединение по ssh с вашим сервером.

Если у вас windows, можете взять консоль WSL, установить MinGW или поискать аналогичную функциональность в PuTTY на вкладке Connection/SSH/Tunnels.

    Оставить комментарий

Как додуматься до решения олимпиадной задачи — 2

6 февраля 2022 года, 18:56

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

Условие задачи

Есть 3 различных натуральных числа $$x$$, $$y$$, $$z$$. Эти числа оказались подобраны так, что выражение

$$A={xy+yz+zx\over x+y+x}$$

тоже натуральное. Каким числом оно может быть? Иными словами, каково пересечение множества значений этой функции трех натуральных переменных и множества натуральных чисел?

Поиск решения

Идея №1: вынести в числителе за скобки $$xyz$$. Получается

$$A={\left({1\over x}+{1\over y}+{1\over z}\right)xyz\over x+y+x}.$$

Из этого я заметил, что при замене величин $$x$$, $$y$$ и $$z$$ на обратные $$1/x$$, $$1/y$$ и $$1/z$$ выражение «переворачивается», то есть $$A$$ меняется на $$1/A$$. Дальше у идеи не было очевидного развития, я решил попробовать другие идеи.

Идея №2: масштабирование. Видно, что если выполнить замену $$x$$, $$y$$ и $$z$$ на $$kx$$, $$ky$$ и $$kz$$, то числитель $$A$$ вырастет в $$k^2$$ раз, а знаменатель в $$k$$ раз, то есть $$A$$ меняется на $$kA$$. Как это можно применить? Пусть мы выбрали натуральные числа равными 1, 2 и 3. Тогда

$$A={2+6+3\over 1+2+3}={11\over 6}.$$

Чтобы из этого набора получить целое $$A=11$$, можно взять не 1, 2 и 3, а 6, 12 и 18.

Однако я не стал развивать дальше эту идею из-за ошибки. Мне показалось, что $$A$$ меняется не на $$kA$$, а на $$k^2A$$, и я пропустил условие, что числа могут быть различными. Так что мне показалось, что, подставив $$x=y=z=1$$, можно получить квадраты натуральных чисел 1, 4, 9,… Я понимал, что задача не такая простая, поэтому хотел проанализировать случай различных $$x$$, $$y$$ и $$z$$ (хотя по условию только их и надо анализировать), и перешел к дальнейшему рассмотрению.

Идея №3: перебор вариантов.

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

Для перебора будем фиксировать значения $$x$$, $$y$$ и изменять $$z$$. Пусть $$x=y=1$$ (я проделал эту лишнюю работу, потому что невнимательно прочитал условие).

$$A={1+z+z\over 1+1+z}={1+2z\over 2+z}={4+2z-3\over 2+z}=2-{3\over 2+z}.$$

Ясно, что $$A=1$$ при $$z=1$$, а значение $$A=2$$ ни при каком $$z$$ не будет достигнуто.

Пусть $$x=1, y=2$$. Тогда

$$A={2+2z+z\over 1+2+z}={2+3z\over 3+z}.$$

Если $$z$$ нечетное, то числитель нечетный, знаменатель четный, $$A$$ не будет целым. Если $$z$$ четное, то числитель четный, знаменатель нечетный. Здесь я сделал еще одну ошибку, подумав, что четное число не может делиться на нечетное, и вообще исключил из рассмотрения варианты с $$x$$ и $$y$$ разной четности.

Пусть $$x=1, y=3$$. Тогда

$$A={3+3z+z\over 1+3+z}={3+4z\over 4+z}.$$

Здесь исключаем случай четного $$z$$, так как нечетный знаменатель не будет делиться на четный числитель. Попробуем подставить разные нечетные $$z$$. Получим:

$$ z=1\implies A={7/5}\\ z=3\implies A={12/7}\\ z=5\implies A={23/9}\\ z=7\implies A={31/11}\\ z=9\implies A={39/13}=3\\ z=11\implies A={47/15}\\ $$

Далее, сколько бы мы ни увеличивали $$z$$, до значения 4 мы не дойдем, так как 4 достигается только в пределе $$z\to\infty$$. Таким образом, при $$x=1, y=3$$ единственное целое $$A$$ дает $$z=9$$.

Пусть $$x=1, y=5$$. Тогда

$$A={5+5z+z\over 1+5+z}={5+6z\over 6+z}.$$

Перебор $$z$$ слишком долгий, и мы понимаем, что возможных значений $$A$$ не так уж много. Поэтому решим уравнение относительно $$z$$:

$$5+6z=A(6+z)\iff(6-A)z=6A-5\implies z={6A-5\over 6-A}.$$

Отсюда видно, что $$A$$ не может быть четным. 1 и 3 не подходят, $$A=5$$ дает $$z=25$$, других значений для проверки нет.

Мы видим, что значения переменных (1, 3, 9) и (1, 5, 25) дают целые значения $$A$$. Кажется, это и есть нужная закономерность.

Решение

Подставим значения $$x=1, y=n, z=n^2$$. Тогда

$$A={n+n^3+n^2\over 1+n+n^2}=n\,{1+n^2+n\over 1+n+n^2}=n.$$

Таким образом, мы можем в качестве значения выражения получить любое натуральное число, не равное 1. То, что 1 получить нельзя, посмотрите у Савватеева или докажите самостоятельно.

Обсуждение ошибок

После подстановки $$x=1, y=n, z=n^2$$ моя ошибка с четностью стала очевидной. Сначала мне вообще не хотелось писать об ошибках. Признаваться в них не очень приятно. Но с другой стороны, благодаря ошибкам на этапе поиска решения я довольно быстро нашел правильное решение. Могло бы оказаться так, что я углубился в разработку какой-нибудь другой тупиковой идеи и не довел бы решение до конца. Особенно важно такое чутье на самой олимпиаде в условиях ограниченного времени.

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

    Оставить комментарий

Необычный сон и шутка про банки

3 февраля 2022 года, 20:51

Сегодня мне приснился странный сон.

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

Дальше Голунов говорит Рыжкову: «А помните, как та шутка — „банк — он же не on-shell“». На этом я проснулся и не поленился записать саму фразу. Давайте разбираться, какой глубокий смысл в ней скрыт, и какой могла быть эта шутка (в реальности я ничего похожего не припомню).

Термины on-shell и off-shell — это жаргон из квантовой теории поля. Дословно они означают «на (массовой) поверхности» и «вне (массовой) поверхности». Под массовой поверхностью имеется в виду многомерный график соотношения между энергией и импульсом E2p2=m2. О настоящих частицах, для которых как раз выполняется закон сохранения энергии, говорят, что они находятся на массовой поверхности. А вот для виртуальных частиц, которые возникают в квантовой теории поля как вспомогательные объекты, закон сохранения энергии не выполняется, поэтому говорят, что они вне массовой поверхности: E2p2m2.

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

Таким образом, фраза «банк — он же не on-shell» по смыслу эквивалента «для банка не выполняется закон сохранения». Какой закон сохранения неприменим к банкам? Очевидно, закон сохранения количества денег. Во-первых, банки не держат у себя все деньги вкладчиков. Эти деньги выдаются в виде кредитов, что увеличивает количество денег в экономике. Во-вторых, кредитные деньги ничем не отличаются от других денег. Они из оборота могут вновь попасть на депозиты, вновь могут быть выданы в виде кредитов и т. д. В экономике даже есть понятие банковского мультипликатора, которое описывает эту бесконечную историю.

Итак, шутка из сна могла быть про диалог двух физиков:
— Не могу понять, как банк может выдать кредитов больше, чем у него есть денег вкладчиков.
— Банк — он же не on-shell!
Можете воспользоваться, если окажетесь в компании физиков, обсуждающих экономику :)

Самая большая загадка: каким образом это всё оказалось в моем сне? Я иногда про себя отмечаю ошибку с употреблением слова «функционал» вместо «функциональность» в речи других, поэтому эта часть как раз не удивительна. Почему во сне были Голунов и Рыжков — не понимаю, я давно о них ничего не слышал. Термины on-shell и off-shell я не использовал много лет. И как вообще мозг во сне смог построить такую цепочку ассоциаций?

    Оставить комментарий

Савватеев и Шпилькин разбирают статистику с выборов

13 октября 2021 года, 22:56

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

Пару раз они забылись и произнесли понятные только специалистам термины вроде «минимального детерминанта матрицы ковариации», но на восприятии основного посыла это не сказалось.

    Оставить комментарий

Переезд сайта на parpalak.com

28 сентября 2021 года, 10:18

На выходных перевел этот сайт с домена written.ru на parpalak.com. Я затеял этот переезд не только из-за красоты домена, которая не особо-то и нужна в современном интернете победивших соцсетей, а скорее из-за изменений в российском интернете.


Домен второго уровня я решил зарегистрировать в 2006 году. Рассматривал разные варианты. Домен parpalak.ru оказался занятым. По данным whois его зарегистрировал некий Орест Парпалак. Никакого сайта на этом домене не было, домен использовался для почты. Домен roma.ru тоже оказался занятым. Сейчас по нему открывается сообщение, что домен не продается. А вот раньше там была даже фотография, возможно того самого Ромы.

В итоге я зарегистрировал written.ru. Идею взял у Ромы Воронежского с его сайтами narisoval.ru и napisal.ru, просто перевел слово «написал» на английский.

В 2017 году я обнаружил, что домен parpalak.ru освободился, и зарегистрировал его. Через некоторое время зарегистрировал и parpalak.com, на случай если захочу сделать англоязычный сайт. Кстати, с последним доменом произошла интересная история. Я прописал у регистратора ns-серверы своего хостинга (ns1.linode.com), а в хостинге домен не добавил. Какой-то хитрый пользователь этого хостинга обнаружил это и добавил домен parpalak.com к себе. После чего у меня уже не получилось его добавить. К счастью, никакого контента на сайте по A-записям не оказалось. Я написал в поддержку и проблема была сразу же решена.


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

Я решил оставить российские домены у российских регистраторов и принять соответствующие риски. Остальные домены перенес к регистратору NameSilo. Ссылка реферальная: если решите воспользоваться рекомендацией, получу немного денег. Вроде бы у них самые дешевые домены: домен .com чуть дешевле 10 долларов. Кроме покупки можно переносить имеющиеся домены. Для переноса нужно получить у текущего регистратора код авторизации (примерно так же я переносил домены от Ру-центра к Бегету). Причем NameSilo позаботился, чтобы клиенты из-за переноса ничего не теряли: сам перенос стоит чуть дешевле годовой стоимости домена, а к текущему сроку регистрации добавляется год.

В итоге я перенес от российских регистраторов домены редактора математических текстов Upmath, головоломки Арнольда и s2cms.com. Для черновиков физика зарегистрировал новый домен susy.page вместо susy.written.ru. Киноблог и сайт программы с игрой «Жизнь» остались на своих доменах kinoblog.su и life.written.ru, мне их не жалко.

Последним шагом, как и написал в самом начале, сделал основным доменом parpalak.com вместо written.ru. Этим шагом решается и проблема почты. Дело в том, что почтовым сервисом для written.ru я настроил в 2010 году яндексовскую почту для домена, которая перенаправляет все входящие на гугловскую почту. С этим я ничего делать не буду. Просто сделаю основным почтовый ящик на другом домене.


После переезда обнаружилась только одна небольшая проблема — feedly заново показал последние посты. Скорее всего из-за изменения УРЛов, так как они использовались как идентификаторы записей:

<guid isPermaLink="true">https://parpalak.com/blog/2021/09/12/smart_vote</guid>

При этом feedly проигнорировал поле pubDate и показал записи как свежие. Можно было избежать этой проблемы, если специально для RSS запоминать адреса записей. Но я не думаю, что хоть кто-либо когда-либо озаботился и запрограммировал такую фичу.

    Оставить комментарий

Умное голосование как второй тур

12 сентября 2021 года, 21:18

Умное голосование — это как второй тур на выборах без второго тура. Давайте переквалифицируемся из вирусологов и востоковедов опять в политологи и порассуждаем на эту тему.

Голосование на выборах бывает устроено множеством разных способов: в один тур часто выбирают парламенты, в два тура — президентов. В Америке президента вообще избирают промежуточные выборщики.

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

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

Стратегия голосования по одномандатному списку не так очевидна. Место в Думе получает кандидат, набравший наибольшее число голосов. При этом второго тура нет: даже если единорос набрал 20%, а 80% размазались по остальным кандидатам, в Думу пройдет единорос. Задача умного голосования — исключить размазывание голосов по кучке кандидатов. Если бы голосование по одномандатным округам проходило в два тура, то в первом туре можно было бы голосовать за понравившегося кандидата, а во втором туре — за наименее противного. К сожалению, второго тура нет, поэтому приходится изобретать костыли вроде умного голосования.

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

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

    Оставить комментарий

Логотип Медузы и энергия

30 августа 2021 года, 16:20

Интервью с Григорием Кравченко, автором логотипа Медузы. Извините, не могу не процитировать:

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

Тут всё хорошо, но когда сужают пространство и ты напрягаешься, накапливается потенциальная энергия, а не кинетическая.

    Оставить комментарий
Смотрите также:  Айсберг, который переворачивается · Минус один в 28 степени · Гуманитарии о биноме Ньютона

← сюда туда →

Поделиться
Записи