Катакомбаархив текстов

Ромашка, это не только "любит-не-любит", это про системную диалектику

Методики · 04.05.2026 · 26140 знаков

Методология и философия Экономика и бизнесНаука и образованиеИнформационные технологии

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

И дальше я расскажу об очередном таком «чуде».

Иногда ты ходишь вокруг какой-то задачи - ходишь несколько лет, как кот вокруг сметаны. Причем, она тебя постоянно держит - ты постоянно в фоне и не только думаешь, как же к ней подобраться - с какой стороны? А потом в какой-то момент, решая совершенно другую задачу, ты вдруг понимаешь, что ту задачу, над которой ты столько лет бился, ты уже, оказывается(!), решил. Случайно! Просто это оказалось одним из вариантов применения инструмента уже решённой тобой другой задачи.

Ровно такое очередной раз произошло со мной буквально на днях.

Много лет я крутил в голове задачу, связанную с тем, каким образом можно было бы технологизировать работу философов(!) в части, касающейся диалектического анализа различных феноменов. То есть речь идет о ситуации, когда мы начинаем анализировать какой-то феномен или разбираться с предметной областью, и начинам это с анализа противоречий. Я упомянул философов, но с этим философы, может быть, не так уж и часто сталкиваются (да и диалектика, как инструмент сегодня является в философской среде фактическим маргинальным направлением … он слишком для них сложный!), но зато этим пользуемся мы, разработчики, которые работают, скажем... ну я бы не сказал, что мы - постановщики задачи от предметной области, потому что мы не являемся специалистами в тех предметных областях, с которыми нам приходится работать. Во всяком случае, изначально не являемся ими. Это уже потом мы становимся специалистами и, зачастую, очень быстро обгоняем специалистов уже общепризнанных. А изначально мы ничего не знаем и не понимаем. Мы, своего рода, - переводчики. Переводчики, одной из главных компетенций которых является умение быстро выучить новый язык. Причем, - любой.

И тут важно понимать следующее: когда нам специалисты пытаются изложить суть своей предметной области, в 99 процентах случаев это изложение не может быть основанием для создания тех или иных эффективных(!) инструментов. Почему? А по одной простой причине - те методики, то понимание, которое у них имеется, базируется на "архаичном" понимании того, как задачи решаются «вручную» - в докомпьютерную эру. Когда же мы берём за основу решения цифровые технологии, все каноны предметной области могут быть перевёрнуты с ног на голову.

Примером такого переворота является сопромат. Если кто-то помнит - это про эпюры, которые мы считали ещё когда учились в советских ВУЗах. Но и уже тогда - кто-то скрупулезно считал эпюры, а кто-то уже их не считал! Кому-то повезло больше - у него был доступ к компьютерам, и он считал сопромат через конечные элементы (не буду указывать пальцем на себя). Тогда эта тема только-только нарождалась - была очень новая и тогда она ещё достаточно сильно дискутировалась, но, слава богу, она уже была. А потом это стало повсеместно базовым решением, и эпюры мы сегодня уже не считаем. И я не думаю, что вы сейчас найдёте какого-нибудь инженера, который считает эти эпюры, зато все пользуются программами, которые на порядок лучше просчитывают прочностные характеристики, работая на основании метода конечных элементов. Замечу, конечные элементы вручную обсчитать невозможно … теоретически, конечно, можно, но с практической точки зрения это бессмысленно. Лучше уж тогда эпюрами пользоваться. А на компьютере — только конечные элементы. И таких примеров множество - геология, совершенствование технологических комплексов, производственная экономика экономика, макроэкономика и т.д. и т.п.

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

А не специалист в области образования и не понимаю, как это делать системно, но могу рассказать о своих трюках, которыми пользуюсь уже без малого 30 лет.

Обычно, когда я занимаюсь новой предметной областью, с чего я начинаю? Я начинаю со студенческих рефератов! Во всяком случае, так было ещё совсем недавно - года три-пять назад. Я начинал в интернете искать и читать эти рефераты, до тех пор, пока не начинал понимать, что всё ! - больше там нового нет, а все последующие рефераты - это просто копи-паст уже прочитанного мной. Потом(!) начинал читать какие-то учебники, если удавалось найти хорошие. Потом начинал читать старые(!) кандидатские диссертации. Читал бегло - в основном для того, чтобы понять проблематику предметной области, то есть то, с чем они бьются, где основные проблемы и какие есть подходы к их разрешению. Ну и потом, конечно, если удавалось добыть докторские диссертации – читал их, поскольку в старых(!) докторских диссертациях были альтернативные методологии и альтернативные взгляды на предметную область вообще. Однако последнее, к сожалению, удавалось достаточно редко.

Но таков был путь.

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

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

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

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

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

В общем, руки боялись, но с другой стороны - понимание постепенно нарастало. Причём росло понимание, как сделать инструмент, и одновременно с этим росло сомнение в том, что этот инструмент действительно будет рабочим. Почему? Я уже сказал: потому что выявлять противоречия - действительно противоречия, а не какие-то несовместимые состояния, — это достаточно сложно.

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

На эти праздники я выбрал для себя несколько интересных задач, в которых давно хотел покопаться. И одна из этих задач — то, что мы в нашем кругу называем «пьеса».

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

Как эта игра, по моему замыслу, должна выглядеть...

Есть какая-то совокупность персонажей в каком-то мире. Они как-то друг с другом взаимодействуют, общаются и т.п.. У каждого персонажа есть характеристики и есть контекст, в котором он взаимодействует. В ходе взаимодействия персонажи меняют какие-то свои характеристики. А какие характеристики? Раздражённость, любвеобильность, настороженность, причем, даже их операционные цели могут немножко поплыть. Может все что угодно измениться — здесь фантазия гейм-дизайнера не ограничена. При этом изменение характеристик персонажей зависит от того, в каких состояниях в момент взаимодействия находятся персонажи и в каком состоянии находится тот контекст, в котором они общаются. Например, общаясь по одному и тому же поводу в метро или в ресторане, мы получаем совершенно разные ходы и исходы этого взаимодействия. Контекст накладывает свой отпечаток, причём в ходе взаимодействия и он сам может меняться. С ним происходят интересные перетрубации, но о них будем говорить когда-нибудь потом, когда будем рассматривать содержательную часть технологии в деталях.

И возник вопрос - каким образом достаточно компактно, технологично и максимально детально описать сам процесс изменения состояния персонажей?

И тут на помощь пришла одна идея, которая родилась у меня уже давно-давно. Когда-то я задался вопросом: что взять за основу методологического подхода к построению моделей сложных систем? Ведь мы, зачастую, не знаем тех принципов, по которым живёт система, исследуемый объект. А если и что-то знаем, то не имеем добротного формализованного описания этих принципов - формул нету! Кто-то из кибернетиков тут может задаться вопросом – как так? Если знаем – значит знание выражено в формулах. А если не выражено, значит – не знаем! И ответ на такого рода удивлённое возмущение прост – «А вот …!!!».

Я много занимаюсь экономикой предприятий, отраслевой экономикой, и зачастую приходится делать шаги и в сферу макроэкономики, и в сферу наноэкономики (это о том, как принимает решения индивидуум -ситуативный экономический субъект). А там формул нет. В макроэкономике было когда-то несколько небольших формул, которые в какой-то момент неплохо описывали происходящее, но обстоятельства, в которых реализуются экономические отношения стали меняться, и эти формулы просто перестали работать. А других нет! И тем не менее необходимость прогнозирования остаётся. Что тогда делать?

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

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

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

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

И вот, опираясь на идею сбалансированных состояний и на идею моделирования движения тела в системе гравитационных центров, возникает идея гравитационной модели — идея описания поведения сложных систем через выявление их опорных состояний, тех состояний, к которым они локально стремятся из каких-то окрестностей (иногда их называют бассейнами). И описание этого движения берёт за основу гравитационную модель: точка, являющаяся модельным отображением следуемого объекта, движется, одновременно притягиваясь всеми центрами притяжения, но поскольку там квадратичный закон притяжения - мы получаем необходимые траектории. Легко и просто !

Возвращаясь к самой задаче описания поведения агента…

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

Но если оставить лишь так, как я описал, то это будет модель исключительно «личных устремлений» объекта. А давай-ка тогда ещё сверху на него наложим какие-то возмущающие воздействия! Вот его тянет в точку А, а ты его каким-то внешним воздействием (пообщался он с кем-то, узнал что-то) насильно отбрасываешь в какую-то другую – просчитанную- точку, и оттуда он опять куда-то покатится. Получается достаточно красивая модель.

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

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

И так - если у меня есть инструмент, который позволяет исследовать некоторые объекты... как он написан, пока не расскажу — тоже интересное решение получается, но если всё сразу рассказывать - я ни в какой более менее компактный текст не вмещусь! … Так вот, есть объект с какой-то внутренней функцией реализации его изменения состояния – со своей локально-эффективной внутренней логикой. Необходимо найти те опорные состояния, к которым объект всё время стремится прийти. Решение очевидно - давай проведём сто-пятьсот миллионов модельных экспериментов, соберём статистику и покажем: вот, -пожалуйста! -, вот вам локально устойчивые экстремумы. Похоже на хорошее решение?

Похоже!

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

Хорошо. Давай смотреть дальше…

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

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

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

И вот что я задумал …

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

Известный принцип, который является едва ли не главным принципом проектировщиков в айти - "разделяй и властвуй!" тут реализуется почти с кристальной дидактической ясностью.

В общем, разобрались мы, как это делать.

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

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

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

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

Оказывается, я её уже сделал! Оказывается, это просто особый вариант использования nxTrender, который сейчас уже готов к опытно-промышленной эксплуатации. И как стало понятно - nxTrender уже сейчас решает задачу выявления сбалансированных (опорных) состояний, состояний системы/объекта, в которых нет суперпозиций. То есть задачу выявления состояний, к которым, согласно вселенской логике, всегда стремится любой объект.

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

Накрыло вот этой нашей... У разведчиков есть понятие «оперативная удача», ну вот что-то такое есть и у нас - научно-исследовательская удача.

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

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

Вот такая история. Вот такие веселухи бывают в нашей сфере - такие бывают "ромашки", что "любит-не-любит" просто меркнет в сравнении с ними.

← ко всем текстам