вторник, 14 октября 2008 г.

Khameleon Modular System: О взаимодействии модулей со средой

И так, имеется заранее определённый интерфейс взаимодействия модулей, реализованный через qplugin. Как выглядит загрузка модуля через QPluginLoader — вначале необходимо получить список файлов модулей, которые хотим загрузить, затем создаём pluginloader и скармливаем ему в цикле эти файлы. Далее pluginloader.instance() возвращает нам указатель на QObject. И теперь осталось лишь получить объект с описанным нами интерфейсом с помощью qobject_cast(plugin). Однако тут есть тонкое место, интерфейсов у нас несколько, и различаться они могут как по типам, так и по версиям.
Оказывается в Qt есть механизм QMetaObject, с помощью которого сам Qt получает инфу о сигналах, слотах и ещё кое-каких параметрах объекта. Но самое вкусное для нас лежит рядом, в QMetaProperty. С помощью макроса Q_PROPERTY можно добавить к объекту свои «свойства», доступ к которым будет открыт на стадии, когда модуль представляет из себя лишь абстрактный QObject. И именно в этот момент можно будет узнать что у нас за модуль в руках, и какой именно интерфейс для него следует использовать. Т.о. фактически интерфейс разбивается на две части: некий мета-интерфейс, т.е. По сути список properties который фиксирован раз и навсегда, и рабочие методы объекта модуля. Интересно, а работать это будет...
P.S. представленная информация, по сути, вольный перевод разных частей Qt Assistant, для уточнения деталей следует обращаться непосредственно к первоисточнику.

Khameleon Modular System: О взаимодействии модулей

Модули взаимодействуют посредством сигналов и контейнеров QVariant для обмена данными.
Скажем, есть модуль получения данных с какого-либо девайса. Как только получена порция данных, модуль пускает сигнал, который связан со слотами модулей, которым эти данные необходимы. «Среда» отвечает за правильное связывание сигналов со слотами. Передача данных от модуля к модулю происходит посредством структур, обёрнутых в QVariant. Формат структуры заранее не определён, но описан в документации к модулю.
После того как отработали модули работы с данными каждый также пускает сигнал и результат их работы передаётся следующим и т.д.
У каждого модуля есть некоторые внутренние параметры, определяющие его работу. Необходимо предусмотреть чтение этих параметров, а так же их изменение другими модулями в процессе работы. Скорее всего это будет нечто вроде QStringList, где последнее слово в строке определяет значение параметра. Должны быть реализованы функции чтения всего списка параметров, чтение значения отдельного параметра (по строке с названием параметра), а также установка значения параметра.
Модуль представляет собой отдельный класс-библиотеку-виджет со стандартизованным интерфейсом. Возможно указание версии интерфейса, что может потребоваться для дальнейших улучшений. Рабочий код модуля исполняется в отдельном потоке (thread). Каждый модуль внутри себя содержит список пунктов меню (QMenu) для добавления в главное окно приложения, QToolBars and etc.

Khameleon Modular System: О главном окне приложения

Главное окно изначально содержит только строку состояния и общую строку меню, содержание которой заполняется самими модулями. Центральным виджетом окна является либо TabWidget или MDI. Список всех доступных модулей должен быть вынесен в отдельное меню, либо диалоговое окно, откуда происходит добавление/удаления модулей на рабочую область. Возможно потребуется создание менеджера модулей, для добавления, удаления модулей и установления связей между ними. Визуальное оформление модулей представлено в виде Widget-ов, которыми заполняются dockWidgets расположение которых задаётся пользователем. Модули могут иметь свои popupMenu и/или свои диалоговые окна.
При запуске программы список модулей читается из конфигурационного файла, который формируется после работы менеджера модулей. На основе этого списка происходит динамическое формирование рабочего окружения.

Khameleon Modular System

Khameleon Modular System
Модульная Система для обработки данных с экспериментальных приборов, управления приборами.
И так, начинаем цикл заметок-соображений о subj-е. Что это вообще такое, и что из себя представляет... это нечто для обработки всего :)
На самом деле всё больше появляется экспериментальных приборов, очень тесно связанных с ПК и требующих порой весьма нетривиальной обработки первичных данных. При таком подходе львиная доля в реализации функционала устройства ложиться на ПО, что и хорошо и плохо одновременно... Почему хорошо, понятно - проще аппаратная часть, дешевле. Плохо же оттого, что софт можно написать и на скорую руку, и через жопу, и чтобы он при этом как-то работал, а количество потраченных нервных клеток конечного пользователя никого не интересует. Даже написаны специальные системы а-ля LabView, которые стоят кучу бабок и содержат в себе всего на все случаи жизни... Но от вида программ, написаных такими монстрами, от скорости их работы, костлявости и кривоты порой "слегка" подташнивает.
Т.о. данный проект в своём зачатке нацелен на "построение коммунизма", хоть и в пределах "своей квартиры", а дальше видно будет.

пятница, 3 октября 2008 г.

о природе мышления

Я мыслю, следовательно... хотя до следовательно ещё рано. Что вообще такое "я мыслю". Очевидно, мысление есть некий процесс, происходящий в наших головах.. хотя это всё-таки у кого как, но не суть. А вот в чём суть самого этого процесса? Что он из себя представляет, ну или хотя бы может представлять чисто гипотетически?
Обратимся к эволюции, ибо именно ей мы всем обязаны (что тоже спорно, но не будем останавливаться на таких мелочах). Итак, в ходе эволюции, или другими словами, естественного отбора, постоянно происходит соревнование между видами "кто лучше адаптируется" к текущим условиям окружающей среды. Это жестокие состязания, т.к. проигравшие навсегда уходят в небытие. И что мы имеем на сегодняшний день в результате этой долгой борьбы? А сегодня мы имеем вид, наделённый максимальным адаптационным потенциалом за всю историю планеты, т.е. человечество. При этом надо отметить, что физические данные человека весьма заурядны, весь этот огромный потенциал сконцентрирован лишь в его мозге. Так, запомнили, теперь возвращаемся к теме разговора.
Роль мозга определили. С другой стороны более/менее известно, что мозг представляет собой сеть нейронных клеток, которые сами по себе относительно просты, но являясь элементами сети способны выполнять задачи гигантской сложности.
Каждая сеть, кроме своих элементов характеризуется также связями этих элементов друг с другом. Связи эти, скорее всего, случайны и статистичны, и во всяком случае не определены раз и навсегда. Информация в сеть поступает от нервных окончаний, зрительных, слуховых и пр., которые уже тяготеют к определённым частям мозга, как некой субстанции. Таким образом, в самой сети как целом происходит формирование центров (зрительного, речевого), в которых "данные проходят предварительную обработку". И когда мы видим какой-то предмет, то данные о нём поступают в сеть, и формируют в ней связи между отдельными нейронами. Когда мы видим другой предмет, то он порождает другие связи, и очень важно, что все они существуют "внутри одного объёма", т.е. активно переплетаются друг с другом (если предметы похожи), вытесняют друг друга (когда мы забываем что-либо), отпечатываются тем сильнее, чем сильнее ощущения и чем из больших источников они получены (для лучшего освоения материала надо почитать, пощупать, попробовать сделать самому).
И теперь самое важное, к чему я веду всё это время. Итак, есть два предмета, и каждый порождает свои связи, пусть изначально совершенно различные, пусть даже в различных физических областях мозга. Но потом мы понимаем, что предметы-то похожи, что у них есть общие черты, и что они вообще есть проявления одной сущности! В этот момент образовавшиеся связи уже настолько переплетены друг с другом, что мы просто не в состоянии мыслить о каждом из этих предметов по отдельности!!!
Но что произошло между этими двумя крайними точками?! А между этими точками мы размышляли, используя какие-то дополнительные данные, опыты или просто более внимательно разглядывая и сопоставляя, т.е. мы мыслили! И что же произошло в результате? А в результате связи между нейронами "адаптировались" так, что представляют собой уже нечто целое и абсолютно неразрывное!!
Таким образом, процесс мышления в сущности есть процесс адаптации мозга, процесс адаптации связей между нейронами и приведение их к такому виду, чтобы все полученные данные укладывались в голове! Можно называть это смекалкой, аналитикой или ещё чем, но очевидно одно - тот человек побеждает, который способен выявить правильные взаимосвязи, построить правильную картину мира (слово "правильный" стоит воспринимать в относительном смысле). А в сущности, всё это лишь адаптация, и потенциал её не просто огромен... он ужасно огромен!!!
P.S. по мотивам рассказа Станислава Лема "Сумма технологий".
Выражаю искреннюю благодарность Алёне Ч. за сопоставление вышеизложенного с правилами русского языка.

о методологии науки

...по мотивам экзамена по философии.
Что есть научный метод? В том смысле, что какими методами должна развиваться наука, по каким правилам, если таковые можно сформулировать. Есть ли это философское учение о методах познания или это система методов, которые применяются в процессе познания в рамках той или другой науки. (*) Т.е. имхо одно дело, когда мы формулируем некоторые общие принципы познания, или когда берём уже некоторые конкретные правила, и применяем их вполне конкретно...
Так вот, на самом деле это сродни вопросу о том, что было вперёд, яйцо или курица.. Ну в самом деле, с одной стороны мы должны чем-то руководствоваться, но с другой стороны, эти правила должны быть выработаны, и не на пустом месте.
И так, как это происходит в науке - вначале происходят некоторые спонтанные движение без определённых методов, в результате чего накапливается первоначальный опыт. Становиться ясно от чего есть толк, от чего вообще никакого, как стоит подумать, а как думать бесполезно. Т.е. формируются некоторые первоначальные правила, на уровне быть может совсем элементарном. Но они необходимы для дальнейшего становления. При этом стоит отметить, что в этих спонтанных движениях очень велика доля философии, каких-то предположений чисто гипотетических и пр.
И так, первый этап проходит, формулируются общие взгляды, правила, методы и начинают активно использоваться для дальнейшего познания, становления научных теорий. Дальше - хуже, методы возводятся в абсолют, на всех кто им не подчиняются косо смотрят, ими стараются объяснить буквально всё, даже то, что вообще никаким образом не объясняется в этих терминах... И так продолжается до тех пор, пока не найдут явного противоречия. И тогда начинается новый виток, вновь некоторые спонтанные, философские движения. Не без обращения к предыдущему опыту, но к критическому обращению. И история повторяется.
Так собственно, на что хотелось обратить особое внимание в применение к обычным, бытовым ситуациям..
Во-первых: подобным образом можно пробовать избавляться от различных догм, в т.ч. религиозных, основываясь только лишь на своём опыте.
Во-вторых: имеет место такая, своего рода дуальность познания мира. Т.е. нельзя смотреть на него как на нечто однозначно определённое, это всегда взаимосвязь.. Вот и вопрос с курицей и яйцом.. Не было ничего по-отдельности, они образовались вместе, практически одновременно, и вышли из множества других возможностей, как самая рациональная.
Ну и наконец, в-третьих: мораль сей басни такова, что если сильно хочется сделать что-то новое, что ещё никто не делал.. ну или хотя бы то, что сам ещё не делал, надо выйти за рамки общепринятых теорий, методов.. за рамки своих возможностей. И сделать это надо не один раз и не в одном направлении. Только так можно определить направление движения.. Самое сложное тут состоит в том, что приходиться апеллировать лишь к своему личному опыту. Здесь не прикрыться авторитетами, не сослаться на общественное мнение, здесь человек оказывается один, без всякой опоры. Именно это, наверно, и пугает очень многих, вынуждая их работать в уже устоявшихся взглядах, т.е. в условиях много более благоприятных, но в таких работах ведь и нет никакой качественной новизны (хотя это не значит, что эти работы не нужны, тут каждому своё, как бы это не было банально).

*см А.Л. Симанов, "Методологические принципы физики"
P.S. ну вот, пока писал, была какая-то большая мысль, а как написал, так и всё как-то просто получается и вроде всем должно быть известно... Ну раз уж написал, то публикую.