Add support for secure token storage

Token storage change in latest release of gh
This is a message from the GitHub CLI team, maintainers of gh, writing to inform you that the most recent release of gh contains changes which may affect your extension. The latest release introduces the feature of storing authentication tokens in the system keyring (encrypted storage) instead of in a plain text file.
The keyrings that are supported are:

Keychain on macOS

GNOME Keyring on Linux (Secret Service dbus interface)

Wincred on Windows

This has huge security benefits for the users of our tool and was one of our oldest outstanding issues. Unfortunately this change has the potential to break extensions that rely on utilizing the users authentication token to work.
In order to have continued compatibility with gh there are some actions you, as an extension author, need to take. These actions will depend on the implementation of your extension.
Extensions built in Go using go-gh:

Upgrade your go-gh version to v1.2.1, the latest version.

This can be done using go get<EMAIL_ADDRESS>

Verify that in your extension retrieval of the user authentication token is done using the  auth.TokenForHost function.

If you were previously accessing the authentication token using any other method it will no longer work.
Automatic resolution of the authentication token when using the API clients will continue to work without changes.

All other extensions:

Verify that in your extension retrieval of the user authentication token is done by shelling out to the gh auth token command.

If you were previously accessing the authentication token using the gh config get command, reading the configuration file directly, or any other methods it will no longer work.

As of right now storing the authentication token in the system keyring is an opt-in feature, but in the near future it will be required and at that point if the changes above are not made then your extension will be broken for all users. If you have any questions/concerns about this change please feel free to open a discussion in the gh repo.
Thanks,
The GitHub CLI Team

Thank you @samcoe!
Currently this extension only uses the following "native" gh commands:

https://github.com/balvig/gh-start/blob/062fa20688f7ef54b4ad7f20c9d74bd20106bf1a/lib/start/github/api.rb#L17
https://github.com/balvig/gh-start/blob/062fa20688f7ef54b4ad7f20c9d74bd20106bf1a/lib/start/github/api.rb#L21
https://github.com/balvig/gh-start/blob/062fa20688f7ef54b4ad7f20c9d74bd20106bf1a/lib/start/github/api.rb#L25

I assume these will continue to "just work" with whatever authentication scheme they rely on, but let me know if anything seems off!


Remove run exp from some more docs pages and sections

@jellebouwman I've removed run experiments from a few more sections in the docs. Note that some of the accompanying screenshots will also need to be changed. Also, if any of the deleted docs sections are referenced from Studio, those references will have to be removed.

I'll check the links in the studio codebase 👍

I'll check the links in the studio codebase 👍

There's some stuff to clean up, I'll create a Studio counterpart PR to clean those out.
Merging this into the other branch - thanks @tapadipti!


Extract not translatable strings

Extract not-translatable strings to a separate file, to avoid accidental copying of these strings while translating... (as happened in #47, #65, #68)

Now it's easier to understand.
Thank you!


Updating templates to reflect new instance types (EC2 and RDS)

Issue #2 , if available:
Description of changes:
Closes aws-samples/aws-refarch-moodle#2 by updating the necessary files.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Apologies. It's been a crazy few weeks and I have not had time to look at this. I'll get to it by the end of the week.

Finally had a minute. I appreciate the first two commits and would be glad to approve them. The third, moves from PSQL to MySQL. I'm open to that, but we should offer an option. Do you want to add that option or commit the new size options?


Add active class on vue-slider-piecewise-dot

This is a missing piece to style the active class using css. With this PR it's possible to style .vue-slider-piecewise-dot.active

Great, thanks!


Direct Boot, please

Hi Folks
Flashing the esp32c3 used to be super fast allowing for a nice workflow. Seems that the current flashing procedure introduces substantial overhead, and is thus a severe regression.
Can we please have the "direct-boot" back. If it considered unsafe, let's rename it to "unsafe-boot" or something.
(Not sure if I posted at the right spot, please feel free to move issue if there is a better place for it ...)
/Per

It's not unsafe, we removed it as they became too difficult to maintain. You can see the discussion we had in #803.
From my perspective, I think it would be better to improve the flashing speeds in espflash/probe-rs (by the way, the probe-rs master has had significant improvements) than support direct boot, but if concerns are addressed we could see direct-boot come back.

Unsafe as in not supporting secure boot, but I guess its not supported yet in any case, so not any less secure than non-direct-boot then.
We saw there was an option to provide your own linker script, we will try that. (For small binaries, the difference in flash speed is huge, even when using latest probe-rs release). Moreover, it seems that non-direct-boot does not play well with probe-rs-debug + vscode plugin, but it may be just some missing option in the launch config. (It is not able to flash at all using the vscode plugin, but using probe-rs run it is possible, so it must be some flag propagation missing (--format idf). Similar story with cargo embed.

Honestly, I really have no desire to deal with direct boot anymore, as @MabezDev alluded to it was a constant source of problems. It often got missed when updating linker scripts, and on multiple occasions was broken for weeks or months before anybody actually noticed.
If you insist on using this image format, I will say that you should probably provide your own linker scripts. If somebody wants to commit to maintaining this feature I would potentially reconsider, but this would involve adding a CODEOWNERS file and I would expect that person to be on top of maintenance, and be willing to test/verify things before each release. I don't think this is a very reasonable expectation for a community member, but maybe somebody really wants this feature.
I agree that improving tooling would probably be a much better use of time than re-adding direct boot support to the HAL.

(For small binaries, the difference in flash speed is huge, even when using latest probe-rs release).

have you tried the master branch, because last release i see was on october.

(It is not able to flash at all using the vscode plugin, but using probe-rs run it is possible, so it must be some flag propagation missing (--format idf). Similar story with cargo embed

vscode does have this feature!
"flashingConfig": {
...
"formatOptions": {
"format": "idf"
}
}
cargo-embed doesn't have this flag, but you can easily fork and change a single line to enable this, as cargo-embed is just a thin wrapper over probe-rs

I figured there should be such an option, but I failed to get it working with the released version. I'll try installing from source and see if that works.
Thanks for the heads up by the way!


Concatenate Issue when receiving a condition array

import numpy as np

#pythran export outputCodeActiveZoneOpt()
def outputCodeActiveZoneOpt():
    din = [1, 2, 56, 13, 3, 45, 76, 7345, 34, 67, 5]
    a = np.array(din, dtype=np.int64)
    C1 = a < 50
    b = a[C1]
    C2 = np.concatenate([[True], (np.diff(b) != 1)])
    return C2

gives
In file included from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/include/__builtin__/bool_.hpp:5:0,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/__builtin__/bool_.hpp:4,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/types/NoneType.hpp:8,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/types/slice.hpp:5,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/core.hpp:29,                  from /tmp/tmpj87jd7kg.cpp:1: /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/include/types/tuple.hpp: In instantiation of ‘{anonymous}::pythonic::types::array<T, sizeof... (S)> {anonymous}::pythonic::types::_to_array(const Tuple&, {anonymous}::pythonic::utils::index_sequence<N ...>) [with T = {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::add, {anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > >; Tuple = std::tuple<{anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > >; long unsigned int ...S = {0, 1}; {anonymous}::pythonic::types::array<T, sizeof... (S)> = {anonymous}::pythonic::types::array_base<{anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::add, {anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > >, 2, {anonymous}::pythonic::types::tuple_version>; {anonymous}::pythonic::utils::index_sequence<N ...> = {anonymous}::pythonic::utils::integer_sequence<long unsigned int, 0, 1>]’: /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/include/types/tuple.hpp:577:24:   required from ‘{anonymous}::pythonic::types::array<T, sizeof... (Tys)> {anonymous}::pythonic::types::to_array(const std::tuple<_Elements ...>&) [with T = {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::add, {anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > >; Tys = {{anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> >}; {anonymous}::pythonic::types::array<T, sizeof... (Tys)> = {anonymous}::pythonic::types::array_base<{anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::add, {anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > >, 2, {anonymous}::pythonic::types::tuple_version>]’ /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/include/__builtin__/pythran/static_list.hpp:36:65:   required from ‘{anonymous}::pythonic::types::static_list<typename __combined<T0, Tys ...>::type, (1 + sizeof... (Tys))> {anonymous}::pythonic::__builtin__::pythran::static_list(const std::tuple<_El0, _El ...>&) [with T0 = {anonymous}::pythonic::types::list<bool>; Tys = {{anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> >}; {anonymous}::pythonic::types::static_list<typename __combined<T0, Tys ...>::type, (1 + sizeof... (Tys))> = {anonymous}::pythonic::types::array_base<{anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::add, {anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > >, 2, {anonymous}::pythonic::types::list_version>; typename __combined<T0, Tys ...>::type = {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::add, {anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > >]’ /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/include/__builtin__/pythran/static_list.hpp:39:5:   required from ‘decltype ({anonymous}::pythonic::__builtin__::pythran::static_list((forward<Types>)(<unnamed>::pythonic::__builtin__::pythran::functor::static_list::operator()::types)...)) {anonymous}::pythonic::__builtin__::pythran::functor::static_list::operator()(Types&& ...) const [with Types = {std::tuple<{anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > >}; decltype ({anonymous}::pythonic::__builtin__::pythran::static_list((forward<Types>)(<unnamed>::pythonic::__builtin__::pythran::functor::static_list::operator()::types)...)) = {anonymous}::pythonic::types::array_base<{anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::add, {anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > >, 2, {anonymous}::pythonic::types::list_version>]’ /tmp/tmpj87jd7kg.cpp:64:512:   required from here /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/include/types/tuple.hpp:571:14: error: no matching function for call to ‘{anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::add, {anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > >::numpy_expr(std::__tuple_element_t<0, std::tuple<{anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > > >&)’      return {{static_cast<T>(std::get<S>(t))...}};               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/types/ndarray.hpp:39:0,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/types/tuple.hpp:12,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/__builtin__/bool_.hpp:7,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/types/NoneType.hpp:8,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/types/slice.hpp:5,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/core.hpp:29,                  from /tmp/tmpj87jd7kg.cpp:1: /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/types/numpy_expr.hpp:73:3: note: candidate: {anonymous}::pythonic::types::numpy_expr<O, Args>::numpy_expr(const Args& ...) [with Op = {anonymous}::pythonic::operator_::functor::add; Args = {{anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> >}]    numpy_expr<Op, Args...>::numpy_expr(Args const &... args)    ^~~~~~~~~~~~~~~~~~~~~~~ /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/types/numpy_expr.hpp:73:3: note:   candidate expects 2 arguments, 1 provided In file included from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/include/types/ndarray.hpp:36:0,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/types/ndarray.hpp:4,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/types/tuple.hpp:12,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/__builtin__/bool_.hpp:7,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/types/NoneType.hpp:8,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/types/slice.hpp:5,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/core.hpp:29,                  from /tmp/tmpj87jd7kg.cpp:1: /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/include/types/numpy_expr.hpp:575:5: note: candidate: constexpr {anonymous}::pythonic::types::numpy_expr<O, Args>::numpy_expr({anonymous}::pythonic::types::numpy_expr<O, Args>&&) [with Op = {anonymous}::pythonic::operator_::functor::add; Args = {{anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> >}]      numpy_expr(numpy_expr &&) = default;      ^~~~~~~~~~ /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/include/types/numpy_expr.hpp:575:5: note:   no known conversion for argument 1 from ‘std::__tuple_element_t<0, std::tuple<{anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > > > {aka const {anonymous}::pythonic::types::list<bool>}’ to ‘{anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::add, {anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > >&&’ /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/include/types/numpy_expr.hpp:574:5: note: candidate: {anonymous}::pythonic::types::numpy_expr<O, Args>::numpy_expr(const {anonymous}::pythonic::types::numpy_expr<O, Args>&) [with Op = {anonymous}::pythonic::operator_::functor::add; Args = {{anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> >}]      numpy_expr(numpy_expr const &) = default;      ^~~~~~~~~~ /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/include/types/numpy_expr.hpp:574:5: note:   no known conversion for argument 1 from ‘std::__tuple_element_t<0, std::tuple<{anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > > > {aka const {anonymous}::pythonic::types::list<bool>}’ to ‘const {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::add, {anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > >&’ /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/include/types/numpy_expr.hpp:573:5: note: candidate: constexpr {anonymous}::pythonic::types::numpy_expr<O, Args>::numpy_expr() [with Op = {anonymous}::pythonic::operator_::functor::add; Args = {{anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> >}]      numpy_expr() = default;      ^~~~~~~~~~ /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/include/types/numpy_expr.hpp:573:5: note:   candidate expects 0 arguments, 1 provided In file included from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/include/__builtin__/bool_.hpp:5:0,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/__builtin__/bool_.hpp:4,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/types/NoneType.hpp:8,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/types/slice.hpp:5,                  from /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/core.hpp:29,                  from /tmp/tmpj87jd7kg.cpp:1: /home/igajadua/.local/lib/python3.6/site-packages/pythran/pythonic/include/types/tuple.hpp:571:48: error: could not convert ‘{{<expression error>}}’ from ‘<brace-enclosed initializer list>’ to ‘{anonymous}::pythonic::types::array<{anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::add, {anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > >, 2> {aka {anonymous}::pythonic::types::array_base<{anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::add, {anonymous}::pythonic::types::list<bool>, {anonymous}::pythonic::types::numpy_expr<{anonymous}::pythonic::operator_::functor::ne, {anonymous}::pythonic::types::ndarray<long int, {anonymous}::pythonic::types::array_base<long int, 1, {anonymous}::pythonic::types::tuple_version> >, {anonymous}::pythonic::types::broadcast<long int, long int> > >, 2, {anonymous}::pythonic::types::tuple_version>}’      return {{static_cast<T>(std::get<S>(t))...}};                                                 ^ WARNING: Compilation error, trying hard to find its origin... WARNING: Nop, I'm going to flood you with C++ errors! CRITICAL: Cover me Jack. Jack? Jaaaaack!!!!
I have simplified it all I could.
Regards,
Rodrigo Iga.

Thanks for the report!
#pythran export outputCodeActiveZoneOpt()
def outputCodeActiveZoneOpt():
    din = [1, 2, 56, 13, 3, 45, 76, 7345, 34, 67, 5]
    a = np.array(din, dtype=np.int64)
    C1 = a < 50
    b = a[C1]
    C2 = np.concatenate([np.array([True]), (np.diff(b) != 1)])
    return C2

works just nice (note the conversion from list to array), I can reproduce your issue, /me investigates :-)


C# export is broken on 4.3.beta1

Tested versions
-Reproducable in v4.3.beta1.official [a4f2ea91a]
-Works in v4.3.dev6.mono.official [89850d553]
System information
Godot v4.3.beta1 - macOS 14.5.0 - Vulkan (Forward+) - integrated Apple M3 Max - Apple M3 Max (16 Threads)
Issue description
Exported project with C# scripts results in runtime errors:
Godot Engine v4.3.beta1.official.a4f2ea91a - https://godotengine.org
Vulkan 1.2.275 - Forward+ - Using Device #0: Apple - Apple M3 Max

2024-06-01 16:13:07.558 test_build[18513:6954146] WARNING: AVCaptureDeviceTypeExternal is deprecated for Continuity Cameras. Please use AVCaptureDeviceTypeContinuityCamera and add NSCameraUseContinuityCameraDeviceType to your Info.plist.
ERROR: No loader found for resource: res://GameManager.cs (expected type: Script)
   at: _load (core/io/resource_loader.cpp:289)
ERROR: Can't load dependency: res://GameManager.cs.
   at: parse_variant (core/io/resource_format_binary.cpp:461)
ERROR: Error when trying to parse Variant.
   at: parse_variant (core/io/resource_format_binary.cpp:505)
ERROR: Error when trying to parse Variant.
   at: parse_variant (core/io/resource_format_binary.cpp:492)
ERROR: Failed loading resource: res://.godot/exported/133200997/export-3070c538c03ee49b7677ff960a3f5195-main.scn. Make sure resources have been imported by opening the project in the editor at least once.
   at: _load (core/io/resource_loader.cpp:282)
ERROR: Failed loading scene: res://main.tscn.
   at: start (main/main.cpp:3860)

But works in previous version (4.3.dev6)
Steps to reproduce

Create new project
Add a C# script and put in on the scene
Export the project to test_build.app
Run and observe the game crashes

Minimal reproduction project (MRP)
broken_build_43beta1.zip

Same errors for Godot v4.3.beta1 - gl_compatibility on both:

iPhone SE (3rd generation) emulator, xcode 15.4, MacBookPro15,1 Sonoma 14.5
and iPhone 12 Pro Max 17.5.1

works in 4.2.2

I got similar error for both macOS & Windows exports from macOS.
Godot Engine v4.3.beta1.official.a4f2ea91a - https://godotengine.org
Vulkan 1.3.277 - Forward+ - Using Device #0: NVIDIA - NVIDIA GeForce RTX 4070 SUPER

ERROR: No loader found for resource: res://level/Level.cs (expected type: Script)
   at: (core/io/resource_loader.cpp:289)
ERROR: No loader found for resource: res://enemies/Enemies.cs (expected type: Script)
   at: (core/io/resource_loader.cpp:289)
ERROR: No loader found for resource: res://enemies/EnemyData.cs (expected type: Script)
   at: (core/io/resource_loader.cpp:289)
ERROR: Can't load dependency: res://enemies/EnemyData.cs.
   at: (core/io/resource_format_binary.cpp:461)
ERROR: Failed loading resource: res://.godot/exported/133200997/export-9cf05ca6b5ec0f125e9b3f8704f6dae4-melee.res. Make sure resources have been imported by opening the project in the editor at least once.
   at: (core/io/resource_loader.cpp:281)
ERROR: No loader found for resource: res://Player/PlayerController.cs (expected type: Script)
   at: (core/io/resource_loader.cpp:289)
ERROR: Can't load dependency: res://level/Level.cs.
   at: (core/io/resource_format_binary.cpp:461)
ERROR: Error when trying to parse Variant.
   at: (core/io/resource_format_binary.cpp:505)
ERROR: Error when trying to parse Variant.
   at: (core/io/resource_format_binary.cpp:492)
ERROR: Failed loading resource: res://.godot/exported/133200997/export-6581cd44ca730c421bddc3302d6ce6cc-root.scn. Make sure resources have been imported by opening the project in the editor at least once.
   at: (core/io/resource_loader.cpp:281)
ERROR: Failed loading scene: res://root.tscn.
   at: (main/main.cpp:3860)

Godot Engine v4.3.beta1.official.a4f2ea91a - https://godotengine.org
Vulkan 1.2.275 - Forward+ - Using Device #0: Apple - Apple M2 Pro

ERROR: No loader found for resource: res://level/Level.cs (expected type: Script)
   at: _load (core/io/resource_loader.cpp:289)
ERROR: No loader found for resource: res://enemies/Enemies.cs (expected type: Script)
   at: _load (core/io/resource_loader.cpp:289)
ERROR: No loader found for resource: res://enemies/EnemyData.cs (expected type: Script)
   at: _load (core/io/resource_loader.cpp:289)
ERROR: Can't load dependency: res://enemies/EnemyData.cs.
   at: parse_variant (core/io/resource_format_binary.cpp:461)
ERROR: Failed loading resource: res://.godot/exported/133200997/export-9cf05ca6b5ec0f125e9b3f8704f6dae4-melee.res. Make sure resources have been imported by opening the project in the editor at least once.
   at: _load (core/io/resource_loader.cpp:282)
ERROR: No loader found for resource: res://Player/PlayerController.cs (expected type: Script)
   at: _load (core/io/resource_loader.cpp:289)
ERROR: Can't load dependency: res://level/Level.cs.
   at: parse_variant (core/io/resource_format_binary.cpp:461)
ERROR: Error when trying to parse Variant.
   at: parse_variant (core/io/resource_format_binary.cpp:505)
ERROR: Error when trying to parse Variant.
   at: parse_variant (core/io/resource_format_binary.cpp:492)
ERROR: Failed loading resource: res://.godot/exported/133200997/export-6581cd44ca730c421bddc3302d6ce6cc-root.scn. Make sure resources have been imported by opening the project in the editor at least once.
   at: _load (core/io/resource_loader.cpp:282)
ERROR: Failed loading scene: res://root.tscn.
   at: start (main/main.cpp:3860)

Are you sure there you're using the "mono" build? I believe it should be listed as "v4.3.beta1.mono.official" but your version is "v4.3.beta1.official" in the logs.

Are you sure there you're using the "mono" build? I believe it should be listed as "v4.3.beta1.mono.official" but your version is "v4.3.beta1.official" in the logs.

I've used the .net download link and have the same issue.
When executing on Mac it runs all C# just fine.
Only exported to iOS it doesn't.
Same version, v4.3.beta1.official.

Thanks, I can confirm that there's something broken with the 4.3-beta1 build. The ".mono" part of the version string is indeed missing.
It's likely a regression from one of my recent SConstruct refactoring PRs. CC @godotengine/buildsystem

Can confirm that it does indeed not add the mono build suffix on Windows as well

So the exports are broken because the editor downloads the wrong export templates (the non-"mono" ones) because the mono module build suffix is missing.
I tried to bisect the regression but failed so far. Initially I could reproduce the missing .mono suffix with a local build, but now I can't reliably anymore.

Ok I found how to reproduce the bug, one needs to build first with module_mono_enabled=no (default), then enable the module.
It doens't properly recreate core/version_generated.gen.h when it should.
It's a regression from #91624, CC @Repiteo.
Similar to #92325, though it's not a race condition here a priori, just a missing dependency. That makes me question whether the change in #91624 was correct, as it seems to have broken a chain of dependency that used to work in SCons.

I see where the problem is arising: the check to see if core/version_generated.gen.h needs to be recreated was using version.py, but that didn't account for changes in the module config. I'll change it so it instead validates against the version info value directly, something I wasn't aware I could've done at the time.


Support for additional storage providers

It would be great if hasura-storage provides support for different storage providers.
A library can be used to add these additional providers or an approach can be taken for a pluggable or extensible storage providing the current one implementation for S3, minio, wasabi and one for gcloud and firebase.
This go library https://gocloud.dev/howto/blob/#services for example supports:

Google Cloud (will work if you are using Firebase also)
S3
Azure Blob storage

The storage is designed to allow adding additional storage providers, they just need to implement the ContentStorage interface: https://github.com/nhost/hasura-storage/blob/main/controller/controller.go#L68-L77
Looking at the library you linked it seems that it may simplify some bits but you may still need some service-specific code. In any case, it might be a good idea evaluating adding a provider with this library in addition to the one we have right now. If this is something you are interested in doing let me know, I will be happy to help.


apk add command in Dockerfile fails

Hi there!
Tried your setup.
So the apk command in the dockerfile is not working anymore. This command:
&& apk add --no-cache mysql-client tzdata mariadb-dev=10.4.13-r0 linux-headers=5.4.5-r1 imagemagick-dev=<IP_ADDRESS>-r0 \

Got following error from your Dockerfile when trying to build it:
ERROR: unable to select packages:
  linux-headers-5.7.8-r0:
    breaks: world[linux-headers=5.4.5-r1]
    satisfies: libffi-dev-3.3-r2[linux-headers]
  imagemagick-dev-<IP_ADDRESS>-r0:
    breaks: world[imagemagick-dev=<IP_ADDRESS>-r0]
  mariadb-dev-10.5.8-r0:
    breaks: world[mariadb-dev=10.4.13-r0]

I tried it myself with the official redmine images first. But there I got some SSL issues while using rake to get my emials from imap and could not find a solution. Maybe your setup can help me fix that!

@rafaelteb
Sorry, so late reply.
I fixed it and release new version. It's supports Redmine 4.2.0.

https://github.com/yoshinorin/docker-redmine-orchestration/releases/tag/v4.2.0

Thank you :)


switching to express router

@MoustafaJazzar I'd like to move forward with the next parts, namely adding proper authentication. Would you be able to handle the comments and merge this PR soon? Otherwise you could rebase or merge my changes. :)


V4.0.0-beta.3 - [merged]

In GitLab by @ltenorio on Mar 5, 2024, 09:54
Merges v4.0.0-beta.3 -> master

In GitLab by @ltenorio on Mar 5, 2024, 10:26
added 1 commit
3a307c8b - update CHANGELOG
Compare with previous version

In GitLab by @ltenorio on Mar 5, 2024, 10:26
approved this merge request

In GitLab by @ltenorio on Mar 5, 2024, 10:28
mentioned in commit a0bf7eb86b4c527b91caf4f43da343d3f65dbd0f


ESP32 Support

I have been trying to get the libr to work with a TTGO/HelTec  ESP32 SX1278 module. It seems to be init ok using the provided examples after getting the pins set
LoRa node address string: 0:0:0:0:0:0:0:0
Found SX1278! (match by SX1278_REG_VERSION == 0x12)
Initialization done.
This may be just confusion on my part.  The TX example is sending 01:23:45:67:89:AB:CD:EF for a destination but the RX example doesn't seem to set its node address to 01:23:45:67:89:AB:CD:EF to match and ends up with 0's for its node address string.

The lib works great with ESP32 and the arduino-esp32 libraries with the RA-02 SX1278 from (https://www.aliexpress.com/item/Elecrow-2pcs-lot-SX1278-LoRa-Module-433M-10KM-Ra-02-Ai-Thinker-Wireless-Spread-Spectrum-Transmission/32817296119.html?spm=a2g0s.90423<IP_ADDRESS>tlkh)
The only change besides the pins #s was to initialize the EEprom area in the LoRaLib.cpp under LoRa::begin with some size (1000 was way more than needed). This was needed per the ESP32 SPI lib.
uint8_t LoRa::begin(uint16_t addrEeprom) {
#ifdef DEBUG
Serial.begin(9600);
Serial.println();
#endif
if (!EEPROM.begin(1000))
{
Serial.println("failed to initialise EEPROM");
}
The TTGO integrated modules work fine with the other libs (like arduino-LoRa) that do not use DIO1.
Thanks

I added the EEPROM.begin and DIO setting in the latest commit, could you please check that it works? I would have done it myself, but I don't have any ESP32 board, thanks.

Worked great!! Just need to remove leading underscore on dio1 in SX1278.cpp
SX1278::SX1278(int nss, Bandwidth bw, SpreadingFactor sf, CodingRate cr, int dio0, int dio1) {
_nss = nss;
_dio0 = dio0;
_dio1 = _dio1;  <---------

Fixed the typo in 96a9181d96e312e29e72c6acbbed7820645c05c2, thanks for testing it.
I'll probably add a new example explaining the settings and leave the basic ones as they are.

Do you have any current plans to add to the lib.  I saw your to do CAD note. Any need to use RXCONTINUOUS mode?

I might implement the CAD mode at sime point in the future, although it's not my priority right now. As far as RxContinuous mode is concerned, I'm not sure it's entirely necessary, I might implement it if I find some use for it.
At this point, I think it's time to release this library as version 1.0 and get it included in Arduino Library Manager, to allow easy installation.

Thanks, I think I'll try adding RXContinuous as part of my project.  I have a remote building sending sensor changes only when needed. So it could be 1 minute or ten days between transmissions (may add heartbeat signal to make sure its working). For this RXContinuous would free up the micro-controller more to do other things since it does not need to keep resetting after RXTimeout.

Cool, if you manage to get it working, start a pull request, so that we can merge it into this project :)


Unhandled error everytime i open the game

With this new update, every time i open the game i get the following error:
2024-04-13 12:19:46 [error]: An unhandled error has occurred.
2024-04-13 12:19:46 [error]: System.ComponentModel.Win32Exception (2): An error occurred trying to start process 'xdg-mime' with working directory '/home/arthur'. No such file or directory
2024-04-13 12:19:46 [error]: at System.Diagnostics.Process.ForkAndExecProcess(ProcessStartInfo startInfo, String resolvedFilename, String[] argv, String[] envp, String cwd, Boolean setCredentials, UInt32 userId, UInt32 groupId, UInt32[] groups, Int32& stdinFd, Int32& stdoutFd, Int32& stderrFd, Boolean usesTerminal, Boolean throwOnNoExec)
2024-04-13 12:19:46 [error]: at System.Diagnostics.Process.StartCore(ProcessStartInfo startInfo)
2024-04-13 12:19:46 [error]: at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
2024-04-13 12:19:46 [error]: at DiscordRPC.Registry.UnixUriSchemeCreator.RegisterMime(String appid)
2024-04-13 12:19:46 [error]: at DiscordRPC.Registry.UnixUriSchemeCreator.RegisterUriScheme(UriSchemeRegister register)
2024-04-13 12:19:46 [error]: at DiscordRPC.Registry.UriSchemeRegister.RegisterUriScheme()
2024-04-13 12:19:46 [error]: at DiscordRPC.DiscordRpcClient.RegisterUriScheme(String steamAppID, String executable)
2024-04-13 12:19:46 [error]: at osu.Desktop.DiscordRichPresence.load() in /home/runner/work/osu-auth-client/osu-auth-client/osu/osu.Desktop/DiscordRichPresence.cs:line 87
2024-04-13 12:19:46 [error]: at osu.Desktop.DiscordRichPresence.<>c.<RegisterForDependencyActivation>b__45_0(Object t, IReadOnlyDependencyContainer d) in /home/runner/work/osu-auth-client/osu-auth-client/osu/osu.Desktop/osu.Framework.SourceGeneration/osu.Framework.SourceGeneration.Generators.Dependencies.DependencyInjectionSourceGenerator/g_osu.Desktop.DiscordRichPresence_Dependencies.cs:line 22
2024-04-13 12:19:46 [error]: at osu.Framework.Allocation.DependencyActivator.<Activate>g__activateRecursively|8_0[T](Object obj, IReadOnlyDependencyContainer dependencies, Type currentType)
2024-04-13 12:19:46 [error]: at osu.Framework.Allocation.DependencyActivator.Activate[T](T obj, IReadOnlyDependencyContainer dependencies)
2024-04-13 12:19:46 [error]: at osu.Framework.Allocation.DependencyContainer.Inject[T](T instance)
2024-04-13 12:19:46 [error]: at osu.Framework.Graphics.Drawable.InjectDependencies(IReadOnlyDependencyContainer dependencies)
2024-04-13 12:19:46 [error]: at osu.Framework.Graphics.Drawable.load(IFrameBasedClock clock, IReadOnlyDependencyContainer dependencies)
2024-04-13 12:19:46 [error]: at osu.Framework.Graphics.Drawable.Load(IFrameBasedClock clock, IReadOnlyDependencyContainer dependencies, Boolean isDirectAsyncContext)
2024-04-13 12:19:46 [error]: at osu.Framework.Graphics.Drawable.LoadFromAsync(IFrameBasedClock clock, IReadOnlyDependencyContainer dependencies, Boolean isDirectAsyncContext)
2024-04-13 12:19:46 [error]: at osu.Framework.Graphics.Containers.CompositeDrawable.loadComponents[TLoadable](List`1 components, IReadOnlyDependencyContainer dependencies, Boolean isDirectAsyncContext, CancellationToken cancellation)
2024-04-13 12:19:46 [error]: at osu.Framework.Graphics.Containers.CompositeDrawable.<>c__DisplayClass13_0`1.<LoadComponentsAsync>b__1()
2024-04-13 12:19:46 [error]: at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
2024-04-13 12:19:46 [error]: --- End of stack trace from previous location ---
2024-04-13 12:19:46 [error]: at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
2024-04-13 12:19:46 [error]: at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)

1713010783.runtime.log

It seems that the DiscordRPC's Scheme Creator is running the command with the home directory as the working directory, and writing to ~.local/share/applications. While allowing it to access home could work (with --filesystem=home), I'd prefer the game to properly register its MIME and URL for Discord RPC on install rather than directly modifying user directories when running.

I'd prefer the game to properly register its MIME and URL for Discord RPC on install rather than directly modifying user directories when running.

I guess we could create a separate desktop file just for Discord rich presence or maybe add the required MIME type to the main one (but that may not work when osu! is already open and xdg-mime isn't really functional on Flatpak so that will have to be disabled)

I don't think it is possible for an AppImage to register MIME and URL scheme without directly modifying user directories. The user will have to install some kind of AppImage desktop integration program to make it possible. If that's the case, I think it should be mentioned somewhere in the game or the installation documentation.
This thing make me wonder if AppImage is even a good format for this game. It's fine for portable, run-then-forget applications. But I don't think it's suitable for things that have desktop integrations like MIME and URL scheme (and automatic updates).

This thing make me wonder if AppImage is even a good format for this game. It's fine for portable, run-then-forget applications. But I don't think it's suitable for things that have desktop integrations like MIME and URL scheme (and automatic updates).

We are not maintaining fifty builds for fifty distros with whatever the distro maintainers decide to apply on top of the base game and then attempting to track whether all of them are playing fair with respect to game integrity. No other platform/OS plays these games. In that light "portable" is the only viable choice for linux. It's appimage or nothing.


Allow disabling experimental commands, devices on stable branch

Description
To make it clear which features are still experimental, these should be disabled for users on "stable" branches.
Related Issues
Fixes https://github.com/flutter/flutter/issues/30152
Tests
I added the following tests:

flutter_command_test.dart: Experimental command can be disabled on stable branch.
flutter_command_test.dart: Experimental command Works normally on regular branches

These verify that executing an experimental command on a stable branch throws a tool exit.
Checklist
Before you create this PR confirm that it meets all requirements listed below by checking the relevant checkboxes ([x]). This will ensure a smooth and quick review process.

[x] I read the Contributor Guide and followed the process outlined there for submitting PRs.
[x] I signed the CLA.
[x] I read and followed the Flutter Style Guide, including Features we expect every widget to implement.
[x] I updated/added relevant documentation (doc comments with ///).
[x] All existing and new tests are passing.
[x] The analyzer (flutter analyze --flutter-repo) does not report any problems on my PR.
[x] I am willing to follow-up on review comments in a timely manner.

Breaking Change
Does your PR require Flutter developers to manually update their apps to accommodate your change?

[ ] Yes, this is a breaking change (Please read Handling breaking changes). Replace this with a link to the e-mail where you asked for input on this proposed change.
[x] No, this is not a breaking change.

Thank you @jonahwilliams.  FYI @timsneath @kevmoo


Post-transfer S2S length check

This adds a post-transfer length check for S2S (--s2s-check-length), as we'd been asked for recently.
This doesn't guarantee file integrity, but it sure is better than nothing.
Manual testing scenario:
Add a breakpoint to ste/xfer-anyToRemote.go:294.
Run in debug mode. When it hits the breakpoint, open storage explorer and upload a new file over the destination of a different length.
Resume execution, and watch the transfer fail.
Test without intentional failure afterwards.

@adreed-msft :shipit:


Update Cart.test.js

Description
Updates the test description from the removeFromCart was the same as addToCart.

Amazing, thanks!


Include "port" option in README docs

It would be helpful if the "port" option was listed in the Options section of the readme. That option needs to be changed to develop multiple apps with this plugin at once. Thanks!

Did you find a way to change the port it listens on? Having this same issue...


Coverage questions

Couple questions:

Is it possible to configure ts-jest so jest uses ts-jest remapped coverage report for coverageThreshold check?

I have main library class which imports secondary one. In raw report I see reports for both files, yet in remapped report I see only main. Is it possible to do remapping for imported classes, or this is not possible by design?

@hippich The part that handles coverage was accepted as a PR and unfortunately I'm not very familiar with that part. However, if you can create a minimal repo and state the expected behavior and how it differs from the actual behavior, I'll take a look at it

I just re-created blank project and it remapped everything correct, so it is clearly something with my project settings. Closing this issue as non-reproduceable for brand new project.

@hippich Did the coverageThreshold check also work for you in that blank project? (It doesn't for me in my non-blank project, even though the remapped coverage is correct.)

My simple project worked fine regarding coverage, so I assumed it is alright. But it might be that simple project does not generate complex enough JS code..


requirements.txt: fix cose version

Patch alternative to https://github.com/openwsn-berkeley/py-edhoc/pull/25 so that build succeed until issues with latest py-cose can be resolved.

@malishav @TimothyClaeys could any of you take a look at this one?

@fjmolinas Yes will look at it today


Incorrect calculation of placeholders

Expected Behavior
Path: /dati-registri/v1.0/operatore/R80QQ5J9600/valida
Template: /dati-registri/{version}/{everything}
Expected:
version = v1.0
everything = operatore/R80QQ5J9600/valida
Actual Behavior
version = v1.0/operatore/R80QQ5J9600
everything = valida
in the previous version, the behavior was as expected
Steps to Reproduce the Problem
Set the configuration in the gateway with an ocelot.settings.json file with an UpstreamPathTemplate as indicated in the first point and create an endpoint in the API with the path indicated in the first point.
Specifications

Version: <IP_ADDRESS>
Platform: .net 9 win

@fenzad Thanks for your feedback, ok, I will check that. Again a test case missing on our side.

Yes, as a CatchAll placeholder, it should cover as much path segments as it can.
Moreover, I propose to have a check if placeholders are docked to each other, if yes, then first placeholders should cover data of one path segment, the last placeholder should extract data as much it can but except first docked placeholders.

The problem is the main regex, it should match only between slashes. But if so, then it can't match the Catch All. So, I must invert the logic here: 1) catch all query, 2) catch all path, remove the catch all part, 3) validate the rest. At the minute we have 1) catch all query, 2) validate placeholders 3) catch all path. And that's wrong, but all tests passed ;-)


no ../dist/openlayers-routing-machine.js :-(

examples/index.html : There is no
<script src="../dist/openlayers-routing-machine.js"></script>
in this github.
Why do you waste my time :-(

Currently very much a work in progress.
It's right in the readme...
Also, almost no project commit dist files to the repo. So learn conventions before complaining.


An incremental error computation

An incremental version of the error computation logic in this paper should be implemented.

Related pull request: https://github.com/mozafari/verdictdb/pull/276

This is handled in part by the above pull request. I will create a separate issue if more sophisticated logics are needed.


PHP 8.0 support

Q
A

Bug fix?
yes

New feature?
no

BC breaks?
no

Deprecations?
no

License
MIT

I have:

[x] Migrated the CI to GitHub Actions. Actions runs will only show up after PR merge.
[x] Added PHP 8 to the CI and made any other needed changes.

This PR remains WIP. Waiting on external package changes so some composer hacks can be removed.

phpspec is not ready yet: https://github.com/GrahamCampbell/client-common/runs/845397529?check_suite_focus=true

Waiting on https://github.com/phpspec/phpspec/pull/1313 to be merged and tagged (with my fixes added to it too).

looks sane to me :+1:
you tell me when it builds in your fork? then i can merge...

@dbu Ready. :)

@dbu This is ready now. :)


Fixed CSS of content and button overflowing

Fixed:

.content div overflowing

Removed width: 100% under #wrapper section > .content

Button overflowing to the edge

Changed width under ul.actions:not(.fixed) li .button from 100% to 50%

Removed

Commented out unnecessary anchor in /night

Sorry, I’m not gonna merge this directly. I tried to include in the high res images to render the photo spheres directly, but the increasing size of the git repo cause GitHub pages to fail so I reset the entire git tree to get the size of the whole repo back down.
I’ll merge in your changes to the CSS manually. You should also update your local fork. Sorry about that.

Ok no problem, I'll update my local fork.


Adding Specter-Desktop to Raspiblitz

As described in #1059 :

Installation of specter-desktop via services like the others in a virtualenv + pip install
cryptoadvance.specter (in home/admin/.specter/.env)
On top it creates a self-signed-cert and exposes it via https (on port 25441)
also it creates a Tor-hidden-service.
Authentication is enabled by default (Pin of "Password B")
the installation-procedure is also creating udev-rules in /etc/udev/rules.d for all major hardware-wallets as described in https://github.com/bitcoin-core/HWI/blob/master/hwilib/udev/README.md
deinstallation-procedure is asking the user whether to keep the data

This is great, but can you rebase to the latest master please? The PR seems to remove LNbits and other recent changes form the menu files.

I'm not sure i understand your point. The current tip of master is
https://github.com/rootzoll/raspiblitz/commit/06d54ad375f0ce12ecc50fce1bb6ca6679480c24
That's what my branch "specter" is building upon. What am i missing?


Can not use GPU

Dear RadhakrishnaJ,
We have deployed the SL environment and successfully run the provided mnist-pytorch project.
However, we failed to use the GPU by specifying the parameter --gpu 0 in the run-sl command follow the documentation mnist-pytorch. The SL still uses the CPU for training. We use the following command:
bash ./swarm-learning/bin/run-sl         \
    --name=sl-1                         \
    --sl-platform=pyt                   \
    --host-ip=<IP_ADDRESS>            \
    --sn-ip=<IP_ADDRESS>                  \
    --sn-api-port=11000                 \
    --sl-fs-port=16000                  \
    --data-dir=./examples/mnist-pytorch/app-data  \
    --model-dir=./examples/mnist-pytorch/model    \
    --model-program=mnist_pyt.py        \
    --apls-ip <IP_ADDRESS>              \
    -serverAddress <IP_ADDRESS>           \
    -genJoinToken   \
    --gpu  0

We use the following docker images:
REPOSITORY                                                             TAG       IMAGE ID       CREATED        SIZE
hub.myenterpriselicense.hpe.com/hpe_eval/swarm-learning/apls           0.3.0     8a382f3a48be   6 months ago   870MB
hub.myenterpriselicense.hpe.com/hpe_eval/swarm-learning/sn             0.3.0     3587a7c0e083   6 months ago   872MB
hub.myenterpriselicense.hpe.com/hpe_eval/swarm-learning/sl-pyt         0.3.0     a55b0e33f352   6 months ago   4.45GB
hub.myenterpriselicense.hpe.com/hpe_eval/swarm-learning/spire-server   0.3.0     0860ccc9e996   6 months ago   144MB

Is this configuration correct?
Can you help me configure SL correctly to use GPU?
Thank You and Best Regard.

Hello,
Current Eval version does not support GPU usage with pyTorch models.
When using pyTorch model don't specify gpu option.

Closing this as there no update from user. Requesting user to raise new issue for any further support.


Can i post a message on google plus using api?

Can i post a message on google plus using api?

I do have a solution for you if you want to post to Google+ automatically. Had to try a lot, but finally it worked out and works very well. To see a demo http://SocialMultiPost.Club/  Just let me know if you like it and probably we will find a way you are able to use it too.


Simplify input args to main functions

See here:
https://github.com/openpharma/staged.dependencies/pull/58#discussion_r687851505
Could even have a default_host argument (set to https://github.com say) so you don't even need to specify the host for every repo.

Suspect following #83 this will no longer be required


RFE: auto-populate graph from function name & args

I propose to auto-populate Graph.add_node() calls based on function & argument-names (using python's inspect standard-library's module), and allow some form of string-filtering on the function/args names.
Knowingly this would work for (singular) outputs only.
The proposal is easier to explain with sample client code:
def funcname_chopper(funcname):
    for prefix in ['calc_', 'compute_', 'make_']:
        if funcname.startswith(prefix):
            return  prefix[len(prefix):]

graph = pyungo.Graph(
    outname_converter=funcname_chopper)

# equivalent to: register(inputs=['a', 'b'], outputs=['c']
@graph.register
def make_c(a, b):
    return a+b

# equivalent to: register(inputs=['a', 'b', 'c'], outputs=['make_d']
@graph.register(inpname_converter=lambda n: n[5:], outname_converter=None)
def calc_d(some_a, look_b, stop_c):
    return a+b

My mistake, this shortcut enhancement is best fit for the register annotation, not for the add_node().

I thought of some uses from the inspect module, but more on the checking side of things (e.g. enforce inputs names with function argument names). I am not sure I am a big fan of defining the output name in the function name though, but not totally against it. Another option would be to use type hints for defining the output name (with __annotations__), but this would inhibit the type hint feature:
@graph.register
def make_c(a, b) -> 'c':
    return a + b

Should be closed by #38:
# equivalent to: register(inputs=['a', 'b'], outputs=['c'])
@graph.register()
def make_c(a, b):
    c = a + b
    return c


Make the validation checks more noticeable

Pre-flight Checklist
Please ensure you've completed all of the following.

[x] I have read the Contributing Guidelines for this project.
[x] I agree to follow the Code of Conduct that this project adheres to.

Description of Change

Put the validation checks in a more noticeable place.
I've noticed a lot of PRs that fail the checks. A lot of the time, the error message says it's a pnpm package error message asking for a version bump, even when the package.json already has a version bump. It's usually because the two other commands edited the files when they were run, and if the changes weren't staged ahead of time locally, pnpm package sees the new changes and fails the build.
It seems that a lot of people either didn't read the validation checks in the docs, or forgot (as I did with my latest PR). So, I'm thinking it might be a good idea to tell/remind people of the validation checks and put the info in a more prominent place.

Should we make a script in package.json that runs all 3 commands? so the user only has to run pnpm validate ?

Yeah completely agree with that! It would make it easier, and then in the PR template, we can add a checkbox "Have you run pnpm validate?" to remind the user.


DNS Bin -Example receiving data -Receiving text  Bug

➜  dnslog python dnsbinclient.py -f- -d in -t-
Your token is : 6acc9ba35860b3e6fbf4
Traceback (most recent call last):
File "dnsbinclient.py", line 122, in
for parts in read_bytes_from_outside():
File "dnsbinclient.py", line 47, in read_bytes_from_outside
bytes = data_from_url(message["data"])
File "dnsbinclient.py", line 18, in data_from_url
return "".join(url.split(".")[1:]).decode("hex")
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/hex_codec.py", line 42, in hex_decode
output = binascii.a2b_hex(input)
TypeError: Non-hexadecimal digit found

In new version, we just support in web


Support for CDO cdFMC?

is cdFMC from CDO supported?
A sample to connect to it?
Thank you

@giovanniaugusto-cs50 #203 should help you out. The main difference is how cdFMC/CDO authentication is different than normal on-prem FMC. There are additional notes in the readme for how to handle cdFMC auth.


extra github link in the navbar

Describe the bug
There is one extra github link in the navbar which points to the same repository as the previous one.
To Reproduce
Steps to reproduce the behavior:

Remove the link or add some other link.

Can i work on this issue .


AESMD installed: false, why ?

Hello,
I am still having a hard time to make the attestation flow working on kubernetes on azure.
Since last time, I am able to deploy my sgx enabled container on azure aks and write to /dev/attestation/user_report_data
unfortunately, I get an error when doing so:
cat: /dev/attestation/quote: Permission denied
error: Cannot connect to aesm_service (tried sgx_aesm_socket_base and /var/run/aesmd/aesm.socket UNIX sockets).
Please check its status! (`service aesmd status` on Ubuntu)
error: Failed to get quote

I check out what is my system status with "is-sgx-available"
and here is what I get:
SGX supported by CPU: true
SGX1 (ECREATE, EENTER, ...): true
SGX2 (EAUG, EACCEPT, EMODPR, ...): true
Flexible Launch Control (IA32_SGXPUBKEYHASH{0..3} MSRs): true
SGX extensions for virtualizers (EINCVIRTCHILD, EDECVIRTCHILD, ESETCONTEXT): false
Extensions for concurrent memory management (ETRACKC, ELDBC, ELDUC, ERDINFO): false
CET enclave attributes support (See Table 37-5 in the SDM): false
Key separation and sharing (KSS) support (CONFIGID, CONFIGSVN, ISVEXTPRODID, ISVFAMILYID report fields): true
Max enclave size (32-bit): 0x80000000
Max enclave size (64-bit): 0x100000000000000
EPC size: 0x200000000
SGX driver loaded: false
AESMD installed: false
SGX PSW/libsgx installed: false

For deploying my container to kubernetes I followed the recommendation provided by azure doc:
https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-nodes-aks-addon
including the mounting of the /var/run/aesmd/ volume
my configuration is here:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dv-algo
  namespace: app-db9fbac56e14
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: dv-algo
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        algo-sandboxed: "false"
        app: dv-algo
    spec:
      containers:
      - env:
        - name: SGX_AESM_ADDR
          value: "1"
        image: dvaks.azurecr.io/gsc-dv-algo:db9fbac56e14-221005122423
        imagePullPolicy: Always
        name: main
        resources:
          limits:
            cpu: 500m
            memory: 2Gi
            sgx.intel.com/epc: 2Gi
          requests:
            cpu: 50m
            memory: 1Gi
        securityContext:
          privileged: true
          runAsUser: 0
        volumeMounts:
        - mountPath: /cache
          name: cache-volume
        - mountPath: /var/run/aesmd
          name: var-run-aesmd
      volumes:
      - emptyDir: {}
        name: cache-volume
      - hostPath:
          path: /var/run/aesmd
          type: ""
        name: var-run-aesmd

At this point any help would be very useful.
Thanks in advance
Loic

At this point any help would be very useful.

Did you setup the cluster using --enable-sgxquotehelper? With that you should see the AESMD pod running (IIRC it's called sgx-helper or something, check `kubectl get pods -A | grep sgx´).

Sure, I did
> kubectl get pods -A | grep sgx
kube-system        sgx-plugin-2cnf7                                     1/1     Running   0             9d
kube-system        sgx-webhook-84778cc7d7-kdbgf                         1/1     Running   0             90d

otherwise, my gsc-fied container would not event start I believe
Also if it helps, I am building my gsc image with this manifest:
Distro: "ubuntu:20.04"

Registry: ""
Gramine:
    Repository: "https://github.com/gramineproject/gramine.git"
    Branch:     "v1.2"
SGXDriver:
    Repository: "https://github.com/intel/SGXDataCenterAttestationPrimitives.git"
    Branch:     "DCAP_1.11 && cp -r driver/linux/* ."

@quertenmont I hope that @mythi can help further with this, but from my side:
Seems like you can run arbitrary commands on the deployed machine, right (based on the fact that you showed us the result of is-sgx-available)? So, could you run service aesmd status on a deployed machine and show us the result?

@quertenmont I think you are missing the sgx-quotehelper so maybe try this Azure command:
az aks addon update --addon confcom --name " YourAKSClusterName " --resource-group "YourResourceGroup " --enable-sgxquotehelper

I just created a fresh AKS cluster and what I see is:
kube-system   sgx-plugin-2bc85                      1/1     Running   0          9m15s
kube-system   sgx-plugin-k6rzd                      1/1     Running   0          9m10s
kube-system   sgx-plugin-wmkl5                      1/1     Running   0          9m
kube-system   sgx-quote-helper-kp9pd                1/1     Running   0          9m
kube-system   sgx-quote-helper-l5v7c                1/1     Running   0          9m15s
kube-system   sgx-quote-helper-zpkwb                1/1     Running   0          9m10s
kube-system   sgx-webhook-75964f44c6-hx8w4          1/1     Running   0          14m

and with the following .yaml:
apiVersion: v1
kind: Pod
metadata:
  name: intelsgx-aesmd-test
spec:
  restartPolicy: Never
  containers:
    -
      name: intelsgx-container
      image: busybox
      imagePullPolicy: IfNotPresent
      args:
      - sleep
      - "1000000"
      securityContext:
        readOnlyRootFilesystem: true
        capabilities:
          add: ["IPC_LOCK"]
      resources:
        limits:
          sgx.intel.com/epc: 12Mi
      volumeMounts:
      - name: aesmd
        mountPath: /var/run/aesmd
  volumes:
  - name: aesmd
    hostPath:
      path: /var/run/aesmd

I can see:
$ kubectl exec -it intelsgx-aesmd-test -- ls /var/run/aesmd
aesm.socket

Hi @mythi
Thanks for helping.
I can now see the sgx-quote-helper pod running.
If I connect to the running container with kubectl exec -it, I can see the aesm socket being there.
However, If I do "service aesmd status", I get
aesmd: unrecognized service
But if I do a is-sgx-available, I do see:
SGX driver loaded: true
AESMD installed: true
SGX PSW/libsgx installed: false

That sounds like a good news already... should I care about the unrecognized service if is-sgx-available detects AESMD ?
Nevertheless, I still have a problem, because
If I deploy my own GSC built+signed image with an entrypoint that basically do 'ls /var/run/aesmd && is-sgx-available'
I do not see the aesm.socket file and therefore the is-sgx-available still shows "AESMD installed: false"
Should I white list the /var/run/aesmd/aesm.socket file in the "sgx.trusted_files" variable of the gsc manifest ?
Thanks again for your help
Loic
Ho

as I said, If i simply run with the entrypoint of my gsc image, I don't see the socket "/var/run/aesmd/aesm.socket"

It's not clear to me why you need to see the socket inside Gramine SGX TEE? I'd bet that should not even be possible (there's no AESMD inside the libOS).
If you are referring to:
error: Cannot connect to aesm_service (tried sgx_aesm_socket_base and /var/run/aesmd/aesm.socket UNIX sockets).
Please check its status! (`service aesmd status` on Ubuntu)

I think  it's just because the SGX PAL was not able connect to it outside the libOS but since you now have it available you shouldn't see the error anymore. Do you?

Actually the error I have now when trying to generate an attestation from within the gsc container (libOs) with:
echo "test" > /dev/attestation/user_report_data
sleep 5s
cat /dev/attestation/quote

is this one:
error: aesm_service returned error: 42
error: Failed to get quote
cat: /dev/attestation/quote: Permission denied

that's why I assume that there was still a problem with the aesmd socket, but the cause of error might indeed be different.  I have no clue.

@quertenmont It looks like you resolved the problem of availability of the AESM service. As @mythi absolutely correctly mentioned, you are not supposed to see the AESM service from within the Gramine TEE -- Gramine does not expose AESM to the application (why would it). Instead, the errors that you observe simply mean that Gramine itself wants to use AESM and fails.
Now regarding this interesting error 42. I think this is the first time I see this error. A lot of googling led me to this chain:

AESM_ATT_KEY_NOT_INITIALIZED error code
This error code corresponds to SGX_ERROR_ATT_KEY_UNINITIALIZED
This error code is described here (search for it).
Some additional interesting info is mentioned here

So this is what the AESM documentation says:

The platform quoting infrastructure does not have the attestation key available to generate quotes. Call sgx_init_quote_ex again.

So apparently the SGX platform is not registered with the Platform Caching Service (PCS) of your cloud/datacenter provider. It looks like this SGX platform must be somehow "kicked into action". Did you install the azure-dcap-client package on this machine (or maybe it is already installed by those sgx-quotehelper Kubernetes plugins, I really don't understand how that part works)?
At this point, I'm out of technical depth. I hope that @mythi @lejunzhu @ScottR-Intel can chime in.

Did you install the azure-dcap-client package on this machine (or maybe it is already installed by those sgx-quotehelper Kubernetes plugins,

This is how it's done. @quertenmont to check if this is GSC related or something with the cluster setup, is it possible for you to try that simple sgx-test container (on the Azure documentation page) with the Open Enclave remote attestation out-of-proc quotes generation.

Hi @mythi
I'd be happy to run anything to debug, but I can't build that docker image
FROM ubuntu:18.04 as sgx_base
RUN apt-get update && apt-get install -y \
    wget \
    gnupg

# Add the repository to sources, and add the key to the list of
# trusted keys used by the apt to authenticate packages
RUN echo "deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu bionic main" | tee /etc/apt/sources.list.d/intel-sgx.list \
    && wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | apt-key add -
# Add Microsoft repo for az-dcap-client
RUN echo "deb [arch=amd64] https://packages.microsoft.com/ubuntu/18.04/prod bionic main" | tee /etc/apt/sources.list.d/msprod.list \
    && wget -qO - https://packages.microsoft.com/keys/microsoft.asc | apt-key add -

FROM sgx_base as sgx_sample
RUN apt-get update && apt-get install -y \
    clang-7 \
    libssl-dev \
    gdb \
    libprotobuf10 \
    libsgx-dcap-ql \
    libsgx-quote-ex \
    az-dcap-client \
    open-enclave
WORKDIR /opt/openenclave/share/openenclave/samples/remote_attestation
RUN . /opt/openenclave/share/openenclave/openenclaverc \
    && make build
# this sets the flag for out of proc attestation mode, alternatively you can set this flag on the deployment files
ENV SGX_AESM_ADDR=1

CMD make run

The error comes from
RUN . /opt/openenclave/share/openenclave/openenclaverc \
    && make build

make: *** No rule to make target 'build'.  Stop.
I checked, there is nothing in the directory /opt/openenclave/share/openenclave/samples/remote_attestation
so it makes sense
Do you have a valid dockerfile I could build and deploy?

From what I see everything seems to be running properly

Right, it seems so. As far as I can see, the AESMD communication must have also worked once with Gramine if it's been able to start your app.

@quertenmont Sorry for this, but I just realized what you're actually trying to do -- and this is impossible in Gramine.
Your entrypoint in GSC is a script like this:
echo "test" > /dev/attestation/user_report_data
sleep 5s
cat /dev/attestation/quote

This doesn't make sense unfortunately. This script actually does the following:

Creates the first Gramine-SGX enclave that runs bash;

then each line spawns a new process,
and in Gramine design, it means that each line is executed in its own SGX enclave.

The second Gramine-SGX enclave runs the echo process.
The third Gramine-SGX enclave runs the sleep process.
The fourth Gramine-SGX enclave runs the cat process.

In Gramine, separate enclaves do not share the /dev/attestation/ files. So when your 4th enclave tries to read /dev/attestation/quote, this enclave doesn't have any value in /dev/attestation/user_report_data and thus Gramine fails (with an "uninitialized" error in AESM which makes sense -- the required first step of writing user report data is missing).
In other words, you must rewrite your logic from a Bash script (which just loves to spawn child processes) to say a Python script or a tiny C/Rust program:

Here is an example with a Python script,
Here is an example with a C program.

I'm unsure what to do about such cases in general. On the one hand, we cannot share/synchronize /dev/attestation files between enclaves -- this is technically wrong, since each SGX enclave may (in general) have different SGX quotes. But on the other hand, this mistake is easy to make and hard to spot (as it took me two days to realize this problem).
Ok, what I will do now -- I'll submit a PR that throws some meaningful error message when the user tries to read /dev/attestation/quote without first writing something to /dev/attestation/user_report_data.

@dimakuv ha ok.... I was working like this just to be in the most simple situation actually...  but apparently it's not.
I'll try the same thing with a python script and let you know in a moment. :-)

Actually, I was looking at the code just now, and I'm wondering if I correctly identified the root cause... Even if the user doesn't write anything into /dev/attestation/user_report_data, it will be initialized with all-zeros, but it won't have any other side effects.  The problem may be deeper than what I conjectured in the above post.

@dimakuv I confirm that it is still not working.
I started from a very simple image, so you can possibly reproduce
or @mythi can hopefully do it since he seems to have a aks cluster configured for testing :-)
1: My Dockerfile:
FROM ubuntu:20.04 as sgx_base
RUN apt-get update && apt-get install -y python3
COPY test_script.py .
ENTRYPOINT ["/bin/python3", "test_script.py"]

2: python test_script.py
#!/usr/bin/env python3

import os
import sys

def tohex(b):
    return ''.join(format(x, '02x') for x in b)

dir_list = os.listdir('/dev/attestation')
print("/dev/attestation/", "files:", dir_list)

if not os.path.exists("/dev/attestation/user_report_data"):
    print("Cannot find `/dev/attestation/user_report_data`; "
          "are you running under SGX, with remote attestation enabled?")
    sys.exit(1)

#with open('/dev/attestation/attestation_type') as f:
#    print(f"Detected attestation type: {f.read()}")

with open("/dev/attestation/user_report_data", "wb") as f:
    f.write(b'\0'*64)

with open("/dev/attestation/quote", "rb") as f:
    quote = f.read()

print(f"Extracted SGX quote with size = {len(quote)} and the following fields:")
print(f"  ATTRIBUTES.FLAGS: {quote[96:104].hex()}  [ Debug bit: {quote[96] & 2 > 0} ]")
print(f"  ATTRIBUTES.XFRM:  {quote[104:112].hex()}")
print(f"  MRENCLAVE:        {quote[112:144].hex()}")
print(f"  MRSIGNER:         {quote[176:208].hex()}")
print(f"  ISVPRODID:        {quote[304:306].hex()}")
print(f"  ISVSVN:           {quote[306:308].hex()}")
print(f"  REPORTDATA:       {quote[368:400].hex()}")
print(f"                    {quote[400:432].hex()}")

3: my GSC manifest:
loader.pal_internal_mem_size = "256M"
libos.check_invalid_pointers = false
loader.env.KMP_AFFINITY = "granularity=fine,noverbose,compact,1,0"
sgx.enclave_size = "1G"
sgx.preheat_enclave = true
sgx.thread_num = 8

4: my GSC config.yaml
Distro: "ubuntu:20.04"
Registry: ""
Gramine:
    Repository: "https://github.com/gramineproject/gramine.git"
    #    Branch:     "v1.3.1"
    Branch:     "v1.2"
SGXDriver:
    Repository: "https://github.com/intel/SGXDataCenterAttestationPrimitives.git"
    Branch:     "DCAP_1.11 && cp -r driver/linux/* ."

5: my build script:
#!/usr/bin/env bash

export REGISTRY="dvaks.azurecr.io"
export TAG="latest"
docker login ${REGISTRY} -u dvaks

image="gsc-test2"
docker build -t ${image} .

cd gsc
./gsc build --insecure-args $image default.manifest
openssl genrsa -3 -out enclave-key.pem 3072
./gsc sign-image $image enclave-key.pem

docker tag gsc-${image}:latest ${REGISTRY}/gsc-${image}:${TAG:-latest}
docker push ${REGISTRY}/gsc-${image}:${TAG:-latest}

6: my k8s pod yaml (that I am running)
apiVersion: v1
kind: Pod
metadata:
  annotations:
    cni.projectcalico.org/containerID: a604786914bdee70947f6853126015da73141e680faa071d30a11830807791c7
    cni.projectcalico.org/podIP: <IP_ADDRESS>/32
    cni.projectcalico.org/podIPs: <IP_ADDRESS>/32
  creationTimestamp: "2022-10-07T07:59:35Z"
  generateName: dv-algo-7575888867-
  labels:
    algo-sandboxed: "false"
    app: dv-algo
    pod-template-hash: "7575888867"
  name: dv-algo-7575888867-2gbmm
  namespace: app-db9fbac56e14
  ownerReferences:
  - apiVersion: apps/v1
    blockOwnerDeletion: true
    controller: true
    kind: ReplicaSet
    name: dv-algo-7575888867
    uid: c6b697bb-aa2b-40b9-a8f9-17ffbed77aaf
  resourceVersion: "52569233"
  uid: 03596cf3-61c1-4c8b-b06a-a188de6e4951
spec:
  containers:
  - env:
    - name: SGX_AESM_ADDR
      value: "1"
    image: dvaks.azurecr.io/gsc-gsc-test2:latest
    imagePullPolicy: Always
    name: main
    resources:
      limits:
        cpu: 500m
        memory: 2Gi
        sgx.intel.com/enclave: "1"
        sgx.intel.com/epc: 2Gi
        sgx.intel.com/provision: "1"
      requests:
        cpu: 50m
        memory: 1Gi
        sgx.intel.com/enclave: "1"
        sgx.intel.com/epc: 2Gi
        sgx.intel.com/provision: "1"
    securityContext:
      capabilities:
        add:
        - IPC_LOCK
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
    - mountPath: /var/run/aesmd
      name: var-run-aesmd
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: kube-api-access-bsvtl
      readOnly: true
  dnsPolicy: ClusterFirst
  enableServiceLinks: true
  nodeName: aks-confcompool2-19293976-vmss000001
  preemptionPolicy: PreemptLowerPriority
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext: {}
  serviceAccount: default
  serviceAccountName: default
  terminationGracePeriodSeconds: 5
  tolerations:
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  - effect: NoSchedule
    key: node.kubernetes.io/memory-pressure
    operator: Exists
  - effect: NoSchedule
    key: sgx.intel.com/epc
    operator: Exists
  - effect: NoSchedule
    key: sgx.intel.com/enclave
    operator: Exists
  - effect: NoSchedule
    key: sgx.intel.com/provision
    operator: Exists
  volumes:
  - emptyDir: {}
    name: cache-volume
  - hostPath:
      path: /var/run/aesmd
      type: ""
    name: var-run-aesmd

Here is the output that I get:
Gramine is starting. Parsing TOML manifest file, this may take some time...
-----------------------------------------------------------------------------------------------------------------------
Gramine detected the following insecure configurations:

  - loader.insecure__use_cmdline_argv = true   (forwarding command-line args from untrusted host to the app)

Gramine will continue application execution, but this configuration must not be used in production!
-----------------------------------------------------------------------------------------------------------------------

error: aesm_service returned error: 47
error: Failed to get quote
/dev/attestation/ files: ['user_report_data', 'target_info', 'my_target_info', 'report', 'quote', 'protected_files_key', 'keys']
Traceback (most recent call last):
  File "test_script.py", line 24, in <module>
    with open("/dev/attestation/quote", "rb") as f:
PermissionError: [Errno 13] Permission denied: '/dev/attestation/quote'

Hum, interesting error 42, turn to error 47 now :-)
Remark:
I am using gramine 1.2 in gsc config, because if I use gramine 1.3.1 as default,
I am not even seeing /dev/attestation/user_report_data,
the only files that are present in /dev/attestation/ with gramine 1.3.1 are:
['attestation_type', 'keys']
with gramine 1.2, I have more files:
['user_report_data', 'target_info', 'my_target_info', 'report', 'quote', 'protected_files_key', 'keys']
but I don't have attestation_type, that's why I removed it from the python script.
I used the latest version of GSC (from this morning)
is this pointing to anything special ?
For me, at this point, it just look like a giant spaghetti mess...
but you have everything in hand to reproduce... hopefully...

I am using gramine 1.2 in gsc config, because if I use gramine 1.3.1 as default,
I am not even seeing /dev/attestation/user_report_data,

Actually, can you switch to Gramine v1.3.1? I forgot that you're using the old version. The old version may contain some bugs that we fixed in the meantime (and we certainly fixed a bunch of bugs regarding SGX attestation).
The fact that you didn't see the files is because now Gramine requires sgx.remote_attestation = "dcap" explicitly in the manifest file. See https://gramine.readthedocs.io/en/stable/manifest-syntax.html#attestation-and-quotes.
Please add this line to your GSC manifest file and retry with Gramine v1.3.1.

Champagne @dimakuv !!!
here is my log with 1.3.1 and sgx.remote_attestation = "dcap"
/dev/attestation/ files: ['attestation_type', 'user_report_data', 'target_info', 'my_target_info', 'report', 'quote', 'protected_files_key', 'keys']
Extracted SGX quote with size = 4730 and the following fields:
  ATTRIBUTES.FLAGS:<PHONE_NUMBER>000000  [ Debug bit: False ]
  ATTRIBUTES.XFRM:  e700000000000000
  MRENCLAVE:        46bcba25d5dc5e321c6c8a9002998be53189792478e5d0f22105465675a8554d
  MRSIGNER:         e26f12a2e7bd0bce61b28020378e5caec1cf96aa3a54dd7f88d22934e596e7f7
  ISVPRODID:        0000
  ISVSVN:           0000
  REPORTDATA:<PHONE_NUMBER>000000000000000000000000000000000000000000000000000000
<PHONE_NUMBER>000000000000000000000000000000000000000000000000000000

Thanks a lot for helping
I have two more questions for you, that should be easy to answer... I believe:

where can I validate this attestation... I suppose somewhere on intel website, right ?
regarding the fact that every process run in it's own enclave, does it mean that I shouldn't use python subprocesses (for instance those created with multiprocessing module) ?  Or it doesn't matter and gramine take cares of everything for me (including guaranteeing the security of the communication between those subprocesses) ?

Thanks again for helping,
Loic

Awesome! This was a very interesting debug session :) Thanks for fast and thorough experimentation. We all learnt something.

where can I validate this attestation... I suppose somewhere on intel website, right ?

It really depends on what you want to achieve. I would recommend to read about RA-TLS: https://gramine.readthedocs.io/en/stable/attestation.html#mid-level-ra-tls-interface. It actually hides all this complexity of getting the SGX quote that you've done, and establishes a TLS session between the two parties (your SGX enclave and e.g. your trusted laptop), and automatically validates the SGX quote.
I don't remember if you already tried this, but we have an example with RA-TLS here: https://github.com/gramineproject/gramine/tree/master/CI-Examples/ra-tls-mbedtls
Since you're using the DCAP attestation scheme and MS Azure, there is no Intel website where you could verify it. In the "older" EPID attestation scheme (not supported in the new MS Azure VMs), there was indeed an Intel website to which you could send the SGX quote and receive a reply like "Yes, Intel vouches this SGX quote was generated on a good Intel CPU". But it's not so on DCAP, which is used by MS Azure and most (all?) other cloud providers.
So if you want to go the hard route, you can implement the validation of the SGX quote yourself. For this, you'll have to use one of the two currently available options:

Use the libsgx_dcap_quoteverify.so library, with the C API. See here for the example C code (it is the source of RA-TLS that I mentioned above). Unfortunately you'll have to write a Python-to-C wrapper since you're using Python.
Use MS Azure Attestation (MAA), with the REST API. See https://github.com/gramineproject/gramine/issues/626 for my explanations on this. This may be pretty straight-forward to implement since you're using Python.

Well... Sorry for the long answer, but SGX attestation is a tricky subject, and the attestation infrastructure is actually quite complicated. Welcome to this madness.

regarding the fact that every process run in it's own enclave, does it mean that I shouldn't use python subprocesses (for instance those created with multiprocessing module) ? Or it doesn't matter and gramine take cares of everything for me (including guaranteeing the security of the communication between those subprocesses) ?

This is enough hard question. First, I think multiprocessing Python module still doesn't work in Gramine (because it requires some very nasty system call not yet implemented in Gramine). Second, yes, Gramine takes care of securing the communication between subprocesses -- that's why e.g. your Bash script worked fine. Gramine transparently encrypts all communication via signals, pipes, UNIX domain sockets between subprocesses.


Hygene: explicitly allow or forbid switching trackers

Switching trackers won't work right now (static in a couple places) but also won't throw errors. Change one of these things.

turns out this was easy to fix.


Inappropriate Number of Splits Predicted by determine_num_splits function in flash_attn_with_kvcache ( Non-paged kv cache )

I have been working with the vllm &flash-attention library and have encountered an issue where the determine_num_splits function seems to predict an inappropriate number of splits when using non-page kv cache in flash_attn_with_kvcache function.
The num_splits calculated by the determine_num_splits function is closely affected by the following parameters: batch_size:int, num_heads:int, head_size:int, seqlen_q:int, seqlen_k:int, num_SMs:int. During the decoding stage, seqlen_q is 1, which makes the value of seqlen_k quite crucial. In my tests, where the maximum length per sequence is 131072, I preallocate a non-paged length of 131072 for each sequence's cache. I then specify the actual cache length for each sequence using cache_seqlens params in flash_attn_with_kvcache func. However, in the determine_num_splits function, seqlen_k is set to kcache.size(1), and for non-page mode, it can equal 131072. This value seems to overlook the current seqlen, leading to an inappropriate number of num_splits, consequently causing performance loss.
My test script, with default values for batch_size and others, the following is results and thinking :
benchmark_flash_attention.txt

When num_splits defaults to 0, the page kernel execution time is 72.252 us, while the non-page is 129.314 us, which indicates a significant performance gap.

When adjusting num_splits for non-paged mode with the following code (and removing the num_splits < 128 torch check):

num_splits = determine_num_splits(num_seqs, num_kv_heads, head_size, 1, seq_len, num_SMs)
num_splits = cache_max_seq_len // (seq_len // num_splits)

# The above code considers that after calculating `num_splits` based on `seq_len`,
# it proportionally determines how many chunks the entire `cache_max_seq_len` should be divided into.

The non-page kernel performance increases to 78.535 us, much closer to the paged kernel performance. （May due to kernel limitations, the calculated num_splits is inaccurate, reducing the usefulness of this performance metric.）
I am aware that my aforementioned approach to determining num_splits is merely a simple attempt and lacks representativeness. But I think, the num_splits calculation in its current state may not be suitable for scenarios with sequence lengths significantly smaller than the allocated cache size, in non-paged memory scenarios during the decoding phase.
Thank you for your attention to this issue. I am looking forward to your feedback on how this can be addressed to optimize the performance of the project

It's just a heuristic to determine num_splits. In this case it doesn't work super well.
We can't use the info in cache_seqlens since that's on GPU and doing a sync from GPU -> CPU (to determine num_splits) would be very expensive.

Got it, Thank you for quick feedback.

Are you suggesting a different heuristic based on cache_max_seq_len?
When would that be better / worse than the current heuristic?

Based on my current testing, when cache_max_seq_len is significantly larger than seq_len, the non-page with kv_cache attention kernel's performance with the current heuristic method shows a considerable gap compared to direct page attention with kv-cache.
However, when testing various num_splits ranging from 1 to 128, there exist good num_splits configurations that yield performance comparable to direct page attention.
This may suggest that a different heuristic approach, perhaps leveraging information such as cache_max_seq_len, might be necessary under this conditions. Unfortunately, I currently unknown how to design such a heuristic strategy.


emqttd_cli:sessions/1 error

Environment

OS:
Erlang/OTP:
EMQ:

Description
emqttd_cli:sessions/1 line 551, parameters don't match.
    InfoKeys = [clean_sess,
                subscriptions,
                max_inflight,
                inflight_len,
                mqueue_len,
                mqueue_dropped,
                awaiting_rel_len,
                deliver_msg,
                enqueue_msg,
                created_at],
    %% lack of  subscriptions
    ?PRINT("Session(~s, clean_sess=~s, max_inflight=~w, inflight=~w, "
           "mqueue_len=~w, mqueue_dropped=~w, awaiting_rel=~w, "
           "deliver_msg=~w, enqueue_msg=~w, created_at=~w)~n",
            [ClientId | [format(Key, get_value(Key, Data)) || Key <- InfoKeys]]).

There may be similar mistakes.

@qingchuwudi This issue has been fixed in PR: https://github.com/emqtt/emqttd/pull/1002


Bots messages and prefixes blacklisted are still polluting Minecraft chat. (v2.1.0)

Here is my config file:
{   "channels": [     {       "minecraft": {         "chatTemplate": "&8&l&r &e%a &7> &r%s"
},
"discordId": "123456789",
"discord": {
"joinedTemplate": "%s just joined the server",
"serverUpMessage": ":exclamation:  Server has started!",
"serverDownMessage": ":exclamation:  Server has stopped.",
"leftTemplate": "%s just left the server",
"publicChat": {
"authenticatedChatTemplate": "GAME %s",
"anonymousChatTemplate": "GAME | %a: %s"
},
"broadcastTemplate": " %s"
}
}
],
"cancelAllMessagesFromBot": true,
"prefixBlacklist": [
"!"
],
"tokenStore": "JSON",
"minecraftBroadcastTemplate": "&2 %s",
"botToken": "1234"
}
`
And yet my Mee6 bot is still sending its messages into the game chat when a command is sent.
I'm running version 2.1.0.

cancelAllMessagesFromBot only cancels the messages from the bot of "botToken"

The setting is to prevent the bot from grab Discord messages from itself and send back to Minecraft.
Can you explain more on your setup? Why do you setup your Mee6 in the channel but does not want Minecraft users to see the message?

We have commands in the channel such as '!ip', '!rules', etc. These commands have symbols and big messages. I thought that the blacklist would stop people's command and Bot's sending messages into game.

@VankkaGithub The approach using botId instead of special character does have an issue: for authenticated user, messages are not sent from bot user, so those are routed back to Minecraft, creating duplication. I think I will go back to using Nonce for this purpose.
@Axiom1999 I think I will change the config cancelAllMessagesFromBot will actually cancel messages from all bots. By the way, does that mean you are using Vankka's build. I don't remember publishing any version with this config yet, or am I mistaken?

cancelAllMessagesFromBot is now replaced by ignoreBots. Setting this to true will ignore all messages from any Discord bots.


bandit linter messages don't appear in the "Problems" tab

Environment data

VS Code version: 1.54.0
Extension version (available under the Extensions sidebar): v2021.2.582707922
OS and version: Linux x64 5.11.2-arch1-1
Python version (& distribution if applicable, e.g. Anaconda): 3.5.10
Type of virtual environment used (N/A | venv | virtualenv | conda | ...): venv
Relevant/affected Python packages and their versions:
Relevant/affected Python-related VS Code extensions and their versions: pylance-2021.3.0
Value of the python.languageServer setting: pylance-2021.3.0

Expected behaviour
See issues reported by bandit in the "Problems" tab.
Actual behaviour
Bandit output is visible in the "Output tab", but not in the "Problems" tab.
Steps to reproduce:

Looks like we need to remove col from custom message format and pass a custom regex to run parse the message:
https://github.com/Microsoft/vscode-python/blob/49a785398dfd07f82365266181fddab4cf5f20c6/src/client/linters/bandit.ts#L31
This regex should be enough:
(?<line>\d+),(?<type>\w+),(?<code>\w+\d+):(?<message>.*)\r?(\n|$)

#16336

A workaround for this is to install bandit from master:
pip install -U https://github.com/PyCQA/bandit/archive/refs/heads/master.zip

to summarise:

bandit has a col field but it hasn't been released yet
the linter should spot the use of the col as isNaN and roll the column offset to 0

The second isn't working. will investigate

https://github.com/microsoft/vscode-python/pull/16337

Fix in https://github.com/microsoft/vscode-python/pull/16337


[Staging & Production] Dropbox: Inconsistent warnings to user about deletion of files

Steps

Go to the user setting and authorize your Dropbox account.
Now go to a project and go into the settings tab, here authorize dropbox for this project.
Click ok and then choose the files and folders from Dropbox to link to your project.
Return to the project files page.
Click on the grey 'X' next to a file to remove that file that is linked to the project through your dropbox. You will get this user warning (hit cancel):

Now click on the file name to go to the file page and render an image.  Click on the red 'delete' button.  You will see this user warning:

Notice the awesome buck that I bagged!  My first one!!!!
Expected
I would expect that the language/description in error messages to a user regarding the same function would be the same.  Specifically that it will be removed from your dropbox account upon deletion.
Actual
The two error messages given when trying to delete a dropbox linked file are different.  One states that the action is 'irreversible' and the other 'Are you sure you want to delete IMG_9387.JPG from your Dropbox?'.  When both are going to be permanently deleted from the OSF and from the linked dropbox account, the user should be clearly warned of the implications of the action.
Also, when deleting a file from the file page that is uploaded from the desktop and not through dropbox, the error message is 'Are you sure you want to delete file?'

@chrisseto Could you mention in your PR that this issue will be fixed when it's merged?

@brianjgeiger @chrisseto Files View PR, I assume? Got a number on that?

This is, currently, not fix in my PR. I can add this in if you'd like.

Not too hard @chrisseto ?

@lbanner Not at all

OK thanks @chrisseto -- yes, let's do it.

Everything looks the same now that WaterButtler Files has gone live.


Storage/stg87 preview

[Storage] upgrade version for STG87 preview features
Work around the issue caused by a bug in Date when initializing from a miliseconds number.

API change check
APIView has identified API level changes in this PR and created following API reviews.
azure-storage-blob


⚠ Samsung has degraded performance

In 12f0190, Samsung (https://samsung.com) experienced degraded performance:

HTTP code: 200
Response time: 2196 ms

Resolved: Samsung performance has improved in 878ce34.


Viewer vs origin

The README says:
This function is designed to run on the viewer request phase of Lambda@Edge.

In testing, I think it also works with origin request ... unless you know of a reason why it shouldn't be used with that? My preference would be to use origin request because CloudFront then caches the result, whereas viewer request causes the script to run on every browser request.

It should work on origin requests too, and yes, it will cache the responses.
The code isn't using any of the origin information being sent in the origin request, so there could be new features here to use this code to rewrite origin info.
Pull requests are welcome :)


Changing the width of the browser clears the email input value on the login page

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

Action Performed:

Go to https://staging.new.expensify.com/
Enter email address
change browser size from large screen to small screen or small to large

Expected Result:
Email value should not be clear on changing the browser size
Actual Result:
Email value is beings cleared on changing browser size
Workaround:
unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[ ] Android / native
[ ] Android / Chrome
[ ] iOS / native
[ ] iOS / Safari
[x] MacOS / Chrome / Safari
[ ] MacOS / Desktop

Version Number: 1.2.83-0
Reproducible in staging?: y
Reproducible in production?: y
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos:
https://user-images.githubusercontent.com/43996225/225074077-27f7545c-f988-4fcb-9ded-9df179f58fc7.mp4
https://user-images.githubusercontent.com/43996225/225074101-c5654d55-14c8-44b7-bf58-cefa1e6e12e0.mov
Expensify/Expensify Issue URL:
Issue reported by: @jayeshmangwani
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1678805557980369
View all open jobs on GitHub

Triggered auto assignment to @kadiealexander (Bug), see https://stackoverflow.com/c/expensify/questions/14418 for more details.

Bug0 Triage Checklist (Main S/O)

[ ] This "bug" occurs on a supported platform (ensure Platforms in OP are ✅)
[ ] This bug is not a duplicate report (check E/App issues and #expensify-bugs)

If it is, comment with a link to the original report, close the issue and add any novel details to the original issue instead

[ ] This bug is reproducible using the reproduction steps in the OP. S/O

If the reproduction steps are clear and you're unable to reproduce the bug, check with the reporter and QA first, then close the issue.
If the reproduction steps aren't clear and you determine the correct steps, please update the OP.

[ ] This issue is filled out as thoroughly and clearly as possible

Pay special attention to the title, results, platforms where the bug occurs, and if the bug happens on staging/production.

[ ] I have reviewed and subscribed to the linked Slack conversation to ensure Slack/Github stay in sync

@kadiealexander  I did a checklist as I was looking for an issue to work on. As discussed in this slack thread, the same problem has been reported before in a GH issue. This issue seems to be a regression caused by this PR.
@kadiealexander if you agree that this issue should be fixed, I'm happy to take this one.

Sounds great @hayata-suenaga!! Take it away.

Job added to Upwork: https://www.upwork.com/jobs/~0102764c1cf38d1dc8

Triggered auto assignment to Contributor Plus for review of internal employee PR - @sobitneupane (Internal)

The same issue happens with magic code input
https://user-images.githubusercontent.com/98560306/225448867-20060244-0918-41e9-9b89-833855a94734.mov

I agree, it's definitely a very niche bug. Since it's not blocking users from the product and the likelihood of someone messing with their screen size during login is small, I'm happy to close this without fixing it.


jQuery Deprecation

Error: Using Ember.$() has been deprecated, use `import jQuery from 'jquery';` instead
Traced it back to this line in utilities.
Reference: deprecation ember-views.curly-components.jquery-element

v0.9.0 removes jquery as dependency