metaclass: (Default)
[personal profile] metaclass
Как известно, в оперденях большое количество кода реализует один типичный класс операций - ввод первичных данных.
Безотносительно к тому, что оно все херово обобщаемое даже на уровне работы с сугубо данными (нетривиальные зависимости, которые без sum types плохо моделировать, валидация из разряда "юзеры, умершие 15 нисана получают дополнительную жизнь, если в поле father написано God" и прочее такое) есть еще одна проблема, решения которой, отличного от "специально назначенные женщины-программисты рисуют гуй руками" я не видел.

А именно - layout интерфейса. Обычно оные окна ввода выглядят как 10-20-50 контролов вида "имя поля, данные поля, дополнительные данные вычисляемые из поля (подпись из справочника), кнопочька для вызова справочника или календаря". И если это чюдо не выровнять аккуратно - интерфейс начинает выглядеть как говно. При этом, если интерфейс используется для разных языков - то оно должно быть выравнено еще и для разных длин строк. А еще, желательно, чтобы окно можно было ресайзить и чтобы поля интерфейса ресайзились соответственно, да еще и с учетом допустимых значений (например, целочисленное поле нету смысла ресайзить больше чем 11 символов*ширину символа+хрен пойми какой отступ, зависящий от темы, версии ос, DPI и хрен знает чего, аналогично для дат и прочего).
В итоге, получается, что даже в простейшем случае "вертикально расположены 10 полей ввода" - нужно выровнять их подписи согласно их реальному размеру, учесть идиотизм с отступами, ClientSize, Margin, Padding и прочей чернью, затем выровнять сами поля ввода, выровнять зависимые поля, выровнять кнопочьки справочников и прочую чернягу, сделать минимальный размер окна таким, чтобы это все влазило и было читабельным, проверить на разных dpi, языках, темах UI и версиях виндов, включая модифицированные zvercd-cool-fucked-up-ui-edition и все это очень сильно огорчает.
Простейшие случаи я как-то автоматизировал, но радости все равно не возникает, малейшее дополнение в требованиях, типа "вместо одной кнопки справочника - две для разных действий" и вся генерация гуя ломается. А писать/рисовать гуй вручную, особенно в проклятых дизайнерах - это унижение для разумных существ.

Date: 2015-08-07 10:03 am (UTC)
From: [identity profile] inconceivable2.livejournal.com
А этот есть же, какой-то специальный constraint solver для гуя, вот например (https://en.wikipedia.org/wiki/Cassowary_%28software%29).

Date: 2015-08-07 10:09 am (UTC)
From: [identity profile] metaclass.livejournal.com
Да, я не понимаю, почему бы эти решатели не сделать базовой фичей даже не гуи-тулкитов для языков, а вообще кишков операционных систем.

Date: 2015-08-07 11:46 am (UTC)
From: [identity profile] prepor.livejournal.com
ну так в osx и ios так и есть

Date: 2015-08-07 12:54 pm (UTC)
From: [identity profile] justy-tylor.livejournal.com
Этот "солвер" покрывает лишь те фичи, которые и так в любых Qt/wxWidgets есть. Однако, автоматическое построение GUI это не только layout, но и сама генерация, когда одна и та же информация на большом экране транслируется в список из пяти пунктов, а на мелком в кнопочку "выбрать".

Date: 2015-08-07 05:23 pm (UTC)
From: [identity profile] binf.livejournal.com
это есть в любом уважающем себя гуй-фреймворке

Date: 2015-08-07 10:03 am (UTC)
From: [identity profile] gineer.livejournal.com
Вот, да. +++

Date: 2015-08-07 10:29 am (UTC)
wizzard: (Default)
From: [personal profile] wizzard
насыпать эвристик в констрейнт солвер и/или повыводить из типичных шаблонов, да.

Date: 2015-08-07 10:46 am (UTC)
From: [identity profile] nealar.livejournal.com
Для начала хотя бы выписать эти эвристики

Date: 2015-08-07 01:02 pm (UTC)
From: [identity profile] justy-tylor.livejournal.com
Солверы к этой нише слабо приспособлены. GUI базируется на человеческом восприятии, поэтому требуется перебор красивых/удобных решений (проверяем, если не помещается - переходим к следующему), а не попытки интерполяции в каком-нибудь cassowary.

Date: 2015-08-07 10:56 am (UTC)
From: [identity profile] hshhhhh.livejournal.com
прозвучит, конечно, смешно, но HTML же просто идеален для таких интерфейсов.

Date: 2015-08-07 11:10 am (UTC)
From: [identity profile] sbj-ss.livejournal.com
Да, в этом что-то есть. Правда, может вылиться в CSS constraint solver.

Date: 2015-08-07 11:13 am (UTC)
From: [identity profile] metaclass.livejournal.com
Да, потому что он обычно полноэкранный и модальных окон там не предусмотрено и вообще сплошной flow layout. Хоть ты на webkit в качестве гуя везде переходи.

Date: 2015-08-07 11:14 am (UTC)
From: [identity profile] hshhhhh.livejournal.com
И это не такой уж и плохой вариант. Вот steam же так и сделан и ничего.

Date: 2015-08-07 11:39 am (UTC)
From: [identity profile] hshhhhh.livejournal.com
Хотя, конечно, гуй не вебките и жрет, и тормозит :)

И зоопарк технологий!

Всё как вы любите.

Date: 2015-08-07 03:52 pm (UTC)
From: [identity profile] binf.livejournal.com
Потому что под веб есть FRP, гуй можно сделать модульным, потом просто вставлять компонеты куда надо. А под десктопом есть только монструозные MVVM фреймворки с нетипизированным дата биндингом - и это в лучшем случае. Как обычно, где С++ и ООП - там полный факап.

Date: 2015-08-07 11:02 am (UTC)
From: [identity profile] cross-join.livejournal.com
Массовое овладение разработкой формочек сделало ручной расклад неунизительным и дешевым занятием.

Date: 2015-08-07 11:08 am (UTC)
From: [identity profile] swizard.livejournal.com
Когда я приду к власти — все опердени в стране будут работать на базе емакса.

Date: 2015-08-07 11:10 am (UTC)
From: [identity profile] nealar.livejournal.com
/me полез в профиль уточнять в какой стране это будет

Date: 2015-08-07 11:28 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Чтобы там оказаться или наоборот оттуда убежать?

Date: 2015-08-07 11:36 am (UTC)
From: [identity profile] nealar.livejournal.com
А что, emacs оставляет варианты?

Date: 2015-08-07 08:46 pm (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
да, очевидно же, что построение коммунизма в одной, отдельно взятой стране -- невозможно.
так что разницы не будет

Date: 2015-08-07 11:16 am (UTC)
ext_659950: (normal)
From: [identity profile] perplexed-bear.livejournal.com
Гм. А нейронную сеть обучить строить интерфейс?

Date: 2015-08-07 11:29 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Нужно сто миллионов хороших примеров, иначе не научится.

Date: 2015-08-07 11:38 am (UTC)
From: [identity profile] nealar.livejournal.com
Если взять мясную нейронную сеть, то достаточно сто тыщ примеров.

Date: 2015-08-07 11:42 am (UTC)
ext_659950: (Default)
From: [identity profile] perplexed-bear.livejournal.com
Или толковая обратная связь. А с этим уже полегче.

Date: 2015-08-07 01:17 pm (UTC)
From: [identity profile] justy-tylor.livejournal.com
Проблемы "как это будет таким-то шрифтом в таком-то контроле с такой-то темой в завтрашней операционке" решаемы, просто нужен опыт и время, желательно в образе отдельного спеца, который будет заниматься исключительно GUI. Фактически, это написание и поддержка своего грида, только с более хитрыми условиями.

А если ресурсов нет, то используется какой-нибудь готовый грид типа "простыня". Ибо нефиг.

Date: 2015-08-07 03:22 pm (UTC)
From: [identity profile] osdm.livejournal.com
XAML и его потомки не подходят?

Date: 2015-08-07 03:37 pm (UTC)
From: [identity profile] clayrat.livejournal.com
вот тут что-то с FRP мутят http://www.vpri.org/pdf/m2013003_ksapps.pdf

Date: 2015-08-07 03:55 pm (UTC)
From: [identity profile] berezovsky.livejournal.com
рисовать и придерживаться рекомендаций MS по рисованию интерфейов, сколько между чем чего должно быть

Date: 2015-08-07 04:46 pm (UTC)
From: [identity profile] binf.livejournal.com
засучить рукава и начать вручную закатывать солнце

Date: 2015-08-07 04:04 pm (UTC)
From: [identity profile] binf.livejournal.com
1) Чтобы гуй не выглядел колхозно-уёбищно, надо взять какую нить Metro UI либу. Я пользуюсь опенсорцной Mahapps Metro, но щас есть много качественных с платным саппортом, для опердней там расценки смешные вообще. тогда можно делать Гуй без проф.дизайнеров и UXнутой хуеты

2) Надо, чтобы бизнесс-лоджик вызывал гуй, а не наоборот. Чтобы гуй можно было делать из repl. Тогда проще писать тесты, лучше модульность, все дела

3) Я обычно делаю маленькие вьюшки на жутком Хамле без С# или с минимумом C#. MVC-биндинг (или SmartUI обвеска в зависимости от задачи) и вся логика Гуя - на F#, так проще жить
Edited Date: 2015-08-07 04:06 pm (UTC)

Date: 2015-08-07 04:08 pm (UTC)
From: [identity profile] berezovsky.livejournal.com
А у тебя софтины для широкой планеты или для ограниченного отечественного товарища?

Date: 2015-08-07 04:25 pm (UTC)
From: [identity profile] binf.livejournal.com
Второе конечно

Date: 2015-08-08 10:11 am (UTC)
From: [identity profile] lekard.livejournal.com
property grid по-умолчанию + дать пользователю в руки простой инструмент чтобы он сам себе формочки рисовал если ему где потребуется. С простым генератором "рыбы" формы на основе данных, но чтобы пользователь сам потом уточнял расположение, размеры и т.д. контролов.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 6th, 2025 04:08 pm
Powered by Dreamwidth Studios