вторник, 14 октября 2008 г.
Khameleon Modular System: О главном окне приложения
При запуске программы список модулей читается из конфигурационного файла, который формируется после работы менеджера модулей. На основе этого списка происходит динамическое формирование рабочего окружения.
Khameleon Modular System
Модульная Система для обработки данных с экспериментальных приборов, управления приборами.
И так, начинаем цикл заметок-соображений о subj-е. Что это вообще такое, и что из себя представляет... это нечто для обработки всего :)
На самом деле всё больше появляется экспериментальных приборов, очень тесно связанных с ПК и требующих порой весьма нетривиальной обработки первичных данных. При таком подходе львиная доля в реализации функционала устройства ложиться на ПО, что и хорошо и плохо одновременно... Почему хорошо, понятно - проще аппаратная часть, дешевле. Плохо же оттого, что софт можно написать и на скорую руку, и через жопу, и чтобы он при этом как-то работал, а количество потраченных нервных клеток конечного пользователя никого не интересует. Даже написаны специальные системы а-ля LabView, которые стоят кучу бабок и содержат в себе всего на все случаи жизни... Но от вида программ, написаных такими монстрами, от скорости их работы, костлявости и кривоты порой "слегка" подташнивает.
Т.о. данный проект в своём зачатке нацелен на "построение коммунизма", хоть и в пределах "своей квартиры", а дальше видно будет.
пятница, 3 октября 2008 г.
о природе мышления
Обратимся к эволюции, ибо именно ей мы всем обязаны (что тоже спорно, но не будем останавливаться на таких мелочах). Итак, в ходе эволюции, или другими словами, естественного отбора, постоянно происходит соревнование между видами "кто лучше адаптируется" к текущим условиям окружающей среды. Это жестокие состязания, т.к. проигравшие навсегда уходят в небытие. И что мы имеем на сегодняшний день в результате этой долгой борьбы? А сегодня мы имеем вид, наделённый максимальным адаптационным потенциалом за всю историю планеты, т.е. человечество. При этом надо отметить, что физические данные человека весьма заурядны, весь этот огромный потенциал сконцентрирован лишь в его мозге. Так, запомнили, теперь возвращаемся к теме разговора.
Роль мозга определили. С другой стороны более/менее известно, что мозг представляет собой сеть нейронных клеток, которые сами по себе относительно просты, но являясь элементами сети способны выполнять задачи гигантской сложности.
Каждая сеть, кроме своих элементов характеризуется также связями этих элементов друг с другом. Связи эти, скорее всего, случайны и статистичны, и во всяком случае не определены раз и навсегда. Информация в сеть поступает от нервных окончаний, зрительных, слуховых и пр., которые уже тяготеют к определённым частям мозга, как некой субстанции. Таким образом, в самой сети как целом происходит формирование центров (зрительного, речевого), в которых "данные проходят предварительную обработку". И когда мы видим какой-то предмет, то данные о нём поступают в сеть, и формируют в ней связи между отдельными нейронами. Когда мы видим другой предмет, то он порождает другие связи, и очень важно, что все они существуют "внутри одного объёма", т.е. активно переплетаются друг с другом (если предметы похожи), вытесняют друг друга (когда мы забываем что-либо), отпечатываются тем сильнее, чем сильнее ощущения и чем из больших источников они получены (для лучшего освоения материала надо почитать, пощупать, попробовать сделать самому).
И теперь самое важное, к чему я веду всё это время. Итак, есть два предмета, и каждый порождает свои связи, пусть изначально совершенно различные, пусть даже в различных физических областях мозга. Но потом мы понимаем, что предметы-то похожи, что у них есть общие черты, и что они вообще есть проявления одной сущности! В этот момент образовавшиеся связи уже настолько переплетены друг с другом, что мы просто не в состоянии мыслить о каждом из этих предметов по отдельности!!!
Но что произошло между этими двумя крайними точками?! А между этими точками мы размышляли, используя какие-то дополнительные данные, опыты или просто более внимательно разглядывая и сопоставляя, т.е. мы мыслили! И что же произошло в результате? А в результате связи между нейронами "адаптировались" так, что представляют собой уже нечто целое и абсолютно неразрывное!!
Таким образом, процесс мышления в сущности есть процесс адаптации мозга, процесс адаптации связей между нейронами и приведение их к такому виду, чтобы все полученные данные укладывались в голове! Можно называть это смекалкой, аналитикой или ещё чем, но очевидно одно - тот человек побеждает, который способен выявить правильные взаимосвязи, построить правильную картину мира (слово "правильный" стоит воспринимать в относительном смысле). А в сущности, всё это лишь адаптация, и потенциал её не просто огромен... он ужасно огромен!!!
P.S. по мотивам рассказа Станислава Лема "Сумма технологий".
Выражаю искреннюю благодарность Алёне Ч. за сопоставление вышеизложенного с правилами русского языка.
о методологии науки
Что есть научный метод? В том смысле, что какими методами должна развиваться наука, по каким правилам, если таковые можно сформулировать. Есть ли это философское учение о методах познания или это система методов, которые применяются в процессе познания в рамках той или другой науки. (*) Т.е. имхо одно дело, когда мы формулируем некоторые общие принципы познания, или когда берём уже некоторые конкретные правила, и применяем их вполне конкретно...
Так вот, на самом деле это сродни вопросу о том, что было вперёд, яйцо или курица.. Ну в самом деле, с одной стороны мы должны чем-то руководствоваться, но с другой стороны, эти правила должны быть выработаны, и не на пустом месте.
И так, как это происходит в науке - вначале происходят некоторые спонтанные движение без определённых методов, в результате чего накапливается первоначальный опыт. Становиться ясно от чего есть толк, от чего вообще никакого, как стоит подумать, а как думать бесполезно. Т.е. формируются некоторые первоначальные правила, на уровне быть может совсем элементарном. Но они необходимы для дальнейшего становления. При этом стоит отметить, что в этих спонтанных движениях очень велика доля философии, каких-то предположений чисто гипотетических и пр.
И так, первый этап проходит, формулируются общие взгляды, правила, методы и начинают активно использоваться для дальнейшего познания, становления научных теорий. Дальше - хуже, методы возводятся в абсолют, на всех кто им не подчиняются косо смотрят, ими стараются объяснить буквально всё, даже то, что вообще никаким образом не объясняется в этих терминах... И так продолжается до тех пор, пока не найдут явного противоречия. И тогда начинается новый виток, вновь некоторые спонтанные, философские движения. Не без обращения к предыдущему опыту, но к критическому обращению. И история повторяется.
Так собственно, на что хотелось обратить особое внимание в применение к обычным, бытовым ситуациям..
Во-первых: подобным образом можно пробовать избавляться от различных догм, в т.ч. религиозных, основываясь только лишь на своём опыте.
Во-вторых: имеет место такая, своего рода дуальность познания мира. Т.е. нельзя смотреть на него как на нечто однозначно определённое, это всегда взаимосвязь.. Вот и вопрос с курицей и яйцом.. Не было ничего по-отдельности, они образовались вместе, практически одновременно, и вышли из множества других возможностей, как самая рациональная.
Ну и наконец, в-третьих: мораль сей басни такова, что если сильно хочется сделать что-то новое, что ещё никто не делал.. ну или хотя бы то, что сам ещё не делал, надо выйти за рамки общепринятых теорий, методов.. за рамки своих возможностей. И сделать это надо не один раз и не в одном направлении. Только так можно определить направление движения.. Самое сложное тут состоит в том, что приходиться апеллировать лишь к своему личному опыту. Здесь не прикрыться авторитетами, не сослаться на общественное мнение, здесь человек оказывается один, без всякой опоры. Именно это, наверно, и пугает очень многих, вынуждая их работать в уже устоявшихся взглядах, т.е. в условиях много более благоприятных, но в таких работах ведь и нет никакой качественной новизны (хотя это не значит, что эти работы не нужны, тут каждому своё, как бы это не было банально).
*см А.Л. Симанов, "Методологические принципы физики"
P.S. ну вот, пока писал, была какая-то большая мысль, а как написал, так и всё как-то просто получается и вроде всем должно быть известно... Ну раз уж написал, то публикую.
четверг, 17 апреля 2008 г.
Transparent proxy в домашних условиях или как я просветлял Squid
Т.о. для решения проблемы надо сделать две вещи:
- настроить маскарадинг для сети между буком и стационаром
- перенаправлять все пакеты, не принадлежащие ни одной из сетей на локальный сквид, настроенный на внешний прокси.
...делается легко, тем более что в моём любимом AltLinux есть фронтенд для создания правил iptables. Т.о. делаем маскарад для всех tcp,udp,icmp пакетов из сети В, если адресат не принадлежит этой сети:
Chain POSTROUTING (policy ACCEPT)После этого необходимо убедиться, что у нас в ядре разрешено перенаправление пакетов:
target prot opt source destination
MASQUERADE tcp -- 192.168.0.0/24 !192.168.0.0/24
MASQUERADE udp -- 192.168.0.0/24 !192.168.0.0/24
MASQUERADE icmp -- 192.168.0.0/24 !192.168.0.0/24
#cat /proc/sys/net/ipv4/ip_forward
Если внутри единичка, то всё ок, иначе ищем файл, откуда этот параметр управляется, в моём случае это /etc/net/sysctl.conf строчка net.ipv4.ip_forward = 1 (на выяснение этого обстоятельства у меня ушло несколько часов). Можно, конечно, сделать #echo 1 > /proc/sys/net/ipv4/ip_forward, но это слетит после перезагрузки. Можно засунуть эту команду в какой-нить из загрузочных скриптов, но это костыль.
И так, с маскарадингом разобрались. Бук успешно заходит на ftp, smb локалки.
2. Просветление Squid
С настройкам сквида я немного схалтурил. Взял пример настройки, что уже был с ним и работал для localhost. Разрешил запросы из сети В, указал parent-proxy, сказал перенаправлять ssl-пакеты сразу на parent:
#/etc/squid/squid.confТак, с настройками сквида разобрались. Теперь осталось настроить прозрачность. Один из методов, использовать iptables для перенаправления пакетов, предназначенных наружу, на 3128 порт нашего прокси.
acl SSL method CONNECT
never_direct allow SSL //заворачиваем ssl-конекты через parent
acl our_networks src "/etc/squid/our_networks" //в our_networks список сетей, которым разрешено пользоваться прокси
http_access allow our_networks
http_port 3128 transparent //говорим, что работать надо в прозрачном режиме.
cache_peer my.proxy.ru parent 8080 0 default
#hierarchy_stoplist ... //снимаем какие-либо ограничения на загрузку контента
Самое простое - перенаправлять все пакеты, выходящие за рамки нашей сети, на прокси. Проблема в том, что наша сеть объединяет несколько диапазонов. Я сделал вот как:
Chain OUTPUT (policy ACCEPT)Т.е. если пакет принадлежит хоть одной сети, то для него выполняется ACCEPT и он вылетает из цепочки. Если же он не принадлежит ни одной из перечисленных сетей, то он докатывается до правила REDIRECT, и там уже прокси решает что с ним делать.
target prot opt source destination
ACCEPT 0 -- anywhere 10.0.0.0/8
ACCEPT 0 -- anywhere 192.168.0.0/16
ACCEPT 0 -- anywhere 172.16.0.0/19
ACCEPT 0 -- anywhere 127.0.0.0/8
REDIRECT tcp -- anywhere anywhere redir ports 3128
REDIRECT udp -- anywhere anywhere redir ports 3128
И так, прозрачность для локальной машинки настроили (коли мы уж заморочились с прокси, то почему бы не поиметь его преимущества и локально?). Но тут кроется один очень серьёзный подвох. ssl не работает через прозрачный прокси, никак, никогда. Дело в том, что по-сути iptables выполняют роль посредника между клиентом и прокси, что недопустимо для ssl, который направлен против этих самых посредников. Т.о. ни тебе jabber по ssl, ни почты.. для всего этого надо настраивать прокси явно. Сам же я ограничился лишь указанием ssl-proxy в браузере, как неким компромисным решением, т.к. на сквиде лежит кеширование и в перспективе - вырезка рекламы.
Теперь, для того чтобы прозрачность работала и для сети В, добавляем цепочку правил подобную OUTPUT в PREROUTING, указав eth2 (куда подключен бук), в качестве исходного интерфайса. Выглядит всё это немного необтёсано, может со временем созреет что-нить покрасивее :).
вторник, 25 марта 2008 г.
Python как инструмент обработки экспериментальных данных
Обработка экспериментальных данных... Как обрабатывать, в чём обрабатывать? Если ответ на первый вопрос как правило понятен, то со вторым вопросом всё гораздо сложнее. Далее расскажу о некоторых своих изысканиях последней недели, касательно именно того, в чём обрабатывать.
И так, сам эксперимент состоял в том, что на выходе я имел некие графики спектров лазера в зависимости от мощности накачки. Поведение спектров, а именно их ширины, как основного параметра - не тривиально, и под это дело в лаборатории была разработана теория, которую было необходимо проверить, установить пределы применимости. В теории присутствовал подгоночный параметр, который должен быть постоянен при всех значениях мощности.
Но в данном контексте это всё не суть, а суть в том, что имею 25 .csv файлов со спектрами, которые надо отнормировать, из которых надо извлечь мощность, ширину, внутререзонаторный спектр, подогнать теоретическим спектром и строить всевозможные графики зависимостей этих величин, дабы понять что вообще там происходит.
И так, мне понадобиться: работа с болшьими массивами чисел, численное интегрирование, интерполяция, численное нахождение корней уравнения F(x)=0 где F - нелинейная функция, аппроксимация по методу наименьших квадратов произвольной функцией.
Выбираем средства: 1.Origin - хорош при обработке малого числа графиков, но в данном случае терпит полный крах, т.к. мне проще будет повеситься, чем работать в нём с таким количеством данных, а это ведь только начало. 2.MathCad - курит в сторонке, т.к. с его интерфейсом я без матов работать не могу - порой кучу усилий надо приложить, чтобы только скобаку поставить в нужном месте, к тому же нет версии под lin. 3.MATLAB - отличный инструмент, но его функционал явно избыточен. 4.SciLab - замечательная штука, в которой есть всё то, что мне необходимо, и которую я уже было подорвался использовать для всех нужд, однако столкнулся с проблемой: скриптами можно организовать пакетную обработку данных (нормировку, аппроксимацию и пр.), но когда появляется необходимость максимально быстро сконструировать график зависимости одной величины, определяемой из пакетной обработки, от другой, приходиться поломать голову. По сути, это язык программирования высокого уровня, но это функциональный язык, в то время как объектно-ориентированный подход мог бы дать большую гибкость. 5. Python - ооп язык программирования высокого уровня в котором я и нашел спасение:
Python как инструмент обработки экспериментальных данных
И так, нам потребуются модули numpy, matplotlib, scipy. Эти модули предоставляют замечательный функционал, включающий всё, что мне может понадобиться на данном этапе.
Вся изюминка кроется в реализации обработки эксперимента: создаем класс "spectr" который будет служить обёрткой для экспериментально-измеренного спектра. Добавляем в качестве методов всё, что мы можем с этим спектром сделать: умножение на другой спектр, центральная блина волны, пиковая мощность, ширина на полувысоте, нормировка по мощности, умножение на константу, обрезание шума, сохранение в файл, открытие из файла. Это краткий список того, что мне понадобилось в первую очередь, что важно, список этот легко может быть расширен в дальнейшем. Далее, создаём класс, описывающий нашу теоретическую модель, который включает в себя все формулы, все параметры, методы аппроксимации, методы расчёта теоретических параметров. Теперь создавая несколько экземпляров класса с разными параметрами легко можно сравнить влияние этих самых параметров на предсказания модели, которые в свою очередь легко сравнить с реальными данными.
Основной скрипт обработки читает экспериментальные спектры, создавая из них массив объектов класса "spectr" в цикле извлекает параметры полуширины, мощности как на выходе, так и внутри резонатора, проводит аппроксимацию и поиск подгоночного параметра для каждого участка спектра. Теперь, имея в руках все эти данные одновременно, можно легко с ними оперировать, концентрируясь на физике дела, которая сейчас, не обременённая техническими деталями обработки, становиться весьма интересной.
среда, 12 марта 2008 г.
python-qt-qwt
И так, захотелось мне писать проги с "окошками" за минимальное время и с максимальной быстротой (т.к. возможно вскоре это будет производственной необходимостью). Кроме того, поскольку контора сейчас сидит под виндами, а в дальнейшем стоит планировать хотя бы частичное внедрение пингвина, то уже сейчас стоит закладываться на кросплатформенность, которая присуща всем 3-м инструментам.
Почему питон? - потому, что легкий синтаксис, потому что много модулей, потому что кросплатформенный и в конце концов, потому что имхо модно.
Почему Qt? - потому что обывателя интересуют окошки, потому что мне понравились методы использования сигналов/слотов, потому что всё грамотно объектно-ориентировано.
При чём тут qwt? - qwt, как известно, библиотека для qt, которая предоставляет различные элементы оформления, востребованные в научной среде (plot с автомасштабированием, различные крутилки, ползунки и пр), так что прикрутить это к нашим окошкам было бы очень недурно.
Отдельной строкой стоит отметить, что интерфейс на Qt может быть легко "нарисован" в дизайнере, а получившейся .ui-файл транслирован на питон, т.о. руками остаётся лишь написать обработчики для элементов окна, и должна получиться вполне рабочая прога.
И вот, руководствуясь этими соображениями и подогреваемый желанием лёгкой наживы, я начал своё "хождение по мукам"....
...продолжение следует.