MINOR: Add option to rebuild source for system tests

Save developer time for running mandatory commands.
Committer Checklist (excluded from commit message)

[ ] Verify design and implementation
[ ] Verify test coverage and CI build status
[ ] Verify documentation (including upgrade notes)

Retest this please

Retest this please

@mjsax @hachikuji Could you take a look when you got time?

@mjsax Could we get this merged?

@hachikuji Addressed comment. Note that it's not required to change directory because the script has to be run under Kafka root when triggered by human user.

Retest this please

Retest this please

@mjsax Could we merge this?

@hachikuji if you are happy with this PR, feel free to merge.

@hachikuji WDYT?


Types forgetting key information for infinite keys

Bug Report
🔎 Search Terms

key number string
type key loses
etc. (I found this hard to search for, please let me know if there's another issues regarding this)

🕗 Version & Regression Information

This is the behavior in every version I tried, and I reviewed the FAQ index but couldn't see any relevant entries, let me know if there are!

⏯ Playground Link
Playground link with relevant code
💻 Code
type KeyIsFinite = {
    [k in 0 | 1 | 2]: k
}

type KeyIsNum = {
    [k in number]: k
}

// if KeyIsFinite[1]: 1 then this will be true
const keyIsFiniteTest: KeyIsFinite[1] extends 1 ? true : false = true;
// if KeyIsNum[1]: 1 then this will be true, but this is actually false, because in KeyIsNum, we are losing information about what `k` is
const keyIsNumTest: KeyIsNum[1] extends 1 ? true : false = true;

// similarly, you can do this with strings
type KeyIsFiniteStr = {
    [k in '0' | '1' | '2']: k
}

type KeyIsStr = {
    [k in string]: k
}

const keyIsFiniteStrTest: KeyIsFiniteStr['1'] extends '1' ? true : false = true;
const keyIsStrTest: KeyIsStr['1'] extends '1' ? true : false = true;

🙁 Actual behavior
We see a type error informing us that keyIsNumTest has type false but is the value true, this is because KeyIsNum is not preserving information about k (I assume), and thus is saying that KeyIsNum[1] = number rather than KeyIsNum[1] = 1. We see that KeyIsFinite[1] = 1, so this appears to be an inconsistency.
🙂 Expected behavior
I would expect KeyIsNum to behave like KeyIsFinite and thus for KeyIsNum[1] = 1 rather than KeyIsNum[1] = number

Duplicate of #22509

Strong duplicate energy but really just working as intended: mapped types over finite types produce object types with properties, but mapped types over infinite types produce index signatures. Different input different output.

@jcalz Yep, I think with "Here I expect string to behave as if it were the union of all possible string literal types." in #22509 this is likely a duplicate. I'd like to just promote that it'd be good for this to work for things like numbers too, but I'll close this in favour of that issue. Thanks!


Nuxt 3 Support

Hi,
Is this plugin compatible with Nuxt 3?
Thank you

Doesn't seem to work atm, it  doesn't send any data...

Thanks for filing the issue! Nuxt 3 as well as Vue 3 support is a priority but unfortunately I won't have time to work on this until mid February. I'll update you as soon as I know more.

Update:
It actually seems to work. Forgot to set the domain in settings...
You just have to add the module and set the domain in "plausible" settings:
// nuxt.config.ts

modules: [
  'vue-plausible',
],

plausible: {
  domain: 'my-domain.com',
},

Disclaimer:
Haven't tested if all events are fired correctly, but at first glance it looks good.

I can confirm it works with Nuxt 3 😊

Having an issue on Nuxt 3 where my modals open then refresh the page as soon as I install this module. When I remove the module everything works as normal.

@IzakJackson you are right, I have a similar problem with <a> tags. Until I saw your comment I didn't realize it was caused by the Plausible module. As soon as I enable the module <a> tags behave weird, target="_blank" doesn't work, all links always open in the current tab and when using an <a> tag without href, e.g. as a button, clicking on it will refresh the page.

@IzakJackson as a temporary workaround you can use <div>s instead of anchors.

@IzakJackson you are right, I have a similar problem with <a> tags. Until I saw your comment I didn't realize it was caused by the Plausible module. As soon as I enable the module <a> tags behave weird, target="_blank" doesn't work, all links always open in the current tab and when using an <a> tag without href, e.g. as a button, clicking on it will refresh the page.

I've encountered the same problem, but found that disabling enableOutboundTracking fixed the target="_blank" problem. Not a great solution though...

Thanks @bmhtech07, you're right, disabling outbound tracking resolves the problem!

 ERROR  [vite]: Rollup failed to resolve import "plausible-tracker" from "virtual:nuxt:/home/productdevbook/Documents/GitHub/vucod/bb/.nuxt/vue-plausible.client.js".
This is most likely unintended because it can break your application at runtime.
If you do want to externalize this module explicitly add it to
`build.rollupOptions.external`

omg I was wondering why my "_blank" links weren't working! same issue here, disabling enableOutboundTracking fixes it but would love to have both blank & outbound tracking!

module does with with nuxt3 rc 11, but console shows errors as , anything we can do to silence these ?
warn] [nuxt] You are using a plugin with legacy Nuxt 2 format (context, inject) which is likely to be broken. In the future they will be ignored: PlausiblePlugin

Nuxt 3 library -> https://opensource.huntersofbook.com/guide/nuxt-packages/plausible
our own library

Plugin not working with Nuxt3 Stable 3.0.0
`Cannot read properties of undefined (reading 'options')                                                                                23:39:55
at PlausibleModule (node_modules/vue-plausible/lib/cjs/nuxt-module.js:18:89)
at installModule (node_modules/@nuxt/kit/dist/index.mjs:416:9)
at async initNuxt (node_modules/nuxt/dist/index.mjs:1825:7)
at async loadNuxt (node_modules/nuxt/dist/index.mjs:1857:5)
at async loadNuxt (node_modules/@nuxt/kit/dist/index.mjs:493:19)
at async Object.invoke (node_modules/nuxi/dist/chunks/build.mjs:34:18)
at async _main (node_modules/nuxi/dist/cli.mjs:50:20)
`
Options were set in nuxt.config.ts
It Stopped working after upgrading from RC11 to 3.0.0

Plugin not working with Nuxt3 Stable 3.0.0
Cannot read properties of undefined (reading 'options') 23:39:55

at PlausibleModule (node_modules/vue-plausible/lib/cjs/nuxt-module.js:18:89)
at installModule (node_modules/@nuxt/kit/dist/index.mjs:416:9)
at async initNuxt (node_modules/nuxt/dist/index.mjs:1825:7)
at async loadNuxt (node_modules/nuxt/dist/index.mjs:1857:5)
at async loadNuxt (node_modules/@nuxt/kit/dist/index.mjs:493:19)
at async Object.invoke (node_modules/nuxi/dist/chunks/build.mjs:34:18)
at async _main (node_modules/nuxi/dist/cli.mjs:50:20)

Options were set in nuxt.config.ts
It Stopped working after upgrading from RC11 to 3.0.0


added apply-list

A useful macro I often use for writing macros on lists of similar objets.
Similar to 'walk-nodes' but more powerful.
Example macros may be seen in my /dale-extensions and maybe some other programs

Thanks, this has been added (https://github.com/tomhrr/dale/commit/c9309bf9ed9c3e86820e86a18908e4ec9074d2a2).  The function has been renamed to map-nodes, too, for consistency with walk-nodes.  It's in macros, rather than macros-core, since those two modules have been merged since this PR was submitted.


feat(std-contracts): add deterministic storage location for systems, add storage access util

Reasoning
Current State of MUD
The non-deterministic location of the world and components contract addresses creates unnecessary boilerplate code in MUD contracts
When developing smart contracts in MUD, two common actions include accessing the components registry contract and the world contract. The addresses of these contracts are manually passed in to the constructor for each System and Component contract in MUD (although Component contracts only use the  world address).
The components registry contract is required to read or write any component, and is typically accessed as follows:
    EntityComponent entityComponent = EntityComponent(getAddressById(components, EntityComponentID));

The world contract is most commonly used for getting unique entity IDs:
    uint256 spawnEntity = world.getUniqueEntityId();

A common practice in MUD development is to put business logic in libraries, so they can be reused between systems. However, moving logic to libraries, combined with the need to access the world and components contracts, means that the addresses of these contracts must be passed by value to the libraries that use them.
An example of such behavior looks like this:
// LibRoom.sol

  function createRoom(
    IWorld world,
    IUint256Component components,
    Coord memory roomPosition)

    EntityComponent entityComponent = EntityComponent(getAddressById(components, EntityComponentID));

    ...

Furthermore, if a function inside createRoom needs to access the components, that value must be passed in again as well.
// LibRoom.sol

  function createRoom(
    IWorld world,
    IUint256Component components,
    Coord memory roomPosition)

    ....
    LibEntities.createSpawn(
      CreateSpawnArgs({
        components: components,
        id: world.getUniqueEntityId(),
        ...
        }))

Proposed Solution
In this PR, we make the locations of the world and components addresses deterministic in System contracts.
We do this by using diamond storage to place the addresses of the world and component contracts at a specific place in the storage of every system.
Now, any function, in a system or a library called by a system that wants to access world or components can do so with one storage read instead of threading the addresses through every function.
The new access pattern looks like this:
// LibRoom.sol

  function createRoom(
    Coord memory roomPosition)

    EntityComponent entityComponent = EntityComponent(getAddressById(SystemStorage.components(), EntityComponentID));

    ....
    LibEntities.createSpawn(
      CreateSpawnArgs({
// We don't need to pass in `components` anymore because `createSpawn` can access it as needed
        id: SystemStorage.world().getUniqueEntityId(),
        ...
        }))

This PR enables MUD contracts (systems, libraries called by systems, and tests) to access the world and components contracts without passing the addresses around in every function. It also improves code readability because only the relevant arguments (not arguments for storage reads/writes) are passed into library functions
There are additional features being discussed to reduce boilerplate further for accessing components, including aliasing and helper functions, (cc @Flynnsc), but that is for future PRs.
@holic is this what you wanted?

Ok after some introspection, the only difference in storageMudTest.t.sol and System.t.sol is that MudTest.t.sol inherits DSTest.sol, which has two boolean variables in the first two bits of slot 0 in storage. This slight difference means that LibStorage cannot be used interchangeably with MUD tests that call libraries directly (but it still works for MUD tests that call systems)
To use the LibStorage access pattern in testing and deployed contract code, we need to either change the storage layout of DSTest or System.
My solution is to create  StdSystem contract in std-contracts that copies the addresses of the World contract and Component registry at specified locations in storage:
  uint256 constant worldID = uint256(keccak256("mud.world"));
  uint256 constant componentsID = uint256(keccak256("mud.components"));

If any developer creates systems in the following way:
import "std-contracts/systems/StdSystem.sol";

contract MySystem is StdSystem {
//
}

They can use the LibStorage.sol utility, which enables access patterns documented here
To ensure that LibStorage.sol works for tests as well, just add the following code to your base test contract, likely MudTest.t.sol.
This gives the base testing contract the same storage of World and Component registry as deployed systems.
This closes #250 and moves all logic out of solecs.

Apparently we're introducing somewhat different diamond storage at the same time, check out OwnableWritableStorage in #265

Specifically if one were to store world and components the same as I did with owner in OwnableWritableStorage, much of LibStorage wouldn't be necessary, it'd be just helpers for getAddressById

Specifically if one were to store world and components the same as I did with owner in OwnableStorage, much of LibStorage wouldn't be necessary, it'd be just helpers for getAddressById

Ah yup I see - what do you think is a good way to combine? The only difference between my PR and traditional Diamond storage is that I'm storing addresses of deployed contracts, not structs, so I'm using the storeAddress method as part of the System constructor to ensure the data gets to the right place.

I meant to just move systems to diamond storage entirely, that would be a very breaking change ofc. See #266

Alternatively, you can just use my pattern to do a non-breaking change in std-contracts

The main idea there is to avoid passing around worldID, componentID. There is only 1 STORAGE_SLOT and only storage lib need know about it

The main idea there is to avoid passing around worldID, componentID. There is only 1 STORAGE_SLOT and only storage lib need know about it

I just looked at #266 , this makes sense to me. LibStorage doesn't need to exist if we just have SystemStorage.sol. If @alvrs concurs, I think #266 can close #264. Perhaps the only benefit of my implementation is that it's entirely in std-contracts, but I don't think that's a big deal.

@cha0sg0d was a bit busy today, but I kinda wanna hijack this unless you would really prefer to do it urself. A non-breaking version of #266 with a util lib should be easy enough, the main question was whether alvrs was ok with that concept at all, which has been resolved

@cha0sg0d Some things I was thinking of doing differently:
c and w are too short imo, that's personal preference ofc but I just don't like 1 letter vars, and those aren't very often needed either (you'd use sys and comp more I think)
You can call layout() in initSystem itself, then you don't need using for
I wanted to try and put the storage stuff into System itself. It'd require some testing to make sure it's indeed not a breaking change, not sure yet

@alvrs @dk1a take a look when you get a chance.
Couple of notes:

I moved all of the getter functions (c(), w()) to LibStorage (@dk1a had them in System.sol) because we want to use the getters outside of the System contracts.
Re naming, there are a couple conventions being used that we should align on. Specifically:

  struct Layout {
    IUint256Component components;
    IWorld world;
  }

  bytes32 internal constant STORAGE_SLOT = keccak256("solecs.contracts.storage.System");

  function c() public view returns (IUint256Component) {
    return layout().components;
  }

  function w() public view returns (IWorld) {
    return layout().world;
  }

  function sys(uint256 systemID) internal view returns (address) {
    return getSystemAddressById(c(), systemID);
  }

  function comp(uint256 componentID) internal view returns (address) {
    return getAddressById(c(), componentID);
  }

Do we want to keep these names short for boilerplate reduction? or better to have the full name and let developers rename the functions as needed.

@cha0sg0d Some things I was thinking of doing differently:
c and w are too short imo, that's personal preference ofc but I just don't like 1 letter vars, and those aren't very often needed either (you'd use sys and comp more I think)
You can call layout() in initSystem itself, then you don't need using for
I wanted to try and put the storage stuff into System itself. It'd require some testing to make sure it's indeed not a breaking change, not sure yet

I made the names longer and removed the using keyword, thanks!
Why put storage stuff into System itself?

Why put storage stuff into StdSystem itself?

To make it the default and deprecate the old components, world
(except I'm not entirely sure they'll coexist together as well as I imagine)

I don't mean to ditch the lib and put it all into the system. Rather to use initSystem inside the base System

Re:

Oh I meant not StdSystem, but System, so you'd modify solecs, not std-contracts
To make it the default and deprecate the old components, world
(except I'm not entirely sure they'll coexist together as well as I imagine)

My understanding is that this would require any instance of components being replaced with comp(), so would be a breaking change. Based @alvrs prev comment, seems like going the no breaking changes route for now makes sense, but if devs like this pattern we could push it to solecs.
Re:

I don't mean to ditch the lib and put it all into the system. Rather to use initSystem inside the base System

I agree that initSystem in LibStorage is not super clean, but I can elaborate on why I put it there. For test purposes, the test contracts like SampleTest need to mirror the storage of the System, although they are not 1:1 equivalent. Having initSystem in the library enables test contracts to have the same storage, and if the test calls a library directly instead of a system there will be an error unless the storage slots exist in the same place.
wdyt?

My understanding is that this would require any instance of components being replaced with comp(), so would be a breaking change. Based @alvrs prev comment, seems like going the no breaking changes route for now makes sense, but if devs like this pattern we could push it to solecs.

I jsut explained it poorly, I mean you can put LibStorage.initSystem(_world, IUint256Component(_components)); into System's contructor, and then you don't need StdSystem

I agree that initSystem in LibStorage is not super clean, but I can elaborate on why I put it there. For test purposes, the test contracts like SampleTest need to mirror the storage of the System, although they are not 1:1 equivalent. Having initSystem in the library enables test contracts to have the same storage, and if the test calls a library directly instead of a system there will be an error unless the storage slots exist in the same place.

Same here, didn't mean to criticize initSystem, just that you can call it in System's constructor.
Although you could also remove initSystem and do
  constructor(IWorld _world, address _components) System(_world, _components) {
    LibStorage.layout().world = _world;
    LibStorage.layout().components = _components;
  }

but that's a matter of preference, and not important imo

@alvrs should be good to go. What other documentation should be provide so people know they can use the StdSystem + SystemStorage pattern? Should we wait till we add Flynn's idea as well?

@cha0sg0d Wait, are you sure you want to make a new StdSystem instead of calling SystemStorage.init in the original System?

As in, touching solecs?

yep, my changes were breaking because I removed stuff from System. But if you just add SystemStorage.init it's not a breaking change

yep, my changes were breaking because I removed stuff from System. But if you just add SystemStorage.init it's not a breaking change

I'll add that, and see what @alvrs thinks.

Modifying solecs means you don't need to teach people to use StdSystem, and later making breaking changes to move to diamond storage entirely is easier

Modifying solecs means you don't need to teach people to use StdSystem, and later making breaking changes to move to diamond storage entirely is easier

Done! Now waiting for @alvrs

@alvrs A little detail that will also be relevant in the future - where do you prefer Storage libs?
I'd put it next to its contract, so same directory as System, not in libraries
But it is a library, so libraries makes sense as well

@alvrs A little detail that will also be relevant in the future - where do you prefer Storage libs? I'd put it next to its contract, so same directory as System, not in libraries But it is a library, so libraries makes sense as well
- https://github.com/latticexyz/mud/pull/264#issuecomment-1374103021

Good point, I'd follow @solidstate/contracts and put the storage libraries next to the contract too.

@alvrs Should be good to go now, lmk!

Quickly wired this into Emojimon to make sure it works and to see what the diff looks like:
https://github.com/latticexyz/emojimon/commit/74629a87e291b21268969d981a20b46044f4028f

Are there any concerns about SystemStorage.components() being called within a lib where that lib is being called from not-a-system? Do we need some indication that certain libs are system-only libs and expected to just be used within the context of a System? Or some way for SystemStorage to detect if you're in a system and revert if not?

Does this still work for linked libraries? I assume yes, but just checking.

My understanding is that library's functions is executing with the storage of the contract that called it (inline for embedded internal libraries and via delegatecall for linked libraries. Libraries have no storage of their own, and this is true for embedded or linked libraries.
As you said, the only time you would run into trouble is if you call a library that expects to access SystemStorage from a contract that does not have the correct addresses loaded at the correct location. I'm not sure what the behavior would be, probably a run-time error.
The only time this happened to me was calling a library directly from a test contract (inherited from MudTest.t.sol). This has been fixed in the PR by initializing SystemStorage in MudTest.
I would say it's not a big thing to worry about, but if you think it's necessary, we could make a sanityCheck function in SystemStorage that loads the world and components addresses and calls a function on them.
wdyt?

That all makes sense to me/is how I'd interpret things working too. I am just thinking about potentially-hard-to-track-down errors when developing and wondering if/how we can detect+revert early if you're using it wrong. A linter could also be a potential solution.

Thanks for reviewing @holic and thanks for the detailed and elaborate context in https://github.com/latticexyz/mud/pull/264#issue-1464846901 @cha0sg0d! One last thought: could we add some NatSpec comments to SystemStorage? The comments get parsed and put on the mud docs website automatically once this gets merged. And here we could also add a notice for developers that this library expects to be initialized before being used (which is done by default in systems).

Other than that everything looks great and I'm down to merge as soon as we have some natspec comments

Thanks for reviewing @holic and thanks for the detailed and elaborate context in #264 (comment) @cha0sg0d! One last thought: could we add some NatSpec comments to SystemStorage? The comments get parsed and put on the mud docs website automatically once this gets merged. And here we could also add a notice for developers that this library expects to be initialized before being used (which is done by default in systems).
Other than that everything looks great and I'm down to merge as soon as we have some NatSpec comments. 🎉

Ok, lmk if this is good!


How to upload with a tag and reuse it later to download?

We added a feature to add tags (labels to files uploaded). I would like to document how this feature works. How do I upload a file to Gorjun providing a tag, and use that to retrieve it? Please show me the mechanics of this with curl calls.
My specific use case is to upload a version of a file and use the tag for the version. This way the file name in Gorjun stays the same while I can still access older versions of the file using this version tag.

Gorjun supports tags only for templates.

Gorjun supports tags only for templates.

Ok, can you please show how it can be used?

Why can't we use this on any artifact type?

You can check curl calls here https://github.com/subutai-io/gorjun/wiki/v1#kurjunresttemplatetag

@emli show me how in a command sequence with curl:

I can upload 3 different files (different md5 etc) but using same name

foo.tgz with tag 1.0
foo.tgz with tag 1.1
foo.tgz with tag 2.0

show how i can get these files back from Gorjun by specifying name and tag value

curl -Ftags=1.0 -Ftoken=$TOKEN -Fid=982e3fc0-820f-48ee-a8c1-32254f80445a "$URL/template/tag"

curl -Ftags=1.1 -Ftoken=$TOKEN -Fid=2862aa2f-b10b-4368-84a9-e09f102f149e "$URL/template/tag"

curl -Ftags=2.0 -Ftoken=$TOKEN -Fid=ae7d01d7-61e5-45c1-b3ad-399f7488d66e "$URL/template/tag"
By the following links you can see tags.

https://devcdn.subut.ai:8338/kurjun/rest/template/info?id=982e3fc0-820f-48ee-a8c1-32254f80445a

https://devcdn.subut.ai:8338/kurjun/rest/template/info?id=2862aa2f-b10b-4368-84a9-e09f102f149e

https://devcdn.subut.ai:8338/kurjun/rest/template/info?id=ae7d01d7-61e5-45c1-b3ad-399f7488d66e

We can get files by name and id of template. By tag not implemented

How about by name and by version?

By name and by version also not implemented, currently implemented only by name and id

I can query by name to get a list of ids right?
Then I can select the id that has a version or tag I am looking for right?
Then I can use that to download the artifact correct?

Yes, for example this request https://cdn.subut.ai:8338/kurjun/rest/template/info?name=ubuntu
returns ubuntu14 and ubuntu16
Yes, response contains json array with version and tags if any
Yes, download can be be done then with this request https://cdn.subut.ai:8338/kurjun/rest/template/download?id=c0d9f79ca76a7eb7e9f0a4f8ed522585


Remove the '3' from OpenLayers

This pull request removes the "3" from OpenLayers, so we can transition to semantic versioning if we want to.

+1 for semver.

which also means anyone with a clone needs to update their remote

which also means anyone with a clone needs to update their remote

GitHub has a redirect, so ol3 will continue to work.

Looks good please merge.


PVC fill up scenario improvement

Adding new function to remove temp file in case of failure

Can one of the admins verify this patch?

Hi @chaitanyaenr @yogananth-subramanian pinging you because I can not add you as reviewers of this PR.

@chaitanyaenr @yogananth-subramanian can we merge it now?


[Snyk] Upgrade amqplib from 0.10.2 to 0.10.3

This PR was automatically created by Snyk using the credentials of a real user.Snyk has created this PR to upgrade amqplib from 0.10.2 to 0.10.3.
:information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.

The recommended version is 1 version ahead of your current version.
The recommended version was released a year ago, on 2022-09-01.

Release notes

Package name: amqplib

0.10.3 - 2022-09-010.10.3

0.10.2 - 2022-08-070.10.2

    from amqplib GitHub release notes

Commit messages

Package name: amqplib

7cba4c2 0.10.3
c0f9a59 Update bitsyntax
557aa7c Use @ acuminous/bitsytnax fork
3de60ea Update bug_report.md
4a66bc0 Update bug_report.md
97de17a Experiment with issue templates

Compare

Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.
For more information:
🧐 View latest project report
🛠 Adjust upgrade PR settings
🔕 Ignore this dependency or unsubscribe from future upgrade PRs

@aborovsky, kindly remove any automation from your personal Synk account.


Feature Request: Lineup fill method for Max_Exposure

Would it be possible to add an option to check max_exposure as each lineup is generated rather than for the full group?
Let's say there are only two players at a position that both have the same salary but different point projections, and max_exposure set to 50% for both.  Currently if 10 lineups are generated the first 5 would have the higher ranked player.  With this option, you'd have the higher ranked player in every other lineup, since the lower ranked player would get selected as soon as the lineup pool has >50% exposure to the first player, rather than meeting the requirement at the end of generating the lineups.

It's make sense, but it's problem that optimizer generates each lineup separately, and on each step I setup a new solver with new set of constraints and it returns most optimal lineup, it's how ILP works and I can't change it. It will be possible if we represent generating of many lineups as one task for solver but it much harder and I'm not sure that it will work correctly with existing optimizer rules. I'll  discover this issue later.

@kpm1988, The resulting lineups will be a bit worse than those currently generated. Worse in the sum of projections.


Regenerate phishingprotection client

This PR was generated using Autosynth. :rainbow:
Here's the log from Synthtool:
synthtool > Executing /tmpfs/src/git/autosynth/working_repo/google-cloud-clients/google-cloud-phishingprotection/synth.py.
synthtool > Ensuring dependencies.
synthtool > Pulling artman image.
latest: Pulling from googleapis/artman
Digest: sha256:d3df563538225ac6caac45d8ad86499500211d1bcb2536955a6dbda15e1b368e
Status: Image is up to date for googleapis/artman:latest
synthtool > Cloning googleapis.
synthtool > Running generator for google/cloud/phishingprotection/artman_phishingprotection_v1beta1.yaml.
synthtool > Generated code into /home/kbuilder/.cache/synthtool/googleapis/artman-genfiles/java.
synthtool > Running java formatter on 10 files
synthtool > Running java formatter on 1 files
synthtool > Running java formatter on 6 files
synthtool > Cleaned up 1 temporary directories.
synthtool > Wrote metadata to synth.metadata.

Combined into a single pull request #5122


Fixed typo 'JavScript'

No worries. You had no way of knowing that we use the dev branch for updates.
It looks like your commit and PR includes another file (trex_release_notes.md). I'm not sure why that is showing up. I think I can delete it from the PR.

@jakkyn  I went ahead and fixed the errors you caught directly in the dev branch.
That seemed easier than asking you to rebase or create a new PR.  Looks like that is the fix when old commits show up in the PR.  https://stackoverflow.com/questions/16306012/github-pull-request-showing-commits-that-are-already-in-target-branch.


Add image to ghcr.io repository

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
docker hub pull limits have been added. it would be nice to have ghcr.io as alternative registry to pull from
Describe the solution you'd like
A clear and concise description of what you want to happen.
add steps to CI releases to push image to ghcr.io as well as docker hub

Ticket update by Bala Natarajan<EMAIL_ADDRESS>Hi
Thanks for this query, There is an option to configure custom registry from
UI. kindly refer https://documentation.portainer.io/v2.0/registries/connect/
and let us know

As Bala states, this is possible with the custom registry. I have just tested this myself and it works perfectly.

Just a note, make sure to use your github personal access token for the password... not your standard username and password.

Sorry, to clarify, I was requesting a portainer image on ghcr so you can docker pull ghcr.io/portainer/portainer-ce

Ah ok.. at this stage we are not looking to move our repo's away from Docker Hub... nothing stopping you keeping a cache of our image in your own ghcr repo thouugh.

Ticket update by Anthony McMahon<EMAIL_ADDRESS>Closing ticket as confirmed feature request. Tracked in Github

Ticket update by Anthony McMahon<EMAIL_ADDRESS>Closing ticket as confirmed feature request. Tracked in Github

should i close this? doesn't seem to be happening so just wanted to clean up stale issues

I'll check with the team, but I don't think this is a priority at this stage.


Route observers stopped observing

I have had a weird experience over the past few days. I have updated and made too many changes to know for certain that it's an issue with most recent Flutter or Dart SDK, but I am posting here mostly to see if anyone else experienced it.
Symptom #1: The /#/ returned to the path for web views, even though no change was made to the call to QR.setUrlStrategy(); or the module that it resides in, which has been stable code for some time.
Symptom #2: My route observers stopped firing, with no error or event. Per the issue I just commented on, I am using a GetX service and observers on the route push/pop to set the page title (among other important things) and like Thursday or Friday the route observer just stopped firing. I was working on one specific page which is of course unaffected so I didn't notice for a while that it was an issue which is making it hard to point to exactly the problem.
Sitting down now to dive into troubleshooting. If I find something related to the router I'll send a PR, but the main reason for the issue is - has anyone noticed the above symptoms relative to updating to the latest Flutter or Dart SDK's in VSCode?
PS F:\ElectraPort\project_repos\client-apps\UnityUniClient> flutter doctor -v
[√] Flutter (Channel stable, 3.7.3, on Microsoft Windows [Version 10.0.22621.1105], locale en-US)
    • Flutter version 3.7.3 on channel stable at C:\src\flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision<PHONE_NUMBER> (10 days ago), 2023-02-08 15:46:04 -0800
    • Engine revision 248290d6d5
    • Dart version 2.19.2
    • DevTools version 2.20.1

[√] Windows Version (Installed version of Windows is version 10 or higher)

[√] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1)
    • Android SDK at C:\Users\qkram\AppData\Local\Android\sdk
    • Platform android-33, build-tools 32.1.0-rc1
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 11.0.12+7-b1504.28-7817840)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

[√] Visual Studio - develop for Windows (Visual Studio Build Tools 2019 16.11.16)
    • Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools
    • Visual Studio Build Tools 2019 version 16.11.32602.291
    • Windows 10 SDK version 10.0.22621.0

[√] Android Studio (version 2021.2)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+7-b1504.28-7817840)

[√] VS Code (version 1.75.1)
    • VS Code at C:\Users\qkram\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.58.0

[√] Connected device (3 available)
    • Windows (desktop) • windows • windows-x64    • Microsoft Windows [Version 10.0.22621.1105]
    • Chrome (web)      • chrome  • web-javascript • Google Chrome 109.0.5414.120
    • Edge (web)        • edge    • web-javascript • Microsoft Edge 109.0.1518.78

[√] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

Whoa, for future readers, I was in the middle of a websockets implementation with a new server and for a few days the client was loading with a half-hung websocket that I can only speculate was interfering with the main event loop somehow...once I got the websocket working reliably, this resolved itself along with it. If you get these symptoms, look for a stream/subscription problem somewhere else causing issues.


add hand pose tracking with hand model

this adds a new .gdns api ovr_hand_tracking that allows to query the
hand pose from the VrApi when hand tracking is enabled. It also includes
a left and right hand rigged model and example code on how to map the
tracked hand pose from the API to the hand mesh. The example code is
part of the example_scenes.
This PR contains only the very basics of hand tracking. I would like to use this PR to discuss if the overall architecture is fitting the intended design of the godot_oculus_mobile plugin.
From my perspective it is already useful in the current state but there are some missing things like collision capsules, tracking confidence levels and exposing the pinch gestures for example.

There also needs to be a way to set the required permissions in the AndroidManifest.xml.

Thanks a lot for the CR @m4gr3d; I addressed all of them in the last commit (except the wrapper question). I'll wait and see what else comes up and what @BastiaanOlij has to say before I squash the commits.


[proposal] SD-jwt integration

Is your feature request related to a problem? Please describe.
The SD-JWT is used in the ARF and gets a lot of attention by EU projects. Main key points are the capability of selective disclosure AND being built on the widely adopted format JWT.
Describe the solution you'd like
We should be able to use some of the existing libraries to create sd-jwts and create a wrapper to use them in Veramo.
Describe alternatives you've considered
Right now I see no other approach using selective disclosure with Veramo (maybe with micro credentials where each credential only includes one value)
Additional context
We need to challenge how the existing selective disclosure approach can be used or even becomes a problem when integrating sd-jwts.

I think using this library as a base dependency should be fine: https://github.com/transmute-industries/vc-jwt-sd I would not suggest to implement the logic again in an own package.

Did I read correctly you are working on this @cre8 using the library created by Berend? https://github.com/berendsliedrecht/sd-jwt-ts
Reason I am asking is that work supporting sd-jwt is also landing in our lower level libraries. Which is based upon some future seperation of libraries from the above library. Meaning we do not have to depend on the full library. However for us at Sphereon the missing component would obviously be the integration into Veramo.
So if you are working on that happy to help or have a look at it, given we for sure will need it soon as well.

Hey @nklomp ,
I only had some free time for a quick PoC like:
import { KeyLike, createHash, getRandomValues, verify } from 'node:crypto';
import {
  SaltGenerator,
  HasherAlgorithm,
  HasherAndAlgorithm,
  SdJwt,
  SignatureAndEncryptionAlgorithm,
  DisclosureFrame,
  Verifier,
} from '@sd-jwt/core';
import { TAgent } from '@veramo/core';
import { AgentType } from './agent';
import { getDefaultDID, getDefaultKid } from '@ssi/agent';
import { base64url, importJWK } from 'jose';
import { bytesToBase64url, base58ToBytes } from '@veramo/utils';
import { VerificationMethod } from 'did-resolver';

/**
 * Hasher and algorithm that will be used to hash the disclosures.
 */
export const hasherAndAlgorithm: HasherAndAlgorithm = {
  hasher: (input: string) => createHash('sha256').update(input).digest(),
  algorithm: HasherAlgorithm.Sha256,
};

/**
 * Creates a salt that can be used for the creation process.
 * @returns
 */
const saltGenerator: SaltGenerator = () =>
  getRandomValues(Buffer.alloc(16)).toString('base64url');

/**
 * Header of the JWT
 */
type JWTHeader = {
  alg?: SignatureAndEncryptionAlgorithm.EdDSA;
  typ?: 'sd-jwt';
};

/**
 * The JWT that is used to create the presentation.
 */
export class SdJwtVerifier {
  /**
   * Creates a new instance of the SdJwtVerifier.
   * @param agent
   */
  constructor(private agent: TAgent<AgentType>) {}

  /**
   * Verifies the presentation.
   * @param presentation
   * @param claims
   * @returns
   */
  async verify<Payload>(
    presentation: string,
    //using | string will ignore the auto completion. But when we remove the string option, we need to add the Payload attribute, but will get not suggestions.
    claims: Array<keyof Payload | string>
  ) {
    const sdJwtVerifier =
      SdJwt.fromCompact(presentation).withHasher(hasherAndAlgorithm);

    const verifyCb: Verifier = async ({ header, message, signature }) => {
      //get the public key from the issuer
      const didDocument = await this.agent
        .resolveDid({
          didUrl: sdJwtVerifier.payload.iss as string,
        })
        .then((res) => res.didDocument!);
      const key = didDocument.verificationMethod!.find(
        (vm) => vm.id === sdJwtVerifier.payload.iss
      ) as VerificationMethod;

      const jwk: KeyLike = (await importJWK({
        kty: 'OKP',
        crv: 'Ed25519',
        x: bytesToBase64url(base58ToBytes(key.publicKeyBase58!)),
      })) as KeyLike;

      if (header.alg !== SignatureAndEncryptionAlgorithm.EdDSA) {
        throw new Error('only EdDSA is supported');
      }
      return verify(null, Buffer.from(message), jwk, signature);
    };

    // list the values from the presentation
    return sdJwtVerifier
      .verify(verifyCb, claims as string[])
      .then((res) => res.isValid);
  }
}

/**
 * Creates a JWT that can be used to create a presentation.
 */
export class SdJWTCreator {
  keyId: string;

  /**
   * Creates a new instance of the SdJWTCreator.
   * @param agent
   * @param agentConfig
   * @returns
   */
  static async create(agent: TAgent<AgentType>): Promise<SdJWTCreator> {
    const did = await getDefaultDID(agent);
    if (!did) throw Error('No default DID found');
    const keyRef = await getDefaultKid(agent, { did });
    if (!keyRef) throw Error('No default key found');
    return new SdJWTCreator(agent, keyRef, did);
  }

  /**
   * Creates a new instance of the SdJWTCreator.
   * @param agent
   * @param keyRef
   * @param did
   */
  constructor(
    private agent: TAgent<AgentType>,
    private keyRef: string,
    private did: string
  ) {
    this.keyId = this.keyRef;
  }

  /**
   * Gets the signer that will be used to sign the JWT.
   * @param input
   * @param header
   * @returns
   */
  private async getSigner(input: string, header: JWTHeader): Promise<Buffer> {
    if (header.alg !== SignatureAndEncryptionAlgorithm.EdDSA) {
      throw new Error('only EdDSA is supported');
    }
    const signature = await this.agent.keyManagerSign({
      keyRef: this.keyRef,
      data: input,
    });
    return Buffer.from(base64url.decode(signature));
  }

  /**
   * Creates a new JWT.
   * @param payload
   * @param disclosureFrame
   * @returns
   */
  create<Payload extends Record<string, unknown>>(
    payload: Payload,
    sub: string,
    disclosureFrame: DisclosureFrame<Payload>
  ): SdJwt<JWTHeader, Payload> {
    return new SdJwt<JWTHeader, Payload>(
      {
        header: {
          alg: SignatureAndEncryptionAlgorithm.EdDSA,
          typ: 'sd-jwt',
        },
        payload: {
          ...payload,
          iss: `${this.did}#${this.keyId}`,
          sub,
          iat: new Date().getTime(),
        },
      },
      {
        saltGenerator,
        signer: this.getSigner.bind(this),
        hasherAndAlgorithm,
        disclosureFrame,
      }
    );
  }
}

I don't think I will have time in the near future to implement a version that is worth to be published in case of quality and that integrates fully in veramo in parallel to the w3c stuff on my own ;) But I am happy to support any work sphereon is on!

Thanks. That does look like a start. Basically removing the dep on node crypto and then moving them to one or two agent plugins would provide a nice start.
Will have a look how to go about it next week, given we do need to start implementing it.
@nickreynolds @mirceanis any insights, objections?

No objections from me.
I'm glad the work is starting with a discussion so that we can avoid duplication and arrive at a good implementation faster.
The draft implementation is a great start. I agree with @nklomp that we shouldn't depend on node:crypto, and for similar reasons avoid Buffer
I'm happy to support this work in any way that is needed, even help publish it under @veramo-community if you think it's too early for core @veramo
Also, maybe we can finally replace the uPort-era selective-disclosure package with a proper sd-jwt plugin 🚀

Yeah, I think it makes sense to think about it a bit. We are also working on an Mdoc/MDL implementation. Whether that should be supported in the future of course needs to be discussed, but the selective disclosure in Mdocs is very similar to SD-JWT, so it might make sense to abstract some concepts a bit more. Probably it makes sense to start out in @veramo-community before we can stabelize the API a bit

it might make sense to abstract some concepts a bit more.

I agree, and I'll be looking for your input into a good enough abstraction for these.

Probably it makes sense to start out in @veramo-community before we can stabelize the API a bit

I forgot to mention that we also have the option to use an @alpha specifier on the new plugin, to flag it.
I know we've been overusing the @beta tag but then treating it as @public when counting breaking changes anyway.
As this framework keeps growing, I'd like us to agree on a stability/maturity specifier for various features.

@mirceanis when adding sd-jwt and maybe also mdoc, I would love to remove the current selective disclosure approach. It is not aligned with the current technologies used out there and could mislead developers to use it. To not break any current systems, I suggest to add a deprecated warning to the package and the functions to inform the users that there are better ways to go now.
Also we should keep in mind for sd-jwt, that the usage of a did is the issuer is not required. The HAIP protocol used by Germany is using a X509 chain or a reference to a public key under .well-known. For the first version I would be fine with did only, but we should keep that in mind for the future.

@cre8 agreed. I'll add a deprecated warning for the next release.

Also we should keep in mind for sd-jwt, that the usage of a did is the issuer is not required.

This is true for credentials as well and I'd love to discuss how to handle cases like this in general.
On the issuer side it's not very difficult as it's mostly just about adding an issuer string somewhere, but on the verifier side it gets more complicated.
Let's discuss this in a different location, though

Glad to see progress with this initiative.
Here's a Node.js (browser will follow) plugin implementation based on the underlying SD-JWT library I wrote as well:
https://github.com/Eengineer1/veramo-sd-jwt
It's tied 1-1 to the base frame implementation of credential-w3c, in an easy way to ultimately natively support within.
Regarding dependencies, there's no direct import of Node.js crypto, being the sole engine specific direct dependency, given an extensible underlying crypto provider written with already existing Veramo crypto primitives.

Hi guys, I want to contribute sd-jwt integration for Veramo.
I'm currently developing the SD JWT project at the Open Wallet Foundation. Here is the link. (https://github.com/openwallet-foundation-labs/sd-jwt-js)
Welcome any feedback and evaluation for the contribution.
Also, reading from the thread, I’ve realized that you prefer a SD JWT project that doesn't have node crypto, jose, or broswer dependencies.
So I'm considering to implement sd-jwt-js in that direction.
Will it be better to contribute with these conditions are included in our project?

Hey all, I do not have the time right now to continue the work of the veramo project. I am fine when it get migrated from https://github.com/cre8/sd-jwt-veramo the to official repo.
By doing this, I think it's also important to update the selective disclosure documentation since this approach is not aligned with it.

Thank you @cre8.
In fact, I'm migrating your project in #1358. I'm currently try to add features in Veramo react playground as @nickreynolds requested.
If you suggest a different approach, please let me know. I'll proceed the way you say :)

@lukasjhan sounds good to me. Reach out when you need any help :)

Thank you :)


Auto-detect missing reflection for attributes used in CSS

When we use a property of the component as a selector in its CSS, that property needs to be reflected. Otherwise we may have issues like #295
I imagine that can be checked with a linter rule or something. If it finds a selector like :host(*[{attrName}]*) and if that attribute doesn't have reflect: true then it can rise an error.

Same problem reported in #378

Again we had another issue related with this #719


Add functions [MotrpacRatTraining6mo::cluster_pathway_enrichment()] and [MotrpacRatTraining6mo::run_fella()]

Reminder:

Not sure how to fix the first line, but for the second line, cluster_pathway_enrichment and run_fella are functions we plan to add but have not yet added to MotrpacRatTraining6mo. Can you replace them with [MotrpacRatTraining6mo::cluster_pathway_enrichment()] and [MotrpacRatTraining6mo::run_fella()] and add an issue to MotrpacRatTraining6mo to add these functions and assign me?

The issue will go away as soon as you add the functions to the package

These functions should be added to https://github.com/MoTrPAC/MotrpacRatTraining6mo, not this package. I'll reference this issue there.

Added in https://github.com/MoTrPAC/MotrpacRatTraining6mo/pull/19. I will close this issue once the MotrpacRatTraining6mo package is public

resolved by #24


TestReconcile_ExplicitDefaultSA flakiness fix 🍂

Changes

This tries to fix the test flakiness by making sure the informers for
serviceaccounts are up-to-date when we execute the tests. Otherwise we
may run into failure because the serviceaccount is not found.
Signed-off-by: Vincent Demeester<EMAIL_ADDRESS>/cc @pritidesai @bobcatfish
Submitter Checklist
These are the criteria that every PR should meet, please check them off as you
review them:

[x] Includes tests (if functionality changed/added)
[ ] Includes docs (if user facing)
[x] Commit messages follow commit message best practices
[ ] Release notes block has been filled in or deleted (only if no user facing changes)

See the contribution guide for more details.
Double check this list of stuff that's easy to miss:

If you are adding a new binary/image to the cmd dir, please update
the release Task to build and release this image.

Reviewer Notes
If API changes are included, additive changes must be approved by at least two OWNERS and backwards incompatible changes must be approved by more than 50% of the OWNERS, and they must first be added in a backwards compatible way.
/kind misc
/area testing
/release-note-none

/release-note-none

/release-note-none

sounds good, thanks @vdemeester lets go with this. Next we will be updating rest of the unit tests in taskrun_test.go and add the same informer update in pipelinerun_test.go
/approve

/lgtm

Part of #2185 - might need to make same change for other tests as well?


Android: Saved story tags

A user brought up that Android allows you to read by saved story tags but not yet save stories with tags. So lets build that. Check out the iOS implementation, but it's basically a popover with a selectable list with counts.
https://forum.newsblur.com/t/android-article-save-issues/8631

@samuelclay I need some guidance on saving/unsaving the story tags with the backend.
Let's say that I have a saved story with 2 tags, test1 and test2. The tag test1 has count = 3 and the tag test2 has count = 1 (the story in question).
In the saved story tags dialog, I decide to remove test1 from this story and add test3 to it. How do I make this update on the backend? I'm using /reader/mark_story_hash_as_starred/ to send all of the story's user_tags but it looks like it's not overriding all the tags. The tag test1 is still attached to the story but its count is decreased by 1 as expected. Tag test3 does get attached correctly and shows up after remote sync.
What would be the correct steps to follow?

One thing that came to mind is that user_tags[] is an array and there may be a ios/web/android difference here.
This is how iOS send user_tags: https://github.com/samuelclay/NewsBlur/blob/dashboard3/clients/ios/Classes/StoriesCollection.m#L761-L767
And here's how the backend expects user_tags (and idempotently sets them as a complete set): https://github.com/samuelclay/NewsBlur/blob/dashboard3/apps/reader/views.py#L2506-L2512

TODO: Allow user to add tags when the story is saved via the Save button on the story reading view.

How close is this?

The TODO item is still pending and I can focus on it now that the UI changes are done. I should have it ready this week.

I've found this change confusing and even a bit annoying.

I was not aware of this tagging feature so at first I thought the Save button was broken and triggering some other feature which I did not want - seeing a dialog "Saved Tags" and the action "Save Tags" creates a disconnect from "Save Story".

Once I had the time to learn more and understand the feature I was a bit frustrated that the action which I could previously perform in one tap now requires two taps and finger travel.

Deciding I really had no need for this tagging feature I went hunting for a Preference to disable it and found none.

Please give this a preference or make it less intrusive by having the button save the story without tags and then presenting a way to add tags which can be ignored.
One source of inspiration that I think works really well is the Pocket app's Quick Save Actions: https://blog.getpocket.com/2013/12/pocket-5-1-for-android-introduces-a-new-way-to-tag-share-when-you-save/

What about a long tap to save without specifying a tag? Also, we should change the “Save Tags” button to just “Save Story”.

I'm willing to give long tap a try.
However, it is not my ideal solution. I find long tap not easily discoverable by users and it seems a less intuitive for quick save.
I'm struggling to think of examples where long tap is used as a shortcut to accomplish less or do it quicker. It seems to me the most common use in Android is showing what an icon button does, followed by context menus or more actions.

A possible solution would be to save story on single tap and open custom saved story tags dialog/popup on long press.

Yeah I agree that long tap is undiscoverable. What about making the dialog half the screen height, so the user can just tap on half of the screen to dismiss, like a popover? This is what we do on web and iOS.

I'm unsure what that would look like on Android - could we get a screenshot from iOS?
On the web I drive Newsblur almost entirely from the keyboard and I'm typically just hammering 's' then 'j' to move to the next unread item.  It was only in the past week that I even noticed that it shows a Save Tag form. I like that design and if something like that could be done on Android it would be nice. I'm picturing the Save button saves the story and opens a collapsed section below the story containing the Save Tag form and a Save Tag button.
The other thought I've had is a kind of split button like (excuse the crude ASCII art): [🕓 Save |  ➕]
So the left portion 'Save' would be the old way and the right '+' would trigger the  new dialog. Unfortunately, I haven't been able to find a good example of this out in the wild so it's probably a bad idea. The closest I've been able to find on Android is the Material Design toggle button:

But it would be a bit of an abuse to make it work as I'm thinking.


PERF: Make Jacobian variable in AdvancedTransform thread-local (2nd try)

Declared the local Jacobian variable within AdvancedTransform::EvaluateJacobianWithImageGradientProduct thread-local, as its repetitive creation and destruction appeared to be a major performance bottleneck.
The number of elements of the Jacobian variable depends on the specific (derived) run-time type of the transform:
4 elements with AdvancedTranslationTransform<double,2>
6 elements with AdvancedTranslationTransform<double,3>
6 elements with EulerTransform<double,2>
18 elements with EulerTransform<double,3>
36 elements with AdvancedMatrixOffsetTransformBase<double,3,3>

With this commit, the GoogleTest unit test itkElastixRegistrationMethod.EulerDiscRotation2D appears to run almost twice as fast (from ~2.5 seconds to ~1.5 second, on GitHub Actions Windows-2109)

Discussed at the internal weekly sprint.


node_modules exposed

Please .gitignore the file

Might sound dumb, but I actually completely forgot to do that originally. Thanks for pointing it out :)


Missing: image map creation

There is a huge gap in all of these docs around the step of creating the region map for each image. This is not the way that these are done or coded for real. You would use a tool like LabelImg https://github.com/tzutalin/labelImg    While this doc is technically correct it is misleading and showing people the wrong way to do custom object detection. This creates the official docs and then blogs for the right way making the docs not as valuable.

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

ID: d88c9656-681e-7f72-3ac7-8a1720356353
Version Independent ID: f2b8fd62-cfa7-b8a7-f257-f83bea5fc7a2
Content: Quickstart: Create an object detection project with the Custom Vision SDK for Java
Content Source: articles/cognitive-services/Custom-Vision-Service/java-tutorial-od.md
Service: cognitive-services
GitHub Login: @areddish
Microsoft Alias: areddish

Hello @PaulStubbs
Thank you for your feedback! We have assigned this issue to the author to review further and take the right course of action.

This item has been added to our backlog. #please-close


Windows/Vulkan build fix

I've tested these changes on a clean MSYS2 install.
The source build now requires the Vulkan SDK Core to be preinstalled before starting the MSYS2 environment. This ensures the VK_SDK_PATH and VULKAN_SDK environment variables are detected by the include(FindVulkan) step from CMakeLists.txt.
Right now the build fails with:
C:/msys64/home/adi/scopehal-apps/lib/scopehal/AcceleratorBuffer.h: In member function 'void AcceleratorBuffer<T>::FreeCpuPointer(T*, MemoryType, size_t)':
C:/msys64/home/adi/scopehal-apps/lib/scopehal/AcceleratorBuffer.h:585:39: error: 'm_tempFileHandle' was not declared in this scope
  585 |                                 close(m_tempFileHandle);
      |                                       ^~~~~~~~~~~~~~~~

To be continued...

m_tempFileHandle is for memory mapped files on Linux and should be gated by a #ifndef _WIN32. If I failed to do that, it's on me. Don't touch that code, I have a bunch of un-pushed changes to it and will fix as part of that later today. For your own testing purposes you can just comment out that line, AcceleratorBuffer is not yet used for anything other than a unit test.
We need to figure out how to get the Vulkan SDK into the CI environment so that the GitHub Actions builder can use it. Any ideas there?

Thanks for the tip. After adding the _WIN32 guard, the build finishes with success:
[1/7] Copying rendering kernels...
[2/7] Copying styles...
[3/7] Copying filter kernels...
[4/7] Copying gradients...
[5/7] Copying shaders...
[6/7] Copying icons...
[6/7] Install the project...
==> Tidying install...
  -> Removing libtool files...
  -> Purging unwanted files...
  -> Stripping unneeded symbols from binaries and libraries...
  -> Compressing man and info pages...
==> Checking for packaging issues...
==> Creating package "mingw-w64-x86_64-scopehal-apps"...
  -> Generating .PKGINFO file...
  -> Generating .BUILDINFO file...
  -> Generating .MTREE file...
  -> Compressing package...
==> Finished making: mingw-w64-scopehal-apps 0.0.0.r1.g3e91713-1 (Tue Aug 16 01:53:15 2022)

Regarding the CI, the Vulkan SDK setup must be run from an admin session as documented here in the Unattended Installation section. The command
VulkanSDK-<IP_ADDRESS>-Installer.exe --accept-licenses --default-answer --confirm-command install

successfully installs the SDK unless the target directory (C:/VulkanSDK/<IP_ADDRESS> in my case) already exists. You can override it with the --root parameter.

Nice! Can you try to modify the CI script (in the .github directory) and add commands to download and install the SDK? The CI builder is running with UAC disabled in an account that has admin access.
Also, can you please send a companion PR to scopehal-docs adding the necessary install commands to the "Getting Started" section?


RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cpu and cuda:0! (when checking argument for argument mat1 in method wrapper_CUDA_addmm

I have this error, when i click on button Convert Unet - RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cpu and cuda:0! (when checking argument for argument mat1 in method wrapper_CUDA_addmm
Can you help me to solve this please ?

Hello, How to solve this?

I don't quite remember but I think I solved it by removing the space between --xformers and the equal sign
set COMMANDLINE_ARGS=--xformers
See if that works for you.

I don't quite remember but I think I solved it by removing the space between --xformers and the equal sign set COMMANDLINE_ARGS=--xformers
See if that works for you.

Didn't do it for me sadly.


Link incompatibilities with GCC 6.2

Hi
First, thank you for this package!
I'm trying to use this conan package on a docker with Ubuntu 16:4 and GCC 6.2. When boost is built, everything seems fine. However, when I try to link my program against it, I get some errors like:
/root/.conan/data/Boost/1.60.0/lasote/stable/package/d5ed0b10b60cabf4877c122e848e0a00353f7342
  /include/boost/timer/timer.hpp:68: undefined reference to
  `boost::timer::format(boost::timer::cpu_times const&, short,
  std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'

Changing my compilation settings from my program to include/exclude -std=gnu++0x doesn't have any effect on the compilation.
Trying to find out the root-cause of this, I found two things:

GCC 6.2 changed default C++ standard from C++98 to C++14 (https://gcc.gnu.org/gcc-6/changes.html)

Apparently this package disables C++11 when settings.compiler.libcxx is set to libc++. Here is the corresponding code from Boost's conanfile.py:
     if str(self.settings.compiler.libcxx) == "libstdc++":
         flags.append("define=_GLIBCXX_USE_CXX11_ABI=0")
     elif str(self.settings.compiler.libcxx) == "libstdc++11":
         flags.append("define=_GLIBCXX_USE_CXX11_ABI=1")

In my opinion, this code need to be adapted to check for the new defaults of GCC 6.2.
Best regards,
LucTeo

Hi @lucteo !
That's true, the package disables C++11 when your default setting "settings.compiler.libcxx"  is "libstdc++". But I don't see the problem with that, I think it is correct.
Maybe you have to change your setting default in ~/conan.conf to  libstdc++11, because it is the default for your compiler. Does it make sense? Maybe I'm not understanding right.
Thanks!
Luis


Full page screenshot fails when defaultViewport is null

Steps to reproduce
Tell us about your environment:

Puppeteer version: 1.7.0
Platform / OS version: Windows 7
URLs (if applicable):
Node.js version: v9.10.1

What steps will reproduce the problem?
const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({ headless: false, defaultViewport: null });
    const page = await browser.newPage();
    await page.goto('https://www.google.com/');
    await page.screenshot({ path: 'example.png', fullPage: true });
    await browser.close();
})();

What is the expected result?
No error and screenshot is saved.
What happens instead?
UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'isMobile' of null

Trying this gave me a different error:
fullPage screenshots do not work without first setting viewport. (source)
Is this still considered a bug?

@yanivefraim yeah; viewport should not be necessary to do a full-page screenshot.


VGO support.

Hi!
Are you planning to add VGO support?

@qiangxue What about VGO?

Is it possiple to change releases tags according to symver?

Hi! Any plans on this?

Hi! Ping...

Closing as it has been implemented.

Thanks! Super!


Diacritics misalignment on 11.2.0

Describe the bug
When displaying strings containing diacritics, like the very common "é" in French the accent aligns with the surrounding text, not the character itself, which goes pushed underneath in a quite weird fashion.

To Reproduce
Just load a text from an .xml resource and display it in the UI
Expected behavior
normal appropriated alignment of the letters, with diacritics appearing where they should, suspended above them
Avalonia version
11.2.0
OS
macOS
Additional context
No response

More details: the bug is as well present on iOS, which makes quite sense.
At the same time numbers have a wrong horizontal alignment as well: with "large" numbers is ok, for instance: 2,8 will look ok but using thin shaped ones like 1 or 7 will cause the text to appear like "1 ,3" or "7 ,8"


Add 'Export App Bundle' to Android Export Options

This is a forward port of #40685

Tagging @m4gr3d @akien-mga for visibility.

Thanks!


Edit non-members, minus otherFields

Let's wait @dwiajik to finish the problem about soft delete and datatable

Done kaisar @haydarai

Merge this PR?

I'll make a final check for this in 15 minutes and I'll merge it if everything's okay.


Add MD linting, fix errors

Signed-off-by: Daniel Farrell<EMAIL_ADDRESS>

Any ideas why the new GHA isn't running?

Any ideas why the new GHA isn't running?

Just did a null-amend, pushed again and it's running. :shrug:


[plugin-scaffolder-backend] breaks on try generate in a new project

When a new project is created using the @backstage/create-app, the scaffolder functionality isn't working.
Expected Behavior
The scaffolder should run without errors
Current Behavior
The process is interrupted by a error in console.

Possible Solution
A possible solution is import winston as namespace, like the #1281
I will try that and open a PR if works.
Steps to Reproduce

Run a npx @backstage/create-app
Configure the app frontend to use the @backstage/plugin-scaffolder. Repo example: angeliski/test-backend
3.Start front/backend projects
Add a a template to generate. Example:

curl \
    --location \
    --request POST 'localhost:7000/catalog/locations' \
    --header 'Content-Type: application/json' \
    --data-raw "{\"type\": \"github\", \"target\": \"https://github.com/spotify/cookiecutter-golang/blob/master/template.yaml\"}"

Try create a new project

Context
That bug is breaking the software creation templates feature.

Console logs:
angeliski@angeliski  /usr/workspace/test-backend/packages/backend   master  yarn start
yarn run v1.22.4
$ backstage-cli backend:dev
Build succeeded
FS-related option specified for migration configuration. This resets migrationSource to default FsMigrations
info: Beginning locations refresh {"type":"plugin","plugin":"catalog","service":"backstage","timestamp":"2020-08-08T17:54:59.687Z"}
FS-related option specified for migration configuration. This resets migrationSource to default FsMigrations
info: Visiting 0 locations {"type":"plugin","plugin":"catalog","service":"backstage","timestamp":"2020-08-08T17:54:59.706Z"}
info: Initializing identity API backend {"type":"plugin","plugin":"identity","service":"backstage","timestamp":"2020-08-08T17:54:59.715Z"}
[HPM] Proxy created: /  ->  https://example.com
info: Listening on <IP_ADDRESS>:7000 {"service":"backstage","timestamp":"2020-08-08T17:54:59.729Z"}
info: Beginning locations refresh {"type":"plugin","plugin":"catalog","service":"backstage","timestamp":"2020-08-08T17:55:09.708Z"}
info: Visiting 0 locations {"type":"plugin","plugin":"catalog","service":"backstage","timestamp":"2020-08-08T17:55:09.712Z"}
info: <IP_ADDRESS> - - [08/Aug/2020:17:55:15 +0000] "POST /catalog/locations HTTP/1.1" 201 2302 "-" "curl/7.68.0"
 {"type":"incomingRequest","service":"backstage","timestamp":"2020-08-08T17:55:15.310Z"}
info: <IP_ADDRESS> - - [08/Aug/2020:17:55:17 +0000] "GET /catalog/entities?kind=Template&metadata.name=golang-starter HTTP/1.1" 200 - "http://localhost:3000/create/golang-starter" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0"
 {"type":"incomingRequest","service":"backstage","timestamp":"2020-08-08T17:55:17.791Z"}
info: Beginning locations refresh {"type":"plugin","plugin":"catalog","service":"backstage","timestamp":"2020-08-08T17:55:19.713Z"}
info: Visiting 1 locations {"type":"plugin","plugin":"catalog","service":"backstage","timestamp":"2020-08-08T17:55:19.714Z"}
error: Cannot read property 'combine' of undefined {"type":"errorHandler","service":"backstage","stack":"TypeError: Cannot read property 'combine' of undefined\n    at makeLogStream (webpack-internal:///../../node_modules/@backstage/plugin-scaffolder-backend/dist/index.cjs.js:285:29)\n    at JobProcessor.create (webpack-internal:///../../node_modules/@backstage/plugin-scaffolder-backend/dist/index.cjs.js:306:39)\n    at eval (webpack-internal:///../../node_modules/@backstage/plugin-scaffolder-backend/dist/index.cjs.js:407:30)\n    at handleReturn (/usr/workspace/test-backend/node_modules/express-promise-router/lib/express-promise-router.js:24:27)\n    at /usr/workspace/test-backend/node_modules/express-promise-router/lib/express-promise-router.js:56:9\n    at handleReturn (/usr/workspace/test-backend/node_modules/express-promise-router/lib/express-promise-router.js:24:27)\n    at /usr/workspace/test-backend/node_modules/express-promise-router/lib/express-promise-router.js:56:9\n    at Layer.handle [as handle_request] (/usr/workspace/test-backend/node_modules/express/lib/router/layer.js:95:5)\n    at next (/usr/workspace/test-backend/node_modules/express/lib/router/route.js:137:13)\n    at Route.dispatch (/usr/workspace/test-backend/node_modules/express/lib/router/route.js:112:3)","timestamp":"2020-08-08T17:55:19.966Z"}
info: <IP_ADDRESS> - - [08/Aug/2020:17:55:19 +0000] "POST /scaffolder/v1/jobs HTTP/1.1" 500 - "http://localhost:3000/create/golang-starter" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0"

Your Environment

Environment Info:
System:
OS: Linux 5.4 Ubuntu 20.04.1 LTS (Focal Fossa)
CPU: (8) x64 Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
Binaries:
Node: 12.18.3 - ~/.asdf/installs/nodejs/12.18.3/bin/node
Yarn: 1.22.4 - ~/.asdf/shims/yarn
npm: 6.14.6 - ~/.asdf/installs/nodejs/12.18.3/bin/npm
Browsers:
Chrome: Not Found
Firefox: 79.0
npmPackages:
typescript:  3.9.7

Thank you for the report! Created #1879 to avoid regression.


About  cli parameter not recognize  \r\n

My enviroment is .net and windows XP. in China.
This script is ok
C:\WebCrawler\mondeo\lj_main.js --disk-cache=true --cookies-file="C:\WebCrawler\mondeo\lj_main.cookie"
--user="222"
--pwd="111"
But if show below.Casperjs is fail to use "disk-cache" and "cookies-file" paramenters,though utils.dump(capserjs.cli) contains "disk-cache" and "cookies-file" paramenters.
C:\WebCrawler\mondeo\lj_main.js
--disk-cache=true
--cookies-file="C:\WebCrawler\mondeo\lj_main.cookie"
--user="222"
--pwd="111

Most likely CasperJS should handle normalising those line endings.
Could you provide a minimal working example of your error case?
It could be then added to the test suite and fixed.

As part of a cleanup effort:
Looks to be a stale help request. Assuming you've moved on to better and cooler things.  Please feel free to re-open if this is still an active issue for you and we'll try our best to help out.


Support for building EKS-D in codebuild

Issue #, if available:
https://github.com/aws/eks-distro-internal/issues/269
Description of changes:
PR with the changes required to support EKS-D builds in Codebuild.
Includes three buildspecs, one to build EKS Go for each supported version (projects/golang/go/build/conformanceTests/golangBuildspec.yaml), one to build the builder-base using those built Golang versions (projects/golang/go/build/conformanceTests/builderBaseRebuildBuildspec.yaml), and one to build EKS Distro (projects/golang/go/build/conformanceTests/eksDistroRebuildBuildspec.yaml) using the re-built builder-base image.
The Golang and EKS-D buildspecs use batch builds to run parallel builds for each supported Golang and K8s version. The artifacts from the Golang build (e.g. the RPMs) are aggregated at the end of the build step and all of the built artifacts are supplied to the build base build step, so we end up with a builder-base which has a custom-built version for each supported Golang version. The EKS-D rebuild buildspec runs the EKS-D build and conformance test execution for each supported K8s version, running in the custom builder-base from the previous step.
We also add utility scripts for setting up the ECR credentials helper (required for pushing to ECR), initializing an uninitialized Git repository (which is required as the codepipeline -> Github integration copies the source as a dir structure not as a cloned git repo, and we use git repo actions throughout), other common functionality like retry and the Docker pull retry, and a utility script to set up the Qemu emulator on the codebuild host for ARM builds.
This PR is also dependent on its counterpart in EKS Distro -- https://github.com/aws/eks-distro/pull/1732
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

/test golang-1-16-tooling-presubmit

/lgtm

/test golang-1-16-tooling-presubmit

/approve


Working DNS Server Local to Anvil

Create a working DNS system for querying the location of services hosted within the mesh.  This will provide the foundation for service discovery/registry within the mesh

DNS server implementation created.  Requesting the name of a microservice through dig now yields correct answer results.

For now, only responding with a singular answer, which is prioritized based upon whichever service entry appears first in the catalog.

Closing with Commit 6ee7e3c0bb0dfe4e56406cb15b23d74f09d1b26e


Dropdowns are behind blur cards in Device Page

In Device Page, on clicking any of the buttons that open a dropdown, they are opened behind other cards.

Thanks for the report. The issue is caused by the backdrop-filter (blur) creating a new stacking context for each card. Since this is set on each card individually, the dropdown's z-index will not apply to other cards and they will end up getting drawn on top. This visual language depends heavily on the blur effect which sadly creates issues with these dropdowns :(


WIP: create_perf_json: Support 'FIXED' event codes

This pull request unsets EventCode for FIXED events. Previously for fixed events the EventCode was 0x00. The get() helper used to process JSON attributes drops 0x00 (returns None). Here we add an extra check to also set event_code to None if EventCode is FIXED.
Example FIXED event:
        {
          "EventCode": "FIXED",
          "UMask": "0x01",
          "EventName": "INST_RETIRED.ANY",
          "Counter": "Fixed counter 0",
          "CounterHTOff": "Fixed counter 0",
          <snip>
          "Offcore": "0",
          "Deprecated": "0"
        }

Things to consider: We need to have consistent solution to indicate if counter is FIXED or FREERUN or Programmable.
Currently for SNR for IIO unit we have added Countertype column which indicates it is FREERUN counter. For Fixed counter is there any reason we cannot use CounterType column?  In your above example we have more than one attribute indicating its Fixed counter.
EventCode and Counter and CounterHTOff attributes. Tools can use different fields for consumption. We need to be consistent for data publication and for tools consumption.

Abandoning example WIP pull request.


How is dependency-map used in the ESM and UMD builds?

[Editor: this question was moved here from another thread]
@MartinKolarik:
I briefly checked how moduloze currently works with other formats and I noticed there's a required config option dep-map. I guess it's needed to map require() to UMD globals but I see it's somehow used in ESM processing as well. With an empty map, both ESM and UMD outputs look like I'd expect though. Can you explain briefly why the map is needed to make sure I understand the current approach for UMD/ESM?

In UMD builds, the dependency-map is "required" for several reasons, to map resource URLs to their names:

The name of a resource is used by the browser-global aspect of UMD behavior as the registered global identifier (aka, "the export").

The name of a resource is used by the AMD aspect of UMD behavior to register a module definition by its name (aka "the export"), so that this name can later be used by other modules.

The name of that resource is then used by the AMD aspect of UMD behavior in the list of dependencies passed to an AMD module's definition, so that AMD knows which dependency instance(s) to retrieve from its internal definitions and provide to (aka "import for") this module. That same name is also used as the actual parameter identifier in the outer definition function for a module that needs that dependency.

So, if you require(..) some URL that Moduloze doesn't have a name for (no dependency map, or not listed), Moduloze has to generate a unique name (like Mz8382423923) for it, for it to be used in all those various ways.
If the dependency is never referenced elsewhere in the app by some other name, this auto-generated name is probably not a problem. But it absolutely might "break" your app if you're just assuming that "MyCoolModule" will be able to reference it from somewhere else, but you didn't tell Moduloze that name.
That's the main purpose of the dependency-map.
Secondarily, ESM uses the dependency-map if you're also building the "index" / "rollup" ESM module (the one that imports and re-exports all your modules as a single module). It needs names to use in all its re-exports. Of course, if it used auto-generated names for those, none of your code would know (or be able to predict) those bindings, so it'd be unuseful.

BTW, I definitely think something like this discussion should make its way into the "Conversion Guide" docs. That's an open TODO. :)

I asked about this because if we wanted to integrate this as a feature at jsDelivr, we'd probably want it to be zero-config from the user's perspective. Let's take these two files as an example:
// a.js
const b = require('./b'); // could be also "b", as-in require from node_modules
console.log(b.f());

// b.js
module.exports = {
    f () {
        return 1;
    }
};

If both of these files were run through moduloze (without maps), and loaded as two independent UMD bundles, it wouldn't work right now because of the random names. But I'm wondering if it could, if:

Import names were generated deterministically, based on the import path (probably a resolved relative path with extension).
Export names would be generated in the same way (using relative paths), with the option to override them (to support files loaded from node_modules).

it wouldn't work right now because of the random names.

It internally works, meaning the modules can all reference each other just fine and all auto-execute. But it doesn't externally work, meaning if another non-moduloze-processed part of your app wants to access these resources, they won't have a name to do so.
But that's not Moduloze's fault, it's the fault that you're talking about a packaging format (UMD/AMD/etc) that requires names but you haven't given it names to use. That's a weakness of the module format, not of the tool.

But I'm wondering if it could, if:

I considered implementing some sort of algorithm to name the resources based on the URL, but ultimately decided that the complexity wouldn't be practical, because even those names would still be problematic in that they wouldn't necessarily always be intuitive/predictable. For example, should those identifiers be camelCased, or CapitalFirst or should they be snake_case, etc? So many nuances and variations, whatever I picked and baked in, would be too difficult for people to rely on in their apps.
It would also mean that the moduloze's naming convention choices implicitly become part of the business logic of any app using it, which means that moduloze is now much more restricted in future changes in that respect (without causing breakage, not to mention the complexity of using modules that were compiled by different versions of moduloze, etc).

if we wanted to integrate this as a feature at jsDelivr, we'd probably want it to be zero-config from the user's perspective.

That makes sense. Unfortunately, there's nothing we can do about the fact that some module systems (like browser globals, AMD, and... ultimately, UMD) require names to load and use modules, not just their URLs. That basically requires some sort of meta-data, either that you (the CDN) are made aware of, or that the author is aware of and uses in their own build.
An author couldn't manually distribute their modules out on jsDelivr (or any CDN) in the UMD/AMD/globals format without having chosen a name for them, or nobody could consume and use them. That's just part of the authoring/distribution process if you plan to support a name-required packaging format.
So I agree, it seems like you can't build them automatically without some source for those names.
Of course, that limitation only applies to UMD. You could still host a service running a tool like moduloze to up-convert from globals/CJS to ESM (minus the index/rollup build), and just not offer the UMD conversion/hosting at all. The benefit of upconverting to ESM should standalone, even if you couldn't take advantage of also upconverting to UMD.

Or, for the UMD support specifically, you could pick some sort of convention, as suggested, like inferring from the filename, or maybe requiring each to be in its own directory and using that name, etc. Then you'd just need to programmatically specify the dependency-map as part of the call to moduloze.
But ultimately, whatever convention you pick there, it'd have to be something that the authors documented for their users, so users knew what identifier names to use in their apps. This seems really brittle for your CDN, with the exact same drawbacks as me baking that stuff into the tool.
The other option is to pick like a convention similar to source maps, where each file to be converted to UMD has to have a "{FILENAME}.umd-map.json" alongside it, providing a name to use. Or whatever other ideas we may bikeshed. That's not exactly "zero configuration", but it doesn't seem all that unreasonable (especially since people and tooling already do sourcemap files similarly).


markers for rois

it would be useful to have a function that renders all the markers visible
beside the one of the selected roi

My feeling is that the plot could get very polluted as it is not rare that ROIs overlap.

of course the function would need to be called programmatically

Depends on the goal but maybe we can have an option to show all roi markers as suggested by @alemirone  with a different color for each ROI and this color will be also set to the corresponding ROI line ?
But maybe this is overkilled ?

A simple way to display all ROI is given in PR #1714

Thank you very much Henry :+1:
Two further improvements :
-- the displayed name could be shortened
-- The manipolation of the markers should be connected to the active roi definition


Got error while using test.py

While I was trying to run
test.py I got following errror
Traceback (most recent call last):
  File "test.py", line 15, in <module>
    from fast_rcnn.config import cfg, get_output_dir
ImportError: No module named fast_rcnn.config

Is this only my problem.
Also it will be really helpful if there is an description that how we can try to see out put of images.

Check if your fast_rcnn directory has config.py. It should. If you have it, then the only reason I can think is that you don't have the right paths set up.
There is a way to visualize the predictions. Look in test.py for def vis_detections(im, boxes, scores, classes)


iOS app forces login after app terminated.

Summary
iOS app forces login after app terminated
Everything else works as expected and notifications work if the app is minimized and closed/removed from app tray.
Environment Information

Device Name: iPhone 8 Plus
OS Version: iOS 14.6
Mattermost App Version:  1.45.0 build 362
Mattermost Server Version: 5.36.1
Database Schema Version: 5.36.1
Database: mysql

Extend session length with activity: true
Session Length AD/LDAP and Email (days): 30
Session Length AD/LDAP and Email (days): 30
Session Length AD/LDAP and Email (days): 30
Cache a session : 10
Steps to reproduce
Re-install the app, re-login, terminate the app, re-open the app.
Expected behavior
Going to the main page after opening the app.
Observed behavior (that appears unintentional)
Taking to the login page again.
Possible fixes
Nope

@softmastx are you building the app yourself? Are you uaing the beta published in test flight?
This is definitely not reproducing on my end

@josephbaylon @lindalumitchell Are you able to repro this on v1.45-beta?

@softmastx are you building the app yourself? Are you uaing the beta published in test flight?
This is definitely not reproducing on my end

I build the app in Xcode
https://www.linkedin.com/posts/softmastx_mattermost-activity-6820191886922412033-GAGm

@softmastx if you are building the app yourself I'd recommend to do it as described in the docs as there are a few things that the scripts take care of like properly assigning the app groups

@enahum Can you confirm if the app groups setting or else was correct the app won't force re-logging in again when it has terminated on real device and Simulator?
I'm having this issue only on mobile app and there is no issue for web browser!
Thanks

@softmastx yes the app group is used to store a session token in the keychain

@enahum According to this link https://developers.mattermost.com/contribute/mobile/build-your-own/ios/
I'm just confusing on the step 2 saying:
- Follow the steps 1, 2, and 3 for Run on iOS Devices in the Developer Setup.
- After configuring the app in the previous step, ensure the bundle ID for each target of the mobile app remains the same as the one in the original mattermost-mobile GitHub repository (com.mattermost.rnbeta, com.mattermost.rnbeta.MattermostShare, and com.mattermost.rnbeta.NotificationService).

Let say that my app identifier is com.softmastx.Mattermost so, the app group, iCloud container and keychain would be
group.com.softmastx.Mattermost, iCloud.com.softmastx.Mattermost, com.softmastx.Mattermost respectively.
App Group and Keychain setting  for MattermostShare and NotificationService target would be group.com.softmastx.Mattermost and com.softmastx.Mattermost.
What I missed?
Thanks