# Версия 3.1 (построение 290.0.2.2)

Смирнов В.А., 1998 - 2011
Эта программа распространяется в надежде, что окажется полезной, по без всяких гарантий. Условия распространения оговорены лицензией BSD.

### Будьте осторожны.

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

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 для Градиента чуть проще, чем переписывать весь графический вывод заново ...

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

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

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

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

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

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

Основные цели, которые преследовались при разработке архитектуры новой версии - масштабируемость и легкость сопровождения. Автор имеет опыт сопровождения программы для 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. Исправления в диалогах открытия и сохранения. Последний раз поправлен диалог «О программе» и HLP-файл.

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

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

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

- Аспирантам кафедры «Строительные материалы» Пензенской ГАСА, которые подарили идею этого проекта и морально поддерживали автора в ходе работы.

- Работникам кафедр «Строительные материалы» и «Технология бетонов, керамики и вяжущих» Пензенской ГАСА, которые приняли участие в использовании программы и внесли ряд предложений по ее организации.

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

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