Версия 3.1 (build 08 Nov 2019)



Дисклаймер.

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

2. Эта программа написана непрофессионалом, непрограммистом по образованию (я учитель физики, преподаватель математики, а в последнее время – еще и нанотехнолог)).

3. Эта программа пристально не отлажена, и никогда не будет.

4. Если эта программа разрушит ваши данные, то ущерб никто не возместит.

5. Справочная система не отличается полнотой отсутствует, как и техническая поддержка.


Известные или возможные ошибки (в основном, связанные с графикой).

Очень вероятно, что при работе с разными графическими акселераторами будут проблемы; программный рендеринг работает хорошо (не в смысле быстродействия; скорее, он работает правильно). Тестировалось только на процессорах nVidia (RIVA - 128, драйверы для Win9x и NT 4.0 версии 4.10.01.0250; TNT; TNT2-M64, драйверы 4.00 и Detonator 3.6x).
UPD: 2011: всё нормально работает на всём, что попадалось мне и аспирантам ПГАСА/ПГУАС/МГСУ.

Надписи (метки значений и др.) в окне поверхности отсутствуют, так как автору неизвестен хороший способ их вывода. Испробовано 3 способа: wglUseFontOutlines (некрасиво), wglUseFontBitmaps (катастрофическое падение быстродействия) и непосредственный вызов glBitmap для матриц DOS - овских шрифтов (тот же результат, что и для wglUseFontBitmaps). Правильный способ вывода текста используется в Q/Q2 - там при выводе текста используются текстурированные прямоугольники. К сожалению, растровый вывод дает непечатную картинку (или требует усложнения математики). В ближайшее время наличие текстовых меток в окне поверхности не планируется.
UPD: 2000: Вывод сцены OpenGL в метафайл отлажен и работает – но в других программах. Вы можете обратиться к автору и получить код библиотеки LibV - продукта скорее философского, нежели практического плана. Адаптировать сервисные функции из LibV для Градиента чуть проще, чем переписывать весь графический вывод заново ...
UPD 2012: Он есть: nv-path-rendering. И не говорите мне про переносимость. Поддержка OpenGL аппаратной платформой NVIDIA вне конкуренции, особенно в UNIX-like системах.

Если Вы будете смотреть исходный код библиотеки 3dcore.dll, то там в заголовках стоят комментарии типа «Это не работает или не проверено. Не используйте.». Многие вещи в 3dcore были написаны просто в учебных целях (автор учился сам у себя :) или «про запас». Если Вы захотите, к примеру, наложить на поверхность «хромовое покрытие», то Вам придется заняться отладкой библиотеки. Но лучше ее не отлаживать, а просто выкинуть на помойку. :(

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

UPD: не отображаются кириллические надписи в интерфейсе при работе в англоязычной венде или из под wine-а. Увы, никакого юникода и надписи вхардкодены в исходник. Можно переделать весь интерфейс на английский. Или устанавливать переменную LANG в ru_RU.ЧТОТОТАМ (например, ru_RU.KOI8-R или ru_RU.UTF-8) перед запуском из вайна (проверено на OpenSUSE 11.4 и на моей любимой операционке). Или в вендовой понели управления установить для неюникодовых программ кириллицу. Да, еще из-под вайна не работает инициализация OpenGL. Поправлю как-нибудь. Из-под виртуалбокса OpenGL-вывод пробрасыватся нормально.


История программы.

Этот проект начат в октябре 1998 г. В январе 1999 г. была готова версия 1.0. Она позволяла работать с планами полного факторного эксперимента (2-4 фактора, линейная модель) и центральными планами второго порядка. Наряду со статистическим анализом данных поддерживались: поиск экстремума (перебор и случайный поиск), экспорт данных для построения диаграмм (диаграммы можно построить, импортировав данные в MS Excel). В самой программе возможность построения графиков отсутствовала. Справочной системы не было, а некоторые пункты меню были заблокированы или выводили сообщение о неполной поддержке выбранных функций (типичный пример сырого продукта).

В январе 1999 г. перепланирована структура программы и ее функции. Внутренняя организация изменяется таким образом, чтобы выделить два сервера (математики и трехмерной графики) и интерфейсную часть. Часть кода, связанного с графикой, пишется на WATCOM C (геометрические преобразования, векторная/матричная алгебра); инициализация и завершение работы OpenGL и некоторые служебные операции пишутся на Паскале. Возможно, после окончания диссертации автор добавит поддержку Direct3D.
UPD: 2001: не добавлю.
UPD: 2011: точно не добавлю.

Основные цели, которые преследовались при разработке архитектуры новой версии - масштабируемость и легкость сопровождения. Автор имеет опыт сопровождения программы для Win32, написанной "с нуля" на WATCOM С++, и не желает иметь подобный опыт в будущем. Как бы хорошо ни была структурирована программа, написанная без использования каркасной библиотеки, как только объем кода превышает границу 100 - 150 Кб, сопровождать ее становится затруднительно (UPD: это бред). Пакет Borland Delphi, с которым автор работал около полугода, оказался на удивление удобным в использовании. Хотя несколько недель автору потребовались только на обратное переучивание с C++ на Паскаль (постоянные пропуски "then" и "do", использование операции "!=" вместо "<>"... кошмар !).

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

В конце марта была готова версия 2.0. В ней были реализованы такие возможности, как: сохранение плана как единого целого (в версии 1.0 приходилось все блоки данных сохранять отдельно); автоматическое обновление данных в окнах редактирования; поиск экстремума методом покоординатного спуска; построение графиков; «интеллектуальное» упорядочение окон на экране (очень хитрый алгоритм: стандартному Tile из Windows до него далеко:). Однако общая концепция пользовательского интерфейса осталось прежней - как в Delphi - линейка с меню и панелью инструментов и кучка окон. На это были жалобы (это, и правда, неудобно). Справочная система так и не была написана. Но самое главное, что из нововведений почти ничего правильно не работало, а в библиотеке трехмерной графики были одни ошибки (многие вещи, к сожалению, не отлажены до сих пор) (UPD: и не будут никогда). Поэтому версия 2.0 есть только у автора (кстати, она без собственного имени) (UPD: давно потеряна).

В апреле - мае полностью переделан интерфейс. Стандартная для Windows концепция MDI - интерфейса использована не по назначению: для управления множеством окон одного файла данных (не стандартно; это плохо, но не очень - интерфейс в 3D Studio MAX тоже нестандартный, но очень удобный, если привыкнуть). Масса интерфейсных усовершенствований (мелких и не очень). Добавлены «Мастера» подготовки данных для графиков (раньше там был страшный такой диалог - огромный, одно поле изменяется - в других значения пересчитываются... автор его неделю отлаживал). Добавлено сохранение настроек (запоминается положение главного окна; запросы на операции, управление генерацией отчета, параметры диаграммы, параметры графиков). Начинает создаваться справочная система. У программы появляется имя.

В конце мая исправлены основные ошибки версии 3.0. С симплекс - планами по прежнему работать неудобно: для них стандартные методы поиска экстремума и построения графиков не работают. Проводится последнее значительное изменение: поддержка надстроек (18 - 20 мая). Надстройки пишутся на ObjectPascal. Добавлены две стандартные надстройки: первая служит для построения графиков по результатам вычисления значений полинома Шеффе, вторая - для поиска экстремума той же модели.

23 мая 1999 исправлено: неправильная обработка кириллических имен файлов, неправильное перемещение чисел из таблицы в буфер обмена. Добавлено: возможность отмены в таблице (как и в старых версиях MS Excel, можно отменять только самое последнее действие); заполнение выделения в таблице при завершении редактирования нажатием Ctrl+Shift+Enter; более реалистичное управление окном поверхности (теперь моделируется масса камеры).

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

В сентябре 1999 замечена интересная особенность дополнений - они останавливают NT (!!!) - KMODE_EXCEPTION_NOT_HANDLED. Очень тяжело. В построении #276 остановка происходит при повторном вызове дополнения. При отладке - то работает, то выдает исключения типа EVariantError. Обычно ошибки или остановка NT происходит при показе формы - диалога дополнения. Никакими фокусами со временем/способом создания форм исправить ситуацию автору не удалось. Паскальский код выкидывается, доводится до ума код на C++ (компилятор - Visual C 5.0), и дополнения начинают переписываться на нем.

10 октября дополнения переписаны на C++. Похоже на правильную работу.

С построением 278 использован другой инсталлятор (IS Express) - инсталлятор Wise под Win95 не заменял старую библиотеку comctl32.dll на новую (автор или что-то снова перепутал, или одно из двух).

Построения с 280 и 282 - изменения в моделях и дополнениях. Добавлено дополнение для аппроксимации данных экспоненциальной зависимостью.

25 января 2000 г. исправлены мелкие баги в работе диалога поиска экстремума и отключены проверки, не позволяющие обрабатывать неповторяемые опыты (в планах без реплик). В построении 284 иначе генерируется отчет (учтена невозможность статистической обработки). 15 марта – построение 285. Исправлена (читайте – залатана) неверная работа окон редактирования – при переходе в другую ячейку мышью содержимое редактируемой ячейки не обновлялось. Вообще, интерфейсный код окон редактирования пора переписать заново, он становится слишком нечитабельным.

19 марта дописываются 5 слагаемых четвертой степени.

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

В ноябре 2000 исправлены ошибки в обновлении отчета для планов без реплик.

В конце декабря 2000 исправлены мелкие интерфейсные недоработки.

В начале апреля 2001 исправлены интерфейсные недоработки. Правится каркасная библиотека 97-го года (теперь она компилируется VC 6.0).

С 2002 г. - по мелочи. Экспорт данных для построения изолиний и поверхностей отклика переделан в формат «Surfer»-а (пример GRD-файла и векторная картинка, построенная по такому представлению).

Сентябрь 2011 – исправления в коде каркасной библиотеки 97-го года, компилируется VC 2010 (и получившийся dll тянет зависимость на последнюю версию библиотеки времени исполнения языка C, поэтому лучше компилировать VC 6). Исправления в диалогах открытия и сохранения. Последний раз поправлен HLP-файл (увы, последний ворд, корректно редактирующий rtf-файлы для help workshop-а – это ворд 95, а его непросто установить на 64-разрядной венде).

Ноябрь 2011 – убран основательно доставший меня за 12 лет идиотский секундный тайм-аут при показе главного окна. Он был от таймера, который выставляет статус-барное время. Чтобы ничего не менять, я однократно этот таймер в 100 раз ускорил, а потом опять вернул на односекундный тик. Ура, можно менять версию на 4.0: «Градиент» теперь загружается в 100 раз быстрее )

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

В марте 2012 г. добавлен показ (только при выборе «Игнорировать незначимость») численных значений статистически незначимых параметров модели (plan.pas, 2587).

В мае 2013 г. дописаны линейные и квадратичные слагаемые с пятым фактором.

В декабре 2017 г. дописаны трехточечный симплекс-вершинный план и линейная модель для него.

В январе 2018 г. все вхардкоденные концы строк 0x0D заменены на 0x0A.

В 2019 г. изменен размер одного из диалоговых окон и названия моделей состав-свойство. Внимание! Старые файлы с этими моделями открываться будут, но тип плана будет "Определен пользователем".


Благодарности

Эта программа в ее нынешнем виде не могла бы существовать без действий определенных людей и организаций. Автор хочет выразить признательность:


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


<Последнее изменение: >