Page 4 of 13

Re: Общесистемный буфер обмена

Posted: Mon Aug 25, 2008 3:16 pm
by bw
Если использовать для этого отдельный сервис, то может и интерфейс взаимодействия приложений доработать?
Например, можно сделать по образцу D-BUS.

..bw

Re: Общесистемный буфер обмена

Posted: Tue Aug 26, 2008 2:45 pm
by barsuk
E-water wrote:А может лучше, своего рода, контейнер файлов? Ну типа папка, только её файлы в RAM.
RAM-диск Колибри(/rd/1/) как раз является такой папкой в памяти. А буфер предназначен для обмена данными между приложениями без необходимости вводить имена файлов.
E-water wrote:Для текста, хорошо бы прогу, которая могла бы эммулируя нажатия клавиш впечатывать текст(тогда не нужно делать поддержку буффера в прогах, для того что бы вставить текст)
Да, согласен. Это может делать и сам сервис.

bw
Что плохо в текущей реализации интерфейса?

Re: Общесистемный буфер обмена

Posted: Tue Aug 26, 2008 4:37 pm
by bw
При чем здесь плохо, это разные вещи. Посмотри сначала.
Если бы я предложил позаимствовать COM/DCOM, ты бы сказал - чем плох текущий интерфейс? Это просто интерфейсы разного порядка, COM и D-BUS это протоколы высокго уровня, если угодно. Ты ведь не сравниваешь IP и HTTP протоколы? Чем IP хуже HTTP?
Вот например в IPC KOS предусмотрен интерфейс для доступа к сервисам по их именам или другим идентификатором (заранее известным), без дополнительных телодвижений вроде чтения pid из заранее подготовленного, на этот случай, файла?

..bw

Re: Общесистемный буфер обмена

Posted: Tue Sep 09, 2008 11:50 pm
by barsuk
bw
Ясно.

Вот новая версия, здесь есть вставка во все приложения через Ctrl-Alt-V.

Re: Общесистемный буфер обмена

Posted: Sun Oct 18, 2009 12:50 am
by Mario
Прошло больше года...

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

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

З.Ы. Мне нравится идея процесса-сервера с буфером выделяемым посредством функции 68.22 (без участия функции 60).

Re: Общесистемный буфер обмена

Posted: Sun Oct 18, 2009 3:13 pm
by Serge
Mario

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

Re: Общесистемный буфер обмена

Posted: Sun Oct 18, 2009 3:28 pm
by Albom
Serge wrote:Imho буфер обмена это функция оконной системы
а насколько это безопасно?

Re: Общесистемный буфер обмена

Posted: Sun Oct 18, 2009 4:12 pm
by Serge
Albom

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

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

P.S. Я вообще не вижу безопасного решения для расшареной памяти. Любой процесс с доступом на запись может забить на синхронизацию и прицип "сейчас другой джигит на красный свет ехать будет" не сработает. Джигит может оказаться дальтоником.

Re: Общесистемный буфер обмена

Posted: Sun Oct 18, 2009 4:33 pm
by Mario
Serge
Imho буфер обмена это функция оконной системы
Я не согласен. Мы взяли курс на уход от принципа "все в ядро".
Буфер обмена не обязан быть частью оконной подсистемы. Он может передавать разные типы данных.
P.S. Я вообще не вижу безопасного решения для расшареной памяти. Любой процесс с доступом на запись может забить на синхронизацию и принцип "сейчас другой джигит на красный свет ехать будет" не сработает. Джигит может оказаться дальтоником.
Все решаемо, структура получится немного сложней, но все будет работать. Джигиты будут соблюдать правила, как и все!

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

З.Ы. Ну, так никто и не ответил - занимается кто-нибудь вопросом?

Re: Общесистемный буфер обмена

Posted: Sun Oct 18, 2009 4:51 pm
by Serge
Mario

Так опиши алгоритм. Я действительно не вижу относительно простого и безопасного решения. На строгое соблюдение ПДД не надеюсь. И самый законопослушный водитель может заглохнуть на перекрёстке.

Re: Общесистемный буфер обмена

Posted: Sun Oct 18, 2009 4:59 pm
by Albom
Mario wrote:Мы взяли курс на уход от принципа "все в ядро".
Да, правильно. Но есть такие вещи, которые неплохо всё же было иметь в ядре... Вот моё сообщение в этой теме от 21 февраля 2008 года:

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

dd ; номер подфункции (считать, записать)
dd ; тип содержимого (текст, битмап, список файлов)
dd ; объём содержимого в байтах
dd ; адрес, по которому располагаются данные

Список файлов можно сделать как в винде - файлы разделяются нулями, список заканчивается двойным нулём. Работать с таким списком очень удобно. И ещё хочу пояснить, что под словом "битмап" я понимаю файл bmp, а не только данные. Потому что из него можно извлечь размеры и глубину цвета.
Хотя ранее (18 февраля 2008 года) я писал:
по моему мнению, оптимальный вариант - приложение-монитор, выделяющее нужный объём памяти и указывающий какой тип информации хранится в буфере (текст, битмап, список файлов)
Я и сейчас тоже за такую реализацию... Хотя сис. функцию использовать проще :)

Re: Общесистемный буфер обмена

Posted: Sun Oct 18, 2009 5:14 pm
by Mario
Albom
Хотя сис. функцию использовать проще
Не согласен.
1)Трудозатраты на организацию взаимодействия через системные функции или через такой же код реализованный посредством макроса, приблизительно одинаковы. Только в последнем случае не придется трогать ядро.
2)Плодить баги дешевле на уровне приложения, поскольку вероятность грохнуть всю систему ниже. К тому же при появлении джигита не соблюдающего правила грохнуть и перезапустить поток-сервер отвечающий за механизм буфера обмена проще и быстрее, чем перезагружать всю систему, в которой на этот момент могут работать приложения, работу которых прерывать не желательно.

Re: Общесистемный буфер обмена

Posted: Sun Oct 18, 2009 5:31 pm
by Serge
Mario

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

Re: Общесистемный буфер обмена

Posted: Sun Oct 18, 2009 6:08 pm
by andrew_programmer
Защитить ядро намного проще.
На аппаратном уровне через страницы или как-то по другому?

Re: Общесистемный буфер обмена

Posted: Sun Oct 18, 2009 6:11 pm
by Mario
Serge
Падающий сервис не намного приятней упавшего ядра
Не приятно согласен, но не фатально как в случае с ядром.
В худшем случае (не джигит а малолетний долбо... террорист) перезапускать сервер придётся постоянно. Вероятно вместе с задействованными приложениями.
Таких вещей в системе предостаточно и без этого и даже текущее ядро можно уронить, в большинстве случаев это получается случайно. Дырки то все не исследованы, а даже не все известные заштопаны. А от малолетних и не совсем малолетних долботерористов не застрахованы даже более развитые системы. Единственно реальный выход - жесткий, я бы даже сказал жесточайший, контроль со стороны всего сообщества: раздача бананов и прекращение консультации.
От лобовой атаки значительными силами - брутфорса, ничто не спасает.
Защитить ядро намного проще.
В том то и дело что если делать реализацию через ядро, то я сомневаюсь, что у меня хватит знаний о ядре, на реализацию полноценного буфера - только на один слот, с возможностью записи для всех. А вот для потока-сервиса я мог бы извернуться.