Переписывание интерфейса пользователя в системе

Добавил(а) Андрей Рогожников больше 5 лет назад

Всё ниже - текст Стаса

На данный момент самой большой проблемой нашей системы является привязка к интерфейсу VCL. Эта привязка сильно тормозит разработку нового функционала и ОЧЕНЬ сильно мешает поиску и отладке ошибок найденных в ходе эксплуатации. Основными причинами неудобства дальнейшей разработки с использование VCL является высокая сложность смены версии, высокая стоимость, отвратительный отладчик среды разработки.

Но наша система исторически была написана с использованием VCL. За последние несколько лет мы смогли разделить нашу систему, чтобы она удовлетворяла парадигме model-view-control (хотя бы частично). Данные переработки позволили сделать консольную версию, использующую для сборки MSVC10, версии с использованием MPI и OpenMP(не разу не пользовался этими версиями, но думаю что они работают(респект Андрею)).

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

Весь пользовательский интерфейс в нашей системе использует событийную модель взаимодействия с пользователем.

На данный момент широко применяются следующие библиотеки реализующие пользовательский интерфейс: Qt, Gtk, WCF, MFC. Начнём в обратном порядке.
  • MFC - библиотека от MS устарела, высокая сложность разработки, поддержки. Реализация простейших действий пользователя требует много времени.
  • WCF - используется с C# и нам фактически не доступна, так как придётся писать обёртки над нашим кодом в шарпе.
  • Gtk – кросплатформенная библиотека, бесплатная и достаточно сложная в использовании.
  • Qt – наиболее близкий по идеологии проект кросплатформенной библиотеки для пользовательских интерфейсов. Здесь также используются событийные модели. Есть визуальные средства для создания форм и описания действий на различные события генерируемые пользователем.
При переписывании пользовательских интерфейсов используют два подхода:
  1. Революционный. Полностью меняется модель взаимодействия с пользователем. Меняются диалоги, формы и правила взаимодействия.
  2. Эволюционный. Меняют только часть интерфейсов взаимодействия, с целью увеличь простоту и удобство для пользователя. Этот подход позволяет радикально сократить время появления новой рабочей версии.

На 1 варианте останавливаться не хочу, так как он слишком трудоёмок и требует очень солидных исследований.

Я считаю что нам подходит вариант 2. То есть эволюционный. Для использования этого варианта развития из приведённых библиотек нам подойдёт QT. Причин несколько:
  1. По логике работы очень похожа на VCL.
  2. Есть вполне терпимые средства для разработки.
  3. Можно собрать код с использование MSVC10.
  4. Если по шаманить, можно собрать библиотеку статической форме.
  5. Есть бесплатная версия, которая подойдёт нам для ведения разработки.
  6. Поддерживается множеством платформ.
  7. На данной библиотеке написано очень много кода в свободной среде, значит в ближайшие годы не умрёт.
  8. Есть платная версия которая позволит скрыть код и не открывать его при продаже.

Проблемы, которые нам надо решить.

  1. Цель которую мы преследуем в первую очередь.
  2. Надо определиться с тем функционалом, который мы собираемся перенести в первую очередь.
  3. Нужно решить какой уровень проработки интерфейсов нам требуется.
  4. Определить дату, к которой у нас должен получиться рабочий проект-макет.

Первые шаги.
Хочу понять чётко цель. Андрей озвучил желание иметь версию для показа на конференции. Что именно показывать на конференции, какой функционал, на чём мы делаем акцент в нашей презентации? Хочу получить хотя бы пространный ответ, из которого можно будет задавать вопросы для выяснения приоритетов. Кто будет заниматься? Точнее даже так: у кого есть желание участвовать в проекте.

Моё предложение.
Наверное стоит начать с проверки различных гипотез. Тут меньше сложного взаимодействия, можно синхронно перенести вид форм и их взаимодействие из VCL. Самой сложной частью будут графики, так как они очень сильно завязаны на фичи VCL. Но все эти вопросы решаемы. В принципе и моделирование не требует много сил для реализации интерфейса. Перенос форм с настройками может вообще быть отложен, достаточно инициализации из файла.

Нужно
Повесить текст для обсуждения, например в redmine и далее вести общение там.

Предлагаю не тянуть и быть активнее.


Ответы (19)

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Alisa Gorbunova больше 5 лет назад

Стас,спасибо, за текст) Я очень хочу, чтобы что-то сдвинулось уже в этом направлении.

Есть желание участвовать, но у меня пока очень смутное представление обо всём этом, поэтому скорость моей работы вряд ли будет высокой.

Всё верно. Хочется иметь такую версию программы, которую можно будет показать, и... возможно, предоставить для пользования. Акцент предполагается сделать на проверке гипотез с "домоделированием".

И да, времени не так много. Хотелось бы иметь некий макет к концу мая.

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Станислав Лемешко больше 5 лет назад

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

Я постараюсь сегодня завтра посомтреть что уже есть в проекте под qt и что под него можно использовать.

на данный момент у нас есть следующие большие сегменты программы:
1 Проверка (то есть задание критериев, выборок, законов, и собственно выполнение проверки и получения результатов)
2 Графика( тут всё достаточно сложно, так как графику скорее всего приёдтся очень сильно переделывать, что совсем не хорошо)
3 Настройки (те глобальные вещи которые вычитываются из файла ini при запуске системы)
4 Сеть (этот кодв принципи скорее всго не притерпит ни каких изменений, так как и так собирается спокойно компилятором и не зависит пользовательского интерфейса)
5 Моделирование (для простого использования достаточно перенести одну форму, она покрывает большой пласт возможностей системы)
6 Требуется определится с механизмом взаимодействия модулей с формой, конечно как костыль можно использовать и существующую парадигму(схему), но она сильно связывает компоненты и ограничивает параллельную обработку.

Прошу расставить приоритеты по пунктам в порядки убывания степени важности и высказать свои мысли по их реализации.

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Андрей Рогожников больше 5 лет назад

Для начала — о состоянии проекта "qt", который есть в репозитории.

Основное, что нужно о нем знать: это лишь проба пера, и я не считаю, что на него следует слишком сильно опираться. Там есть здравая мысль о том, как следует делать интерфейс моделирования, я считаю ее очень удачной. В отличие от "мастеров", гигантская форма моделирования сносит крышу любому неподготовленному пользователю, кроме того, она сложнее в написании, отладке и понимании. Перенести ее в таком же виде на Qt было устрашающей задачей в отсутствие нормального редактора GUI в Visual Studio. Мы еще вернемся к этому.

До определенного момента я следил за проектом, внедрял в него новые файлы и проверял, как он собирается, но сейчас есть некие ошибки компиляции, и повода искать их причины не было. Проект собирался под Qt версий 4.6.х и 4.7.х.

О том, как я вижу интерфейс. Необходимый минимум фич — это:
  • загрузка выборок;
  • описательная статистика;
  • проверка гипотез о согласии;
  • моделирование неизвестных распределений статистик в интерактивном режиме;
  • графики;
  • моделирование распределений статистик критериев.

Главное окно программы должно быть таблицей, в которую загружаются выборки, это ключевой момент интерфейса. Наглядность и простота работы от этого возрастают невообразимо, это фактически мировой стандарт. В Qt для этого есть поддержка Model-View-Controller, и это сильно лучше ручного программирования кликов, выделений и прочих низкоуровневых операций.

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

О сроках. Если реально оценивать мое время, я не смогу до середины мая сколько-нибудь плотно заниматься интерфейсом. Для меня в Qt пока что много неясных моментов, над тривиальными вещами приходится неплохо задумываться. Это все говорит о том, что моя отдача не будет высокой, а до конца мая останется пара недель.

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Андрей Рогожников больше 5 лет назад

Текущие версии: QtSDK 1.2.1 (с Qt 4.8.1), Qt Visual Studio Addin 1.1.10. Все устновщики доступны на официальном сайте, рекомендую сразу скачивать офлайновые версии.

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Аноним больше 5 лет назад

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

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Андрей Рогожников больше 5 лет назад

Какой план? Мы говорим о приоритетах.

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

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

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Alisa Gorbunova больше 5 лет назад

Я полностью согласна с Андреем, что основой интерфейса должна стать таблица. И в приоритете нынче, конечно же, проверка гипотез.

Надо с чего-то уже начать в самом деле! Я полна энтузиазма и готова приложить всевозможные силы, только я действительно не очень шарю в этом)

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Станислав Лемешко больше 5 лет назад

Андрей Рогожников писал(а):

О том, как я вижу интерфейс. Необходимый минимум фич — это:
  • загрузка выборок;
  • описательная статистика;
  • проверка гипотез о согласии;
  • моделирование неизвестных распределений статистик в интерактивном режиме;
  • графики;
  • моделирование распределений статистик критериев.

Я конечно сейчас стал мало общаться со студентами, но всё же... строчка с необходимый минимум фич и список, слабо говорят о приоритетах.
К тому же этот список не особо отличается от первоначального.

В первую очередь делаем эти пункты:

  • загрузка выборок;
  • описательная статистика;
  • проверка гипотез о согласии;
  • моделирование неизвестных распределений статистик в интерактивном режиме;

Если будем укладываться, то допиливаем графики.

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Андрей Рогожников больше 5 лет назад

К тому же этот список не особо отличается от первоначального.

Чтобы он не особо отличался, нужно починить сеть и включить ее в список:)

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Станислав Лемешко больше 5 лет назад

Пообщался с QT....

Интересовала цена вопроса использования QT.
Вот собственно и ответ.

На данный момент схема лицензирования под интересующие вас платформы выглядит следующим образом:

Qt Commercial License
Single Operating System € 2 995
Multiple Operating Systems € 4 195
Qt Desktop Full Framework

Лицензия является бессрочной и включает в себя год обновлений (новые версии Qt) и технической поддержки. Если вы захотите и далее получать обновление продукта, то через можно приобрести обновление лицензии.
Лицензия является именной, регистрируется на одного разработчика.
Более подробную информацию о лицензиях вы также можете получить здесь: http://www.digia.ru/index.php?id=86

Далее задал пару вопросов:

Я правильно понимаю, что по истечению года мне просто перестают приходить обновления, но я могу спокойно сидеть на своей версии QT? Сколько стоит обновления лицензии? Можно ли как-то снизить цену?

Qt Desktop Full Framework что в себя включает?

Разъясните пожалуйста особенности использования открытой версии. Я правильно понимаю суть LGPL 2.1 если просто использую динамическую линковку библиотек QT и указываю что использую QT, то могу не открывать свой код?

Прошёл по ссылкам и ни где нету цен? Это какая-то тайна или вы каждому свою цену назначаете?_

Прислали ответ.

1. Да, вы правильно понимаете. Мы рекомендуем обновлять лицензию, дабы иметь доступ к Customer Portal, чтобы и после истечения года получать обновления, но это не обязательное условие. Если вы решите не покупать обновления, вы все равно можете пользоваться той версией Qt Commercial, которая была последней доступной во время поддержки лицензии.

Стоимость обновлений лицензий Single OS – 1085 евро, Multi OS – 1534 евро.
2. Подробнее узнать что технически включает в себя Qt Desktop Full Framework можно здесь: http://www.digia.com/en/Qt/Offering/Qt-Framework/

3. Основное отличиеLGPL/Commercial – поддерживаемые платформы: Qt Commercial – постоянные тестирования и 100-процентная совместимость с указанными desktop и embedded платформами.

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

4. Политика компании Digia такова, что мы не публикуем цены на сайте. Цены для всех одинаковы.

Стоимость зависит от количества лицензий. Мы можем предложить вам скидки – все это обсуждаемо.

Если так посмотреть, то можно пока использовать открытую qt и линковать её динамически, а потом если решим продавать прикупить лицензию хотя бы одну для сборочной машины.

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Станислав Лемешко больше 5 лет назад

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

Так же далее предлагаю делать такие макеты на все формы. Это позволит проще разрабатывать и сразу понимать как и что планирует взаимодействовать.

Комментарии словами приветствуются.

Жестокий пример в прикреплённом файле.
Если вы будете пользовать каким-то более удобным способом, то я только за, главное сообщите о нём.

Теперь о насущном....
Проект на QT собирается в дебаге вижел студией. НО :

1 почему-то после каждого изменения формы из сборки проекта убираются с генерированные МОС файлы и их приходится через свойства файла опять включать в сборку(на файле горит красненький кирпич с права от иконки файла, если горит слева то он не включён в текущую конфигурацию). Возможно это глюк конкретной версии QT, а может мои кривые ручки что-то покрутили в проекте.

2 НЕ получается нормально собрать релиз версию, она после не запускается в принципе. В чём причина пока не понял, но не работает.

3 Дебаг штука отличная и как ни странно работает без сбоев даже глубоко в QT.

4 Дебаг сборка основана на инкриментальном билде! для удобства собирать через F7 или build, rebuild как и раньше пере собирает весь проект

5 работа с формами и виджетами имеет свои не приятные особенности, пока всё сделаешь ручками можно сильно устать, но результат потрясает

6 нужно чинить ворнинги, или пока их вообще отключить, но последнее крайне негативно скажется на поиске ошибок.

7 Долго пытался разобраться в логике предложенной создателем формы, не осилил.

9 Постараюсь сегодня сделать описания требования по реализации GUI интерфейсов системы и принципа их использования.

10 идея про wizard для моделирования мне понравилась, но тут надо ещё очень хорошо подумать.

20120424_120220.jpg (709,224 КБ)

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Станислав Лемешко больше 5 лет назад

Здесь будем вести обсужение дизайна интерфейса
Обсуждения дизайна интерфейса пользователя

Туда же прикреплять свои макеты форм пользователя.

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Андрей Рогожников больше 5 лет назад

Я так и не нашел на сайтах nokia и digia упоминаний о графическом редакторе интерфейсов под Visual Studio. Этот продукт прекратил существование?

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Станислав Лемешко больше 5 лет назад

не он платный! и стоит игрушка на одного разработчика в совокупной лицензии 2995 евро. его и раньше не было бесплатного... Просто народ раньше выкладывал коммерческую сборку плюгина для вижел студии, а сейчас днём с огнём...

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Андрей Рогожников больше 5 лет назад

Покажи ссылку на упоминание этого инструмента, пожалуйста.

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Станислав Лемешко больше 5 лет назад

У меня нету ссылки, это просто часть плюгина на разработки в вижел студии, будет выглядеть почти как кодегир.

Я постараюсь найти эту штуку и тебе вышлю.
просто окно QTDesigner будет внутри таба вижел студии.

У QT для комерческой лицензии другой пакет, и он вылизан по сравнению с опенсорсной очень сильно.
Я на комерческой версии года два назад работал. Вообще по большому счёт абсолютно не нужен дизайнер, ручками получается даже лучше.

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Андрей Рогожников больше 5 лет назад

Если бы просто. Там ведь важна связь между редактором и кодом. Но если найдешь, присылай. Нынешний триал на 30 дней такое не включает?

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Станислав Лемешко больше 5 лет назад

не пробовал. в инете есть старые верси 4.6 самая последняя. на рутрекере

Comment

RE: Переписывание интерфейса пользователя в системе - Добавил(а) Андрей Рогожников больше 5 лет назад

В этих набросках я нарисовал, каким я вижу новый интерфейс.
Программка Balsamiq Mockups, с помощью которой это рисовалось, очень располагает к фантазии, так что всем велкам подключаться!
http://www.balsamiq.com/products/mockups

New_Interface.rar - Исходники набросков интерфейса (56,818 КБ)

myBalsamiqProject.pdf - PDF с набросками (664,75 КБ)

(1-19/19)

Ответить