powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Улучшения, новые фичи в технологиях InterSystems
87 сообщений из 87, показаны все 4 страниц
Улучшения, новые фичи в технологиях InterSystems
    #39073264
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!
В эту тему предлагается писать все пожелания по доработке новых фич, возможностей, оптимизаций по технологиям InterSytems, а именно: СУБД Cache, интеграционной платформе Ensemble, BI технологии DeepSee и технологии анализа текста iKnow.

Инженеры InterSystems по возможности будут подключаться к обсуждению тем.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39073396
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шваров Евгений,

1. На фоне давнишнего наличия мнемоники открытия файлов /GZIP было бы крайне неплохо иметь возможность сжатия бэкапа на лету, в момент создания, ну и чтения сжатого бэкапа при восстановлении :)

2. Сейчас любой файл создаваемый средствами Cach'e на *nix системах создается с проставленными правами на исполнение, было бы неплохо что бы так не было :)
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39074258
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ptn2. Сейчас любой файл создаваемый средствами Cach'e на *nix системах создается с проставленными правами на исполнение, было бы неплохо что бы так не было :)+1
Ptn1. На фоне давнишнего наличия мнемоники открытия файлов /GZIP было бы крайне неплохо иметь возможность сжатия бэкапа на лету, в момент создания, ну и чтения сжатого бэкапа при восстановлении :)Вы сами пробовали поиграться с этой идеей? Утилиты DBACK* в исходниках, добавить параметр в команду Open не ахти как сложно.

Из общих соображений, пока что не могу плюсануть: бэкап желательно выполнять побыстрее, а любое сжатие его, как правило, замедляет. Можно показать, что оно его начинает ускорять, лишь когда
Код: sql
1.
2.
3.
4.
5.
V_сжатия > V_записи*k/(k-1)
где
k - степень сжатия,
V_записи - скорость записи данных на устройство бэкапа (сетевое или локальное),
V_сжатия - скорость операции сжатия в (несжатых MB)/sec

Восстанавливать бэкап тоже желательно побыстрее, но любая распаковка замедляет этот процесс ещё сильнее. Единственный, пожалуй, случай, когда сжатие файла бэкапа уместно - при переносе его в долговременный архив. Но это уже не он-лайн...
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39074269
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov,

>Вы сами пробовали поиграться с этой идеей?

Ну c GZIP я активно работают, ибо до буквально недавних пор системные возможности были странными.
Например открыть файл через %Stream.FileCharacterGzip и передать его SAX парсеру приводило к фатальному неуспеху.

>Утилиты DBACK* в исходниках, добавить параметр в команду Open не ахти как сложно.

Мне не нравится идея ручного вмешательства в системные утилиты, пусть лучше сами сделают

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

Он не будет быстрее чем может принять дисковая система, и проц при этом используется мало.
GZIP же достаточно быстрый, если им даже http на лету жмут.
И когда бэкапы начинают выходит за 50Гб отметку, сжатия на лету хочется все больше и больше.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39074288
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PtnМне не нравится идея ручного вмешательства в системные утилиты, пусть лучше сами сделаютВмешательство "не корысти ради", а лишь чтобы попробовать.
PtnОн не будет быстрее чем может принять дисковая система, и проц при этом используется мало.Это понятно. Но современные RAIDы легко принимают 70MB/s (не буду уточнять характеристики RAIDа); я в своё время не нашёл архиватора, который в состоянии сделать больше, принимая бэкап через pipe.
PtnGZIP же достаточно быстрый, если им даже http на лету жмут.И в этом есть смысл, т.к. даже при скромной скорости сжатия 5MB/s скорость передачи данных по сети у "усреднённого" пользователя интернета заметно ниже.
PtnИ когда бэкапы начинают выходит за 50Гб отметку, сжатия на лету хочется все больше и больше.Когда бэкап начинает выходить за отметку 500GB, полный бэкап обычно начинают делать раз в неделю, а ежедневный становится инкрементным. Выигрыш и по скорости, и по дисковому пространству, сами понимаете, при этом не сопоставим с любым разумным сжатием.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39074295
eduard93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PtnСейчас любой файл создаваемый средствами Cach'e на *nix системах создается с проставленными правами на исполнение, было бы неплохо что бы так не было :)
Для этого можно использовать методы ##class(%File).SetAttributes(), ##class(%File).SetReadOnly() и ##class(%File).SetWriteable(). Документация .
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39074335
Александр Коблов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ptn,

Cache' использует маску 777 для файлов.

Соответственно при umask 022 права получаются 755

Если поставить umask 133, то права будут 644:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
akoblov@akoblovVaio:~$ umask 133
akoblov@akoblovVaio:~$ ccontrol session CACHE2015X2 

Узел: akoblovVaio, Экземпляр: CACHE2015X2

USER>set file="/tmp/qq.txt" open file:"NW" use file write "hey there"  close file

USER>halt
akoblov@akoblovVaio:~$ ll /tmp/qq.txt
-rw-r--r-- 1 akoblov cacheusr 6 окт.  12 11:58 /tmp/qq.txt
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39074813
kalin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ptn"1. На фоне давнишнего наличия мнемоники открытия файлов /GZIP было бы крайне неплохо иметь возможность сжатия бэкапа на лету, в момент создания, ну и чтения сжатого бэкапа при восстановлении :)"Какая необходимость СУБД превращать в ОС ?
Все делается влет средствами самой ОС
Упаковываем s path="/mnt/cache/"
 s file=$ZD($H,4) ;filename
 s file=$p(file,"/",3)_$p(file,"/",2)_$p(file,"/",1)_".gsa"
 S IO=path_file
 S IOT="RMS" ;???
 s IOPAR="WNU"
 S Desc="BackUp APP REvolution Data" ;description
 S names("Q")=""
 S names("SMS")=""
 S names("SERIAL")=""
 S Res=$$entry^%GOF(.names,Desc,0)
 s x=$ZF(-1,"gzip "_IO) 
error 
 c IO
 QАналогично распаковываем через gunzip
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39075045
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eduard93,

>Для этого можно использовать методы ##class(%File).SetAttributes(), ##class(%File).SetReadOnly() и ##class(%File).SetWriteable()

А можно использовать другие, какая разница какие, я уже решил эту проблему своим личным способом.
Но тема то у нас вроде как о доработке новых фич.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39075049
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov,

>Вмешательство "не корысти ради", а лишь чтобы попробовать.

Да толку то пробовать ? Я знаю что смогу, как и знаю что не смогу в здравом уме использовать это в продакшене.
Ну вот вообще не увлекает "патчить" каждый сервер.

>Это понятно. Но современные RAIDы легко принимают 70MB/s (не буду уточнять характеристики RAIDа); я в своё время не нашёл архиватора, который в состоянии сделать больше, принимая бэкап через pipe.

Я готов немного пожертвовать скоростью, хотя вот пример для обычного SATA диска и Intel(R) Xeon(R) CPU E3-1230 V2 @ 3.30GHz - файл успевает подаваться в gzip под 50Мб/с
Код: c#
1.
2.
# pv FullDBList_20150625_001.cbk | gzip  >/dev/null
577MB 0:00:15 [51,6MB/s] 


И это с максимальной степенью сжатия (-9 по умолчанию), если поставить -5 то можно и 70Мб/с получить.

>Выигрыш и по скорости, и по дисковому пространству, сами понимаете, при этом не сопоставим с любым разумным сжатием.

Да мы собственно и на 10Гб так делаем, но что бы развернуть такой архив вам что нужно сделать ? Сначала распаковать (-500Гб места), потом запустить восстановление что бы прокачать эти же 500Гб по сети/схд или что там еще есть.

Мне кажется опциональная возможность, подчеркиваю опциональная, будет весьма интересна
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39075051
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kalin,

>Аналогично распаковываем через gunzip

Ребят вы что такие трудные ? Я уже прекрасно упаковываю и распаковываю средствами ОС, блин прочитайте первый пост Евгения.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39075054
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Коблов,

>Cache' использует маску 777 для файлов.

1. Зачем она использует именно такую маску ? Когда к примеру создается тот же бэкап маска по моему крайне другая.
2. Почему бы не дать возможность самостоятельно указывать маску ?

>Если поставить umask 133, то права будут 644:

Нужно попробовать, но меня смущает что будет при создании директорий ?
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39075184
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Позвольте мне вставить и свои пять копеек.

Лично я столкнулся с необходимостью устанавливать временный запрет для регистрации в задаваемых областях новых пользователей, что-то по аналогии с полным запретом регистрации новых пользователей во всех областях <$$%swset^SWSET(12,1)>.
Считаю, что такой функционал позволил бы управлять балансированием нагрузки на систему при различных пиковых ситуациях.
Т.е. некий процесс диспетчер выполняет анализ на прикладном уровне и при необходимости ставит временный запрет на регистрацию новых подключений к некоторым областям. При снижении нагрузки - снимает запрет.
Пока не могу ничего сказать по поводу CSP-подключений, но для CallIn и DirectAccess подключений это было бы решением проблемы. Оба эти интерфейса позволяют осуществлять доступ к любым программам и данным, при этом проконтролировать такой доступ все-таки представляет определенные трудности. Доступ же к другим областям остается на прежнем уровне.

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

Ну что же, давайте обсуждать.
Постараюсь выдержать любую критику и намотать на ум все Ваши разумные доводы.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39075216
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBПозвольте мне вставить и свои пять копеек.

Лично я столкнулся с необходимостью устанавливать временный запрет для регистрации в задаваемых областях новых пользователей, что-то по аналогии с полным запретом регистрации новых пользователей во всех областях <$$%swset^SWSET(12,1)>.
Считаю, что такой функционал позволил бы управлять балансированием нагрузки на систему при различных пиковых ситуациях.
Т.е. некий процесс диспетчер выполняет анализ на прикладном уровне и при необходимости ставит временный запрет на регистрацию новых подключений к некоторым областям. При снижении нагрузки - снимает запрет.
Пока не могу ничего сказать по поводу CSP-подключений, но для CallIn и DirectAccess подключений это было бы решением проблемы. Оба эти интерфейса позволяют осуществлять доступ к любым программам и данным, при этом проконтролировать такой доступ все-таки представляет определенные трудности. Доступ же к другим областям остается на прежнем уровне.

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

Ну что же, давайте обсуждать.
Постараюсь выдержать любую критику и намотать на ум все Ваши разумные доводы.В данном случае не вижу большого смысла внедрять что-то такое в ядро. Это задача прикладная, и решать ее можно на прикладном уровне. Можно например воспользоваться HAProxy. Он подойдет даже если у вас к серверу пользователи подключаются по DirectAccess и CSP. В нем можно управлять подключением к серверу, переводя сервер в режим обслуживания. для веб пользователей, можно будет отображать страничку о том что проводится обслуживание.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39075237
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
И каким образом можно будет динамически управлять этой штуковиной, в зависимости от складывающейся ситуации, т.е. установка-снятие запрета. Я же писал, что есть некоторый Каше процесс-диспетчер, который определят что необходимо сделать в той, или иной области. Если круглосуточно необходимо следить за балансировкой нагрузки и управлять ею по определенным правилам постоянно снимая устанавливая запрет к меняющемуся списку областей.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39075248
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBDAiMor,
И каким образом можно будет динамически управлять этой штуковиной, в зависимости от складывающейся ситуации, т.е. установка-снятие запрета. Я же писал, что есть некоторый Каше процесс-диспетчер, который определят что необходимо сделать в той, или иной области. Если круглосуточно необходимо следить за балансировкой нагрузки и управлять ею по определенным правилам постоянно снимая устанавливая запрет к меняющемуся списку областей.Как много вы знаете о возможностях HAProxy ?
там есть такая вещь как, обращение к определенному адресу, для проверки доступности сервера, и он должен вернуть определнный ответ, все настраиваемо. И если ответ не верный от сервера, сервер будет отключен как не доступный.
Вот и ваша специальная страничка может возращать статус, пускать или нет пользователей.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39075292
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
Честно говоря, ничего не знаю - бегло прочитал только...
Но, мне не нужно закрывать полный доступ к серверу, а только к определенным областям. Мне нужно постоянно менять правила доступа к этим областям, т.е. нерегулярный поток изменения конфигурации доступа к областям (список областей меняется) на пиках 5-30 секунд. Изменять правила доступа не вручную, а по определенным алгоритмам, которые исполняет Каше диспетчер-процесс.
Там такое возможно?
К тому же никто не будет видеть никаких страничек, поскольку в Каше ломятся приборные драйвера.
И самое главное, я отчетливо вижу, что такое управление доступом необходимо замыкать внутри Каше.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39075295
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBDAiMor,
Честно говоря, ничего не знаю - бегло прочитал только...
Но, мне не нужно закрывать полный доступ к серверу, а только к определенным областям. Мне нужно постоянно менять правила доступа к этим областям, т.е. нерегулярный поток изменения конфигурации доступа к областям (список областей меняется) на пиках 5-30 секунд. Изменять правила доступа не вручную, а по определенным алгоритмам, которые исполняет Каше диспетчер-процесс.
Там такое возможно?
К тому же никто не будет видеть никаких страничек, поскольку в Каше ломятся приборные драйвера.
И самое главное, я отчетливо вижу, что такое управление доступом необходимо замыкать внутри Каше.Там такое можно сделать, точно для CSP для TCP нужно смотреть
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39075338
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видите, как даже нескольким коллегам сложно найти точки соприкосновения. Как уж тут сформировать коллективное мнение о полезных доработках? Получается, проталкивание предложений - сугубо "личное" дело, прямиком в WRC.

ptn, по скорости gzip вы возможно правы (наверное, это мне так не везло с тормознутыми RAID-ами :) Но я стараюсь предлагать клиентам масштабируемые решения. Допускаю, что кому-то интересно паковать 10GB-файлы с целью экономии места. Но когда размер файла перевалит даже не за 500GB, а хотя бы за 200, поверьте, вы забудете про паковку. Ответственность будет совсем иная, приоритетом станет минимальное время простоя, которое в любом случае будет ниже, когда не будет затрат на распаковку. Даже решения с блочной дедупликацией данных (кстати, экономящие пространство значительно лучше, чем традиционные паковщики) по умолчанию не дедуплицируют файлы моложе 5 дней. Это не случайно: чаще всего восстанавливают последний или предпоследний бэкап.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39075460
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKB ,

Если всё же оперировать категорией "БД", а не "область", то задача решается легко и просто (даже смена области учитывается), как уже было отмечено в соседнем топике.

К тому же в документации приведена причина "незащиты" области:Database Resources Caché security does not directly control access to namespaces. Since a namespace can be mapped to multiple databases, there can be different security settings for its different underlying parts.

Ресурсы и что они защищают AlexKBИзменять правила доступа не вручную, а по определенным алгоритмам, которые исполняет Каше диспетчер-процесс.Создайте свой ресурс и давайте/забирайте его пользователю когда угодно совместно с делегированной аутентификацией .
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39075542
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,
Вот в этом направлении покопаюсь, спасибо за наводку, хотя скажу заранее, может и не подойдет.
В принципе можно оперировать и понятием БД, а не область, т.е. управлять доступом сразу к нескольким БД, которые составляют требуемую мне область.
Единственное что меня смущает, так это то, что я должен оставить возможность доработать тем процессам, которые уже приконекчены в настоящее время и никоим образом не ущемить их потребности. А вот новым дать запрет на доступ на некоторое время, они свой поток данных сбуферируют у себя и чуть позже вывалят свои данные. И еще, мне неважно кто именно стучится, мне важно чтобы они не начали сыпать мне новые данные.
И еще, это не связано с лицензионными ограничениями, это только связано с балансированием нагрузки на прикладном уровне.
Сервер все равно справляется, запас производительности достаточен.

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

Ведь только благодаря многим уникальным возможностям Каше и есть, чем он есть!
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39075547
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBА вдруг разработчики сидят и ломают голову - чтобы еще такого хорошего придумать.Думаю им точно нет времени так думать

AlexKBчто я должен оставить возможность доработать тем процессам, которые уже приконекчены в настоящее время и никоим образом не ущемить их потребности.С этим проблем не должно быть, пользователи подключившиеся уже получили необходимые роли и у них они останутся до переподключения. Так что проблем не должно быть.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39077203
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorAlexKBА вдруг разработчики сидят и ломают голову - чтобы еще такого хорошего придумать.Думаю им точно нет времени так думатьКак сказать...
Когда-то я очень долго ныл по поводу, что хорошо бы иметь , на уровне команд языка COS, преобразования float чисел во внутреннее представление числа и наоборот, а также длинные целые, битовые.
Хотя я тогда обходился и своими силами, начиная от программок написанных на Каше, до всяческих приблудных длл-лек, шмакадявок и прочей нечисти. Это решало проблемы, но тянуло за собой ряд других (не буду их перечислять, скажу только что они были и не мало). И вот свершилось чудо, а может просто добрые люди поселились в Интерсистемс - они включили такие преобразования и дали их прикладникам (а ведь могли бы их замкнуть внутри себя, если они были только им нужны на внутреннем уровне). Более того, они учли и чередование байтов, а это говорит о серьезности их подхода. Думаю, почти уверен, что почти никто не пользуется такими возможностями, поскольку они нужны только тем, кто работает с различными приборами и промышленными протоколами связи.
Но тем не менее, ценность такой доработки очень высока, хотя она практически не востребована.
Скажу больше, многие системы автоматизации промышленных процессов так и не имеют подобных решений до настоящего времени... И это является довольно-таки серьезной проблемой, если такая система выступает в качестве интегрирующего звена крупного промышленного решения.
А я много повидал различных систем автоматизации промышленных процессов и скажу вполне ответственно, что Каше заслуживает особого внимания как для разработчиков систем автоматизации, так и для разработчиков компании Интерсистемс.
Уже давно пора Каше осваивать новые горизонты, и уже давно пора смотреть специалистам Интерсистемс на новую нишу, на новую плоскость соприкосновения.

Имея такое колоссальное быстродействие, устойчивость в работе, такие возможности интеграции, такие встроенные возможности обработки больших объемов данных - просто преступно не смотреть в эту сторону!

Так что моя просьба об улучшении функциональности была не просто сиюминутной просьбой для решения частной и узкой моей собственной проблемы. Я вижу перспективу использования такой функциональности в будущем.

Уважаемые форумчане, перестаньте думать о том, что Каше нужна только для бухгалтерии (образно)!
Каше нужна и в сфере промышленной автоматизации, там сейчас завал, давно существующие решения уже не справляются со все растущими задачами промышленной автоматизации.
Единственно нечто похожее я видел только в технологии AspenTech, и ихнем сервере IP21, но уже давно не смотрел в ту сторону...
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39077264
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKB,

соглашусь, любая нереализованная системная хотелка порождает некий обходной манёвр на прикладном уровне. Тебе предложили 2 варианта, могу предложить 3-ий: в каждой области завести сигнальный глобал. Все прикладные программы при входе его проверяют, если выставлен запрет - на выход. При таком подходе возможна высокая степень дискретности (разные флаги для разных протоколов / подзадач).

Если пытаться проталкивать твоё предложение, его надо переформулировать, т.к., как справедливо заметил servit, область в Cache - не объект защиты. Возможно, имеет смысл говорить о запрете новых подключений к БД. Но что это такое: подключения к БД "/path/myDb"?
Код: javascript
1.
2.
 zn "myNsp" ; где все или часть глобалов myNsp отображены в myDb - это подключение?
 zn "^^/path/myDb"  ; а это?

Вне зависимости от ответа на эти вопросы, придётся разрешить выполнять подобные команды ранее запущенным процессам и запретить новым... А если старый процесс порождает дочерний по команде Job? Идеологически сложновато получается.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39077298
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov,
Объектом для нового внешнего подключения все же является область, ее мы всегда задаем в качестве параметра соединения при любом способе подключения. Тот системный процесс, который анализирует все новые входящие запросы на подключение, наверняка может отбить такие запросы, если есть в том такая необходимость. И этому системному процессу абсолютно все равно, какие базы собраны в эту область, какие глобалы переданы в эту область, до этого даже дело не дойдет. То что работающие задачи переключаются между областями, так и пусть себе переключаются, пусть себе порождают новые JOBы в разных областях. Они уже работают и не будем им мешать. Я говорю только о новых внешних подключениях к определенной области, просто не устанавливать новое соединение. Для того, кто пытается подключиться это будет выглядеть всего лишь как неудачная попытка соединения, которую он попытается повторить позже.(ну наподобие временного отсутствия связи). Главное, чтобы новое подключение не состоялось, а не было прервано на прикладном уровне после его выполнения. Повторюсь еще раз, входное соединение, в качестве параметра передает область, в которую просит подключиться. А мы ему говорим - извини, на данная область временно недоступна, подключайся позже, или подключайся в другую, альтернативную область. И это уже третий вопрос, что и основная и альтернативная область может собираться из одних и тех же глобалов, или баз данных.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39077309
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBAlexey Maslov,
Объектом для нового внешнего подключения все же является область, ее мы всегда задаем в качестве параметра соединения при любом способе подключения. Тот системный процесс, который анализирует все новые входящие запросы на подключение, наверняка может отбить такие запросы, если есть в том такая необходимость. И этому системному процессу абсолютно все равно, какие базы собраны в эту область, какие глобалы переданы в эту область, до этого даже дело не дойдет. То что работающие задачи переключаются между областями, так и пусть себе переключаются, пусть себе порождают новые JOBы в разных областях. Они уже работают и не будем им мешать. Я говорю только о новых внешних подключениях к определенной области, просто не устанавливать новое соединение. Для того, кто пытается подключиться это будет выглядеть всего лишь как неудачная попытка соединения, которую он попытается повторить позже.(ну наподобие временного отсутствия связи). Главное, чтобы новое подключение не состоялось, а не было прервано на прикладном уровне после его выполнения. Повторюсь еще раз, входное соединение, в качестве параметра передает область, в которую просит подключиться. А мы ему говорим - извини, на данная область временно недоступна, подключайся позже, или подключайся в другую, альтернативную область. И это уже третий вопрос, что и основная и альтернативная область может собираться из одних и тех же глобалов, или баз данных.Ну так, это и есть прикладная задача, которую есть возможность решать с помощью %ZSTART.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39077336
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
Увы, в %ZSTART область для нового подключения не всегда видна.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39077405
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBУвы, в %ZSTART область для нового подключения не всегда видна.Приведите код %ZSTART.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39077489
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предложение по улучшению API по работе с глобалами.
Начиная с 2015.1, появился метод %Library.GlobalEdit::GetGlobalSizeBySubscript(). Прогрессивная общественность это приветствовала, но оказалось, что размер в MB получается простым умножением размера в блоках на их кол-во. Поэтому пользоваться методом для обсчёта небольших подглобалов практически бессмысленно, слишком велика погрешность. Между тем, утилита %GSIZE отлично справляется с этим. Код внутри неё, естественно, совсем другой.

Предложение: упрятать этот (правильный) код внутрь метода класса, сделав функционал точного обсчёта подглобалов доступным программистам. Для обратной совместимости в сигнатуру метода можно добавить аргумент "считать быстро т.е. по-старому".
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39078266
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitAlexKBУвы, в %ZSTART область для нового подключения не всегда видна.Приведите код %ZSTART.

Интересно, и что же такого Вы хотите увидеть в этом коде..?
Вопрос обсуждения ведь состоит не в моем коде. Я ведь не ставил вопрос таким образом, мол помогите решить проблему. Я ставил вопрос о желательном развитии функционала в том направлении, что заявил. Я вижу его полезность в будущем для решения некоторых вопросов, я их озвучил. Вы же (я имею ввиду не Вас лично) мне предлагаете некоторые частные решения, которые на Ваш взгляд могли бы явиться альтернативой. Я привожу свои доводы, оппоненты, кроме единственного не привели - у разработчиков нет времени. Если бы Вы привели довод такого плана, что дополнительная проверка в момент разрешения регистрации в Каше увеличит время регистрации на 5% (а это было бы недопустимым с моей точки зрения), или появятся другие накладные расходы, что это приведет к иным последствиям там-то и там-то, тогда да, есть над чем подумать, мол стоит ли овчинка выделки. А так, если появление предлагаемой мной функциональности никоим образом не отразится на работе систем, построенных и проектируемых на базе Каше моими оппонентами, то получается, что обратных доводов у Вас просто нет.
Вот Алексей Маслов высказал свое пожелание, я его вполне поддерживаю - разумно иметь единый механизм решения вопроса, но двумя способами (или быстро, или точно - решает пользователь). Но ведь на сегодняшний день есть пути решения, зачем чего-то переделывать специалистам Интерсистемс? Но я за переделку, это было бы разумнее.

А код, да пожалуйста...  //%ZSTART
  quit
  //
JOB ; JOB'd process exits. 
  set $ZTrap="Error"
  set zapret=$g(^|"%SYS"|LLGG("ConnectDisable"),0)
  if zapret=1 {
    for i=0,1,4:1:15 set a(i)=$zu(67,i,$j)
    hang 200  // тут я смотрю в портале какими возможностями управления процессом я обладаю в данной точке исполнения
  }
  quit
  //
Error
  set $ZTrap=""
  quit
  //
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39078336
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBservitAlexKBУвы, в %ZSTART область для нового подключения не всегда видна.Приведите код %ZSTART.Интересно, и что же такого Вы хотите увидеть в этом коде..?Как Вы определяете текущую область, что она не всегда видна, хотя должна быть видна всегда.

Попробуйте использовать $ZNSPACE и не забывайте "ньючить" переменные:

JOB ; JOB'd process exits.
NEW zapret,i,a

PS: будете делать upgrade c 5.0, вместо устаревших (уже недокументируемых) функций $ZUTIL лучше использовать их эквиваленты.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39078423
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKB...разумно иметь единый механизм решения вопроса, но двумя способами (или быстро, или точно - решает пользователь). Но ведь на сегодняшний день есть пути решения...Это сильно сказано :) Можно взять исходник %GSIZE, и на его основе слепить свою функцию вычисления размера подглобала. Нам собственно так и пришлось сделать (жизнь заставила), ждать, пока это реализует (или мотивированно откажет) ISC времени не было. Но наше "решение" уступает по функциональности упомянутому методу класса, т.к. мы реализовали только то, что нам было необходимо. Само собой, сопровождать его придётся нам самим, если оно уйдёт в продакшн.

По твоей задаче снова прав servit. Причина: JOB^%ZSTART вызывается слишком рано, когда могут быть заполнены ещё не все $zu(67, параметры ,$j). В этих параметрах нет ничего "фундаментального", их просто заполняет серверный модуль протокола. Некоторые из них можно заполнить самостоятельно, хотя трудно придумать, зачем.
Я бы брал текущую область из $zu(5) или из $namespace.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39078498
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov,
Я ведь писал уже, что область, куда происходит соединение, проверить невозможно. В этом случае - она будет равна "%SYS", при любом способе ее получить.
Я ведь сознательно не привел в своем коде чему равна область...
a("$zu(5)")="%SYS"
a("znspace")="%SYS"
a(6)="%SYS"

Не думал я, что давая советы, Вы не станете проверять их результативность...
Я надеялся, что может еще получу совет в плане использования еще каких-нибудь недокументированных функций, команд, приемов...
Но, увы...
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39078530
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBНе думал я, что давая советы, Вы не станете проверять их результативность...Порылся в старом коде, нашёл у себя подобные проверки ($zu(67 в цикле) и аналогичные мучения. Так и есть, $zu(5) и иже с ней в момент вызова JOB^%ZSTART таки ещё не заполнены... Обход, который реально использовал:JOB
 job проверяльщик
   ...
проверяльщик
   hang 1
   if (текущая_область_процесса($zparent) запрещена для входа) d завершить_процесс($zparent)
   ...PS. Прошу прощения за невысокий уровень и многочисленные ошибки в моих консультациях.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39078534
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл поставить начальную метку JOB в псевдокоде, еще раз извиняюсь.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39078542
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кому интересно, по крайней мере в 2015.1 метод %Library.GlobalEdit::GetGlobalSizeBySubscript() в некоторых случаях даёт ошибку в разы, тогда как утилита %GSIZE правильно считает и быстрым (Show details = N), и медленным (Show details = Y) способами.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39078721
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov,
Вот, вот...
Только через проверяльщик мне не подходит, слишком много нехорошего родительский процесс сможет натворить, даже если я отловлю его и прибью через 20 мс...
На данный момент для меня все это не критично, но я думал над перспективой и было бы хорошее для меня решение одного из вопросов будущей разработки, если бы я смог воспользоваться функциональностью, о которой говорил...
А вопрос возник еще и потому, что вроде бы в одной из реализаций МАМПСов, с которыми я работал, такая возможность была...
Не берусь утверждать, но что-то такое крутится в голове...
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39078803
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKB...вроде бы в одной из реализаций МАМПСов, с которыми я работал, такая возможность была...Это вряд ли, т.к. понятие области afaik есть только в Cache (ещё м.б. в MiniM, но не уверен).
AlexKB...слишком много нехорошего родительский процесс сможет натворить...На прикладном уровне решается путём синхронизации родителя с потомком: родитель ждёт сигнала от потомка: "можно работать" или "пошёл вон". Методы синхронизации зависят от используемой версии Cache: Lock или $system.Event, подробно разжёвывать не буду.

Понятно, что тебе хотелось бы иметь готовый механизм "из коробки", но поскольку область - не объект защиты в её сегодняшней реализации, ИМХО, будет нелегко сподвигнуть ISC, но отчего не попробовать.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39083036
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся с такой фигней при использовании функции $locate() ...
Есть там последний параметр, в случае успешного поиска туда записывается найденная последовательность... Но фигня в том, что если ничего не найдено переменная не "обнуляется". В ней остается предыдущее значение!
По мне так это фигня полная.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39083038
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в этом примере  n
  s pos=1
  s str="'^global(1)':{'^global(1,1)':{'^global(1,1,1)':'111a'}},'^global(2)':{'^global(2,1)':{'^global(2,1,1)':'211a','^global(2,1,2)':'212a'},'^global(2,2)':{'^global(2,2,1)':'221a','^global(2,2,2)':'222a','^global(2,2,3)':{'^global(2,2,3,1)':{'^global(2,2,3,1,1)':'22311a'}}}}"
  do {
    s name=""
    s pos=$locate(str,"\^[a-z()\d,]+",pos,,name)
    s len=$l(name)
    if $i(pos,len)
    if name'="" {
      s value=""
      if $locate(str,":[\s\S]+?(?=')",pos,,value) 
      s value=$s(value=":{":"",1:$e(value,3,*))
      w !
      zw name,value
      // s @name=value
    }
  } while len
  qУбрать строки

s name=""

и

s value=""

Все просто перестанет работать
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39083040
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самый лучший вариант, с моей точки зрения, делать ту переменную неопределенной, если поиск ничего не нашел.
Потому как пустая строка так же может быть результативным значением.

Но оставлять предыдущее значение - это что-то с чем-то!
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39083052
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это нормальное поведение, $locate же возращает результат по которому можно верить или нет тому значению. Вы же в своем коде IF просто так повесили, и value разумеется может быть каким угодно. Этот код с ошибкой.
$data кстати работает так же, обновляет значение только в том случае если оно есть
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39083103
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMorЭто нормальное поведение
Это норма! (с)
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39083185
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaDAiMorЭто нормальное поведение
Это норма! (с) $locate работает согласно документации и менять её спецификацию (чтобы ByRef заменить на Output) вряд ли станут, ибо уже написано много кода и он может перестать правильно работать (потеряется совместимость).
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39083217
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда какой смысл в этой теме? Для объяснения почему это делать не станут?
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39083231
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaТогда какой смысл в этой теме? Для объяснения почему это делать не станут? Для адекватных предложений, а не для того чтобы закрыть свои баги в коде.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39083238
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эва!
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39083272
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitчтобы ByRef заменить на Output
Проблема кагбэ не в этом...
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39086480
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот думаю что нужно добавить. Расчет энтропии для пароля. С возможностью использовать это не только для встроенных пользователей, а и в том случае если используется собственная авторизация со своим хранением учеток пользователей и их паролей.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39096780
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, на самом деле смысл этой темы, чтобы ваши запросы превращались в WRC задачи, т.е. были решены и входили в продукт.

По части уже здесь предложенного либо есть либо будет создан продлог (задание на разработку).

Вопрос: как лучше всего по вашему мнению доносить эту информацию до вас? гуглотаблица? Специальный сайт? задания в редмайне?
Ваши предложения?
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39096806
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шваров ЕвгенийКоллеги, на самом деле смысл этой темы, чтобы ваши запросы превращались в WRC задачи, т.е. были решены и входили в продукт.

По части уже здесь предложенного либо есть либо будет создан продлог (задание на разработку).

Вопрос: как лучше всего по вашему мнению доносить эту информацию до вас? гуглотаблица? Специальный сайт? задания в редмайне?
Ваши предложения?Самое простое, это наверно гуглотаблица. redmine наверно будет перебор, с учетом что наверно нужен анонимный доступ
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39145371
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шваров Евгений,

Есть предложение расширить возможности оператора include.
Чтобы в код программы вставлялись не только inc-файлы, но и int и даже mac-файлы.
Подставлять содержимое int и mac файлов в код программы вместо оператора include.
Оператор include чтобы можно было писать в любом месте программы.

П.С.Был такой оператор в языке PL/1. Доказал свою пользу.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39145390
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDRШваров Евгений,

Есть предложение расширить возможности оператора include.
Чтобы в код программы вставлялись не только inc-файлы, но и int и даже mac-файлы.
Подставлять содержимое int и mac файлов в код программы вместо оператора include.
Оператор include чтобы можно было писать в любом месте программы.

П.С.Был такой оператор в языке PL/1. Доказал свою пользу.
а зачем это нужно, вставлять одни рутины в другие ?
если вы хотите чтобы у вас какие то функции всегда включались во всех программах, эти функции и пишите в INC файл, и тогда будет такой же результат.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39145394
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDRОператор include чтобы можно было писать в любом месте программы.А в чем сейчас проблема с этим, сейчас можно и так вставить в любом месте главное, чтобы перед использованием макроса
если вы конечно не про классы говорите, но там то другая тема, и не понятно зачем это может быть нужно.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39147489
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

Простите, ребята!
Я думал, что нельзя, раз AlexKB многострочными макросами заморачивается:)
А проверить поленился...Файл testinc.mac
Код: plaintext
1.
2.
3.
4.
5.
testinc  ;
 set msg="Hello include"
 do logMsg(msg)
 quit

 #include inctest
Файл testinc.int
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
testinc  ;
 set msg="Hello include"
 do logMsg(msg)
 quit
logMsg(msg)  ;
  new id,logFlag,username  
  set logFlag=$get(OMSession("LoggingFlag"),0) quit:logFlag>0  
  s id=$i(^log) 
  set username=$get(OMSession("username"),$username) 
  s ^log(id)=msg_"|"_username_"|"_$zdt($zts,3,1)  
  q  
logError(msg)  ;
  new id,username    
  s id=$i(^logError)    
  set username=$get(OMSession("username"),$username)    
  s ^logError(id)=msg_"|"_username_"|"_$zdt($zts,3,1)_"|"_$zerror    
  q    
Это то, что я хотел.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39151711
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Портале управления нигде не отображается состояние самого Менеджера задач (по крайней мере, в версиях <= 2015.1). Он может быть [при]остановлен, но догадаться об этом бывает нелегко даже достаточно опытному админу, тем более что о существовании утилиты ^TASKMGR знают не все.

Предложение: отображать состояние Менеджера задач в Портале, разумно было бы и в Планировщике задач , и в Системных показателях .
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39321536
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey MaslovПредложение: отображать состояние Менеджера задач в Портале, разумно было бы и в Планировщике задач , и в Системных показателях .Обещали в одной из будущих версий сделать. Ориентировочно в 2017.3.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39349092
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожалуйста, пожалуйста, пожалуйста!

Сделайте что-нибудь с пунктом [печать] в контекстном меню по классу из Студии

- Уберите вообще, есть Ctrl-P и меню Файл

- Уберите хотя бы подальше от пункта [Экспорт]

- По выбору хотя бы выдайте диалог, отправить на принтер или нет? Например тот же что и выходит по Ctrl-P

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

ЗЫ: Извините был напуган
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39384697
alatalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хочу новые ключи к компилятору COS чтобы хотя бы в явных случаях выдавал ошибки такой переменной/метода/свойства нет
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39385268
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alataloхочу новые ключи к компилятору COS чтобы хотя бы в явных случаях выдавал ошибки такой переменной/метода/свойства нетВряд ли это сделают, так как это не является ошибкой компиляции , поскольку необязательно приведёт к ошибке времени исполнения, ведь существует механизм динамической диспетчеризации методов и свойств ( статья на хабре).
Скорее это должно быть предупреждением статического анализа, чтобы обратить внимание разработчика на потенциально возможную проблему. Но опять же, учитывая природу скриптового языка COS (методы-генераторы и т.д.) ...
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39385289
alatalo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,
я понимаю. Поэтому заказываю только опциональный настроки, которые можно для конкретного проекта сделать.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39408149
Ваня_88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавьте пожалуйста атрибут spellcheck = false в <textarea> в SQL портале, чтобы FireFox красным цветом sql не подчеркивал.
Ну и сделать подсветку sql синтаксиса заодно)
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39410537
Ваня_88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И ещё... в окне портала (Редактировать роль) "Предоставить права доступа к таблице для MyRole" отображаются все схемы, даже схемы с классами, которые уже были добавлены для назначения привилегий. Неудобно, смотришь на несколько десятков схем и не видишь, в каких есть классы/таблицы, которые ты ещё не обработал.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39412958
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть старенькая проблема, о которой я говорил в wrc еще 2012 году, ее номер 774493.
Это потенциальная уязвимость, которая чревата нарушением структуры данных на прикладном уровне, связанная с изменением структуры данных класса (добавлением новых полей) и неперекомпиляции программ с запросами на обновление данных. В то время мы сошлись на том, что исправлять ее слишком сложно, это затронет много чего, и решать это правильно на организационном уровне, а на на уровне СУБД. Тем не менее, о проблеме я не забыл, и до сих пор мне кажется, что иметь такую поганенькую проблему для такой прекрасной СУБД нехорошо, поэтому попробую предложить ее решить через форум. Тем более, я почему-то уверен, что сложность ее решения преувеличена, а опасность все-таки довольно высокая.

Суть проблемы попробую изобразить на примере. Создадим простенький класс из двух полей:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Class Test.A Extends %Persistent
{

Property A1 As %String;

Property B1 As %String;

Storage Default
{
<Data name="ADefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>A1</Value>
</Value>
<Value name="3">
<Value>B1</Value>
</Value>
</Data>
<DataLocation>^Test.AD</DataLocation>
<DefaultData>ADefaultData</DefaultData>
<IdLocation>^Test.AD</IdLocation>
<IndexLocation>^Test.AI</IndexLocation>
<StreamLocation>^Test.AS</StreamLocation>
<Type>%Library.CacheStorage</Type>
}

}



И две одинаковые программы test.mac и test2.mac с кодом из одной строчки
Код: sql
1.
 &sql(insert into Test.A (A1,B1) values(10,20))


Скомпилируем эти программы и посмотрим их исходный код, он довольно прост:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  ;---&sql(insert into Test.A (A1,B1) values(10,20))
   ;--- ** SQL PUBLIC Variables: %ROWCOUNT, %ROWID, %msg, SQLCODE
 do %0Ao
 q
%0Ao try { n sqldata5d
 	if $zu(115,1)=1||('$TLEVEL&&($zu(115,1)=2)) { TSTART  s sqldata5d=1 }
 	n %i
 	s %i(2)=10,%i(3)=20
 	s %ROWID=##class(Test.A).%SQLInsert(.%i,$c(0,0,0,0,0,0,0),,,'$g(sqldata5d)),%ROWCOUNT='SQLCODE
 	if $zu(115,1)=1,$g(sqldata5d) { TCOMMIT:SQLCODE'<0  TROLLBACK:SQLCODE<0 1 }
 }
 catch { d SQLRunTimeError^%apiSQL($ze,.SQLCODE,.%msg) if $zu(115,1)=1,$g(sqldata5d) { TROLLBACK 1 } }
 quit  // From %0Ao



Добавим в наш класс одно поле A2 (имя важно!), класс после этого будет выглядеть так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Class Test.A Extends %Persistent
{

Property A1 As %String;

Property B1 As %String;

Property A2 As %String;

Storage Default
{
<Data name="ADefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>A1</Value>
</Value>
<Value name="3">
<Value>B1</Value>
</Value>
<Value name="4">
<Value>A2</Value>
</Value>
</Data>
<DataLocation>^Test.AD</DataLocation>
<DefaultData>ADefaultData</DefaultData>
<IdLocation>^Test.AD</IdLocation>
<IndexLocation>^Test.AI</IndexLocation>
<StreamLocation>^Test.AS</StreamLocation>
<Type>%Library.CacheStorage</Type>
}

}


И перекомпилируем только одну из них, ее int-код изменится:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  ;---&sql(insert into Test.A (A1,B1) values(10,20))
   ;--- ** SQL PUBLIC Variables: %ROWCOUNT, %ROWID, %msg, SQLCODE
 do %0Ao
 q
%0Ao try { n sqldata5d
 	if $zu(115,1)=1||('$TLEVEL&&($zu(115,1)=2)) { TSTART  s sqldata5d=1 }
 	n %i
 	s %i(2)=10,%i(4)=20
 	s %ROWID=##class(Test.A).%SQLInsert(.%i,$c(0,0,0,0,0,0,0),,,'$g(sqldata5d)),%ROWCOUNT='SQLCODE
 	if $zu(115,1)=1,$g(sqldata5d) { TCOMMIT:SQLCODE'<0  TROLLBACK:SQLCODE<0 1 }
 }
 catch { d SQLRunTimeError^%apiSQL($ze,.SQLCODE,.%msg) if $zu(115,1)=1,$g(sqldata5d) { TROLLBACK 1 } }
 quit  // From %0Ao



Что же изменилось у нас в int-программах? В аргументах для программы ##class(Test.A).%SQLInsert()
Раньше они собирались в переменную так:
Код: sql
1.
s %i(2)=10,%i(3)=20

А после добавления так:
Код: sql
1.
s %i(2)=10,%i(4)=20



Т.е. после добавления поля изменился порядок принимаемых данных в %SQLInsert, и неперекомпилированная программа вставит данные не в то поле. Более точно - аргументы сортируются по их имени (почему и было важно было название добавляемого свойства). Поэтому, поле A2 заняло место поля B1, а B1 сместилось дальше. Подобная же штука происходит и при компиляции запросов на одновление. Т.е. если вы на своей базе добавили незначительное, как вам кажется, поле и не перекомпилировали все классы и программы, которые изменяют строки таблицы, порожденной модифицированным классом , вы рискуете получить повреждение данных. Причем это не явная модификация структуры хранения (при этом разработчик должен отдавать себе отчет), а автоматическая.
Да, неправильно запросы на обновление делать где-то кроме основного класса, да, существует система связанной перекомпиляции, но тем не менее, ошибки возможны, так как не при любом изменении класса хочется перекомпилировать весь продуктовый сервер, а зависимости перекомпиляции не учитывают, например, те же программы.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39412961
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,

мне кажется, добавление переменных по их имени решило бы проблему.
например, так:
Код: sql
1.
s %i("A1")=10,%i("B1")=20
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39413002
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,

Еще одна причина отказаться от embedded sql
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39513915
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для COS что-нибудь похожее на defer из Go
было бы удобно при работе с файлами, запросами, устройствами
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39513935
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintдля COS что-нибудь похожее на defer из Go
было бы удобно при работе с файлами, запросами, устройствамиИнтересная идея, я вижу вызов точно таким же как команду DO. т.е. нужно например иметь метод для закрытия открытых обектов по выходу из методов. Примерно, как у нас есть возможность вернуться в рабочую область при выходе из метода, в котором перешли в другую область
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39513947
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя может быть было бы полезнее например так
Код: sql
1.
2.
 LOCK +^SomeGlobal
 DEFER { LOCK -^SomeGlobal }


Так, это будет что-то типа анонимных функций, думаю что так будет полезнее, проблема
Код: sql
1.
2.
3.
4.
5.
6.
7.
 set filename="/tmp/file"
 OPEN filename:("NRW")
 USE filename
 DEFER {
   USE 0
   CLOSE filename
 }
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39514259
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

Мм, $ET?
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39514274
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

Ну ладно, $ET это не совсем то, но смысл такой же.
Мне кажется, в Каше многим не хватает возможности передачи кода как аргумента, сохранения кода в переменную и так далее.
При том, что есть возможность передачи кода как строки. Но, видимо, это не очень удобно. Например, потому, что синтаксис кода в строке не подсвечивается, очень неудобно делать многострочный код. Может быть, сделать команду превращения кода в строку, а еще лучше - в специльную структуру, которую потом можно выполнить или передать как аргумент.
Блин, кажется, я анонимные функции изобрел :-) А почему нет? Ведь для этого почти все есть. Тот же $XECUTE работает можно сказать, как исполнитель анонимных функций. Даже под это специальный формат строки есть.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39514306
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.DAiMor,

Мм, $ET?а каким боком оно вообще тут, $et, занимается отловом ошибок, и вообще это переменная
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39514391
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

$ET - это переменная, которая содержит код, который выполняется при определенных условиях. Разве не этого же по сути вы хотите от DEFER?
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39514459
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как ты и сам заметил $ET и $X принимают лишь текст, и читать такой код не просто, и ошибки во время неизбежны. Что-то типа анонимных функций, как в моем примере, или какой нибудь вариант но с возможностью передать аргументы, было намного лучше.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39587951
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, оператор типа
for(key in global) немного улучшил читаемость и сократил код при работе с многомерными переменными.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39588164
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н., они же многомерные и сортированные, как быть с "drilldown" и направлением обхода?
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39588226
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint,

идти по одному уровню в прямом направлении. Иногда нужно просто обойти все, и текущая конструкция для этого слишком громоздкая.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39588242
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Иногда...
В этом случае больше нравится подход со скрытием внутренностей итераций, что-то вроде .keys().next() .map() или .filter() и т.д.
Функции как first class member?
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39588349
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint,

Функции как аргумент - неплохо, но я пока не вижу их без слома текущего синтаксиса. Так то бы это в некотором смысле могло перевернуть разработку на Каше (наверное). Ну нужно думать и много чего просчитывать, в том числе логические конфликты с текущими умолчаниями.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39641718
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как же, блин, иногда не хватает банального переименования классов. Пофиг на поиск мест, где используется и попытки исправить.
Пусть даже схема хранения остается старой, это руками можно поправить, если нужно (просто, это не всегда нужно)
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39642211
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Как же, блин, иногда не хватает банального переименования классов. Пофиг на поиск мест, где используется и попытки исправить.
Пусть даже схема хранения остается старой, это руками можно поправить, если нужно (просто, это не всегда нужно)
Вообще вроде бы эта возможность давно уже есть
в студии курсор поставить на имени класса и в меню выбрать Class -> Refactor -> Rename
там может предложить и сбросить хранилище если класс хранимый.
что именно переименовать понимает по курсору, так что диалог и процесс будет отличататься
но все равно следующим этапом покажет предлагаемые изменения в классах, но нужно понимать что работает в контексте либо проекта либо текущего класса. Так что если проектами не пользуешся и нужно поменять везде, нужно будет сделать проект.
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39642412
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

Спасибо :-)
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39672043
kalin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему личному мнению, главная ошибка Intersystems совершилась, когда была разработана технология CSP и CacheObjectScript.
Для привлечения потенциальных разработчиков необходимо было использовать готовые решения на базе уже существующих наиболее распространенных языков программирования , например Python, PHP и т.д. В Cache необходимо было реализовать только хранилище данных, а не реализовывать все эти классы типа SMTP, pop3 и прочее, которые реализованы гораздо лучше и шире в приведенных языках. Тот же Python отлично умеет работать с JSON и его структурами, которые можно было положить на Cache глобали. Пытаясь внедрить тот же Apache в ядро Cache получили в результате неполноценный обрезок WEB сервера, хотя можно было сделать все по другому.
В результате имеем непонятную "классическим" M программистам технологию, которые и дальше пишут на "голом" М c прикручиванием своих сокетов и разработкой собственных протоколов взаимодействия с базой.
Это мое личное мнение :)
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39672214
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kalin,

а я не понимаю этих стенаний по поводу того, как COS сложен для нового программиста. Любой, кто знает больше одного языка программирования, освоит COS за несколько дней. В вебе за пару лет меняется больше, чем в Каше за 10 и никто не плачет "ах как же мы во всем этом новом разберемся". Разбираются. Не в этом причина слабой распространенности Каше.

Язык не подразумевает реализации, и библиотеки не являются частью языка. Если бы вместо COS был бы Питон, то пришлось бы либо использовать библиотеки Питона, либо писать их заново. Основная фишка Каше - возможность построить быструю систему за счет близости физического и логического представления данных. Т.е. на самом деле, пришлось бы писать компилятор заново, так как в язык пришлось бы внедрять работу с глобалами (между JSON и глобалами нет однозначного соответствия), и в результате получился бы какой-нибудь Python+. В конце концов, никто не мешает работать на Питоне, а в качестве хранилища использовать Каше. Но кто будет в здравом уме при такой цене Каше так делать? Ведь даже и с бесплатным MUMPS не особо слышно про такие гибриды.

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

>>В результате имеем непонятную "классическим" M программистам технологию, которые и дальше пишут на "голом" М
Вы меня извините, если классические М программисты не могут понять КОС, то возникают вопросы к их обучаемости. Как они тогда понимают Питон?
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39672228
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kalin, что-то вы сами себе противоречите.
В соседних темах агитируете заниматься высокоуровневым программированием, а здесь говорите, что COS ошибка.
Так он же как раз и позволяет оторваться от непрерывного размножения кода вида "из глобали X узла Y возьмем/положим элемент Z по разделителю P". Записать "ЭкземплярСущностиN.cохранись()", имхо, гораздо удобнее и высокоуровневее.
Привязка к "наиболее распространенных языков программирования" звучит как ловушка. А так все свое :)
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39700394
kalin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintБлок А.Н.Иногда...
В этом случае больше нравится подход со скрытием внутренностей итераций, что-то вроде .keys().next() .map() или .filter() и т.д.
Функции как first class member?
А вот тут "истину глаголете" :)
"filtered()
Возвращает НЗ, содержащий только записи, удовлетворяющие предоставленной предикатной функции.
sorted()
Возвращает НЗ, отсортированный по предоставленной ключевой функции. Если ключ не указан, используется порядок сортировки установленный для модели данных по умолчанию
mapped()
Применяет предоставленную функцию к каждой записи в НЗ, возвращает НЗ, если результаты являются НЗ
search()
Принимает параметры поиска в виде домена, и возвращает НЗ который удовлетворяют условиям поиска. Может возвращать часть НЗ совпадающих записей (параметры offset и limit) и может быть отсортирован (параметр order)"
...
Рейтинг: 0 / 0
Улучшения, новые фичи в технологиях InterSystems
    #39700400
kalin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefintТак он же как раз и позволяет оторваться от непрерывного размножения кода вида "из глобали X узла Y возьмем/положим элемент Z по разделителю P". Записать "ЭкземплярСущностиN.cохранись()", имхо, гораздо удобнее и высокоуровневее.
)
Ну да, так и писали еще в 1985 году в системе "Диамс" :)
...
Рейтинг: 0 / 0
87 сообщений из 87, показаны все 4 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Улучшения, новые фичи в технологиях InterSystems
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]