Enabled typing check for densenet

Following up on #3029, this PR introduces the following modifications:

enabled typing check for torchvision.models.densenet
added proper typing exceptions when needed thanks to https://github.com/pytorch/pytorch/pull/51675

Please note that there is still an error related to a typing issue in torch (adaptive pooling), I'll check with them if this has been solved.
Any feedback is welcome!
cc @pmeier

According to https://github.com/pytorch/pytorch/blob/master/torch/nn/functional.pyi.in#L89 and https://github.com/pytorch/pytorch/blob/master/torch/nn/common_types.py#L29, I believe the typing error about adaptive_avg_pool2d has already been solved on the master branch of pytorch :ok_hand:

@frgfm the failing tests are related:
RuntimeError: expected type comment but found 'def' here:
def forward(self, input: Tensor) -> Tensor:  # type: ignore[no-redef] # noqa: F811
~~~ <--- HERE
self = <test_models.ModelTester testMethod=test_densenet121_cpu>
model_name = 'densenet121', dev = device(type='cpu')

    def do_test(self, model_name=model_name, dev=dev):
        input_shape = (1, 3, 224, 224)
        if model_name in ['inception_v3']:
            input_shape = (1, 3, 299, 299)
>       self._test_classification_model(model_name, input_shape, dev)

test/test_models.py:440:

This seems familiar to what we had before. I think https://github.com/pytorch/pytorch/pull/51675 only fixed this only if the type: ignore[...] is at the end of the line. Could you change test this?

@pmeier Mmmh weird, locally I'm not getting this error. It's probably because I'm running not running pytorch from source. And for the mypy test, I only have those with my proposal:
torchvision/models/mobilenetv3.py:31: error: Argument 2 to "adaptive_avg_pool2d" has incompatible
type "int"; expected "Union[Size, List[int], Tuple[int, ...]]"  [arg-type]
            scale = F.adaptive_avg_pool2d(input, 1)
                                                 ^
torchvision/__init__.py:16: error: Skipping analyzing 'torchvision.version': found module but no
type hints or library stubs  [import]
        from .version import __version__  # noqa: F401
    ^
torchvision/__init__.py:16: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports

and if I exchanged the order with the noqa, I'm getting the old errors back (and I tried single/double spacing and tabs to separate it from the noqa).
I'm not sure I understand the CI error though: is it suggesting to put the type comment after the def line? I'll try to change the order anyway to see if this does it

It's probably because I'm running not running pytorch from source

What version of torch are you running? It should be either from source or the nightly build. I suggest you use the latter for convenience if you don't simultaneously work on PyTorch core.

I'm not sure I understand the CI error though

Right now the unittests succeed, but mypy fails though. I'll investigate and get back to you.

What version of torch are you running? It should be either from source or the nightly build. I suggest you use the latter for convenience if you don't simultaneously work on PyTorch core.
You're right, I'm running the latest stable version 1.7.1 at the moment

Right now the unittests succeed, but mypy fails though. I'll investigate and get back to you.
Thanks! Considering https://github.com/pytorch/pytorch/pull/51675 was merged only 7 days ago into master, I'm not sure whether torchvision CI uses a source build of pytorch or a nightly release, but we might have to wait a bit to run those tests successfully :man_shrugging:

I'm not sure whether torchvision CI uses a source build of pytorch or a nightly release, but we might have to wait a bit to run those tests successfully

As the name implies, the nightly build is done once per day. Thus if this was merged two or more days ago, we should be fine.

The problem at hand is that now torchscript requires the type: ignore comments to be at the end of the line, whereas mypy does not work if the flake8 directive (# noqa ...) comes before the type: ignore comments. Thus, right now we can only satisfy one of them. I've opened https://github.com/pytorch/pytorch/issues/52271 to overcome this.
If this goes through you can revert your latest change. In a quick search I couldn't find if this is intended behavior of mypy or a known bug. If you want to push this forward you can also raise this issue to them.

Hi @pmeier,
From what I can see in the issue you opened, the problem is still ongoing?

@frgfm At least it is not fixed yet. Let me ping someone there to get an update.

@frgfm At least it is not fixed yet. Let me ping someone there to get an update.

FYI I just pinged the assignee in the corresponding issue, let's hope we get an update soon :crossed_fingers:

Quick update here: the only problem left is the inability to ignore type-redef mentioned above. Keen to hear if you have any idea!


Secure connection with Bastion

In my opinion, it may be worth to mention Azure Bastion here for security reasons, at least a link to https://docs.microsoft.com/en-us/azure/bastion/bastion-overview. Also, some screenshots are outdated and not showing Azure Bastion.
Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: b3034648-5a0a-d3af-5aa9-651710d4cb85
Version Independent ID: f6f0caf5-8bbf-e6d7-e920-69ae6f2b9fad
Content: Provision a Windows virtual machine with the Azure portal - SQL Server on Azure VM
Content Source: articles/azure-sql/virtual-machines/windows/create-sql-vm-portal.md
Service: virtual-machines-sql
GitHub Login: @MashaMSFT
Microsoft Alias: mathoma

@kaysauter
Thanks for the feedback! I have assigned the issue to content author to check and update the document as appropriate.

@MashaMSFT
Can you please check and add your comments on this doc update request as applicable.

Hi @kaysauter , thanks for contacting Microsoft and providing your feedback! Yes, Azure Bastion is supported. I have created an internal work item  (1742704) to add this to the documentation over the next few months.
I will close out this Git Issue for the time being but please feel free to comment should you need anything further.
Thanks and hope you have a wonderful rest of your day!
Masha from the SQL Docs team
#please-close

#please-close


Updated csproj to use the latest help package

Fixes #5181
The help package is updated to only have default help. All the other help content can be downloaded using Update-Help

@adityapatwardhan 2 test failed in AppVeyor CI. Please take a look. Also, can you please add [Feature] tag in the next commit so we can validate all help related tests?

@daxian-dbw All tests have passed.


Pulled out the version into a variable. Verify the zookeeper download…

… before using it.

Thank you


Could not find any cudnn.h matching version '8' in any subdirectory

Please make sure that this is a build/installation issue. As per our GitHub Policy, we only address code/doc bugs, performance issues, feature requests and build/installation issues on GitHub. tag:build_template
System information

OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Ubuntu 16.04
Mobile device (e.g. iPhone 8, Pixel 2, Samsung Galaxy) if the issue happens on mobile device:
TensorFlow installed from (source or binary):
TensorFlow version: 1.14
Python version: 3.6
Installed using virtualenv? pip? conda?:
Bazel version (if compiling from source): 0.24.1
GCC/Compiler version (if compiling from source):
CUDA/cuDNN version: 11.1
GPU model and memory: RTX 3090

Describe the problem
For some specific purpose, I am building TF 1.14 from source with CUDA 11.1, CUDNN 8.0.4 & TensorRT 7.2 on Ubuntu 16.04 but getting an error:-

I have made various checks like LD_LIBRARY_PATH, PATH are properly set and installation using tar, deb file of CUDNN but the error persists. Even if CUDA 11.1, CUDNN 8.0.4 is incompatible with TF 1.14, why I'm getting this error as this error shows unable to find the file. Maybe incompatibility error will generate during compilation.
Provide the exact sequence of commands / steps that you executed before running into the problem
Any other info / logs
Include any logs or source code that would be helpful to diagnose the problem. If including tracebacks, please include the full traceback. Large logs and files should be attached.

@Thunder003,
TensorFlow 1.x is not actively supported. Every TensorFlow release is compatible with a certain CUDA/cuDNN version. Please take a look at the tested build configurations for more information.
Also, please check similar issue #42895 for reference. Thanks!

@amahendrakar let me rephrase my issue. When building Tensorflow 2 from source with CUDA 11.1, CUDNN 8.0.4, what TensorFlow 2.x checks at this stage( Configuration step) inside the CUDNN file which helps it recognize the CUDNN version. I have verified that there is no such issue with T.F. 2.3, CUDA 11.1, and CUDNN 8.0.4
I know the original issue is due to incompatible, but can you please give some insights by relating it to the CUDNN file( like what is checks inside it).  As T.F. 1.14 had recognized the CUDA 11.1 file.

@Thunder003,
Checks are done in this Build file.
To elaborate, the Version of CUDNN is identified from here. After that, compatibility is checked in this line, which in turn calls cudnn_version.cc where compatibility is checked.
Hope this helps. Thanks!

@rmothukuru thanks for your answer.

Hey @Thunder003, were you ever able to get TF 1.14 to build with CUDA 11.1? I'm currently trying to do the same with TF 1.15.

@smitheric95 no (I tried almost everything, but T.F. 1.14 & CUDA 11.1 are incompatible),  every time I try to build T.F. 1.14 & CUDA 11.1, I get an error:- ""Could not find any cudnn.h matching version '8' in any subdirectory""
I eventually migrated from T.F. 1.x to 2.x.

@Thunder003, ah yes. I encountered that as well, but was able to get around it by changing configure.py to look for the CUDNN version in cudnn_version.h instead of cudnn.h.

@smitheric95 ok, I have contacted a few people, saying to me that T.F. 1.14 & CUDA 11.1 are incompatible so may get an error on compilation time even I had fixed this issue. But another thing that was scratching my head is that if they are incompatible, then why NGC provide a container having T.F. 1.15 and CUDA 11.1.
Try compiling that @smitheric95, if you will be able to make that, let me know here as well :)

@Thunder003, that worked!
I just had to copy the tensorflow directory from the docker container to my local /opt/ directory.
Then, I set IN_CONTAINER to 0 on line 108 of nvbuild.sh.
Finally, I ran:
export CUDA_VERSION="11.1"
export CUDNN_VERSION="8.0.5"
./nvbuild.sh --v1

You may run into some permissions issues along the way – I handled those as they came up.

@smitheric95 nice!!, thanks for sharing as well,..... which docker container you are referring to, NGC T.F. 1.15, CUDA 11.1? And have you tried running it, is it utilizing GPUs properly?

@Thunder003, correct it's the 20.11-tf1-py3 container on NGC. I used that source code and built 1.15.4 natively.
I can confirm that the GPUs are being properly utilized as well.

Hi @smitheric95,
Thanks for your help. Can you elaborate on where I can find the "TensorFlow directory from the docker"?
Should I get it from the container or from the source-code? Can you provide a link to this source code?
Thanks.

Hi @smitheric95,
Thanks for your help. Can you elaborate on where I can find the "TensorFlow directory from the docker"?
Should I get it from the container or from the source-code? Can you provide a link to this source code?
Thanks.

hi @smitheric95, just checking, have you tested any code with your build from source TensorFlow? Is it working fine?

Hey @Thunder003, yes, I have tested TensorFlow code with this setup and am able to successfully train models just fine!
As far as StyleGAN goes, you might want to test some other simpler models first to rule out environment issues.

Hey @Thunder003, yes, I have tested TensorFlow code with this setup and am able to successfully train models just fine!
As far as StyleGAN goes, you might want to test some other simpler models first to rule out environment issues.

Hi,sorry to bother you ,but I was trying to compile tensorflow 1.15 with 3090 and cuda11.0 ,however the script report that it could not found libcurand.so.11. I tried to find "libcurand" with find /usr/local -type f | grep libcurand , but I found libcurand.so.10 instead of 11 in cuda11 folder. Have you encountered this problem？ Or could you plz list what did you do to   built 1.15.4 successfully? Thanks!

In the case of TF 2.0, I should have changed cudnn.h -> cudnn_version.h in the "third_party/gpus/find_cuda_config.py" file

As same as TF2.2,thx

In the case of TF 2.0, I should have changed cudnn.h -> cudnn_version.h in the "third_party/gpus/find_cuda_config.py" file


Recipe: agnostic caching

Explain how to cache resources, even from other domains with the use of no-cors mode and clarify the limitations of this technique.

This is very similar to #32 and the demo that @zalun covers this topic as well.


Enable existing commit characters in certain locations where isNewIdentifier is true

Fixes #31244

@typescript-bot pack this

This should be testable using vscode insiders and setting TS to this PR (see this).


feat: enable mirroring of postgres data to arbitrary rdev stack

accept/handle 'rdev' as a valid DEST_ENV
use STACK env var to specify rdev stack
do not copy s3 assets from SRC_ENV
asset uris will be incorrect; trivial for rdev

Reason for Change

#5437

Changes

Parallelize all s3 sync and s3 cp operations, not just for rdev
For rdev only: Use sample dataset from s3://env-rdev-dataportal/s3/ to populate all Dataset artifacts if COLLECTIONS argument is provided. Much faster. If actual Dataset is required in explorer, developer can manually copy the asset file(s) to desired locale.

Testing steps

Either list QA steps or reasoning you feel QA is unnecessary
Describe how you made sure to know that your changes worked. Should allow someone else to go verify your code without in depth knowledge.
"Unit tested only", "tested in rdev by a, b, c, verifying feature worked by... ", "manually ran pipeline locally with these results: ..."

Notes for Reviewer

One concern with the s3://env-rdev-dataportal/s3/ test fixture data is that it's schema-dependent, and we'll need to remember to update these fixtures when schema's increment. Another concern is that it's always copying data for a specific schema version, and this means there will never be mixed schema data available to rdev stacks, even though the RDS data will have rows for mixed schema datasets.
The user needs to be aware of these constraints at minimum, and ideally the user should be able to copy a subset of a real collection's assets if needed. Is that supported?

One concern with the s3://env-rdev-dataportal/s3/ test fixture data is that it's schema-dependent, and we'll need to remember to update these fixtures when schema's increment. Another concern is that it's always copying data for a specific schema version, and this means there will never be mixed schema data available to rdev stacks, even though the RDS data will have rows for mixed schema datasets.
The user needs to be aware of these constraints at minimum, and ideally the user should be able to copy a subset of a real collection's assets if needed. Is that supported?

@atolopko-czi  All valid concerns; if the user passes any non-null value for DATA when invoking the top-level make command, then the real assets are copied instead of the sample data.
Totally open to changing the default to be real, and allowing a SAMPLE_DATA flag var instead...?

@atolopko-czi All valid concerns; if the user passes any non-null value for DATA when invoking the top-level make command, then the real assets are copied instead of the sample data.

Perfect, brilliant!

Totally open to changing the default to be real, and allowing a SAMPLE_DATA flag var instead...?

I think we can leave the default and change it as engineers provide feedback.


Wip kilo

Can one of the admins verify this patch?

"ok to test" to accept this pull request for testing
"test this please" for a one time test run
"add to whitelist" to add the author to the whitelist

what is this?        Power?  as in PowerPC?     Can you document purpose and reason for this change ?
looks like you need to rebase the hell out of this or cherry pick your commit onto thenmaster branch ...

I think this was something of a mistake. Please re-open with a concise change set if you have a change to propose.


🐛 firebase_analytics logs not showing in firebase debug view

Bug report
Describe the bug
Majority of my events not showing in the analytics debug view
Steps to reproduce
Steps to reproduce the behavior:

clone and start sample project below (based on flutter skeleton)
open chrome dev tools console and turn on enable debug view logging
click around and see the gtag printing in the console, but nothing in firebase

see video
https://youtu.be/KnM4yyGfFgk
Expected behavior
I would expect logs to appear in firebase debug view
Sample project
https://github.com/mclabs74/flutter_analytics

Additional context
Add any other context about the problem here.

Flutter doctor
Run flutter doctor and paste the output below:

Matt-MacBookPro:flutter_analytics mattc$ flutter doctor -v
[✓] Flutter (Channel stable, 2.5.3, on Mac OS X 10.15.7 19H114 darwin-x64, locale en-US)
    • Flutter version 2.5.3 at /Users/mattc/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 18116933e7 (3 weeks ago), 2021-10-15 10:46:35 -0700
    • Engine revision d3ea636dc5
    • Dart version 2.14.4

[!] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    • Android SDK at /Users/mattc/Library/Android/sdk
    ✗ cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.4, Build version 12D4e
    • CocoaPods version 1.10.1

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
Matt-MacBookPro:flutter_analytics mattc$ flutter doctor -v
[✓] Flutter (Channel stable, 2.5.3, on Mac OS X 10.15.7 19H114 darwin-x64, locale en-US)
    • Flutter version 2.5.3 at /Users/mattc/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 18116933e7 (3 weeks ago), 2021-10-15 10:46:35 -0700
    • Engine revision d3ea636dc5
    • Dart version 2.14.4

[!] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    • Android SDK at /Users/mattc/Library/Android/sdk
    ✗ cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.4, Build version 12D4e
    • CocoaPods version 1.10.1

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)

[✓] VS Code (version 1.62.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.28.0

[✓] Connected device (1 available)
    • Chrome (web) • chrome • web-javascript • Google Chrome 95.0.4638.69

! Doctor found issues in 1 category.

Flutter dependencies
Run flutter pub deps -- --style=compact and paste the output below:
Click To Expand
see here
https://github.com/mclabs74/flutter_analytics/blob/main/flutter_analytics/pubspec.yaml

@mclabs74
Can you also try the official plugin example and see if it gives same behavior ?
Also, I am assuming this is on web ?

Hi @darshankawar , thanks for responding and for pointing me to the example. Yes, it is web. I tried the plugin example, and it is better. A few questions:

when I click on Test logEvent, it is several seconds before it appears in the debug view. is that normal? I was under the impression under debug mode, they show almost immediately.

https://youtu.be/wxJSoNUpW44
also, the event has several parameters
https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_analytics/firebase_analytics/example/lib/main.dart#L72
which do not show in the Debug view. I tried opening all the attributes. do you know why? (I see that with the other events I checked, such as add_payment_info)

the example does not put the flutterfire initialization in the index.html, https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_analytics/firebase_analytics/example/lib/main.dart#L16

unlike this doc. https://firebase.flutter.dev/docs/installation/web/
are both places ok for the initializing firebase?
Thanks again for getting back to me.

when I click on Test logEvent, it is several seconds before it appears in the debug view. is that normal? I was under the impression under debug mode, they show almost immediately.

Usually, the seconds column shows you the events that are logged in last 60 seconds. Same for minutes column which is usually for 30 minutes. Each event will have a timestamp which indicates time of the event it was logged on the device (web in your case), so you can look at that and see if it's reporting as soon as you click.

the event has several parameters

According to https://github.com/FirebaseExtended/flutterfire/blob/a91fa459add243b37a7da9a67fbe94f2116bb3ca/packages/firebase_analytics/firebase_analytics/example/lib/main.dart#L77  and hence you may be seeing only some paramaters and not all. You can access the link for more details.

the example does not put the flutterfire initialization in the index.html,

You may follow the flutterfire documentation for latest steps to initialize, ie, add only firebase-sdk in index,html and leave the entire initialization in the code, https://firebase.flutter.dev/docs/installation/web/#initializing-flutterfire

Thanks @darshankawar, one thing that is still confusing, for the event parameters used next to the comment
Only strings and numbers (ints & doubles) are supported for GA custom event parameters

the main.dart method _sendAnalyticsEvent only sends strings and numbers, which is why it is confusing that they are not showing in the debug view.  Shouldn't all those parameters be logged?

@mclabs74
Ideally yes, looking at the documentation specific to logging events: https://firebase.flutter.dev/docs/analytics/usage#logging-events which does mention that any additional parameters that we need to send.
Having said that, the plugin is still in beta and rework is going on to make it stable, so there's a chance that once it becomes stable, we may see the change / updates related to it. So I suggest you to keep an eye on https://github.com/FirebaseExtended/flutterfire/issues/6979

It does make sense to close. Thanks @darshankawar for all the help.


🥇 Win the SciPy 2024 - prefix.dev puzzle 🧩

TL;DR: Like (👍) this issue to enter in winning the jigsaw puzzle at the SciPy 2024 Tacoma WA.
We've created a jigsaw puzzle specific for the SciPy 2024 and together with the attendees we put it together. Now it is done we would like to give it away. We use this issue to keep track of the people who like to win it.
To enter the lottery like this post and we'll pick a winner from the list of likes.
Disclaimer:

You need to be in person at the conference to win, as we will hand it out at the end of the conference.

Ps. don't forget to star the project 😉
The puzzle was put together by at least 40 people and a group of 14 that did a big part of it. It was an awesome way to get to know you all!

Congrats @QuLogic on winning the puzzle. And thanks everyone for liking the issue!
Hope to see you next year for the new puzzle!


Python SDK test TestOperationCommands::test_operation_stderr_output fails

tests/test_operations.py::TestOperationCommands::test_operation_stderr_output
        op = yt.run_map("echo -e -n 'someerrout' >&2; cat", input_table, output_table, sync=False, job_count=1)
        with set_config_option("operation_tracker/always_show_job_stderr", True):
            caplog.clear()                                                                                op.wait()
        assert op.get_state() == "completed"
>       assert any("someerrout" in rec.message for rec in caplog.records)                                                                                E       assert False
E        +  where False = any(<generator object TestOperationCommands.test_operation_stderr_output.<locals>.<genexpr> at 0x7fbfd88c7d60>)
tests/test_operations.py:1033: AssertionError

It fails because caplog captures no records at all.
I've found two ways to make the test pass:

Enable propagate for Yt logger here. Having propagation enabled the root logger must start handling records as well as Yt logger. However, logging directly to the root logger here without propagation doesn't help, which is weird since the only logger records will be propagated to is the root one.
Configure logger the same way it is done for arcadia environment. It replaces Yt logger with the root one, but still it is unclear why the test fails when the root logger is used explicitly.

By the way, is it okay that caplog.clear() is called after run_map? It seems it can wipe the information we wait for in case of too fast map operation.


Is it possible to hide the map settings option?

It doesn't seem to be very commonly used, but for the time being, it takes up an area like an in-roll ad 😂😂, and if it can be hidden, the interface will be much cleaner. Thank you so much! 💕

This is better handled with a snippet


a few more spelling errors and two grammar suggestions

Reading after the first set, I found a few more.

Since I already merged the previous one, this now conflicts. Can you pull the newest version so it can be merged?
Also, if you plan to send more corrections (please do!) I would prefer to hold off on merging until you're done (with a chapter/part at least)

Hi, sorry for the hassle/delay – I’m still figuring out how merging works, from forks into canonical projects. Nearly all my git is for solo stuff. Need to read that part of the manual. Thanks!

No problem. See https://github.com/rzach/git4phi/blob/master/git4phi.md#forks-and-pull-requests


Make it possible to respond to slack actions within blocks

Hey there!
Background
I am working on a project that uses the Slapp library and we're big fans of the library. Slapp makes it easy to create easily readable code when working on complex bot actions. We decided to use the  Block Kit to create our actions, however, we quickly discovered that Slapp does not cover this out of the box.
This PR
This PR makes it possible use actions when messages use BlockKit.
Specifically, the implementation provides a fallback to respond to a slack action if the action has been received via BlockKit message. As of right now, it looks within the array of msg.body.actions to find said action. There's a chance that this could not work in the case that a BlockKit message contains data from multiple actions, however, from what I can see in the (very recently released) documentation it's not possible to send multiple actions at the same time.
Happy to update this PR if I am wrong here, or to update for any additional requested changes.
Thanks!

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

I'm sorry to say, but this project no longer accepts changes/improvements to slapp library. Thanks for taking the time to make this pull request.


Should num be sealed with class modifiers.

Dart 3 will (if all goes as planned) introduce class modifiers including sealed.
A sealed class can and must be exhausted in switch cases, it's like having an enum of subtypes, every subtype must be accounted for, just like every enum value must be accounted for when switching over an enum type.
Should num be sealed?
The num type has precisely two subtypes, int and double. It's an eminent candidate for being a being sealed.
If sealed, a switch expression of switch (someNum) { int x => ..., double d => ... } would be exhaustive and not need a default case. On the other hand, a switch of:
num x = ...;
switch (x) {
  case double(isFinite: false): throw "Bad Number";
  case == 0.0 && double(isNegative: true): x = 0.0; // Convert -0.0 to 0.0
  case (isNegative: true): throw "Must be non-negative"; // Otherwise don't accept negative.
}
// All is well.

would not be allowed, because it's not exhaustive over a sealed type.
If not sealed, the switch expression will not be allowed, it will need a (useless) default case, because it's not clear that there won't be  further immediate subtypes of num in the future, which would be breaking for code assuming the current two exhaust the supertype.
But the switch statement will be allowed.
I have made num sealed in CL https://dart-review.googlesource.com/c/sdk/+/281683
That triggers errors in co19 tests which do switch over num.
Maybe that's not something that will happen outside of tests at all, so it doesn't matter.
Maybe some people actually do switch on num. (Most likely, nobody does today, the bigger question is whether they will when they get patterns.)
Opinions? (No opinions means I'll keep it sealed.)

I tend to think that it's helpful to consider types as sealed in the case where this is actually sound. This makes switch expressions more natural/convenient, and it makes the semantics of switch statements more explicit. So my first opinion is: Keep it sealed!
One thing comes to mind, though: Do we ever want a numeric zoo, e.g., int8, .., int256, .. somethingSomethingUnsigned?  If we do want that then we might break some (a handful or a lot of?) switches whenever the zoo grows. Perhaps that's still exactly what we want, because all the locations where someone wants to switch over a num expression will now be flagged as non-exhaustive, and they should then be fixed.

On the web (dart2js), all num are double. That spells trouble.
The implementation types are  JSInt implements int, double and JSNumNotInt implements double.
switch (someNum) { double d => ...} is exhaustive.
switch (someNum) { double d => ..., int x =>  ... } will never match the int pattern.

Surely there could be an exception such that class JSInt implements int, double would not be an error.
Moreover, it's not unthinkable that switches where the scrutinee type is num can be given special treatment (and similarly for nested patterns matching on a num).
Would it cause any harm to anyone (on any platform) if we emit a diagnostic message for every switch over num (top-level or nested) where an int case comes after a double case?
class Point<X extends num> {
  final X x;
  Point(this.x);
}

void main() {
  Point<num> p = ...; // Could be a `Point<T>`, for `T` in `num`, `int`, `double`, `Never`.
  switch (p)
    case Point(:double x): ...
    case Point(:int x): ... // Diagnostic: "unreachable case on the web".
  }
}

Even for code where the target platforms don't include the web, it's just a good habit, and the code might be used in a web setting at some point.

Web numbers are a problem. As always.
If you write a switch like switch (someNum) { double d => ..., int x =>  ... }, it will at least work both on the web and native, it won't be wrong, because all the numbers really are doubles.
However switch (someNum) { double d => ...} is not exhaustive, and will not be treated as exhaustive, because it doesn't cover int. We do not want different exhaustability behavior on different platforms. It's simply not a valid switch, even when compiling for the web.
Since it won't compile on the web anyway, you'll have to add either int i => or default =>/_ => to make it compile.
By making num sealed, using int i will work, and will also carry over to running on native numbers.
If num is not sealed, even adding int i => won't be sufficient.
(Unless we special-case num somehow, to be exhaustible, but not must-be-exhausted.)
Switch expressions is not worrying me. My bigger worry is switch statements needing to be exhaustive, even if switching on int or double alone doesn't need to.
That said, switching on doubles is a horrible experience anyway, and I hope most people won't do it. Doing it on num makes sense only when you want to actually separate the two types of numbers, and treat each by itself:
switch (someNum) {
  case double d: return d.toStringAsFixed(5);
  case int i: return i.toString() + ".00000";
}

This switch being exhaustive means you don't need a dummy return "unreachable"; below the switch or in a default branch.

It's sealed.


Split CI workflows into multiple files

Makes it easier to re-run individual jobs

Workflow names are better on the Checks tab now:

Had to change them a little bit to remove redundancy on the PR itself:

Before:

@swissspidy Why are there 9 expected checks awaiting here? Shouldn't all the tests pass?

@spacedmonkey Looks like GitHub Actions got confused because I renamed them. Now there are duplicate checks listed (old & new).
For example, Markdown Code Style does not exist anymore. It's called Markdown Lints / lint-md now (which passes).

In any case, the change is working as expected otherwise. Please re-review.


unbound 1.19 cause FreeBSD 14.0-RELEASE panic

unbound 1.19, FreeBSD 14.0-RELEASE
Because I am running multiple unbound instance in same host with different config file, I am not sure which one cause panic. I will keep updating this thread.
Here is panic info,
Fatal trap 12: page fault while in kernel mode
cpuid = 8; apic id = 00
fault virtual address   = 0xb8
fault code              = supervisor read data, page not present
instruction pointer     = 0x20:0xffffffff80d4f743
stack pointer           = 0x28:0xfffffe01add20c50
frame pointer           = 0x28:0xfffffe01add20ce0
code segment            = base 0x0, limit 0xfffff, type 0x1b
                        = DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags        = interrupt enabled, resume, IOPL = 0
current process         = 2863 (unbound)
rdi: ffffffff818ca280 rsi: ffffffff818ca280 rdx:<PHONE_NUMBER>010200
rcx:<PHONE_NUMBER>000000  r8: fffff8063843b900  r9: 00000000c1df0200
rax: fffff80b9a4ab000 rbx:<PHONE_NUMBER>00c1df rbp: fffffe01add20ce0
r10:<PHONE_NUMBER>000000 r11: fffffe006c36b700 r12: fffff8033d9d68c0
r13: fffff802c2961000 r14: fffff8033d9d6970 r15:<PHONE_NUMBER>000000
trap number             = 12
panic: page fault
cpuid = 8
time =<PHONE_NUMBER>
KDB: stack backtrace:
db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe01add20930
vpanic() at vpanic+0x132/frame 0xfffffe01add20a60
panic() at panic+0x43/frame 0xfffffe01add20ac0
trap_fatal() at trap_fatal+0x40c/frame 0xfffffe01add20b20
trap_pfault() at trap_pfault+0x4f/frame 0xfffffe01add20b80
calltrap() at calltrap+0x8/frame 0xfffffe01add20b80
--- trap 0xc, rip = 0xffffffff80d4f743, rsp = 0xfffffe01add20c50, rbp = 0xfffffe01add20ce0 ---
in_pcbbind_setup() at in_pcbbind_setup+0x233/frame 0xfffffe01add20ce0
in_pcbbind() at in_pcbbind+0x58/frame 0xfffffe01add20d10
udp_bind() at udp_bind+0xc8/frame 0xfffffe01add20d50
sobind() at sobind+0x32/frame 0xfffffe01add20d70
kern_bindat() at kern_bindat+0xc5/frame 0xfffffe01add20dc0
sys_bind() at sys_bind+0x9b/frame 0xfffffe01add20e00
amd64_syscall() at amd64_syscall+0x109/frame 0xfffffe01add20f30
fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe01add20f30
--- syscall (104, FreeBSD ELF64, bind), rip = 0x82632312a, rsp = 0x829110bb8, rbp = 0x829110c10 ---

This seems like a FreeBSD kernel error.
From Unbound's side I see that this may happen during a UDP bind() call.
Do I understand correctly that unbound.conf.1 has multiple instances with setfib, while unbound.conf.2 has only one?
Do you see these often? And am I correct to assume that this happens during startup/reload?
Does the same setup work reliably with older versions?
Things you could try:

Have only one of each instance then the unbound.pid file could shed more light into which one it is.
Try combinations of setfib and the so-reuseport configuration.

Hmm, I tested unbound-1.17.1, and it caused kernel panic too. I think it is an OS bug.
The system does not crash during startup/reload of unbound. It happens irregularly.
Now I am running unbound 1.19 with "so-reuseport: no" for testing. And I saved the PID information of all unbound processes.

This is not unbound bug. It is FreeBSD kernel bug. And it looks very similar to https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=273890 Please see details and try the patch.

"so-reuseport: no" only reduces the occurrence of the problem, it can still lead to kernel panic.
I am testing the kernel patch now.

Interested if this was the fix for you @hshh? Did you get it done?

Interested if this was the fix for you @hshh? Did you get it done?

Yes, the system has become stable after applying the kernel patch. The uptime is 16 days now.
I hope it can be merged into 14.0-RELEASE, @glebius .

It can't be merged into 14.0-RELEASE, since the release happened in the past. We might make a Errata Notice and a patch level for the releng branch.

Closing this as a non-issue for Unbound then :)


Decide on how to add new analysis functionality

Instead of cutting out the cookie functionality, @SebastianZimmeck  suggested adding an internal developer setting (either in code or in extension config) to enable cookies as an extra feature. This would hopefully stop GPC cookies from interfering with future development, while leaving them in for users who want to use the cookie privacy features.

Generally, maintaining different branches of software with different functionalities is considered problematic. Instead, as @stanleymarkman is saying, branch-like code organization is favored. Such organization will make it easier to keep the codebase straight as a whole.
For our purposes, I imagine we have some hardcoded value that we can change to 1 or 2 to build the extension for each of the two configs. The tricky part may be where two put this logic, and it may be also a lot of work to separate the codebase out accordingly. So, if it is too much work, we can also go with the original plan of removing the cookie logic. Third party cookies will be phased out in browsers anyways. So, ultimately, it will become irrelevant.

As we discussed in our call today, we want to add our new analysis functionality. We can use this issue to discuss how to do that. This is not about details but about the conceptual level and view at our codebase as a whole.
Background
As it currently stands, to opt users out we are sending GPC signals per the GPC spec. We also place opt out cookies per the IAB US Privacy String (e.g., with a value of 1NYN, which will opt the user out due to the Y in the third position of the string). The sending of GPC signals and placing of US Privacy String cookies may interfere with the new analysis functionality. The reason is that the new analysis functionality includes at its core [1]:

Checking the existing US Privacy String as it was set by a website (i.e., not by us),
Sending a GPC signal, and
Checking whether the US Privacy String has been changed (i.e., the site has opted the user out).

For a website that needs to comply with the CCPA (which we ensure by identifying a Do Not Sell link on their homepage), one would expect that the value would change from, e.g., 1NNN to 1NYN after sending the GPC signal.
Now, it is easy to see how the current and new functionality can get confusing. For example, instead of the site it may be us placing a cookie with 1NYN leading us to the conclusion that the site is compliant while it actually may not be.
What to do?
We need to separate the current functionality from the new functionality so that we can avoid this confusion. There different conceptual approaches:

Radically remove the current functionality, call it a day with the 2.0.0 release, and move forward  with only the new functionality. This is probably fairly straightforward to do but also means we are no longer an opt out tool but rather an analysis tool.
Have two modes. In other words, we introduce another level of abstraction in our app where a user select whether they want the old for new functionality. Only what they select is enabled, i.e., if they want analysis mode, everything we currently have is disabled. The new functionality could also be a secret mode of sorts, e.g., if the user pushes a certain button or key combination they get into the new mode.
Have two different builds. We could also try to address this on the build level. E.g., we (and users compiling from source) could build two different extensions; one with the old functionality and one with the new. This would require to modify the build scripts and codebase.

There are certainly other possibilities as well. The main guideline for us is how we can re-use the code building blocks that we already have. In principle, we already have the building blocks that we need (except for smaller items like identifying Do Not Sell links). The question is how we can organize what we have for our new functionality.
[1] We also place DAA cookies, but as that happens just once at installation time, that functionality is easier to isolate.

I looked a bit more in the codebase and my current sense is to go with 2 (Have two different modes). The codebase seems modular enough (though, we probably need to extend that modularity a bit further). Some thoughts:

We already have functionality for disabling our extension. We can reuse that.
Add an analysis button to the popup that disables the normal mode and enable the analysis mode
Upon enabling analysis mode, delete all US Privacy cookies that we have set (can we do that without deleting cookies that we have not set?) and deleting the domain list (may or may not be necessary, not sure; if so, we can warn the user with an alert that the can export their domain list first)
Add a view to the settings for the compliance analysis functionality (need to create a mockup per issue #157) with analysis results. This could be a list similar to the domain list but without toggles. It could also have an export functionality (reuse the domain list export?)
Possibly arrange code such that the analysis functionality is only available in Firefox [1].

Please think about this as well, and let's make a call tomorrow. Then, we need to come up with a more detailed implementation plan.
[1] Note: depending on what @stanleymarkman finds on issue #148, the analysis functionality may only be possible for Firefox because, different from Chrome, it supports  the webRequest.filterResponseData(). I think at a minimum we want to capture US Privacy Strings in headers, including cookies (which are also just headers), and DOM-side implementations. I am not sure whether that is possible without the webRequest.filterResponseData() API.

I agree with most of what you mentioned @SebastianZimmeck. One of my ideas for making the implementation easier or faster was to have two modes like you explained, however maybe work on adding this functionality for changing modes while the extension is running at a later time and make it a lower priority than simply having a boolean switch in our defaultSettings.js file that we can manually change as the developers. This will impact which background script is run when we build, though both will remain in the repo and in the build.
In this case, I agree we can launch the extension with normal mode on by default, but simply change the boolean flag when we want to build for the analysis mode as the developers. This makes it generally hidden to non-developers, but it's easy for us to change modes at any given time by rebuilding.
I think this will avoid having to figure out how to delete our opt-out cookies in the proper way. If we want users to be able to do this, maybe we can investigate what cookies are deleted so we aren't interfering with the user's experience and add a disclaimer that not all cookies may be deleted properly. In particular I have the DAA and the IAB cookies in mind. As I said however, this can happen at a later date IMO.

One important independent variable we need to account for in the "privacy flag experiment" is accounting for how different websites handle opt-out cookies differently. Cookies are considered fairly impermeant- the user can clear them at will, and many other conditions can lead to cookies being modified or removed locally.
To account for this, we need to determine how websites treat opt-out cookies. Do they treat the state of the cookie in the user as a "ground truth"- immediately respecting removed or modified cookies? Or, via browser fingerprinting (or even some other mechanism) do they retain user privacy settings (falling back to more-restrictive preferences on cookie clear, replacing cookies when modified for a third party, or ignoring removal of cookies).

We can still look into this issue @stanleymarkman mentioned because it is good to know generally. But for the time being we assume that a user starts with a clean browser that does not have any cookies. So, there would be no cookies to clear, and US  Privacy String cookies can be set by sites as they normally do it.
@kalicki1 will be looking into a popup banner for a decision asking the user which mode to run (we are going with the two mode idea).

Let's write up in somewhat detail which files and how the codebase need to be changes for the new analysis mode. We can doe that here.

We have two modes: protection mode and analysis mode.

@stanleymarkman and I discussed this briefly over the weekend and it seems that, correct me if I'm wrong, the following file structure is what we want to move towards. The files are not specific, they're to give a sense of what needs to be done.
src
|-background
|  |-analysis
|  |  |-background_analysis.js
|  |  |-do_not_sell_links.js
|  |  |-flag_analysis.js
|  |-protection
|  |  |-background_protection.js
|  |  |-events.js
|  |  |-listeners.js
|  |-control.js

Ensuring mode functionality across the extension (specifically, in content scripts via message passing)
@stanleymarkman also mentioned, which I agree may be the only practical solution, that the content scripts might just have to query the background process for what functionality mode we are running in order to run the in-page processes we need, be it analysis or protection (i.e. fetching well-known info, etc).
A global mode control script
In this mockup, we would have one control.js or backgroundControl.js file which holds only the logic for triggering each functionality on and off when necessary, via on/off wrappers around the analysis and protection mode modules. I'm imagining we would need a preinit(), init(), and postinit() and similarly for a halt function, just so the processes and properties can be loaded properly and unloaded properly (such as cookies) in the correct order with relation to our listeners.
One final naming convention thought
I was thinking about how to handle our modes in the code explicitly and was trying to figure out a general way of distinguishing between the "modes" we talk about, i.e. the on/off/domainlist mode and the analysis/protection mode. I thought that we could potentially use functionality or operation for the latter, and one of availability, activeness, ability, or readiness for the former?
Let me know if you all have any thoughts on this.

Excellent writeup, thanks Kuba. My opinion on the naming convention is that the term "activeness" is a pretty standard way to describe this logical flow- function handles could be something like 'setActive(bool isActive)'

Great, thanks for the review @stanleymarkman! Glad to hear that about the architecture.
I started working in a local branch on this issue and I’ll push it when most of the changes I’ve made are no longer breaking changes. We can flesh out the structure a little more then and then we should be good to go.

That is good, @kalicki1 and @stanleymarkman! A few comments:

The structure and functionality of the code goes with a certain way of using our extension. I think we need to be as clear as possible about the different workflows. At the moment, I can't completely wrap my head around all the possibilities. For example, a user switches from protection mode to analysis mode (or vice versa). What happens now? We tell the user that they cannot do it because the US Privacy String cookies are all set, and we are not deleting them? How does this situation handled by a codebase structured the way you envision it?
What is the reason for using names like functionality or operation? Why not use analysis-mode and protection-mode?

@SebastianZimmeck, here's what I'm thinking:

I know that you intend on having our workflow as clear as possible, but I think that this design will allow us to make modifications to how our mode switches work fairly easy, since everything will be compartmentalized and controlled via a central script. The only problem I see is the one you identified about cookies, which we can make a new issue for.

That being said, I think this issue falls into two domains. (1) One is getting our analysis functionality up and running without any switching logic, and simply allowing us to build as devs which one we want to run, and (2) two, creating on-the-fly switches for consumers' of the extension.

I can imagine for the time being we simply always initialize the extension via a defaultSettings option (i.e., defaultSettings.functionality = mode.functionality.protection?) and have the specific modules loaded accordingly on building our extension (via simple function calls that don't contain switching logic from a backgroundControl.js) just so we can go ahead and run our tests as devs without having to mess with protection mode, as Stanley mentioned above in this thread.

When we have the time, we can flesh out our backgroundControl.js file to have listeners for an extension message that triggers a mode switch which would call the corresponding, for example, protectionHalt() and analysisPreinit() and analysisInit() etc.

I had thought this was outside of the scope of this issue, but I'm thinking that an analysisPreinit() switch during runtime for consumers could clear our DAA cookies if that's possible (I'm not sure if that's something we can do off the top of my head), clear all cookies, or like you said, give a warning that IAB/other cookies can't be cleared and it might mess with consumers' analysis. I guess this is the biggest decision to make, and I am fine making this an issue to look into, but I don't particularly have a preference on what we do. I don't think this is a roadblock for the rest of the architecture regardless, maybe someone could give some input here on that as well, unless @SebastianZimmeck you have strong feelings everything should be able to work during normal consumer use via a mode switching mechanism. Either way, I don't think that implementation blocks us from working on other issues.

The reason for using names like functionality or operation is just to categorize what analysis-mode and protection-mode are. In my eyes it can get confusing what you're referring to when just saying mode, such as are you referring to our protection or analysis mode, or whether the extension is on or off? Maybe if we just agree to not use mode to refer to the extension being enabled/disabled/domainlisted this can be avoided, but I'm just bringing it up since we have already done this in the code. I started structuring a new extensionMode module something like this:

export const modes = Object.freeze({
	functionality: {
		analysis: 'ANALYSIS',
		protection: 'PROTECTION'
	},
	activeness: {
		enabled: 'ENABLED',
		domainlisted: 'DOMAINLISTED',
		disabled: 'DISABLED'
	}
})

Let me know if you do have opinions on any of this or if what I wrote is unclear, I'm happy to go any route as long as we're on the same page.

Thanks, @kalicki1! That is good. Let's discuss in a few minutes ...

@stanleymarkman mentioned using the anonymous mode for if a user wants to switch from protection to analysis mode. Let's look into whether that is possible. There are different modes for an extension working with anonymous mode.

I'm currently working on making sure that we can switch between modes as we need during regular extension runtime, and I'm finding that I need to move a fair bit of code around.
I am making progress, but as a heads up I am refactoring how the old protection-mode background script handles its processes, including:

moving persistent data out of protection-mode specific modules and into higher-level control modules, essentially leaving only functions in the protection specific folder
separating the global enable/disable extension on/off switch from the 3-way, protection-mode specific, enable/disable/domainlist version into a more robust isEnabled global variable for all of OptMeowt and a isDomainlisted protection-mode specific variable

@kalicki1 is implementing and re-organizing the code already. We do this in this issue and the guiding principles we have discussed here.

I'm going to use this comment as a working sticky note of To-Do stuff:

[ ] Make sure storageCookies.js works exclusively with protection-mode (i.e. double check storage.js)

I have gone ahead and opened a pull request on this issue. I will handle the remaining minor bugs in #216.
Since I have changed how we handle OptMeowt's on and off states via a new global enable/disable call and parameter independent of the mode (i.e., an isEnabled and isDomainlisted parameter, where isDomainlisted is protection-mode specific), @stanleymarkman and @OliverWang13 may have to revise some local code depending on what they have worked on. There are also a few other minor structural changes to look out for.


[cinder-csi-plugin] Allow StorageClass parameters to be set in Helm chart

Is this a BUG REPORT or FEATURE REQUEST?:
/kind feature
It would be good to be able to set parameters for the storage classes created by the CSI Cinder Helm chart. In particular, I would like to be able to set the availability zone and volume type.

@mkjpryor do you want to provide such PR? Thanks

@jichenjc I'm definitely up for doing it when I get time.

/remove-lifecycle stale
I still want to look at this at some point

/remove-lifecycle rotten

/remove-lifecycle rotten

/assign

@mkjpryor If you don't mind, I would be taking over this issue


ContainerHandler JSDocs needs fixes to the table

See the table here: https://developer.playcanvas.com/en/api/pc.ContainerHandler.html
screenshot

Already fixed here by @epreston:
https://github.com/playcanvas/playcanvas-jsdoc-template/pull/58

For the record, here's what a local build with latest looks like:


Dependabot warnings extraction docker

The extraction docker has dependabot warnings for
cryptography
IPython
requests
Please upgrade or resolve differently to
cryptography>=41.0.3
ipython>=8.10
requests>=2.31.0

Have performed a round of module updates today. The dependency security issues should now be resolved, and there were about 16 problems in the repot I looked at...


Multiline maps and lists should start on the same line as assignment

map = %{
  a: 1,
}

should be left alone and not turned into
map =
  %{
    a: 1,
  }

Same for lists.

Is this
map = %{
  a: 1,
  b: 2,
}

preferred over this
map = %{
  a: 1,
  b: 2}

with regards to the closing brace? For some reason I thought that the latter is what is done in the compiler.

The first one is preferred in "modern" Elixir. @josevalim confirm?

Btw the compiler is not the best example of Elixir code out there stylistically speakin :)

Doh, I've been using it as my reference

So Elixir was used to do this:
%{foo: 1,
  bar: 2}

But now we have changed it to:
%{
  foo: 1,
  bar: 2
}

When we had the former, I would indent the code like this:
map =
  %{foo: 1,
    bar: 2}

but now that we change the map formatting, I find this one too verbose:
map =
  %{
    foo: 1,
    bar: 2
  }

so we should probably stick with:
map = %{
  foo: 1,
  bar: 2
}

Keep in mind that this only applies to key-value pairs. Function calls, lists and so on they always run until the end of the line:
list =
  [1, 2, 3, 4, 5, 6, 7, 8, 9,
   10, 11, 12]

fun_call =
  some_fun(foo, bar, baz,
          baz)

Thanks Jose. :)

@lpil you are welcome! and feel free to dispute the post above. That's how we have been doing things but they are definitely up to debate - as we just changed maps.

I am a little surprised by the function args, I would have gone for one of these.
some_fun(foo,
         bar,
         baz,
         baz)

some_fun(
  foo,
  bar,
  baz
  baz
)

@lpil the issue is that some functions take 6 or 8 arguments. Usually a big pattern matching on the first argument and then 5 or 6 following. If we do one per line, we have this:
def some_function(
  %{module: module, function: function},
  arg1,
  arg2,
  arg3,
  arg4
) do
  ...
end

And that is just way too much? What do you think?
So we decided to try to fill as much as possible on a single line - which is what happens with lists. We have added this ability to Elixir master just recently. More info here: https://github.com/elixir-lang/elixir/commit/3b7bf4ed537fa2d9f34da735d7c000d77a36f3a5

Once things get large I prefer one item per line as it makes it much clearer where each argument/pattern begins.
As a minor addition it's also a bit easier to edit if you use a linewise editor such as vim or emacs :)

@lpil yes, I can also see that. I guess we will only know for sure after we try it. Here is another example:
case some_function(
       foo,
       bar,
       baz
     ) do
  ...

or:
case some_function(foo, bar,
                   baz) do
  ...

I guess the above also has something like:
case some_function(
  foo,
  bar,
  baz
) do
  ...

I think I always use the following in function definitions and function calls (1.):
case some_function(foo, bar,
                   baz) do

def some_function(foo, bar,
                  baz) do

It looks like a different thing than map = %{ (2.) to me. 2. is about data structures, while the 1. is not.
Also I think 1. indentation works better if you have multiline pattern matching in arguments, and when conditions in definition.

This issue also applies to structs so I will reopen until solved for structs as well.

@whatyouhide, fix for structs: https://github.com/uohzxela/ex_format/commit/1c863c796f683b0d0a534e1f29eca02a7236bec1
Let me know if there's anything I've missed.

Looks good.


Bug: use_fallback = true causing single-repeat issues

When I do not set use_fallback = false (the default setting), I am able to change an inner word in normal mode (ciw followed by my change) and successively repeat the command on other words with the '.' single-repeat normal mode command. However, when I set use_fallback = true, I can no longer successively repeat commands. I can successfully repeat the command once after changing an inner word, but it fails to repeat the command more than one time. I have tried to debug this and have narrowed it down to the s.try_complete_fallback() function inside of omnifunc.lua here.
function M.autocomplete_fallback()
  augroup(group, {clear = false})

  autocmd('InsertCharPre', {
    group = group,
    desc = 'Autocomplete using words in current file',
    callback = s.try_complete_fallback,
  })
end

function s.try_complete_fallback()
  if pumvisible() > 0 or s.is_macro() or s.is_prompt() then
    return
  end

  if match(vim.v.char, pattern) >= 0 then
    vim.api.nvim_feedkeys(buffer_code, 'n', false)
  end
end

I think that the buffer_code being passed to nvim through vim.api.nvim_feedkeys(buffer_code, 'n', false) is somehow messing up the redo-register. Looking at the documentation of vim.api.nvim_feedkeys it states that this function is subject to various quirks. I couldn't find any further details. More broadly, it is likely that this issue applies to any situation where you want to repeat a previous change and that change involved typing characters in insert mode (triggering the fallback code).

Should be fixed with dec1c21
Update lsp-zero and let me know if it worked.

This fixes the issue. Thank you!
Would you be willing to explain further the changes you made as I could not figure out exactly what was going on myself? I see now that you have added an additional keymap that translates your custom strings (plug_omni = '<Plug>(lsp-zero-complete-omni)' and plug_buffer = '<Plug>(lsp-zero-complete-word)') to the previous key codes ('' and '') when in insert mode. How does this extra layer of translation solve the issue?

Honestly, I don't know why it works. My guess is the "key code" generated by the <Plug> keymap doesn't have the same bug as the one generated by <C-x><C-o>.
Could not find anything useful on google so I read the source code of vim-simple-complete. That's the first autocomplete plugin I used, back when I started learning about vim. They have that <Plug> keymap trick, and it seems to work for them, so that's why I tried here.


Switch to BCI image

Related issue
https://github.com/harvester/harvester/issues/1868

Build an image and run with harvester master-184241d1-head. It works fine.


Prepared Spells Filter

Hello,
Is it possible to be able to keep prepared spells as a filter ON even when you log off and log back in to Foundry?
I think it resets after a refresh as well. Might be a core problem, however just thought I would ask.

👋 Hello, thanks for posting and checking out Tidy 5e Sheets!
This is something Tidy 5e can control, but it comes with a few questions and considerations. In the spirit of transparency, I have been hesitant to strongly persist transient settings like search, filter, and expand/collapse beyond the browser tab lifetime.
For some users, getting a clean slate on a new session is familiar and expected. So, the default behavior of Tidy is something I'll have to consider if I add a feature to persist filtering.
Deciding where to store this information for individual users is also a big question--for example, do I store it on the browser or in Foundry (via an actor or user flag)? This kind of data has the potential to build up over time and make actor / user data files become larger and larger without a solid means cleaning it up, so I would be more likely to persist it on the browser's localdb, meaning crossing over to other browsers or clearing the browser's localdb / cache would require re-applying the filter, which should be a minor thing.
My initial thought was to add a setting so one could opt into this feature, but the trouble is, Client Settings are already browser-specific, so one would need a setting management module to keep that user setting across multiple browsers.
I guess this is all to say, I'll give it some more thought once I get through some of the current Tidy feature goals, but I am open to any thoughts or ideas about how to approach it.

Thank you kgar, for giving it some thought, I really appreciate it. I am far being techy or a coder therefore on that score I would struggle to help, however if I think of anything from a basic users perspective I will surely come back and add it here.


Duration is missing from MdSnackBar

Bug, feature request, or proposal:
Bug
What is the expected behavior?
According to docs, there should be a duration property in MdSnackBarConfig type
What is the current behavior?
There is not a duration property in MdSnackBarConfig
Throws:
Argument of type '{ duration: number; }' is not assignable to parameter of type 'MdSnackBarConfig'.
Object literal may only specify known properties, and 'duration' does not exist in type 'MdSnackBarConfig'.

What are the steps to reproduce?
Try to add a duration property to the configuration object when open a SnackBar.
Which versions of Angular, Material, OS, browsers are affected?
Angular: 2.2.1
Material: alpha-10
OS: Windows 10 AU

https://github.com/angular/material2/blob/master/src/lib/snack-bar/snack-bar-config.ts#L18

It is in source, but...

If the property exist, but it is not released yet, it should commented out of the docs until sees released. If it was released in alpha.10, then it's weird. :/

I think it either hasn't been released yet or u have incorrect version.
There're several experimental releases http://prntscr.com/dd7u88
try them out.

It's definitely in master, although you should keep in mind that you can't pass in a config object, you need to set it as a property individually, e.g.:
let config = new MdSnackBarConfig();
config.duration = 1000;

It would probably make sense to include the ability to pass an object since we did something similar for the dialog already.

This will be released in alpha.11

Thanks you all. :)

Temporary workaround:
import { Injectable } from '@angular/core';
import { MdSnackBarRef, MdSnackBar } from '@angular/material';

@Injectable()
export class AlertsService {
	public snackBarRef: MdSnackBarRef<any>;

	constructor(
		private snackBar: MdSnackBar
	) { }

	showMsg(msg: string, haveAction: boolean, actionLabel: string, duration: number) {
		let config: any = {}; // <-- https://github.com/angular/material2/issues/2020 TODO: After alpha.11 use MdSnackBarConfig
		config.duration = (duration || 1) * 1000;

		this.snackBarRef = this.snackBar.open(msg, haveAction && actionLabel, {});

		setTimeout(() => {
			this.snackBarRef.dismiss();
		}, config.duration);
	}
}


Make Windows closable

Currently there is no easy way to close a window after it has been opened, unless you implement the event loop yourself. I think there should be a close() function, that allows us to easily close the window again.

A close() function was implemented for Window on commit 7d234c10. I believe this issue can be closed.

Thanks for bringing this to our attention.


Use with statement around open() calls

This prevents ResourceWarnings being raised when using a FileReader.

Thanks for the fix, but could you make it running with Python 2.4+? That is the minimum supported version so far.

Sorry, I have no interest in supporting anything older than 2.7 (and 2.7 is stretching it 😃).  2.6 has been out of support for over two years now, 2.5 for nearly 5 years, and 2.4 for 7.5 years.


Note that collect_into_vec is in a different trait

I couldn't find collect_into_vec until I noticed that it's not in ParallelIterator, but in IndexedParallelIterator.

Looks good, thanks!
@bors r+

bors r+


Rename CONTRIBNUTING.md to CONTRIBUTING.md

fixing typo in filename.  hope this doesn't break anything @remi-gau

if something breaks we will fix it in time


fix: Update workload create example with correct usage

Pull request

What this PR does / why we need it
Update tanzu apps workload create example so it shows the correct command usage
Which issue(s) this PR fixes

Fixes #417
Describe testing done for PR

Additional information or special notes for your reviewer

Signed-off-by: Wendy Arango<EMAIL_ADDRESS>


blame lines alignment is incorrect

In my setup, blame.nvim window is not aligned with the main buffer. Please see the screenshots attached.

Can you give some more info please, do you have anything special manipulating the window/buffer or something like that.
What is your 'scrolloff' option set to?
I will try to recreate it in any case. I had quite some issues with it during development and testing but thought I solved it.
Thanks!

I use LazyVim, so options are provided by the distribution.
Answering your questions:
 opt.scrolloff = 4
 opt.sidescrolloff = 8

I also use edgy.nvim, but turning it off did not resolve the bug.

Really weird, I also use LazyVim and edgy.nvim .
I will check it further as soon as I come back from vacation :)

My blame buffer was misaligned as well. Mine was due to having the winbar set on the main buffer (in my case nvim-navic displayed inside of lualine winbar). I wrote this autocmd to hide the lualine winbar when blame is open. You can tweak this snippet to temporarily disable the winbar if that is causing your misalignment issue as well.
vim.api.nvim_create_autocmd({ "WinEnter", "WinResized" }, {
  group = winbar_settings_group,
  desc = "Hide lualine winbar when blame is open",
  callback = function()
    local win_ids = vim.api.nvim_list_wins()

    for _, win_id in ipairs(win_ids) do
      local buf_id = vim.api.nvim_win_get_buf(win_id)
      local buf_ft = vim.api.nvim_buf_get_option(buf_id, "filetype")
      if buf_ft == "blame" then
        require("lualine").hide({
          place = { "winbar" },
          unhide = false,
        })
        break -- Exit the loop since a 'blame' filetype was found
      else
        require("lualine").hide({
          place = { "winbar" },
          unhide = true,
        })
      end
    end
  end,
})

is it a problem with line wrap?

This might be a different issue, but in my environment, when the line is so long and wrapped, the alignment gets incorrect.

blame
buffer

1:
1: some very long text

2:
first line continues

3:
2: new line

The wrapping issue should be fixed now, but I did not find a good solution for the winbar issue so I will leave this open

@FabijanZulj I was using blame.window_blame is_window_open() to toggle my barbecue (navic) off when blame is open, but this has just been removed.
I tried using require("blame.views.window_view"):is_open() but this returns false even even the window is open.
What do you suggest?

@Amleto
I have added a new method require("blame").is_open() that you can use to check if a view is open like you were until now .
If you are using barbecue it should work out of the box, and the windows should be aligned as now we also copy the winbar state to the blame window on opening.
However, if you are using something like lualine winbar that opens and close depending on your cursor position you will have to do something.
I have also added 'User' events that you can create autocommand handlers for.
They are:

BlameViewOpened
BlameViewClosed

Both of these events send the blame view type in the data field.
So you can do something like this:
      vim.api.nvim_create_autocmd("User", {
        pattern = "BlameViewOpened",
        callback = function(event)
          local blam_type = event.data
          if blame_type == "window" then
            require("barbecue.ui").toggle(false)
          end
        end,
      })

      vim.api.nvim_create_autocmd("User", {
        pattern = "BlameViewClosed",
        callback = function(event)
          local blame_type = event.data
          if blame_type == "window" then
            require("barbecue.ui").toggle(true)
          end
        end,
      })

(using barbecue as an example here, but I believe it should work well without it too)

Thanks! It does work "out of the box" for the initial blame, but I noticed when going to a new blame in the stack then code file loses its barbecue  header


Overridden globals have no effect

I use mocking for my unit tests (code here if you're interested) and in certain tests, I override global functions.
For example, if I want to override include_lib then I instantiate a new Mock class, tell it to define the key/value pair and then assign the funcRef into globals.include_lib. After the test is completed, I remove the key from globals to restore the environment state to normalcy.
This works absolutely fine when I run my tests inside GreyHack. However, when using the debugger bundled with the VSCode extension, the class under test (which is in a different, included file) does not see the new global.

I may have more information: It does seem that globals such as include_lib are also injected into locals - which is not the case in GreyHack. Could this be the cause of the problem?

That might be a bug then. I'll take a look as soon as I have time. Thanks for reporting.
Also just a side note the interpreter which is used by greybel is not actually the same as the MiniScript interpreter therefore there might some discrepancies compared to how MiniScript/GreyScript works. But since this is supposed to emulate the original behavior I'll try to fix those issues. So if you find any more discrepancies in the future feel free to create more issues. Anyway just a heads up ;)

Alright I found the culprit. I have a PR ready which going to be merged soonish https://github.com/ayecue/greybel-js/pull/109

I imagine that most of the discrepancies will be that it's a superior implementation of MiniMock. Hopefully one day the game will update to the 2023 release too.
I have a release here: https://www.greyrepo.xyz/posts/unit-testing-mocking-library
The example is a bit fatty but you should be able to extract what you need - if not, let me know and I should be able to give you a minimum sample sometime tomorrow.

Alright the PR got merged. It worked for me while testing. I'll close this ticket as soon as you can confirm that it works for you as well.

Replacement of globals also working fine now!


Rule RET503 cause autofix error

Ruff 0.0.287 (latest changes from main branch)
ruff --fix *.py  --no-cache --select RET503

file content:
def generate_route(points, type):
        return {
        }
        for i, waypoint in enumerate(json['route_instructions']):
                (instruction, length, position, time, length_caption,
                 earth_direction, azimuth, turn_type, turn_angle) = waypoint
            waypoints.append({
                'additional': ugettext('%(direction)s for %(distance)s (taking approximately %(time)s)') % {
                    },
                'path': LineString(map(lambda ps: Point(*ps),
                        ))
            })

error:
error: Autofix introduced a syntax error. Reverting all changes.

This indicates a bug in `ruff`. If you could open an issue at:

    https://github.com/astral-sh/ruff/issues/new?title=%5BAutofix%20error%5D

...quoting the contents of `9716902.py`, the rule codes RET503, along with the `pyproject.toml` settings and executed command, we'd be very appreciative!

9716902.py:7:13: RET503 Missing explicit `return` at the end of function able to return non-`None` value
Found 1 error.

9716902.py.zip

This is invalid source code. Need to decide how to handle.

How can I check if python file is invalid?
I'm using now such script
import ast
import sys

def parse_python_file(file_path):
    with open(file_path, 'r') as file:
        source_code = file.read()

    try:
        ast.parse(source_code)
        print(f"Syntax is correct in {file_path}")
    except SyntaxError as e:
        print(f"Syntax error in {file_path}: {e}")
        sys.exit(12)
        # raise Exception()

if len(sys.argv) != 2:
    print("Usage: python script.py <file_path>")
else:
    file_path = sys.argv[1]
    parse_python_file(file_path)

Your script should correctly detect that the code is invalid because either the tuple or waypoints.append is incorrectly indented.
❯ python -m ast /home/micha/.cache/.fr-52CTA2/9716902.py
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/usr/lib/python3.11/ast.py", line 1736, in <module>
    main()
  File "/usr/lib/python3.11/ast.py", line 1732, in main
    tree = parse(source, args.infile.name, args.mode, type_comments=args.no_type_comments)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/ast.py", line 50, in parse
    return compile(source, filename, mode, flags,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/micha/.cache/.fr-52CTA2/9716902.py", line 7
    waypoints.append({
                      ^
IndentationError: unindent does not match any outer indentation level

Only UP032 reports problem here(reported in other issue)


decreased double-stranded DNA break binding

for rad50 mutants in PMID:30104346
Note for future reference: the evidence in this paper is ChIP, which GO wouldn't trust by itself to support a DNA binding annotation, but there's respectable evidence that Rad50 orthologs bind DNA, and PR interprets the results as reflecting DNA binding, so I decided to allow this and the GO MF annotations in the session.

yep, especially since it needs to bind DNA to do what it does....

odd that rad50 mre11 complex is only ISS, I thought it had been studied loads...

decreased DNA binding at double-strand break FYPO:0006677
edit file: 9d0ba8f64502212e143e97742ca9bfcfd171b866
release: 5d0908432606c9998efa8d4332cd6b097ec891b6


accessibility tests from Wave and Axe give many error's

I believe this is a missing aria-label of the buttons, I will add that asap


cant build the project in any way

hi,
I tried to put up this project with the composer but always get the same error after pressing "Upload file" at the index that i created and get the error -

( ! ) Fatal error: Class 'Upload\Storage\FileSystem' not found in C:\wamp\www\Upload\up.php on line 5

when up.php is the action of the form - (copy-paste from the Readme).
I triead to add "namespace Upload" at up.php - Does not work.
I triead to change the path at the line $storage =new/Upload/Storage/FileSystem('/path/to/directory');  -  Does not work.
please help! thanks :)
`

Im seeing the same issues in my logs too:
PHP Fatal error:  Class 'Upload\FileSystem' not found in /Applications/MAMP/htdocs/upload/Upload/src/test.php on line 2
Any ideas?

The library seems dead. Ive forked it and will start updating the library to take care of these issues.

No update on this?


Cannot use import statement outside a module

I installed the Canadian Public Weather Alerts module to my Magic Mirror and I get this error. I am familiar with JavaScript in a browser, but not with NodeJS specifically. Please let me know if this is something you experienced before or it is something on my environment.
Here is the error I receive in my docker container:
[21.02.2023 17:57.29.147] [ERROR] Whoops! There was an uncaught exception...
[21.02.2023 17:57.29.153] [ERROR] /opt/magic_mirror/modules/MMM-CanadianPublicWeatherAlerts/node_modules/axios/index.js:1
import axios from './lib/axios.js';
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at Module._compile (internal/modules/cjs/loader.js:891:18)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
    at Module.load (internal/modules/cjs/loader.js:811:32)
    at Function.Module._load (internal/modules/cjs/loader.js:723:14)
    at Module.require (internal/modules/cjs/loader.js:848:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.<anonymous> (/opt/magic_mirror/modules/MMM-CanadianPublicWeatherAlerts/node_helper.js:11:15)
    at Module._compile (internal/modules/cjs/loader.js:955:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
    at Module.load (internal/modules/cjs/loader.js:811:32)

And here is my config file (redacted):
/* Magic Mirror Config Sample
*
* By Michael Teeuw http://michaelteeuw.nl
* MIT Licensed.
*
* For more information how you can configurate this file
* See https://github.com/MichMich/MagicMirror#configuration
*
*/

var config = {
    address: "<IP_ADDRESS>", // Address to listen on, can be:
    // - "localhost", "<IP_ADDRESS>", "::1" to listen on loopback interface
    // - another specific IPv4/6 to listen on a specific interface
    // - "", "<IP_ADDRESS>", "::" to listen on any interface
    // Default, when address config is left out, is "localhost"
    port: 8888,
    ipWhitelist: [], // Set [] to allow all IP addresses
    // or add a specific IPv4 of <IP_ADDRESS> :
    // ["<IP_ADDRESS>", "::ffff:<IP_ADDRESS>", "::1", "::ffff:<IP_ADDRESS>"],
    // or IPv4 range of <IP_ADDRESS> --> <IP_ADDRESS> use CIDR format :
    // ["<IP_ADDRESS>", "::ffff:<IP_ADDRESS>", "::1", "::ffff:<IP_ADDRESS>/28"],

    language: "en",
    timeFormat: 24,
    units: "metric",

    modules: [
        {
            module: "alert",
        },
        {
            module: "updatenotification",
            position: "top_center"
        },
        {
            module: "clock",
            position: "top_left"
        },
        {
            module: "calendar",
            position: "top_left",
            config: {
                maximumNumberOfDays: 90,
                maximumEntries: 8,
                animationSpeed: 0,
                colored: true,
                timeFormat: "absolute",
                displayRepeatingCountTitle: true,
                getRelative: 48,
                calendars: [
                    {
                        symbol: "calendar-check-o ",
                        color: "#FC54FC",
                        url: "https://www.calendarlabs.com/ical-calendar/ics/39/Canada_Holidays.ics"
                    },
                    {
                        symbol: "birthday-cake ",
                        color: "#00FF00",
                        url: "https://***/birthdays.ics"
                    },
                    {
                        url:"https://calendar.google.com/***",
                        customClass: function(event) {
                            if(event.title.indexOf('$') !== -1) {
                                // when an event title has a $, it will be displayed in red
                                return ['paiement'];
                            }
                            return [];
                        }
                    }
                ]
            }
        },
        {
            module: "weather",
            position: "top_right",
            config: {
                type: "current",
                useKMPHWind: true,
                useBeaufort: false,
                showHumidity: true,

                location: "***",
                locationID: "***",
                apiKey: "***"
            }
        },
        {
            module: "weatherforecast",
            position: "top_right",
            header: "Weather Forecast",
            config: {
                type: "forecast",
                colored: true,
                showRainAmount: true,
                showNextDayAfter: 18,
                location: "***",
                locationID: "***",
                apiKey: "***",
                appid: "***",
            }
        },
        {
            module: "MMM-CanadianPublicWeatherAlerts",
            position: "bottom_center",
            config: {
                lang: 'en',
                regions: [
                    {
                        code: "qc62"
                    },
                    {
                        code: "qc67"
                    }
                ],
                updateInterval: 60000,
                animationSpeed: 1000,
                displayInterval: 5000
            }
        },
        {
            module: 'MMM-MyWastePickup',
            position: 'top_left',
            header: 'Waste Collection',
            config: {
                collectionCalendar: 'external',
                location: 'https://***/schedule.csv',
                limitTo: 2
            }
        },
        {
            module: 'MMM-Garfield',
            position: 'bottom_right',
            config: {
                invertColors: false,
                updateInterval : 3600000,
            }
        },
    ]

};

/*************** DO NOT EDIT THE LINE BELOW ***************/
if (typeof module !== "undefined") { module.exports = config; }

Thanks

Sorry for the late reply, must have missed the notification. It definitely could be something on your environment, I wasn't able to reproduce this at all. I've tested with different versions of magicmirror and npm, everything seems to be working fine.
To be honest, I'm not too familiar with NodeJs either (learned a little bit just for this project), so I'm not 100% on what the issue is, just that its some sort of discrepancy between ES Modules and CommonJS.
Fortunately, in the next update I removed the dependency on axios, which seemed to be causing your problem. It should be released sometime in the next few days. If you want, you can give it a try and let me know how it goes.


2.x AwsDataCenterInfo::getName is misleading

Hi,
I'm currently testing eureka2. I have 2 apps registering and sending "alive" events to eureka2. One of the app is supposed to listen for the other and react to the other being down. The thing is, i was hoping to filter the change notifications based on the datacenter as the app must not care about other apps from other datacenters not being alive. Using DataCenterInfo I thought getName would give me the datacenter name. It turns out that AwsDataCenterInfo provides the instanceId when I call that method so two apps in the same datacenter but on two different instances end up returning different values for getName().
So then I thought I must have understood this wrong and DataCenterInfo may actually mean "Information from the Datacenter" but that's not what the JavaDoc says:
DataCenterInfo encapsulates information about the data center where a given server is running, plus server specific information, like IP addresses, host names, etc.

I'll end up not using DataCenterInfo for now to do what I want and use MetaDatas instead but I thought you may want to clarify that.
Thanks ! :)

Thank you for your comment. The DataCenterInfo API is really misleading. Probably we would need to have both getName and getInstanceId methods, with the former returning the data center name. This is actually the behavior in Eureka1.

archiving as eureka2 work is going through some larger internal changes.


Oracle concatenate fields

Hello.
I'm trying to use ORA_HASH function on all table fields. Is there any way to do it with pypika?
As a result I want to get something like:
SELECT ORA_HASH("FIELD_A"||"FIELD_B"||"FIELD_C") AS "HASH", "FIELD_A", "FIELD_B", "FIELD_C" FROM "TABLE1"

Hi. Usually you can create an instance of the pypika Function class using the factory class https://github.com/kayak/pypika/blob/cce2435b101870d6b82b2c80bd8a4d96bc6aaf93/pypika/terms.py#L1077
Since your function has some deviating syntax, the pipe characters between args, I would recommend instead creating a Function subclass and overriding the get_sql function like the following example:
from pypika.functions import Function

class OraHash(Function):

     def __init__(fields):
        self.fields = fields
    def get_sql(**kwargs):
        return '||'.join(field.get_sql(**kwargs) for field in self.fields)

Check out https://github.com/kayak/pypika/blob/cce2435b101870d6b82b2c80bd8a4d96bc6aaf93/pypika/functions.py for more examples


ActiveSupport::Deprecation.silence is used (Rails 5.0 to Rails 5.2)

Several instance of ActiveSupport::Deprecation.silence are used in the R5.1 branch to suppress the warnings when no actual logic problem exists (in one example, the warning is triggered by the use of self.changed?, even though it is not used in an after_save context, as explicitly mentioned in the warning.  See lib/housekeeping/users.rb:71.

Overtaken by events...


os/signal Notify example

SIGKILL can not be captured

Are you trying to report an issue with the Notify example of os/signal package? If so, you should use Go's issue tracker:
https://github.com/golang/go/issues
This issue tracker is for the gddo project only.


Clarified the content of the license file

I have clarified (at least from my perspective) on what the license file should contain. I guess it could help future developers

I have made the same changes in the #1403, so I will close it

Plea

Please don't mix different concerns in a single PR.

Ok, can you please review it then @schauder? I will remove this changes from #1286 PR

Thanks, that's polished and merged.


Minor documentation fixes

add exemption to the linter to avoid confusion about numbers
add missing version information for JSON_DISABLE_ENUM_SERIALIZATION

Coverage remained the same at 100.0% when pulling 00859bf5a8cc67f372b54f2aef2193df40ce451b on minor_documentation_fixes into feef0eb59500ba5e36cbc2fe1b03d9ed1f2472b6 on develop.


JSON-based logs in session_log table

Вложенность шагов разных уровней логов: SessionLog: Session_steps -> Agent_steps
https://gist.github.com/z00sts/fdb76cf85bef556550d8
Пока новый лог формируется параллельно со старым способом.

!test

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
http://jenkins.test//job/vmmaster.staging.regression/86/

!test

!test

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
http://jenkins.test//job/vmmaster.staging.regression/87/

!test

!test

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
http://jenkins.test//job/vmmaster.staging.regression/91/

:+1: но надо прям тестить

!test

!test

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
http://jenkins.test//job/vmmaster.staging.regression/95/

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
http://jenkins.test//job/vmmaster.staging.regression/96/


sharedlibraries: rework ebpf prog concurrency

What does this PR do?
Replaces the old method for initialization and teardown for the EBPFProgram struct.
Instead of sync.Once and atomic.Int32 to support concurrency, we simply use a mutex.
Motivation
The current code is hacky and seems complicated.
Trying to simplify the readability of the code and avoid edge cases.
Describe how you validated your changes

Possible Drawbacks / Trade-offs
Additional Notes

negligible (if any) performance impact, as we have about 3-4 instances that use it, and the initialization/termination runs once per handler.

/merge


AnonymousNotifiable is missing locale() method

Laravel Version: 8.64.0
PHP Version: 8.0
Database Driver & Version: MariaDB on Sail

Description:
On-Demand-Notifications like
Notification::route('mail'<EMAIL_ADDRESS>            ->route('nexmo', '5555555555')
            ->route('slack', 'https://hooks.slack.com/services/...')
            ->notify(new InvoicePaid($invoice));

(taken from https://laravel.com/docs/8.x/notifications#on-demand-notifications) are missing the locale() method. This way it's impossible to send translated notifications to people, who are not present as users in the application yet.

With the InvoicePaid class extending Illuminate\Notifications\Notification, locale can be set on that object:
Notification::route('mail'<EMAIL_ADDRESS>            ->route('nexmo', '5555555555')
            ->route('slack', 'https://hooks.slack.com/services/...')
            ->notify(
                (new InvoicePaid($invoice))->locale('de-DE')
            );

A locale argument could be added to the InvoicePaid constructor to cleanup the instantiation call.

 app(Illuminate\Contracts\Notifications\Dispatcher::class) is a ChannelManager singleton so the below ugly-looking two-statement hack also works right now:
// calls ChannelMananger@locale()
Notification::locale('de-DE');

// AnonymousNotifiable@notify() calls ChannelManager@send() on the
// same instance that has property ChannelManager@locale stored.
Notification::route('mail'<EMAIL_ADDRESS>            ->route('nexmo', '5555555555')
            ->route('slack', 'https://hooks.slack.com/services/...')
            ->notify(new InvoicePaid($invoice));

For your desired solution, a PR submission is required make AnonymousNotifiable meet the HasLocalePreference contract:
namespace Illuminate\Notifications;

use Illuminate\Contracts\Notifications\Dispatcher;
use Illuminate\Contracts\Translation\HasLocalePreference;
use InvalidArgumentException;

class AnonymousNotifiable implements HasLocalePreference
{
    protected $locale;

    public function locale($locale)
    {
        $this->locale = $locale;
    }

    public function preferredLocale()
    {
        return $this->locale;
    }

    // ...
}

Notification::route('mail'<EMAIL_ADDRESS>            ->route('nexmo', '5555555555')
            ->route('slack', 'https://hooks.slack.com/services/...')
            ->locale('de-DE')
            ->notify(new InvoicePaid($invoice));

With # 1 working, I was obviously wrong. This works fine and so this issue is not a bug but a mistake on my side. Sorry and thanks for your explanations.


Get-UAScript does not display tags

The object returned by Get-UAScript has a Tags property, but it is empty even when tags are applied to a script. I can run Get-UAScriptTag to get this info but it seems like it should be included in the script metadata.

Tags will now automatically be returned.


Normalize display/enabled flags

Public API should be consistent, currently we have a mix of flags for making things visible or not.

In my lib, I'm exposing display, in all nodes, even if behind I have to write enabled (where needed).


Unable to open 'asciidoc': Cannot read property 'document' of undefined.

When trying to open the preview pane I get the following message:
Unable to open 'asciidoc': Cannot read property 'document' of undefined.

Both shortcut [Ctrl] + [Shift] + [V] / [Ctrl] + [K] + [V] trigger the error.

Stacktrace:
workbench.main.js:sourcemap:2742 Unable to open 'asciidoc': Cannot read property 'document' of undefined.: Error: Unable to open 'asciidoc': Cannot read property 'document' of undefined.
    at t.doHandleSetInputError (file:///C:/Program Files/Microsoft VS Code/resources/app/out/vs/workbench/workbench.main.js:4079:79)
    at file:///C:/Program Files/Microsoft VS Code/resources/app/out/vs/workbench/workbench.main.js:4078:688
    at Object.v [as _notify] (file:///C:/Program Files/Microsoft VS Code/resources/app/out/vs/workbench/workbench.main.js:140:302)
    at Object.enter (file:///C:/Program Files/Microsoft VS Code/resources/app/out/vs/workbench/workbench.main.js:143:568)
    at n.Class.derive._creator._run (file:///C:/Program Files/Microsoft VS Code/resources/app/out/vs/workbench/workbench.main.js:144:866)
    at n.Class.derive._creator._chainedError (file:///C:/Program Files/Microsoft VS Code/resources/app/out/vs/workbench/workbench.main.js:144:225)
    at n (file:///C:/Program Files/Microsoft VS Code/resources/app/out/vs/workbench/workbench.main.js:142:40)
    at n.Class.define.cancel.then (file:///C:/Program Files/Microsoft VS Code/resources/app/out/vs/workbench/workbench.main.js:145:662)
    at Object.enter (file:///C:/Program Files/Microsoft VS Code/resources/app/out/vs/workbench/workbench.main.js:142:109)
    at n.Class.derive._creator._run (file:///C:/Program Files/Microsoft VS Code/resources/app/out/vs/workbench/workbench.main.js:144:866)
    at n.Class.derive._creator._setCompleteValue (file:///C:/Program Files/Microsoft VS Code/resources/app/out/vs/workbench/workbench.main.js:144:560)

Also works for me now with 0.7, sry for late reply. Big thx, your extension helps me spreading asciidoc within my company.


:tada: Hello Statemint

:tada: Statemint
:zap: asset
:wrench: for any chain use system token if not specified
:tada: speck
:wrench: one prefix rules them all
:wrench: enable dot on beta
:wrench: stt config
:zap: static from workspace

Thank you for your contribution to the KodaDot - One Stop Shop for Polkadot NFTs.
👇 __ Let's make a quick check before the contribution.
PR Type

[ ] Bugfix
[x] Feature
[ ] Refactoring

Context

[ ] Closes #<issue_number>
[ ] Requires deployment <snek/rubick/worker>

Before submitting pull request, please make sure:

[x] My contribution builds clean without any errors or warnings
[x] I've merged recent default branch -- main and I've no conflicts
[x] I've tried to respect high code quality standards
[x] I've didn't break any original functionality

Optional

[ ] I've tested it at </ksm/collection>
[ ] I've tested PR on mobile
[ ] I've written unit tests 🧪
[ ] I've found edge cases

Copilot Summary

🤖 Generated by Copilot at 95be9ac
This pull request adds support for Statemint (stt), a Polkadot parachain, to the app. It updates various modules and types with the stt chain prefix and its properties, urls, and features. It also creates a new workspace package called static that contains the chain-related constants and types.

🤖 Generated by Copilot at 95be9ac

We're adding stt to the app, me hearties
A new chain for the Polkadot family
So pull on the rope and update the code
And we'll sail with Statemint across the web

Oh fuk I miss actions

Chain selection working on both mobile and desktop

Statemint button only works after i click on some other network:
https://github.com/kodadot/nft-gallery/assets/36627808/218391dd-32d5-481a-af80-b4b7834b2dd2

Chain selection working on both mobile and desktop

Statemint button on main page only works after i click on some other network:
statemint.mp4

Sir you were already on statemint ^-^
That's the reason it hasn't worked for you

Chain selection working on both mobile and desktop

Statemint button on main page only works after i click on some other network:
statemint.mp4

Sir you were already on statemint ^-^ That's the reason it hasn't worked for you

nooooooooo :

Chain selection working on both mobile and desktop

Statemint button on main page only works after i click on some other network:
statemint.mp4

Sir you were already on statemint ^-^ That's the reason it hasn't worked for you

nooooooo, mb! hahaha

kodadot/vuex-options ?

0.1.5 just for u

where can I find infos about differences between Statemine & Statemint? is there a rococo testnet?

The biggest difference is coming in next few days
https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-

testnet

It's name is WestMint and I will add it as soon as I get access to the archive node

Soo can we merge?

pay 100 usd