LINUX.ORG.RU

Сообщения filin

 

mifa — анализатор формата данных

При анализе данных, вычитываемых системой сбора, на предмет сбоев бывает необходимо просматривать данные глазами слово-за-словом. Ломая неоднократно глаза за этим занятием я решил слепить что-нибудь для его облегчения. Идея для такого инструмента не пришла сама, идея была «нагло спёрта» ;) у анализаторов протоколов (например: http://www.usbee.com/suite.html, http://www.usbee.com/dxpp.html, это не реклама!!!), встраиваемых сейчас даже в некоторые модели цифровых осциллографов. Поделие было названо mifa — MISS format analyzer (МИСС это стандарт на крейтовую электронику, изобретённый лет 20 назад в нашем институте) и стало органичной частью dem (decoding error monitor), приложением для мониторирования работы системы сбора и сбора статистики ошибок декодирования данных (уже презентованное ЛОРовской публике в недалёком прошлом анализ работы системы сбора данных)

mifa написана на питоне, декодинг производится в библиотеке написанной на С. Событие рендерится в виде древовидного списка (QTreeWidget) слов буфера, из которого событие декодируется. Т.е. 4-х байтные слова буфера представлены последовательно (buffer word — слово в hex, offset — смещение слова в буфере) с раскодированной в них информацией и обнаруженными ошибками. При чтении файла с данными можно задать критерий останова например по маске ошибки для каждого модуля (обнаруживается более 50 типов ошибок), слева внизу показано окошко для указания типов ошибок в маске. Справа внизу показано выбранное (мышкой по слову в дереве тыц!) раскодированное слово с номерами и значениями битов, раскодированная в полях слова информация и названия полей. Справа вверху виден кусок таблицы с ранжированными корзинами и ошибками в них (я описывал таблицу в прошлом скриншоте). Остальное, надеюсь, понятно по названиям.

Рендеринг построен на шаблоне проектирования builder. Рендереры, знающие только формат данных, реализованы в виде библиотеки питоновских модулей, за представление (отрисовку с помощью QTreeWidget) отвечает builder, что позволяет менять представление без переделки рендереров. Рендереры создаются во время рендеринга с помощью шаблона factory method (virtual constructor), используя свойство питоновских классов first class object. Весь анализатор занимает около 1500 питоновских строк включая библиотеку из 22 рендереров.

Код предоставлю всем жаждущим по запросу.

>>> Просмотр (1920x1200, 364 Kb)

 , ,

filin
()

анализ работы системы сбора данных

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

На скриншоте показано приложение для on/off-line анализа работы системы сбора данных. Отображаются (слева направо, сверху вниз): окно таблиц с суммой ошибок по последнему рану и сбросу ускорителя, окно со списком ошибок в узлах, отсортированный по количеству ошибок, окно с таблицей усреднённой длины данных по каждой корзине электроники ранжированных по месту в каждом событии, окно со всеми ошибками в конкретных узлах, конфигурационное окно с длиной данных и количеству ошибок по каждому узлу.

Длина данных указана в 4-байтных словах. Таблицы генерятся в виде HTML, отображаются с помощью QWebViewer и сбрасываются в файлы, для удалённого просмотра из web-browsers через web-server. Приложение написано на python с использованием PyQt, декодинг и накопление статистики производятся в библиотеках написанных на C, что позволяет «молотить» данные со скоростью C, а отображать с удобством python.

>>> Просмотр (1920x1200, 456 Kb)

 , ,

filin
()

Управление триггером физической установки: веб-интерфейс

Приложение управления триггером (http://www.linux.org.ru/view-message.jsp?msgid=2746736&lastmod=1211194473025) сохраняет данные в текстовые файлы, откуда их можно мониторировать в онлайн и просматривать в оффлайн. Старая версия интерфейса на JavaScript (http://www.linux.org.ru/view-message.jsp?msgid=2369325) была сильно переработана с учётом подсказок пользователя mirage (который уже удалён), html elements создаются прямо из JavaScript. Эта версия интерфейса работает не только в firefox, но и в opera, что видно на скриншоте.

Для рисования гистограмм пришлось написать кучку кода вокруг пакета flot (http://code.google.com/p/flot/), который удобен, но довольно примитивен в плане возможностей. Возможно кто-нибудь подхватит начинание и напишет на JavaScript большую библиотеку отрисовки 1,2,...-мерных графиков (от знакомого уже поступило предложение загрузить его подшефную студентку такой задачей в качестве курсовой :) ). Такая библиотека была бы полезна по разным причинам:

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

* на клиенте возможно было бы проиводить манипуляции с данными без обращения к серверу: перебинивать, менять параметры представления, вплоть до манипулирования самими датасетами, без необходимости ставить софт для анализа данных (в разумных пределах),

* возможно декларированная поддержка real-time в IPv6 (Flow label - QoS management (20 bits). Originally created for giving real-time applications special service, but currently unused. http://en.wikipedia.org/wiki/IPv6) будет реализована (это уже есть сейчас в специальных решениях http://www.industrialethernetu.com/courses/401_1.htm) и можно будет мониторировать удалённые источники данных в real-time прямо через веб с помощью этой библиотеки (скорость JavaScript интерпретатора пока удручающа, но будем надеяться, что стараниями Adobe эта проблема будет решена);

Код приложения возможно получить и поизучать по адресу на скриншоте в браузере. Главные компоненты: player - меню управления, data dispatcher - коммутатор данных, viewers - просмотрщики данных. Просьба не придираться к мелочам, если они не принципиальны.

>>> Просмотр (1280x968, 277 Kb)

filin
()

Управление триггером физической установки

Язык - python. GUI - PyQt3. Доступ к модулям через VME-шный драйвер и самописанную библиотеку (на С + биндинг в python), скрывающую детали контроллеров корзин, их внешней шины и её контроллера. Детали - далее в обсуждении.

>>> Просмотр (1280x1024, 168 Kb)

filin
()

приложение на JavaScript

приложение, работающее в снятом окне firefox'а, целиком написано на javascript'е, веб-сервер используется только для доступа к удалённым файлам с данными, если данные лежат локально, то веб-сервер не нужен вовсе.

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

>>> Просмотр (1280x968, 214 Kb)

filin
()

Plone powered или CMS на службе российских физиков

В феврале рассматривал несколько CMS и остановился на Plone. Достаточно удобная и гибкая CMS для неискушённого пользователя ресурса (спасибо разработчикам - почти всё сделано через интуитивно-понятный ГУЙ). Посетители тоже не оставлены разработчиками Plone в обиде, куча "фенечек" вроде live search и календаря идёт штатно с этой CMS. Среди нескольких сотен add-ons попадаются весьма полезные (как например PloneArticle), но напильником работать всё равно приходится, а благодаря питону делается это на раз-два-три, больше времени уходит на чтение доков по Plone. Пока не настроил extern storage, не получилось с наскока, в результате всё содержимое хранится в ZODB, что нехорошо. Содержимого пока немного - сам физ-эксперимент только строится.

>>> Просмотр (1280x1024, 318 Kb)

filin
()

Секретное оружие корпораций или старичка Tcl/Tk ещё рано выбрасывать на помойку

За неделю наваял GUI к управлению триггером на Tcl/Tk, причём последний увидел в первый раз и поэтому одновременно с "ваянием" учил этот самый Tcl/Tk. Впечатления от Tcl/Tk самые приятные, GUI на нём лепятся "нараз", а поскольку компилять/пересобирать после изменений не нужно, разработка идёт почти "со скоростью мысли". Печать канваса в postscript автоматически даёт отчёт, который будет вклеиваться в "бортовой журнал" установки во время сеанса, чему будут несказано рады и народ из смен (не надо записывать ручками), и обработчики (использующие инфу из журнала при обработке). К сожалению есть и недостатки (может я чего не знаю и кто-нибудь знает, как с ними бороться):

* показан только для маленьких проектов, тк набор widget'ов в Tk ограничен (нет, например, выпадающей менюхи) как и их функциональность (привязка мышиных-клавиатурных событий к text часто приводит к глюкам)
* с кодировками проблема (не могу заставить печатать в postscript по-русски, хрен его знает, что за postscript-драйвер используется Tk'ом), выход - в канвасе создавать widget и выводить текст через него, при печати встроенные в канвас widget'ы растеризуются и русские буквы будут присутствовать как часть картинки
* сам Tcl далеко не сахар, видимо его авторы не задумывали его как general-purpose scripting language

Надо "долепить" годоскопы, триггерный процессор, утилиты к нему и всё, GUI готов к труду и обороне.

>>> Просмотр (1280x1024, 133 Kb)

filin
()

конфигурим gdm

gdm достаточно гибок в конфигурации (gdm.conf длиной более 300 строк вместе комментариями), что я и использовал для вывода top вместе с login-окном для быстрого просмотра, что происходит на машине. Смотреть по сети не всегда удобно: пришёл чел, хочет залогиниться на одно из рабочих мест, а некоторые из хостов загружены фоновыми заданиями по самые помидоры, он быстренько выбирает наименее загруженный, логинится и счастливый начинает работу. А теперь подробности:

* сначала надо выставить standard mode вместо graphical для gdm с помощью gdmsetup,

* затем поправить /etc/X11/gdm/gdm.conf:

BackgroundType=0
BackgroundProgram=/etc/X11/gdm/bgr.sh

где bgr.sh простенький скрипт (не забыть про права на исполнение):

#!/bin/bash
/usr/bin/display -window root -geometry +0+0 -colors 16 /etc/X11/gdm/lightrays_with_slclogo.jpg
/usr/bin/xterm +sb -geometry 80x60+10+200 -fn 8x13 -e /usr/bin/top s

выравниваем login-окно:

SetPosition=true
PositionX=680
PositionY=200

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

>>> Просмотр (1600x1200, 95 Kb)

filin
()

RSS подписка на новые темы