go to post Dmitry Maslennikov · May 20, 2021 Some info about blocks, in this article and others in cycle.
go to post Dmitry Maslennikov · May 20, 2021 Jeffrey, thanks. But if I would have only 16KB blocks buffer configured and with a mix of databases 8KB (mostly system or CACHETEMP/IRISTEMP) and some of my application data stored in 16KB blocks. 8KB databases in any way will get buffered in 16KB Buffer, and they will be stored one to one, 8KB data in 16KB buffer. That's correct? So, If I would need to separate global buffers for streams, I'll just need the separate from any other data block size and a significantly small amount of global buffer for this size of the block and it will be enough for more efficient usage of global buffer? At least for non-stream data, with a higher priority?
go to post Dmitry Maslennikov · May 19, 2021 This is only for external access to this label, without it, you would not be able to call this from terminal or from another routine or class. Curly braces makes it private by stack.
go to post Dmitry Maslennikov · May 19, 2021 Having multiple different global buffers for different block sizes, does not make sense. IRIS will use bigger size of block for lower size blocks inefficiently. The only way to separate is, to use a separate server, right for streams.
go to post Dmitry Maslennikov · May 18, 2021 I suppose, the issue in your settings.json, which I see you have opened. Could you check if it's really a JSON, and correct? If possible, could you attach the screenshot with it as well?
go to post Dmitry Maslennikov · May 18, 2021 Could you attach screenshots? It's not clear when you get the error.
go to post Dmitry Maslennikov · May 18, 2021 I've mentioned above a system with a significant amount of streams stored in the database. And just checked how global buffers used there. And streams are just around 6%. The system is very active, including files. Tons of objects created every minute, attached files, changes in files (yeah, our users can change MS Word files online on the fly, and we keep all the versions). So, I still see no reasons to change it. And still, see tons of benefits, of keeping it as is.
go to post Dmitry Maslennikov · May 17, 2021 Fragmentations issues, with SSD disks not an issue anymore. But in any way, I agree with storing files in the database. I have a system in production, where we have about 100TB of data, while more than half is just for files, stored in the database. Some of our .dat files by mapping used exclusively for streams, and we take care of them, periodically by cutting them at some point, to continue with an empty database. Mirroring, helps us do not to worry too much about backups. But If would have to store such amount of files as files on the filesystem, we would lose our mind, caring about backups and integrity.
go to post Dmitry Maslennikov · May 17, 2021 LuhnMCheckSum(input) public { Set input = $Piece(input, "#", 1) Set codePoints = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/:" Set n = $Length(codePoints) Set sum = 0 Set factor = 2 Set len = $Length(input) For i = len:-1:1 { Set codePoint = $Find(codePoints, $Extract(input, i)) - 2 Set addend = factor * codePoint Set factor = $Case(factor, 2: 1, : 2) Set addend = (addend \ n) + (addend # n) Set sum = sum + addend } Set remainder = sum # n Set checkCodePoint = (n - remainder) # n Return $Extract(codePoints, checkCodePoint + 1) } LuhnMValidate(input) public { Set checksum = $Piece(input, "#", 2) Set input = $Piece(input, "#") Return $$LuhnMCheckSum(input) = checksum }
go to post Dmitry Maslennikov · May 14, 2021 Is this, what are you looking for?https://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers#MUMPS
go to post Dmitry Maslennikov · May 14, 2021 In most cases, it’s enough to just create empty certificate with just default values. how do you use it?
go to post Dmitry Maslennikov · May 14, 2021 what will show the output of locale command in OS? So, your filesystem may not accept Unicode. And you would need to convert Unicode to a more suitable codepage.
go to post Dmitry Maslennikov · May 13, 2021 So, you just need help in find the place in the class which cause an error? I would suggest to try removing each class member one by one, until you’ll narrow it to one member, and maybe you’ll realize why it’s happening.
go to post Dmitry Maslennikov · May 12, 2021 Well, just noticed the version you have, any chance to upgrade such an old version to at least 2016.2
go to post Dmitry Maslennikov · May 12, 2021 I would not recommend using such undocumented functions like this. Instead, of this you can switch to something else. Like $system.OBJ.ExportUDL, or some other internal methods ##class(%Atelier.v2.Utils.TextServices).GetTextAsArray() ##class(%Compiler.UDL.TextServices).GetTextAsArray()
go to post Dmitry Maslennikov · May 11, 2021 Yeah, sure, it's quite simple to do. JWT tokens contain three parts separated by a pointer sign. Header, with the algorithm of the signature and the type of token Payload, any data in JSON format Signature needs to verify the token All of those parts are encoded with Base64 Set token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" #; Extract parts of the token Set $ListBuild(header, payload, sign) = $ListFromString(token, ".") #; Decode and parse Header Set header = $System.Encryption.Base64Decode(header) Set header = {}.%FromJSON(header) Write !,"header" Write !,"alg = ",header.alg Write !,"typ = ",header.typ #; Decode and parse Payload Set payload = $System.Encryption.Base64Decode(payload) Set payload = {}.%FromJSON(payload) Write !!,"data" Write !,"name = ", payload.name Write !,"iat = ", payload.iat
go to post Dmitry Maslennikov · May 10, 2021 As I said, you have to get it from your client, It's no publicly available anymore.
go to post Dmitry Maslennikov · May 10, 2021 Most of the code related to OAuth2 in IRIS, supposed that you have configured OAuth2 Client, and uses this information to validate and extract data from the token. And this particular method will expect OAuth2 client with the name "demoresource". I'm not sure how InterSystems supposed to get it worked together with IAM. But I have an example, of extracting data from the JWT token, without any configuration. Look at this code. In this class, I can generate tokens and validate them, as well as pass any data to generating tokens, and extract it. But it also uses a secret phrase to validate the token. And depends on the algorithm, it will require just a simple string as a secret phrase, or a public and private key. And try the suggested JWT debugger, which may help you in understanding, what's exactly stored in the token and used algorithm for the key.
go to post Dmitry Maslennikov · May 10, 2021 The guide is here . But in this case, you will need to get Caché distributive from your client.