к оглавлению

Архитектуры графических систем

ИНТЕРАКТИВНЫЕ СИСТЕМЫ МАШИННОЙ ГРАФИКИ

    0.1.1  Графические языки высокого уровня
    0.1.2  Синтаксические расширения алгоритмических языков
    0.1.3  Процедурные графические языки
    0.1.4  Языки диалога
    0.1.5  Выводы

Задача интерактивной системы машинной графики (рис. 0.1.1) при выполнении вывода заключается в преобразовании информации из исходного высокоуровневого представления предметной области в представление команд графических устройств вывода. При выполнении ввода, наоборот, требуется преобразование низкоуровневой информации от физических устройств ввода в высокоуровневую информацию на языке предметной области.


Обобщенная модель интерактивной системы

Рис. 0.1.1: Обобщенная модель интерактивной системы

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

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

Далее, в п. 1.1-1.3, будут рассмотрены различные варианты построения геометрических языков вывода, в п. 1.4 будут рассмотрены языки диалога.

0.1.1  Графические языки высокого уровня

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

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

Одним из первых проблемно-ориентированных языков, имеющих средства для описания геометрической информации, явился язык АРТ (AUTOMATED PROGRAMMING TOOLS) [57]. Этот язык послужил основой для разработки разнообразных систем автоматизации программирования для станков с ЧПУ.

В работе [23] предложен базовый проблемно-ориентированный язык описания графической информации ОГРА, предназначенный для описания графических конструкторских документов и операций их формирования в системах автоматизированного проектирования.

В работах [50,] описан комплекс САГРАФ, предназначенный для использования в учебной системе коллективного пользования МИФИ для решения задач машинной геометрии и графики. В комплексе имеются подсистемы геометрического синтеза, геометрического анализа и графического моделирования.

В качестве примеров систем с автономным языком высокого уровня могут также служить системы геометрического моделирования трехмерных тел - COMPAC [100,] и СИМАК-Д [35].

Система COMPAC (COMPUTER ORIENTED PART CODING) предназначена для формирования описания объемных тел из объемных элементов формы - (метод конструктивной геометрии). Кроме трех базовых объемных элементов (кубы, цилиндры, конусы), могут использоваться профилированные детали, получаемые перемещением замкнутого контура вдоль прямой или дуги, а также тела вращения, получаемые вращением замкнутого контура вокруг оси. Элементы задаются, позиционируются и оразмериваются языковыми конструкциями, напоминающими АРТ [57]. Составление детали из объемных элементов производится с помощью операций объединения, вычитания и отсечения.

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

* * *

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

· довольно значительные затраты на создание языка и транслятора с него, так, например, трудозатраты на систему COMPAC составили около 40 ч/лет [117];

· затраты на внедрение, на включение языка в работающую систему программирования и на обучение пользователей, которые не всегда охотно берутся за изучение еще одного языка, а предпочитают пользоваться процедурными расширениями известных им алгоритмических языков: ALGOL, FORTRAN, PL-1, PASCAL и т.д.;

· трудности с последующим расширением языка;

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

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

0.1.2  Синтаксические расширения алгоритмических языков

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

· модификация существующего транслятора;

· использование препроцессора, либо макропроцессора, обрабатывающего программу на расширенном языке и превращающего его в программу на исходном языке;

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

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

Одна из первых реализаций графического расширения FORTRANа система GRAF (GRAPHIC ADDITIONS TO FORTRAN) [84]. Расширение основывается на введении нового типа переменных DISPLAY, значениями которых являются последовательности графических команд устройства. Имеются встроенные и пользовательские DISPLAY-функции. Из DISPLAY-переменных и функций строятся выражения этого типа. Оператор DISPLAY-присваивания присваивает вычисленное значение переменной соответствующего типа. Предусмотрены средства стирания и вывода на оконечные устройства дисплейных переменных, чтения/записи дисплейного файла, опроса наличия сигналов внимания с графических устройств ввода.

В качестве более мощного (и позднего) графического расширения FORTRANа можно упомянуть систему GALA [99]. Также вводится новый тип данных - BILD. Значениями этого типа могут обладать переменные и константы. В качестве системных констант этого типа имеются элементарные изображения (в том числе пустое). Над данными этого типа определены операторы преобразований. Для построения сложных изображений используется, так называемый, оператор совмещения. Над изображением определены операторы манипулирования и опроса. Изображения могут проверяться в условных операторах. Имеются операторы вывода изображений с назначением преобразований и окна отсечения. Средства ввода обеспечивают ожидание и получение данных, разрешение и запрет прерываний. GALA-программа может структурироваться на поименованные сегменты с параметрами или без.

В качестве одной из отечественных разработок по графическому расширению FORTRANа можно назвать "AВТОКОД для работы с графическим дисплеем EC-7064" [28], при использовании которого обеспечивается пакетный режим работы, когда информация только выводится на дисплей. Операторы АВТОКОДа вставляются в текст на FORTRANе и помечаются в первой позиции буквой A. Предусмотрено 6 групп операторов: резервирования памяти и увязывания с массивами FORTRANа; описания точек и процедур; построения совокупностей точек, ломаных, текстов, вызовов процедур; ветвления; гнездования операторов; фрагментирования изображения на кадры и рисунки.

Наряду с FORTRANом в качестве языка для графического расширения использовался ALGOL. Так в [101] описана система DIGOS, которая состоит из геометрически ориентированного языка, его интерпретатора и трехуровневой структуры данных (PDS - параметрической кольцевой структуры, элементы которой формируются операторами геометрически-ориентированного языка; DDSR3 - структуры данных 3D представления, формируемой из PDS при активации вывода; DDSR2 - структуры данных 2D представления, формируемой из DDSR3 при выполнении преобразований, проецирования и отображения). В языке предусмотрены 2 группы геометрических операндов - простые геометрические элементы (точки, прямые, плоскости, последовательности точек, поверхности, тела) и составные геометрические элементы, образованные либо из элементов одного, либо разных типов. Над геометрическими операндами определены геометрические операции. Графические логические операции служат для проверки значения геометрического операнда и проверки, содержится ли геометрический операнд в некотором другом. Имеются графические операции ввода/вывода и увязывания физико-технических данных с геометрическими операндами.

В качестве примера графического расширения PL-1 можно привести GPL/1 [114], где PL-1 расширен на векторные, двух и трехмерные типы данных и векторные операции. Введены переменные типа IMAGE, которые могут принимать значения, определяемые комбинациями элементов данных изображения вектора, строки, функциями изображения и др. Значения переменных типа IMAGE состоит из двух частей - атрибутной и собственно изображения. Над изображениями определены операции присоединения, объединения, позиционирования, масштабирования, вращения. Введен тип данных GRAPHIC и совокупность атрибутов, описывающих данные этого типа.

Предусмотрено три разновидности элементов данных типа GRAPHIC: DESIGN, из которых строится изображение, все или некоторые элементы которого могут меняться (пример - вывод на дисплей); DISPLAY - аналогично DESIGN, но не может быть изменений (пример - вывод на графопостроитель); STORAGE - для запоминания и последующего воспроизведения изображений.

Оператор GET используется для извлечения изображения из элемента данных, оператор ERASE - для выборочного либо полного стирания. Предусмотрены также средства для ведения очереди ввода и манипулирования ею.

* * *

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

· вводятся данные графических типов;

· определяются операции над ними;

· разрабатываются средства для структуризации, сохранения, манипулирования и отображения изображений;

· устанавливаются правила ведения интерактивной работы.

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

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

· из-за использования в определенной мере экзотического языка безусловно нарушается переносимость прикладных программ;

· вводимые в язык графические конструкции не имеют сколько-нибудь серьезных преимуществ перед операторами вызова функций или подпрограмм;

· практически все графические операторы требуют интерпретации, так как они, как правило, программируются как вызовы некоторых библиотечных подпрограмм.

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

0.1.3  Процедурные графические языки

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


Рисунок 2

Рис. 0.1.2: Концептуальная модель интерактивной системы машинной графики с явным выделением графической компоненты

Назначение графической системы в такой модели состоит в преобразовании двух или трехмерной модели объекта, формируемой прикладной программой, в графические команды и данные, либо передаваемые на устройства, либо запоминаемые в той или иной графической структуре данных.

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

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

· обеспечением адаптируемости прикладных программ, т.е. легкости приспособления к новым функциональным требованиям;

· обеспечением мобильности прикладных программ, т.е. легкости их переноса в иное окружение.

Аппаратная независимость средств отображения обеспечивается их построением по иерархическому принципу в виде некоторого набора логических уровней. Одна из разновидностей иерархического принципа - принцип перевернутой пирамиды [61,]. При этом подходе на нижнем уровне располагается аппаратно-зависимый драйвер с минимально допустимым набором возможностей, например, позиционирование, построение отрезка, дуги окружности и т.д. При необходимости использования другого устройства достаточно заменить драйвер. Системы, построенные по принципу перевернутой пирамиды, например, GINO-3D [124], ГРАФОР [3], как правило, ориентированы на работу с несложными устройствами. Использование устройств с более богатыми возможностями влечет за собой либо их неэффективное использование, либо переделку графической системы, т.е. в сущности тормозится развитие средств вывода. В этом заключается основной недостаток таких систем.

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

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

На втором - среднем уровне находится аппаратно-независимый графпакет общего назначения.

На третьем - верхнем уровне находятся проблемно-ориентированные графпакеты.

По иерархическому принципу организовано большинство графических систем, наряду с упомянутыми GIND-3D и ГРАФОРом можно назвать, например, СМОГ [43,,], АТОМ [24,,,,,,,], ДИГРАФ [7,,,], ГРАФСМ [40], АНЕГРАФ [19,], АТЛАНТ [10], УНИГРАФ [6,], ГРАС [37,,] и целый ряд других.

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

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

* * *

Основные преимущества подхода с использованием графпакетов состоят в следующем:

  1. Легкая обучаемость, так как пользователь пакета не выходит за рамки удобного либо привычного ему языка.
  2. Легкая расширяемость за счет написания самим пользователем подпрограмм, необходимых для его приложения. Задача системных программистов состоит в том, чтобы дать "базисный" пакет, пригодный для многих пользователей и многих приложений.
  3. Легкая переносимость прикладной программы на другие ЭВМ.
  4. Легкая адаптируемость к новым требованиям либо аппаратным возможностям.
  5. Легкое обеспечение многоязыковости либо за счет наличия функционально идентичного пакета для другого языка, либо за счет использования одной и той же библиотеки в рамках многоязыковой системы программирования, либо за счет единого исполнительного модуля, доступного с помощью пакетов процедур связи из различных систем программирования.

Очевидными недостатками такого подхода являются:

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

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

0.1.4  Языки диалога

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

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

Входные языки существенно отличаются от алгоритмических языков как внешне, так и по применению. Фразами такого языка являются изображения и действия. Применение такого языка отличается тем, что входные команды интерпретируются и исполняются по мере их поступления от пользователя, а не транслируются в объектный код и лишь затем исполняются. Наибольшее распространение получили два типа диалога - диалог инициируемый ЭВМ и диалог инициируемый пользователем [52]. Диалог в этих случаях ведется в форме "запрос-ответ". При диалоге 1-го типа пользователь либо заполняет форму, выдаваемую на экран, либо выбирает одну из альтернативных возможностей (команд). При диалоге 2-го типа пользователь подает те или иные допустимые в данный момент времени директивы. Альтернативные языки более просты в обучении и использовании, поскольку не требуют знаний форматов и символики различных директив, действия более просты, так как нет необходимости полностью вводить фразу или директиву и не надо помещать выбранный элемент данных в определенную позицию формата.

Различные аспекты проблемы взаимодействия человек-ЭВМ освещаются во многих работах [11,,,,,,]. Так, например, в [54] сформулированы требования, которым должен удовлетворять диалоговый входной язык:
· эффективность, полнота, естественность;
· расширяемость;
· обеспечение обратной связи;
· устойчивость к ошибкам;
· адаптируемость к пользователю.

В сущности входной язык состоит из двух компонент [54]:

· язык формулирования пользователем команд и входных данных для ЭВМ (реплики человека);

· язык ответов пользователю (реплики ЭВМ).

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

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

В настоящее время общепринятым считается выделение шести классов виртуальных устройств ввода [85,,,]:
· ЛОКАТОР для ввода позиции;
· ШТРИХ для ввода последовательности позиций;
· ДАТЧИК для ввода скалярного значения (числа);
· ВЫБОР для выбора одной из альтернативных возможностей;
· УКАЗКА для указания объекта на изображении;
· КЛАВИАТУРА для ввода строки символов.

В стандарте CGI [66], определяющем интерфейс между аппаратно-независимой и аппаратно-зависимой частями графической системы, дополнительно к перечисленным предлагаются еще два класса виртуальных устройств:
· РАСТР (AREA) для ввода растровых картин;
· ОБЩЕЕ (GENERAL) для ввода иных данных, например, ввод голоса.

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

0.1.5  Выводы

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

  1. Построение графической системы на базе специального графического языка целесообразно только при ее массовом специализированном, немодифицируемом применении и при отсутствии необходимости объединения в рамках одной прикладной программы графических и вычислительных модулей.
  2. Подход, основанный на геометрическом и графическом синтаксическом расширении того или иного алгоритмического языка, не нашел сколь-нибудь серьезного применения как из-за больших трудозатрат его реализации, так и из-за нарушения переносимости прикладных программ и отсутствия преимуществ в использовании графических конструкций по сравнению с вызовами подпрограмм.
  3. Основное и подавляющее распространение получил подход, основанный на процедурных (семантических) графических расширениях алгоритмических языков.
к оглавлению

Знаете ли Вы, что в 1965 году два американца Пензиас (эмигрант из Германии) и Вильсон заявили, что они открыли излучение космоса. Через несколько лет им дали Нобелевскую премию, как-будто никто не знал работ Э. Регенера, измерившего температуру космического пространства с помощью запуска болометра в стратосферу в 1933 г.? Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution