LINUX.ORG.RU
ФорумTalks

Почему всё так всрато?

 


0

5

Навеяно программированием.

Вот сижу, никого не трогаю, программирую. Я не то что бы нубас в системном программировании, в прошлом под ДОС даже многозадачные оболочки писал на пассале, но и не гуру, тем более не гуру красноглазия.

Но все таки некоторые «решения» меня откровенно удивляют.

Вот взять например «системный трей».

Первая реализация этой штуки была реализована в 2002 году, уже после выхода XP, во время скажем так «претензии Линукса на десктоп». Реализаторы этой срани почему-то посчитали, что для вывода иконки приложения в определенную зону, и вызова контекстного меню по нажатию на эту иконку - нужно создавать целую сороконожку на костылях и сажать ее на велосипед с квадратными колесами. По логике реализаторов, приложение которое хочет в трей, обязано общаться с этим треем через протокол в протоколе в Иксах, при этом этот трей прежде должен был правильно инициализироваться и создать свою область (именно поэтому мы иногда могли видеть «another instance of systray already running», когда запускали вторую копию панели или системтрейного плагина). Если его не было - то приложение не могло быть затреено, соответственно при запуске трея, трей был обязан послать сообщение через Иксы всем приложениям, что вот он, я, запущен, треемся. Регистрация «действия», таких как активация или контекстное меню - так вообще сплошная головная боль. В итоге самая минималистичная программа, у которой три задачи: а) вывести иконки, б) обрабатывать их изменения, в) кидать вызов программе для активации ее, или контекстного меню - занимала почти тысячу строчек.

Шло время, и индеец Зоркий Глаз через ~15 лет увидел, что как-то это все не тру, и решил с подачи Каноникла и Кедов переделать этот велосипед, чтоб на нем было приятнее ездить.

И не нашли ничего лучше, чем срать через d-bus. Типа приложение, которое хочет в трей - создает сервис в d-bus'е, StatusNotifierItem, вместе с фичами которые оно хочет, а другие приложения обязаны это читать, опять же через этот d-bus, и если хотят что-то с приложением сделать - должны через d-bus послать сигнал, который приложение застолбило.

Какой же это бред.

С 1985 существует ProcFS. Она следовала юниксовому принципу «все есть файл». Она предназначена для взаимодействия процесса с ядром, ядра с процессом, и процесса с процессом.

Ну вот что мешало приложению создать в своем пространстве запись «/proc/PID/i_want_to_be_trayed», «/proc/PID/my_tray_icon», и «/proc/PID/tray_menu», куда можно сделать «echo activate > /proc/PID/tray_menu» или echo «contextmenu» > /proc/PID/tray_menu ? Соответственно приложение которое хочет в трей - создает у себя в пространстве запись, а приложение которое хочет прочитать треевые приложения - просто пробегается в поиске «i_want_to_be_trayed»? И все! Все чтения изменений через простой inotify.

В порыве экспериментизма, я сделал вменяемую, простую, работающую реализацию такого трея за 4 часа. Эта реализация работает на PHP, C, Python, Pascal, Bash. Она не требует знаний третьей технологии (иксов, dbus, etc). В клиентском приложении она реализуется 10 строками на PHP, 25 строками на С, из которых 10 строк - строки и память.

О работе с иксами, d-bus, и wayland я расскажу в следующей серии.

Ну вот почему пингвинятники вечно идут каким-то своим, оверинжинирнутым путем? Ведь это снижает порог входа тех кто знает ЧТО писать, но не знает КАК.

★★★★★

Вредители придумали же. А ещё, то что ты описал - это не натурально. Это нужно иметь зуд к кипитсимплеступид

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

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

DumLemming ★★★
()

И не нашли ничего лучше, чем срать через d-bus

А в чём проблема?

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

регулятора громкости в таскбаре

индикатора раскладки в таскбаре

Не нужно. Регулятор громкости и индикатор раскладки должны быть частью панели а не отдельным приложением.

трех мессенджеров в таскбаре, торрент трекера в таскбаре

А в чём проблема?

впн-клиента в таскбаре

Не нужно. VPN клиент должен быть демоном в фоне (а лучше вообще встроенным в ядро), нечего ему делать ни в таскбаре ни в трее.

eternal_sorrow ★★★★★
()

сделал вменяемую, простую, работающую реализацию

Любая, даже самая сложная, проблема обязательно имеет простое, легкое для понимания, неправильное решение.

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

d-bus имеющим доступ к системной шине, этого нельзя сделать

Но трей реализован не через системную а через пользовательскую шину.

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

Да ни почему. Все нормально. Еще одна абстракция на абстракции для управления абстракцией. ДЕ жрут 600 метров на старте, нормально, лох не мамонт, лох докупит еще планку. И ядра =)

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

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

Вот так какраз делать нинада

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

идиотские решения типа вяленного или системды

Аргументы будут?

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

Возможно. Я тут познаю мир^W^W попробовал OpenBSD и FreeBSD. FreeBSD так себе, а вот OpenBSD это прямо любовь с первого взгляда. Теперь понял, почему ее так нахваливали отдельные персонажи.

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

Потому что инженеры тоже относятся к категории «когда у тебя в руках молоток - все кажется гвоздями»

Ты путаешь инженеров с быдлокодерами, которые, например, всё пишут на php ;-))

но не объяснимы с точки зрения прикладного пользования

А они и не могуть быть легко объяснимы любой Маше, которая только-только вкатилась в IT через полугодовые курсы «войти вайти»

Опять микроподрыв, теперь у другого, откуда что берётся только :-)

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

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

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

Мм... это называется протокол. Нормальное и универсальное решение.

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

VPN клиент должен быть демоном в фоне

А вкл-выкл и добавление новых УЗ мы будем делать пердолясь в консольку. Спасибо, не надо этот каменный век.

yu-boot ★★★★★
()

Портянку не читал, посоветую обратиться к психологу

neocrust ★★★★★
()
Ответ на: комментарий от yu-boot

новых УЗ

Новых чего?

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

eternal_sorrow ★★★★★
()

То что всё всрато - с этим можно согласиться. Но вот почему - тема не раскрыта.

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

Мм... это называется протокол. Нормальное и универсальное решение.

Ну и напуркуа этот «протокол» пихать везде где ни попадя?

Вот есть plank. Это докбар. У него есть каталог. Положил туда файл - оп, он отобразился в доке. Вместе с контекстным меню аппликухи. Работает? Работает. Юзеры путаются? Нет, не путаются. D-bus требует? Нет не требует. Магия.

Общение через сокет как раз и отлично подходит под философию «все есть файл».

Да все подходит под философию, но я не вижу здесь объяснение переусложнению.

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

Так dbus и так есть на каждом десктопном дистре и к тому же нужен для systemd. Тут ты ничего не сэкономишь.

Сэкономлю. Видишь ли, поддержка записи\чтения в файл есть в каждом ЯП. Поддержка d-bus нет.

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

Не нужно. VPN клиент должен быть демоном в фоне

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

Вследствие чего, тебе VPN надо то включать то выключать. Открывать сосноль чтобы включить ВПН, чтобы зайти на опеннет, а потом открывать сосноль чтобы выключить ВПН потому что WHM каждую минуту выкидывает - да ну нах )

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

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

Не должно. В мире существуют не только красноглазые ВПН с пердолингом, здесь есть еще и нормальные ВПН, такие как Warp. Которые просто поставил - и они работают.

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

есть целый suckless в природе
не все хотят идти их путем
хотя как форму искусства их многие уважают

запили свой wsratoless
так чтобы концепция победила мир - нет
но единомышленников, думаю, найдешь

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

Тогда снова желаю успехов тебе серфить в мире

Отлично сёрфлю. VPN никогда не выключаю. Да и это невозможно. У меня настроен киллсвич - без VPN доступа к интернету нет.

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

Библиотеки для dbus есть практически для любого языка.

сегодня Библиотеки для dbus есть практически для любого языка.

Исправил, не благодари.

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

такие как Warp

Там wireguard внутри. Есть способы сгенерить профиль wg для твоего аккаунта Warp без десктопного клиента. А дальше настраиваешь подключение штатным способом, никакого стороннего софта вообще не нужно.

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

У приложения есть иконка в таскбаре, возможность привлекать внимание, возможность выводить туда прогресс бар и кастомные действия по ПКМ. Что именно в «трей не нужен» ты не расслышал?

А вот у меня WM и у меня наоборот нет таскбара, у меня только трей. И мне так намного лучше. Может таскбар не нужен?

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

управление VPN должно работать через NetworkManager

а можно не надо?

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

Там wireguard внутри

Пусть там хоть Windows 11 будет внутри, но есть простые факты: а) Работает; б) Удобно и включать и отключать.

штатным способом

А мы о чем по-твоему дискуссию ведем? Именно о штатном способе.

А какая разница кто?

Разница в том, что кроме тебя есть еще люди, у которых эти фичи востребованы, и их большинство.

Так или иначе мне надоело с тобой спорить, можешь с удовольствием кушать свои кактусы, а у меня уже все наполовину работает, работает быстро несмотря на нищеконфиг, жрет мало, и это я только начал заниматься программированием ;)

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

А вообще, управление VPN должно работать через NetworkManager

Так и работает, а в трее nm-applet, через который можно в его менюшке то подключаться к рабочему vpn, то отключаться от него. + индикация подключен в данный момент или нет(а то он имеет способность отваливаться). И это я не говорю что впн-ов может быть и 2-3-4, и тогда между ними надо переключаться иногда.

Loki13 ★★★★★
()

Вот взять например «системный трей». Первая реализация этой штуки была реализована в 2002 году,

Ох уж эти неофиты. 3.11 помню плохо, но трей уже был в 95.

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

А вот у меня WM

как коклюш, право слово. Вроде как ещё в 2013 должны быть лишь в истории, ан нет, ещё находят то тут, то там.

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

Я имел ввиду, что у меня не DE(Desktop Environment), а WM(Window Manager), в частности Hyprland. А не то что вы подумали. Хотя тот WM в 2013м он у меня ещё был, насколько помню, в виде HD2.

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

индикатор раскладки на клавиатуре

Грешно так упарываться.

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

Ох уж эти неофиты. 3.11 помню плохо, но трей уже был в 95.

Перечитай еще раз внимательно о ком речь :)

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

Как ты будешь различать треи разных пользователей?

Это-то как раз не сложно, писать всё это добро куда-нибудь в /run/user/$UID/HisTray. Боюсь у ТС там других проблем будет куча по ходу реализации.

И кстати, не факт, что в трее не должна отображаться иконка какого-нибудь mpd, запущенного от пользователя audio.

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

Да все подходит под философию, но я не вижу здесь объяснение переусложнению.

Потому что это сложные вещи. Ты вот предложил проблему решить парой файликов-флагов в /proc (или другом месте). А события обрабатывать как? Пользователь кликнул на иконку; программа захотела перерисовать иконку. Будешь на каждый чих новый файлик добавлять?

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

Между GNU/Linux и OpenBSD? В простоте, полноте и гармоничном сочетании всего между собой. Вот таким могло бы стать GNU, то что двигал rms на это похоже: унификация опций у команд и единый стиль именования, info.

urxvt ★★★★★
()
Последнее исправление: urxvt (всего исправлений: 1)
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)