dymanic external-secret generation

ExternalSecrets are now dynamically generated only when required. This is important to remove the dependency of saas dev environments from external-secrets operator and vault.
The owned resources of each controller are now automatically watched. Only when the baserecociler sees a new resource type being managed is the watch started. The idea is that if no external-secrets need to be generated, the controller should not watch the external-secrets API, removing the dependency and making it's installation optional.
Reworked the BuildEnvironment related functions to simplify it's usage. The new code also relies less on reflection, which makes the code less obscure.

I tested an alpha release in the staging environment and no changes were done on any of the current resources, which is what was expected.
/kind feature
/priority important-soon
/assign

/retitle dymanic external-secret generation

/approve


Use links from jsdelivr

Hey @kloimhardt, thanks for the great project.
I just published versioned artifacts of scittle to jsdelivr:
https://github.com/borkdude/scittle/releases/tag/v0.0.1
Please use these links, so we can safely change the hosted files on github pages without breaking your project.

For the Clojure codebase: this change of links already altered nearly 5% of it :-)
For the Clojurescript codebase: it is entirely stolen from Luminus :-))


Bluetooth as audio out

Is it possible to use The onboard bluetooth or an bluetooth dongle to tu use an existing bluetooth speaker as audio out instead of The analog out? Havr tried to get it work with raspbian and raspotify with no success..
Have a bunch of bluetooth speakers and make them to cast devices would seem very useful for many i assume.
Have a rpi 2b and a 3b i would like to implement that on..
Thanks for your replies

I'd love to have this feature as well.

great feature!

I'm interested in this!

Ditto - same use case as OP.   I have  a ton of BT speakers littered throughout the house and would love to have them as an output, even if they are a little out of sync that would be ok as you cannot hear the speakers from one room to the next

This would solve all my problems.

I found that balena-sound automatically pairs with my bluetooth speaker when I turn it on.
I managed to get bluetooth audio output working by:

Turning on the BT speaker and waiting for balena-sound to automatically pair
Visiting http://<IP_ADDRESS>/audio/sinks (or whatever the local IP address is)
Finding the bluetooth audio sink. Mine was called "bluez_sink.00_02_3C_6B_63_48.a2dp_sink"
Add a Device Variable PULSE_SINK with the value of the sink name bluez_sink.00_02_3C_6B_63_48.a2dp_sink5.
Add a Device Variable SOUND_MODE with value STANDALONE

After that, Spotify and Airplay stream to the BT speaker.
I was getting errors with the multiroom service, hence switching to the STANDALONE mode.

I found that balena-sound automatically pairs with my bluetooth speaker when I turn it on.
I managed to get bluetooth audio output working by:

Turning on the BT speaker and waiting for balena-sound to automatically pair
Visiting http://<IP_ADDRESS>/audio/sinks (or whatever the local IP address is)
Finding the bluetooth audio sink. Mine was called "bluez_sink.00_02_3C_6B_63_48.a2dp_sink"
Add a Device Variable PULSE_SINK with the value of the sink name bluez_sink.00_02_3C_6B_63_48.a2dp_sink5.
Add a Device Variable SOUND_MODE with value STANDALONE

After that, Spotify and Airplay stream to the BT speaker.
I was getting errors with the multiroom service, hence switching to the STANDALONE mode.

I'm so stoked to have found your solution after spending a better part of yesterday trying to do this through standalone Shairport-sync.
How exactly do you go about pairing your speaker to balena-sound? I tried to use the terminal on the balenacloud page using bluetoothctl for that initial pairing but I came up short. any tips for that first step?

Thanks for the tips!  I had to use a combination since my device would not auto pair

Turn on the Bluetooth speaker and enter discovery mode
Open up the command line terminal on the Raspberry Pi and run bluetoothctl
Power on the Bluetooth device: power on
Turn the agent on: agent on
Scan for devices: scan on
Pair with your Bluetooth speaker pair MAC Address, at this point there should be no passcode to enter
Add the new Bluetooth speaker to the list of trusted devices: trust MAC Address
Now finally connect to the Bluetooth speaker: connect MAC Address
Visiting http://<IP_ADDRESS>/audio/sinks (or whatever the local IP address is)
Finding the bluetooth audio sink. Mine was called "bluez_sink.00_02_3C_6B_63_48.a2dp_sink"
Add a Device Variable PULSE_SINK with the value of the sink name bluez_sink.00_02_3C_6B_63_48.a2dp_sink5.

Is this running from the host os? I get this error when connecting to the Trek Max speaker:
[bluetooth]# connect 10:B7:F6:03:41:92
Attempting to connect to 10:B7:F6:03:41:92
Failed to connect: org.bluez.Error.Faile

Also trying that sinks url I get a "{"error":"Unexpected token u in JSON at position 0"}" error


fix: specifies gradle version

Adds to README the gradle version, which is set under gradle/wrapper.
Also specifies version in initialization.sh
Noticed that gradle-wrapper.jar changed and committed it too

LGTM


Add a configuration flag to control SQLite synchronous mode

To help work around https://github.com/ellie/atuin/issues/952.
I don't love this solution but I can't use atuin without it.

Oh. I started getting the lag with fsync=false.
I guess this isn't a solution!


improve Jigsaw tasks

fixes in response to #574 and #575

It looks good to me, except for the comment I put.

Hmm ... what comment @Palipoor?

@danyaljj Oh I forgot to submit the review and the comment was pending.

Thank you, both!


Vulnerability roundup 74: python-2.7.16: 1 advisory

search, files

[ ] CVE-2018-20852 (nixos-unstable)

Scanned versions: nixos-unstable: 1412af4b2cf. May contain false positives.

See also #65653


Backend gives unauthenticated error instead of permission denied for wrong passwords/login tokens

This is being dealt with in #481


remove tray autostart config and preflight checks

This PR will remove the autostart-tray config option, preflight checks for macos that created the daemon and tray launchd configs and the section of msi that creates the tray executable shortcut in Start up folder on windows
autostart behavior for tray will be handled in the tray (https://github.com/code-ready/tray-electron/pull/145)

@anjannath Does the tray now already have autostart functionality or there is some issue/PR on tray side which capture it?

@anjannath Does the tray now already have autostart functionality or there is some issue/PR on tray side which capture it?

we have https://github.com/code-ready/tray-electron/pull/145 which is going to add it, still WIP as the UI components are not there yet

/retest
/unhold


Silently create test_cache if it does not exist

If you are running tests locally and the test_cache directory hasn't been created before, enable_cache throws the following error:
NotADirectoryError: Cache directory does not exist! Please check for typos or create it first.
This is counter-intuitive as most contributors would have a cache enabled somewhere already.
Opening the PR to propose that this be handled silently (or with log output). The specific cache location might need to be changed to be consistent with the general fastf1 cache

I think it is fine to just create this local directory. So no need to use a different location for it.
But should we also add the "test_cache" folder to the .gitignore then? Else people might accidentally commit data from it.

.gitignore ignores all directories ending in "cache" so this is already covered

Oh right, then this looks good.


[MM-26970] Add filters to users to remove modal

Summary

Converts the existing group_users component to use the new DataGrid
Adds search and membership filters

Ticket Link

https://mattermost.atlassian.net/browse/MM-26970

Screenshots

@hahmadia retagging you for this PR since you're more familiar with the changes its making

/update-branch

@srkgupta I have fixed the two issues noted above, thanks!

/update-branch


OpenSSF Best Practices Badge for devfile/registry-operator

Which area/kind this issue is related to?

/area registry
Issue Description

This task aims to complete the OpenSSF Best Practices Badge as part of a greater effort to improve our adherence to best practices across all repositories. In order to complete this task the badge should be completed to 100%. You can find the badge on the OpenSSF Best Practices site and it clearly outlines the necessary tasks that must be completed.
At the bottom of the link there should be an edit button available to anyone who has commit permissions to the repository.
Acceptance Criteria

[x] Badge completed to 100%

More info regarding badge can be found here: https://www.bestpractices.dev/en/projects/8256


[Feature Request] ONNX runtime support

ONNX  is an open-standard for machine learning interoperability. Allowing developers to utilize different backends to execute their models.
The backend implementation is relatively straight forward where we would need to provide mappings from their ops to the mlx ops. They also provide a testing suite that makes it simple to exclude any unsupported ops. Should support be added directly to mlx similar to how pytorch has their torch.onnx module or a separate repo like jaxonnxruntime

Dup of #16 (I'll close 16 in favor of discussing here).
@dc-dc-dc yes I think onnx support would be great! Regarding support directly in mlx vs a separate repo / runtime I am not sure. Any idea why Jax went with the latter?

Did some more digging into this, looks like pytorch only supports exporting to onnx even though importing/running was a requested feature. I don't have anything concrete on the decision from jax to make it separate but tensorflow seems to have gone this route as well having onnx-tf . Though there are some libs like tinygrad which added support for the runtime directly.

Also would the implementation be in the core C++ lib or in python, the onnx python package provides the backend helper to create the runtime. If C++ implementation is desired would need a protobuf parser i believe.


2022可使用网站的问题？

关于2022可使用网站的问题？
>>>>>>点/此/进/入/最/新/观/看/入/口<<<<<<
了往昔的欢笑望着山娃闷闷不乐的样子父亲特意带山娃去找三楼房东家的儿子小伍玩小伍比山娃小一岁虎头虎脑的很霸气父平

你可以将2022可使用网站的问题？　　这些天，总是看到碧绿的草地上，繁浓的的露珠，初升的太阳照耀下，象钻石一样流光溢彩。心里一下子就想起《诗经》里的“野有蔓草，零露抟兮，有美一人，清扬婉兮。”心里就想，那该是怎样一个清扬的美人：清清的秋水边，自生自长生机无限的野草上，零露抟抟，美人在草地上站着，扬起小脸，看着到了中秋分外清明的月亮，皎洁的月光照着她白玉盘一样细致的脸，顾不上清冷的露水濡湿鞋袜，站得太久，清辉照耀，玉臂生寒。她在等谁呢？呵，是否跟我一样，在等自己的前世今生的注定？

2022可以使用网站的问题吗?
The first tea, is the first locally for green tea in a small pot roast.
At this time, of course, timing is critical.
Need the tea in the pot to become brown, baking tea people will simmer plates of the water in a pot on the fire, listen to "hua" explosive, with a rise of the spray moment was filled with the clay POTS.
Baked tea will be the first line of bitter tea tribute to you.

请参考下方链接：
https://github.com/shownews/etex/issues/1
https://github.com/goodiders/xqci
https://github.com/powercvt/ncruxf/issues/6
https://github.com/chiquane/valq/issues/3
https://github.com/aoyouzg/xnjbv/issues/5
https://github.com/aoyouzg/oxrby/issues/2
https://github.com/tuderw/pquaruj/issues/3
https://github.com/goodiders/jwztk
https://github.com/fowerv/gugjc/issues/1
https://github.com/fowerv/4628131
https://github.com/shownews/rtivf/issues/2
https://github.com/shownews/dztgogo/issues/3
https://github.com/aoyouzg/gvyic/issues/2
https://github.com/fowerv/zqvngvm
https://github.com/tuderw/zhggmfq/blob/main/README.md
https://github.com/tooere/vjwzpn/issues/5
https://github.com/aoyouzg/lqqrkqc/issues/2
https://github.com/tooere/tgdtewn/issues/5
https://github.com/fowerv/bfvig/issues/3
https://github.com/dedesew/8903502


script-dfn-panel interferes with fixup.js

fixup.js goes to some lengths to make the sidebar ToC less annoying. For example, when you are in a narrow window such that the ToC sidebar floats over the content, it goes away automatically when you click on a link. https://www.w3.org/StyleSheets/TR/2016/readme.html However this functionality is broken in CSS specs, and the culprit seems to be something in script-dfn-panel.
Please fix Bikeshed to not break things.
Thanks~

Ah, nope, this isn't anything about Bikeshed at all; it's fixup.js that's broken.  The problem is in the listener on line 118:
toc.addEventListener('click', function(e) {
  if(e.target.tagName.toLowerCase() == "a" &&
     document.body.classList.contains('toc-sidebar') &&
     !sidebarMedia.matches) {
    toggleSidebar(false);
  }
}, false);

The first check (e.target.tagName.toLowerCase() == "a") fails if you click on the text of the ToC entry, because then the target is a span; you have to click outside of the text but within the highlighted area for this condition to pass and for it to close.
You can observe this in, for example, https://www.w3.org/TR/2018/WD-geolocation-sensor-20180821/#geolocationsensor-interface - Ctrl-+ until the sidebar hides by default, then open it and try clicking directly on the text of any entry; it won't auto-close. Then do the same on https://drafts.csswg.org/css-values/, same result. Try clicking off the text, tho, and both of them auto-close.
The only reason you're noticing this more often on CSS specs is that we tend to have longer section titles than most specs, so it's more likely you're clicking on text.
The fix is pretty simple:
toc.addEventListener('click', function(e) {
	if(document.body.classList.contains('toc-sidebar') && !sidebarMedia.matches) {
		// Only toggle-off if an <a> was clicked.
		var el = e.target;
		while(el != toc) {
			if(el.tagName.toLowerCase() == "a") {
				toggleSidebar(false);
				return;
			}
			el = el.parentElement;
		}
	}
}, false);

It's even easier if we want to rely on el.closest(), as then we can just take the original code and replace the first check with e.target.closest("a"), but that won't work in pre-Edge IE.

Geolocation is Bikeshed-generated, fwiw, so I'm not sure comparing it to a CSS spec which is also Bikeshed-generated makes much sense. ^_^ An example of a non-Bikeshedded spec would be TTML https://www.w3.org/TR/ttml2/ (which auto-closes as expected).
So the issue is that fixup.js works fine on specs that don't have additional markup generated within their toc entries, but Bikeshed adds such markup, breaking the script. But it's fixup.js that should be fixed here, because it should be general enough to handle additional markup.

Ah, thanks, I just grabbed the most recently published spec from /TR; I didn't pay attention to what generated it. ^_^
And note that the problem definitely still exists in the TTML spec, you're just less likely to hit it - click on the section number in the ToC, and you'll navigate the document, but it won't auto-close, for exactly the same reason (the section number is in a span).

And yeah, given that ToCs are generated from headings, if you have any further markup in your heading, such as a code element, that'll stop fixup.js from working too.


Update 2024-07-03-csail-network.md

Merge the morning of the 15th. Then the night of the 15th remove the state: row

no longer needed.


Html tag lang property always remains hardcoded

Lang property in html tag doesn't depend on the selected locale
https://github.com/prismicio-community/nextjs-starter-prismic-multi-language/blob/e6c791303a13aaabd3b7cbd9ac7dcd440d40f531/src/app/layout.js#L26

your folder structure should be : /app/[lang]/layout.js
then you will have access to  your locale from param.lang


Find the duplicates from an array in C++

🚀 Feature
Given an array of N elements , find all duplicate elements from it. In Competitive Programming, some times we need to do this to solve our problem.
Have you read the Contributing Guidelines on Pull Requests?
YES.
Motivation
As a GSSOC'21 participant I would like to contribute to this project.
Pitch
Given an array of N elements, each element's occurrence in the array can be more than once. Find all elements whose occurrence is more than 1.
Formally find all duplicate elements of the array. This can be done with the help of map and set data structure.

/assign

/C++


gn: Implement the xwalk_app_template target

This is fairly simple after commit cadbd11 ("[Android] Rewrite
generate_app_packaging_tool.py"): we just need to depend on the
recently-added xwalk_core_library and xwalk_shared_library targets
and specify the paths to everything we want to copy.
We also leverage GN's build_configs to determine the path to the runtime
JAR without having to hardcode it anywhere.

@heke123

After this PR, the only thing left is "xwalk_core_library_documentation" for GN Crosswalk-Android, right?

There's the documentation target and the POM ones (dealt with in #3906).

Oops, I thought there was an lgtm in your comment so I clicked the merge button :(

LGTM :)


拉数据出错

Hi, 用的是0.5.0版本，今天开始出现以下错误，请问怎么办？
ConnectionError: HTTPSConnectionPool(host='push2his.eastmoney.com', port=443): Max retries exceeded with url: /api/qt/stock/kline/get?fields1=f1%2Cf2%2Cf3%2Cf4%2Cf5%2Cf6%2Cf7%2Cf8%2Cf9%2Cf10%2Cf11%2Cf12%2Cf13&fields2=f51%2Cf52%2Cf53%2Cf54%2Cf55%2Cf56%2Cf57%2Cf58%2Cf59%2Cf60%2Cf61&beg=20010102&end=20500101&rtntype=6&secid=1.510050&klt=101&fqt=1 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x0000019166541CC0>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))

Hi, 用的是0.5.0版本，今天开始出现以下错误，请问怎么办？
ConnectionError: HTTPSConnectionPool(host='push2his.eastmoney.com', port=443): Max retries exceeded with url: /api/qt/stock/kline/get?fields1=f1%2Cf2%2Cf3%2Cf4%2Cf5%2Cf6%2Cf7%2Cf8%2Cf9%2Cf10%2Cf11%2Cf12%2Cf13&fields2=f51%2Cf52%2Cf53%2Cf54%2Cf55%2Cf56%2Cf57%2Cf58%2Cf59%2Cf60%2Cf61&beg=20010102&end=20500101&rtntype=6&secid=1.510050&klt=101&fqt=1 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x0000019166541CC0>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))

有没有开代理，在国内开代理的话容易访问失败

重启一下路由器好了，但是以前从来没有出现过这种情况 。
On Mon, Jan 29, 2024 at 8:42 PM sheep @.***> wrote:

Hi, 用的是0.5.0版本，今天开始出现以下错误，请问怎么办？
ConnectionError: HTTPSConnectionPool(host='push2his.eastmoney.com',
port=443): Max retries exceeded with url:
/api/qt/stock/kline/get?fields1=f1%2Cf2%2Cf3%2Cf4%2Cf5%2Cf6%2Cf7%2Cf8%2Cf9%2Cf10%2Cf11%2Cf12%2Cf13&fields2=f51%2Cf52%2Cf53%2Cf54%2Cf55%2Cf56%2Cf57%2Cf58%2Cf59%2Cf60%2Cf61&beg=20010102&end=20500101&rtntype=6&secid=1.510050&klt=101&fqt=1
(Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object
at 0x0000019166541CC0>: Failed to establish a new connection: [Errno 11001]
getaddrinfo failed'))
有没有开代理，在国内开代理的话容易访问失败
—
Reply to this email directly, view it on GitHub
https://github.com/Micro-sheep/efinance/issues/159#issuecomment-1914619948,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ADCJFUXU55LBU76TORNEPT3YQ6KKZAVCNFSM6AAAAABCPJXSOWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSMJUGYYTSOJUHA
.
You are receiving this because you authored the thread.Message ID:
@.***>


Documentation sprint

Fixing and updating docs based on the documentation issues raised
#502
#522

wow awesome work :) <3 got some more:

.env and friends (.lagoon.env.{branch})
a step by step how to fix ssh-agent issues in pygmy (probably do the documentation directly in lagoon, my current process: 1. check if ssh-add in container shows, key, 2. check pygmy status, 3. force restart cli container)

mhh not sure, maybe we create a separate short documentation for pygmy on pygmy.readthedocs?
I would like to have them at both places as some people still use pygmy on legacy

good point. i'll incorportate it for now in the legacy documentation as we have all the things in there.
Created https://github.com/amazeeio/pygmy/issues/24

Environment files also documented ✔

Thanks @twardnw i just did a small change in removing the drush site install from the .lagoon.yml example just to keep the databases safe :) https://github.com/amazeeio/lagoon/pull/779/commits/e6817b5247ad66d6b2dc25f07fdcb827846a4656

thank you @dasrecht this is epic <3 <3 <3


Remove bgp_conditions_match_community_set_unsupported for arista for …

not needed anymore

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

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 55.5%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
1983

Relevant Lines:
3573

💛  - Coveralls


Switches png logo for svg logo

Such crisp, wow

@alanshaw
I'm getting couple of react warnings which is dull. I'm generally all in favour of not having to convert svgs just to appease react.
main.bundle.js:166246 Warning: Unknown DOM property stroke-linejoin. Did you mean strokeLinejoin?
main.bundle.js:166246 Warning: Unknown DOM property stroke-linecap. Did you mean strokeLinecap?

I think these are coming from the code and user icons, but logo uses stroke-linecap as well.


[1.7.10] Question regarding dimlets

I'm using FTB Infinity Evolved, lately I've been receiving a lot of issues. my main issue is trying to make it so I always get the dimension I put in. For example, I tried to make a mob Ocelot dimension and I never found ocelots. What am I missing that I have to do? Does there have to be other dimlets for other things?

Can you be more specific? What dimlets did that ocelot dimension contain?

Sorry, I meant to be more specific just couldn't figure out what else to say haha.
These are the dimlets in order that it contained:

Terrain Amplified
Biome Jungle
Sky Normal
Time Normal
Mob Ocelot

Hmm that should work... No idea at the moment. Try to check if they really don't spawn

Yeah I flew around the map for 5 minutes and none spawned, haha.
I'll give it 10 minutes though and go further just to double check and then I'll get back to you.

So after searching for a while, I finally found ONE.
But with the mob dimlets isn't it supposed to add tons of mobs?

Close as 1.7.10 is no longer supported. If this continues to be a bug on 1.12 or newer, please open a new issue.


infra: Add build test after patch merged

This test works after the patch is merged into the master branch.
issue: https://github.com/Samsung/thorvg/issues/1032

I will use the results of this test as a badge on our main page.

Can't this be added to existing build?
Godot use this notation in one single .yml file
on: [push, pull_request]

Can't this be added to existing build? Godot use this notation in one single .yml file
on: [push, pull_request]

wow thank you very much :)


Glyph download timeouts

Have been experiencing regular timeouts / failures, seem related to the glyphs download step: https://github.com/minusfive/zmk-config/actions/runs/11321454822/job/31500930916
INFO: using config args: -c keymap-drawer/config.yaml
INFO: drawing for corneish_zen
INFO:   got extra parse args:
INFO:   got extra draw args:
Traceback (most recent call last):
  File "/home/runner/.local/bin/keymap", line 8, in <module>
    sys.exit(main())
  File "/home/runner/.local/lib/python3.10/site-packages/keymap_drawer/__main__.py", line 212, in main
    draw(args, config.draw_config)
  File "/home/runner/.local/lib/python3.10/site-packages/keymap_drawer/__main__.py", line 43, in draw
    drawer = KeymapDrawer(
  File "/home/runner/.local/lib/python3.10/site-packages/keymap_drawer/draw/draw.py", line 25, in __init__
    self.init_glyphs()
  File "/home/runner/.local/lib/python3.10/site-packages/keymap_drawer/draw/glyph.py", line 58, in init_glyphs
    self.name_to_svg |= self._fetch_glyphs(rest)
  File "/home/runner/.local/lib/python3.10/site-packages/keymap_drawer/draw/glyph.py", line 88, in _fetch_glyphs
    return dict(zip(names, p.map(fetch_fn, names, urls, timeout=FETCH_TIMEOUT)))
  File "/usr/lib/python3.10/concurrent/futures/_base.py", line 623, in result_iterator
    yield _result_or_cancel(fs.pop(), end_time - time.monotonic())
  File "/usr/lib/python3.10/concurrent/futures/_base.py", line 319, in _result_or_cancel
    return fut.result(timeout)
  File "/usr/lib/python3.10/concurrent/futures/_base.py", line 460, in result
    raise TimeoutError()
concurrent.futures._base.TimeoutError
ERROR: parsing or drawing failed for corneish_zen!
Error: Process completed with exit code 1.

Started noticing a few days ago, where about 50% of jobs failed. Then it's gradually gone up until the last 6 runs have consistently failed: https://github.com/minusfive/zmk-config/actions/runs/11321454822/usage

LOL, just noticed I submitted this to your config repo instead of keymap-drawer 🤦


Support switching between xz and gzip formats at runtime

My use case for this is an embedded linux system that doesn't support LZMA compression.
Right now this can be achieved by building cargo-deb with default features disabled, but this also removes the option of using LZMA for systems that support it.
I would like to have an option akin to fpm's --deb-compression flag that allows me to explicitly select the compression when building the package.
I'm happy to contribute this feature, but I would like to get some guidance on the preferred approach.
The way I see it, this should be a command line option, but I'm also fine with having it as a field in the cargo.metadata.deb config.

Yes, having a command line option for this is a good idea.


 WHOEVER COMPLETES IT, GETS $500 IN CASH
As a user, I want the app to identify when I was speaking, vs someone else and see it in transcriptions/memories
For that, during the app's onboarding, i want to provide a few seconds sample of my voice (like Siri), and then
And then the app should do this:

I was able to implement this feature in a POC. It works well. Now I need to implement it in Friend.

I am confused. @josancamon19 are you also working on it?

Hi @AnCh7  yes! There's a released version now :) (very experimental, but some feedback would be amazing)

can anyone still take this up or is the issue closed ?

@josancamon19 @kodjima33 It seems that there has been a misunderstanding and poor communication. I have been working on this task for the past week, and since I mentioned in this thread that I was working on it, I did not expect someone else to be working on the same task. We need to improve our coordination because I ended up spending many hours working on this in vain, and this is quite frustrating for me.

Hi @AnCh7 I'm sorry about it, I've not been opening discord much, would love to jump on a chat and learn more about what you've been doing, please ping me on discord @josancamon

IMO when you pick up a task, assign it to yourself and hopefully that communicates very clearly that you were working on it and someone else


Add max_frame_size option for websocket handlers.

Option allows to limit a frame by size before decoding its payload.
Related to 612.
I took this for basis, made it optional and fixed tests. Should I remove limit of 8 MBytes by default or leave it as is?

There's another case which you don't cover, which is fragmented frames. We reassemble them and that can end up creating a huge binary too.

I'm not that deep into websockets protocol. What should I do to check this out?

It's done in websocket_dispatch, we reassemble the frame from its fragments, should check the size of the (partially or completely) reassembled payload in both clauses.

Is that ok, that a check performs only on the last fragment of the frame? Or should I add checks on intermediate fragments?

Yes like this is good. Maybe another fragment test can be done so that it fails on a frame other than the final frame too.
Will have to think about the default, and whether badframe is the right close code, but busy at the moment. Thanks!

When will this be merged into master?

It's missing a test as I pointed out in my previous comment.

So when will it be added?

You seem to have a lot of time, why don't you do it?

ws_max_frame_size_fragments_close(Config) ->  	doc("Server closes connection when fragmented frame size exceeds max_frame_size option"),  	%% max_frame_size is set to 8 bytes in ws_max_frame_size  	{ok, Socket, _} = do_handshake("/ws_max_frame_size", Config),  	Mask = 16#11223344,  	MaskedHello = do_mask(<<"HelloHello">>, Mask, <<>>),    %% Fragments with exceeding size are not allowed too  	ok = gen_tcp:send(Socket, << 0:1, 0:3, 2:4, 1:1, 10:7, Mask:32, MaskedHello/binary >>),  	ok = gen_tcp:send(Socket, << 1:1, 0:3, 0:4, 1:1, 10:7, Mask:32, MaskedHello/binary >>), 	{ok, << 1:1, 0:3, 8:4, 0:1, 2:7, 1002:16 >>} = gen_tcp:recv(Socket, 0, 6000),  	{error, closed} = gen_tcp:recv(Socket, 0, 6000),
What exactly is wrong?
"Maybe another fragment test can be done so that it fails on a frame other than the final frame too."
It's failing on the first fragment, not the final.
It's time to merge buddy.

@evilbluebeaver You mean 0.8 MB not 8 MB?

It's testing on the last fragment. We need a test for an intermediate fragment. Get to work buddy.

If you mean what you posted above, I did not read it and I do not intend to test it unless you submit a proper PR. Anyway what's your problem? If you have the code you need in a PR, all you need is to merge it to your copy.  I don't have plans to go over Websocket for a while so unless there's a PR I can merge without doing extra work it's not likely to be added anytime soon. The test is just one thing that's missing, it's also missing documentation. It's not in a state that can be merged.

Are you blind? Answer me. Because if you weren't, you'd realize the code I posted isn't testing on the fragment AND it's the exact code as the one the pull requested has, copy pasted.

If you mean what you posted above, I did not read it and I do not intend to test it unless you submit a proper PR.

You can either open a PR complete with the added test and documentation, or not do anything. Either way please stop commenting on this PR or I'll lock it. I have better things to do.

What is honestly your problem? The test that this PR includes two tests. The second one includes two fragments. Both 10 Bytes. Max is 8 Bytes per frame. It's FAILING on the FIRST fragment. Not the LAST.
10 > 8.
You can either counter my claim or you can lock this PR to admit your ignorance.

The PR has two tests. One is a non-fragmented frame of 10 bytes that goes over the limit. The second one is two fragmented frames of 5 bytes and it goes over the limit on the last frame.
I'm not sure where you see a test with two fragments of 10 bytes. Maybe from a previous commit, but certainly not from the PR in this current state.
I need a test with say 3 fragments of 5 bytes and it goes over the limit on a frame that's not the last. And I need documentation.

Added the test, fixed various small things, changed the close code, added docs, etc. and merged locally. Thanks!


Woops! I thought I was but I was wrong!


Loading Multiple models into the same session of tensorflow

I have trained two models. en-fr and fr-en models. The fr-en model has different vocab size compared to the en-fr model. The first model is being loaded properly. It crashes while loading the second one. I have trained both the models separately. Please check the log file attached to see the error logs. kindly tell me the right way to go ahead.
I want to create a webservice for en-rf and fr-en translation. I ahve to load the models in a session for this, which is causing the problem. below is the piece of code. I am using the translate.py provided by tensorflow and the methods available in it.
`global en_fr_sess

 if en_fr_sess==None:
 en_fr_sess = tf.Session()

 global en_fr_model
 global en_fr_en_vocab_path
 global en_fr_fr_vocab_path

 en_fr_model = create_model(en_fr_sess, True)
 en_fr_model.batch_size = 1
 fr_en_model = fr_en_create_model(en_fr_sess, True)
 fr_en_model.batch_size = 1`

I am able to run both the models separately and generate the translations. However, when I try to load both the models in the same session or even a different session one after the other, I get the following error
`ValueError: Variable embedding_attention_seq2seq/RNN/EmbeddingWrapper/embedding already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at:`
`File "/usr/local/lib/python2.7/dist-packages/tensorflow/models/rnn/translate/seq2seq_model.py", line 113, in seq2seq_f
feed_previous=do_decode)`
`File "/usr/local/lib/python2.7/dist-packages/tensorflow/models/rnn/translate/seq2seq_model.py", line 136, in <lambda>
self.target_weights, buckets, lambda x, y: seq2seq_f(x, y, True),`
`File "/usr/local/lib/python2.7/dist-packages/tensorflow/models/rnn/translate/seq2seq_model.py", line 137, in __init__
softmax_loss_function=softmax_loss_function)`

Please find the detailed log file attached too. Kindly give me the inputs on how to proceed further.
out.txt

@lukaszkaiser any inputs?

As said in the other thread -- you want separate variables for each model. So you need to use "with tf.variable_scope(...)" before creating each model. And since you didn't do this before training, you'll have to re-name the variables you restore from the checkpoint. This can be done by passing a dict to the Saver object, rather than just a list of variables (as is done now). Let me know if you have more specific questions, I'll be happy to help, but here is the overview.
(0) Currently both your models are trying to share parameters, that's where the error comes from (they cannot share because vocab sizes are different, but it's just a consequence of a different problem: you don't want to share the variables, you want 2 separate sets of them).
(1) You cannot create 2 separate sets just with 2 sessions, you need to put them in variable_scopes. Just before calling create_model, open a scope, for example:
with tf.variable_scope('en_fr'):
en_fr_model = create_model(...)
with tf.variable_scope('fr_en'):
fr_en_model = create_model(...)
(2) Now you have 2 sets of variables, but their names don't correspond to the names you've saved in checkpoints during training, because your names are now prefixed with 'en_fr/' and 'fr_en/' and those in checkpoint are not. So you need to add some logic to the Saver object in the model to tell it to prefix the variables from the checkpoint in the right way. This can be done by passing a dict to the Saver, see here

Thanks for your quick response @lukaszkaiser
my doubts may be very trivial but I will go ahead and ask.
I have trained two models. you rightly pointed out that I have not used tf.varaible_scope during the training stage. When you say I need to rename variables that I restore from the checkpoint,
`ckpt = tf.train.get_checkpoint_state(FLAGS.train_dir)
 if ckpt and tf.gfile.Exists(ckpt.model_checkpoint_path):
    print("Reading model parameters from %s" % ckpt.model_checkpoint_path)
    model.saver.restore(session, ckpt.model_checkpoint_path)
 else:
    print("Created model with fresh parameters.")
    session.run(tf.initialize_all_variables())
return model`

This is the place where the restoring is done, from the trained model cptk file. What are all the variables that I need to rename?
Also by using the tf.variable_scope(), will the variables be prefixed with the string given, en_fr or fr_en automatically. ?
is retraining both the models with tf.variable_scope a better option?

I trained two new models with fewer steps. While training the new models, I used with tf.variable_scope("en_fr") for en-fr translator and with tf.variable_scope("fr_en") for fr-en translator.
For training :
with tf.variable_scope('fr_en'):       model = create_model(sess, False)
with tf.variable_scope('en_fr'):
  model = create_model(sess, False)

I think what you did is good and you're almost there. The one problem you see is due to this line. The Saver() object takes a list of variables, and it's tf.all_variables(), so it's trying to restore them all. While your checkpoint only has a subset of them (not the en_fr ones), so you get an error.
I think you can, for example, just create 2 savers and filter the variables to only include the relevant ones, e.g, self.saver_en-fr = Saver([v for v in tf.all_variables() if 'en_fr' in v.name]). And then call restore twice, on both savers. Hope that works, let me know!

With your inputs, I made the modifications in seq2seq_model.py
`all_vars = tf.all_variables()
model_one_vars = [k for k in all_vars if k.name.startswith("en_fr")]
model_two_vars = [k for k in all_vars if k.name.startswith("fr_en")]

if not model_two_vars:
   self.saver_en_fr = tf.train.Saver(model_one_vars)
else:
   self.saver_fr_en = tf.train.Saver(model_two_vars)`

in place of
self.saver = tf.train.Saver(tf.all_variables())
Things are working fine now. I have successfully loaded two models. Thanks a lot for your inputs :-)

Thanks to @lukaszkaiser and @suraj1990 , I've run into the same issue and the suggestion works for me.

Does the variable scope method work when working with Keras? Even while using different variable scopes, the models seem to be sharing weights.

When using objects, the idea is that same-object=shared-weights and different-objects=non-shared-weights. But it should be very simple to not share, just create the object twice. Or am I missing something?

@lukaszkaiser that's what I did, but it doesn't seem to work. I have two models (in 2 different objects), A and B in the same session. Training only A gives 90% of so accuracy, while training B after A and then evaluating A gives less than random accuracy. This issue disappears when I run them in different threads, so it's probably something to do with two models in the same session (probably sharing weoghts of some layers).

This sounds like a bug. Could you create a small test file where this problem appears and attach here, so we can reproduce and try to correct it? Thanks!

This sounds like a bug. Could you create a small test file where this problem appears and attach here, so we can reproduce and try to correct it? Thanks!

Same problem here. The restoration is working on both models but the results are bad. Take a look:
with tf.variable_scope('localization'):
            binarylogits, logits, softmax_weights, convoluted = inception.inference(images, num_classes,
                                                                 restore_loc=True, restore_rec=False)

with tf.variable_scope('recognition'):
            binarylogits, logits, softmax_weights, convoluted = inception.inference(images, num_classes,
                                                                 restore_loc=False, restore_rec=True)

variables_to_restore = tf.get_collection(
            slim.variables.VARIABLES_TO_RESTORE)
loc_varlist = {v.name[13:][:-2]: v
                        for v in variables_to_restore if v.name[:12]=='localization'}
rec_varlist = {v.name[12:][:-2]: v
                        for v in variables_to_restore if v.name[:11]=='recognition'}

loc_saver = tf.train.Saver(var_list=loc_varlist)
rec_saver = tf.train.Saver(var_list=rec_varlist)

loc_saver.restore(sess, FLAGS.localization_model_checkpoint_path)
print('%s: Pre-trained model restored from %s' %
                    (datetime.now(), FLAGS.localization_model_checkpoint_path))

rec_saver.restore(sess, FLAGS.recognition_model_checkpoint_path)
print('%s: Pre-trained model restored from %s' %
                    (datetime.now(), FLAGS.recognition_model_checkpoint_path))

The localization model doesn't give the results I am receiving when I run it without the recognition model.

I updated the above code take a look. Finally the second model (recognition) cannot produce the right predictions, but in a script without the first model it works fine.

@chrisrn Have you fixed this problem?

@Yuliang-Zou  Yes finally it works. Probably there was a tensorflow bug in the past.

@chrisrn So you just updated the version of tensorflow, and it works now?

@suraj1990 @lukaszkaiser @anguyen8 @iamgroot42 @chrisrn
I am facing the same issue.
I have trained two models separately . The output of 1st model is used as output of 2nd model .
When i run the two models individually , i save the output of 1st model in a numpy array and then later feed that to 2nd model , results are as expected , but when i combine them in a single graph , the output of 2nd model is horrendously bad. I have made sure that there is no name conflict.
Any advice on how anyone overcame this ?
Thanks

@iamgroot42 how did you run it on two threads?

@chrisrn how did it work?

which tensorflow version are you using?

@chrisrn Thanks man , but i have tried to restore it as you mentioned , but no luck .

i am using tensorflow version 1.4

@iamgroot42 had mentioned that the two models might be sharing same variables , i have checked all the variables in tf.global_variables () , there is no conflict i could find.

@Raj-08 The above technique with the scopes is referring to models that have the variables with the same names, so you are using the scopes to avoid that. If your models do not have same variable names then it's easier to load them. Pay attention on where you place the savers and also the variables that you feed to them!

`  with tf.Graph().as_default():
C = tf.constant([0],shape=[30,30,1])

D = tf.constant([0],shape=[40,40,1])
input_image = tf.placeholder(tf.uint8, [1, None, None, 3], name=_INPUT_NAME)
image_size = tf.shape(input_image)[1:3]
image = tf.squeeze(input_image, axis=0)
image = tf.expand_dims(image, 0)
model_options = common.ModelOptions(
    outputs_to_num_classes={common.OUTPUT_TYPE: FLAGS.num_classes},
    crop_size=[481,481],
    atrous_rates=FLAGS.atrous_rates,
    output_stride=FLAGS.output_stride)
with tf.variable_scope('segmentation'):
    if tuple(FLAGS.inference_scales) == (1.0,):
      tf.logging.info('Exported model performs single-scale inference.')
      predictions = model_deeplab.predict_labels(
          image,
          model_options=model_options,
          image_pyramid=FLAGS.image_pyramid)
    else:
      tf.logging.info('Exported model performs multi-scale inference.')
      predictions = model_deeplab.predict_labels_multi_scale(
          image,
          model_options=model_options,
          eval_scales=FLAGS.inference_scales,
          add_flipped_images=FLAGS.add_flipped_images)

    predictions = predictions['semantic']

    logits_deeplab = tf.scalar_mul(255,predictions)
    logits_deeplab = tf.squeeze(logits_deeplab)
    logits_deeplab = tf.expand_dims(logits_deeplab, axis=0)
    logits_deeplab = tf.expand_dims(logits_deeplab, axis=3)
    eroded = tf.nn.erosion2d(tf.cast(logits_deeplab,dtype=tf.int32),C,[1,1,1,1],[1,1,1,1],'SAME')

    dilated = tf.nn.dilation2d(tf.cast(logits_deeplab,dtype=tf.int32),D,[1,1,1,1],[1,1,1,1],'SAME')

    dilated =  tf.where(tf.equal(dilated,255),tf.fill([1,481,481,1],127),dilated)

    trimap =  tf.where(tf.equal(eroded,255),tf.fill([1,481,481,1],255),dilated)
    trimap_inp = tf.concat([tf.cast(image,dtype=tf.float32),tf.cast(trimap,dtype=tf.float32)],axis=3,name='new')
    model_options = common.ModelOptions(
    outputs_to_num_classes={common.OUTPUT_TYPE: 64},
    crop_size=[481,481],
    atrous_rates=[12,24,36],
    output_stride=FLAGS.output_stride)
mod_vars = tf.model_variables()
print('l1',len(mod_vars))
with tf.variable_scope('matting'):
    logits= model.multi_scale_logits(
          trimap_inp,
          model_options=model_options,
          image_pyramid = [1.0])

    mod_vars = tf.model_variables()
    print('l2',len(mod_vars))
    all_trainables = tf.trainable_variables()
    logits=logits['semantic']
    logits_p=logits['merged_logits_matting']
    upsample_logits=True
    logits_p=upsample_layer(logits_p,64,'up_matting',upscale_factor=4)
    print('LP',logits_p)
    logits_p = create_new_conv_layer(logits_p,64,1,'pred')
    deeplab_op_255 = tf.scalar_mul(255.0,logits_p)
    concat_inp = tf.concat([tf.cast(image,dtype=tf.float32),deeplab_op_255],axis=3)
    conv1 = create_new_conv_layer(concat_inp,4,64,'conv1')
    conv2 = create_new_conv_layer(conv1,64,64,'conv2')
    conv3 = create_new_conv_layer(conv2,64,64,'conv3')
    logits_al = create_new_conv_layer(conv3,64,1,'pred1')
    logits_al = tf.nn.sigmoid(logits_al)
variables_to_restore = tf.get_collection(
        tf.GraphKeys.MODEL_VARIABLES)
print(len(variables_to_restore))

loc_varlist = {v.name[13:][:-2]: v
                    for v in variables_to_restore if v.name[:12]=='segmentation'}
rec_varlist = {v.name[8:][:-2]: v
                    for v in variables_to_restore if v.name[:7]=='matting'}
print('L1',len(loc_varlist))
print('L2',len(rec_varlist))
f = open('/home/ubuntu/all_data_seg/train_mat_25_08.txt')
message = f.read()
lines = message.split('\n')

saver_restore_1 = tf.train.Saver(loc_varlist)
saver_restore_2 = tf.train.Saver(rec_varlist)`

Here is my code , tried eveything , doesnt seem to work !

While loading multiple trained files i am facing this issue.
ValueError: Variable character_embedding_en/character_embedding_weights_en already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope?
Even though i have autonmated the model for different language (as i have to train for 3 -4 languages) and have done whatever was recommended, but i am till facing this issue. It would be great if someone could just help me here.
Thank you in advance :)
[entity_lstm.zip]
(https://github.com/tensorflow/tensorflow/files/6606424/entity_lstm.zip)


Join wallet from an existing wallet

I'm trying to understand some behaviors of API.joinWallet, and I got some questions:

Why joinWallet return another wallet? What's the used for? If I already have the wallet, why generate new one?
If I had one wallet that I want to join to new ones, I simply create this wallets and join my wallet with this secret wallet, right?

Thanks.

Why joinWallet return another wallet? What's the used for? If I already have the wallet, why generate new one?

Let's separate some terms here for a second:

credentials = the private key chain (or mnemonic) that your client has in the local wallet file (where you export to)
shared wallet = a wallet object on BWS which contains multiple individual wallets. It also contains metadata about the shared wallet along with pointers to each individual wallet will need to query BWS about the shared wallet.
individual wallet = a wallet object on BWS which contains references to the public parts of an individual copayer's credentials, if it is a part of a shared wallet, then it also contains the metadata and shared secrets needed to participate in the shared wallet.

The "another wallet" is the same wallet you had before, just with extra shared keys added. Your individual wallet (that you save locally) needs to store these shared keys for encrypting messages to BWS when pertaining to your shared wallet.
I believe it is also automatically applied to the client object's credentials as well, so performing a client.export in the callback for joinWallet should be sufficient... but some people wouldn't find that intuitive for the callback methodology, so they are also returning the wallet as an arg of the callback for convenience.
(correct me if I'm wrong, I might be)

If I had one wallet that I want to join to new ones, I simply create this wallets and join my wallet with this secret wallet, right?

I can't really understand what you mean... but if you mean "can I join multiple shared wallets with the same credentials?" the answer is yes... but "can I join multiple shared wallets with the same individual wallet?" the answer is no.
However, it is highly recommended that you use different xprv keys for each wallet you join or create... if you must have one backup, create one wallet with mnemonic, then use bitcore-mnemonic library to convert mnemonic to HDPrivateKey and derive m/44'/0'/1' then m/44'/0'/2' then m/44'/0'/3' to generate the 2nd, 3rd, 4th account of the same mnemonic and use those HDPrivateKeys to export as xprv and use that to initialize credentials with bitcore-wallet-client.

Thanks for your explanation, lots of thing got clear now, really.
Thanks for your recommendation, but if I have this wallets:
createWallet("Main", "Bob", 2, 3) // return: mainSecret
createWallet("Backup", "Bob", **1, 1**)
createWallet("TomWallet", "Tom", 1, 1)

joinWallet(mainSecret, "Bob") // associate the Bob Backup wallet to the Main wallet
joinWallet(mainSecret, "Tom") // associate the Tom wallet to the Main wallet of the Bob

This process is recommended?
When you say:

and derive m/44'/0'/1' then m/44'/0'/2' then m/44'/0'/3' to generate the 2nd, 3rd, 4th account of the same mnemonic and use those HDPrivateKeys to export as xprv and use that to initialize credentials with bitcore-wallet-client.

This can be done with API.seedFromExtendedPrivateKey, right?

This process is recommended?

No.
createWallet will create a wallet on BWS that is either Shared wallet or Individual wallet. But if you create a 1 of 1 wallet, it is always a 1 of 1, and can not join a shared wallet.
You would need to do something like (psuedo code)
// each client object is an instance of bitcore-wallet-client with their own credentials
// pre-initialized via seedFromExtendedPrivateKey or something else. Note that if you
// run createWallet or joinWallet without any credentials loaded, it will automatically
// generate a new mnemonic credentials for you

// No need to initialize, a random will be made
client1.createWallet("Main", "Bob", 2, 3) // return: mainSecret

var HDKey = client1.credentials.xPrivKey

// initialize clients before joining the shared wallet
client2.seedFromExtendedPrivateKey(HDKey, {account: 1}) // account #2 (start counting from 0)
client3.seedFromExtendedPrivateKey(HDKey, {account: 2}) // account #3 (start counting from 0)

client2.joinWallet(mainSecret, "Bob") // associate the Bob Backup wallet to the Main wallet
client3.joinWallet(mainSecret, "Tom") // associate the Tom wallet to the Main wallet of the Bob

Thanks @dabura667 for your help, now Its all more clear!

Thanks @dabura667 for your help, now Its all more clear..
but one more doubt, I already code what you did, and now I got 3 wallets with the same private key, the goal is not to have 3 different keys? Or I missing something?

It will derive the account before generating the actual keys.
I thought the wallet stored m/44'/0'/a' but in actuality it stores m and a as two pieces of data, and generates m/44'/0'/a'/c/k for each key.
You are fine.

@dabura667 I have the Bob  (Main and Backup wallet), but if I want Tom audit the transactions that Bob is doing (full access to the list of incoming and outgoing payments), but Tom is not authorized to spend money of the Bob wallets.
https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki --> Use cases / Audits: N(m/*)

https://github.com/bitpay/bitcore-wallet-client/blob/41635442819ccd9b6d97ac5a7a46869ead7a35f1/lib/api.js#L452

Bob makes a wallet.
Bob runs: client.export({noSign: true}) and saves the string to a file.
Tom runs client.import() with the file from Bob.
Tom opens the wallet, then re-exports it and saves to disk.

Now Tom essentially has the exact same wallet as Bob except without the ability to sign.
(However, Tom will have the ability to propose transactions on Bob's behalf, and any co-signers would see his proposals as "from Bob"...)

But if Tom had the same xpriv as Bob do I really need to do import and export?
In the sample code you show pervasively, instead of seedFromExtendedPrivateKey I choose seedFromRandomWithMnemonic.
Are the Mnemonic a good option?
And Mnemonic are stored in the credentials file, are they sensitive data, like xpriv?

But if Tom had the same xpriv as Bob do I really need to do import and export?

If we are talking about my code sample. That is a multi-sig wallet. Tom can already see all the transactions that Bob is doing, because Tom also has to approve them (that is what multi-sig is... multiple approvers)
But in the (very very bad security) example I gave you, since everyone has the same xprv, it's a useless multisig wallet. There is no meaning to having multiple signatures if everyone owns the same key. (Bob could create Tom's wallet by re-creating the wallet with the account number 2 instead of 0.)
I don't understand what you are trying to accomplish, stop talking in abstract "Bob" and "Tom" metaphors and just say what you want to do: ie. "I want to set up a server that can watch my wallet and send an email to my lawyer every time I get money" or something like that.

If we are talking about my code sample. That is a multi-sig wallet. Tom can already see all the transactions that Bob is doing, because Tom also has to approve them (that is what multi-sig is... multiple approvers)

Yes, I know. So, I will explain: I want a server that audit all the transactions of the users, but the server has only access to one key pair for each user. And a user have 2 wallets/credentials (main and offline backup).
My ideia:
// Doing this offline:
client1.createWallet("Main", "UserName", 2, 3) // return: mainSecret

client2. seedFromRandom()
client2.joinWallet(mainSecret, "Backup") // export() and store offline (print), in case the Main is lost.

// On the server (server receive mainSecret form the client):
client3. seedFromRandomWithMnemonic({passphrase, account: 2})
client3.joinWallet(mainSecret, "Server")

But I want createWallet() using Mnemonic, so that the user only need to memorize the Mnemonic and the passphrase. So when is login in I use importFromMnemonic().
What you think? Thanks for your patience.

createWallet and joinWallet can not be done offline.
passphrase is inside your json object alone. That it incorrect.
If everyone is using separate keys (seedFromRandomWithMnemonic) then you don't need to touch the "account" value. Leave it at default (0).
You can initialize credentials with an xpub only.
User should do createWallet to generate their online key and create the wallet, which the server will join using xpub (you should keep the server keys offline too if possible.) or whatever.
The user must have some way to create a key offline, and relay only the xpub and the entropy info (if you will derive from xprv or mnemonic) to the online computer to use joinWallet.

Air gapped signing, joining wallets with xpub only and signing for it later are some of the more confusing parts of bwc... so it is very hard to explain over some message like this. You will have to figure it out on your own.
As a hint, I have a PR open to allow for user to sign offline without needing anything but xprv or mnemonic.
https://github.com/bitpay/bitcore-wallet-client/pull/291/files

Thanks for your advices, I will explore this.


Removed shadow of cancel save css to align with scrollable bar

Updates on hospital and msp html file css styling. Removed slds css to keep scrollable functionality intact

@rahulmantriSFDC  @crystalz2022
Could you please review the css update. Thank You!
CC: @ahshaik1