|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Привет! В эту тему предлагается писать все пожелания по доработке новых фич, возможностей, оптимизаций по технологиям InterSytems, а именно: СУБД Cache, интеграционной платформе Ensemble, BI технологии DeepSee и технологии анализа текста iKnow. Инженеры InterSystems по возможности будут подключаться к обсуждению тем. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2015, 18:56 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Шваров Евгений, 1. На фоне давнишнего наличия мнемоники открытия файлов /GZIP было бы крайне неплохо иметь возможность сжатия бэкапа на лету, в момент создания, ну и чтения сжатого бэкапа при восстановлении :) 2. Сейчас любой файл создаваемый средствами Cach'e на *nix системах создается с проставленными правами на исполнение, было бы неплохо что бы так не было :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2015, 02:47 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Ptn2. Сейчас любой файл создаваемый средствами Cach'e на *nix системах создается с проставленными правами на исполнение, было бы неплохо что бы так не было :)+1 Ptn1. На фоне давнишнего наличия мнемоники открытия файлов /GZIP было бы крайне неплохо иметь возможность сжатия бэкапа на лету, в момент создания, ну и чтения сжатого бэкапа при восстановлении :)Вы сами пробовали поиграться с этой идеей? Утилиты DBACK* в исходниках, добавить параметр в команду Open не ахти как сложно. Из общих соображений, пока что не могу плюсануть: бэкап желательно выполнять побыстрее, а любое сжатие его, как правило, замедляет. Можно показать, что оно его начинает ускорять, лишь когда Код: sql 1. 2. 3. 4. 5.
Восстанавливать бэкап тоже желательно побыстрее, но любая распаковка замедляет этот процесс ещё сильнее. Единственный, пожалуй, случай, когда сжатие файла бэкапа уместно - при переносе его в долговременный архив. Но это уже не он-лайн... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 10:55 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Alexey Maslov, >Вы сами пробовали поиграться с этой идеей? Ну c GZIP я активно работают, ибо до буквально недавних пор системные возможности были странными. Например открыть файл через %Stream.FileCharacterGzip и передать его SAX парсеру приводило к фатальному неуспеху. >Утилиты DBACK* в исходниках, добавить параметр в команду Open не ахти как сложно. Мне не нравится идея ручного вмешательства в системные утилиты, пусть лучше сами сделают >бэкап желательно выполнять побыстрее, а любое сжатие его, как правило, замедляет. Он не будет быстрее чем может принять дисковая система, и проц при этом используется мало. GZIP же достаточно быстрый, если им даже http на лету жмут. И когда бэкапы начинают выходит за 50Гб отметку, сжатия на лету хочется все больше и больше. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 11:07 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
PtnМне не нравится идея ручного вмешательства в системные утилиты, пусть лучше сами сделаютВмешательство "не корысти ради", а лишь чтобы попробовать. PtnОн не будет быстрее чем может принять дисковая система, и проц при этом используется мало.Это понятно. Но современные RAIDы легко принимают 70MB/s (не буду уточнять характеристики RAIDа); я в своё время не нашёл архиватора, который в состоянии сделать больше, принимая бэкап через pipe. PtnGZIP же достаточно быстрый, если им даже http на лету жмут.И в этом есть смысл, т.к. даже при скромной скорости сжатия 5MB/s скорость передачи данных по сети у "усреднённого" пользователя интернета заметно ниже. PtnИ когда бэкапы начинают выходит за 50Гб отметку, сжатия на лету хочется все больше и больше.Когда бэкап начинает выходить за отметку 500GB, полный бэкап обычно начинают делать раз в неделю, а ежедневный становится инкрементным. Выигрыш и по скорости, и по дисковому пространству, сами понимаете, при этом не сопоставим с любым разумным сжатием. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 11:23 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
PtnСейчас любой файл создаваемый средствами Cach'e на *nix системах создается с проставленными правами на исполнение, было бы неплохо что бы так не было :) Для этого можно использовать методы ##class(%File).SetAttributes(), ##class(%File).SetReadOnly() и ##class(%File).SetWriteable(). Документация . ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 11:28 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Ptn, Cache' использует маску 777 для файлов. Соответственно при umask 022 права получаются 755 Если поставить umask 133, то права будут 644: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 12:02 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2015, 18:09 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
eduard93, >Для этого можно использовать методы ##class(%File).SetAttributes(), ##class(%File).SetReadOnly() и ##class(%File).SetWriteable() А можно использовать другие, какая разница какие, я уже решил эту проблему своим личным способом. Но тема то у нас вроде как о доработке новых фич. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 08:16 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Alexey Maslov, >Вмешательство "не корысти ради", а лишь чтобы попробовать. Да толку то пробовать ? Я знаю что смогу, как и знаю что не смогу в здравом уме использовать это в продакшене. Ну вот вообще не увлекает "патчить" каждый сервер. >Это понятно. Но современные RAIDы легко принимают 70MB/s (не буду уточнять характеристики RAIDа); я в своё время не нашёл архиватора, который в состоянии сделать больше, принимая бэкап через pipe. Я готов немного пожертвовать скоростью, хотя вот пример для обычного SATA диска и Intel(R) Xeon(R) CPU E3-1230 V2 @ 3.30GHz - файл успевает подаваться в gzip под 50Мб/с Код: c# 1. 2.
И это с максимальной степенью сжатия (-9 по умолчанию), если поставить -5 то можно и 70Мб/с получить. >Выигрыш и по скорости, и по дисковому пространству, сами понимаете, при этом не сопоставим с любым разумным сжатием. Да мы собственно и на 10Гб так делаем, но что бы развернуть такой архив вам что нужно сделать ? Сначала распаковать (-500Гб места), потом запустить восстановление что бы прокачать эти же 500Гб по сети/схд или что там еще есть. Мне кажется опциональная возможность, подчеркиваю опциональная, будет весьма интересна ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 08:33 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
kalin, >Аналогично распаковываем через gunzip Ребят вы что такие трудные ? Я уже прекрасно упаковываю и распаковываю средствами ОС, блин прочитайте первый пост Евгения. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 08:35 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Александр Коблов, >Cache' использует маску 777 для файлов. 1. Зачем она использует именно такую маску ? Когда к примеру создается тот же бэкап маска по моему крайне другая. 2. Почему бы не дать возможность самостоятельно указывать маску ? >Если поставить umask 133, то права будут 644: Нужно попробовать, но меня смущает что будет при создании директорий ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 08:38 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Позвольте мне вставить и свои пять копеек. Лично я столкнулся с необходимостью устанавливать временный запрет для регистрации в задаваемых областях новых пользователей, что-то по аналогии с полным запретом регистрации новых пользователей во всех областях <$$%swset^SWSET(12,1)>. Считаю, что такой функционал позволил бы управлять балансированием нагрузки на систему при различных пиковых ситуациях. Т.е. некий процесс диспетчер выполняет анализ на прикладном уровне и при необходимости ставит временный запрет на регистрацию новых подключений к некоторым областям. При снижении нагрузки - снимает запрет. Пока не могу ничего сказать по поводу CSP-подключений, но для CallIn и DirectAccess подключений это было бы решением проблемы. Оба эти интерфейса позволяют осуществлять доступ к любым программам и данным, при этом проконтролировать такой доступ все-таки представляет определенные трудности. Доступ же к другим областям остается на прежнем уровне. Конечно же существует много вариантов разрешить такую проблему, но зачастую клиентские приложения уже не возможно переделать, чтобы контроль выполнять на их стороне, да и централизованный контроль, управление балансированием нагрузки на прикладной уровень (на системном уровне это не сказывается и не критично) будет гораздо проще и разумнее. К тому же и код вызываемых процедур на стороне Каше тоже может быть спрятан и не подлежит доработке простыми решениями. Ну что же, давайте обсуждать. Постараюсь выдержать любую критику и намотать на ум все Ваши разумные доводы. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 10:51 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
AlexKBПозвольте мне вставить и свои пять копеек. Лично я столкнулся с необходимостью устанавливать временный запрет для регистрации в задаваемых областях новых пользователей, что-то по аналогии с полным запретом регистрации новых пользователей во всех областях <$$%swset^SWSET(12,1)>. Считаю, что такой функционал позволил бы управлять балансированием нагрузки на систему при различных пиковых ситуациях. Т.е. некий процесс диспетчер выполняет анализ на прикладном уровне и при необходимости ставит временный запрет на регистрацию новых подключений к некоторым областям. При снижении нагрузки - снимает запрет. Пока не могу ничего сказать по поводу CSP-подключений, но для CallIn и DirectAccess подключений это было бы решением проблемы. Оба эти интерфейса позволяют осуществлять доступ к любым программам и данным, при этом проконтролировать такой доступ все-таки представляет определенные трудности. Доступ же к другим областям остается на прежнем уровне. Конечно же существует много вариантов разрешить такую проблему, но зачастую клиентские приложения уже не возможно переделать, чтобы контроль выполнять на их стороне, да и централизованный контроль, управление балансированием нагрузки на прикладной уровень (на системном уровне это не сказывается и не критично) будет гораздо проще и разумнее. К тому же и код вызываемых процедур на стороне Каше тоже может быть спрятан и не подлежит доработке простыми решениями. Ну что же, давайте обсуждать. Постараюсь выдержать любую критику и намотать на ум все Ваши разумные доводы.В данном случае не вижу большого смысла внедрять что-то такое в ядро. Это задача прикладная, и решать ее можно на прикладном уровне. Можно например воспользоваться HAProxy. Он подойдет даже если у вас к серверу пользователи подключаются по DirectAccess и CSP. В нем можно управлять подключением к серверу, переводя сервер в режим обслуживания. для веб пользователей, можно будет отображать страничку о том что проводится обслуживание. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 11:12 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
DAiMor, И каким образом можно будет динамически управлять этой штуковиной, в зависимости от складывающейся ситуации, т.е. установка-снятие запрета. Я же писал, что есть некоторый Каше процесс-диспетчер, который определят что необходимо сделать в той, или иной области. Если круглосуточно необходимо следить за балансировкой нагрузки и управлять ею по определенным правилам постоянно снимая устанавливая запрет к меняющемуся списку областей. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 11:24 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
AlexKBDAiMor, И каким образом можно будет динамически управлять этой штуковиной, в зависимости от складывающейся ситуации, т.е. установка-снятие запрета. Я же писал, что есть некоторый Каше процесс-диспетчер, который определят что необходимо сделать в той, или иной области. Если круглосуточно необходимо следить за балансировкой нагрузки и управлять ею по определенным правилам постоянно снимая устанавливая запрет к меняющемуся списку областей.Как много вы знаете о возможностях HAProxy ? там есть такая вещь как, обращение к определенному адресу, для проверки доступности сервера, и он должен вернуть определнный ответ, все настраиваемо. И если ответ не верный от сервера, сервер будет отключен как не доступный. Вот и ваша специальная страничка может возращать статус, пускать или нет пользователей. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 11:28 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
DAiMor, Честно говоря, ничего не знаю - бегло прочитал только... Но, мне не нужно закрывать полный доступ к серверу, а только к определенным областям. Мне нужно постоянно менять правила доступа к этим областям, т.е. нерегулярный поток изменения конфигурации доступа к областям (список областей меняется) на пиках 5-30 секунд. Изменять правила доступа не вручную, а по определенным алгоритмам, которые исполняет Каше диспетчер-процесс. Там такое возможно? К тому же никто не будет видеть никаких страничек, поскольку в Каше ломятся приборные драйвера. И самое главное, я отчетливо вижу, что такое управление доступом необходимо замыкать внутри Каше. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 11:44 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
AlexKBDAiMor, Честно говоря, ничего не знаю - бегло прочитал только... Но, мне не нужно закрывать полный доступ к серверу, а только к определенным областям. Мне нужно постоянно менять правила доступа к этим областям, т.е. нерегулярный поток изменения конфигурации доступа к областям (список областей меняется) на пиках 5-30 секунд. Изменять правила доступа не вручную, а по определенным алгоритмам, которые исполняет Каше диспетчер-процесс. Там такое возможно? К тому же никто не будет видеть никаких страничек, поскольку в Каше ломятся приборные драйвера. И самое главное, я отчетливо вижу, что такое управление доступом необходимо замыкать внутри Каше.Там такое можно сделать, точно для CSP для TCP нужно смотреть ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 11:46 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Видите, как даже нескольким коллегам сложно найти точки соприкосновения. Как уж тут сформировать коллективное мнение о полезных доработках? Получается, проталкивание предложений - сугубо "личное" дело, прямиком в WRC. ptn, по скорости gzip вы возможно правы (наверное, это мне так не везло с тормознутыми RAID-ами :) Но я стараюсь предлагать клиентам масштабируемые решения. Допускаю, что кому-то интересно паковать 10GB-файлы с целью экономии места. Но когда размер файла перевалит даже не за 500GB, а хотя бы за 200, поверьте, вы забудете про паковку. Ответственность будет совсем иная, приоритетом станет минимальное время простоя, которое в любом случае будет ниже, когда не будет затрат на распаковку. Даже решения с блочной дедупликацией данных (кстати, экономящие пространство значительно лучше, чем традиционные паковщики) по умолчанию не дедуплицируют файлы моложе 5 дней. Это не случайно: чаще всего восстанавливают последний или предпоследний бэкап. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 12:03 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
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Изменять правила доступа не вручную, а по определенным алгоритмам, которые исполняет Каше диспетчер-процесс.Создайте свой ресурс и давайте/забирайте его пользователю когда угодно совместно с делегированной аутентификацией . ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 13:06 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
servit, Вот в этом направлении покопаюсь, спасибо за наводку, хотя скажу заранее, может и не подойдет. В принципе можно оперировать и понятием БД, а не область, т.е. управлять доступом сразу к нескольким БД, которые составляют требуемую мне область. Единственное что меня смущает, так это то, что я должен оставить возможность доработать тем процессам, которые уже приконекчены в настоящее время и никоим образом не ущемить их потребности. А вот новым дать запрет на доступ на некоторое время, они свой поток данных сбуферируют у себя и чуть позже вывалят свои данные. И еще, мне неважно кто именно стучится, мне важно чтобы они не начали сыпать мне новые данные. И еще, это не связано с лицензионными ограничениями, это только связано с балансированием нагрузки на прикладном уровне. Сервер все равно справляется, запас производительности достаточен. Я почему выдвинул именно такую хотелку, потому что все решается максимально просто на прикладном уровне при ее наличии. А если разработчикам Интерсистемс такая доработка совсем не представляет труда, то почему бы и нет, все равно ведь похожий механизм у них есть, и он очень прост, и понятен в использовании. А вдруг разработчики сидят и ломают голову - чтобы еще такого хорошего придумать. Ведь все равно в Каше есть много всяких возможностей, которыми почти никто не пользуется, но ценность их все таки присутствует. Ведь только благодаря многим уникальным возможностям Каше и есть, чем он есть! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 13:54 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
AlexKBА вдруг разработчики сидят и ломают голову - чтобы еще такого хорошего придумать.Думаю им точно нет времени так думать AlexKBчто я должен оставить возможность доработать тем процессам, которые уже приконекчены в настоящее время и никоим образом не ущемить их потребности.С этим проблем не должно быть, пользователи подключившиеся уже получили необходимые роли и у них они останутся до переподключения. Так что проблем не должно быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2015, 13:58 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
DAiMorAlexKBА вдруг разработчики сидят и ломают голову - чтобы еще такого хорошего придумать.Думаю им точно нет времени так думатьКак сказать... Когда-то я очень долго ныл по поводу, что хорошо бы иметь , на уровне команд языка COS, преобразования float чисел во внутреннее представление числа и наоборот, а также длинные целые, битовые. Хотя я тогда обходился и своими силами, начиная от программок написанных на Каше, до всяческих приблудных длл-лек, шмакадявок и прочей нечисти. Это решало проблемы, но тянуло за собой ряд других (не буду их перечислять, скажу только что они были и не мало). И вот свершилось чудо, а может просто добрые люди поселились в Интерсистемс - они включили такие преобразования и дали их прикладникам (а ведь могли бы их замкнуть внутри себя, если они были только им нужны на внутреннем уровне). Более того, они учли и чередование байтов, а это говорит о серьезности их подхода. Думаю, почти уверен, что почти никто не пользуется такими возможностями, поскольку они нужны только тем, кто работает с различными приборами и промышленными протоколами связи. Но тем не менее, ценность такой доработки очень высока, хотя она практически не востребована. Скажу больше, многие системы автоматизации промышленных процессов так и не имеют подобных решений до настоящего времени... И это является довольно-таки серьезной проблемой, если такая система выступает в качестве интегрирующего звена крупного промышленного решения. А я много повидал различных систем автоматизации промышленных процессов и скажу вполне ответственно, что Каше заслуживает особого внимания как для разработчиков систем автоматизации, так и для разработчиков компании Интерсистемс. Уже давно пора Каше осваивать новые горизонты, и уже давно пора смотреть специалистам Интерсистемс на новую нишу, на новую плоскость соприкосновения. Имея такое колоссальное быстродействие, устойчивость в работе, такие возможности интеграции, такие встроенные возможности обработки больших объемов данных - просто преступно не смотреть в эту сторону! Так что моя просьба об улучшении функциональности была не просто сиюминутной просьбой для решения частной и узкой моей собственной проблемы. Я вижу перспективу использования такой функциональности в будущем. Уважаемые форумчане, перестаньте думать о том, что Каше нужна только для бухгалтерии (образно)! Каше нужна и в сфере промышленной автоматизации, там сейчас завал, давно существующие решения уже не справляются со все растущими задачами промышленной автоматизации. Единственно нечто похожее я видел только в технологии AspenTech, и ихнем сервере IP21, но уже давно не смотрел в ту сторону... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2015, 09:20 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
AlexKB, соглашусь, любая нереализованная системная хотелка порождает некий обходной манёвр на прикладном уровне. Тебе предложили 2 варианта, могу предложить 3-ий: в каждой области завести сигнальный глобал. Все прикладные программы при входе его проверяют, если выставлен запрет - на выход. При таком подходе возможна высокая степень дискретности (разные флаги для разных протоколов / подзадач). Если пытаться проталкивать твоё предложение, его надо переформулировать, т.к., как справедливо заметил servit, область в Cache - не объект защиты. Возможно, имеет смысл говорить о запрете новых подключений к БД. Но что это такое: подключения к БД "/path/myDb"? Код: javascript 1. 2.
Вне зависимости от ответа на эти вопросы, придётся разрешить выполнять подобные команды ранее запущенным процессам и запретить новым... А если старый процесс порождает дочерний по команде Job? Идеологически сложновато получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2015, 10:08 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Alexey Maslov, Объектом для нового внешнего подключения все же является область, ее мы всегда задаем в качестве параметра соединения при любом способе подключения. Тот системный процесс, который анализирует все новые входящие запросы на подключение, наверняка может отбить такие запросы, если есть в том такая необходимость. И этому системному процессу абсолютно все равно, какие базы собраны в эту область, какие глобалы переданы в эту область, до этого даже дело не дойдет. То что работающие задачи переключаются между областями, так и пусть себе переключаются, пусть себе порождают новые JOBы в разных областях. Они уже работают и не будем им мешать. Я говорю только о новых внешних подключениях к определенной области, просто не устанавливать новое соединение. Для того, кто пытается подключиться это будет выглядеть всего лишь как неудачная попытка соединения, которую он попытается повторить позже.(ну наподобие временного отсутствия связи). Главное, чтобы новое подключение не состоялось, а не было прервано на прикладном уровне после его выполнения. Повторюсь еще раз, входное соединение, в качестве параметра передает область, в которую просит подключиться. А мы ему говорим - извини, на данная область временно недоступна, подключайся позже, или подключайся в другую, альтернативную область. И это уже третий вопрос, что и основная и альтернативная область может собираться из одних и тех же глобалов, или баз данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2015, 10:36 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
AlexKBAlexey Maslov, Объектом для нового внешнего подключения все же является область, ее мы всегда задаем в качестве параметра соединения при любом способе подключения. Тот системный процесс, который анализирует все новые входящие запросы на подключение, наверняка может отбить такие запросы, если есть в том такая необходимость. И этому системному процессу абсолютно все равно, какие базы собраны в эту область, какие глобалы переданы в эту область, до этого даже дело не дойдет. То что работающие задачи переключаются между областями, так и пусть себе переключаются, пусть себе порождают новые JOBы в разных областях. Они уже работают и не будем им мешать. Я говорю только о новых внешних подключениях к определенной области, просто не устанавливать новое соединение. Для того, кто пытается подключиться это будет выглядеть всего лишь как неудачная попытка соединения, которую он попытается повторить позже.(ну наподобие временного отсутствия связи). Главное, чтобы новое подключение не состоялось, а не было прервано на прикладном уровне после его выполнения. Повторюсь еще раз, входное соединение, в качестве параметра передает область, в которую просит подключиться. А мы ему говорим - извини, на данная область временно недоступна, подключайся позже, или подключайся в другую, альтернативную область. И это уже третий вопрос, что и основная и альтернативная область может собираться из одних и тех же глобалов, или баз данных.Ну так, это и есть прикладная задача, которую есть возможность решать с помощью %ZSTART. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2015, 10:41 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
DAiMor, Увы, в %ZSTART область для нового подключения не всегда видна. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2015, 10:59 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
AlexKBУвы, в %ZSTART область для нового подключения не всегда видна.Приведите код %ZSTART. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2015, 11:36 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Предложение по улучшению API по работе с глобалами. Начиная с 2015.1, появился метод %Library.GlobalEdit::GetGlobalSizeBySubscript(). Прогрессивная общественность это приветствовала, но оказалось, что размер в MB получается простым умножением размера в блоках на их кол-во. Поэтому пользоваться методом для обсчёта небольших подглобалов практически бессмысленно, слишком велика погрешность. Между тем, утилита %GSIZE отлично справляется с этим. Код внутри неё, естественно, совсем другой. Предложение: упрятать этот (правильный) код внутрь метода класса, сделав функционал точного обсчёта подглобалов доступным программистам. Для обратной совместимости в сигнатуру метода можно добавить аргумент "считать быстро т.е. по-старому". ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2015, 12:38 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
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 // ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2015, 09:08 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
AlexKBservitAlexKBУвы, в %ZSTART область для нового подключения не всегда видна.Приведите код %ZSTART.Интересно, и что же такого Вы хотите увидеть в этом коде..?Как Вы определяете текущую область, что она не всегда видна, хотя должна быть видна всегда. Попробуйте использовать $ZNSPACE и не забывайте "ньючить" переменные: JOB ; JOB'd process exits. NEW zapret,i,a PS: будете делать upgrade c 5.0, вместо устаревших (уже недокументируемых) функций $ZUTIL лучше использовать их эквиваленты. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2015, 10:29 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
AlexKB...разумно иметь единый механизм решения вопроса, но двумя способами (или быстро, или точно - решает пользователь). Но ведь на сегодняшний день есть пути решения...Это сильно сказано :) Можно взять исходник %GSIZE, и на его основе слепить свою функцию вычисления размера подглобала. Нам собственно так и пришлось сделать (жизнь заставила), ждать, пока это реализует (или мотивированно откажет) ISC времени не было. Но наше "решение" уступает по функциональности упомянутому методу класса, т.к. мы реализовали только то, что нам было необходимо. Само собой, сопровождать его придётся нам самим, если оно уйдёт в продакшн. По твоей задаче снова прав servit. Причина: JOB^%ZSTART вызывается слишком рано, когда могут быть заполнены ещё не все $zu(67, параметры ,$j). В этих параметрах нет ничего "фундаментального", их просто заполняет серверный модуль протокола. Некоторые из них можно заполнить самостоятельно, хотя трудно придумать, зачем. Я бы брал текущую область из $zu(5) или из $namespace. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2015, 11:37 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Alexey Maslov, Я ведь писал уже, что область, куда происходит соединение, проверить невозможно. В этом случае - она будет равна "%SYS", при любом способе ее получить. Я ведь сознательно не привел в своем коде чему равна область... a("$zu(5)")="%SYS" a("znspace")="%SYS" a(6)="%SYS" Не думал я, что давая советы, Вы не станете проверять их результативность... Я надеялся, что может еще получу совет в плане использования еще каких-нибудь недокументированных функций, команд, приемов... Но, увы... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2015, 12:19 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
AlexKBНе думал я, что давая советы, Вы не станете проверять их результативность...Порылся в старом коде, нашёл у себя подобные проверки ($zu(67 в цикле) и аналогичные мучения. Так и есть, $zu(5) и иже с ней в момент вызова JOB^%ZSTART таки ещё не заполнены... Обход, который реально использовал:JOB job проверяльщик ... проверяльщик hang 1 if (текущая_область_процесса($zparent) запрещена для входа) d завершить_процесс($zparent) ...PS. Прошу прощения за невысокий уровень и многочисленные ошибки в моих консультациях. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2015, 12:38 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Забыл поставить начальную метку JOB в псевдокоде, еще раз извиняюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2015, 12:40 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Если кому интересно, по крайней мере в 2015.1 метод %Library.GlobalEdit::GetGlobalSizeBySubscript() в некоторых случаях даёт ошибку в разы, тогда как утилита %GSIZE правильно считает и быстрым (Show details = N), и медленным (Show details = Y) способами. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2015, 12:45 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Alexey Maslov, Вот, вот... Только через проверяльщик мне не подходит, слишком много нехорошего родительский процесс сможет натворить, даже если я отловлю его и прибью через 20 мс... На данный момент для меня все это не критично, но я думал над перспективой и было бы хорошее для меня решение одного из вопросов будущей разработки, если бы я смог воспользоваться функциональностью, о которой говорил... А вопрос возник еще и потому, что вроде бы в одной из реализаций МАМПСов, с которыми я работал, такая возможность была... Не берусь утверждать, но что-то такое крутится в голове... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2015, 15:16 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
AlexKB...вроде бы в одной из реализаций МАМПСов, с которыми я работал, такая возможность была...Это вряд ли, т.к. понятие области afaik есть только в Cache (ещё м.б. в MiniM, но не уверен). AlexKB...слишком много нехорошего родительский процесс сможет натворить...На прикладном уровне решается путём синхронизации родителя с потомком: родитель ждёт сигнала от потомка: "можно работать" или "пошёл вон". Методы синхронизации зависят от используемой версии Cache: Lock или $system.Event, подробно разжёвывать не буду. Понятно, что тебе хотелось бы иметь готовый механизм "из коробки", но поскольку область - не объект защиты в её сегодняшней реализации, ИМХО, будет нелегко сподвигнуть ISC, но отчего не попробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2015, 17:24 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Столкнулся с такой фигней при использовании функции $locate() ... Есть там последний параметр, в случае успешного поиска туда записывается найденная последовательность... Но фигня в том, что если ничего не найдено переменная не "обнуляется". В ней остается предыдущее значение! По мне так это фигня полная. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2015, 09:14 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Если в этом примере 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="" Все просто перестанет работать ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2015, 09:16 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Самый лучший вариант, с моей точки зрения, делать ту переменную неопределенной, если поиск ничего не нашел. Потому как пустая строка так же может быть результативным значением. Но оставлять предыдущее значение - это что-то с чем-то! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2015, 09:19 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Это нормальное поведение, $locate же возращает результат по которому можно верить или нет тому значению. Вы же в своем коде IF просто так повесили, и value разумеется может быть каким угодно. Этот код с ошибкой. $data кстати работает так же, обновляет значение только в том случае если оно есть ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2015, 09:23 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
DAiMorЭто нормальное поведение Это норма! (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2015, 10:11 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
krvsaDAiMorЭто нормальное поведение Это норма! (с) $locate работает согласно документации и менять её спецификацию (чтобы ByRef заменить на Output) вряд ли станут, ибо уже написано много кода и он может перестать правильно работать (потеряется совместимость). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2015, 11:00 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Тогда какой смысл в этой теме? Для объяснения почему это делать не станут? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2015, 11:28 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
krvsaТогда какой смысл в этой теме? Для объяснения почему это делать не станут? Для адекватных предложений, а не для того чтобы закрыть свои баги в коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2015, 11:36 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Эва! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2015, 11:39 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
servitчтобы ByRef заменить на Output Проблема кагбэ не в этом... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2015, 11:55 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Вот думаю что нужно добавить. Расчет энтропии для пароля. С возможностью использовать это не только для встроенных пользователей, а и в том случае если используется собственная авторизация со своим хранением учеток пользователей и их паролей. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2015, 10:34 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Коллеги, на самом деле смысл этой темы, чтобы ваши запросы превращались в WRC задачи, т.е. были решены и входили в продукт. По части уже здесь предложенного либо есть либо будет создан продлог (задание на разработку). Вопрос: как лучше всего по вашему мнению доносить эту информацию до вас? гуглотаблица? Специальный сайт? задания в редмайне? Ваши предложения? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 16:04 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Шваров ЕвгенийКоллеги, на самом деле смысл этой темы, чтобы ваши запросы превращались в WRC задачи, т.е. были решены и входили в продукт. По части уже здесь предложенного либо есть либо будет создан продлог (задание на разработку). Вопрос: как лучше всего по вашему мнению доносить эту информацию до вас? гуглотаблица? Специальный сайт? задания в редмайне? Ваши предложения?Самое простое, это наверно гуглотаблица. redmine наверно будет перебор, с учетом что наверно нужен анонимный доступ ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 16:32 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Шваров Евгений, Есть предложение расширить возможности оператора include. Чтобы в код программы вставлялись не только inc-файлы, но и int и даже mac-файлы. Подставлять содержимое int и mac файлов в код программы вместо оператора include. Оператор include чтобы можно было писать в любом месте программы. П.С.Был такой оператор в языке PL/1. Доказал свою пользу. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 12:36 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
DirksDRШваров Евгений, Есть предложение расширить возможности оператора include. Чтобы в код программы вставлялись не только inc-файлы, но и int и даже mac-файлы. Подставлять содержимое int и mac файлов в код программы вместо оператора include. Оператор include чтобы можно было писать в любом месте программы. П.С.Был такой оператор в языке PL/1. Доказал свою пользу. а зачем это нужно, вставлять одни рутины в другие ? если вы хотите чтобы у вас какие то функции всегда включались во всех программах, эти функции и пишите в INC файл, и тогда будет такой же результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 12:54 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
DirksDRОператор include чтобы можно было писать в любом месте программы.А в чем сейчас проблема с этим, сейчас можно и так вставить в любом месте главное, чтобы перед использованием макроса если вы конечно не про классы говорите, но там то другая тема, и не понятно зачем это может быть нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 12:57 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
DAiMor, Простите, ребята! Я думал, что нельзя, раз AlexKB многострочными макросами заморачивается:) А проверить поленился...Файл testinc.mac Код: plaintext 1. 2. 3. 4. 5.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2016, 16:18 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
В Портале управления нигде не отображается состояние самого Менеджера задач (по крайней мере, в версиях <= 2015.1). Он может быть [при]остановлен, но догадаться об этом бывает нелегко даже достаточно опытному админу, тем более что о существовании утилиты ^TASKMGR знают не все. Предложение: отображать состояние Менеджера задач в Портале, разумно было бы и в Планировщике задач , и в Системных показателях . ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 17:53 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Alexey MaslovПредложение: отображать состояние Менеджера задач в Портале, разумно было бы и в Планировщике задач , и в Системных показателях .Обещали в одной из будущих версий сделать. Ориентировочно в 2017.3. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2016, 07:56 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Пожалуйста, пожалуйста, пожалуйста! Сделайте что-нибудь с пунктом [печать] в контекстном меню по классу из Студии - Уберите вообще, есть Ctrl-P и меню Файл - Уберите хотя бы подальше от пункта [Экспорт] - По выбору хотя бы выдайте диалог, отправить на принтер или нет? Например тот же что и выходит по Ctrl-P Ну адский ад же .... промахиваешься и все без вопросов улетает в тар-тарары ЗЫ: Извините был напуган ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2016, 13:45 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
хочу новые ключи к компилятору COS чтобы хотя бы в явных случаях выдавал ошибки такой переменной/метода/свойства нет ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2017, 13:47 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
alataloхочу новые ключи к компилятору COS чтобы хотя бы в явных случаях выдавал ошибки такой переменной/метода/свойства нетВряд ли это сделают, так как это не является ошибкой компиляции , поскольку необязательно приведёт к ошибке времени исполнения, ведь существует механизм динамической диспетчеризации методов и свойств ( статья на хабре). Скорее это должно быть предупреждением статического анализа, чтобы обратить внимание разработчика на потенциально возможную проблему. Но опять же, учитывая природу скриптового языка COS (методы-генераторы и т.д.) ... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2017, 11:26 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
servit, я понимаю. Поэтому заказываю только опциональный настроки, которые можно для конкретного проекта сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2017, 11:38 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Добавьте пожалуйста атрибут spellcheck = false в <textarea> в SQL портале, чтобы FireFox красным цветом sql не подчеркивал. Ну и сделать подсветку sql синтаксиса заодно) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2017, 22:28 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
И ещё... в окне портала (Редактировать роль) "Предоставить права доступа к таблице для MyRole" отображаются все схемы, даже схемы с классами, которые уже были добавлены для назначения привилегий. Неудобно, смотришь на несколько десятков схем и не видишь, в каких есть классы/таблицы, которые ты ещё не обработал. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2017, 01:51 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Есть старенькая проблема, о которой я говорил в 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.
И две одинаковые программы test.mac и test2.mac с кодом из одной строчки Код: sql 1.
Скомпилируем эти программы и посмотрим их исходный код, он довольно прост: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Добавим в наш класс одно поле 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.
И перекомпилируем только одну из них, ее int-код изменится: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Что же изменилось у нас в int-программах? В аргументах для программы ##class(Test.A).%SQLInsert() Раньше они собирались в переменную так: Код: sql 1.
А после добавления так: Код: sql 1.
Т.е. после добавления поля изменился порядок принимаемых данных в %SQLInsert, и неперекомпилированная программа вставит данные не в то поле. Более точно - аргументы сортируются по их имени (почему и было важно было название добавляемого свойства). Поэтому, поле A2 заняло место поля B1, а B1 сместилось дальше. Подобная же штука происходит и при компиляции запросов на одновление. Т.е. если вы на своей базе добавили незначительное, как вам кажется, поле и не перекомпилировали все классы и программы, которые изменяют строки таблицы, порожденной модифицированным классом , вы рискуете получить повреждение данных. Причем это не явная модификация структуры хранения (при этом разработчик должен отдавать себе отчет), а автоматическая. Да, неправильно запросы на обновление делать где-то кроме основного класса, да, существует система связанной перекомпиляции, но тем не менее, ошибки возможны, так как не при любом изменении класса хочется перекомпилировать весь продуктовый сервер, а зависимости перекомпиляции не учитывают, например, те же программы. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2017, 09:54 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Блок А.Н., мне кажется, добавление переменных по их имени решило бы проблему. например, так: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2017, 09:58 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Блок А.Н., Еще одна причина отказаться от embedded sql ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2017, 10:59 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
для COS что-нибудь похожее на defer из Go было бы удобно при работе с файлами, запросами, устройствами ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2017, 11:02 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
doublefintдля COS что-нибудь похожее на defer из Go было бы удобно при работе с файлами, запросами, устройствамиИнтересная идея, я вижу вызов точно таким же как команду DO. т.е. нужно например иметь метод для закрытия открытых обектов по выходу из методов. Примерно, как у нас есть возможность вернуться в рабочую область при выходе из метода, в котором перешли в другую область ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2017, 11:20 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
хотя может быть было бы полезнее например так Код: sql 1. 2.
Так, это будет что-то типа анонимных функций, думаю что так будет полезнее, проблема Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2017, 11:33 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
DAiMor, Мм, $ET? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2017, 18:21 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
DAiMor, Ну ладно, $ET это не совсем то, но смысл такой же. Мне кажется, в Каше многим не хватает возможности передачи кода как аргумента, сохранения кода в переменную и так далее. При том, что есть возможность передачи кода как строки. Но, видимо, это не очень удобно. Например, потому, что синтаксис кода в строке не подсвечивается, очень неудобно делать многострочный код. Может быть, сделать команду превращения кода в строку, а еще лучше - в специльную структуру, которую потом можно выполнить или передать как аргумент. Блин, кажется, я анонимные функции изобрел :-) А почему нет? Ведь для этого почти все есть. Тот же $XECUTE работает можно сказать, как исполнитель анонимных функций. Даже под это специальный формат строки есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2017, 18:52 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Блок А.Н.DAiMor, Мм, $ET?а каким боком оно вообще тут, $et, занимается отловом ошибок, и вообще это переменная ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2017, 20:40 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
DAiMor, $ET - это переменная, которая содержит код, который выполняется при определенных условиях. Разве не этого же по сути вы хотите от DEFER? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2017, 10:53 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Как ты и сам заметил $ET и $X принимают лишь текст, и читать такой код не просто, и ошибки во время неизбежны. Что-то типа анонимных функций, как в моем примере, или какой нибудь вариант но с возможностью передать аргументы, было намного лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2017, 15:14 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Мне кажется, оператор типа for(key in global) немного улучшил читаемость и сократил код при работе с многомерными переменными. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2018, 21:58 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Блок А.Н., они же многомерные и сортированные, как быть с "drilldown" и направлением обхода? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 11:31 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
doublefint, идти по одному уровню в прямом направлении. Иногда нужно просто обойти все, и текущая конструкция для этого слишком громоздкая. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 12:42 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Блок А.Н.Иногда... В этом случае больше нравится подход со скрытием внутренностей итераций, что-то вроде .keys().next() .map() или .filter() и т.д. Функции как first class member? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 12:53 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
doublefint, Функции как аргумент - неплохо, но я пока не вижу их без слома текущего синтаксиса. Так то бы это в некотором смысле могло перевернуть разработку на Каше (наверное). Ну нужно думать и много чего просчитывать, в том числе логические конфликты с текущими умолчаниями. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 14:20 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Как же, блин, иногда не хватает банального переименования классов. Пофиг на поиск мест, где используется и попытки исправить. Пусть даже схема хранения остается старой, это руками можно поправить, если нужно (просто, это не всегда нужно) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2018, 00:10 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
Блок А.Н.Как же, блин, иногда не хватает банального переименования классов. Пофиг на поиск мест, где используется и попытки исправить. Пусть даже схема хранения остается старой, это руками можно поправить, если нужно (просто, это не всегда нужно) Вообще вроде бы эта возможность давно уже есть в студии курсор поставить на имени класса и в меню выбрать Class -> Refactor -> Rename там может предложить и сбросить хранилище если класс хранимый. что именно переименовать понимает по курсору, так что диалог и процесс будет отличататься но все равно следующим этапом покажет предлагаемые изменения в классах, но нужно понимать что работает в контексте либо проекта либо текущего класса. Так что если проектами не пользуешся и нужно поменять везде, нужно будет сделать проект. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2018, 21:54 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
DAiMor, Спасибо :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2018, 19:51 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
По моему личному мнению, главная ошибка Intersystems совершилась, когда была разработана технология CSP и CacheObjectScript. Для привлечения потенциальных разработчиков необходимо было использовать готовые решения на базе уже существующих наиболее распространенных языков программирования , например Python, PHP и т.д. В Cache необходимо было реализовать только хранилище данных, а не реализовывать все эти классы типа SMTP, pop3 и прочее, которые реализованы гораздо лучше и шире в приведенных языках. Тот же Python отлично умеет работать с JSON и его структурами, которые можно было положить на Cache глобали. Пытаясь внедрить тот же Apache в ядро Cache получили в результате неполноценный обрезок WEB сервера, хотя можно было сделать все по другому. В результате имеем непонятную "классическим" M программистам технологию, которые и дальше пишут на "голом" М c прикручиванием своих сокетов и разработкой собственных протоколов взаимодействия с базой. Это мое личное мнение :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 13:18 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
kalin, а я не понимаю этих стенаний по поводу того, как COS сложен для нового программиста. Любой, кто знает больше одного языка программирования, освоит COS за несколько дней. В вебе за пару лет меняется больше, чем в Каше за 10 и никто не плачет "ах как же мы во всем этом новом разберемся". Разбираются. Не в этом причина слабой распространенности Каше. Язык не подразумевает реализации, и библиотеки не являются частью языка. Если бы вместо COS был бы Питон, то пришлось бы либо использовать библиотеки Питона, либо писать их заново. Основная фишка Каше - возможность построить быструю систему за счет близости физического и логического представления данных. Т.е. на самом деле, пришлось бы писать компилятор заново, так как в язык пришлось бы внедрять работу с глобалами (между JSON и глобалами нет однозначного соответствия), и в результате получился бы какой-нибудь Python+. В конце концов, никто не мешает работать на Питоне, а в качестве хранилища использовать Каше. Но кто будет в здравом уме при такой цене Каше так делать? Ведь даже и с бесплатным MUMPS не особо слышно про такие гибриды. С чего вы взяли, что Апач внедрен в ядро Каше? Используется специальная сборка, по каким-то причинам облегченная. Но это не ядро, у нее свой запускаемый файл и своя служба. Никто не мешает поставить свой экземпляр апача и использовать его. >>В результате имеем непонятную "классическим" M программистам технологию, которые и дальше пишут на "голом" М Вы меня извините, если классические М программисты не могут понять КОС, то возникают вопросы к их обучаемости. Как они тогда понимают Питон? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 17:21 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
kalin, что-то вы сами себе противоречите. В соседних темах агитируете заниматься высокоуровневым программированием, а здесь говорите, что COS ошибка. Так он же как раз и позволяет оторваться от непрерывного размножения кода вида "из глобали X узла Y возьмем/положим элемент Z по разделителю P". Записать "ЭкземплярСущностиN.cохранись()", имхо, гораздо удобнее и высокоуровневее. Привязка к "наиболее распространенных языков программирования" звучит как ловушка. А так все свое :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 17:48 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
doublefintБлок А.Н.Иногда... В этом случае больше нравится подход со скрытием внутренностей итераций, что-то вроде .keys().next() .map() или .filter() и т.д. Функции как first class member? А вот тут "истину глаголете" :) "filtered() Возвращает НЗ, содержащий только записи, удовлетворяющие предоставленной предикатной функции. sorted() Возвращает НЗ, отсортированный по предоставленной ключевой функции. Если ключ не указан, используется порядок сортировки установленный для модели данных по умолчанию mapped() Применяет предоставленную функцию к каждой записи в НЗ, возвращает НЗ, если результаты являются НЗ search() Принимает параметры поиска в виде домена, и возвращает НЗ который удовлетворяют условиям поиска. Может возвращать часть НЗ совпадающих записей (параметры offset и limit) и может быть отсортирован (параметр order)" ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2018, 13:26 |
|
Улучшения, новые фичи в технологиях InterSystems
|
|||
---|---|---|---|
#18+
doublefintТак он же как раз и позволяет оторваться от непрерывного размножения кода вида "из глобали X узла Y возьмем/положим элемент Z по разделителю P". Записать "ЭкземплярСущностиN.cохранись()", имхо, гораздо удобнее и высокоуровневее. ) Ну да, так и писали еще в 1985 году в системе "Диамс" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2018, 13:35 |
|
|
start [/forum/topic.php?all=1&fid=39&tid=1556241]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
99ms |
get tp. blocked users: |
2ms |
others: | 268ms |
total: | 456ms |
0 / 0 |