LINUX.ORG.RU

Text User Interfaces 2k18

 , , , ,


0

3

Собственно, начал писать небольшое TUI приложение, но в ходе разговоров с другими людьми, получил определенный скепсис насчет того, а не слишком ли плохая идея писать что-то на ncurses в 2018 (почти 19м) году, когда, ну, если не веб, то Qt и Swing в помощь.

Интересено мнение среднего обывателя лора:

  1. Стали бы вы разрабатывать TUI приложение сейчас?
  2. Стали бы вы пользоваться TUI приложениями сейчас?

Сам же я пользуюсь очень часто именно «консольными» приложениями, такими как vim, ranger, ncmpdcpp по причинам:

  • единообразное vimlike управление не отрываясь на мышь.
  • уменьшенное потребление ресурсов, в том числе батареи.
  • использование низкоуровневых утилит для лучшего понимания происходящих процессов (в том плане, что они используется, например IDE и разработчик может (и часто такое бывает) даже не знает что его среда запускает внутри себя).
★★

Последнее исправление: JAkutenshi (всего исправлений: 1)

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

Есть даже пример: я писал под ROS, но т.к. использую арч, то проще было создать docker контейнер и разрабатывать из него. IDE, в которых удобно разрабатывать ну, не то чтобы много: какая-то китайская переделка VSCode; PyСharm, если разрабатывать на python, что не всегда для ROS стоит делать; QtCreator, который далек от совершенства. Все это счастье, разумеется, надо затолкать в и без того полный контейнер и запускать оттуда. В итоге я помучался какое-то время, но освоил vim и писал пакеты в нем. Анлогично, когда переносил все на малину, чем использовать относительно неудобный и не всегда четкий vnc, доступ по ssh меня вполне устраивал.

JAkutenshi ★★
() автор топика

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

anonymous
()

Не вижу ничего плохого в TUI. Тех «других людей» отправь в биореактор

XMs ★★★★★
()

Стали бы вы разрабатывать TUI приложение сейчас?

Да. Только сам ncurses не очень удобен, хотелось бы обёртку годную для плюсов.

Стали бы вы пользоваться TUI приложениями сейчас?

Да.

Qt и Swing в помощь.

Может в помощь, а может и наоборот. Если задача несколько нетипичная, то может повозиться придётся больше чем с TUI.

xaizek ★★★★★
()

начал писать небольшое TUI приложение, но в ходе разговоров с другими людьми, получил определенный скепсис

Приложение пишется для себя или для других людей? В первом случае делаете как вам удобно, во втором - пляшете от хотелок заказчика.

Стали бы вы разрабатывать TUI приложение сейчас?

Нет.

Стали бы вы пользоваться TUI приложениями сейчас?

Да, некоторыми пользуюсь, хотя есть GUI-аналоги.

единообразное vimlike управление не отрываясь на мышь.

vimlike управление это шняга для престарелых осьминогов как по мне. Если приложение умеет в, скажем, стрелочки, и при этом в hjkl - окей, если умеет только в vim-style - нафиг такое приложение.

уменьшенное потребление ресурсов, в том числе батареи.

Это очень спорный вопрос. Если вы пишете GUI не на какой-нибудь жручей java то при одинаковом функционале что gui, что tui, будут жрать практически одинаково.

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

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

доступ к которой я получаю по ssh

Для использования по ssh лучше cli-интерфейса ничего не придумали.

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

Чего?? Вас обманули.

micronekodesu ★★★
()

1. Да вот прямо сейчас и не первый раз.
2. Пользуюсь, много и с удовольствием.
Вообще люблю текст, я его лучше воспринимаю, чем значки, например (да ещё и разные везде).

massimus ★★★
()

Альо, гараж!

TUI это касса (свободная), да и то...
Или там, где процесс взаимодействия с программой отлажен, строг и логичен.

(система продажи жд билетов с терминалами (древняя), всякие там inventory и прочие строгие алгоритмы.

GUI наглядней, если надо много сопутствующей инфы выводить.

Deleted
()
Ответ на: комментарий от commagray

Бггг, да это же слой совместимости с... да конец 80х и далее вниз, до первых компов.

Deleted
()
Ответ на: комментарий от Deleted

где процесс взаимодействия с программой отлажен, строг и логичен

Дык текстовый интерфейс и располагает сделать взаимодействие именно таким. Разве это плохо?

massimus ★★★
()
Ответ на: комментарий от massimus

Тут намного всё интересней.
Наверное, если пообщаться со специалистами 1С, которые выращивают саму 1С, как платформу, они могли бы поделиться опытом трансформации ТУИ - ГУИ.

Deleted
()
Ответ на: комментарий от anymouze

Что бы остался только Qt6 на Rust, и ядро линукса тоже на нем надо переписать, и ls, cat, echo переделать, сделать на QML с RustScript. Это я, RazrFalcon, просто баг с аккаунтом, решил с анонима ответить.

anonymous
()
Ответ на: комментарий от micronekodesu

Приложение пишется для себя или для других людей?

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

если умеет только в vim-style - нафиг такое приложение.

Хорошее замечание, кстати. Сам вим и так, и сяк разрешает. Спасибо.

то при одинаковом функционале что gui, что tui, будут жрать практически одинаково.

Спорить не буду, но на графику в любом случае идут затраты бОльшие. Другой вопрос, что сделать ее на qml быстрее.

Абстракции придумывают чтоб упростить жизнь

К сожалению, то как придумывали и то, как получается — очень разные вещи.

Чего?? Вас обманули.

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

JAkutenshi ★★
() автор топика
Ответ на: комментарий от anymouze

Главное еще не забыть заменить bash на python, а все кто не согласен дураки! Когда нибудь я построю свое фашистское государство и всех приверженцев gtk расстреляю.

anonymous
()
Ответ на: комментарий от commagray

Выглядит интересно, жаль что я на go не пишу :> Но спасибо

JAkutenshi ★★
() автор топика

1. Да.
2. Да.
Да и в целом к терминалу/консоли отношусь сугубо положительно.

bormant ★★★★★
()

Писать для других не стал бы, для себя — с удовольствием. Из GUI приложений у меня только браузер, все остальное работает из tty

Deleted
()
Ответ на: комментарий от RazrFalcon

Но если примитивность и нужна? Программы уровня /b/ suckless.

commagray ★★★★★
()
Ответ на: комментарий от RazrFalcon

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

saahriktu ★★★★★
()
Последнее исправление: saahriktu (всего исправлений: 1)

Надо пойти ещё дальше, и писать «В 2k0c1d8u». Целое число – это так скучно!

XVIII_vek
()

Ответ да на оба вопроса. Только TUI должно быть в дополнение к CLI, но не вместо.

aquadon ★★★★★
()
Последнее исправление: aquadon (всего исправлений: 1)
Ответ на: комментарий от saahriktu

Справедливости ради, это зависит от того, как спроектирован интерфейс, тестировался ли он на удобство использования. Ругать инструмент из-за того, что мастер им не умеет пользоваться — глупость.

JAkutenshi ★★
() автор топика
Ответ на: комментарий от JAkutenshi

Это почти цитата из статьи «CLI против GUI. Консоль против Графики.», автор которой поясняет почему юзеры при наличии альтернативы (если у них есть соответствующие знания) предпочитают командную строку: https://oni-ddr.livejournal.com/26660.html

А вот цитата:

Люди просто не понимают современные GUI операционных систем. Посмотрите на уровень обучения отдельно взятого рабочего, которому надо правильно интерпретировать и использовать единственную «панель управления» на некоторой машине. Что бы владеть современными GUI нужно выбрать операцию, размещение операции и зависимость друг от друга сотен, если не тысяч, таких панелей. Самый трудный навык - это выбирать и определять правильную последовательность операций на «одной панели управления» и уметь обращаться к другой «панели управления», касающейся желательной операции. (Под «панелью управления» автор понимает все компоненты GUI: меню, кнопки, панели и т.д - прим. перев.) Сравните это с современной жизнью. Такие вложенные «панели управления» редкость и одиночные представители, по крайней мере, необыкновенны (например, АТМ).

Там автор проводил эксперимент и обучал людей командной строке. И люди выбирали командную строку.

saahriktu ★★★★★
()
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от saahriktu

Сравните это с современной жизнью. Такие вложенные «панели управления» редкость и одиночные представители, по крайней мере, необыкновенны

Подозреваю, что это писалось очень давно, ибо описанное сейчас — обыденнось.

JAkutenshi ★★
() автор топика

В принципе ncdu удобней filelight. И не требует иксов и графической сессии. Посоветуй мне мессенджеры уровня pidgin (см. плагины, finch кривоват) и дискорд для jabber, steam, skypeweb, irc, icq и желательно всё в одном приложении. Чтобы удобненько. И читалку поверх фреймбуфера, с картинками. Ну там djvu, pdf тоже. Типа как stdu viewer (Okular на крайняк). Просмотрщик картинок уровня FastStone Image Viewer или хотя бы Gvenview. И я выкину иксы уже сегодня (и модерн веб заодно).

Или всё таки признаем, что софта нет, и его некому написать. А пользователям интересны только гном3, вейланд, и системд.

anonymous
()

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

Постоянно использую alsamixer и htop, порой mc - когда есть гуевые аналоги с управлением клавиатурой, разумеется, откажусь от TUI, хотя он очень кстати, когда работаешь через mosh/ssh

mazdai ★★★
()
Последнее исправление: mazdai (всего исправлений: 2)
Ответ на: комментарий от JAkutenshi

Да не, просто мне нравится сидеть в чорной чорной консоли, в тех же кедах всё равно сидишь в konsole большую часть времени. Но почему-то всё развитие остановилось десятки лет назад, а ведь фреймбуфер позволяет много интересного сделать (даже без directfb).

anonymous
()
Ответ на: комментарий от JAkutenshi

По факту только от нормальных браузеров однозначно придётся отказаться, если только не удастся их как нибудь поверх фрембуфера запустить. Для остального-то я ограничений в принципе не вижу, но нет такого софта. Хотя графический опенсорс лучший в кедах и вроде пользуются многие, но до богомерзкой проприетарщины всё равно не дотягивает. Разве что сравнить notepad++ и kate, хотя подождите нпп тоже опенсорс и сливает он вероятно из-за Scintilla.

anonymous
()

в ходе разговоров с другими людьми, получил определенный скепсис насчет того, а не слишком ли плохая идея писать что-то на ncurses в 2018 (почти 19м) году

Посылай таких людей нахрен.

Стали бы вы разрабатывать TUI приложение сейчас?

Да, стал бы, если б для JFF чуть побольше времени было. На меня и так недописанный DoubleContact смотрит с укоризной. (Кстати, у меня там ядро оторвано от GUI, и даже имеется некоторый CLI, правда, не знаю, будет ли он кому-то полезен, делался, в основном, для тестов. Может, когда-нибудь приму ещё упорина и TUI приделаю.)

Стали бы вы пользоваться TUI приложениями сейчас?

Что значит «бы»? У меня вот прямо сейчас в соседнем окне mc запущен.

Кстати, в плане разминки — не хочешь что-нибудь улучшить в mc? Там всё ещё есть, что пилить. Хотя он не vim-like, так что тебя, возможно, не заинтересует.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от JAkutenshi

Вы преувеличиваете сложность обыденных интерфейсов из реальной жизни. Это писалось в 2004-м году.

saahriktu ★★★★★
()
Ответ на: комментарий от RazrFalcon

Покажите пример примитивной задачи, для которой достаточно TUI.

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

massimus ★★★
()
Ответ на: комментарий от massimus

установщик системы

Это который у debian? У арча и gentoo обычный CLI.

пакетный менеджер

CLI

файловый менеджер

Только для наркоманов.

пошаговые конфигурялки

Пример?

RazrFalcon ★★★★★
()
Ответ на: комментарий от JAkutenshi

на графику в любом случае идут затраты бОльшие

Если ваше приложение делает что-то сложнее чем выводит "Hello, World" то это будет не сильно значительно. Опять же, это все в разумных пределах - понятно что приложение на, скажем, электроне будет в разы тяжелее такого же на ncurses по затратам на отрисовку интерфейса.

Но даже если настроим как-то это, как вне контейнера писать проект?

Что именно вам требуется для разработки вне проекта? Чтоб IDE видела установленные модули и могла показывать подсказки? Это осуществимо (вот пример для питона и vscode - https://habr.com/post/342080/#14 , думаю и другие IDE так могут). Компиляция (ну или как там происходит это, короче внесение изменений в написанный код) это по сути пересборка docker-образа, так что тут внутрь контейнера лезть тоже не нужно. Если вы действительно хотите находиться внутри контейнера - вам нужен lxc, потому что докер это про "запустили и стучимся в нужный порт или просто забираем результат", shell доступ туда, правки файлов руками внутри контейнера (вне докер-файла) и прочее подобное это не про докер. А git в любом случае стоит использовать, хотя бы для того чтоб иметь вменяемую историю и навигацию по ней, а не "финальный_файл_точно_готово_можно_лить_на_прод_v2.tar.gz_10_final".

micronekodesu ★★★
()
Ответ на: комментарий от RazrFalcon

установщик системы

Это который у debian?

Не только.

пакетный менеджер

CLI

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

пошаговые конфигурялки

Пример?

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

massimus ★★★
()
Ответ на: комментарий от RazrFalcon

Управление полностью с клавиатуры, кастомизируемость, возможность посылать 64 сигнала вместо 8 в KSysGuard, хотя лично мне ничего кроме SIGTERM, SIGKILL и SIGHUP ничего и не пригождалось. Ну и htop можно запустить на другом tty случае, если иксы повисли, или случился OOM.

Singularity ★★★★★
()

Если я лезу на сервер по ssh, gui не использую, совсем.

erfea ★★★★★
()

SHPaint — ANSI Art editor programmed in bash

Вот вам 'графический' редактор ANSI Art с TUI

#!/bin/bash
#
#  Author: Martin "BruXy" Bruchanov, bruxy at regnet.cz
#

# Check input first
if [ ! $# -eq 1 ] || [ "$1" == "-h"] || [ "$1" == "--help" ] ; then
	printf "Usage:\n"	
	printf "\t$0 saved_image\n"
	printf "\n\tImage data will be saved into given filename, if file exist\n"
	printf "\tit will be displayed and ready to edit!\n"
    printf "\tHit <Ctrl-C> any time to quit the program.\n"
	exit 1
fi

##################
# Initialization #
##################

IMAGE_FILE=$1
_STTY=$(stty -g)    # Save current terminal setup
printf   "\e[2J"    # clear screen, set cursos at beginning
stty -echo -icanon  # Turn off line buffering
printf "\e[?9h"     # Enable terminal mouse reading
printf "\e[?25l"    # Turn of cursor 
printf "\e]0;-=[ ShPaint ]=-\007"

# Hash array with image data,
# ... key is "$Y;$X",
# ... value ANSI colors and brush "b;F;Bm█"
declare -A IMAGE  

# Defaults
BRUSHES=(░ ▒ ▓ █ ▄ ▌ ▐ ▀)
FG=( {30..37} )
BG=( {40..47} ) # 49 ... default background
X=0 
Y=0
ERASE=0
BRUSH=${BRUSHES[3]}
FG_COLOR="1;${FG[7]}"
BG_COLOR=49

#############
# Functions #
#############

function save_image() {
	printf "\e[2J" > $IMAGE_FILE
	for i in ${!IMAGE[@]}
	do
		printf "\e[${i}f\e[${IMAGE[$i]}\e[0m"
	done >> $IMAGE_FILE
	# set cursor under the image
	printf "\e[$(tput lines);1f" >> $IMAGE_FILE
}

function at_exit() {
	printf "\e[?9l"          # Turn off mouse reading
	printf "\e[?12l\e[?25h"  # Turn on cursor
	stty "$_STTY"            # reinitialize terminal settings
	clear
	echo "Thank for using ansipaint!"
	if [ ! -z "$IMAGE_FILE" ] ; then 
		echo "Your image is saved as '$IMAGE_FILE'."
		save_image
	fi
	exit
}

# X = $1, Y = $2
function set_pos() {
 	echo -en  "\e[$2;$1f"
}

function show_pos() {
	set_pos 65 1
	printf "x,y = %3d,%3d" $X $Y
}

function show_brush() {
	set_pos 70 2 
	printf "[ \e[${FG_COLOR};${BG_COLOR}m$BRUSH\e[0m ]"
}

function process_click() {
#	X=$1 Y=$2
	# set foreground color
	if [ $Y -eq 1 ] || [ $Y -eq 2 ] ; then
		if [ $X -gt 2 ] && [ $X -lt 28 ] ; then
			FG_COLOR="$[Y-1];${FG[$[(X-4)/3]]}"
			ERASE=0
		fi
	fi
	
	# set background color
	if [ $Y -eq 1 ] && [ $X -gt 34 ] ; then
		if [ $X -gt 34 ] && [ $X -lt 59 ] ; then
			BG_COLOR="${BG[$[X-35]/3]}"
			ERASE=0
		else
			BG_COLOR="49"
			ERASE=0
		fi
	fi	

	# set brush
	if [ $Y -eq 2 ] && [ $X -gt 36 ] && [ $X -le 51 ] ; then
		BRUSH=${BRUSHES[$[(X-37)/2]]}
		ERASE=0
	fi

	# set erase
	if [ $Y -eq 2 ] && [ $X -ge 54 ] && [ $X -le 62 ] ; then
		BRUSH=" "
		BG_COLOR="49"
		ERASE=1
	fi

	# DEBUG
	# set_pos 0 25
	# printf "$FG_COLOR $BG_COLOR $BRUSH"
}

function draw_menu() {
	set_pos 1 1; echo "FG: "
	for i in ${FG[*]}
	do
		set_pos $[(i-30)*3+4] 1
		echo -en "\e[${i}m███\e[0m"	
		set_pos $[(i-30)*3+4] 2
		echo -en "\e[1;${i}m███\e[0m"	
	done

	set_pos 30 1; echo "BG: "
	for i in ${BG[*]}
	do 
		set_pos $[(i-40)*3+35] 1
		echo -en "\e[${i}m   \e[0m"	
	done
	echo "   |" # default background (49)

	set_pos 30 2; echo -en "Brush: ${BRUSHES[*]}"
	printf "  [ Erase ]"
	show_brush
}

function load_image() {
	if [ -f $IMAGE_FILE ] ; then 
		data=$(sed -e 's/\x1b/E/g;s/E\[0m/\n/g;s/E\[2J//' $IMAGE_FILE | \
			sed -n -e 's/E\[\(.*\)fE\[\(.*m.\)/IMAGE["\1"]="\2"/ p')
		eval $data
		cat < $IMAGE_FILE
	fi
}

##########
#  MAIN  #
##########
trap at_exit ERR EXIT 
load_image
draw_menu
while :
do 
	read -N 6 click
	mouse=( `echo -en ${click#???} | hexdump -v  -e'1/1 " %u"'` )
	X=$[ ${mouse[0]} - 32]	Y=$[ ${mouse[1]} - 32]
	process_click
	show_pos 
	show_brush
	if [ $Y -gt 2 ] ; then	
		echo -en  "\e[${Y};${X}f\e[${FG_COLOR};${BG_COLOR}m$BRUSH\e[0m"
		if [ $ERASE -eq 0 ] ; then
			IMAGE["${Y};${X}"]="${FG_COLOR};${BG_COLOR}m$BRUSH"
		else
			unset IMAGE["${Y};${X}"]
		fi
	fi
done

P.S.: Ответы на вопросы ТС:

1. Да.

2. Да.

atsym ★★★★★
()
Ответ на: комментарий от saahriktu

Люди просто не понимают современные GUI операционных систем. Посмотрите на уровень обучения отдельно взятого рабочего, которому надо правильно интерпретировать и использовать единственную «панель управления» на некоторой машине. Что бы владеть современными GUI нужно выбрать операцию, размещение операции и зависимость друг от друга сотен, если не тысяч, таких панелей. Самый трудный навык - это выбирать и определять правильную последовательность операций на «одной панели управления» и уметь обращаться к другой «панели управления», касающейся желательной операции. (Под «панелью управления» автор понимает все компоненты GUI: меню, кнопки, панели и т.д - прим. перев.) Сравните это с современной жизнью. Такие вложенные «панели управления» редкость и одиночные представители, по крайней мере, необыкновенны (например, АТМ).

Ну так не обязательно всех насильно заставлять пользоваться KDE.

meliafaro ★★★★★
()

1. Стали бы вы разрабатывать TUI приложение сейчас?

Для автоматизации и себя командно-строчные. Если сам писал то ключи, параметры помнишь автоматом.
для других графика по принципу каравана и медленного верблюда. У TUI нет унифицированого api c gui значит тем хуже для него:(

 2. Стали бы вы пользоваться TUI приложениями сейчас?

Ели есть выраженные премущества перед чем-то другим(elinks) Иногда как редкий эпизод потому что все равно в консоли вожусь.

antares0 ★★★★
()
Последнее исправление: antares0 (всего исправлений: 1)

1) смени аватар
2) убери рунглиш из профАйла
3) женись
...
PROFIT

PS Гляжу ты уже перестал пить вотку по утрамписАть «доброго времени суток». Безусловно, это вин и вообще прогресс! Продолжай работать над собой, и у тебя всё получится! Удачи!

mos ★★☆☆☆
()
Ответ на: комментарий от hobbit

запредельный уровень дискуссии фтреде)))

впрочем, ничего удивительного...

Посылай таких людей нахрен.

потому что ты:
1) школота
2) кулхацкер
3) красноглазег
ненужное незчОркивать

или всё-таки потому что ты знаешь что и для чего используется и существует? тогда тебе и на мнение «таких людей» нас рать.

mos ★★☆☆☆
()

афтырь, рисуй всё термкодами, как vim! Будь мужыком, ну.

А то понаклепают на каком-нибудь newt через пистоновые биндинги! Фу, срамота!

mos ★★☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.