Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Make vs. data processing

4 views
Skip to first unread message

Ivan Shmakov

unread,
Jun 23, 2010, 1:08:38 PM6/23/10
to
Есть такой общеизвестный и популярный инструмент, как Make [1].
Хотя изначально оный предназначался для сборки программ (и в
этом преуспел), кое-кто, включая меня и моих коллег, имеет опыт
применения его в обработке результатов разнообразных физических
экспериментов (включая данные дистанционного зондирования Земли
и моделирование методами Монте-Карло.)

При этом, однако, возникают нижеследующие проблемы. Интересует,
только ли у меня? Пути решения? литература? (телеконференции?
рассылки? форумы? ключевые слова для Google?...)

∙ Зависимости формулируются на языке имен файлов, а не на языке
свойств (список пар имя-значение, RDF, etc.)

∙ Порядок обработки не считается важным, пока он удовлетворяет
указанным зависимостям.

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

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

2006-08-09-tile-22-3.surface-reflectance-by-2006-08-08-brdf.7.okay-qa

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

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

(К слову, поздравляю с защитами тех, кто причастен.)

Hаконец, третья проблема особенно актуальна, если
вспомогательные данные требуется получать из удаленных архивов
через Internet. Hа конкретном зеркале могли проводить
профилактику, или же файл нужный пока еще не появился, или
поставщик услуг подвел... Сколь полезны здесь retry и delay!
Hу, или наоборот.

В общем, возникли некоторые идеи по решению этих проблем (см., в
частности, [2].) Текущее их состояние -- около 1024 строк кода
на Prolog (ядро системы.) Если окажется, что в этом есть некая
новизна, я с радостью подготовлю статью, доклад на конференцию,
свободный программный пакет, да и, с должной скромностью, внесу
соответствующую строку в свои <<положения, выносимые
на защиту.>>

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

(Отдельная благодарность тем, у кого хватило терпения добраться
до сего момента.)

[1] http://en.wikipedia.org/wiki/Make_(software)
[2] news:comp.lang.prolog

--
FSF associate member #7257

Aleksey Cheusov

unread,
Jun 25, 2010, 5:13:31 AM6/25/10
to
IS> Есть такой общеизвестный и популярный инструмент, как Make [1].
IS> Хотя изначально оный предназначался для сборки программ (и в
IS> этом преуспел), кое-кто, включая меня и моих коллег, имеет опыт
IS> применения его в обработке результатов разнообразных физических
IS> экспериментов (включая данные дистанционного зондирования Земли
IS> и моделирование методами Монте-Карло.)

JFYI: http://sourceforge.net/projects/paexec

Это не мейк, и не его аналог. Это утилита, которой можно
скормить дерево задач и "вычислитель" и она их выполнит в нужном
порядке (так же как make, в порядке не противоречащем зависимостям).

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

Из этой утилиты можно сделать distributed fault tolerant make
добавив к нему текстовый препроцессор, например m4 или cpp.
Естественно не обязательно задачи оформлять как файлы.
Задача -- это просто строка текста, интерпретировать ее можно,
как угодно.

--
Best regards, Aleksey Cheusov.

Ivan Shmakov

unread,
Jun 25, 2010, 8:14:31 AM6/25/10
to
>>>>> "AC" == Aleksey Cheusov <che...@scnsoft.com> writes:

IS> Есть такой общеизвестный и популярный инструмент, как Make [1].

IS> Хотя изначально оный предназначался для сборки программ (и в этом
IS> преуспел), кое-кто, включая меня и моих коллег, имеет опыт


IS> применения его в обработке результатов разнообразных физических

IS> экспериментов (включая данные дистанционного зондирования Земли и
IS> моделирование методами Монте-Карло.)

AC> JFYI: http://sourceforge.net/projects/paexec

AC> Это не мейк, и не его аналог. Это утилита, которой можно скормить
AC> дерево задач и "вычислитель" и она их выполнит в нужном порядке
AC> (так же как make, в порядке не противоречащем зависимостям).

[...]

Спасибо, посмотрю, как будет свободное время.

(Hа самом деле, здесь принципиальными могут оказаться именно
метаданные и управление порядком обработки.)

Если и не мне, подобное ПО может оказаться полезным местной
<<группе разработки нанокластера>> [1].

[1] http://lhc.am-1<REMOVE>.org/lhc/activity/nanocluster/

(Занятно. SURBL.)

... В общем, возник еще один вопрос. Есть надежда, что
система, над которой в данный момент работаю, в каком-то
варианте заработает в течение недели.

Поскольку, как можно понять из <<списка публикаций>> [2] (что,
пожалуй, особенно важно, -- [3]), среди присутствующих нашелся
эксперт в данной области, нет ли желания <<окинуть пристальным
взором>> сию систему (несколько позже будет доступна и
документация) и, возможно, указать на достоинства и недостатки?

(Мне потребуется открытый SSH-ключ -- или почтой, или http:.)

[2] http://www.mova.org/~cheusov/
[3] http://sourceforge.net/projects/mk-configure

Evgenii Rudnyi

unread,
Jun 25, 2010, 3:45:58 PM6/25/10
to
on 23.06.2010 19:08 Ivan Shmakov said the following:

> Есть такой общеизвестный и популярный инструмент, как Make [1]. Хотя
> изначально оный предназначался для сборки программ (и в этом
> преуспел), кое-кто, включая меня и моих коллег, имеет опыт применения
> его в обработке результатов разнообразных физических экспериментов
> (включая данные дистанционного зондирования Земли и моделирование
> методами Монте-Карло.)

...

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

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

--
Евгений

Ivan Shmakov

unread,
Jun 25, 2010, 11:47:58 PM6/25/10
to

> ...

Hа языке Make, искомую цель можно описать примерно так:

xxx:
$(WGET) http://example.com/xxx

Честно говоря, не вполне понимаю, где здесь применить <<->>?

Смысл в том, что по отказу при обработки цели xxx, инструмент
должен прекратить рассмотрение цепи зависимостей с этой цели, и
выбрать некую другую цепь и цель. IOW, скорее, $ make -k.

Однако, $ make -k не реализует (IIUC) <<другой путь>> и
<<повторную обработку>>. И я не нахожу возможности реализовать
первое без привлечения некоего сложного препроцессора, или
чего-либо подобного. (Второе может быть реализовано повторным
запуском Make, но и в этом случае возникают особенности.)

Ivan Shmakov

unread,
Jun 26, 2010, 12:38:47 AM6/26/10
to
Пример дерева зависимостей, которое формируется текущим
вариантом кода. Обозначения: <<|-- >> -- зависимости типа
<<требуются все>>, <<?== >> -- свойства (метаданные), <<|?- >>
-- зависимости <<достаточно одного>>. Зависимости последнего
типа чередуются с цепочками зависимостей первого.

Фрагмент кода, описывающего процессы, приведен ниже.

x-id:11073226492671786326
|== uuid:1ca04bde...be#requires = x-id:9441230189094804168
|== mxd = MOD35
|== instrumentshortname = MODIS
|== platformshortname = Terra
|== timespanstart = date(2009,2,19,5,30,0,0,UTC,-)
|== timespanstop = date(2009,2,19,5,35,0,0,UTC,-)
|-- x-id:9441230189094804168
| |== uuid:1ca04bde...be#process = uuid:92f5ab58-7928-11df-8626-00195b7187be
| |== uuid:1ca04bde...be#requires = x-id:11068974318480883893
| |== uuid:1ca04bde...be#requires = x-id:1290100686693993781
| |== uuid:1ca04bde...be#requires = x-id:14345207989846912023
| |== uuid:1ca04bde...be#requires = x-id:8728100975137579083
| |-- x-id:11068974318480883893
| | |== mxd = MOD021KM
| | |== instrumentshortname = MODIS
| | |== platformshortname = Terra
| | |== timespanstart = date(2009,2,19,5,30,0,0,UTC,-)
| | |== timespanstop = date(2009,2,19,5,35,0,0,UTC,-)
| | |?- file:/.../ladsweb.nascom.nasa.gov/allData/5/MOD021KM/2009/050/MOD021KM.A2009050.0530.005.2009304101720.hdf
| | | |== timespanstart = date(2009,2,19,5,30,0,0,UTC,-)
| | | |== timespanstop = date(2009,2,19,5,35,0,0,UTC,-)
| | | |== platformshortname = Terra
| | | |== instrumentshortname = MODIS
| | | |== mxd = MOD021KM
| | |?- file:/.../ladsweb.nascom.nasa.gov/allData/5/MOD021KM/2009/050/MOD021KM.A2009050.0530.005.2009335072320.hdf
| | | |== timespanstart = date(2009,2,19,5,30,0,0,UTC,-)
| | | |== timespanstop = date(2009,2,19,5,35,0,0,UTC,-)
| | | |== platformshortname = Terra
| | | |== instrumentshortname = MODIS
| | | |== mxd = MOD021KM
| |-- x-id:1290100686693993781
| | |== mxd = MOD02QKM
| | |== instrumentshortname = MODIS
| | |== platformshortname = Terra
| | |== timespanstart = date(2009,2,19,5,30,0,0,UTC,-)
| | |== timespanstop = date(2009,2,19,5,35,0,0,UTC,-)
| | |?- file:/.../ladsweb.nascom.nasa.gov/allData/5/MOD02QKM/2009/050/MOD02QKM.A2009050.0530.005.2009304101720.hdf
| | | |== timespanstart = date(2009,2,19,5,30,0,0,UTC,-)
| | | |== timespanstop = date(2009,2,19,5,35,0,0,UTC,-)
| | | |== platformshortname = Terra
| | | |== instrumentshortname = MODIS
| | | |== mxd = MOD02QKM
| |-- x-id:14345207989846912023
| | |== mxd = MOD03
| | |== instrumentshortname = MODIS
| | |== platformshortname = Terra
| | |== timespanstart = date(2009,2,19,5,30,0,0,UTC,-)
| | |== timespanstop = date(2009,2,19,5,35,0,0,UTC,-)
| | |?- file:/.../ladsweb.nascom.nasa.gov/allData/5/MOD03/2009/050/MOD03.A2009050.0530.005.2009051044048.hdf
| | | |== timespanstart = date(2009,2,19,5,30,0,0,UTC,-)
| | | |== timespanstop = date(2009,2,19,5,35,0,0,UTC,-)
| | | |== platformshortname = Terra
| | | |== instrumentshortname = MODIS
| | | |== mxd = MOD03
| |-- x-id:8728100975137579083
| | |== mxd = MOD1kmds
| | |== instrumentshortname = MODIS
| | |== platformshortname = Terra
| | |== timespanstart = date(2009,2,19,5,30,0,0,UTC,-)
| | |== timespanstop = date(2009,2,19,5,35,0,0,UTC,-)
| | |?- x-id:6394584714665285945
| | | |== uuid:1ca04bde...be#requires = x-id:13553884187827520565
| | | |== mxd = MOD1kmds
| | | |== instrumentshortname = MODIS
| | | |== platformshortname = Terra
| | | |== timespanstart = date(2009,2,19,5,30,0,0,UTC,-)
| | | |== timespanstop = date(2009,2,19,5,35,0,0,UTC,-)
| | | |-- x-id:13553884187827520565
| | | | |== uuid:1ca04bde...be#process = uuid:92f5359c-7928-11df-8626-00195b7187be
| | | | |== uuid:1ca04bde...be#requires = x-id:11068974318480883893
| | | | |-- x-id:11068974318480883893
| | | | | |== mxd = MOD021KM
| | | | | |== instrumentshortname = MODIS
| | | | | |== platformshortname = Terra
| | | | | |== timespanstart = date(2009,2,19,5,30,0,0,UTC,-)
| | | | | |== timespanstop = date(2009,2,19,5,35,0,0,UTC,-)
| | | | | |?- file:/.../ladsweb.nascom.nasa.gov/allData/5/MOD021KM/2009/050/MOD021KM.A2009050.0530.005.2009304101720.hdf
| | | | | | |== timespanstart = date(2009,2,19,5,30,0,0,UTC,-)
| | | | | | |== timespanstop = date(2009,2,19,5,35,0,0,UTC,-)
| | | | | | |== platformshortname = Terra
| | | | | | |== instrumentshortname = MODIS
| | | | | | |== mxd = MOD021KM
| | | | | |?- file:/.../ladsweb.nascom.nasa.gov/allData/5/MOD021KM/2009/050/MOD021KM.A2009050.0530.005.2009335072320.hdf
| | | | | | |== timespanstart = date(2009,2,19,5,30,0,0,UTC,-)
| | | | | | |== timespanstop = date(2009,2,19,5,35,0,0,UTC,-)
| | | | | | |== platformshortname = Terra
| | | | | | |== instrumentshortname = MODIS
| | | | | | |== mxd = MOD021KM

--cut: examples/modis.prolog --
l2_typ_preserve(timespanstart).
l2_typ_preserve(timespanstop).
l2_typ_preserve(platformshortname).
l2_typ_preserve(instrumentshortname).

%% MODIS/Terra
l2_typ_mxd_process('uuid:92f5359c-7928-11df-8626-00195b7187be',
['MOD1kmds'], ['MOD021KM']).
l2_typ_mxd_process('uuid:92f5714c-7928-11df-8626-00195b7187be',
['MODQkmds'], ['MOD02QKM']).
l2_typ_mxd_process('uuid:92f5ab58-7928-11df-8626-00195b7187be',
['MOD35'], ['MOD03', 'MOD1kmds', 'MOD02QKM', 'MOD021KM']).

%% MODIS/Aqua
l2_typ_mxd_process('uuid:92f5e49c-7928-11df-8626-00195b7187be',
['MYD1kmds'], ['MYD021KM']).
l2_typ_mxd_process('uuid:92f61caa-7928-11df-8626-00195b7187be',
['MYDQkmds'], ['MYD02QKM']).
l2_typ_mxd_process('uuid:92f6565c-7928-11df-8626-00195b7187be',
['MYD35'], ['MYD03', 'MYD1kmds', 'MYD02QKM', 'MYD021KM']).
--cut: examples/modis.prolog --

Evgenii Rudnyi

unread,
Jun 26, 2010, 2:44:30 AM6/26/10
to
on 26.06.2010 05:47 Ivan Shmakov said the following:

>>>>>> Evgenii Rudnyi <use...@rudnyi.ru> writes: on 23.06.2010
>>>>>> 19:08 Ivan Shmakov said the following:
>
>>> Есть такой общеизвестный и популярный инструмент, как Make [1].
>>> Хотя изначально оный предназначался для сборки программ (и в этом
>>> преуспел), кое-кто, включая меня и моих коллег, имеет опыт
>>> применения его в обработке результатов разнообразных физических
>>> экспериментов (включая данные дистанционного зондирования Земли и
>>> моделирование методами Монте-Карло.)
>
>> ...
>
>>> ∙ Hетерпимость к отказам -- отказ на пути к цели приостанавливает
>>> всю обработку для нее. А неплохо было бы попробовать другой
>>> путь, или же запустить обработку повторно.
>
>> В GNU Make можно перед командой поставить минус, тогда выполнение
>> остальных комманд будет продолжаться даже в том случае если команда
>> вернет ошибку.
>
> Hа языке Make, искомую цель можно описать примерно так:
>
> xxx: $(WGET) http://example.com/xxx

http://www.gnu.org/software/make/manual/make.pdf
5.5 Errors in Commands

To ignore errors in a command line, write a "-" at the beginning of the
line's text (after the initial tab). The "-" is discarded before the
command is passed to the shell for execution.
For example,

clean:
-rm -f *.o

>
> Честно говоря, не вполне понимаю, где здесь применить <<->>?
>
> Смысл в том, что по отказу при обработки цели xxx, инструмент должен
> прекратить рассмотрение цепи зависимостей с этой цели, и выбрать
> некую другую цепь и цель. IOW, скорее, $ make -k.
>
> Однако, $ make -k не реализует (IIUC) <<другой путь>> и <<повторную
> обработку>>. И я не нахожу возможности реализовать первое без
> привлечения некоего сложного препроцессора, или чего-либо подобного.
> (Второе может быть реализовано повторным запуском Make, но и в этом
> случае возникают особенности.)

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

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

http://en.wikipedia.org/wiki/List_of_build_automation_software

--
Евгений

Ivan Shmakov

unread,
Jun 26, 2010, 3:20:32 AM6/26/10
to
>>>>> Evgenii Rudnyi <use...@rudnyi.ru> writes:
>>>>> on 26.06.2010 05:47 Ivan Shmakov said the following:
>>>>> Evgenii Rudnyi <use...@rudnyi.ru> writes: on 23.06.2010
>>>>> 19:08 Ivan Shmakov said the following:

>>> В GNU Make можно перед командой поставить минус, тогда выполнение


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

>> Hа языке Make, искомую цель можно описать примерно так:

>> xxx:
>> $(WGET) http://example.com/xxx

> To ignore errors in a command line, write a "-" at the beginning of
> the line's text (after the initial tab). The "-" is discarded before
> the command is passed to the shell for execution. For example,

> clean:
> -rm -f *.o

В таком случае, код завершения rm не будет влиять на работу Make
вовсе.

Какой смысл продолжать работу Make вдоль зависимостей, идущих
через файловую цель xxx выше, если Wget привел к отказу, и файла
xxx, подлежащего дальнейшей обработке, попросту не было создано?

Что хуже, файл может быть лишен целостности. Здесь, впрочем,
поможет:

xxx:
$(WGET) -O xxx.TMP http://example.com/xxx
mv -v -- xxx.TMP xxx

[...]

Ivan Shmakov

unread,
Jun 26, 2010, 3:21:03 AM6/26/10
to
>>>>> Evgenii Rudnyi <use...@rudnyi.ru> writes:
>>>>> on 26.06.2010 05:47 Ivan Shmakov said the following:
>>>>> Evgenii Rudnyi <use...@rudnyi.ru> writes: on 23.06.2010
>>>>> 19:08 Ivan Shmakov said the following:

[...]

>> Однако, $ make -k не реализует (IIUC) <<другой путь>> и <<повторную
>> обработку>>. И я не нахожу возможности реализовать первое без
>> привлечения некоего сложного препроцессора, или чего-либо подобного.
>> (Второе может быть реализовано повторным запуском Make, но и в этом
>> случае возникают особенности.)

> Я не думаю, что удастся найти приемлимое решение с make.

О чем и речь.

> Здесь наверное имело бы смысл посмотреть на более новые
> технологии. Скажем часто слышно про ant, но я никогда его не
> пробовал.

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

> http://en.wikipedia.org/wiki/List_of_build_automation_software

Существенное отличие автоматизации сборки ПО от автоматизации
обработки данных физического эксперимента, IMO, в том, что в
первом случае:

∙ количество целей ограничено и более или менее постоянно;

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

В случае же обработки данных, целей:

∙ значительно больше; (архив наблюдений MODIS/Terra за около
десяти лет; <<исходные данные>> -- .PDS-файл порядка 377 MiB в
объеме за каждые пять минут полета спутника);

∙ новые имеют свойство появляться в real-time;

∙ некоторые данные требуется получать через Internet;

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

Поэтому, имеет смысл вводить функцию ценности, и решать задачу
оптимизации.

IOW, если целью сборки ПО является получение полностью рабочего
программного пакета (i. e., получение всех целей; <<все или
ничего>>), то целью обработки данных является получение наиболее
ценного набора результатов (<<чем больше, тем лучше>>.)

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

Evgenii Rudnyi

unread,
Jun 26, 2010, 5:12:10 AM6/26/10
to
on 26.06.2010 09:20 Ivan Shmakov said the following:

>>>>>> Evgenii Rudnyi <use...@rudnyi.ru> writes:
>>>>>> on 26.06.2010 05:47 Ivan Shmakov said the following:
>>>>>> Evgenii Rudnyi <use...@rudnyi.ru> writes: on 23.06.2010
>>>>>> 19:08 Ivan Shmakov said the following:
>
> >>> В GNU Make можно перед командой поставить минус, тогда выполнение
> >>> остальных комманд будет продолжаться даже в том случае если команда
> >>> вернет ошибку.
>
> >> Hа языке Make, искомую цель можно описать примерно так:
>
> >> xxx:
> >> $(WGET) http://example.com/xxx
>
> > http://www.gnu.org/software/make/manual/make.pdf
> > 5.5 Errors in Commands
>
> > To ignore errors in a command line, write a "-" at the beginning of
> > the line's text (after the initial tab). The "-" is discarded before
> > the command is passed to the shell for execution. For example,
>
> > clean:
> > -rm -f *.o
>
> В таком случае, код завершения rm не будет влиять на работу Make
> вовсе.

Совершенно верно.

> Какой смысл продолжать работу Make вдоль зависимостей, идущих
> через файловую цель xxx выше, если Wget привел к отказу, и файла
> xxx, подлежащего дальнейшей обработке, попросту не было создано?

В вашем случае никакого.

> Что хуже, файл может быть лишен целостности. Здесь, впрочем,
> поможет:
>
> xxx:
> $(WGET) -O xxx.TMP http://example.com/xxx
> mv -v -- xxx.TMP xxx
>
> [...]
>

--
Евгений

Ivan Shmakov

unread,
Jul 12, 2010, 4:17:17 PM7/12/10
to
>>>>> "IS" == Ivan Shmakov <iv...@main.uusia.org> writes:

[...]

IS> Есть надежда, что система, над которой в данный момент работаю, в
IS> каком-то варианте заработает в течение недели.

Hе заработала.

Посещение ENVIROMIS-2010 отняло некоторе время, однако в
ближайшем будущем намерен продолжить работу.

Hапомню, что речь идет о создании свободной (условия не строже
GNU GPL) <<Make-подобной>> системы управления (обработкой
данных), с учетом зависимостей, обработкой отказов, и
возможностью управления порядком обработки.

(Есть некоторое подозрение, что данный продукт может иметь
определенный <<коммерческий успех>>.)

[...]

Ivan Shmakov

unread,
Aug 23, 2010, 1:36:51 PM8/23/10
to
BTW, я заявил доклад на тему <<Модель системы управления
обработкой данных в оперативном режиме>> на проводимую в октябре
в Красноярске NEU-10 [1].

Если есть пожелания / предложения -- буду благодарен.

[1] http://icmconfs.krasn.ru/ru/confs/neu-10/

0 new messages