Decentralised user accounts

We seem not to have a bug for the age-old feature of decentralised user accounts.  This would let users migrate or replicate their accounts between different homeservers, such that their homeserver is not a single point of failure for their account.  See also https://github.com/matrix-org/GSoC/blob/master/IDEAS.md#decentralised-accounts
Various possible ideas:

Make MXIDs a 3PID(!) https://github.com/vector-im/riot-web/issues/3634
Split users into alias & opaque ID, like rooms: https://github.com/matrix-org/matrix-doc/issues/494
Use pub/priv keys for identity: https://github.com/matrix-org/matrix-doc/issues/778
...

Another idea was to use a .forward system: https://github.com/matrix-org/matrix-doc/issues/496

https://github.com/matrix-org/matrix-doc/issues/883 is somewhat related
As is https://github.com/matrix-org/synapse/issues/1209

Split users into alias & opaque ID, like rooms: #494

A potential vote in favour of this might be that it might make guest access easier, because it can be used to implement the Guest -> "Real User" flow somehow nicer?

I think combining forwarding and pubkeys has some pretty cool advantages:

Users can choose if they want their "True" identity to be maintained by a server, or if they want to be identified by a public key
users could change their public key by changing the pointer record on the sever
Two users that can't access their homeservers can "meet up" someplace else using the cached public keys they got from the name server earlier. They could even auto-discover an untrusted server on the LAN and communicate with e2e encryption
Really good backwards compatibility is possible.

What about having normal domain based user accounts forward to public keys? That way we have the option to change and revoke public keys, and we don't have to interact directly with the long hash strings.
That way a public key wouldn't "be" a user's identity, the server would just be telling you "Even if you can't reach me, whoever has this pubkey is the real<EMAIL_ADDRESS>The pointer record on the homeserver could also contain the IP and SSL certificate of the server the user is actually at, allowing for seamless roaming. Maybe most of the time you want to be on your self hosted server, but you also want to have a backup in the cloud? Maybe you want a plug and play way to run your own server without worrying about domains, DNS, certificates, etc?
Also, by making "your current location" totally dynamic, we can do things like auto discovering servers on the LAN.  This kind of seamless online and offline stuff might be very useful for the IoT, emergency preparedness, and off-grid communities.
You could have publically advertised discoverable rooms on wifi at conferences for announcements.
You could also query the local network and say "Hey do any local servers know where the user with the pubkey that hashes to this is?" You'd still have the pubkey cached from last time you checked with the cloud servers that holds their identity until it expires.
Even if you've never contacted a user's public server before, you could still join a local public room where they were and send and receive messages, they would just be marked as "unverified", as in "This user is claiming to be foo:example.com, but we can't reach example.com to confirm, so all we really know is that they have the public key XYZ."
The ability to use cloud-hosted identities offline would be major for preparedness, corporate, IoT, traveling, etc, and it's the kind of feature you don't think about until you really wish you had it, so including it in a mainstream messaging app as a core part of the protocol makes sense.
Plus, it's a pretty uncommon feature, the other protocols that support it are mostly DHT based with huge bandwidth usage. Server roaming would give matrix a major advantage.

Is the suggestion here to sync user accounts among homeservers? I'm guessing the aim is to provide a way for people to smoothly interact with rooms they've already joined but from a different server. So you'd need some cryptographic way of identifying yourself.
A short-term solution could be to let people export/import a csv of each room they belong to. Upon importing, it would request access to each room again. The only challenge I can envision is separating direct chats from other rooms, but Riot already does this.

I think any two users should be able to communicate via any server, even if neither party has used that server before and none of the computers involved can access either homeserver. That way everything works as normal even on isolated networks, you just have to configure a fallback server.
I'm thinking the easiest way to do offline portable ID without going entirely to a "Pubkey as ID" model, is to create a keypair on the client, then have the server sign a message with the public key.
The message could possibly expire at a certain time depending on the user's "Keep me logged in" preferences.
For maximum reliability in a situation with very limited internet, the message could contain the full cert chain up to the homeserver's CA, so that there's no need for the server to know anything about the homeserver beforehand.

From a somewhat incompetent sysadmin point of view. (Which I think Is an view worth considering to make It accessible to run a homeserver.) This sounds very promising as my inability keep a high uptime is a constant problem. Provoking the following reaction to me potentially getting the librem 5 smarphone enthusiastically explaining that it runs matrix for all communications. " So then I will never be able to reach you!" ... :(
I would happily volunteer some  of my bandwidth, processor-power, and memmory to in turn get It back when I accidentally unknowingly shut down synapse leaving it down for a couple of hours.

And that would help people living in countries using censureship (China, Iran) to be able to keep using matrix. No country which allow internet access (all but north korea) could censure all world matrix server. there would always be one reachable (unless switching off from Internet).

I described some possible solutions for standardization and unification for decentralized user identity IDs with IPLD / IPFS in  #712
Direct link to comment: https://github.com/matrix-org/matrix-doc/issues/712#issuecomment-466301585

With all the matrix.org HS issues lately and the general slowness of the HS because of too many users is there a chance this could get higher priority so we could maybe get it sometime soon-ish?
When people ask about this feature https://modular.im/tools/matrix-migration keeps getting brought up but it's not really a proper solution.

It seems like there's also some opportunities for the different home server implementations to operate in more of a "client mode" so they don't have to scale as well. I use one of the small modular/elemental instances and would like to federated to large rooms but can't since my home server can't handle it.

@ManDay how would a failure scenario look like? Where a room would become inaccessible due to it's corresponding HS failing, would that HS already pre-emptively have given access (credentials) to "backup" servers to continue handling load, corresponding to amounts of users on those servers participating in that room? Or how would a scenario look like where one's homeserver would go down? As what would that user then "appear" as, and who would host/provide "leaf data" to their profile (such as display name and avatar) from that point on?
In that case, how would username collisions not occur, or migrations happen "offline" (and securely)? If i understand correctly, with this in place, the user would have @user:host as a "current front" identity, basically rallying their identity around that host, but having a backing credential method to their identity, with which they can migrate it.
How would they go about doing that? Both with the HS "online" and "offline", if a user would decide to migrate because their HS has been offline for an unacceptable amount of time, how would the process work? If the user cannot contact their HS to "decouple" their identity anymore, how would the new HS know that it's legit, how would the old HS know (once it comes up) that such a thing has happened in the first place?
What about devices having been compromised?  Unanimous agreement amongst all (known) device sessions? What if a user doesn't have access to them all?
Sorry if my questions seem naive, or too much, or uneducated, I think this is a big improvement, but the goal posts for who trusts who will shift a lot, and in some cases may even be undefined. Please correct my assumptions if they're wrong, or simply unfounded.

Also if I understand the other general idea floating around correctly (which I most surely don't, but I like to entertain it) is that one user would have a "myriad" of MXID/@user:host identities, selecting one to display "by default", but all being backed by a single key/ID/pubkey or similar
How would authentication happen this way? Would a user be able to access "all" of it's identities if it logs into one of the HSes? Or would access to identities be on a "log in to each" basis? How would migration, addition, or removal of those identities work?

Continuing from the idea of the pubkey; I'm currently thinking of something similar to libp2p's Peer IDs, which are multihashed versions of their public keys, which can then be verified and secured with private keys.
In the case of decentralised accounts, if a user wants to have a "truly" decentralised account, maybe a string would then start to back their user-id-myriad, maybe a multihash encoded in base32 or 64, and having servers uniquely identify an account on that, then the old @user:server becomes simply an alias to the backing multihash.
This way, when any used server (that the user allocated a username in) receives a "control" message encrypted with the private key, the server could then decrypt it with the user's public key (which is identified/verified by the user's multihash), and take the corresponding action on the account (change password, evict other sessions, change avatar, etc.), which then gets added to an internal room and federated to other participating servers, in this room also trivial "server actions" from users can be added, such as session details, device details, and other shared state.
The advantage of using multihashes is that multihashes are equipped to upgrade to newer hash functions, while it might be a future task to look at how-to-upgrade a user's ID between hash functions (maybe something similar to m.room.tombstone), for now i think sticking with generating multihashes with sha256 will be alright.
TL;DR: My proposal is to use multihashes for backing user IDs, controlling events/actions encrypted with private key, backed with internal room federated over used servers (the user is in).

Yes, I acknowledge that having a singular private key representing a users' account is a compromise, maybe the key can be stolen, or probably somehow lost, and it requires additional user awareness, i'll say that before it's pointed out.
I give this proposal because I think any proposal to have the servers control the user's account is a no-go, in this case, servers are not to be trusted, servers shouldn't be the highest authority over a user's account if the account is decentralised, even in cases or with solutions like Raft consensus, it'll fail as soon as participating servers go down, or the source of information from one singular server is questionable. Another idea is to have users "update" each server themselves when they perform an administrative action (over their own account), but that's functionally no different than having multiple accounts over multiple servers, as this would not effectively "merge" them, but only virtually. (and don't forget a possible split-brain case if a user updates details when server D is down, and when server D is up, there is no "reliable" or "trusted" way to update user details via backfill then, if the user had to push the data to all servers)
(Personal opinion: I think that the case of additional user awareness over private keys should be spread further anyway, as I think that it will become important enough in the future, to have users be educated and be able to master the idea of a private key being essentially an unchangeable password is something i'd be willing to be let taught in apps these days)

I just found out about MSC 1228, and I think it should be mentioned for the sake of idea deduplication; that proposal adds a way to decouple rooms and users from the servers they come from, so maybe looking at that and/or altering it so it could receive this proposal, or adding this proposal to it, could help.

There is a draft of W3C standard for decentralized identifiers: https://w3c.github.io/did-core/

Hi, have you progressed any further on this issue? What do you see as the biggest problem:

Is it the problems with authenticating users on different homeservers?
Is it synchronizing their accounts/roomss etc?
Or is it traffic synchronizing chat histories?
Really appreciate your answer. We really want to make matrix into a decentralized chat where users do not have home servers per se. We also will keep only three days history, so it is not going to be massive amounts of data. Any help/suggestions are appreciated.

Hi, have you progressed any further on this issue? What do you see as the biggest problem:

Is it the problems with authenticating users on different homeservers?
Is it synchronizing their accounts/roomss etc?
Or is it traffic synchronizing chat histories?
Really appreciate your answer. We really want to make matrix into a decentralized chat where users do not have home servers per se. We also will keep only three days history, so it is not going to be massive amounts of data. Any help/suggestions are appreciated.

Hi, have you progressed any further on this issue? What do you see as the biggest problem:

Is it the problems with authenticating users on different homeservers?
Is it synchronizing their accounts/roomss etc?
Or is it traffic synchronizing chat histories?
Really appreciate your answer. We really want to make matrix into a decentralized chat where users do not have home servers per se. We also will keep only three days history, so it is not going to be massive amounts of data. Any help/suggestions are appreciated.

I would recommend against replying here, the maintainers will just lock the issue to prevent discussion and bury it

Hi, have you progressed any further on this issue? What do you see as the biggest problem:

Is it the problems with authenticating users on different homeservers?
Is it synchronizing their accounts/roomss etc?
Or is it traffic synchronizing chat histories?
Really appreciate your answer. We really want to make matrix into a decentralized chat where users do not have home servers per se. We also will keep only three days history, so it is not going to be massive amounts of data. Any help/suggestions are appreciated.

I would recommend against replying here, the maintainers will just lock the issue to prevent discussion and bury it

Where is the best place?

Where is the best place?

@pocketnetteam Maybe Matrix HQ

@pocketnetteam Maybe Matrix HQ

I would recommend against replying here, the maintainers will just lock the issue to prevent discussion and bury it

@nathanfranke we only lock discussion when no new points are being made and the conversation runs in circles over years. It doesn't look like that's the case here, so on-topic conversation is very welcome.

I would recommend against replying here, the maintainers will just lock the issue to prevent discussion and bury it

@nathanfranke we only lock discussion when no new points are being made and the conversation runs in circles over years. It doesn't look like that's the case here, so on-topic conversation is very welcome.

@pocketnetteam There hasn't been much work on this since https://github.com/matrix-org/matrix-doc/pull/2787, but we'll be revisiting it as part of P2P work soon.  P2P has been progressing relatively slowly because we've needed to polish core Matrix stuff to ensure today's network is usable for WhatsApp refugees etc - but we will get back to it this year.

@pocketnetteam There hasn't been much work on this since https://github.com/matrix-org/matrix-doc/pull/2787, but we'll be revisiting it as part of P2P work soon.  P2P has been progressing relatively slowly because we've needed to polish core Matrix stuff to ensure today's network is usable for WhatsApp refugees etc - but we will get back to it this year.

Thank you! We are actually running an open sourced blockchain project that also has a social network component. We like the idea of Matrix very much and the project looks cool, but lack of decentralization is a major obstacle.
We are currently thinking of overcoming it by changing the server side. We have an advantage in that all users are registered on the blockchain and already have a private/public key pair. Here is how we are looking to change it (would love to hear your thoughts):

Since every user registers on the blockchain, they can also register their current home server on the blockchain.
If their home server disappears, they can simply register a new home server and if the old one comes back, then it causes no conflicts.
Every server registers on the blockchain with a public key.
All rooms add a certain number of servers for redundancy. So, any room will share data with say at least 5 servers, even if all participants are on one HS. Those 5 servers are chosen deterministically (say public keys that are closes to the hash of the room name).
So, even if both HS disappear, users can find room data by the deterministic algorithm. And they can register to a new home server, if HS is not available.
In general, authentication on any server is done via private/public key signature, thus it is the same across all servers.
This creates a decentralized network of servers. One question this does not resolve is that a user who lost a HS, must restore all of his/her rooms, but in the above framework, they are spread out across servers.

Do you have any thoughts on this? Also, very curious to understand what you are doing to accomodate whatsapp refugees.

Thank you! We are actually running an open sourced blockchain project that also has a social network component. We like the idea of Matrix very much and the project looks cool, but lack of decentralization is a major obstacle.
We are currently thinking of overcoming it by changing the server side. We have an advantage in that all users are registered on the blockchain and already have a private/public key pair. Here is how we are looking to change it (would love to hear your thoughts):

Since every user registers on the blockchain, they can also register their current home server on the blockchain.
If their home server disappears, they can simply register a new home server and if the old one comes back, then it causes no conflicts.
Every server registers on the blockchain with a public key.
All rooms add a certain number of servers for redundancy. So, any room will share data with say at least 5 servers, even if all participants are on one HS. Those 5 servers are chosen deterministically (say public keys that are closes to the hash of the room name).
So, even if both HS disappear, users can find room data by the deterministic algorithm. And they can register to a new home server, if HS is not available.
In general, authentication on any server is done via private/public key signature, thus it is the same across all servers.
This creates a decentralized network of servers. One question this does not resolve is that a user who lost a HS, must restore all of his/her rooms, but in the above framework, they are spread out across servers.

Do you have any thoughts on this? Also, very curious to understand what you are doing to accomodate whatsapp refugees.

I'm wary of putting a hard dependency on a blockchain for identity. It seems to me if one person wants to assert their identity there is no need for distributed consensus, which is what I understand blockchains provide (please correct me if mistaken). Regular PKI should suffice for that, maybe in conjunction with content-based addressing a la IPFS.

I'm wary of putting a hard dependency on a blockchain for identity. It seems to me if one person wants to assert their identity there is no need for distributed consensus, which is what I understand blockchains provide (please correct me if mistaken). Regular PKI should suffice for that, maybe in conjunction with content-based addressing a la IPFS.

Do you have any thoughts on this?

I don't see the advantage of the blockchain here. What you describe should be doable with a DHT, which is also much simpler to implement, doesn't waste resources like a blockchain (depending on the type of blockchain), and nobody has to run blockchain nodes/miners for that.

Regular PKI should suffice for that,

Exactly my thought.

Do you have any thoughts on this?

I don't see the advantage of the blockchain here. What you describe should be doable with a DHT, which is also much simpler to implement, doesn't waste resources like a blockchain (depending on the type of blockchain), and nobody has to run blockchain nodes/miners for that.

Regular PKI should suffice for that,

Exactly my thought.

Blockchain already exists for other purposes and it provides real decentralization. I understand you are not interested in it, but was hoping to get an opinion on the problems with the scheme I outlined (other than there are differnet ways of doing it). Thank you!

Blockchain already exists for other purposes and it provides real decentralization. I understand you are not interested in it, but was hoping to get an opinion on the problems with the scheme I outlined (other than there are differnet ways of doing it). Thank you!

It's a little bit offtopic, but I'd still like to comment on it:

Blockchain already exists for other purposes

…and waste a lot more energy than whole countries. Of course there are different types of blockchains, with different energy consumption, but I still don't see the advantage of using a blockchain for this application.
Who guarantees the blockchain will still be there in 10-20 years? Who maintains the nodes, the miners, the protocol? Do you realize that this means you have to - in the worst case - support a completely separate network?

and it provides real decentralization.

Do you know what DHT is or how it works? Because it provides "real" decentralization (okay, I have to ask: What is "real" decentralization? Because E-Mail has it, Matrix has it, every application using DHTs has it, so, why do you think blockchains are more or more "real" decentralized?)
/END

It's a little bit offtopic, but I'd still like to comment on it:

Blockchain already exists for other purposes

…and waste a lot more energy than whole countries. Of course there are different types of blockchains, with different energy consumption, but I still don't see the advantage of using a blockchain for this application.
Who guarantees the blockchain will still be there in 10-20 years? Who maintains the nodes, the miners, the protocol? Do you realize that this means you have to - in the worst case - support a completely separate network?

and it provides real decentralization.

Do you know what DHT is or how it works? Because it provides "real" decentralization (okay, I have to ask: What is "real" decentralization? Because E-Mail has it, Matrix has it, every application using DHTs has it, so, why do you think blockchains are more or more "real" decentralized?)
/END

Let's try to keep this thread on-topic, because this could quickly devolve into a debate of the merits of blockchains in general, which is interesting but not terribly relevant to portable matrix identities. You both have emails attached to your git identites, so perhaps you could discuss it privately there.

Let's try to keep this thread on-topic, because this could quickly devolve into a debate of the merits of blockchains in general, which is interesting but not terribly relevant to portable matrix identities. You both have emails attached to your git identites, so perhaps you could discuss it privately there.

I don't necessarily want to add more noise to the conversation without substance but it occurs to me that there would be some value in at least enumerating some "user stories" or goals that we're trying to accomplish. I'm not an expert in the domain but I'll kick it off:

Allow users to remove the single point of failure that is the homeserver by allowing them to connect to multiple home servers
Reduce homeserver load by allowing users (or administrators) to choose which data gets replicated across multiple homeservers.

Allow a member of a small homeserver/p2p to join Matrix HQ without having to store all the data clientside and instead trust the matrix.org homeserver

Semi-related: It would be convenient if a user could authenticate once and have multiple personas that could be associated with various homeservers.

The ability to alternate between a work persona and personal persona are useful and you can imagine having the work persona be owned by a systems administrator.

I don't necessarily want to add more noise to the conversation without substance but it occurs to me that there would be some value in at least enumerating some "user stories" or goals that we're trying to accomplish. I'm not an expert in the domain but I'll kick it off:

Allow users to remove the single point of failure that is the homeserver by allowing them to connect to multiple home servers
Reduce homeserver load by allowing users (or administrators) to choose which data gets replicated across multiple homeservers.

Allow a member of a small homeserver/p2p to join Matrix HQ without having to store all the data clientside and instead trust the matrix.org homeserver

Semi-related: It would be convenient if a user could authenticate once and have multiple personas that could be associated with various homeservers.

The ability to alternate between a work persona and personal persona are useful and you can imagine having the work persona be owned by a systems administrator.

In addition to redundancy a goal that I am very interested in is allowing server migration. I can think of a couple of cases.

I have a (reasonably trusted) homeserver server and I want to migrate to a new one. (for example from matrix.org to my own domain).
My homeserver has turned malicious and I wish to rehome myself. (Either another shared server or my own).
A homeserver wants to change it's domain.

In addition to redundancy a goal that I am very interested in is allowing server migration. I can think of a couple of cases.

I have a (reasonably trusted) homeserver server and I want to migrate to a new one. (for example from matrix.org to my own domain).
My homeserver has turned malicious and I wish to rehome myself. (Either another shared server or my own).
A homeserver wants to change it's domain.

…and waste a lot more energy than whole countries.

This is a proof-of-stake blockchain, let's leave it at that. And yes, when you depend on your home server not going away, that is centralization. Was just trying to understand how you intend to go around it. DHT may solve some problems, but not the problem of authentication, I think.

…and waste a lot more energy than whole countries.

This is a proof-of-stake blockchain, let's leave it at that. And yes, when you depend on your home server not going away, that is centralization. Was just trying to understand how you intend to go around it. DHT may solve some problems, but not the problem of authentication, I think.

I don't necessarily want to add more noise to the conversation without substance but it occurs to me that there would be some value in at least enumerating some "user stories" or goals that we're trying to accomplish. I'm not an expert in the domain but I'll kick it off:

Allow users to remove the single point of failure that is the homeserver by allowing them to connect to multiple home servers

Reduce homeserver load by allowing users (or administrators) to choose which data gets replicated across multiple homeservers.

Allow a member of a small homeserver/p2p to join Matrix HQ without having to store all the data clientside and instead trust the matrix.org homeserver

Semi-related: It would be convenient if a user could authenticate once and have multiple personas that could be associated with various homeservers.

The ability to alternate between a work persona and personal persona are useful and you can imagine having the work persona be owned by a systems administrator.

#1 and #2 are of most interest, but ideally it is done algorithmically without any user or admin involvement via some algorithm.

I don't necessarily want to add more noise to the conversation without substance but it occurs to me that there would be some value in at least enumerating some "user stories" or goals that we're trying to accomplish. I'm not an expert in the domain but I'll kick it off:

Allow users to remove the single point of failure that is the homeserver by allowing them to connect to multiple home servers

Reduce homeserver load by allowing users (or administrators) to choose which data gets replicated across multiple homeservers.

Allow a member of a small homeserver/p2p to join Matrix HQ without having to store all the data clientside and instead trust the matrix.org homeserver

Semi-related: It would be convenient if a user could authenticate once and have multiple personas that could be associated with various homeservers.

The ability to alternate between a work persona and personal persona are useful and you can imagine having the work persona be owned by a systems administrator.

#1 and #2 are of most interest, but ideally it is done algorithmically without any user or admin involvement via some algorithm.

Regular PKI should suffice for that, maybe in conjunction with content-based addressing a la IPFS.

So, PKI requires some infrastructure, in a particular someone in charge of a centralized server. I am looking for a permissionless infrastructure. Maybe I am missing something, but could you educate me on how PKI could be used in this environment without a central point of authority? Thank you!

Regular PKI should suffice for that, maybe in conjunction with content-based addressing a la IPFS.

So, PKI requires some infrastructure, in a particular someone in charge of a centralized server. I am looking for a permissionless infrastructure. Maybe I am missing something, but could you educate me on how PKI could be used in this environment without a central point of authority? Thank you!

Wanted to comment on the DID standard that didn't got any attention and I wouldn't like it to be overlooked. When it comes to identifying yourself in a decentralized manner solutions in that ecosystem look like a good way to go, different "did methods" can exist(e.g. did:matrix:foobar) that resolve identifiers in different ways, it could be blockchain or could be anything. The possibilities are broad, something like this looks interesting for example, having a self-issued OpenId connect provider that I imagine could fit with the existing OIDC infrastructure that matrix home servers support.
Authentication is one step, a different one will be user's data that again can be accessed via DID methods that resolve to documents containing information about how to find information whether it's on a user's personal server, in a blockchain or a decentralized storage like IPFS.

Wanted to comment on the DID standard that didn't got any attention and I wouldn't like it to be overlooked. When it comes to identifying yourself in a decentralized manner solutions in that ecosystem look like a good way to go, different "did methods" can exist(e.g. did:matrix:foobar) that resolve identifiers in different ways, it could be blockchain or could be anything. The possibilities are broad, something like this looks interesting for example, having a self-issued OpenId connect provider that I imagine could fit with the existing OIDC infrastructure that matrix home servers support.
Authentication is one step, a different one will be user's data that again can be accessed via DID methods that resolve to documents containing information about how to find information whether it's on a user's personal server, in a blockchain or a decentralized storage like IPFS.

…and waste a lot more energy than whole countries.

This is a proof-of-stake blockchain, let's leave it at that.

to elaborate, proof of stake blockchains do not use anymore energy than any normal PC running. Proof-of-work requires work, proof-of-stake simply requires a proof of ownership and there is no algorithmic hashing.

…and waste a lot more energy than whole countries.

This is a proof-of-stake blockchain, let's leave it at that.

to elaborate, proof of stake blockchains do not use anymore energy than any normal PC running. Proof-of-work requires work, proof-of-stake simply requires a proof of ownership and there is no algorithmic hashing.

The reason that people aren't responding to your idea is that we don't see any need for a blockchain. People can just sign their attestation and publish it to the DHT. There is no centralization required. There is no need for a provable history as the latest published attestation will be the only one that is used.
So if you think we should use a blockchain you need to be specific about what benefits it provides. Just saying that blockchain is decentralized won't draw people in because the currently proposed solution is already decentralized.

The reason that people aren't responding to your idea is that we don't see any need for a blockchain. People can just sign their attestation and publish it to the DHT. There is no centralization required. There is no need for a provable history as the latest published attestation will be the only one that is used.
So if you think we should use a blockchain you need to be specific about what benefits it provides. Just saying that blockchain is decentralized won't draw people in because the currently proposed solution is already decentralized.

I don't necessarily want to add more noise to the conversation without substance but it occurs to me that there would be some value in at least enumerating some "user stories" or goals that we're trying to accomplish. I'm not an expert in the domain but I'll kick it off:

Allow users to remove the single point of failure that is the homeserver by allowing them to connect to multiple home servers

Reduce homeserver load by allowing users (or administrators) to choose which data gets replicated across multiple homeservers.

Allow a member of a small homeserver/p2p to join Matrix HQ without having to store all the data clientside and instead trust the matrix.org homeserver

Semi-related: It would be convenient if a user could authenticate once and have multiple personas that could be associated with various homeservers.

The ability to alternate between a work persona and personal persona are useful and you can imagine having the work persona be owned by a systems administrator.

#1 and #2 are of most interest, but ideally it is done algorithmically without any user or admin involvement via some algorithm.

I think this is still up for discussion because I would like control over where the data is persisted. I want decentralization but I don't necessarily want everything replicated everywhere.

I don't necessarily want to add more noise to the conversation without substance but it occurs to me that there would be some value in at least enumerating some "user stories" or goals that we're trying to accomplish. I'm not an expert in the domain but I'll kick it off:

Allow users to remove the single point of failure that is the homeserver by allowing them to connect to multiple home servers

Reduce homeserver load by allowing users (or administrators) to choose which data gets replicated across multiple homeservers.

Allow a member of a small homeserver/p2p to join Matrix HQ without having to store all the data clientside and instead trust the matrix.org homeserver

Semi-related: It would be convenient if a user could authenticate once and have multiple personas that could be associated with various homeservers.

The ability to alternate between a work persona and personal persona are useful and you can imagine having the work persona be owned by a systems administrator.

#1 and #2 are of most interest, but ideally it is done algorithmically without any user or admin involvement via some algorithm.

I think this is still up for discussion because I would like control over where the data is persisted. I want decentralization but I don't necessarily want everything replicated everywhere.

My main user story would be decoupling identity from client choice. I want to use a homeserver that's fast, maybe geographically close to me, has a recent software version supporting whatever features I need, preferably run by an organization by I trust, with good privacy practices. All that is volatile and changes over time, and often takes experimentation with new servers to establish which is best. I really don't want to have to reestablish my identity every time I switch to a different homeserver, and I don't want my past conversations fractured between a hundred accounts. For something building as heavily on cryptographic handshakes between users as Matrix does, having a permanent overarching identity is especially important.

My main user story would be decoupling identity from client choice. I want to use a homeserver that's fast, maybe geographically close to me, has a recent software version supporting whatever features I need, preferably run by an organization by I trust, with good privacy practices. All that is volatile and changes over time, and often takes experimentation with new servers to establish which is best. I really don't want to have to reestablish my identity every time I switch to a different homeserver, and I don't want my past conversations fractured between a hundred accounts. For something building as heavily on cryptographic handshakes between users as Matrix does, having a permanent overarching identity is especially important.

1. I have a (reasonably trusted) homeserver server and I want to migrate to a new one. (for example from matrix.org to my own domain).

this is my current use case. i want to use someone else's homeserver right now, as the current reference server is too resource intensive for me. Then, when the new go-powered homeserver software is ready for prime time, i will test self hosting. I don't want to create a profile and then start over with a new profile (especially if i get others to join me in the experiment), i want to migrate.

1. I have a (reasonably trusted) homeserver server and I want to migrate to a new one. (for example from matrix.org to my own domain).

this is my current use case. i want to use someone else's homeserver right now, as the current reference server is too resource intensive for me. Then, when the new go-powered homeserver software is ready for prime time, i will test self hosting. I don't want to create a profile and then start over with a new profile (especially if i get others to join me in the experiment), i want to migrate.

I hoped it could be as simple as e-mail, get a domain name and just adjust the dns records when changing servers, keep the important (or all) messages in a client and sync them back to the new server after migration.

I hoped it could be as simple as e-mail, get a domain name and just adjust the dns records when changing servers, keep the important (or all) messages in a client and sync them back to the new server after migration.

@Sarkasper There is discussion about using a file in /.well-known/. This is roughly equivalently easy to DNS (Probably easier for some harder for others) but allows for more flexibility.
https://github.com/matrix-org/matrix-doc/pull/2787#discussion_r563031023

@Sarkasper There is discussion about using a file in /.well-known/. This is roughly equivalently easy to DNS (Probably easier for some harder for others) but allows for more flexibility.
https://github.com/matrix-org/matrix-doc/pull/2787#discussion_r563031023

One issue is whether ALL a users data gets copied to every homeserver they use.
Ex) I have a matrix.org account. One day I decide I want to run my own homeserver, using that primarily and using matrix.org as a fallback. Then I start doing custom stuff with my homeserver, using it for realtime data with a faster transport backend, and what not. I definitely don't want to dump all that data on matrix.org. I also don't really want to use a separate account.

I am a bit(incredibly) biased against blockchains, so take everything with
a grain of salt but:
To me, the point of decentralization is that it keeps working, no matter
what.  As in, if I'm on a private network with you in Antarctica, it still
works.
Blockchain takes that away,  because nobody wants to run a full chain node
on a phone.   Nobody wants that kind of extra bandwidth load on a satellite
internet connection.
Nobody is going to mine coins without serious hardware, and proof of stake
means the whole thing costs money, and not only that, inconvenient money
that probably requires going through some exchange somewhere for most
people.
Look at Jami and OpenDHT for an example of decentralization done right, or
BitTorrent DHT.
There are so many really cool looking project that I consider pretty much
ruined by integrating some kind of blockchain and incentive layer.
Social apps are only worth the value the users give them.   It's hard
enough to convince someone to use something at all.  Even the slightest
performance, battery drain, or bandwidth issue, or convoluted multi step
signup process, or annoying not-really-p2p-as-used-in-practice blockchain
nodes stuff may cause people to lose interest.
On Mon, Feb 22, 2021, 3:50 PM Erich Spaker<EMAIL_ADDRESS>wrote:

One issue is whether ALL a users data gets copied to every homeserver they
use.
Ex) I have a matrix.org account. One day I decide I want to run my own
homeserver, using that primarily and using matrix.org as a fallback. Then
I start doing custom stuff with my homeserver, using it for realtime data
with a faster transport backend, and what not. I definitely don't want to
dump all that data on matrix.org. I also don't really want to use a
separate account.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/matrix-org/matrix-doc/issues/915#issuecomment-783762142,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAFZCHZNEL7SJFMSWTJGYCTTALUUDANCNFSM4DKW5DZA
.

@EternityForest what projects do you consider ruined by  blockchain?

Another user story if it's useful:
I want to try out Matrix, but am immediately overwhelmed by having to pick a homeserver that I'll have to stick with, I want that to be a temporary choice where I can change my homeserver later once I know more, and have my existing conversation logs survive. I wouldn't mind updating links and things, but ideally I don't have to give people I have existing conversations with my new contact.

Additional info; the fediverse doesn't have this pressure as much, as you can freely switch homeservers after you decide the one you picked at the start isn't for you.
(It achieves this by notifying every server of the migration, it merely switches over followers, follows, and such, I believe this'll obviously be harder in a federated trustless-ish environment like matrix)

Adding to that I would say it's not only about migrating(and notifying about the migration) but having a reliable decentralized mechanism to manage the set of aliases that represent who I am as I should be able to exist in different homeservers at the same time as well, like an in-device p2p homeserver that is not always online(e.g. @olanod:<p2p-id/public-key>)  and my home-homeserver(e.g. @olanod:my.home).
I guess a DHT can be used for storing those mappings but that's an implementation detail that I think should be abstracted in case the future decides those kinds of registries should be stored in something more blockchainy or in a collective consciousness overseen by the AI overlords. I still think something like a DID Document or similar can be a good format for representing those mappings which can be exposed as a new API(or extension to the federation API?) used to update the mappings to tell the world we migrated server or have a new extra one that also wants updates.

To add a potential use case: We have an embedded chat on our website, which currently uses IRC. I'm toying with the idea of migrating to Matrix. Our embedded chat would likely work by automatically logging in via SSO via our website. Ideally, we would also require that logins are tied to accounts on our website to ensure consistency to users when displaying identities. Now, what happens if one of our users uses Matrix? It would be nice if they could connect their account on our server to their account on their normal homeserver, so that they can keep it synced with their homeserver while allowing us to automatically log them in via our website.

It's unfortunate that decentralized accounts still aren't ready. feneas.org will be shutting down and deactivating all of their Matrix accounts on March 1st. I'm not sure how many users they had but it would've been nice for those users to have the option to keep their account. https://git.feneas.org/feneas/association/-/raw/master/comms/dissolving-the-association-2022-01-09.txt


Maximum number of blank lines to keep

It could help to strip down useless blank lines, I usually set it to 1 in IntelliJ.
<maxBlankLines>1</maxBlankLines>

This issue was moved to scala-ide/scalariform#174


Create plugin-ranorex-integration.yaml

Description
https://github.com/jenkinsci/ranorex-integration-plugin
https://issues.jenkins-ci.org/browse/HOSTING-328

Permissions pull request checklist

Always

[x] Add link to plugin/component Git repository in description above

For a newly hosted plugin only

[x] Add link to resolved HOSTING issue in description above

For a new permissions file only

[x] Make sure the file is created in permissions/ directory
[x] artifactId (pom.xml) is used for name (permissions YAML file).
[x] groupId / artifactId (pom.xml) are correctly represented in path (permissions YAML file)
[ ] Check that the file is named plugin-${artifactId}.yml for plugins

When adding new uploaders (this includes newly created permissions files)

[ ] Make sure to @mention an existing maintainer to confirm the permissions request, if applicable
[x] Use the Jenkins community (LDAP) account name in the YAML file, not the GitHub account name
[x] All newly added users have logged in to Artifactory at least once

Rename plugin-ranorex-integration.yaml to plugin-ranorex-integration.yml

Yes, the tool is actually this dumb.


Please update to uriparser 0.8.5

Hi!
uriparser 0.8.5 has been released:
https://github.com/uriparser/uriparser/releases
Thanks for updating!

@hartwork Do you plan to support CMake build script (like this) to simplify upgrade in the future?

Makes sense. Please provide a pull request upstream. Thanks!

Updated: d1e8095d634aa010a2974f23a90cca3ddc2f7fb5
As @KindDragon mentions, if you check the following CMakeLists.txt in the root of your repo, it will be easier in the future!
# CMakeLists.txt
cmake_minimum_required(VERSION 3.8)
project(uriparser C)

if(MSVC)
  add_compile_options(/W3 /wd4005 /wd4996 /wd4018 -D_CRT_SECURE_NO_WARNINGS)
endif()

include_directories(include)

file(GLOB SRC src/*.c)

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

add_library(uriparser ${SRC})

install(
  TARGETS uriparser
  RUNTIME DESTINATION bin
  LIBRARY DESTINATION lib
  ARCHIVE DESTINATION lib
)

if(NOT DISABLE_INSTALL_HEADERS)
  install(DIRECTORY include/ DESTINATION include)
endif()

Regarding CMake, please be invited to help https://github.com/uriparser/uriparser/pull/18 go further upstream.


Running with coverage is eating variables...

Firstly, yeah, super weird issue subject, not really sure how to retitle it.
Here's the scenario, when I run tap index.js my code passes, when add coverage (any coverage related argument), like tap index.js --cov my code fails. I'm using<EMAIL_ADDRESS>in<EMAIL_ADDRESS>The index.js simply contains this:
const test = require('tap').test;

test('missing arg', t => {
  var foo = function ({
    user = 'foo',
    ref = 'my-ref',
  } = {}) {
    t.equal(ref, 'my-ref');
    t.end();
  };

  foo({
    user: 'remy',
  });
});

When I run with coverage, the value that isn't passed, and should take a default parameter value becomes undefined, but without the value is correct.
It took me quite a while to par this down, but I've honestly no idea what could be causing it. Any ideas?!!?

My guess would be that Istanbul isn't transpilating this fancy newfangled ES2099 code properly, giving it a bad wrap.
Maybe @gotwarlost or @bcoe might have ideas?

see: https://github.com/bcoe/nyc/issues/265, https://github.com/gotwarlost/istanbul/issues/626, https://github.com/bcoe/nyc/issues/264
tldr; while istanbul seems to mostly work for ES2036 there are some issues cropping up ... it feels like someone needs to dive in to esprima/istanbul and work out some issues.

This occurred to me too, as I couldn't sleep last night. Sod.
Worth closing the issue or leaving open for others to find until it's fixed deeper down?

Sorry guys, I haven't had the time to work on istanbul at all. I'll be in this state for 10 days more and then maybe I'll have some time to look into all the things that I've been ignoring :(

@gotwarlost would love to help in any way I can, including directing folks from nyc to the appropriate bits of the Istanbul codebase. To start building out better ES6 support, any direction as to where to start?

@remy give this a spin:
https://github.com/bcoe/nyc#use-babel-plugin__coverage__-for-better-es6es7-support
we've released better support for ES6/ES7 coverage using the coverage instrumentation library.

Cheers, I'll give it a go tomorrow (enjoying last day of holidays/laptop free!) 😃

FWIW, I encountered the same issue with default values for destructured arguments not being assigned. It's not in too many places in my code, so I worked around it by checking for undefined in the function body. My project is written for node 6.2.x which isn't using babel so it seemed to make sense to change my syntax to what istanbul can handle rather than introduce babel/__coverage__. Thanks for all of the work across projects on these ES2015+ issues. 😄

Since this is fundamentally an istanbul/nyc issue, I'm gonna close the issue here.
Please lmk if anything comes up that requires a change in this repo :)

Finally got around to testing this - just wanted to say all working great, cheers all!

Urm...I've just been trying this out against my real code and I've found something pretty weird…
I'm not sure whether to comment here, open a new issue…I'm not entirely sure where the problem is too.
Basically, if the required module with the default params is in a outer folder, it doesn't work.
Yeah, that sounds pretty flipping obscure. Let me know what you'd prefer, I've got a "working" example.

Following on, without --cov it all works okay, so I guess this new thing is against nyc? But…I'm not sure if this tap's usage of nyc. (sorry, rambling, this is a weird one!)

@remy Yeah, you're running into an interesting facade-misdirection issue.  Tap just calls out to nyc, which is a child-process-aware implementation of istanbul's code-wrapping logic.
So I'm almost certain that the issue isn't even nyc, it's istanbul, but it's completely reasonable to assume that tap's to blame, since, ya know, that's the thing you're using, of course.
I'm sure that @bcoe and @gotwarlost would <3 a working example posted over at https://github.com/istanbuljs/istanbul-lib-instrument or https://github.com/istanbuljs/nyc


github: do not automatically merge on "extended-review" label

The "extended-review" label indicates that review is likely to take
an extended period of time and for bots (or even humans) to not automatically take
a PR.
This avoid the need to preemptively mark a PR as changes needed or
give a false impression with a "do-not-merge" label, which has a subtle
lack-of-quality implication.

Just out of curiosity: is it possible to use a label pattern like extended-review*, then we could add our names for more clarity like extended-review-ansiwen...

Just out of curiosity: is it possible to use a label pattern like extended-review*, then we could add our names for more clarity like extended-review-ansiwen...

I dunno, that'd be neat though. Could you please check out the mergify.io docs? It's not mutually exclusive with this so I figure we can just merge this (now that we have two reviews), and do another PR in the future if that is supported.
I'll merge this later today if I don't hear any NACKs to the above.

Just out of curiosity: is it possible to use a label pattern like extended-review*, then we could add our names for more clarity like extended-review-ansiwen...

Is the awaiting review from me option not sufficient?


chore(security): update nodejs to latest version

Details about changes:

https://nodejs.org/en/blog/vulnerability/november-2018-security-releases/

Package php5-cli is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

Package php5-common is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

Package php5-curl is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'php5-common' has no installation candidate
E: Package 'php5-cli' has no installation candidate
E: Package 'php5-curl' has no installation candidate
The command '/bin/sh -c apt-get install -y wget     && apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv $MONGO_GPG     && echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/$MONGO_MAJOR main" > /etc/apt/sources.list.d/mongodb-org.list     && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -     && sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'     && apt-get update     && apt-get install -y mongodb-org-shell=$MONGO_VERSION                           google-chrome-stable                           xvfb                           php5-common                           php5-cli                           php5-curl                           libkrb5-dev                           ruby                           ruby-dev                           build-essential                           libssl-dev                           redis-tools                           vnc4server     && gem install rest-client     && /sbin/ldconfig -v' returned a non-zero code: 100

Error building apiaryio/coreapp:6-mongo-3.4

Looks like php5 was removed.


Styling Images and content in general.

Just starting to test out simpla by using it with some basic bootstrap templates.
There are issues with content not loading css properties. I think part of this has to do with the content being out of scope and contained within the shadow root...
Are there any scss mixins or shouldn't there be, for say:
simpla-img# > .editor  > sm-img-canvas > img#source{
 //style the image
}

The problem right now with adding a class to simpla-img is that some styles are not applied correctly however, this could seemingly be less of a problem with a mixin like:
.this {
  @include simpla(img-container) {
      width: 100%;
   }
  @include simpla(img) {
      border-radius: 50%;
   }
}

or in the compiled css:
.this simpla-img::shadow  > .editor {
      width: 100%;
}

.this simpla-img::shadow  > .editor  > sm-img-canvas::shadow  > img#source{
       border-radius: 50%;
}

Here is an example:

Yep so as you guessed, this is because the internals of Simpla elements are encapsulated in Shadow DOM, and therefore can't be touched by design. This is so simpla-img can live inline on your page without interfering with any of your code (and visa versa). Also it's worth noting that ::shadow (and the related /deep/) are deprecated, for similar reasons.
As far as styling simpla-img itself,  most of the stuff in your examples should work by just applying them to the outermost element (ie simpla-img { ... }). But there are bound to be edge cases, particularly around sizing. We're planning on rebuilding simpla-img to extend a native img element (see this issue on SimplaElements/simpla-img), which would make styling trivial because there'll be no internal DOM, just a native img element (ie: <img is="simpla-img" sid="foo">).
We also have plans for refactoring the other Simpla elements (namely simpla-text) to use the upcoming Simpla v2 SDK, and we'll address any other styling issues then (eg: placeholders for simpla-text are currently flaky), and provide mixins for internals if we have to. Though we'd prefer to design around that need, only because mixins themselves are currently non-ideal (eg: mixins don't cascade, so are very hard to reason about when used to access internals of custom elements).

@seaneking thanks for responding so quickly. I really appreciate it and I think this fills a very critical gap in certain products like nationbuilder or even github pages and makes it very simple to add a super light weight cms for just content. It's incredibly easy to use.
Me and a friend were trying do something like this awhile back with firebase but ended up quitting.
I wasn't aware ::shadow was deprecated because I haven't used polymer since the ealry alpha/beta. I'm glad to see you guys are refactoring and I hope to see the multiple accounts thing on there and I hope that solves some of the problems for seo, stying, accessiblity (like alt tags) etc.
I'm also kinda curious why you went with polymer, instead of react or something a little more lightweight and less of a need for polyfills. JSX also seems particularly ideal compared to html imports which create another request if I'm not mistaken...

Polymer is just light (very light, with upcoming v2) sugar on top of Web Components. The APIs Simpla relies on are standards driven and are/will be native on the web (implementations shipping soon in Webkit, Mozilla, and Edge). Lots of crucial upsides here - most importantly, since Web Components are a feature of the web platform they work anywhere. We didn't want Simpla to be a 'React thing' or an 'X library' thing. We wanted it to be a web thing, that you can mix in to whatever stack you already use, including React.
That means we do rely on polyfills in some browsers, but they're all reasonably light (custom elements v1 is ~2kb, for eg) and again, the standards they shim are being rapidly implemented by vendors.
In general we prefer to polyfill future specs than use domain-specifc libraries (eg: CSS props/mixins over preprocessors, ES6 over DSLs, Web Animations API over motion libs) for many of the same reasons.
Re: HTML imports, not entirely sure what you mean with the comparison to JSX (HTML imports are just a way to import code, more similar to ES6 modules than anything), but they do dedupe. Once you've included something once in a session no extra requests are made.

Simpla elements have now all been refactored for upcoming Simpla 2, fixing these issues:

simpla-img now extends a native img, which solves all styling and sizing woes
simpla-text has been rebuilt to be much more robust, and styling placeholders is no longer an issue

See simpla-img 1.0 branch
See simpla-text 1.0 branch
Both will be shipped mainline in the next few days alongside Simpla 2


WIP: Project:create --template and --initialize flags

Work in progress needs additional testing for edge cases and proper error handling. Initial work to achieve:

Adding a --template arg to project:create that would pass a template URL to the options_url parameter of the subscription

If no template is provided, using the /setup/catalog API on Accounts to fetch a catalog file and allow the user to pick a template from the CLI

Adding a --initialize flag to project:create that would execute the initialization of your project for you from the project_options.initialize key, as Console does, if you supplied a template

This relies on updates to the client php library.

We're moving forward with #831 so this can be closed.


When hax-engine's fails to parse stdin, make nicer error message

Such an error means either:

the generated parser is broken (this almost never happens);
the generated parser is outdated (dune is supposed to regenerate it, but sometimes it doesn't).

The gory details about why the parser failed should be less visible, and we should print a message for the user telling him to reinstall properly things, maybe even to clean the engine folder with dune clean.
Note I tried to do something about that in PR #261, but that was not fully satisfactory.

We should still do that.


upstream-community-operators hazelcast-jet-operator (0.5.0)

Signed-off-by: Ondrej Lukas<EMAIL_ADDRESS>Thanks submitting your Operator. Please check below list before you create your Pull Request.
New Submissions

[ ] Does your operator have nested directory structure?
[ ] Have you selected the Project Community Operator Submissions in your PR on the right-hand menu bar?
[ ] Are you familiar with our contribution guidelines?
[ ] Have you packaged and deployed your Operator for Operator Framework?

[ ] Have you tested your Operator in all supported installation modes?
[ ] Have you considered whether you want use semantic versioning order?
[ ] Is your submission signed?
[ ] Is operator icon set?

Updates to existing Operators

[ ] Did you create a ci.yaml file according to the update instructions?
[ ] Is your new CSV pointing to the previous version with the replaces property if you chose replaces-mode via the updateGraph property in ci.yaml?
[ ] Is your new CSV referenced in the appropriate channel defined in the package.yaml or annotations.yaml ?
[ ] Have you tested an update to your Operator when deployed via OLM?
[ ] Is your submission signed?

Your submission should not

[ ] Modify more than one operator
[ ] Modify an Operator you don't own
[ ] Rename an operator - please remove and add with a different name instead
[ ] Submit operators to both upstream-community-operators and community-operators at once
[ ] Modify any files outside the above mentioned folders
[ ] Contain more than one commit. Please squash your commits.

Operator Description must contain (in order)

[ ] Description about the managed Application and where to find more information
[ ] Features and capabilities of your Operator and how to use it
[ ] Any manual steps about potential pre-requisites for using your Operator

Operator Metadata should contain

[ ] Human readable name and 1-liner description about your Operator
[ ] Valid category name1
[ ] One of the pre-defined capability levels2
[ ] Links to the maintainer, source code and documentation
[ ] Example templates for all Custom Resource Definitions intended to be used
[ ] A quadratic logo

Remember that you can preview your CSV here.
--
1 If you feel your Operator does not fit any of the pre-defined categories, file an issue against this repo and explain your need
2 For more information see here

@frant-hartm since you are previous contributor, please have a look at changes if ok with you. If you want to accelerate publishing your changes, consider adding yourself and others you trust to the reviewers list see how that works here.


spotbugs finding while mvn verify

hi @timja
first of all, i was really pleasantly surprised when i saw your plugin. Not only because it delves in an area that might be able to help with ideas we are looking into at work (with custom solutions, not via jenkins-plugins) but also because the yet small testharness you created serves as a really neat way for me to get my feet wet with the multiple different tools you weave together (casc, testcontainers, docker postgres, jenkins integrationtesting ...). Really insightful for the adept i consider myself! 👍
So what i did do:

i forked+cloned the repo
ran docker-compose up to get the postgres running
ran mvn clean verify to see what happens :)

What i perceived:
[ERROR] Medium: Nullcheck of connection at line 651 of value previously dereferenced in io.jenkins.plugins.junit.storage.database.DatabaseTestResultStorage$RemotePublisherImpl.publish(TestResult, TaskListener)

[io.jenkins.plugins.junit.storage.database.DatabaseTestResultStorage$RemotePublisherImpl, io.jenkins.plugins.junit.storage.database.DatabaseTestResultStorage$RemotePublisherImpl] At DatabaseTestResultStorage.java:
[line 651]Redundant null check at DatabaseTestResultStorage.java:[line 693]
RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE

Detailed Build-Log: expand!
/mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin$ mvn clean verify
[INFO] Scanning for projects...
[WARNING] The POM for org.jenkins-ci.tools:maven-hpi-plugin:jar:3.15 is missing, no dependency information available
[WARNING] Failed to build parent project for io.jenkins.plugins:junit-sql-storage:hpi:0.3-SNAPSHOT
[INFO]
[INFO] ----------------< io.jenkins.plugins:junit-sql-storage >----------------
[INFO] Building Junit SQL Storage Plugin 0.3-SNAPSHOT
[INFO] --------------------------------[ hpi ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ junit-sql-storage ---
[INFO] Deleting /mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin/target
[INFO]
[INFO] --- maven-hpi-plugin:3.15:validate (default-validate) @ junit-sql-storage ---
[INFO]
[INFO] --- maven-enforcer-plugin:3.0.0-M3:display-info (display-info) @ junit-sql-storage ---
[INFO] Maven Version: 3.6.3
[INFO] JDK Version: 11.0.8 normalized as: 11.0.8
[INFO] OS Info: Arch: amd64 Family: unix Name: linux Version: 4.19.104-microsoft-standard
[INFO]
[INFO] --- maven-enforcer-plugin:3.0.0-M3:enforce (display-info) @ junit-sql-storage ---
[INFO] Adding ignore: module-info
[INFO] Ignoring requireUpperBoundDeps in com.google.guava:guava
[INFO] Ignoring requireUpperBoundDeps in net.java.dev.jna:jna
[INFO]
[INFO] --- maven-enforcer-plugin:3.0.0-M3:enforce (no-snapshots-in-release) @ junit-sql-storage ---
[INFO]
[INFO] --- gmavenplus-plugin:1.10.0:addTestSources (test-in-groovy) @ junit-sql-storage ---
[INFO]
[INFO] --- maven-localizer-plugin:1.26:generate (default) @ junit-sql-storage ---
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ junit-sql-storage ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 5 resources
[INFO]
[INFO] --- flatten-maven-plugin:1.2.5:flatten (flatten) @ junit-sql-storage ---
[INFO] Generating flattened POM of project io.jenkins.plugins:junit-sql-storage:hpi:0.3-SNAPSHOT...
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ junit-sql-storage ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 3 source files to /mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin/target/classes
[INFO]
[INFO] --- access-modifier-checker:1.16:enforce (default-enforce) @ junit-sql-storage ---
[INFO]
[INFO] --- maven-hpi-plugin:3.15:insert-test (default-insert-test) @ junit-sql-storage ---
[INFO]
[INFO] --- gmavenplus-plugin:1.10.0:generateTestStubs (test-in-groovy) @ junit-sql-storage ---
[INFO] No sources specified for stub generation. Skipping.
[INFO] Generated 0 stubs.
[INFO]
[INFO] --- maven-antrun-plugin:3.0.0:run (createTempDir) @ junit-sql-storage ---
[INFO] Executing tasks
[INFO]     [mkdir] Created dir: /mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin/target/tmp
[INFO] Executed tasks
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ junit-sql-storage ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ junit-sql-storage ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 5 source files to /mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin/target/test-classes
[INFO] /mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin/src/test/java/io/jenkins/plugins/junit/storage/database/DatabaseTestResultStorageTest.java: /mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin/src/test/java/io/jenkins/plugins/junit/storage/database/DatabaseTestResultStorageTest.java uses or overrides a deprecated API.
[INFO] /mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin/src/test/java/io/jenkins/plugins/junit/storage/database/DatabaseTestResultStorageTest.java: Recompile with -Xlint:deprecation for details.
[INFO]
[INFO] --- maven-hpi-plugin:3.15:test-hpl (default-test-hpl) @ junit-sql-storage ---
[INFO] Generating /mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin/target/test-classes/the.hpl
[INFO]
[INFO] --- maven-hpi-plugin:3.15:resolve-test-dependencies (default-resolve-test-dependencies) @ junit-sql-storage ---
[INFO]
[INFO] --- gmavenplus-plugin:1.10.0:compileTests (test-in-groovy) @ junit-sql-storage ---
[INFO] No sources specified for compilation. Skipping.
[INFO]
[INFO] --- maven-surefire-plugin:3.0.0-M4:test (default-test) @ junit-sql-storage ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running InjectedTest
[INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 194.662 s - in InjectedTest
[INFO] Running io.jenkins.plugins.junit.storage.database.DatabaseJcascTestResultStorageTest
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.9 s - in io.jenkins.plugins.junit.storage.database.DatabaseJcascTestResultStorageTest
[INFO] Running io.jenkins.plugins.junit.storage.database.DatabaseTestResultStorageTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 14.364 s - in io.jenkins.plugins.junit.storage.database.DatabaseTestResultStorageTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 8, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- animal-sniffer-maven-plugin:1.19:check (check) @ junit-sql-storage ---
[INFO] Resolved signature org.codehaus.mojo.signature:java18 version as 1.0 from dependencyManagement
[INFO] Checking unresolved references to org.codehaus.mojo.signature:java18:1.0
[INFO]
[INFO] --- maven-license-plugin:1.8:process (default) @ junit-sql-storage ---
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass$3$1 (file:/home/###/.m2/repository/org/codehaus/groovy/groovy/1.6.5/groovy-1.6.5.jar) to method java.lang.Object.finalize()
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.reflection.CachedClass$3$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[INFO] Generated /mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin/target/junit-sql-storage/WEB-INF/licenses.xml
[INFO]
[INFO] --- maven-hpi-plugin:3.15:hpi (default-hpi) @ junit-sql-storage ---
[INFO] Generating /mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin/target/junit-sql-storage/META-INF/MANIFEST.MF
[INFO] Checking for attached .jar artifact ...
[INFO] Generating jar /mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin/target/junit-sql-storage.jar
[INFO] Building jar: /mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin/target/junit-sql-storage.jar
[INFO] Exploding webapp...
[INFO] Copy webapp webResources to /mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin/target/junit-sql-storage
[INFO] Assembling webapp junit-sql-storage in /mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin/target/junit-sql-storage
[INFO] Bundling direct dependency spotbugs-annotations-4.1.2.jar
[WARNING] Bundling transitive dependency jsr305-3.0.2.jar (via spotbugs-annotations)
[INFO] Bundling direct dependency flyway-core-6.5.6.jar
[INFO] Generating hpi /mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin/target/junit-sql-storage.hpi
[INFO] Building jar: /mnt/c/Entwicklung/repos/git/github.com/eitsch/junit-sql-storage-plugin/target/junit-sql-storage.hpi
[INFO]
[INFO] --- maven-jar-plugin:3.2.0:test-jar (maybe-test-jar) @ junit-sql-storage ---
[INFO] Skipping packaging of the test-jar
[INFO]
[INFO] >>> spotbugs-maven-plugin:4.0.4:check (spotbugs) > :spotbugs @ junit-sql-storage >>>
[INFO]
[INFO] --- spotbugs-maven-plugin:4.0.4:spotbugs (spotbugs) @ junit-sql-storage ---
[INFO] Fork Value is true
[INFO] Done SpotBugs Analysis....
[INFO]
[INFO] <<< spotbugs-maven-plugin:4.0.4:check (spotbugs) < :spotbugs @ junit-sql-storage <<<
[INFO]
[INFO]
[INFO] --- spotbugs-maven-plugin:4.0.4:check (spotbugs) @ junit-sql-storage ---
[INFO] BugInstance size is 1
[INFO] Error size is 0
[INFO] Total bugs: 1
[ERROR] Medium: Nullcheck of connection at line 651 of value previously dereferenced in io.jenkins.plugins.junit.storage.database.DatabaseTestResultStorage$RemotePublisherImpl.publish(TestResult, TaskListener)
[io.jenkins.plugins.junit.storage.database.DatabaseTestResultStorage$RemotePublisherImpl, io.jenkins.plugins.junit.storage.database.DatabaseTestResultStorage$RemotePublisherImpl] At DatabaseTestResultStorage.java:[line 651]Redundant null check at DatabaseTestResultStorage.java:[line 693] RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE
[INFO]

To see bug detail using the Spotbugs GUI, use the following command "mvn spotbugs:gui"

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  04:19 min
[INFO] Finished at: 2020-10-02T00:52:25+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.github.spotbugs:spotbugs-maven-plugin:4.0.4:check (spotbugs) on project junit-sql-storage: failed with 1 bugs and 0 errors  -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

I tried to get around this and no spotbugs findings were produced when i changed the line in DatabaseTestResultStorage.java:651 from
try (Connection connection = connectionSupplier.connection(); PreparedStatement statement = connection.prepareStatement("[$SQL_STATEMENT]")) {

to
try (PreparedStatement statement = connectionSupplier.connection().prepareStatement("[$SQL_STATEMENT]")) {

I opened #13 with this one liner...

Ah thanks, let me know if you have any other feedback 👍
The planned work here is mostly done, just one bit of the test report doesn’t work, and then need to decide if adding cleanup support should be implemented, I.e do test results get deleted after log rotation and or build deletion


Consider explicitly opting-in to angular animations

This article from today's Angular Weekly newsletter proposed an interesting optimization around configuring Angular to explicitly skip animation handling for elements without a certain classname:
http://www.bennadel.com/blog/2935-enable-animations-explicitly-for-a-performance-boost-in-angularjs.htm
Since (to my knowledge) the Vega projects do not make heavy (or possibly any) use of ngAnimate animations, this could be a nice way to remove unneeded processing from Angular's draw loop.

If we don't use ng animate, don't we already have an optimized version?

You make a good point! I had misapprehended that it was a part of Angular core, but it looks like you are correct and that it is a separate module. nevermind :)


if session controller do not found user - it should reset session

it will be rare on production - but in development we quite often reset database, and then
Document not found for class PufferUser with id(s) 4eba6ce9c566db16ba0000b2.

True. This should be, you are right.

Done.

thanks ;-)


copr: rename some rpn functions following tipb

What have you changed?
These renames reflex the changes in tipb (pingcap/tipb#163)  (pingcap/tipb#162).
What is the type of the changes?

Engineering (engineering change which doesn't change any feature or fix any issue)

How is the PR tested?

Unit test

/run-all-tests

/test

/run-all-tests

/run-all-tests

/merge


Which tool is used to draw the diagram in this article,Thanks!

Which tool is used to draw the diagram in this article,Thanks!

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 43af0b36-1389-2302-9c67-5e6560c9814b
Version Independent ID: 235ef144-78ca-1fbc-e3f8-e69afcc04ff5
Content: CQRS
Content Source: docs/patterns/cqrs.md
Service: guidance
GitHub Login: @dragon119
Microsoft Alias: pnp

Those were actually created a long time ago, but I'm guessing it was Visio.


ArgumentError (argument out of range)

After successfully executing once, sidekiq-cron is repeatedly raising an exception in sidekiq (and the sidekiq-cron web UI):
ArgumentError (argument out of range):
  /usr/share/ruby/2.3/time.rb:302:in `local'
  /usr/share/ruby/2.3/time.rb:302:in `make_time'
  /usr/share/ruby/2.3/time.rb:366:in `parse'
  sidekiq-cron (0.6.3) lib/sidekiq/cron/job.rb:276:in `initialize'
  sidekiq-cron (0.6.3) lib/sidekiq/cron/job.rb:214:in `new'
  sidekiq-cron (0.6.3) lib/sidekiq/cron/job.rb:214:in `block in all'
  sidekiq-cron (0.6.3) lib/sidekiq/cron/job.rb:212:in `collect'
  sidekiq-cron (0.6.3) lib/sidekiq/cron/job.rb:212:in `all'
  sidekiq-cron (0.6.3) lib/sidekiq/cron/web_extension.rb:13:in `block in registered'
  sidekiq (5.0.5) lib/sidekiq/web/application.rb:266:in `instance_exec'
  sidekiq (5.0.5) lib/sidekiq/web/application.rb:266:in `block in call'
  sidekiq (5.0.5) lib/sidekiq/web/application.rb:262:in `catch'
  sidekiq (5.0.5) lib/sidekiq/web/application.rb:262:in `call'
  rack-protection (2.0.0) lib/rack/protection/xss_header.rb:18:in `call'
  rack-protection (2.0.0) lib/rack/protection/base.rb:50:in `call'
  rack-protection (2.0.0) lib/rack/protection/base.rb:50:in `call'
  rack-protection (2.0.0) lib/rack/protection/path_traversal.rb:16:in `call'
  rack-protection (2.0.0) lib/rack/protection/json_csrf.rb:26:in `call'
  rack-protection (2.0.0) lib/rack/protection/base.rb:50:in `call'
  rack-protection (2.0.0) lib/rack/protection/base.rb:50:in `call'
  rack-protection (2.0.0) lib/rack/protection/frame_options.rb:31:in `call'
  rack-protection (2.0.0) lib/rack/protection/base.rb:50:in `call'
  rack (1.6.8) lib/rack/session/abstract/id.rb:225:in `context'
  rack (1.6.8) lib/rack/session/abstract/id.rb:220:in `call'
  rack (1.6.8) lib/rack/urlmap.rb:66:in `block in call'
  rack (1.6.8) lib/rack/urlmap.rb:50:in `each'
  rack (1.6.8) lib/rack/urlmap.rb:50:in `call'
  rack (1.6.8) lib/rack/builder.rb:153:in `call'
  sidekiq (5.0.5) lib/sidekiq/web.rb:103:in `call'
  sidekiq (5.0.5) lib/sidekiq/web.rb:108:in `call'

My scheduled is pretty simple (and the cron expression is valid):
nightly_cleanup:
  cron: '0 5 * * *'
  class: NightlyCleanupWorker
  queue: default

Rufus::Scheduler.parse('0 5 * * *').next_time
=> #<EtOrbi::EoTime:0x00000000056098e8 @seconds=1513918800.0, @zone=#<TZInfo::TimezoneProxy: Etc/UTC>, @time=2017-12-22 05:00:00 UTC>

I'm not sure if it has something to do with the fact that I'm using UTC on the host and in my Rails config. I'm running sidekiq-cron 0.6.3, sidekiq 5.0.5, Rails 4.2.10 and Ruby 2.3.5.

It looks like last_enqueue_time is failing to parse. Though my last_enqueue_time fails to parse in plain old Ruby...
$ irb -rtime
2.3.5 :001 > Time.parse('12/19/2017')
ArgumentError: argument out of range
        from /home/vagrant/.rvm/rubies/ruby-2.3.5/lib/ruby/2.3.0/time.rb:302:in `local'
        from /home/vagrant/.rvm/rubies/ruby-2.3.5/lib/ruby/2.3.0/time.rb:302:in `make_time'
        from /home/vagrant/.rvm/rubies/ruby-2.3.5/lib/ruby/2.3.0/time.rb:366:in `parse'

If last enqueue time will always be a date in the format MM/DD/YYYY, then perhaps strptime would make more sense, e.g.
@last_enqueue_time = Time.strptime(args['last_enqueue_time'], '%M/%d/%Y')


Enhance Serializer Interface

As proposed during community call and in https://github.com/abapGit/abapGit/issues/4187, here are the enhancements of the serialized interface.
https://larshp.github.io/abapGitCC20230404/#/10
New Methods

get_deserialize_order
map_object_to_filename
map_filename_to_object

New Parameters

changed_by
jump

Note: The three new methods are not called yet. This will happen in a subsequent PR.

need https://docs.abapgit.org/development/serializers.html updated, but doesnt have to be now

I changed the other mapping method to static and parameters to changing. Makes it clearer that AG will pass in the default mapping and an object type can change it if necessary.
  CLASS-METHODS map_filename_to_object
    IMPORTING
      !iv_filename TYPE string
      !iv_path     TYPE string OPTIONAL
      !io_dot      TYPE REF TO zcl_abapgit_dot_abapgit OPTIONAL
    CHANGING
      cs_item      TYPE zif_abapgit_definitions=>ty_item
    RAISING
      zcx_abapgit_exception.

  CLASS-METHODS map_object_to_filename
    IMPORTING
      !is_item    TYPE zif_abapgit_definitions=>ty_item
    CHANGING
      cv_filename TYPE string
    RAISING
      zcx_abapgit_exception.

Hello,
I've been trying to use the method map_filename_to object in some new serializer classes I've implemented for some "custom objects" but noticed that the call for this is not yet implemented.
Is there any timeframe for when this will be done?
Or how can I help implement/test this feature?
Thank you!

@andrecarrilho the new methods are called already in the latest version. You can see an example in zcl_abapgit_object_devc.
PS: I merged the doc changes.

hi @mbtools,
Sorry to bother you with this but I've set a breakpoint in the method of the class that you provided as an example, but it never stops there, and I've tried with a few different repos.
I saw that this method is called dynamically inside of ZCL_ABAPGIT_FILENAME_LOGIC->MAP_FILENAME_TO_OBJECT, which is called inside of method FILE_TO_OBJECT of the same class.
I've set a breakpoint in there as well and again it never stops.
Also tried setting up a breakpoint for method, (both MAP_FILENAME_TO_OBJECT and FILE_TO_OBJECT ) and got the same result.
Am I looking at this the wrong way or am I missing something?
Can you point me in the correct direction?
Thank you for the help!

are you using the dev version? if yes, then you might have to disable parallel processing
https://docs.abapgit.org/guide-settings-personal.html#developer-version

called from

Hi @larshp  and @mbtools ,
@larshp , that is precisely the method I'm trying to stop at.
@mbtools , I have disabled the parallel processing, and still nothing.
I set up the breakpoint at the method like this.

I noticed that MAP_FILENAME_TO_OBJECT is called inside of the FILE_TO_OBJECT method, then I checked where this method is called.
Looking at that, I set up break points in all the places where ZCL_ABAPGIT_FILENAME_LOGIC->FILE_TO_OBJECT would be called, and I saw that the conditions are never met so that the method would be executed.
Looking in particular to ZCL_ABAPGIT_SERIALIZE->ADD_DATA , I see that the internal table LT_FILES is never filled:

Just to double-check all of this I asked another colleague to try and stop at the MAP_FILENAME_TO_OBJECT method, just to make sure I'm not forgetting something, and he also could not make it stop there.
Am I still missing something?
Just trying to help here, but to me, it looks like the conditions to execute the method are never met.
Let me know if I can provide any more information.
Kind regards,
André

The method is called only for files that exist in the remote repo but not locally. The place you mentioned (add_data) is only relevant, if the repo contains data selection.
For example, create a repo for https://github.com/abapGit-tests/DOMA.

AG will stop at break-point. Here's the callstack:

Hi @mbtools ,
Now it makes sense!
Thank you for the explanation.
Kind regards!


New package: CompetetiveSwarm v0.1.0

Registering package: CompetetiveSwarm
Repository: https://github.com/hondoRandale/CompetetiveSwarm.jl
Created by: @hondoRandale
Version: v0.1.0
Commit: 5965f5622e4eba30a577a6fa41dc29f2908c7188
Git reference: HEAD
Description: non-linear solver, swarm intelligence utilizing an attraction/repulsion mechanism
Release notes:

efficient swarm intelligence for minimizing bounded input non-linear problems

@hondoRandale please see the message above.  Also, it's uncommon for a package to directly depend on a debug package, I presume that was a mistake?
[noblock]


Adding a section in website as how to maintain cleanliness in the areas people visit

People while travelling forget about not to make the place they go like hell. So if the website would contain necessary guidelines as what to follow while travelling would really help @arpanchowdhury53 Please assign me this project.

I can solve this issue. Please assign me this issue.

I am Anvi Shelar. Under GSSOC'24, I would like to work on this issue. Pls assign me this!!

@Shreya-060304 Please follow the issue templates to raise the issue & make it more clearer. as the issue is not clear to me
Sorry to close this issue


bin_input.txt error

F:\GameTranslate\SpiceWolfNDS\d>tool.exe repack
OokamiTranslation version 1.5.2
Repacking BIN from data/bin_input.txt ...
Traceback (most recent call last):
  File "tool.py", line 122, in <module>
    common.cli()
  File "lib\site-packages\click\core.py", line 829, in __call__
  File "lib\site-packages\click\core.py", line 782, in main
  File "lib\site-packages\click\core.py", line 1259, in invoke
  File "lib\site-packages\click\core.py", line 1066, in invoke
  File "lib\site-packages\click\core.py", line 610, in invoke
  File "tool.py", line 59, in repack
    repack_bin.run(firstgame)
  File "repack_bin.py", line 32, in run
    nds.repackBIN(binrange, freeranges, game.detectShiftJIS, game.writeBINShiftJIS, "cp932", "#", binin, binout)
  File "lib\site-packages\hacktools\nds.py", line 86, in repackBIN
  File "lib\site-packages\hacktools\common.py", line 696, in repackBinaryStrings
  File "game.py", line 122, in writeBINShiftJIS
    return writeShiftJIS(f, s, False, True, maxlen, encoding)
  File "game.py", line 91, in writeShiftJIS
    f.write(c.encode(encoding))
UnicodeEncodeError: 'cp932' codec can't encode character '\uc774' in position 0: illegal multibyte sequence
[5076] Failed to execute script tool

全てのデータを消去しますか？=is this english?
If I repackage like this, the repackage will proceed normally.
全てのデータを消去しますか？=이것은 한국어입니다?
But, if I write sentences in Korean, the repack will not work properly.
edit dat_input.txt and wsb_input.txt is nicely work.
But bin_input.txt does not.
Did I make a mistake?
If I translate dat_input.txt and wsb_input.txt into Korean / translate bin_input.txt into English, repack is proceeding normally.
So I think there is no problem with the fontconfig.txt.
I'm sorry to keep bothering you.

Should be fixed in 1.5.3, let me know if it works.
I should mention that there's some functionality in the dat files repack that relies on the text being ASCII, so I've also added a new option that you should use when you repack:
tool repack --no-redirect


Values to be set on "Settings" not shown

The Readme says: "If you go to the settings pane, you can set the following values"...but it's not true :)
I'm using Atom 0.190.0 on Ubuntu 64.

Hi, can you have a look #25 & see if it's the same issue?

Yes, it seems to be the same issue. The guy resolved it reinstalling, but it didn't work for me

Sorry about that. So is your settings page completely blank?
What's the version of both Atom and mocha-test-runner?

In "Settings" I see only the "Keybindings" and the "README" sections (so it's not completely blank).
These are the versions:
Atom: 0.190.0
mocha-test-runner: 0.4.0

Update: I've installed the last atom release (0.192) and now I can see the settings!
I'm gonna close this issue.

Good to hear, thanks.
We couldn't reproduce here so I can only think it was an Atom version issue.


Remove comment about license after licenses rule

This is to make an internal linter happy

basic tests python linux: https://github.com/grpc/grpc/issues/20459


Update README.md

Closes #117

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 0.0%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
0

Relevant Lines:
31

💛  - Coveralls


Minor custom VNET doc updates re subnets

Fixes issue #437

This change is

This seems like a small (but important) contribution, so no Contribution License Agreement is required at this point. We will now review your pull request.
Thanks,
Microsoft Pull Request Bot

cc: @colemickens

@anhowe Made changes along the lines you suggested.

Possibly not needed it #473 is merged instead.

@rocketraman, thanks for signing the contribution license agreement. We will now validate the agreement and then the pull request.
Thanks, Microsoft Pull Request Bot

@anhowe - are we good to merge this PR ?

@acs-bot test this please

@rocketraman Please forgive the staleness of the responsiveness in this PR. @lachie83 Could you give the documentation copy in this PR a look over and see if its additional language makes sense for the current state of VNET support?
Thanks!

Closing in favor of a future, larger effort to provide comprehensive custom VNET on Kubernetes docs.


Migration guide for decimals

Adds the needed modules for ease the migration to the new decimal serializers.
Added a new doc page, not sure if I need to list it in any place.
I've also finished the repository with the example:

https://github.com/frees-io/freestyle-rpc-protocol-decimal-update

@juanpedromoreno I've added the disclaimer in the migration guide and removed the bigDecimal object to avoid conflicts. Please, review it again when you have a chance. Thanks


Empty password is revealing everything

I used the demo here: and set up some data in the SecureLS with a password, and encryption system is AES.
Then in the browser console of same page I deliberately created another instance of SecureLS but this time with empty password
var ls = new SecureLS({encodingType: 'aes', isCompression: true, encryptionSecret: ""});
then i wrote console.log(ls)
It revealed everything.  How come? Maybe I have misunderstood something?
Thanks

It gets worse, isCompression and encryptionSecret have little impact.
As long as you get the right encdoingType just creating a new SecureLS instance reveals the plaintext values.
This is nuts!

@limenleap console.log(ls) is not revealing anything special. It how JavaScript is.
ls is an object which is exposed to be used for different APIs. Since the same object has other methods and variables too, it doesn't mean it is revealing some special thing. Your data is still encrypted and compressed. It just you can view and access all the public-facing things which ls expose.

@asiFarran I didn't get your point. Can you please explain it via an example? What's making you feel that something is wrong with this library?


unclickable after dialog opens

Describe the bug
whenever we open a dialog box for changing workspace name or changing channel name or generating a new code whereever we are using dialogs' it is causing the whole webapp unresponsive after that for an instance
To Reproduce
Steps to reproduce the behavior:

create a workspace
create a channel
click on channel name
opens a dialog, here after closing this
whole page is unresponsive

Expected behavior
it shouldn't be unsresponsive

you can create a new account too, use google/github or do normal email password signup. :)


Editing a Signpost is broken

From the scene editor, click Change Signpost.  Enter the information to add a sign and click + Add Sign. Nothing seems to happen.

The new sign should appear in the section below that allows changes without having to refresh the page.

The drop-down to select a destination scene should only show scenes that are not already in use on a sign.

Changes to the sign seem to stick, but going back to the Edit Scene page, you will see the old sign teaser on the read-only signpost. You have to refresh that page to see the change.

Clicking the delete button works, but the row width resizes, which looks bad.

Clicking save when one or more signs is being deleted does not cause the display to refresh, although the sign has been removed.

The service is returning the "updated" signpost before all of the changes have been committed. Probably ought to make the changes on a single transaction and make sure the select happens after the commit.

#1 is fixed.
#3 is fixed.
#5 is fixed.
#6 is fixed using a delay - not bullet-proof, maybe good enough for now.

Fixed all but the second.


netty5?

There are plans to upgrade to netty5 it?

Since Netty 4.1 is still in beta and 5.0 is far, far away, my guess would be, no immediate plans to use Netty 5.0.
Interest in using Netty 4.1 will be high once it is officially released. Among other things, it will support HTTP/2.

Hello,
I use Netty 4.1-Beta4 and 4.0.27.Final and 4.0.24.Final in my
environment with LittleProxy 1.1.0-beta1-SNAPSHOT. Simply add
LittleProxy and Netty as a dependency to your project and try it out.
Note(!), the following Netty versions are broken for me: 4.1.0.Beta3
and 4.0.25.Final and 4.0.26.Final. Linux is always ok, but I support OS
X, Android and Windows, too. It's NIO, using the systems resources with
one single Api and a bunch of tricks. This means you must have tests
on every planned platform! I've seen truncated images on OS X and
Android and strange behavior on Windows. Sorry, but I've not documented
this. I could not catch it. Don't misunderstand me. Thank you Netty for
the hard work, to give me a single Api!
Regards Frank
Am 27.04.2015 um 19:22 schrieb Jason Hoetger:

Since Netty 4.1 is still in beta and 5.0 is far, far away, my guess
would be, no immediate plans to use Netty 5.0.
Interest in using Netty 4.1 will be high once it is officially released.
Among other things, it will support HTTP/2.
—
Reply to this email directly or view it on GitHub
https://github.com/adamfisk/LittleProxy/issues/194#issuecomment-96748930.

I'll go ahead and close this issue since netty 5 is still pre-beta. Netty 4.1 is fully supported, however.


wallet reskin

* It would be nice to have some kind of responsiveness when the icon buttons are clicked, for instance, when I copy an address, there's no indication that anything happened

Whatever you come up with for this, let's backport to the network explorer :)

@jstarry i will take care of 1 and 2 tmrw. 4 is up to you and 3 and 5 could you please check with designers on it. i need design before to make it happen.

@jstarry please check one more time and let's merge it. we can do other changes later as soon as we have design for it.

@manuel-calavera also the popup window definitely regressed with this change, could you maybe just adjust the margins until we get a proper design? Here's what it looks like with your changes:

@jstarry done ;)


Does undistorting an image with the colab notebook convert the fisheye624 camera into a pinhole with intrinsic matrix formed from the input parameters??

I am following the code in the dataprovider_quickstart_tutorial.ipynb colab notebook for undistorting an image (which is the same as the official documentation here), but I am wondering is there a way to recover the intrinsic matrix of this pinhole camera? (this does convert the fisheye624 image into an image taken by a pinhole camera correct?)
I am guessing that the intrinsic matrix is just what we pass into the get_linear_camera_calibration function? For example,
pinhole = calibration.get_linear_camera_calibration(512, 512, 150)?
creates a camera with the same extrinsic matrix, but it's intrinsic is parameterized by f_x = f_y = 150; c_x = c_y = 256?
I got these variables from the documentation
"The linear camera model (a.k.a pinhole model) is parametrized by 4 coefficients : f_x, f_y, c_x, c_y."

Hello @AntonioMacaronio
You are right about what the code is doing, you are constructing a Pinhole camera and get the undistorted image for this just defined pinhole camera.
In this code sample we used fixed parameters set by hand, but you can also directly used the one from the Fisheye camera calibration (but do care about using the right focal lenght - to get more or less pixel reprojected, according to your need)
So for example you can do, something close to the following:
image = self._vrs_data_provider.get_image_data_by_time_ns(
  stream_id,
  device_timestamp_ns,
  TimeDomain.DEVICE_TIME,
  TimeQueryOptions.CLOSEST,
)

focal_lengths = camera_calibration.get_focal_lengths()
image_size = camera_calibration.get_image_size()
pinhole_calib = calibration.get_linear_camera_calibration(
  image_size[0], image_size[1], focal_lengths[0]
)

# Compute the actual undistorted image
undistorted_image = distort_by_calibration(
  image[0].to_numpy_array(), pinhole_calib, camera_calibration
)

Using a multiplier factor on focal_lengths[0] will keep less or more rays of the initial camera (i.e you can use 0.8 or 1.2 and see the difference)

Gotcha, thank you so much; I need to get the intrinsic matrix for this pinhole camera though; is it safe to assume that the principal point offset of the intrinsic matrix is right in the center of the image?
in other words; the intrinsic matrix has 4 parameters f_x, f_y, c_x, c_y. can I assume the c_x =  image_width / 2, c_y = image_height / 2 ?

Yes, it is safe to assume that principal point is the center of the image when you are manipulating the undistorded image camera model (the pinhole camera model).
I will close the issue, and feel free to re-open or ask new questions if you need.