Updating URLs of demos that moved from the DevToolsSamples to the Demos repo

The new Demos repository is meant to replace the older DevToolsSamples repository (and is more general too since it has demos from not just devtools).
Earlier, I moved all of the demos that we references in our docs out of DevToolsSamples and into Demos.
Because of this, I'm now making this change to update the URLs to these demos so they point to the new location.

Docs Build status updates of commit 509990c:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

microsoft-edge/devtools-guide-chromium/3d-view/index.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/accessibility-testing-in-devtools.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-accessibility-tree.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-analyze-no-focus-indicator.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-analyze-no-keyboard-support.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-blurred-vision.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-color-blindness.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-dark-mode.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-inspect-states.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-inspect-text-contrast.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-inspect-tool.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-issues-tool.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-reduced-ui-motion.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-tab-enter-keys.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-tab-key-source-order-viewer.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/console/console-debug-javascript.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/console/console-log.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/console/index.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/console/live-expressions.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/css/inspect.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/issues/index.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/sample-code/sample-code.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/whats-new/2021/01/devtools.md
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel

Docs Build status updates of commit f2a89b0:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

microsoft-edge/devtools-guide-chromium/3d-view/index.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/accessibility-testing-in-devtools.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-accessibility-tree.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-analyze-no-focus-indicator.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-analyze-no-keyboard-support.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-blurred-vision.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-color-blindness.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-dark-mode.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-inspect-states.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-inspect-text-contrast.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-inspect-tool.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-issues-tool.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-reduced-ui-motion.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-tab-enter-keys.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/accessibility/test-tab-key-source-order-viewer.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/console/console-debug-javascript.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/console/console-log.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/console/index.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/console/live-expressions.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/css/inspect.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/issues/index.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/sample-code/sample-code.md
:white_check_mark:Succeeded
View

microsoft-edge/devtools-guide-chromium/whats-new/2021/01/devtools.md
:white_check_mark:Succeeded
View

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel


Vendor<EMAIL_ADDRESS>and Upgrade k8s dependencies and controller-runtime

How to categorize this PR?

/area networking
/kind enhancement
What this PR does / why we need it:
Vendor gardener v1.64.0
Upgrade k8s dependencies and controller-runtime.
It also configures scraping for extension pod ( currently defaulted to false), (See https://github.com/gardener/gardener/blob/master/docs/monitoring/README.md#seed-prometheus and https://github.com/gardener/gardener/blob/dc7ff9b5dff925dfa9c5751baa9746a9e4ef05a8/charts/seed-bootstrap/charts/monitoring/templates/config.yaml#L33-L39)
Which issue(s) this PR fixes:
Fixes #
Special notes for your reviewer:
Release note:

The following dependency is updated:
- github.com/gardener/gardener: v1.59.0 -> v1.64.0
- k8s.io/* : v0.25.0 -> v0.26.1
- sigs.k8s.io/controller-runtime: v0.13.0-> v0.14.4

/lgtm


cmd/compile: replace indirect call with direct call when target is known after inlining

What version of Go are you using (go version)?

$ go version
go version devel +ef84fa0 Mon Jun 10 23:23:39 2019 +0000 linux/amd64

Does this issue reproduce with the latest release?
Yes.
What did you do?
I compiled the following functions: https://godbolt.org/z/dHW0pK.
func f(x int) int {
    return x
}

func getf() func (int) int {
    return f
}

func applyf() int {
    return getf()(2)
}

What did you expect to see?
I expected the last function not to contain any unnecessary instructions or, in a perfect world, that it would be compiled to a simple return.
What did you see instead?
Instead, there was an ineffective instruction on line 37 of the assembly code generated in the website mentioned above.
leaq    "".f·f(SB), DX

PS: Thanks to @mundaym for helping me figure this out.

That instruction loads a pointer to the closure into a register for the call.
That is required for the calling convention.
It's not necessary in this case because the closure doesn't close over any variables. But if we know that it doesn't close over any variables, we likely know the exact target and we might as well replace the indirect call with a direct call (which could then inline, which would then match your perfect world).

I think it would be fairly straightforward to convert a ClosureCall into a StaticCall in SSA when the target is known (perhaps taking a similar approach to the InterCall optimization @philhofer added in CL 38139). As far as I know going from a direct call to an inlined function isn't currently possible in the SSA backend though - and inlining is probably more valuable than a ClosureCall to StaticCall optimization in this scenario.

No longer reproduces


Fix code coverage.

kcov needs libiberty for --verify to work, and it also has a bug that causes
it to crash dealing with Rust source files from the standard library, so
use --include-pattern to ignore anything that's not from this crate.

Coverage increased (+94.06%) to 94.063% when pulling 4ddc3697e0cf7dc2ce65bce75264b8da21ff42e3 on luser:fix-coverage into b94701cca2be4dae1bb4518c38c4e439ee583f55 on gimli-rs:master.


HTML fragment not rendering correctly in detail page

See this dataset:
http://dev.facebase.org/data/record/#1/legacy:dataset/id=4894
The html fragment that is included in the description attribute does not look right.

@robes By executing the GET request
curl -k -H "Accept: application/json" http://vm-dev-030.misd.isi.edu/ermrest/catalog/1/entity/dataset/id=4894
I got back a JSON object, one of the keys "description" has the value
"This dataset includes the results of ChIP-Seq analysis of p300 bound regions in E13.5 mouse palates. The results are also presented as tracks on the Genome Browser (see links in the External References section).
The data include the following information for each peak called:

 \t
 \t\tranking.   Called peaks are ranked by maximum coverage, those with equal maximum coverage are then ranked by local p-value.
 \t
 \t\tthe location of the peak, shown as chromosome start and end positions (mouse genome build mm9)
 \t
 \t\tpeak length
 \t
 \t\tposition of the peak summit
 \t
 \t\ttags: the number of reads in peaks (# reads in region, not maximum read coverage depth)
 \t
 \t\tscore: -(log(pvalue))
 \t
 \t\tfold enrichment: enrichment in peak vs input sample
 \t
 \t\tFDR: false-discovery rate annotation based on post-peak calling filtering of peaks based on genome annotation

  To download the data, log in and click on the \"Download dataset\" button."

Thanks. (Next time I should just look into it myself!)


clientConnectionFailed() and other ClientFactory methods are not called for WAMP applications.

Background
The old way to have a reactor call connect for you was to subclass twisted.internet.ClientFactory, create an instance of your class, and pass that to reactor.connectTCP.
Later versions of Twisted added the endpoints API, which provides a different way of having the reactor call connect. With the endpoints API, you pass twisted.internet.endpoints.clientFromString a string encoding the destinations (protocol, IP address, port) and you are returned a client object, which has a connect method. Then you call the connect method, passing it a transport factory.
According to the [Twisted documentation] (http://twistedmatrix.com/documents/current/core/howto/endpoints.html), the endpoints API is preferred over ClientFactory for new code.
Autobahn, ClientFactory, and the Endpoints API
In general, the twisted/websocket examples use the ClientFactory/connectTCP API.
By contrast, the twisted/wamp examples use the endpoints API directly, or indirectly, by using autobahn.twisted.wamp.ApplicationRunner.
The Problem
autobahn.twisted.websocket.WebSocketClientFactory, which is used by WAMP applications, subclasses ClientFactory. However, since ApplicationRunner uses the endpoints API to make connections, the ClientFactory methods (startedConnecting, clientConnectionFailed, and clientConnectionLost) are never called, which is surprising and confusing.
According to the note "If you've used ClientFactory before..." on this [page] (http://twistedmatrix.com/documents/current/core/howto/endpoints.html), it is the intended behavior of the endpoints API to not call ClientFactory methods.
Possible Solutions

Have autobahn.twisted.websocket.WebSocketClientFactory subclass t.i.Factory instead of t.i.ClientFactory.

Given that the ClientFactory methods are not called for WAMP applications, it would be more clear if autobahn.twisted.websocket.WebSocketClientFactory subclassed twisted.internet.factory instead of twisted.internet.ClientFactory.

Change ApplicationRunner to use ClientFactory instead of the endpoints API.

This would enable WAMP applications access to functionality that isn't
yet available with the endpoints API, e.g. https://twistedmatrix.com/trac/ticket/4735

Thanks for the nice summary!
My opinion is to subclass Factory and provide an Autobahn/WAMP-specific reconnect options. As the Twisted bug notes, there are two main cases: you never connected at all; or, you were connected fine but the connection went away. So there's sort of "retry" versus "re-connect" logic.
For WAMP there's conceptually two sub-cases on the "re-connect" side, too: if the client disconnected "on purpose" (e.g. called leave()) versus if the router (broker/dealer) side disconnected the client for some reason.
So what we want from this ticket are the building-blocks so that a Twisted user can express their desired retry and/or reconnect logic to Autobahn.

@mkohler Thanks for the wrapup! We need to address this soon. AutobahnJS has a quite elaborated reconnection behavior - and we need that in AutobahnPython too.

In general, the twisted/websocket examples use the ClientFactory/connectTCP API.
By contrast, the twisted/wamp examples use the endpoints API directly, or indirectly, by using autobahn.twisted.wamp.ApplicationRunner.

Yep. This has mostly historic reasons. Essentially, all the examples should use endpoints.

Have autobahn.twisted.websocket.WebSocketClientFactory subclass t.i.Factory instead of t.i.ClientFactory

As you point out, it may be clearer to subclass t.i.Factory. Same for server classes.
In essence, I agree with @meejah : > My opinion is to subclass Factory and provide an Autobahn/WAMP-specific reconnect options.
For the options and the (re-)connect logic: see AutobahnJS https://github.com/tavendo/AutobahnJS/blob/master/package/lib/connection.js#L90

related to https://github.com/tavendo/AutobahnPython/issues/295

As the tx base classes ClientFactory and ServerFactory don't add any functionality

http://twistedmatrix.com/trac/browser/tags/releases/twisted-15.4.0/twisted/internet/protocol.py#L469
http://twistedmatrix.com/trac/browser/tags/releases/twisted-15.4.0/twisted/internet/protocol.py#L141

I guess it's save when we just subclass Factory for both autobahn.twisted.websocket.WebSocketClientFactory  and `autobahn.twisted.websocket.WebSocketServerFactory.
The reconnection thing is already worked on in different tickets.

However, since ApplicationRunner uses the endpoints API to make connections, the ClientFactory methods (startedConnecting, clientConnectionFailed, and clientConnectionLost) are never called, which is surprising and confusing.

That's right, but the change I made has consequences https://github.com/tavendo/AutobahnPython/issues/500
Essentially, it breaks connectTCP. Oh well.

@mkohler So while it's confusing, subclassing ClientFactory works with both connectTCP and endpoints.
@meejah I'd say, backout the change. The only alternative I see is officially dropping support for using WebSocketClientFactory with connectTCP at all. Plus then changing most of our own WebSocket examples. Would that be better?

Alright, I've backed out the change. I should have looked more closely. There is no issue anyway:

the ClientFactory methods (startedConnecting, clientConnectionFailed, and clientConnectionLost) are never called, which is surprising and confusing.

Correct. But the origin of this is Twisted going from old world (connectTCP) to new world (endpoints).
Hence: won't fix (here)

Since "the future is endpoints", yes that sounds like the right approach (changing the examples, but keeping connectTCP working for now). Perhaps if/when we change dependencies to Twisted 15+ we can drop not-endpoints...?


Enum specification

There should be a way to define "1 of n discrete values".

Fixed with 3e64629


Support Request: I can't update or reinstall Switchbot plugin

Describe Your Problem
I can't update or reinstall Switchbot plugin. Please help me to update it before closing the topic
Relevant log output
USER: pi
DIR: /usr/local
CMD: sudo -E -n npm install -g<EMAIL_ADDRESS>
(##################) ⠙ reify:googleapis: timing reifyNode:node_modules/@switchbot/home
><EMAIL_ADDRESS>install
> node-pre-gyp install --fallback-to-build --update-binary

node-pre-gyp ERR! install response status 404 Not Found on https://github.com/abandonware/node-bluetooth-hci-socket/releases/download/0.5.3-10/bluetooth_hci_socket-0.5.3-10-node-v108-linux-arm.tar.gz(##################) ⠼ reify:googleapis: timing reifyNode:node modules/@switchbot/home
make: Entering directory '/usr/local/lib/node_modules/@switchbot/homebridge-switchbot/node_modules/@abandonware/bluetooth-hci-socket/build'
  CXX(target) Release/obj.target/bluetooth_hci_socket/src/BluetoothHciSocket.o
make: g++: No such file or directory
make: *** [bluetooth_hci_socket.target.mk:111: Release/obj.target/bluetooth_hci_socket/src/BluetoothHciSocket.o] Error 127
make: Leaving directory '/usr/local/lib/node_modules/@switchbot/homebridge-switchbot/node_modules/@abandonware/bluetooth-hci-socket/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:203:23)
gyp ERR! stack     at ChildProcess.emit (node:events:513:28)
gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:291:12)
gyp ERR! System Linux 5.10.103-v7l+
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "build" "--fallback-to-build" "--update-binary" "--module=/usr/local/lib/node_modules/<EMAIL_ADDRESS>"--module_name=bluetooth_hci_socket" "--module_path=/usr/local/lib/node_modules/@switchbot/homebridge-switchbot/node_modules/@abandonware/bluetooth-hci-socket/lib/binding" "--napi_version=8" "--node_abi_napi=napi" "--napi_build_version=0" "--node_napi_label=node-v108"
gyp ERR! cwd /usr/local/lib/node_modules/@switchbot/homebridge-switchbot/node_modules/@abandonware/bluetooth-hci-socket
gyp ERR! node -v v18.16.0
gyp ERR! node-gyp -v v9.3.1
gyp ERR! not ok
node-pre-gyp ERR! build error
node-pre-gyp ERR! stack Error: Failed to execute '/usr/local/bin/node /usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --update-binary --module=/usr/local/lib/node_modules/<EMAIL_ADDRESS>--module_name=bluetooth_hci_socket --module_path=/usr/local/lib/node_modules/@switchbot/homebridge-switchbot/node_modules/@abandonware/bluetooth-hci-socket/lib/binding --napi_version=8 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v108' (1)
node-pre-gyp ERR! stack     at ChildProcess.<anonymous> (/usr/local/lib/node_modules/@switchbot/homebridge-switchbot/node_modules/@mapbox/node-pre-gyp/lib/util/compile.js:89:23)
node-pre-gyp ERR! stack     at ChildProcess.emit (node:events:513:28)
node-pre-gyp ERR! stack     at maybeClose (node:internal/child_process:1091:16)
node-pre-gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:302:5)
node-pre-gyp ERR! System Linux 5.10.103-v7l+ing reifyNode:node_modules/@switchbot/home
node-pre-gyp ERR! command "/usr/local/bin/node"<EMAIL_ADDRESS>"install" "--fallback-to-build" "--update-binary"
node-pre-gyp ERR! cwd /usr/local/lib/node_modules/@switchbot/homebridge-switchbot/node_modules/@abandonware/bluetooth-hci-socket
node-pre-gyp ERR! node -v v18.16.0
node-pre-gyp ERR! node-pre-gyp -v v1.0.10
node-pre-gyp ERR! not ok
Failed to execute '/usr/local/bin/node /usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --update-binary --module=/usr/local/lib/node_modules/<EMAIL_ADDRESS>--module_name=bluetooth_hci_socket --module_path=/usr/local/lib/node_modules/@switchbot/homebridge-switchbot/node_modules/@abandonware/bluetooth-hci-socket/lib/binding --napi_version=8 --node_abi_napi=napi --napi_build_version=0 --node_napi_label=node-v108' (1)

><EMAIL_ADDRESS>install
> node-gyp-build

make: Entering directory '/usr/local/lib/node_modules/@switchbot/homebridge-switchbot/node_modules/@abandonware/noble/build'
  SOLINK_MODULE(target) Release/obj.target/noble.node
make: g++: No such file or directory
make: *** [noble.target.mk:20: Release/obj.target/noble.node] Error 127
make: Leaving directory '/usr/local/lib/node_modules/@switchbot/homebridge-switchbot/node_modules/@abandonware/noble/build'
gyp ERR! build error
gyp ERR! stack(##################) ⠙ reify:googleapis: timing reifyNode:node_modules/@s Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:203:23)
gyp ERR! stack     at ChildProcess.emit (node:events:513:28)
gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:291:12)
gyp ERR!   Please review log for details.

Config for homebridge-switchbot
No response
Screenshots
No response
Device & Model
Pi
Node.js Version
v18.16.0
NPM Version
v9.5.1
Homebridge Version
v1.6.0
Homebridge SwitchBot Plugin Version
v2.6.2
Homebridge Config UI X Plugin Version
No response
Operating System
Raspbian

once again, please Look through what they had to do to fix this on #713,. This is not a plugin issue.

once again, please Look through what they had to do to fix this on #713,. This is not a plugin issue.

I tried all but still can't install that bluetooth-hci-socket & noble packages

once again, please Look through what they had to do to fix this on #713,. This is not a plugin issue.

I tried all but still can't install that bluetooth-hci-socket & noble packages

@mkizzle2906 Try this: https://github.com/OpenWonderLabs/homebridge-switchbot/issues/691#issuecomment-1510001817
But also install noble after the Hci socket:
npm i @abandonware/noble

#691 (comment)

I don't have this following folder : /var/lib/homebridge/node_modules/@switchbot
and I can't install neither bluetooth-hci-socket or noble with that command...

#691 (comment)

I don't have this following folder : /var/lib/homebridge/node_modules/@switchbot
and I can't install neither bluetooth-hci-socket or noble with that command...

Look at your error log. Your folder seems to be called '/usr/local/lib/node_modules/@switchbot/'

Thanks @marvinjoa! I will add this to a BLE wiki, I have on here that you can reference.

@marvinjoa Bluetooth Issues Wiki
Let me know if you want me to add or remove anything.

@marvinjoa Bluetooth Issues Wiki
Let me know if you want me to add or remove anything.

Thanks, this will make it easier for everybody!
But even with this, people that didn't use the HomeBridge image, but installed HomeBridge manually, will get confused when the folders I mentioned don't exit, cause they don't look in their own error logs 😭

i might need this wiki page for govee plugin 😅

Thanks, this will make it easier for everybody!
But even with this, people that didn't use the HomeBridge image, but installed HomeBridge manually, will get confused when the folders I mentioned don't exit, cause they don't look in their own error logs 😭

We can only help so much...


[HOLD for payment 2022-11-07] [$250] Clicking on "New Messages" jumps to newest messages, skipping over any messages marked unread report by @chauchausoup

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:

Go to any chat
Click at Mark as Unread
Click on New Messages button

Expected Result:
Clicking "new messages" should jump directly to the message marked as Unread
Actual Result:
Clicking "new messages" jumps to the bottom of the message thread, skipping over the message marked as unread
Workaround:
Unknown
Platform:

Where is this issue occurring?

Web

Version Number: 1.2.11-2
Reproducible in staging?: Y
Reproducible in production?: Y
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos:
https://user-images.githubusercontent.com/43996225/193866710-b8402785-759a-4f1f-aa86-80b0878cb3c9.mov
https://user-images.githubusercontent.com/43996225/193866742-10e455e5-acd7-4d2d-862a-b61a85c3e9c5.mp4
Expensify/Expensify Issue URL:
Issue reported by: @chauchausoup
Slack conversation: https://expensify.slack.com/archives/C01GTK53T8Q/p1664725500869019
View all open jobs on GitHub

I reproduced this on the desktop app:
https://user-images.githubusercontent.com/29386373/193938022-1bc5a558-2b98-4196-84f0-9276480058bc.mp4

Oops, I'll get to this today, sorry!

Proposal
Problem

Currently, the logic scroll to unread message is using scrollToBottom  function
https://github.com/Expensify/App/blob/7b21103bb56eb0cf3fc1561715613d2a16c3255f/src/pages/home/report/ReportActionsView.js#L285

function ReportScrollManager.scrollToIndex isn't work correctly in web because it has different behavior scroll from native

Solution
In https://github.com/Expensify/App/blob/7b21103bb56eb0cf3fc1561715613d2a16c3255f/src/pages/home/report/ReportActionsView.js#L286
we'll change the function name scrollToBottomAndMarkReportAsRead  to scrollToUnreadMsgAndMarkReportAsRead
we'll also change to use scrollToIndex. In theory, we just need to pass this.props.report.lastReadSequenceNumber as the index but we're using inverted flatList so we have to pass this.props.report.maxSequenceNumber - this.state.newMarkerSequenceNumber
-        this.scrollToBottomAndMarkReportAsRead = this.scrollToBottomAndMarkReportAsRead.bind(this);
+       this.scrollToUnreadMsgAndMarkReportAsRead = this.scrollToUnreadMsgAndMarkReportAsRead.bind(this);

-    scrollToBottomAndMarkReportAsRead() {
-        ReportScrollManager.scrollToBottom();
+    scrollToUnreadMsgAndMarkReportAsRead() {
+        ReportScrollManager.scrollToIndex({animated: true, index: this.props.report.maxSequenceNumber - this.state.newMarkerSequenceNumber}, false);
        Report.readNewestAction(this.props.report.reportID);
    }

-                            onClick={this.scrollToBottomAndMarkReportAsRead}
+                           onClick={this.scrollToUnreadMsgAndMarkReportAsRead}

In https://github.com/Expensify/App/blob/main/src/components/InvertedFlatList/BaseInvertedFlatList.js
we need to measure again because the image can be loaded later. And we also pass sizeMap to FlatList to calculate the offset value
    measureItemLayout(nativeEvent, index) {
        const computedHeight = nativeEvent.layout.height;

 -       // We've already measured this item so we don't need to
 -       // measure it again.
 -       if (this.sizeMap[index]) {
 -           return;
 -       }

      <FlatList
                // eslint-disable-next-line react/jsx-props-no-spreading
                {...this.props}
                ref={this.props.innerRef}
                inverted
                renderItem={this.renderItem}
+              sizeMap={this.sizeMap}

In https://github.com/Expensify/App/blob/7b21103bb56eb0cf3fc1561715613d2a16c3255f/src/libs/ReportScrollManager/index.js#L14
we have to re-implement the logic scrollToIndex in non-native platform
because we're using inverted flatList so we have to calculate the total offset value from top to index, then + paddingTop, + viewOffset, - clientHeight * index.viewPosition if need. Finally pass to offset value in scrollToOffset function

-    flatListRef.current.scrollToIndex(index);
+    const sizeMap = flatListRef.current.props.sizeMap;
+    const clientHeight = flatListRef.current.getScrollableNode().clientHeight;
+    const paddingTop = parseFloat(flatListRef.current.getScrollableNode().childNodes[0].style.paddingTop || '0px');

+   const sizeArray = _.map(_.values(sizeMap), s => s.length);
+    const sumNum = _.reduce(sizeArray.slice(0, (index.index)), (acc, val) => acc + val);
+   flatListRef.current.scrollToOffset({
+       animated: index.animated,
+       offset: (sumNum + paddingTop + (index.viewOffset || 0)) - (clientHeight * (index.viewPosition || 0)),
+    });
}

https://user-images.githubusercontent.com/113963320/195074818-5736b458-7c56-4b14-824a-ed1a6a7b533a.mp4

https://user-images.githubusercontent.com/113963320/195074906-b0cd9614-8351-45fd-a4ea-808f74ec983b.mp4

Job posting: https://www.upwork.com/ab/applicants/1579975844227059712/job-details

@eVoloshchak Hey! Ready for your review on the proposal ^^^

Need to test this one thoroughly, expect a review in 24 hours

Maybe  all unread indicator error should be on hold, because Roryabraham will implement new algorithm to solve it. Here is slack conversation:
https://expensify.slack.com/archives/C01GTK53T8Q/p1665794707786899

@tienifr proposal looks good, confirmed it working on all of the platforms
A couple of small things:

Is there a way to obtain clientHeight and paddingTop differently? Maybe there are constants defined in styles.js? If not it's ok
Could you please overexplain what is the sizeArray and sumNum variables and what we need them for?

@eVoloshchak sorry, I don't catch on your mean

I'm updating the logic for scrollToIndex not scrollToBottom
We're implementing invertedWheelEvent in our project and FlatList in react-native-web works well,  so I don't think we should change the inverted lists inside of the package itself

I'm updating the logic for scrollToIndex not scrollToBottom

I was talking about this function, but yes, I can see that your implementation calls scrollToBottom inside of it

We're implementing invertedWheelEvent in our project

Oh cool, didn't notice it. In that case your fix seems like the best solution. We essentially need to correctly calculate the offset to the first unread message and scroll to it, which it does.
I assume you have already seen this but if not, please take a look at the STYLE.md contributing guide before submitting the PR.
cc: @conorpendergrast, @tienifr's proposal looks good to me
🎀👀🎀 C+ reviewed!

Great! @srikarparsi Are you happy here too? If so, I'll hire via Upwork (this process)

yup this looks good to me as well, assigning @tienifr to the issue

Thanks @srikarparsi , I applied to the job and the PR will be ready by October 21

Via Upwork, hired @tienifr to fix the issue, @chauchausoup for reporting the bug,  @eVoloshchak as contributor+

@srikarparsi @eVoloshchak @tienifr Hey! I've added some proposed testing steps. Who can help with the second, third and fourth points (finding the PR that introduced the bug, the comments on that PR, and starting a discussion in #contributor-plus)? Then, I will get started on the last 3 steps!

Looks like we're all set to pay this. I'll review the process and will do that tomorrow!

And, also, this checklist above!

Fantastic, thanks @eVoloshchak !

Just writing down for myself that these steps are taken in order, so I'll be paying via UpWork (this process) once steps 1 to 4 are done

The PR that introduced the bug has been identified. Link to the PR: https://github.com/Expensify/App/pull/4603
The issue exists from the creation of the component, probably just an edge case that wasn't tested (or  Mark as unread functionality didn't exist at the time)
The offending PR has been commented on, pointing out the bug it caused and why, so the author and reviewers can learn from the mistake. Link to comment: https://github.com/Expensify/App/pull/4603#issuecomment-1310192920
A discussion in #contributor-plus has been started about whether any other steps should be taken (e.g. updating the PR review checklist) in order to catch this type of bug sooner. Link to discussion:  Not sure about this, it's just an edge case that was missed
cc: @conorpendergrast

Not a regression but a new feature.

Ok, I've posted a recommended regression test (internal channel link) and have posted the proposal to not add anything else to test for this (#contributor-plus link).
Last step now, to pay the three people we hired.

All paid, and all set here. Thanks all!

Woops I missed some steps last week; contracts ended and job removed now

There is a new issue report which looks like a regression and should have been tested on this PR. https://expensify.slack.com/archives/C049HHMV9SM/p1668507952621799

@parasharrajat Reopening this issue as per this https://expensify.slack.com/archives/C049HHMV9SM/p1668537124299269?thread_ts=1668507952.621799&cid=C049HHMV9SM

@tienifr, could you take a look at this please?

@tienifr Bump for participating in that regression discussion!

I'm looking at this issue @conorpendergrast @eVoloshchak

@conorpendergrast sorry but i can't open your link, I think it's on private channel. Pls let me know if I miss something. Thanks

@tienifr, it's in #expensify-bugs channel, to get an invite just send an email.
Meanwhile, I'll just copy the discussion from slack
Bug:  Clicking “New Message” doesn’t scroll to the correct chat.
Steps:

Go to a report that has a few 100 messages
Mark any message as unread
Scroll above the message you’ve marked as unread
Click the green “New message” button
Repeat step 4 multiple times

Expected: Screen scrolls to the message marked as unread
Actual: Screen keeps scrolling up
Version: v1.2.26-0 (production)
Platform: Web
https://user-images.githubusercontent.com/9059945/202998688-344eae05-a1ef-4da5-a2ba-e7d67edaa6a6.mov

I've sent the email yesterday, still waiting to get added to the #expensify-bugs channel

Problem

Currently when user deletes comment, in reportActions_${id} just set html='' in field mesage and do not change maxSequenceNumber. Please check evidence below:

So in https://github.com/Expensify/App/blob/7b21103bb56eb0cf3fc1561715613d2a16c3255f/src/pages/home/report/ReportActionsView.js#L284 formula for calculating index index = this.props.report.maxSequenceNumber - this.state.newMarkerSequenceNumber isn't work correctly in web because in list comment still has index of deleted comment.

Solution
In https://github.com/Expensify/App/blob/7b21103bb56eb0cf3fc1561715613d2a16c3255f/src/pages/home/report/ReportActionsView.js#L284
we'll caculate countDeletedAction and recalculate the value of the index based on countDeletedAction.
  scrollToUnreadMsgAndMarkReportAsRead() {
+        let countDeletedAction = 0;
+        for (let i = this.state.newMarkerSequenceNumber; i < this.props.report.maxSequenceNumber; i++) {
+            if (ReportActionsUtils.isDeletedAction(this.props.reportActions[i])) {
+                countDeletedAction++;
+            }
+        }
-       ReportScrollManager.scrollToIndex({ animated: true, index: this.props.report.maxSequenceNumber - this.state.newMarkerSequenceNumber}, false);
+       ReportScrollManager.scrollToIndex({ animated: true, index: this.props.report.maxSequenceNumber - this.state.newMarkerSequenceNumber - countDeletedAction }, false);
       Report.readNewestAction(this.props.report.reportID);
    }

Before change:
https://user-images.githubusercontent.com/113963320/203266910-0aa04e4d-ec87-4ee5-b712-2d6b595e97cd.mp4
After change:
https://user-images.githubusercontent.com/113963320/203266971-9cb1824e-4a25-4c47-ac87-d6e304124893.mp4

@tienifr, nice job investigating this one!
I have a couple of questions

Can we actually change maxSequenceNumber to the correct one? Will this break something else?
Does this mean this bug shouldn't exist in chats that don't have deleted messages?

I think when we change maxSequenceNumber to the correct one, scroll to new message will not work correctly.
Example: When we has 10 messages, delete the first 4 messages and we need to scroll to 9th message in FlatList
Yeah, i think so

Not overdue, will review the proposal tomorrow

@tienifr, this is looking much better, good job on discovering it!
There is still a bug however, if you mark a message unread and then delete a message from chat, the position to which it scrolls is wrong
https://user-images.githubusercontent.com/9059945/204526170-eff5a18d-a19e-4715-b6f1-d5f0c408d0b0.mov

Hey Everyone!
Clearly there is some confusion here caused by this issue here -> https://github.com/Expensify/App/issues/11584
From the look of it... it was not triaged correctly and should have been immediately closed as the "Expected behavior" listed is wrong. I'd suggest we revert things all the way back to how they were before this PR was created and stop accepting proposals to fix anything related to this (and we should take this Internal for now to clean up the mess).
@srikarparsi can you make this a top priority? I think we should also do a RCA here because a feature that should never have been implemented intentionally hit production. This is just my opinion, but to me that's worse than any bug. It signals that we're no longer in control and likely need to change something about our process.

This is just my opinion, but to me that's worse than any bug. It signals that we're no longer in control and likely need to change something about our process.

I agree with @marcaaron here. @conorpendergrast @srikarparsi I think we need to treat this an a top priority for today and get the RCA published. We've got to figure out how we avoid this in the future, and especially changing defined/designed behaviors in the app.

Before we do that, let's agree the behaviour we expect. Discussing that in Slack now!

Reversion PR is here: https://github.com/Expensify/App/pull/13230
And @srikarparsi is working on an RCA!

Scroll up, Melv

Issue reverted here: https://github.com/Expensify/App/pull/13230
Will close after the PR gets deployed and I respond to @conorpendergrast's comments in the RCA

PR to address one change in the RCA: https://github.com/Expensify/App/pull/13518
Will bring up the other proposed changes from the RCA in slack

👋 Hey everyone! Can you give me an update on why this issue is still open, and what we need to do to close it out? I'm trying to piece it together:

The PR to revert the change has been merged
The linked PR with some action from the RCA has been closed #13518
Potentially something about other proposed changed from the RCA are in slack, but not sure where that is or what (if any) actions we need to take from that?

Thanks!

hey @trjExpensify! I think this issue is ready to be closed out, the PR has been reverted, the RCA has been completed, and I'm talking to marc about the proposed changes in the RCA but I believe that can be continued with this issue closed. @tjferriss @tjferriss please reopen it though if there's something that I'm missing.


fix(radar_fusion_to_detected_object): move headers to a separate directory

Description

This PR moves headers to a directory that matches the name of the package.
See https://github.com/autowarefoundation/autoware/issues/4070
Tests performed

Not applicable.
Effects on system behavior

Not applicable.
Pre-review checklist for the PR author
The PR author must check the checkboxes below when creating the PR.

[x] I've confirmed the contribution guidelines.
[x] The PR follows the pull request guidelines.

In-review checklist for the PR reviewers
The PR reviewers must check the checkboxes below before approval.

[ ] The PR follows the pull request guidelines.

Post-review checklist for the PR author
The PR author must check the checkboxes below before merging.

[ ] There are no open discussions or they are tracked via tickets.

After all checkboxes are checked, anyone who has write access can merge the PR.

@scepter914 my apologies, I've fixed the errors in the latest commit. This PR is now ready for review.


:sparkles: Adds support for custom titles with dynamic values

⚠ Fixes:
ℹ What is the context for these changes?

This PR adds support for custom discountTitles that retain the discount value within the title. This will work for both locked and unlocked title variants.
This also relocates some code that was used for tokengate state / titles, etc. The files were quite large and becoming cumbersome to comb through while attempting to add support for new features.
🕹 Demonstration

Dynamic values

Locked
Unlocked

Order limits

ALL
ANY
Pluralization

🎩 How can this be tophatted?

I updated Storybook to include the ability to specify custom titles in it. To place the dynamic value anywhere, just place {{value}} inside of your custom title.
📖 Storybook
✅ Checklist

[ ] ~Tested on mobile~ N/A
[x] Tested on multiple browsers
[ ] ~Tested for accessibility~ N/A
[x] Includes unit tests
[ ] ~Updated relevant documentation for the changes (if necessary)~ N/A

/snapit


Start ydbd server from dynconfig

Make ydbd server supporting start from dynconfig (config.yaml with metadata and selectors)

Closes #11745


Feature Request - Add support for socket/tcp flashes

Would be great to be able to use this tool with tcp devices ;)

@tube0013 FYI, noticed puddly is developing a "Universal Silicon Labs Flasher" for Silabs OTW firmware update:
https://github.com/puddly/universal-silabs-flasher
Looks like will be used in a Home Assistant Add-on for automatically flashing SkyConnect and Yellow via tcp?
https://github.com/home-assistant/addons-development/pull/86

universal-silabs-flasher works with socket:// 😀

For those who don't know, universal-silabs-flasher is a much more capable flasher and available at https://github.com/NabuCasa/universal-silabs-flasher.


[WIP] Can add menu to place with meals + shows the menus on the place page

[WIP] One more thing with the addMenuForm needs to be fixed. It doesn't correctly save the selected meals.

Fixes

the DB relation between a Menu and a Meal.

Adds

Possibility to add a Menu to a Place with different Meals
Possibility to view the different Menus of a Place


Fixed Responsiveness Issue Of Chimoney Redeem Airtime Based On Issue #416

Fixed Responsiveness Issue Of Chimoney Redeem Airtime Based On Issue #416
Here are the screenshots after doing fixes:

Hi @phyleria I hope you won't face any problems merging it now.


not an issue, an idea

Not sure how I can put requests or improvement ideas in GitHub, but here is one:
Would it be possible to delete the files from the printer? Right now, you have to use the touch screen, and that is clumsy/slow.
If you could have an 'explorer-like' view of the files on the printer and the ability to delete some.
Does the API support that?

Not currently, all I found was reverse engineering of Chitubox communication with the printer and it doesn't know that.
But I'm currently working on patching the firmware and if it succeeds, I'll be able to connect windows share and I'm strongly considering to do a make my own printing app (firmware side), because that one is a tragedy.. It runs on linux and it knows basically nothing, making a proper web interface would probably kill them..
https://github.com/arsi-apli/UltraFirmwareToolkit

Very interesting. I will keep my eye on that.


info option is missing

Hi,
I have set in datatables.yaml :
datatables:
    options:
        info: false

So info options is not recognized by the bundle but correctly if i set it directly in javascript :
$('#datatable').initDataTables({{ datatable_settings(datatable) }}, { "info": false });

Is it possible to add it in the bundle ?
Thanks

There is a philosophy there - we only allow serverside setting of options that make sense to have control of from the server side. info is a display option, and as such not supported. Setting it in the templates/JS is therefore the correct course of action.
I am aware that this philosophy can be considered flawed, and open to discussion on it, but it would have to be a wider discussion (info isn't the only option not supported).


Proposal: improve exposed APIs to better support using Helm as a package

First of all, thanks for caring about third parties utilizing Helm as a package and not the full fledged helm binary by merging #7401.
I have two additional proposals, both aimed at making it easier to consume Helm packages for third party dependents:

[x] Extend the getter package with a timeout option to allow finer grain control over the request when utilizing it (outside an e.g. downloader context) to download charts from Helm repositories.

[ ] Introduce the proper usage of a context.Context in the action package (and downward calls). This again, would allow third parties to utilize Helm functionalities without using the helm binary, but while making it possible to pass along an e.g. context.WithTimeout to stay in control over the long running action.

I am open to alternative proposals and/or questions.

Hi @hiddeco. Thank you for sharing.
The timeout feature seems fairly straightforward. On the other hand, I'm curious how that will translate to a new Helm feature. As far as I understand #7950 only introduces it to the package, but it's not integrated with the rest of the CLI. Why is that?
In regards to your second proposal, that might be a harder pill to swallow. Kubernetes 1.18 just introduced contexts to their client, effectively breaking userspace during the upgrade process. We may have to hold off until Helm 4 unless there's a way we can do it in a backwards-compatible fashion.
In the future, can you please open one ticket for each work item? That way we can track those discussions separately. Thanks.

On the other hand, I'm curious how that will translate to a new Helm feature. As far as I understand #7950 only introduces it to the package, but it's not integrated with the rest of the CLI. Why is that?

I ran across the lack of control on the timeout while utilizing the getter package to fetch and store Helm charts as an artifact for later usage, and not while using helm itself. This is something I would expect more projects to do given Helm is a packaging solution, and it seemed thus more useful to me to try to patch it upstream than to copy and modify the HTTPGetter (times n as I would need this modified getter in multiple projects).
I would be happy to hook it up to some CLI flag if that would help justify the change and be useful to helm binary users, but I do not think adding a knob for the sake of knobs is something to strive for.

In regards to your second proposal, that might be a harder pill to swallow. Kubernetes 1.18 just introduced contexts to their client, effectively breaking backwards compatibility for everyone (including Helm) during the upgrade process.

I was not expecting this to happen soon given these exact reasons but nonetheless wanted to make the proposal for a future version. One way I can imagine making it backwards compatible would be to introduce new context allowing methods and backport the old ones using context.TODO(), but I am saying this without knowing the ins-and-outs of the Helm core.

In the future, can you please open one ticket for each work item? That way we can track those discussions separately. Thanks.

:heavy_check_mark:, also happy to move one of the list items to a separate issue.

I would prefer to merge the PR as-is and then evaluate adding it to the Helm client. I have been working with Helm users on various issues with timeouts in --wait, and I am really nervous about adding more timeouts right now. I think we'll get there... but I want to play it safe for a bit longer. In the meantime, adding this to API usage would mean that experienced developers will be able to use it (and consequently test it) before we use it more broadly.
That's my 0.2, but I could definitely be talked out of this if you think it is important to add to the CLI right away, @bacongobbler

Lack of context support in the action package is a deal-breaker for upgrading to v3 from the old v2 helm package.

We'd be happy to look at proposals which introduce context to the action package in a backwards-compatible fashion, @bkeroackdsc. Feel like taking that one on?

That's my 0.2, but I could definitely be talked out of this if you think it is important to add to the CLI right away, @bacongobbler

Nope! I was just curious if this feature was also requested at the CLI level too. It seems like an easy feature to support in the SDK.

Feel like taking that one on?
@bacongobbler I'll see what I can do in the next week or so.

Hi, @hiddeco - thank you for your detailed proposals! If you'd like to submit the remaining item as a formal proposal, we now have a documented process: https://github.com/helm/community/blob/master/hips/hip-0001.md - meanwhile, I will close this issue. Thanks!

Hi! After circling back to this and digging into the code a bit, this is more complex than it was with Helm v2, due to the internal use (in pkg/kube) of the kubernetes cli-runtime package. Specifically, Helper. Even though the internal k8s client version supports contexts, the cli-runtime Helper data structure methods do not. After a superficial search I found no issues or proposals in the upstream k8s project to add context support to this package.
Thus we are left with a few options to allow cancellation in Helm pkg/actions via contexts:

Vendor the cli-runtime package, add context support the Helper methods. Add a note to explore upstream changes in the future so we can remove the vendor copy.
Refactor 'pkg/kube' to not use cli-runtime.Helper. This looks like this would be a large change.
Implement wrapper functions in pkg/kube around any k8s primitive calls, allowing early return if the context is cancelled. There's a small chance this could result in leaked goroutines or swallowed errors from k8s, but may be acceptable to minimize code changes.

@bacongobbler any guidance or feedback? My preferences (in order) would be 3, 1, 2.

Hi! After circling back to this and digging into the code a bit, this is more complex than it was with Helm v2, due to the internal use (in pkg/kube) of the kubernetes cli-runtime package. Specifically, Helper. Even though the internal k8s client version supports contexts, the cli-runtime Helper data structure methods do not. After a superficial search I found no issues or proposals in the upstream k8s project to add context support to this package.
Thus we are left with a few options to allow cancellation in Helm pkg/actions via contexts:

Vendor the cli-runtime package, add context support the Helper methods. Add a note to explore upstream changes in the future so we can remove the vendor copy.
Refactor 'pkg/kube' to not use cli-runtime.Helper. This looks like this would be a large change.
Implement wrapper functions in pkg/kube around any k8s primitive calls, allowing early return if the context is cancelled. There's a small chance this could result in leaked goroutines or swallowed errors from k8s, but may be acceptable to minimize code changes.

@bacongobbler any guidance or feedback? My preferences (in order) would be 3, 1, 2.

$0.02
From a maintainer perspective, I would avoid vendoring cli-runtime at all cost. Forking it and using a replace in go.mod would be better, but still not optimal.

$0.02
From a maintainer perspective, I would avoid vendoring cli-runtime at all cost. Forking it and using a replace in go.mod would be better, but still not optimal.


⚠ Bofrost.at has degraded performance

In 0c095e1, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 1615 ms

Resolved: Bofrost.at performance has improved in 2a55451.


feat: Init Zoho Creator dbt for Metadata portion of sync

dbt for the new Zoho Creator connector! Note this is only for the Meta API Endpoints and not the Bulk endpoints
PR for full DAG which is also syncing Bulk Reports - https://github.com/community-tech-alliance/airflow-dags/pull/349

dbt looks good to me, too.


feat: retry a few times in RunTransaction.

The error rate for read-write transactions without retry seems to be in the
[0.5%, 1%] range.  In practice, this means that most of our builds are failing.
As a temporary workaround this PR introduces a simple retry loop to
RunTransaction.  It uses hard-coded retry and backoff strategies, but they
seem to work well in practice.
I wrote a test to verify the error rate is lower, and it seems to pass consistently,
but it is probably too expensive, it runs 32,000 transactions, but if we assume the
failure rate with retries is about 1.25e-7 then we can get away with about 6,000
trials.  Assuming we accept this PR I will create an issue to make the test cheaper
to run (it depends on #436).

This change is

I made this change because without it so many CI builds fail that I cannot make any progress.


Pin holoviz packages to param <2

Checklist

[x] Used a static YAML file for the patch if possible (instructions).
[ ] Only wrote code directly into generate_patch_json.py if absolutely necessary.
[x] Ran pre-commit run -a and ensured all files pass the linting checks.
[x] Ran python show_diff.py and posted the output as part of the PR.
[x] Modifications won't affect packages built in the future.

Param 2 is going to be released in the next few days. Param is a foundational library of the HoloViz ecosystem and is going through a major release, it comes with breaking changes that can result in a very bad experience if Param 2 is installed with versions not supporting it, as Param's machinery is exerted on class creation and if it fails leads to errors on import.
This PR aims to patch all the HoloViz packages depending on Param to pin them to param <2. Ideally, and if this PR is approved of course, it would be merged before Param 2 is released to make sure that users don't create environments with older and incompatible HoloViz packages and Param 2. The next releases of these packages will pin param >=2,<3.

python show_diff.py
================================================================================
================================================================================
linux-armv7l
================================================================================
================================================================================
win-32
win-32::holoviews-1.9.5-py36_0.tar.bz2
win-32::holoviews-1.8.4-py27_0.tar.bz2
win-32::holoviews-1.7.0-py35_0.tar.bz2
win-32::holoviews-1.6.2-py27_0.tar.bz2
win-32::holoviews-1.9.3-py36_0.tar.bz2
win-32::holoviews-1.8.4-py36_0.tar.bz2
win-32::holoviews-1.9.1-py27_0.tar.bz2
win-32::holoviews-1.8.3-py35_0.tar.bz2
win-32::holoviews-1.9.2-py27_0.tar.bz2
win-32::holoviews-1.8.2-py27_0.tar.bz2
win-32::holoviews-1.9.1-py36_0.tar.bz2
win-32::holoviews-1.9.0-py35_0.tar.bz2
win-32::holoviews-1.9.0-py27_0.tar.bz2
win-32::holoviews-1.9.4-py36_0.tar.bz2
win-32::holoviews-1.8.1-py27_0.tar.bz2
win-32::holoviews-1.9.3-py27_0.tar.bz2
win-32::holoviews-1.9.2-py35_0.tar.bz2
win-32::holoviews-1.6.2-py35_0.tar.bz2
win-32::holoviews-1.5.0-py34_0.tar.bz2
win-32::holoviews-1.8.1-py35_0.tar.bz2
win-32::holoviews-1.7.0-py27_0.tar.bz2
win-32::holoviews-1.8.1-py36_0.tar.bz2
win-32::holoviews-1.5.0-py27_0.tar.bz2
win-32::holoviews-1.9.3-py35_0.tar.bz2
win-32::holoviews-1.8.4-py35_0.tar.bz2
win-32::holoviews-1.8.3-py27_0.tar.bz2
win-32::holoviews-1.5.0-py35_0.tar.bz2
win-32::holoviews-1.8.2-py36_0.tar.bz2
win-32::holoviews-1.8.0-py27_0.tar.bz2
win-32::holoviews-1.9.5-py35_0.tar.bz2
win-32::holoviews-1.7.0-py36_0.tar.bz2
win-32::holoviews-1.9.5-py27_0.tar.bz2
win-32::holoviews-1.9.0-py36_0.tar.bz2
win-32::holoviews-1.8.4-py27_1.tar.bz2
win-32::holoviews-1.8.0-py35_0.tar.bz2
win-32::holoviews-1.8.4-py36_1.tar.bz2
win-32::holoviews-1.9.2-py36_0.tar.bz2
win-32::holoviews-1.6.2-py34_0.tar.bz2
win-32::holoviews-1.9.1-py35_0.tar.bz2
win-32::holoviews-1.8.0-py36_0.tar.bz2
win-32::holoviews-1.8.4-py35_1.tar.bz2
win-32::holoviews-1.9.4-py27_0.tar.bz2
win-32::holoviews-1.8.2-py35_0.tar.bz2
win-32::holoviews-1.8.3-py36_0.tar.bz2
win-32::holoviews-1.9.4-py35_0.tar.bz2
-    "param",
+    "param <2.0.0a0",
================================================================================
================================================================================
osx-arm64
================================================================================
================================================================================
linux-ppc64le
================================================================================
================================================================================
linux-aarch64
================================================================================
================================================================================
noarch
noarch::datashader-0.7.0-py_1.tar.bz2
noarch::datashader-0.12.1-pyh44b312d_1.tar.bz2
noarch::datashader-0.11.1-pyh9f0ad1d_0.tar.bz2
noarch::datashader-0.14.1-pyh6c4a22f_0.tar.bz2
noarch::datashader-0.6.9-py_0.tar.bz2
noarch::datashader-0.12.0-pyhd3deb0d_0.tar.bz2
noarch::datashader-0.8.0-py_0.tar.bz2
noarch::datashader-0.14.0-pyh6c4a22f_0.tar.bz2
noarch::datashader-0.12.1-pyh44b312d_0.tar.bz2
noarch::datashader-0.14.1-pyh6c4a22f_1.tar.bz2
noarch::datashader-0.14.2-pyh6c4a22f_0.tar.bz2
noarch::datashader-0.11.0-pyh9f0ad1d_0.tar.bz2
noarch::datashader-0.9.0-py_0.tar.bz2
noarch::datashader-0.6.6-0.tar.bz2
noarch::datashader-0.14.3-pyh1a96a4e_0.conda
noarch::datashader-0.10.0-py_0.tar.bz2
noarch::datashader-0.7.0-py_0.tar.bz2
noarch::datashader-0.13.0-pyh6c4a22f_0.tar.bz2
noarch::datashader-0.6.8-py_0.tar.bz2
noarch::datashader-0.14.4-pyh1a96a4e_0.conda
-    "param >=1.6.1",
+    "param >=1.6.1,<2.0.0a0",
noarch::geoviews-1.4.3-py_0.tar.bz2
-    "param >=1.5.1",
+    "param >=1.5.1,<2.0.0a0",
noarch::datashader-0.15.2-pyhd8ed1ab_0.conda
noarch::datashader-0.15.1-pyhd8ed1ab_0.conda
noarch::holoviews-1.10.0-py_1.tar.bz2
noarch::datashader-0.15.0-pyhd8ed1ab_0.conda
noarch::holoviews-1.10.0-py_0.tar.bz2
-    "param",
+    "param <2.0.0a0",
noarch::hvplot-0.7.3-pyh6c4a22f_0.tar.bz2
noarch::lumen-0.5.1-pyhd8ed1ab_0.conda
noarch::lumen-0.4.1-pyhd8ed1ab_0.tar.bz2
noarch::hvplot-0.8.1-pyhd8ed1ab_0.tar.bz2
noarch::hvplot-0.8.2-pyhd8ed1ab_0.conda
+    "param <2.0",
noarch::panel-0.13.1-pyhd8ed1ab_0.tar.bz2
noarch::panel-0.14.4-pyhd8ed1ab_0.conda
noarch::panel-0.14.1-pyhd8ed1ab_0.tar.bz2
noarch::panel-0.13.0-pyhd8ed1ab_0.tar.bz2
noarch::hvplot-0.8.0-pyh6c4a22f_0.tar.bz2
noarch::panel-0.14.0-pyhd8ed1ab_0.tar.bz2
noarch::panel-0.13.0-pyhd8ed1ab_1.tar.bz2
noarch::panel-0.14.2-pyhd8ed1ab_0.conda
noarch::panel-0.14.3-pyhd8ed1ab_0.conda
-    "param >=1.12.0",
+    "param >=1.12.0,<2.0.0a0",
noarch::panel-0.1.2-0.tar.bz2
noarch::panel-0.1.3-0.tar.bz2
noarch::panel-0.3.1-0.tar.bz2
-    "param >=1.8.1",
+    "param >=1.8.1,<2.0.0a0",
noarch::panel-0.10.0-py_0.tar.bz2
noarch::panel-0.12.0-pyhd8ed1ab_0.tar.bz2
noarch::panel-0.10.1-pyhd8ed1ab_1.tar.bz2
noarch::panel-0.10.2-pyhd8ed1ab_0.tar.bz2
noarch::panel-0.12.1-pyhd8ed1ab_0.tar.bz2
noarch::panel-0.11.0-pyhd8ed1ab_0.tar.bz2
noarch::panel-0.12.7-pyhd8ed1ab_0.tar.bz2
noarch::panel-0.12.3-pyhd8ed1ab_0.tar.bz2
noarch::panel-0.10.1-pyhd8ed1ab_0.tar.bz2
noarch::panel-0.11.2-pyhd8ed1ab_0.tar.bz2
noarch::panel-0.12.6-pyhd8ed1ab_0.tar.bz2
noarch::panel-0.12.4-pyhd8ed1ab_0.tar.bz2
noarch::panel-0.11.1-pyhd8ed1ab_0.tar.bz2
noarch::panel-0.10.3-pyhd8ed1ab_0.tar.bz2
noarch::panel-0.11.3-pyhd8ed1ab_0.tar.bz2
-    "param >=1.10.0",
+    "param >=1.10.0,<2.0.0a0",
noarch::panel-0.4.0-0.tar.bz2
noarch::panel-0.4.0-1.tar.bz2
-    "param >=1.8.2",
+    "param >=1.8.2,<2.0.0a0",
noarch::panel-0.5.1-0.tar.bz2
noarch::hvplot-0.8.3-pyhd8ed1ab_0.conda
noarch::panel-0.5.1-h39e3cac_2.tar.bz2
noarch::hvplot-0.8.4-pyhd8ed1ab_1.conda
noarch::panel-0.5.1-h24bf2e0_2.tar.bz2
noarch::panel-0.5.1-1.tar.bz2
-    "param >=1.9.0",
+    "param >=1.9.0,<2.0.0a0",
noarch::panel-0.6.2-0.tar.bz2
noarch::panel-0.6.4-0.tar.bz2
noarch::panel-0.6.0-h5ca1d4c_0.tar.bz2
noarch::panel-0.6.0-1.tar.bz2
noarch::panel-0.6.3-0.tar.bz2
-    "param >=1.9.1",
+    "param >=1.9.1,<2.0.0a0",
noarch::panel-0.9.1-py_0.tar.bz2
noarch::panel-0.8.1-pyh9f0ad1d_1.tar.bz2
noarch::panel-0.7.0-0.tar.bz2
noarch::panel-0.9.3-py_0.tar.bz2
noarch::panel-0.8.0-0.tar.bz2
noarch::panel-0.9.2-py_0.tar.bz2
-    "param >=1.9.2",
+    "param >=1.9.2,<2.0.0a0",
noarch::panel-0.9.5-py_1.tar.bz2
noarch::panel-0.9.6-py_0.tar.bz2
noarch::panel-0.9.7-py_0.tar.bz2
noarch::geoviews-1.10.0-pyhd8ed1ab_0.conda
noarch::geoviews-1.10.1-pyhd8ed1ab_0.conda
noarch::panel-0.9.5-py_0.tar.bz2
-    "param >=1.9.3",
+    "param >=1.9.3,<2.0.0a0",
noarch::holoviews-1.17.0-pyhd8ed1ab_0.conda
noarch::holoviews-1.16.0-pyhd8ed1ab_0.conda
noarch::holoviews-1.17.1-pyhd8ed1ab_0.conda
noarch::holoviews-1.16.1-pyhd8ed1ab_0.conda
noarch::holoviews-1.16.2-pyhd8ed1ab_0.conda
-    "param >=1.12.0,<3.0",
+    "param >=1.12.0,<2.0",
noarch::panel-1.2.1-pyhd8ed1ab_0.conda
noarch::panel-1.0.0-pyhd8ed1ab_0.conda
noarch::panel-1.1.0-pyhd8ed1ab_0.conda
noarch::panel-1.2.0-pyhd8ed1ab_0.conda
noarch::panel-1.1.1-pyhd8ed1ab_0.conda
noarch::panel-1.0.1-pyhd8ed1ab_0.conda
noarch::panel-1.0.2-pyhd8ed1ab_0.conda
noarch::panel-1.2.2-pyhd8ed1ab_0.conda
noarch::panel-1.0.4-pyhd8ed1ab_0.conda
noarch::panel-1.1.0-pyhd8ed1ab_2.conda
noarch::panel-1.0.3-pyhd8ed1ab_0.conda
noarch::panel-1.2.3-pyhd8ed1ab_0.conda
-    "param >=1.12.0,<3",
+    "param >=1.12.0,<2.0",
================================================================================
================================================================================
win-64
win-64::holoviews-1.9.3-py35_0.tar.bz2
win-64::holoviews-1.8.0-py27_0.tar.bz2
win-64::holoviews-1.8.2-py27_0.tar.bz2
win-64::holoviews-1.9.1-py27_0.tar.bz2
win-64::holoviews-1.9.1-py36_0.tar.bz2
win-64::holoviews-1.9.5-py35_0.tar.bz2
win-64::holoviews-1.5.0-py35_0.tar.bz2
win-64::holoviews-1.8.4-py27_1.tar.bz2
win-64::holoviews-1.8.0-py36_0.tar.bz2
win-64::holoviews-1.6.2-py27_0.tar.bz2
win-64::holoviews-1.8.0-py35_0.tar.bz2
win-64::holoviews-1.9.2-py35_0.tar.bz2
win-64::holoviews-1.8.4-py36_0.tar.bz2
win-64::holoviews-1.5.0-py34_0.tar.bz2
win-64::holoviews-1.6.2-py35_0.tar.bz2
win-64::holoviews-1.9.5-py36_0.tar.bz2
win-64::holoviews-1.8.4-py35_0.tar.bz2
win-64::holoviews-1.9.5-py27_0.tar.bz2
win-64::holoviews-1.8.3-py36_0.tar.bz2
win-64::holoviews-1.8.3-py27_0.tar.bz2
win-64::holoviews-1.9.4-py27_0.tar.bz2
win-64::holoviews-1.8.4-py35_1.tar.bz2
win-64::holoviews-1.7.0-py36_0.tar.bz2
win-64::holoviews-1.5.0-py27_0.tar.bz2
win-64::holoviews-1.8.1-py36_0.tar.bz2
win-64::holoviews-1.8.2-py36_0.tar.bz2
win-64::holoviews-1.9.4-py35_0.tar.bz2
win-64::holoviews-1.9.0-py36_0.tar.bz2
win-64::holoviews-1.8.1-py27_0.tar.bz2
win-64::holoviews-1.9.3-py27_0.tar.bz2
win-64::holoviews-1.7.0-py35_0.tar.bz2
win-64::holoviews-1.8.4-py36_1.tar.bz2
win-64::holoviews-1.9.2-py27_0.tar.bz2
win-64::holoviews-1.9.1-py35_0.tar.bz2
win-64::holoviews-1.9.2-py36_0.tar.bz2
win-64::holoviews-1.8.3-py35_0.tar.bz2
win-64::holoviews-1.9.0-py35_0.tar.bz2
win-64::holoviews-1.6.2-py34_0.tar.bz2
win-64::holoviews-1.9.4-py36_0.tar.bz2
win-64::holoviews-1.8.4-py27_0.tar.bz2
win-64::holoviews-1.7.0-py27_0.tar.bz2
win-64::holoviews-1.9.3-py36_0.tar.bz2
win-64::holoviews-1.8.2-py35_0.tar.bz2
win-64::holoviews-1.8.1-py35_0.tar.bz2
win-64::holoviews-1.9.0-py27_0.tar.bz2
-    "param",
+    "param <2.0.0a0",
================================================================================
================================================================================
osx-64
osx-64::holoviews-1.8.2-py27_0.tar.bz2
osx-64::holoviews-1.8.1-py36_0.tar.bz2
osx-64::holoviews-1.9.2-py36_0.tar.bz2
osx-64::holoviews-1.9.1-py36_0.tar.bz2
osx-64::holoviews-1.8.3-py36_0.tar.bz2
osx-64::holoviews-1.8.1-py27_0.tar.bz2
osx-64::holoviews-1.8.4-py35_0.tar.bz2
osx-64::holoviews-1.9.5-py36_0.tar.bz2
osx-64::holoviews-1.8.4-py36_0.tar.bz2
osx-64::holoviews-1.8.3-py27_0.tar.bz2
osx-64::holoviews-1.9.4-py35_0.tar.bz2
osx-64::holoviews-1.8.2-py35_0.tar.bz2
osx-64::holoviews-1.9.1-py35_0.tar.bz2
osx-64::holoviews-1.8.4-py36_1.tar.bz2
osx-64::holoviews-1.8.3-py35_0.tar.bz2
osx-64::holoviews-1.9.3-py36_0.tar.bz2
osx-64::holoviews-1.9.4-py36_0.tar.bz2
osx-64::holoviews-1.9.3-py27_0.tar.bz2
osx-64::holoviews-1.9.4-py27_0.tar.bz2
osx-64::holoviews-1.9.0-py27_0.tar.bz2
osx-64::holoviews-1.9.2-py35_0.tar.bz2
osx-64::holoviews-1.8.1-py35_0.tar.bz2
osx-64::holoviews-1.9.1-py27_0.tar.bz2
osx-64::holoviews-1.9.0-py35_0.tar.bz2
osx-64::holoviews-1.9.5-py35_0.tar.bz2
osx-64::holoviews-1.9.2-py27_0.tar.bz2
osx-64::holoviews-1.8.0-py27_0.tar.bz2
osx-64::holoviews-1.9.0-py36_0.tar.bz2
osx-64::holoviews-1.8.4-py35_1.tar.bz2
osx-64::holoviews-1.8.4-py27_1.tar.bz2
osx-64::holoviews-1.8.4-py27_0.tar.bz2
osx-64::holoviews-1.9.5-py27_0.tar.bz2
osx-64::holoviews-1.8.2-py36_0.tar.bz2
osx-64::holoviews-1.9.3-py35_0.tar.bz2
osx-64::holoviews-1.8.0-py35_0.tar.bz2
osx-64::holoviews-1.8.0-py36_0.tar.bz2
-    "param",
+    "param <2.0.0a0",
================================================================================
================================================================================
linux-64
linux-64::holoviews-1.8.4-py27_0.tar.bz2
linux-64::holoviews-1.9.5-py35_0.tar.bz2
linux-64::holoviews-1.8.2-py27_0.tar.bz2
linux-64::holoviews-1.7.0-py36_0.tar.bz2
linux-64::holoviews-1.8.0-py27_0.tar.bz2
linux-64::holoviews-1.9.4-py27_0.tar.bz2
linux-64::holoviews-1.6.2-py27_0.tar.bz2
linux-64::holoviews-1.8.1-py27_0.tar.bz2
linux-64::holoviews-1.8.4-py36_0.tar.bz2
linux-64::holoviews-1.8.1-py35_0.tar.bz2
linux-64::holoviews-1.9.1-py36_0.tar.bz2
linux-64::holoviews-1.8.0-py35_0.tar.bz2
linux-64::holoviews-1.8.4-py35_1.tar.bz2
linux-64::holoviews-1.8.1-py36_0.tar.bz2
linux-64::holoviews-1.7.0-py27_0.tar.bz2
linux-64::holoviews-1.6.2-py34_0.tar.bz2
linux-64::holoviews-1.5.0-py35_0.tar.bz2
linux-64::holoviews-1.8.3-py27_0.tar.bz2
linux-64::holoviews-1.9.5-py27_0.tar.bz2
linux-64::holoviews-1.9.4-py36_0.tar.bz2
linux-64::holoviews-1.8.3-py36_0.tar.bz2
linux-64::holoviews-1.9.1-py27_0.tar.bz2
linux-64::holoviews-1.9.5-py36_0.tar.bz2
linux-64::holoviews-1.7.0-py35_0.tar.bz2
linux-64::holoviews-1.8.4-py27_1.tar.bz2
linux-64::holoviews-1.9.1-py35_0.tar.bz2
linux-64::holoviews-1.8.4-py35_0.tar.bz2
linux-64::holoviews-1.9.3-py36_0.tar.bz2
linux-64::holoviews-1.9.2-py35_0.tar.bz2
linux-64::holoviews-1.9.2-py36_0.tar.bz2
linux-64::holoviews-1.8.3-py35_0.tar.bz2
linux-64::holoviews-1.8.2-py36_0.tar.bz2
linux-64::holoviews-1.9.3-py27_0.tar.bz2
linux-64::holoviews-1.5.0-py34_0.tar.bz2
linux-64::holoviews-1.8.4-py36_1.tar.bz2
linux-64::holoviews-1.8.0-py36_0.tar.bz2
linux-64::holoviews-1.8.2-py35_0.tar.bz2
linux-64::holoviews-1.6.2-py35_0.tar.bz2
linux-64::holoviews-1.9.4-py35_0.tar.bz2
linux-64::holoviews-1.9.0-py27_0.tar.bz2
linux-64::holoviews-1.9.0-py35_0.tar.bz2
linux-64::holoviews-1.9.2-py27_0.tar.bz2
linux-64::holoviews-1.9.0-py36_0.tar.bz2
linux-64::holoviews-1.5.0-py27_0.tar.bz2
linux-64::holoviews-1.9.3-py35_0.tar.bz2
-    "param",
+    "param <2.0.0a0",

<!-- Put any other comments or information here --!>

This should get you on your way. Please post the diff.

I posted the diff in my original post, do you want me to compute it again after merging your suggestions?

Oh sorry! I missed that. Yes the diff looks good! LGTM!


General Issue: Add new contributors to Description

Background Information

[ ] Add @manciniedoardo

@pharmaverse/admiral we need to gather new contributors and add to Description file - are there others?
Definition of Done
No response

I would like to be on there too :)


Update and rename feature.md to Bcklog Item.md

change to new template

Typo: Bcklog Item.md should be Backlog Item.md

@GabrielBuragev done / fixed


Improve master worker info concurrency

Include StableWorkerInfo in MasterWorkerInfo which are modified less and thus do not require synchronized(MasterWorkerInfo) to access it.
Add getWorkerAddresses() RPC call which does not require synchronized(MasterWorkerInfo) .

@gpang @calvinjia PTAL at the concurrency improvement PR.  Basically, I did the following things:

Include StableWorkerInfo in MasterWorkerInfo which are modified less and thus do not require synchronized(MasterWorkerInfo) to access it.
Add getWorkerAddresses() RPC call which does not require synchronized(MasterWorkerInfo) .
(or maybe getStableWorkerInfoList() will be preferred?)
More tests will be done and added after we agree on the basic implementation.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/6907/
Test FAILed.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/6908/
Test FAILed.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/6909/
Test FAILed.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/6911/
Test FAILed.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/6928/
Test FAILed.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/6939/
Test PASSed.

@gpang PTAL, change some job worker to call getWorkerAddresses(unblock operation) instead of calling getAllWorkers(need lock to get full worker info)

@gpang @madanadit  the initiative of this PR is that:
Every time getWorkerInfoList() will traverse the whole active worker list and lock each worker in order to get its information but most of the time, clients getWorkerInfoClient just want to get the worker addresses which is never changed.
The PR changes look big, but most of them are auto-generated RPC files.
The main changes are:

Add StableWorkerInfo inside MasterWorkerInfo which contains variables that is never changed or only changed via worker registration. Accessing the information in StableWorkerInfo is threadsafe, no external locks are needed
Add getWorkerAddresses() unblocking RPC  and change the places where users only want worker addresses but using getWorkerinfoList() before to use getWorkerAddresses().

PTAL, thanks

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/7027/
Test FAILed.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/Alluxio-Pull-Request-Builder/7034/
Test PASSed.


Smart contracts overview: fix spelling & grammar

[x] I have read the How to Contribute.
[x] I have run yarn build after adding my changes without getting any errors.

Updating documentation or Bugfix
Just fixing some minor issues like misspelled and duplicated words! Also changed utxo's to UTXOs to make it more consistant with other pages.

Also @OlofBlomqvist this is more than you may have bargained for but I saw the famous problem where the original author used ADA to refer to units of currency... so they had to be UNcapitalised. 😅 cc @katomm - sooner or later we will have cleaned up all of these, and over time newly written documentation will become more compliant 🙏

Looks good to me... even though build failures are reported in the CI that can't have anything to do with this change. Local build works fine in my environment. ✅ Maybe @Mercurial @fill-the-fill could find why the build here is failing? (looks like error is in prismjs or prism-react-renderer)
p.s. even after deleting node_modules and doing another yarn install it still builds cleanly in my local env; so could be something phooey about the CI 🧐

I ran the build again and everything is fine so we good to go 🗡

It is weird one, I think we had similar issue in the past, that project stopped to build for some reason... In any case, now if it builds then it is good for me.


Example "The following example enumerates the environment variable names in the current environment" missing back quotes.

Example "The following example enumerates the environment variable names in the current environment" has quotes in stead of back quotes.
The correct syntax is:
for /f "usebackq delims==" %i in (`set`) do @echo %i
Please note backquote has been escaped with backslash for rendering purposes only. The actual command does not have a backslash.
Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: fd23b3f6-0f24-3742-8588-bc3c901b6c8f
Version Independent ID: 1c5aa825-ee30-5e1b-5f58-b8aa3ccff22c
Content: for
Content Source: WindowsServerDocs/administration/windows-commands/for.md
Product: windows-server-threshold
GitHub Login: @coreyp-at-msft
Microsoft Alias: coreyp

Looks like the back quotes in syntax above have been intercepted by the GitHub scripting engine.
( set ) should be (set)

Thanks for your dedication to our documentation. If we have been unable to review your issue in a timely manner, we sincerely apologize for the delayed response. We have captured the informtion you have provided for review. We are closing this issue for now, but if you feel that it's still a concern, please respond and let us know. If you determine another possible update to our documentation, please don't hesitate to reach out again. #please-close


feat: add progress bar widget

@PoignardAzur I wanted to have a play with masonry, so I had a go at building a progress bar. I've made a PR in case you want it, but I won't be offended if you close the PR. I'm happy to make changes if you see anything you'd like to change.

There's a few things that will need to be tweaked before we can merge this, but it's a great start!
Even then, we probably won't merge this for at least a week or two, until we've implemented most of the pass spec RFC. But after that I'll be super happy to merge this.

This looks great! Don't really have the energy to review right now, will try this weekend.

Anyone know why cargo clippy fails in CI?

Anyone know why cargo clippy fails in CI?

Beyond that there are 3 clippy errors?

To expand (well really). click on the arrow above the error.

Oh, that UI is obtuse. Thanks.

(Quick reminder: if this PR can be rebased and the clippy errors addressed, this is ready to merge.)

I still think it should end up being Progress as mentioned above.

For now I'd say that doesn't matter. We can rename it to Progress or ProgressIndicator or something if we implement a circular styling option.

Aah I thought it would be longer before I could merge. Will aim to rebase ASAP.

I rebased it to main. It works pretty well.  All that remains is a clippy error due to an empty body for the access events. What do we want to do about that? Should we add a clippy allow (#[allow(...)]) directive to those lines?


_internal/pagination.html causes a lot of empty new lines

hugo version v0.58.3
Template in question: https://github.com/gohugoio/hugo/blob/v0.58.3/tpl/tplimpl/embedded/templates/pagination.html
I have about ~440 pages of content. When I use {{ template "_internal/pagination.html" . }}, as a result I get roughly ~440 blank lines as a result of doing this (here's a gist).
This seems to be 1 empty line per page, despite the only thing that's rendered is this:

It appears like changing this template with the following replacements fixes this issue:

{{ → {{-
}} → -}}

If anyone's got a more elegant solutions, that would be great. However, doing this makes the resulting pagination content unindented/less-readable.

It's a challenge to get this right in the templates. A related tip would be to use hugo --minify when building to production.

That's a fair point. The --minify just makes it harder for me to debug things in production by looking at the source, but I guess one isn't suppose to debug in prod.
Feel free to close this, otherwise I'm happy to make a patch that helps.


add Impington International College

https://www.impingtoninternational.org.uk/
https://www.impingtoninternational.org.uk/download/computer-science-2/?wpdmdl=2051&refresh=6290ebb6033961653664694

@Kivi-Vuorilehto Pull request merged. Thank you.


cute-alert confirmation with promises??

When I use cute alert for delete or any other actions confirmation, action happens anyway because promise don't block it. So it deletes the item even if I click on Cancel.
How to avoid this?
Note: Thanks a lot for this beautiful and easy to use library!!

Thank you for the feedback 😄 . Can you send me an example of how are you implementing it? Just so I can narrow down the issue.

Sure... This is my form...
<form action="{{route('admin.agencies.destroy', $id)}}" method="POST">
    @csrf
    @method('delete')

    <button type="submit" class="btn btn-warning btn-sm" data-toggle="tooltip" id="delete"
            onclick="return confirmate('¿Realmente desea realizar esta acción?') === true; " data-placement="top" title="Eliminar la agencia"></button>
</form>

Then the function that uses cute-alert:

Obviously the submit does not awaits for the .then() to execute, so... how do I use cute-alert confirmation to do that kind of tasks... This looks more like stackoverflow question, I'm sorry.

yeah, in this case what you could try to do is refactor it into:

Thanks!!!
Somehow if I use that code this way:
<button type="submit" class="btn btn-warning btn-sm" data-toggle="tooltip" id="delete"
            onclick="return true === confirmate('¿Realmente desea realizar esta acción?'); " data-placement="top" title="Eliminar"></button>

Nothing happens at clicking the confirmation, but I do:
<button type="submit" class="btn btn-warning btn-sm" data-toggle="tooltip" id="delete"
            onclick="return confirmate('¿Realmente desea realizar esta acción?'); " data-placement="top" title="Eliminar la agencia"></button>

Then again it deletes without waiting for confirmation at all. I guess someting is wrong... because I alerted the function and says true... so I am doing it wrong somehow. Toasts work great by the way...

You don't need that return before calling confirmate, since the function already returns you something.

I might be wrong, but as you are using @method('delete') from Laravel, it might be triggering the delete method from the controller by default (just because submit is being thrown). Therefore, what you really want to do, is get the return from confirmate inside that method (in the controller) and handle deletion / not deletion from there.

Actually, when condition is false, it does not deletes nothing. Problem is that primitive boolean is not the same that Promise(boolean).
Can this confirmation have a variant without promise? Is it dificult to provide such version. I would like to use your code in all our platform... not only using the toast to notify but the ugly primitive confirm() window for the confirmations... If its too much trouble, nevermind... thanks a lot.

It's more of a Laravel issue, not the alert lib itself. As you are doing a request from an endpoint, the best way would be for you to use ajax to do that request. Unfortunately, there is no other way to return that confirmation without a promise.


Swift SDK Feedback

[x] remove callbacks
[x] build handlers using builder pattern

Both of these are covered in #13


Autogenerate migrations fails on projects with dashed locale names

I was testing the auto-generation feature for migrations and I found an issue on projects that have a dashed locale (i.e. "en-US", "pt-br", ...)
On a project with a normal locale (it), everything runs smoothly:
datocms migrations:new 'add visibility switch to categories' --autogenerate=add-switch-to-category

Writing "migrations/1667488257_addVisibilitySwitchToCategories.ts"... done

On a project with a dashed locale instead, it hangs (in this example the locale is "en-US"):
datocms migrations:new 'add visibility switch to categories' --autogenerate=add-switch-to-category

Writing "migrations/1667487675_addVisibilitySwitchToCategories.ts"... !
    SyntaxError: ',' expected. (9:318)
       7 |
       8 |         console.log("Create Boolean field \"Show in menu?\" (`show_in_menu`) in model \"Category\" (`category`)")
    >  9 |         newFields["3643874"] = await client.fields.create("461463", { label: "Show in menu?", field_type: "boolean", api_key: "show_in_menu", hint: "Check this if
    you want this category to appear on the sidebar menu", localized: true, appearance: { addons: [], editor: "boolean", parameters: {} }, default_value: { en-US: true } });
         |
                                                                                ^
      10 |
      11 |         console.log("Update existing fields/fieldsets")
      12 |

Perhaps the locale needs to be escaped...?
Cheers!

Should be fixed in v1.0.16 of the CLI! Thanks for reporting @ing-norante ;)


Add a deployment that uploads/updates the amphora image

It does:

create a pod with 2 containers:

one container contains the images and copies them to a volume
one container runs an Apache server and serves the amphora images

use gophercloud to ensure that the images are correctly uploaded to glance

Right now, it requires a custom URL for the amphora image container:
oc patch octavia octavia --type=merge --patch
'{"spec":{"amphoraImageContainerImage":"registry-proxy.engineering.redhat.com/rh-osbs/rhosp-dev-preview-octavia-amphora-image:18.0.0"}}'

/lgtm

/retest-required

/test octavia-operator-build-deploy-kuttl

/test octavia-operator-build-deploy-kuttl

/lgtm

/retest-required

/retest-required

/test octavia-operator-build-deploy-kuttl


rubygem outdated

It would be great if you could update the gem and push a new version to rubygems so it would include the fixes in c73c07f07f2118438018f960907b581efd293c49 as I think that is a common problem people run into. Thanks!

He hasn't updated it since 2012, and only touched github once this year. I'd suggest forking it and sourcing the gem with a gitref, like this:
gem "omniauth-mailchimp", github: "stevenkaras/omniauth-mailchimp", tag: "v1.1.0-steven"

You should probably set up your own fork, since i can't make any guarantees about tracking upstream changes.


Feature Request: TypeScript Engine for .NET

It is good to have TypeScript compiled into JavaScript. But at the same time, it would be nice to have a TypeScript Engine pretty much same as JInt or IronJS, which will allow us to execute TypeScript right within .NET.
Use case:

Create reusable TypeScript components that can be used in nodeJS as well as ASP.NET MVC
Can reuse Entity Framework or any .NET based library within TypeScript Engine

This is similar to #2565 and #5200. That's not really in the scope of the TypeScript project, and if someone else would be willing to do that, that'd be great. To achieve something similar, I would recommend looking into Edge.js to achieve something like this, and look into node packages that are able to run TS code on the fly if that's really a necessity.


HDDS-7145. Recon: Show last OM DB sync time on Overview page

What changes were proposed in this pull request?
Display ToolTip to show OM last updated Delta and Full timestamp.
What is the link to the Apache JIRA
https://issues.apache.org/jira/browse/HDDS-7145
How was this patch tested?
Manually Tested and reviewed by siyog and corrected review changes suggested by siyog.

I have made some UI tweaks around the update time display. PTAL

@smitajoshi12 Please check your branch and do git pull before trying to git push --force. Now my previous commit to your branch has been discarded.

Thanks @smitajoshi12 for the patch. Thanks @dombizita for the review.


Error while getting Gitolite infos, check your SSH keys (path, permissions) or your Git user.

Hello
I got this message in my logfile:

2016-09-15 18:29:58 +0200 [INFO] Testing if Redmine user 'redmine' can sudo to Gitolite user 'git'...
2016-09-15 18:29:58 +0200 [INFO] OK!
2016-09-15 18:30:01 +0200 [ERROR] Error while getting Gitolite infos, check your SSH keys (path, permissions) or your Git user.

And when i checked the Redmine gitolite config test page, i found it "Gitolite version 	Unknown version"
My next step was to check from CLI (based of your wiki)

root@redmine:/opt/redmine/redmine/plugins/redmine_git_hosting# ssh -i ssh_keys/redmine_gitolite_admin_id_rsa git@localhost info
hello admin, this is git@redmine running gitolite3 3.6.4-1 (Debian) on git 2.7.4

 R W    test1
 R W    test2
 R W    gitolite-admin
 R W    test-new-proj-test/test_repo
 R W    testing

So my ssh keys are working well.

Environment:
  Redmine version                3.2.1.stable
  Ruby version                   2.3.1-p112 (2016-04-26) [x86_64-linux-gnu]
  Rails version                  <IP_ADDRESS>
  Environment                    production
  Database adapter               Mysql2
SCM:
  Subversion                     1.9.3
  Git                            2.7.4
  Filesystem
  Xitolite                       2.7.4
Redmine plugins:
  redmine_bootstrap_kit          0.2-devel
  redmine_git_hosting            1.2.0

At this point, im stucked, i dont know what is the problem. Maybe gitolite version not supported:

# gitolite help
hello, this is root@redmine running gitolite3 3.6.4-1 (Debian) on git 2.7.4

Solved by chmod 400 /opt/redmine/redmine-3.2.1/plugins/redmine_git_hosting/ssh_keys/redmine_gitolite_admin_id_rsa
Thanks guys for debugging.


Platform IO Bundled Distribution for Windows

As some Windows user might not have any console tools installed I would like to see platformio distributed as some self-contained archive/exe file for Windows users. It should contain python distribution and some nice colorful command line + GUI (which is in the works). This should be done side-by-side to existing pip installation or even on top of it.
Please let me know what you think

---
Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/29731579-platform-io-bundled-distribution-for-windows?utm_campaign=plugin&utm_content=tracker%2F2014790&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F2014790&utm_medium=issues&utm_source=github).

+1 thank you for suggestions. I hope someone can make it.

I think Nuitka might be worth looking into for this.
From what I've read, it can't do cross-platform compilation, so someone with a Windows PC would have to give it a shot.
The following command from the PlatformIO root dir should produce a completely portable .exe which would work on a fresh Windows install, no external dependancies.
nuitka --recurse-all --standalone ./platformio
I've tried it on my Mac and can confirm that it does compile without errors. Don't mind the .exe, Nuitka appends it to the generated executable on all operating systems.
git clone https://github.com/platformio/platformio
cd platformio

nuitka --recurse-all --standalone ./platformio
[compile output not shown]

cd platformio.dist
./platformio.exe --version
PlatformIO, version 2.7.2.dev0

Thanks @ZachMassia. I didn't know about Nuitka.

I see that users will have problems that need to add path of binary to ENV.PATH
The upgrade process will be so difficult. The platformio upgrade looks more interesting.

Windows users don't like to play with console utilities. If user can download and install pre-compile platformio.exe, then it will not have problems to pip install platformio.
My propositions:

If Windows user wants to use PlatformIO as CLI, then will install it in generic way (via pip or installer script http://docs.platformio.org/en/latest/installation.html#b-installer-script).
We are working on the own solution (IDE, or plugins for IDE) where user will "DOWNLOAD & USE" and PlatformIO will be included in IDE/Plugin.

I've released beta version PlatformIO IDE for Atom today. It contains built-in PlatformIO CLI tool and Terminal. Also, users have ability to install this built-in PlatformIO CLI tool globally using Menu: PlatformIO > Install Shell Commands, then open system Terminal and platformio and pio should be available.

@ZachMassia I've tryied what you described but I didn't get the same results.
First try:

I clone the platformio repository in the desktop
nuitka --recurse-all --standalone ./platformio

Start to compile and shows me a lot of warnings like cannot find 'package name' as relative or absolute import
when the compilation finished, I run platformio.exe --version and the output is ImportError: No module named _socket
Second try:

I compile from C:\Python27\Lib\site-packages\platformio

Same warning outputs
But when I run platformio.exe --version
It shows me the version I've installed
when I move the platformio.dist folder to other location I get the error ImportError: No module named _socket again
You know what can I be doing wrong?

cx_Freeze (Download) Seems to be a better alternative because it doesn't "hide" the source files, so the upgrade option should work. (In theory) and it's available to create a msi installer for windows and dmg for OSX.
I've compile the code but I still have to know how to including all the platformio files (code).
With the basic setup.py configuration, are available the commands lib, platforms, upgrade
When I run __main__ --version the output is: PlatformIO, version 2.8.3 (the name __main__ is easy to fix, only have to edit two files, but until now I'm trying to get work the whole code)

lib seems to work fine

platforms the command seems to work but isn't possible to search or install any platform

upgrade the output is Error: Can not retrieve the latest PlatformIO version

I think it's because the missing files, Is there someone with any experience using cx_Freeze?

All Windows version in recent history have cmd.exe available very easily. Just Shift/Right click on a directory in Windows Explorer and click on Open Command Window Here.


Add jspm support

This shim is necessary to work for jspm because otherwise it runs as a CommonJS module, while failing the isNode check, resulting in the dependencies not being picked up.
An alternative approach would be to change the isNode function to accept the browserify process shim, perhaps by checking a standard property.
No pressure to take this either, we have an override that's making it work otherwise.

@guybedford will gladly merge this if rebased.

@stefanpenner no problem, have done. CI seems not to be happy though unfortunately, but don't think it's related. Thanks for the follow-up sir!

i believe we are green: https://github.com/pretenderjs/pretender/pull/100

@guybedford FYI, we plan to cut a release shortly. Would love to sneak this in.

Sure, should be there now.

woot :)


Assume Cognito Identity Auth role with DynamoDB with client/AWS_IAM auth?

Hello,
I am trying to assume my identity pool user auth role when invoking my AWS REST API requests. I followed the same code setup for declaring my authentication pools/identity pools. The only change is I modified the Cognito Authenticated role to include permissions to access DynamoDB resources.
My cognito authenticated identity role:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "cognito-identity:*",
                "dynamodb:PutItem",
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "mobileanalytics:PutEvents",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:UpdateItem",
                "cognito-sync:*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:us-east-1:xxxx:xxxx/*"
        }
    ]
}

Using the serverless-stack-demo-client, I log in and I see it obtained the identity id and credentials.
My request.context.identity:
identity: {
      cognitoIdentityPoolId: 'us-east-1:xxxx',
      accountId: 'xxxx',
      cognitoIdentityId: 'us-east-xxx',
      caller: 'xxx:CognitoIdentityCredentials',
      sourceIp: 'xxx.x.xx.x.',
      principalOrgId: 'o-xxxx',
      accessKey: 'xxxxxxx',
      cognitoAuthenticationType: 'authenticated',
      cognitoAuthenticationProvider: 'cognito-idp.us-east-1.amazonaws.com/xxxxx,cognito-idp.us-east-1.amazonaws.com/us-east-xxx:CognitoSignIn:xxx-xxx-xx',
      userArn: 'arn:aws:sts::xxxx:assumed-role/CognitoAuthRole-xxx/CognitoIdentityCredentials',
      userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36',
      user: 'xxxx:CognitoIdentityCredentials'
    },

Using the API from aws-amplify, I make a request, much like the notes list example. It sets the auth header as:
authorization: AWS4-HMAC-SHA256 Credential=xxxxx/20200729/us-east-1/execute-api/aws4_request, SignedHeaders=host;x-amz-date;x-amz-security-token, Signature=xxxxxxxxx

In my cloudwatch response, I see the following error:
error: "User: arn:aws:sts::xxxx:assumed-role/example-us-east-1-lambdaRole/example-rest-api-dev-getProducts is not authorized to perform: dynamodb:Query on resource: arn:aws:dynamodb:us-east-1:xxxx:table/products-table"

My assumption is that it should be using the assumed role from the userArn specified above in the identity payload to make the request. However, it appears it is still using the lambda execution role instead still.
Am I missing a step here? Do I need to manually set it to assume the role in the requestContext.identity.userArn? I have tried just about everything to get this to work properly, but keep running into issues. Any help is appreciated!

Did you find a solution to this? I've ran a similair issue.

@fostahgix I might not be totally getting your setup but the flow here is that users are given permissions to access your API Gateway/Lambda functions. Once it hits that spot, the permissions are the ones that are given to that Lambda function. It's not based on the user anymore.


pypy, pypy3.5 do not find xattr module

If I run "python smallfile.py" the unit test passes, but if I run "pypy smallfile.py" it fails with "NameError: name 'xattr' is not defined", but python*pyxattr packages are installed.

no longer happens, so I'm closing.


Container Running, Panel says it's stopped.

Updated the daemon and panel today.
This has happened multiple times .. created a default minecraft container which dumps out to 1.10.2 and started the container, stopped the container, and restarted it. And after a short bit the panel think's it's not running but the docker container is running. trying to start or restart it gives an error that it's running.
Killing the container makes the container restart. stopping the minecraft server makes it restart but the panel still thinks it's not running.
I cannot issue commands via the panel but i can see the server running in the panel.

Update: What has happened is if i'm looking at it (global admin) and my user is looking at the server overview at the same time. it breaks. If i attach to the docker container and stop the server while one of us is off page and it auto-restarts. The moment after the other person connects to the overview page it breaks.

Hey, what version of the daemon is this? I believe @parkervcp had the same issue and it was fixed last night (release v0.3.6).

0.3.6 daemon, updated it this evening.

wait hangon.

found out the issue .. it's 0.3.5
https://daemon.pterodactyl.io/docs/upgrading-from-previous-versions had a 0.3.5 url for a 0.3.6 filename

Ah, it does indeed, I will fix that right now, thanks for letting me know!

corrected the url in my update string and updated to 0.3.6 and it appears to have fixed the issue. Thanks!

Awesome, glad to hear, and thanks for letting me know about the URL issue. 👍


Development

cleaned up the file immensely to improve future scaling and readability.

also marking this as hacktoberfest would be great too 😉


Release 0.1.13

Checklist

[x] Used a personal fork of the feedstock to propose changes
[x] Reset the build number to 0 (if the version changed)
[x] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[ ] Ensured the license file is being packaged.

@conda-forge-admin, please rerender

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe/meta.yaml) and found it was in an excellent condition.
I do have some suggestions for making it better though...
For recipe/meta.yaml:

ℹ No valid build backend found for Python recipe for package openff-utilities using pip. Python recipes using pip need to explicitly specify a build backend in the host section. If your recipe has built with only pip in the host section in the past, you likely should add setuptools to the host section of your recipe.

This message was generated by GitHub Actions workflow run https://github.com/conda-forge/conda-forge-webservices/actions/runs/12129495734. Examine the logs at this URL for more detail.

Hi! This is the friendly automated conda-forge-linting service.
I was trying to look for recipes to lint for you, but it appears we have a merge conflict. Please try to merge or rebase with the base branch to resolve this conflict.
Please ping the 'conda-forge/core' team (using the @ notation in a comment) if you believe this is a bug.

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe/meta.yaml) and found it was in an excellent condition.
I do have some suggestions for making it better though...
For recipe/meta.yaml:

ℹ No valid build backend found for Python recipe for package openff-utilities using pip. Python recipes using pip need to explicitly specify a build backend in the host section. If your recipe has built with only pip in the host section in the past, you likely should add setuptools to the host section of your recipe.

This message was generated by GitHub Actions workflow run https://github.com/conda-forge/conda-forge-webservices/actions/runs/12142790808. Examine the logs at this URL for more detail.

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe/meta.yaml) and found it was in an excellent condition.

@conda-forge-admin, please rerender


Link week 6 source code as "stable" version

Corrects "Last updated for Week 6" to "Last updated for Week 7", while also linking the Week 6 source code as the stable version

merged but i changed to be JUST "updated for week 7" teehee, thanks!!

merged but i changed to be JUST "updated for week 7" teehee, thanks!!

Sounds all fine and silly to me, stay epic and swag!