Здравствуйте, Sheridan, Вы писали:
M>>Но это не снимает вопроса способе задания аргументов S>Всмысле? я ж явно показал — json. S>Или, если мимо автоматизирующей сборку тулзы, то в environment запихнуть можно. Примеры по ссылке смотрел?
Здравствуйте, Sheridan, Вы писали:
M>>Можно ли там выбор из списка организовать? Множественный выбор из списка, и тп? M>>Откат на пару шагов назад с выбором новых значений и переходом по другой ветке? S>Ну так можно и dialog пользовать, ежели так нужен интерфейс S>Image: adventure_dialog-radiolist.png
Здравствуйте, Marty, Вы писали:
M>Консолька тут явно лишняя, не?
Интерфейс явно лишний.
Дело в том, что с ростом сложности шаблона будет расти и сложность интерфейса, причём сложность интерфейса будет расти сильно быстрее. Например, понадобился тебе именованный список именованных списков и приехали, в интерфейсе забодаешься реализовывать.
При отсутствии же интерфейса, если описывать параметры в json, то сложность json файлика никогда не превысит сложность шаблона, тебе не надо будет думать о реализации интерфейса, т.е. не надо будет отвлекатьсь на второстепенные сущности.
Ну и, наконец, при таком подходе, при необходимости, эта генерация может быть совершенно легко автоматизируема.
Здравствуйте, Sinclair, Вы писали:
M>>Это как? Вот у меня есть опция, где-то в коде она проверяется, что равна одному из пяти-десяти фикс значений, и что, такой автокомплит бывает? S>Конечно. ValidateSet.
M>>Или, например, сам шаблон задается в ходе выбора в визарде, и последующие возможные переменные зависят от того, какой шаблон выбран. Как вот это всё нормально в консольке организовать? S>Да, такое тоже возможно. Parameter Sets.
S>https://adamtheautomator.com/the-powershell-parameter/
Есть ещё более гибкий вариант, который почему-то мало где описан: Register-ArgumentCompleter (начиная с 5 версии входит в powershell, до этого ставится через модуль TabExpansionPlusPlus), он позволяет просто зарегистрировать функцию, которая будет дополнять аргумент:
function Test($Name) {
Write-Host $Name
}
Register-ArgumentCompleter -CommandName Test -ParameterName Name -ScriptBlock { (ls C:\).Name }
После этого для Test -Name <tab> будет выведены имена файлов в C:\. Причём в эту функцию передеются уже заданные параметры, и можно на их основе делать автодополнение.
M>>>Или, например, сам шаблон задается в ходе выбора в визарде, и последующие возможные переменные зависят от того, какой шаблон выбран. Как вот это всё нормально в консольке организовать? S>>Да, такое тоже возможно. Parameter Sets.
S>>https://adamtheautomator.com/the-powershell-parameter/
S>Есть ещё более гибкий вариант, который почему-то мало где описан: Register-ArgumentCompleter (начиная с 5 версии входит в powershell, до этого ставится через модуль TabExpansionPlusPlus), он позволяет просто зарегистрировать функцию, которая будет дополнять аргумент: S>
S>function Test($Name) {
S> Write-Host $Name
S>}
S>Register-ArgumentCompleter -CommandName Test -ParameterName Name -ScriptBlock { (ls C:\).Name }
S>
S>После этого для Test -Name <tab> будет выведены имена файлов в C:\. Причём в эту функцию передеются уже заданные параметры, и можно на их основе делать автодополнение.
PowerShell и его крутые фичи — это конечно круто, но, на мой взгляд, уже слишком круто. А гуя с ними так и не сварить.
Вот и получается, что проще запилить свой DSL с интерпретатором, чем использовать PowerShell или что-то подобное.
Свой интерпретатор хотя бы не сломается при каких-то обновлениях.
Здравствуйте, Marty, Вы писали:
M>Ну, в принципе, довольно интересно. Но всё же не понятно, чем консолька лучше гуя?
В основном — тем, что у неё есть кривая обучения. Начинаешь с простого, потом постепенно осваиваешь всё более новое.
При этом под рукой — хистори, и не нужно мучительно вспоминать, а что же такого я "натыкал" в прошлый раз, что получилось не совсем то, что нужно.
Можно легко строить свои "надстройки" — т.е. если тебе часто приходится вызывать утилиту с длинным списком "одинаковых" параметров, и отличиями в одном-двух местах, то в пару строк ты делаешь "свою" утилиту, которая спрашивает только пару параметров, а остальное подставляет.
Легко встраивать вызов этой утилитки в любой скриптинг. Т.е. ты не обязан интерактивно прощёлкивать шаги визарда.
M>Можно ли там выбор из списка организовать? Множественный выбор из списка, и тп?
Да. Да. M>Откат на пару шагов назад с выбором новых значений и переходом по другой ветке?
Да.
Ну, не так идеально, как в хорошем гуи-визарде, но вполне неплохо. Тут главное вот что: сам по себе ГУИ ничем не особенен. Чтобы сделать хороший гуй, надо вложить усилия.
Без усилий получится плохой гуй — какой-то непонятный вопрос, какие-то неразличимые радиобаттоны. Непонятно, почему в прошлый раз я видел страничку с выбором Х, а в этот — не вижу (зависимость страниц от уже сделанного выбора).
Со скриптом можно пробовать не только верные значения, и получать более-менее внятное объяснение причин ошибки.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Marty, Вы писали:
M>В общем, на мой взгляд, есть такая проблема. Кто как её решает? Ну, если у вас есть аналогичная проблема?
Когда у меня возникает необходимость в обобщении типовых случаев, делаю командно-строковые скрипты. Долгое время ваял их на убогом и кривом недоязыке cmd.exe, но сейчас заставляю себя переползать на что-то более другое. Желания сделать гуевые конфигураторы не возникало никогда — слишком геморройно и малоэффективно.
Здравствуйте, Marty, Вы писали:
M>Сейчас надо ручками (откуда-то) скопировать соответствующую реализацию, поправить пины, то-сё. M>Хочется: первая страница — выбор семейства. Последующие страницы — зависят от выбора на первой, и запрашивают разные параметры. M>В итоге — имеем .h и .cpp для включения в проект
Для таких целей я давно написал либу на плюсовых шаблонах (для остальной периферии, а не только для АЦП). Поддерживает несколько семейств, максимально простая, очень легко конфигурируется через шаблонные параметры. Непонятно для чего тут нужна кодогенерация и визарды.
PS: за счёт того, что всё конфигурируется на шаблонах, сконфигурированную периферию легко передавать в качестве параметров в другие либы, которые обслуживают более высокоуровневую периферию или девайсы. Всё очень удобно, не надо ничего копипастить/править или генерировать. Конфигурируешь прямо в коде — и всё.