Архивы: по дате | по разделам | по авторам

Агенты и их хозяева: The Incomplete Robot

Архив
автор : Максим Отставнов   16.02.1999

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

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


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

   Интуитивность той или иной интерфейсной метафоры не абсолютна. Например, объекты типа "фолдер" ("папка") на "рабочем столе" Windows могут быть многократно вложены друг в друга, что с картонными фолдерами на деревянном столе делать затруднительно. Она не универсальна. Например, "рабочий стол" хорошо знаком и понятен "бюрократу", и гораздо хуже - художнику или домашнему пользователю, использующему компьютер для развлечения; для таких пользователей метафору приходится сдвигать в сторону "мастерской" (для художника) или интерфейсов бытовой техники (для домашнего пользователя), либо же мириться с меньшей ее интуитивностью.

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

 
   Перспективные области применения программных агентов (по Бренде Лорел из компании Interval Research (см. Brenda Laurel, Interface Agents: Metaphors with Character // Software Agents, Ed. By Jeffery M.Bradshaw, Menlo Park, CA - Cambridge, MA - London: 1997))
   Информация: навигация и просмотр, получение информации из хранилищ, сортировка и классификация, фильтрация.
   Работа: напоминания, программирование, диспетчеризация (scheduling), поддержка советами.
   Обучение: тренинг, ориентировка в предмете, предоставление помощи.
   Развлечения: противник в играх, партнер в играх, разыгрывание представлений.


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

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

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

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

   Рождение агента
   Прорастающие элементы ("уши"?) агентской метафоры уже "торчат" из современной визуально объектной среды. Например, если обратиться к самой популярной платформе, одна из системных программ Windows называется System Agent - "Агент сжатия дисков", - и совершенно правильно, так как она реализует одну из характеристик агентов - реактивность, способность замечать определенные события и реагировать на них. Два года назад в очередной версии Microsoft Office нам была представлена справочная система "от лица" персонализированных анимированных агентов - "скрепочку с глазками" и "киску" видели, наверное, все.

 
   Проект persona
   Участники группы из исследовательского подразделения Microsoft, работающей с 1992 года над проектом Persona, считают персонализированные агентские приложения ("жизненные компьютерные персонажи", lifelike computer characters) логичным продолжением концепции графического пользовательского интерфейса, которому (продолжению) предшествовали такие шаги, как реализация WYSIWYG-редактирования, разработка многооконных интерфейсов и внедрение метафоры прямого манипулирования визуализированными (в виде значков) объектами.
   Проект Persona был ориентирован на создание прототипа "агента-помощника", с интерфейсом "разговорного" (conversational) типа. В Persona выведен попугай по имени Пиди (Peedee), приданный коллекции музыкальных CD-дисков, способный отвечать на вопросы о ней и выбирать песни для прослушивания.
   Пиди обладает весьма персонализированной мимикой и голосом; однако проект интересен не этим, а относительно простыми формализмами, разработанными его авторами для решения основных внутренних функций "агента": распознания устной речи, поддержки диалога и видео/аудиовывода.
   Технического отчета на сайте Microsoft Research я не нашел, но там есть статья 1987 года с описанием подхода группы к решению этой задачи, которую я и рекомендую заинтересовавшимся.
   Я также не сумел выяснить, являются ли "кошечка" и "скрепочка с глазками" из хелп-систем новых продуктов Microsoft родственниками Пиди и насколько результаты проекта задействованы при разработке модуля анализа запросов на "естественном языке" тех же хелп-систем.
   См. http://research.microsoft.com/ui/persona/home.htm


   Агентские свойства все чаще придаются специфически коммуникационному программному обеспечению.

   Хороший (более сложный и интересный) пример - приложения instant communication, типа ICQ, которые можно рассматривать как "агентов эфира", способных следить за событиями, в том числе удаленными, и оповещать о них своего хозяина, а также оповещать о локальных событиях и состояниях (агентов) других пользователей. Правильно настроенная "Аська", по сути, выполняет роль агента-"дворецкого", который при выраженном желании (агента) удаленного пользователя пообщаться с вами в то время, как вы заняты, может идентифицировать его, свериться со списком приоритетов, и, в зависимости от позиции в этом списке, либо сообщить вам об этом событии, либо самостоятельно пообщаться с запрашивающим - попросить его обратиться позднее.

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

   Более "умный" потомок "Аськи" мог бы сам ненавязчиво понаблюдать за мной - своим хозяином - и сделать определенные выводы. Например, заметить, что, если я открыл документ из папки Compunomika, то пока я его не закрою, я буду отвергать все попытки Элис или Боба початиться со мной в "прямом эфире", занести их в категорию "приятели" и сообщать мне об их обращениях, только если я не занят работой. Или - наоборот, обратить внимание, что, чем бы я ни был занят, я всегда отвечаю на вызов Кэрол, и занести ее в категорию "близкие друзья", обеспечив беспрепятственный доступ в любое время.

   Здесь начинаются уже типичные проблемы, связанные с общением. Хороший дворецкий всегда знает о своем хозяине больше, чем сам хозяин. Но хороший дворецкий знает и - свое место. Упомянутая "Супераська" могла бы, понаблюдав за мной неделю, вежливо поинтересоваться: "Правильно ли я понимаю, что, когда вы работаете с документами из папок Cryptopolicy, Compunomika или Frontpage, для Элис и Боба Вас нет дома, для разговора с Кэрол Вы всегда готовы прерваться, а Дэвида нужно вежливо попросить оставить Вам сообщение?"

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

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

       Интересную идею "консультативного" агентского приложения под названием "цифровая свояченица" (digital sister-in-law) предложил известный специалист из Лаборатории средств коммуникации МТИ Николас Негропонте (Nicholas Negroponte): "Когда я выбираю, на какой фильм мне сходить, я обращаюсь за советом не к рецензиям, а к свояченице". У каждого из нас есть кто-то, кто разбирается в фильмах и разбирается в нас. Что нам стоило бы создать, так это "цифровую свояченицу"" (курсив мой; Nicholas Negroponte, Agents: From Direct Manipulation to Delegation // Software Agents, Ed. By Jeffery M.Bradshaw, Menlo Park, CA - Cambridge, MA - London: 1997).

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

       Принципал-агентские и агент-агентские отношения
       Итак: способность появляться в ответ на события против постоянного присутствия; способность выполнения действий в "рабочем пространстве" против статичного местоположения; мобильность против обладания свойствами - вот что мы можем сказать об агентах по контрасту с объектами.

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

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

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

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

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

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

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

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

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

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

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

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

     
       Гиперэкономика
       Расширением границ экономики и обобщением экономических теорий с тем, чтобы объять ею отношения "безлюдных" агентов, занимается, в частности, группа HEDG (Hyper-Economy Development Group - Группа разработки гиперэкономики), собранная Сашей Численко (Sasha Chislenko) из Массачусетского технологического института.
       Характеризующим экономические системы (в отличие от экологических, организмических, технических и пр. сложных систем) Численко считает наличие знаковых (signalling) инструментов, количественно выражающих связи между различными ресурсами, и - за счет эффективного обмена этими инструментами - достижение эффективности в обмене собственно ресурсами.
       В ориентирующей группу статье "Гиперэкономика" (Hypereconomy, 1997-98 гг.) он особо подчеркивает, что современные технологии позволяют вовлечь в экономику (в процессы опосредованного количественными знаками обмена), кроме "общих" ценовых сигналов, еще и подробную информацию о поведении каждого участника системы.
       Появление такой возможности в экономике Численко сравнивает с появлением второй сигнальной системы у человека, а подобную "расширенную" экономику называет "гипер-" или "суперэкономикой". По Численко, системы, обладающие представлением ситуационного знания, могут быть реализованы (implemented) как в полностью автоматизированной среде, так и в среде, включающей агентов-людей.
       Сейчас HEDG движется от чистых исследований к разработкам - построению первых прототипов гиперэкономических систем. Очевидными применениями первых гиперэкономических приложений участники группы считают:
  • рекомендательные системы для потребительских товаров (Саша Численко в свое время работал в проекте Firefly, занимаясь разработкой систем кооперативной оценки музыкальных произведений);
  • целевое распространение рекламы;
  • выбор алгоритмических решений.
       Статью Численко и ее обсуждение, а также другие ресурсы HEDG см. на www.lucifer.com/~sasha/HEDG/HEDG.html.


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

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

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

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

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

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

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

       Понятно, что в реальных ситуациях (с недоверием или неполным доверием сторон друг к другу) код агента должен выполняться с соответствующими предосторожностями.

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

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

       Здесь захватывает дух. Здесь можно фантазировать. Фантазировать вполне умеренно, "гиперэкономически" (представьте две платформы, отрабатывающие протокол торгов по поводу того, что будет выгоднее для выполнения определенной задачи: заслать агента первой на вторую или наоборот). Или - фантазировать буйно и "в полный рост" - см. зарисовку Яковлева. И вспомнить, что, в конце концов, одна из первых серьезных разработок в области мобильных агентов (язык Telescript) была выполнена в компании с названием General Magic, Inc.

       P. S. От метафоры - к инструментам разработки
       Кстати, о языках. Подобно тому, как интерфейс в объектной парадигме можно реализовать средствами вполне сентенционального программирования ("плоским кодом", как любят ругаться объектно-ориентированные субъекты), и многие объектно-визуальные интерфейсы, частично или полностью, так и реализованы, все упомянутые в статье характеристики агентских приложений (как по отдельности, так и в совокупности) могут быть реализованы неспецифическими для агентской парадигмы средствами: в объектной парадигме, или же даже в чисто сентенциональной.

       Более того, упомянутый выше Telescript - по сути своей язык объектно-ориентированного программирования, подобный C++, с классами и механизмом наследования. Специфика агентской ориентации реализована динамизмом кода и данных как свойством, дополняющим традиционные для языков объектно-ориентированного программирования свойства.

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

       Десять лет назад Йоув Шохэм (Yoav Shoham) из Стэнфордского университета ввел термин "агентно-ориентированное программирование" (agent-oriented programming). Шохэм достаточно радикально приписал агентам формальные "ментальные состояния" и начал обсуждать достаточно необычные "ограничения на методы" ("последовательность", "честность"), "типы сообщений" ("информирование", "требование", "предложение", "обещание"). Работы Шохэма имели, по всей видимости, большое эвристическое значение для исследовательского сообщества, и с основанным на его подходе языком AGENT-0 долго играли академики, но прямого развития не нашли. Присмотревшись пристальнее к предложенной им модели, можно заметить, что "агентно-ориентированный подход" в его понимании является не альтернативой, расширением или дополнением объектно-ориентированного подхода, а, скорее, его ограничением. Шохэм, в сущности, показал, что "агент" может быть описан как "объект" особого рода.

       Прорыв был осуществлен несколькими годами позже, когда абстрактные и формальные языки типа AGENT-0 стали "скрещивать" с языками описания протоколов коммуникации, в частности, с KQML (Knowledge Query And Manipulation Language - язык запросов и манипуляций знаниями), разработанным в рамках исследований по искусственному интеллекту (модификация AGENT-0, использующая KQML в качестве основы для протокола общения агентов, называется AGENT-K).

       Наряду с KQML, потенциальным разработчикам агентских систем стоит ознакомиться с KAoS (Knowledgeable Agent-oriented System - знающая агентно-ориентированная система) - системой, которая начала создаваться в 1992 году совместными усилиями Boeing и Университета Сиэтла и родилась как приложение концепции агентов к системам быстрого поиска и квалифицированного доступа к технической документации. С самого начала KAoS проектировалась как "промышленное" приложение и с самого начала предусматривала определенный "менеджмент доверия" между агентами.

       Манипуляция знаниями и соответствующие языки - это "отдельная сказка", логически продолжающая тему агентских архитектур, но в нее, увы, не умещающаяся ("Терра" ее один раз уже проскочила - в теме "Физическая личность" (#40 [268] от 13.10.98), но "сказка" не уместилась и в ней). Смысл упоминания формальных систем типа KQML, AGENT-K, KAoS - в том, что они принесли новое понимание "агентов" разработчиками: понимание их как "узлов" коммуникации, разворачивающейся в рамках формально определенных протоколов. Законченное определение протокола является в то же время полной функциональной дефиницией "агента", способного к коммуникации в его рамках.

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



  • © ООО "Компьютерра-Онлайн", 1997-2024
    При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.