gRPC support for HoloLens2 with Unity

Is your feature request related to a problem? Please describe.
I'd like to use gRPC in Unity in HoloLens2. HoloLens2 runs windows on an ARM64 CPU, and requires a dedicated grpc_csharp_ext.dll.
Describe the solution you'd like
I'd like:

grpc_csharp_ext.dll for windows ARM64 to be delivered as part of the gRPC package.

A working build for Unity and HoloLens2 (as part of Official gRPC Releases).

Describe alternatives you've considered
I've managed to get grpc_csharp_ext.dll for windows arm64 with vcpkg by running:

vcpkg install grpc:arm64-windows

Following these steps helps compile the Unity application, but for some reason I'm getting this error message:

System.DllNotFoundException: Unable to load DLL 'grpc_csharp_ext.dll': The specified module could not be found.

Additional context
Unity uses C#, but for uwp windows they use an IL2CPP compiler. I.e. the C# code is converted to C++ (IIUC).
I've seen some related threads, but not one that discusses HoloLens2+Unity specifically, so I hope this isn't redundant with other threads.

I have the same goal: to run grpc on HoloLens 2.
I have compiled grpc for ARM64 with vcpkg as you said. In my Unity project (Unity 2019.3.15f1) I use the package MSBuildForUnity to install the packages Google.Protobuf and Grpc.Core. I have created a Plugins folder in Assets where I copy the grpc_csharp_ext.dll for x64 and ARM64. I set up for each dll (Inspector) its corresponding platform. The dll for x64 is from UnityApp\Assets\Dependencies\net46\grpc_csharp_ext.x64.dll (I renamed the file as grpc_csharp_ext.dll, not sure yet why Unity does not find this dll automatically when you press Play button) and the dll for ARM64 is from \vcpkg\buildtrees\grpc\arm64-windows-dbg\grpc_csharp_ext.dll. After I checked that everything works in Unity editor, I built the Visual Studio project in Unity. In Visual Studio 2019, when I build the project for ARM64 I have a lot of linking errors like:
Severity	Code	Description	Project	File	Line	Suppression State
Error	LNK2019	unresolved external symbol grpcsharp_version_string referenced in function DllImportsFromStaticLib_grpcsharp_version_string_mBA017FAEEF230F896AFE112589C7758B2A1E020A	Il2CppOutputProject	C:\HoloLens2_projects\HoloLens2_NavEVAR\App\Il2CppOutputProject\9198B2E46770E7F49EAE971D0DC4BADF.obj	1
I think that the problem comes from the grpc versions. The version of grpc in cvpkg is 1.29.1 while the version downloaded by MSBuildForUnity is 2.30.0. I have tried to download the version 1.29.1 but there isn´t this version of the NuGet package. The closest version of grpc that I can get is 2.23 (not 1.29.1). I have also tried with this version but the same errors in Visual Studio. Any idea of how to build grpc_csharp_ext.dll for ARM64 (version 2.30.0)? Thanks!

To get the project to compile I've followed the steps here:
https://github.com/grpc/grpc/issues/20344#issuecomment-561559557
I used the exact same version as in the post, which is 1.25.
So I also have some version mismatch, having the grpc_csharp_ext.dll at 1.29.1 and the rest of the dlls in version 1.25. Since the issue is that the dll is not found I don't think that the version mismatch is the issue (I also hope that the 1.29.1 dll is backwards compatible with calls from a 1.25 dll). Also note, it may be possible to get an older grpc_csharp_ext.dll by reverting the vcpkg repo to an older version. I haven't figured out how to get exactly 1.25, and haven't looked into it since the error message I'm getting doesn't seem related.
To isolate the problem I manually created a C++ dll and a C# project that invokes a simple function from that dll. This also yields a "dll not found" exception on the HoloLens2 (while it works fine in the Unity IDE). So at the moment I'm looking into how to get DllImport to work on HoloLens2.
If you follow these steps please let me know if and how you've managed to get this working on the HoloLens2, and if so - how.

Thanks! I will try it. Please see my comment on, I think, your other thread:
https://forum.unity.com/threads/hololens2-with-grpc-on-unity.932688/
I hope that your error is solved with /MT

Yes, that was another thread I opened :)
And yes, the "/MT" flag made the single function C++ DLL work on HoloLens2.
So your conclusion is correct - it must be an issue with the compiled grpc_csharp_ext.dll that I'm using.
Please let me know if you manage to get it working.

Trying https://github.com/grpc/grpc/issues/20344#issuecomment-561559557 but I got stuck in
python tools/run_tests/run_tests.py -l csharp -c opt --build_only
Did you have the following error when doing    tools\run_tests\helper_scripts\build_csharp.bat?
C:\Users\XX\.nuget\packages\microsoft.build.tasks.git\1.0.0-beta2-18618-05\build\Microsoft.Build.Tasks.Git.targets(20,5): error MSB4018: task failed unexpectedly "Microsoft.Build.Tasks.Git.LocateRepository". [C:\HoloLens2_projects\grpc_buildCommit\grpc\src\csharp\Grpc.Core.Api\Grpc.Core.Api.csproj]
\r\nC:\Users\XX\.nuget\packages\microsoft.build.tasks.git\1.0.0-beta2-18618-05\build\Microsoft.Build.Tasks.Git.targets(20,5): error MSB4018: System.TypeInitializationException: The type initializer for 'Microsoft.Build.Tasks.Git.TaskImplementation' threw an exception. [C:\HoloLens2_projects\grpc_buildCommit\grpc\src\csharp\Grpc.Core.Api\Grpc.Core.Api.csproj]
\r\nC:\Users\XX\.nuget\packages\microsoft.build.tasks.git\1.0.0-beta2-18618-05\build\Microsoft.Build.Tasks.Git.targets(20,5): error MSB4018:  ---> System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Build.Tasks.Git, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. System cannot find the specific file
....

Not sure if it'll solve your issue, but in one of the builds based on https://github.com/grpc/grpc/issues/20344#issuecomment-561559557 I noticed an error that was related to an older VS version, so I installed VS2015 and used its "developer command prompt" to run the build (which worked).
The side effect was that it had mixed up global VS variables, and I had to re-install windows to get vcpkg working again.
So if you have multiple machines or a VM I'd recommend doing the build on such a machine.

By the way, I attended the gRPC Conf 2020.
I asked the following question in the session "Ask Us Anything: gRPC Maintainers":
Trying to use gRPC on HoloLens 2 (ARM64). I use Unity 2019.3 to build the Visual studio project. Unity uses .NET 4.x or .NET standard 2.0, with IL2CPP backend. Do you think that grpc-dotnet will work on HoloLens 2? If not, do you have any suggestion with grpc.core? With grpc.core I could built grpc_csharp_ext.dll for ARM64 using vcpkg but it does not work because I need to build it with the option /MT.
Their answer:
Grpc.Core might also not work unfortunately, because we only support Unity as "experimental" and there is way too many targeted platforms for us to test. I don't think there's anything preventing your from using Grpc.Core (C#) with HoloLens in principle, but you might need to tweak the source code a bit to make that work. - Jan Tattermusch
grpc-dotnet will very likely not work with Unity because unity doesn't support recent .NET core versions. (you'd need netstandard2.1/netcoreapp3.0 to use grpc-dotnet) - Jan Tattermusch

You could try using a custom triplet[1] to build with /MT
set(VCPKG_CRT_LINKAGE static)

[1] https://github.com/microsoft/vcpkg/tree/master/docs/users/triplets.md

I cloned vcpkg repository on 15.07.2020. With that version, I can generate grpc_csharp_ext.dll with the triplet arm64-windows as tom-r-o suggested. After creating a custom triplet for arm64-windows with the setting that ras0219 suggested for building with /MT (thanks!), I can also generate grpc_csharp_ext.dll. In that case, the gRPC version is 1.29.1. However, if I try to generate grpc_csharp_ext.dll with the triplet arm64-windows (without /MT) after cloning the vcpkg repository today (version of gRPC1.31.1, ), I have grpc_csharp_ext.lib but not grpc_csharp_ext.dll, no error shown. I do not know why because the triplet of the new version of vcpkg matches that of the old version.
The reason for updating vcpkg (and thus grpc) is because I think I also have a problem with the grpc versions. I implemented a grpc server with the NuGet packages Google.Protobuf (version 3.13.0) and Grpc.Core (version 2.30.0). Same NuGet packages for the Unity project using MSBuild for Unity (in package manager). I can receive the data in Unity from the gRPC server using these settings but if I just replace grpc_csharp_ext.dll that comes with MSBuild with a new grpc_csharp_ext.dll generated with vcpkg and the triplet  x64-windows, Unity says that "DllNotFoundException: grpc_csharp_ext". Do you know which version of the NuGet packages Google.Protobuf and Grpc.Core will work with which version of grpc to generate grpc_csharp_ext.dll generated with vcpkg?
tom-r-o , have you tried to replace grpc_csharp_ext.dll (x64) in your Unity project to check if you do not have any problem with the versions?

Regarding the versions problem, I could generate a grpc_csharp_ext.dll for x64 that works with the NuGet packages Google.Protobuf (version 3.13.0) and Grpc.Core (version 2.30.0) using MSBuild for Unity (package manager) in Unity. What I did was to clone the version of gprc 1.31.1 and follow the steps in https://github.com/grpc/grpc/blob/v1.31.1/BUILDING.md except for using
cmake .. -G "Visual Studio 15 2017" -A x64
Now the next steps would be to generate grpc_csharp_ext.dll for ARM64 using the same way as before and try to do the same as https://github.com/grpc/grpc/issues/20344#issuecomment-561559557 (tom-r-o suggestion) but with the version of grpc corresponding to the NuGet packages.
I have tried to generate the ARM64 file for grpc_csharp_ext.dll and I have the following errors:
crypto.dir\Release\chacha-x86_64.obj : fatal error LNK1112: module machine type 'x64' conflicts with target machine typ
e 'ARM64' [C:\grpc.buildARM64\third_party\boringssl-with-bazel\crypto.vcxproj]
No idea yet how to create chacha.obj for ARM64
and
C:\grpc\src\core\lib\transport\transport.cc(100): warning C4003: not enough arguments for function-like macro invocatio
n 'move64' [C:\grpc.buildARM64\grpc_unsecure.vcxproj]
C:\grpc\src\core\lib\transport\transport.cc(100): error C2065: 'opeqneoneg': undeclared identifier [C:\grpc.buildARM64
\grpc_unsecure.vcxproj]
C:\grpc\src\core\lib\transport\transport.cc(100): error C2065: 'to': undeclared identifier [C:\grpc.buildARM64\grpc_un
secure.vcxproj]
C:\grpc\src\core\lib\transport\transport.cc(100): error C2275: 'uint64_t': illegal use of this type as an expression [C
:\grpc.buildARM64\grpc_unsecure.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\stdint.h(24): note: s
ee declaration of 'uint64_t'
C:\grpc\src\core\lib\transport\transport.cc(100): error C2059: syntax error: ',' [C:\grpc.buildARM64\grpc_unsecure.vcx
proj]
C:\grpc\src\core\lib\transport\transport.cc(100): error C2143: syntax error: missing ';' before '{' [C:\grpc.buildARM6
4\grpc_unsecure.vcxproj]
C:\grpc\src\core\lib\transport\transport.cc(100): error C2447: '{': missing function header (old-style formal list?) [C
:\grpc.buildARM64\grpc_unsecure.vcxproj]
C:\grpc\src\core\lib\transport\transport.cc(107): warning C4003: not enough arguments for function-like macro invocatio
n 'move64' [C:\grpc.buildARM64\grpc_unsecure.vcxproj]
C:\grpc\src\core\lib\transport\transport.cc(107): error C2065: 'opeqneoneg': undeclared identifier [C:\grpc.buildARM64
\grpc_unsecure.vcxproj]
C:\grpc\src\core\lib\transport\transport.cc(107): error C2059: syntax error: ',' [C:\grpc.buildARM64\grpc_unsecure.vcx
proj]
C:\grpc\src\core\lib\transport\transport.cc(108): warning C4003: not enough arguments for function-like macro invocatio
n 'move64' [C:\grpc.buildARM64\grpc_unsecure.vcxproj]
C:\grpc\src\core\lib\transport\transport.cc(108): error C2065: 'opeqneoneg': undeclared identifier [C:\grpc.buildARM64
\grpc_unsecure.vcxproj]
C:\grpc\src\core\lib\transport\transport.cc(108): error C2059: syntax error: ',' [C:\grpc.buildARM64\grpc_unsecure.vcx
proj]
C:\grpc\src\core\lib\transport\transport.cc(109): warning C4003: not enough arguments for function-like macro invocatio
n 'move64' [C:\grpc.buildARM64\grpc_unsecure.vcxproj]
C:\grpc\src\core\lib\transport\transport.cc(109): error C2065: 'opeqneoneg': undeclared identifier [C:\grpc.buildARM64
\grpc_unsecure.vcxproj]
C:\grpc\src\core\lib\transport\transport.cc(109): error C2059: syntax error: ',' [C:\grpc.buildARM64\grpc_unsecure.vcx
proj]
Any suggestion?

Regarding chacha.obj for ARM64, I have had a look at cMakeLists.txt in cypto project.
There are ASM files for win-x86 and win-86-64 in grpc\third-party\boringssl-withbazel. For ARM64 the are files for Linux and iOS (see below) but not for windows...
grpc\third_party\boringssl-with-bazel\ios-aarch64\crypto\chacha\chacha-armv8.S
grpc\third_party\boringssl-with-bazel\linux-aarch64\crypto\chacha\chacha-armv8.S
Any suggestion to get through this problem? I think I will have the same problem for the other ASM files:
win-x86_64/crypto/chacha/chacha-x86_64.asm
win-x86_64/crypto/cipher_extra/aes128gcmsiv-x86_64.asm
win-x86_64/crypto/cipher_extra/chacha20_poly1305_x86_64.asm
win-x86_64/crypto/fipsmodule/aesni-gcm-x86_64.asm
win-x86_64/crypto/fipsmodule/aesni-x86_64.asm
win-x86_64/crypto/fipsmodule/ghash-ssse3-x86_64.asm
win-x86_64/crypto/fipsmodule/ghash-x86_64.asm
win-x86_64/crypto/fipsmodule/md5-x86_64.asm
win-x86_64/crypto/fipsmodule/p256-x86_64-asm.asm
win-x86_64/crypto/fipsmodule/p256_beeu-x86_64-asm.asm
win-x86_64/crypto/fipsmodule/rdrand-x86_64.asm
win-x86_64/crypto/fipsmodule/rsaz-avx2.asm
win-x86_64/crypto/fipsmodule/sha1-x86_64.asm
win-x86_64/crypto/fipsmodule/sha256-x86_64.asm
win-x86_64/crypto/fipsmodule/sha512-x86_64.asm
win-x86_64/crypto/fipsmodule/vpaes-x86_64.asm
win-x86_64/crypto/fipsmodule/x86_64-mont.asm
win-x86_64/crypto/fipsmodule/x86_64-mont5.asm
win-x86_64/crypto/test/trampoline-x86_64.asm

I managed to get grpc 1.25 working on HoloLens 2. I also tried the most recent version (1.29.1) vcpkg has to offer but unfortunately there is a Protobuf/System.Memory version conflict (#22251) which hasnt been resolved yet, afaik. The referenced issues claims that the last version without that conflict has been 1.26 which -- as I mentioned in my previous comment -- contains a grpc_csharp_ext.dll which my HoloLens at least isnt detecting.
So what needs to be done:

I basically followed https://github.com/grpc/grpc/issues/20344#issuecomment-561559557
If you are like me and don't want to install outdated build tools you can change the used Visual Studio version in tools\run_tests\helper_scripts\pre_build_csharp.bat. I used "Visual Studio 15 2017" instead of "Visual Studio 14 2015".
Make sure to clean the cmake\build folder if you ran run_tests.py before
If everything works well, you will end up with some Microsoft.Build.Tasks.Git.targets exceptions when the Python script attempts to build the C# project. It's probably related to some outdated SourceLink dependency or something. Nevertheless, the project will build just fine with Visual Studio 2019 when you use the Grpc.sln file.
If you followed these steps, you should have something that works with Unity and HoloLens 1, now the part that makes it work with HoloLens2.
Clone vcpkg and checkout the tag 2020.01. I don't know whether checking out 2020.01 is actually necessary but it contains the grpc version closest to 1.25

git clone https://github.com/microsoft/vcpkg.git
git checkout 2020.01

You have to edit the grpc port to build the correct version. Download 00001-fix-uwp.patch.txt, 00002-static-linking-in-linux.patch.txt and portfile.cmake.txt, remove the .txt ending and override the files located at ports\grpc.
Next you have to backport a triplet configuration: Download arm64-windows-static.cmake.txt, rename it and put it into triplets\community
Now bootstrap vcpkg and build protobuf:x86-windows and grpc with the arm64-windows-static triplet

.\vcpkg.exe install protobuf:x86-windows
.\vcpkg.exe install grpc --triplet arm64-windows-static

Copy the generated file buildtrees\grpc\arm64-windows-static-rel\grpc_csharp_ext.dll into your Plugin folder (Grpc.Core\runtimes\win\arm64) and set the target for this DLL:

@aleneum, great that gRPC 1.25 is working on HoloLens 2 with the vcpkg and the unity package!!!! Congratulations!! In my case I couldn't make it run using vcpkg. Thanks! I found that here https://stackoverflow.com/questions...t-pinvoke-native-dll-with-error-dll-not-found
I have been able to make gRPC (version 1.31.1) run on HoloLens 2 this week directly with gRPC github repository as follows:

To clone and generate grpc_csharp_ext.dll on Windows you need first to follow the steps detailed in https://github.com/grpc/grpc/blob/v1.31.1/BUILDING.md and some other steps.  I did that on a virtual machine Windows 10 (64-bit) with Oracle VM VirtualBox not to have any problem with my Visual Studio 2019 installed on my computer. Basically:

Visual Studio 2017
Install Git
Install CMake
Install Chocolatey
Install nasm (choco install nasm), check that it is added to PATH
In CMD:

cd c:\
git clone -b v1.31.1 https://github.com/grpc/grpc
cd grpc
git submodule update --init
md .build_ARM64
cd .build_ARM64
cmake .. -G "Visual Studio 15 2017" -A ARM64 -D OPENSSL_NO_ASM=1

With OPENSSL_NO_ASM=1 the build does not use ASM files (contain lines of code in assembly language). I did that because there are not ASM files for ARM64 in gRPC repository, specifically in  c:\grpc\third_party\boringssl-with-bazel (there are ASM files for Windows x86 and x86_64). I have no idea yet how to generate those ASM files for ARM64.
Open C:\grpc.build_ARM64\grpc.sln in Visual studio 2017
Change to Release
Replace in transport.cc (grpc_csharp_ext.dll is not created without this change):

static void move64(uint64_t* from, uint64_t* to) {
  *to += *from;
  *from = 0;
}

void grpc_transport_move_one_way_stats(grpc_transport_one_way_stats* from,
                                       grpc_transport_one_way_stats* to) {
  move64(&from->framing_bytes, &to->framing_bytes);
  move64(&from->data_bytes, &to->data_bytes);
  move64(&from->header_bytes, &to->header_bytes);
}

with
static void move64_aux(uint64_t* from, uint64_t* to) {
  *to += *from;
  *from = 0;
}

void grpc_transport_move_one_way_stats(grpc_transport_one_way_stats* from,
                                       grpc_transport_one_way_stats* to) {
  move64_aux(&from->framing_bytes, &to->framing_bytes);
  move64_aux(&from->data_bytes, &to->data_bytes);
  move64_aux(&from->header_bytes, &to->header_bytes);
}

Select all projects except ALL_BUILD, Continuous, Experimental, INSTALL, Nightly, NightlyMemoryCheck, plugins, tools, tools_c, tools_cxx, ZERO_CHECK and go to Properties -- C/C++ -- Code Generation -- Runtime Library: Multi-threaded (/MT) -- OK
Select project grpc_csharp_ext and Build. When it finishes, you have C:\grpc.build_ARM64\Release\grpc_csharp_ext.dll for ARM64

Then, in my computer (where I have Visual Studio 2019), I did the following steps to create a folder with all necessary gRPC files for Unity:

Create folder c:\gRPC_Unity_1_31_1 and inside create these folders

c:\gRPC_Unity_1_31_1\Plugins\Win32\x86
c:\gRPC_Unity_1_31_1\Plugins\Win32\x86_64
c:\gRPC_Unity_1_31_1\Plugins\Win32\ARM64

In Visual Studio 2019, Create a new project (Name: Example) -- Filters c#, Windows, Console -- Choose Console App (.NET Framework) -- Select Framework: .NET Framework 4.5 -- Select project -- Manage NuGet Packages -- Install Google.Protobuf (version 3.13.0), package Grpc.Core (version 2.31.0) and Grpc.Tools (version 2.31.0). After this step, you will find in  C:\Users\XXXX.nuget\packages\grpc.tools\2.31.0 the files protoc.exe and grpc_csharp_plugin.exe to generate two specific c# files (I will refer them to YYpackage.cs and YYGrpc.cs) from the proto file. You do not need to generate those files yet. Build solution.
Copy the following dlls from Example\Example\bin\Debug to C:\gRPC_Unity_1_31_1\Plugins\Win32

Google.Protobuf.dll
System.Buffers.dll
System.Memory.dll
System.Runtime.CompilerServices.Unsafe.dll

Copy Example\Example\bin\Debug\grpc_csharp_ext.x86.dll to c:\gRPC_Unity_1_31_1\Plugins\Win32\x86 and rename this file to grpc_csharp_ext.dll
Copy Example\Example\bin\Debug\grpc_csharp_ext.x64.dll to c:\gRPC_Unity_1_31_1\Plugins\Win32\x86_64 and rename this file to grpc_csharp_ext.dll
Copy grpc_csharp_ext.dll that you generated in step 1 to c:\gRPC_Unity_1_31_1\Plugins\Win32\ARM64
Going back to the folder were you have downloaded the GitHub repository (Virtual machine,  C:\grpc), go to C:\grpc\src\csharp and copy Grpc.Core and Grpc.Core.Api folders to c:\gRPC_Unity_1_31_1.
Remove all files except for cs files (for example Grpc.Core\build folder is deleted). Copy the content of Grpc.Core.Api into Grpc.Core except for Grpc.Core.Api\Properties\AssemblyInfo.cs (keep file from Grpc.Core) and Grpc.Core.Api\Internal\UnimplementedCallInvoker.cs (same file in both folders). Remove Grpc.Core.Api folder and Grpc.Core\ForwardedTypes.cs file
Finally, copy the content of C:\gRPC_Unity_1_31_1 to the Assets folder of your Unity project

In Unity

Select Assets\Plugins\w32\x86_64\grpc_csharp_ext.dll, Select just platform Editor, CPU: x86_64, OS: Windows, Apply
Select Assets\Plugins\w32\x86\grpc_csharp_ext.dll, Select just platform WSAPlayer, SDK: UWP, CPU: X86, Apply
Select Assets\Plugins\w32\ARM64\grpc_csharp_ext.dll, Select just platform WSAPlayer, SDK: UWP, CPU: ARM64, Apply
Go to Player Settings -- Other Settings -- Enable "Allow 'unsafe code'"

Change the following cs files (you can see why I have done that change in the comments)

Go to line 49 in Assets\Grpc.Core\Internal\NativeExtension.cs and do this change
// DefaultSslRootsOverride.Override(this.nativeMethods); // (commented to fix IOException: Error loading the embedded resource "Grpc.Core.roots.pem")
In Assets\Grpc.Core\Internal\NativeMethods.Generated.cs, go to line 584 and do these changes

//private const string ImportName = "__Internal"; // (commented)
private const string ImportName = "grpc_csharp_ext.dll"; // (added, lines 584-585 fixes Visual Studio error Error LNK2019 unresolved external symbol grpcsharp_version_string referenced in function DllImportsFromStaticLib_grpcsharp_version_string_m9DB1E4C23A3BD8941C1EA0D157230C0C15F5E13A	Il2CppOutputProject". DllImport does not work with __Internal in Il2Cpp

In Assets\Grpc.Core\Internal\NativeExtension.cs, go to line 132 and do these changes

//switch (PlatformApis.GetUnityRuntimePlatform()) // (commented, PlatformApis.GetUnityRuntimePlatform() does not work on HoloLens 2)
//{ // (commented)
//    case "IPhonePlayer": // (commented)
//        return new NativeMethods(new NativeMethods.DllImportsFromStaticLib()); // (commented)
//    default: // vgarcia (commented)
//        // most other platforms load unity plugins as a shared library // (commented)
//        return new NativeMethods(new NativeMethods.DllImportsFromSharedLib()); // (commented)
//} // (commented)
return new NativeMethods(new NativeMethods.DllImportsFromSharedLib()); // (added)

In Assets\Grpc.Core\Internal\UnmanagedLibrary.cs, go to line 132 and do these changes

//private static class Mono // (commented, to fix unresolved external symbol dlopen, dlerror and dlsym in Visual Studio)
//{ // (commented)
//    [DllImport("__Internal")] // (commented)
//    internal static extern IntPtr dlopen(string filename, int flags); // (commented)

//    [DllImport("__Internal")] //  (commented)
//    internal static extern IntPtr dlerror(); // (commented)

//    [DllImport("__Internal")] // (commented)
//    internal static extern IntPtr dlsym(IntPtr handle, string symbol); //  (commented)
//} // (commented)

After that go to line 100 (Assets\Grpc.Core\Internal\UnmanagedLibrary.cs) and do
// return Mono.dlsym(this.handle, symbolName); // (commented, name 'Mono' does not exist in the current context Assembly-CSharp
After that go to line 146 (Assets\Grpc.Core\Internal\UnmanagedLibrary.cs) and do

// return LoadLibraryPosix(Mono.dlopen, Mono.dlerror, libraryPath, out errorMsg); // commented, name 'Mono' does not exist in the current context Assembly-CSharp
throw new NotImplementedException("Mono is not supported by this build"); // (added)

Now you can create a Unity package that you can import in each Unity project that you need gRPC. In Unity, Assets -- Select Grpc.Core and Plugins -- Right mouse button -- Export package -- Unselect Include dependencies -- Export -- I named it GRPC_version_1_31_1_csharpNuGet_2_31_0_HoloLens2.unitypackage

To load this Unity package to another Unity project, Assets -- Import package -- Custom package -- Select GRPC_version_1_31_1_csharpNuGet_2_31_0_HoloLens2.unitypackage -- Import
Go to Player Settings -- Other Settings -- Enable "Allow 'unsafe code'". You will find all files (cs files, managed plugins [Google.Protobuf.dll, System.Buffers.dll, System.Memory.dll, System.Runtime.CompilerServices.Unsafe.dll] and native plugins [ARM64\grpc_csharp_ext.dll, x86\grpc_csharp_ext.dll, x86_64\grpc_csharp_ext.dll]) with the right settings. The last thing that you need in your new Unity project is to load YYpackage.cs and YYGrpc.cs generated from your proto file and the cs file where you do gRPC stuff like...
Channel channel = new Channel("<IP_ADDRESS>:50051", ChannelCredentials.Insecure);
YYpackage.YYpackage.YYpackageClient client; = new YYpackage.YYpackage.YYpackageClient(channel);
...

After the application works on Unity editor, in Unity generate Visual Studio 2019 project, go to Visual Studio 2019, change to ARM64 and Deploy Solution to HoloLens 2.
IMPORTANT NOTES:

I need "ChannelCredentials.Insecure" because I commented "DefaultSslRootsOverride.Override(this.nativeMethods)" since I could not load resource "Grpc.Core.roots.pem" (that file corresponds to c:\grpc\etc\roots.pem). I tried several things (for example https://github.com/grpc/grpc/issues/22485 but I could not load that file. Not sure what I am doing wrong.
The dll I generated for ARM64 does not use ASM files. In https://github.com/grpc/grpc/issues/9440 they explain that compiling with OPENSSL_NO_ASM harms throughput of secure connections significantly. I am still need to check the latencies (maybe comparing with the latencies I obtained with HoloLens 1). In my case I am not using a secure connection. Anyway, it would be great to have those ASM files for ARM64...

Is there a more streamlined way than what @veronicagarciavazquez outlines? It's great that it actually works but it could be easier imho. I still think this is has not been solved so far.

@veronicagarciavazquez, thank you very much for you indepth tutorial to deploying gRPC on the HL2!
Sadly I have one problem on the HL2. The unitypackage I've created is working flawlessly and fast on the editor but when I create a solution for the HL2 and deploy it I ran into two errors.
The first error comes when I use IP addresses that the server can't be found and failed to pick subchannel. To exclude HL2 connection issues I've set up a gRPC server behind public URL and then tested it again. The error now comes after 60s (timeout?) that the DNS cannot be resolved.
Did you or anybody encouter same/similar problems and managed to solve/work around them?

@veronicagarciavazquez, thank you very much for you indepth tutorial to deploying gRPC on the HL2!
Sadly I have one problem on the HL2. The unitypackage I've created is working flawlessly and fast on the editor but when I create a solution for the HL2 and deploy it I ran into two errors.
The first error comes when I use IP addresses that the server can't be found and failed to pick subchannel. To exclude HL2 connection issues I've set up a gRPC server behind public URL and then tested it again. The error now comes after 60s (timeout?) that the DNS cannot be resolved.
Did you or anybody encouter same/similar problems and managed to solve/work around them?

I found the location of the problem!
I created the solution always for ARM64 in the build settings in unity.
In order to solve this issue it needs (at least for me) to be build for ARM and then, just like @veronicagarciavazquez said, ARM64 needs to be selected in VS2019. Then the Hololens 2 can connect to the gRPC server.
I also confirmed that gRPC can be build with VS2019 instead of VS2017 in the first step of the explanation from @veronicagarciavazquez.
I hope everybody manage to run gRPC on Hololens 2 and don't have annoying blockers.
Thank you very much!

I found the location of the problem!
I created the solution always for ARM64 in the build settings in unity.
In order to solve this issue it needs (at least for me) to be build for ARM and then, just like @veronicagarciavazquez said, ARM64 needs to be selected in VS2019. Then the Hololens 2 can connect to the gRPC server.
I also confirmed that gRPC can be build with VS2019 instead of VS2017 in the first step of the explanation from @veronicagarciavazquez.
I hope everybody manage to run gRPC on Hololens 2 and don't have annoying blockers.
Thank you very much!

Thank you @veronicagarciavazquez for the amazing explanation! I have now also managed to build it, but I am having similar problems as @Birkenpapier . I am getting  an error saying that the server cannot be found and failed to pick subchannel. @Birkenpapier I tried to do what you did but without success. Would you mind giving a litte bit deeper explanation? It is working in unity, android, other computer etc. so I have ruled out error on the server side.

Just in case, my settings in Unity were as follows:
Unity (version Unity 2019.3.15f1 (64-bit))
Projects -- New -- Project Name: XX -- 3D
File -- Build Settings:

Add Open Scenes
Universal Windows Platform -- Switch Platform
Target device -- HoloLens
Architecture -- ARM64
Development Build enabled
Script Debugging enabled
Press Player Settings (settings for Universal Windows Platform) and in Publishing Settings:
-- Capabilities, enable the following ones:
----- Internet Client
----- InternetClientServer (for debugging)
--- PrivateNetworkClientServer (for debugging)
In XR Plugin Management, enable the following ones:
-- Install XR Plugin Management
----- Enable Windows Mixed Reality (in windows tab)

Thank you @veronicagarciavazquez for the amazing explanation! I have now also managed to build it, but I am having similar problems as @Birkenpapier . I am getting an error saying that the server cannot be found and failed to pick subchannel. @Birkenpapier I tried to do what you did but without success. Would you mind giving a litte bit deeper explanation? It is working in unity, android, other computer etc. so I have ruled out error on the server side.

Of course. I will try to explain it deeper:
The server and one client are written in Python 3.8.5. The server is receiving messages from the Python client and then wating for a message from the HoloLens client to send the message.
My HoloLens client is based on this example here: https://shadabambat1.medium.com/basic-client-server-communication-using-unity-grpc-f4a3c2cf819c
This are my deploying options in Unity 2019.4.17f1

and here in VS 2019:

I hope that something helped in this explanation.

Thank you both for spending time to help! As you both pointed out I had made the mistake of forgetting to add the correct capabilities... But now it's working so thanks once again since I probably would have spent another couple of days fault tracing before I would have remembered to look at the capabilities :)

Application does not pass Windows App Certification
API WSACleanup in wsock32.dll is not supported for this application type. grpc_csharp_ext.dll calls this API.
API WSAGetLastError in wsock32.dll is not supported for this application type. grpc_csharp_ext.dll calls this API.
API WSASetLastError in wsock32.dll is not supported for this application type. grpc_csharp_ext.dll calls this API.
API WSAStartup in wsock32.dll is not supported for this application type. grpc_csharp_ext.dll calls this API.
API __WSAFDIsSet in wsock32.dll is not supported for this application type. grpc_csharp_ext.dll calls this API.
API bind in wsock32.dll is not supported for this application type. grpc_csharp_ext.dll calls this API.
API closesocket in wsock32.dll is not supported for this application type. grpc_csharp_ext.dll calls this API.
API connect in wsock32.dll is not supported for this application type. grpc_csharp_ext.dll calls this API.
API gethostname in wsock32.dll is not supported for this application type. grpc_csharp_ext.dll calls this API.
API getpeername in wsock32.dll is not supported for this application type. grpc_csharp_ext.dll calls this API.

Someone solved this problem?

Since Grpc.Core is now in maintenance mode (see https://grpc.io/blog/grpc-csharp-future/), we don't plan to add any new features (or add support for more platforms).

@veronicagarciavazquez I followed your solution but still have some problems, maybe you can help!

"git submodule update --init" had some problems with Google/Re2 where I need to manually install it into the right folder then everything worked

If I have my Grpc.Core Folder in my Assets Folder Unity does.. ignore it? At least it says it can't find Grpc.Core then. If I move it into my scripts folder it works. I hope this is fine? Or should it be outside?

If I start my app now it throws the following warning when I want to open my channel
System.DllNotFoundException: grpc_csharp_ext assembly:<unknown assembly> type:<unknown type> member:(null) at (wrapper managed-to-native) Grpc.Core.Internal.NativeMethods+DllImportsFromSharedLib.grpcsharp_redirect_log(Grpc.Core.Internal.GprLogDelegate) at Grpc.Core.Internal.NativeLogRedirector.Redirect (Grpc.Core.Internal.NativeMethods native) [0x00031] in C:\Users\xxx\Desktop\HoloLens\PDA-AR\Assets\Scripts\Grpc.Core\Internal\NativeLogRedirector.cs:49  at Grpc.Core.Internal.NativeExtension..ctor () [0x00013] in C:\Users\xxx\Desktop\HoloLens\PDA-AR\Assets\Scripts\Grpc.Core\Internal\NativeExtension.cs:44  at Grpc.Core.Internal.NativeExtension.Get () [0x00031] in C:\Users\xxx\Desktop\HoloLens\PDA-AR\Assets\Scripts\Grpc.Core\Internal\NativeExtension.cs:65  at Grpc.Core.Internal.NativeMethods.Get () [0x00001] in C:\Users\xxx\Desktop\HoloLens\PDA-AR\Assets\Scripts\Grpc.Core\Internal\NativeMethods.cs:49  at Grpc.Core.GrpcEnvironment.GrpcNativeInit () [0x00020] in C:\Users\xxx\Desktop\HoloLens\PDA-AR\Assets\Scripts\Grpc.Core\GrpcEnvironment.cs:373  at Grpc.Core.GrpcEnvironment..ctor () [0x00020] in C:\Users\xxx\Desktop\HoloLens\PDA-AR\Assets\Scripts\Grpc.Core\GrpcEnvironment.cs:302  at Grpc.Core.GrpcEnvironment.AddRef () [0x00032] in C:\Users\xxx\Desktop\HoloLens\PDA-AR\Assets\Scripts\Grpc.Core\GrpcEnvironment.cs:78  at Grpc.Core.Channel..ctor (System.String target, Grpc.Core.ChannelCredentials credentials, System.Collections.Generic.IEnumerable1[T] options) [0x00044] in C:\Users\xxx\Desktop\HoloLens\PDA-AR\Assets\Scripts\Grpc.Core\Channel.cs:70
at Grpc.Core.Channel..ctor (System.String target, Grpc.Core.ChannelCredentials credentials) [0x00000] in C:\Users\xxx\Desktop\HoloLens\PDA-AR\Assets\Scripts\Grpc.Core\Channel.cs:55
at NearMenueHandler.UpdateMachineData () [0x0001b] in C:\Users\xxx\Desktop\HoloLens\PDA-AR\Assets\Scripts\NearMenueHandler.cs:75
UnityEngine.Debug:Log (object)
NearMenueHandler/d__10:MoveNext () (at Assets/Scripts/NearMenueHandler.cs:112)
System.Runtime.CompilerServices.AsyncVoidMethodBuilder:Start<NearMenueHandler/d__10> (NearMenueHandler/d__10&)
NearMenueHandler:UpdateMachineData ()
NearMenueHandler:Start () (at Assets/Scripts/NearMenueHandler.cs:38)
`

Any ideas how to fix this?

Great the error was removed with Unity 2020/2019. Sorry, I do not know why it cannot reach your address and I cannot test it with a HoloLens right now... :-(
Maybe one option is to try to create a x64 application with Unity to test if you can receive the data on another computer (not on Hololens) sent by your laptop.

follow the step but not found such a dll

Great the error was removed with Unity 2020/2019. Sorry, I do not know why it cannot reach your address and I cannot test it with a HoloLens right now... :-(
Maybe one option is to try to create a x64 application with Unity to test if you can receive the data on another computer (not on Hololens) sent by your laptop.

Thanks for the tip! I moved the server to a different PC and it worked! Seems like the Company Firewall does not allow any device outside the company internet to connect to the PC so that is probably the problem.
Unity Support also said that my code works for them on Unity 2021 with the newest version but does not work for me. Maybe this Info helps someone as they are at least working on it?
@SnowWindSaveYou Here is my grpc stuff as a Unity Package. Best way to try it is to download this repo and if this does not work change the grpc stuff with my stuff.


Add Duck DB Support

Adbc.download_driver!(:duckdb)

children = [
  {Adbc.Database,
   [
     driver: :duckdb,
     entrypoint: "duckdb_adbc_init",
     process_options: [name: MyApp.DB]
   ]},
  {Adbc.Connection, [database: MyApp.DB, process_options: [name: MyApp.Conn]]}
]
Supervisor.start_link(children, strategy: :one_for_one)

It seems that the PR is kinda stale and I had a bit of time, so I picked up from where @lkarthee was. I've addressed the issues in the code review, and now we're using update.exs to generate driver URLs for DuckDB in adbc_driver.ex.
Although calling update.exs with a ton of arguments may not be the best way to do it (see below) but perhaps let's refactor that in another PR (or when it's needed)?
elixir update.exs 0.11.0 duckdb-v0.10.1 apache-arrow-adbc-0.11.0-rc0

Thank you @cocoa-xu .

@cocoa-xu what if we hardcode the latest versions at the top of update.exs instead of passing them as arguments? This way we bump the version and run it. Otherwise we will need to keep track of the last versions of everything.

:green_heart: :blue_heart: :purple_heart: :yellow_heart: :heart:

@cocoa-xu what if we hardcode the latest versions at the top of update.exs instead of passing them as arguments? This way we bump the version and run it. Otherwise we will need to keep track of the last versions of everything.

I think perhaps another way is find the latest version using GitHub API? I can try it out today if this approach sounds okay to you/

I pushed a refactoring. :) @cocoa-xu we should probably release v0.3.0. What do you think?

@cocoa-xu sorry, I saw your comments just now. I would prefer to leave the versions hardcoded for now, so we have control over when and what to update. What do you think?

I pushed a refactoring. :) @cocoa-xu we should probably release v0.3.0. What do you think?

Yeah, let’s release v0.3.0. I’m outside at the moment so please release it, or I can do the release once I’m at home. ;)

@cocoa-xu sorry, I saw your comments just now. I would prefer to leave the versions hardcoded for now, so we have control over when and what to update. What do you think?

No worries! Then let’s go with the hard-coded way/


Better use of OreDict

After we merge the steamtools branch, which contains an OreDictHelper class, we need to use the oredict a lot better for better mod compatibility. The OreDict entries that certain things use can also be configurable, since they are just strings. Here are the following areas that should be oredictified:

[ ] Look through the entire codebase for areas that should be oredicted rather than hardcoded to specific blocks/items. Form a list here of those things.
Thumper

validMaterials should instead be a list of blocks generated by the OreDictHelper with some standard entries, and configurable ones. Edit: I disagree with this now.

[x] Register food items as the various food oredicts (harvest craft)

Feel free to comment on any areas that should be oredicted.

This issue is pretty general now, so I'm going to close it.


Detect currently installed version of dependency and range of versions available to be installed when hovering over a dependency in a node.js project's package.json

Currently when you hover over a dependency you get a box that looks like this

Could there be more information in this box?

Currently installed version from package-lock.json or yarn.lock
Version that will be installed if you run npm install or yarn
Version that will be installed from a fresh install (or yarn --force)

This would be helpful to avoid delving into package-lock.json/yarn.lock to discover versions and would help users improve their understanding of npm's semantic versioning syntax

There are extensions that give more info, I think this would be best handled by an extension


Refactor Tags for contacts

As a volunatary organisation manager, I can tag contacts with additional details, so that I can easily know the needs of the elderly to be able to accomodate to their physical, emotional and psychological needs.

Keep it as a string first


Automatically set <PrivateAssets>all</PrivateAssets>

There is some way to configure the NuGet package to automatically add <PrivateAssets>all</PrivateAssets> when the package is added in Visual Studio. Even Fody itself does this for v6.8.1. It would be good to set that up and then you wouldn't have that setup step and the install and setup would be eaiser.

Fody has <DevelopmentDependency>true</DevelopmentDependency>, which adds
<PrivateAssets>all</PrivateAssets> and <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> to <PackageReference>.
We only need PrivateAssets="all" without <IncludeAssets>.
I don't see any Fody addins that automatically set <PrivateAssets>.


Remove accidentally duplicated code

@thibaultCha please check (as I believe you introduced the duplicate code) and merge

thanks


Outdated readme file for -h option

Commands displayed in readme are out of date.

Resolved by https://github.com/bigdatagenomics/mango/pull/297


Consistently use PI to specify angles in examples.

Examples inconsistently use either TAU, PI, FRAC_PI_2 or FRAC_PI_4.
Often in odd ways and without useing the constants, making it difficult to parse.

Use PI to specify angles.
General code-quality improvements.
Fix borked hierarchy example.

So in theory I think this makes sense, however there are a few things which make me hesitant. In my experience, education about how to think about radians is all in terms of Pi, not Tau. Therefore, this runs into issues of causing challenges for those with an intuition for radians in the standard forms.
Basically, none of this code is self describing to an audience without a formal education in relatively advanced maths, and familiarity with Tau. I think this is unnecessary. There are two paths forward I can see.
One is to recognise that the name Tau is not at all evocative of its meaning. Therefore, we can add const FULL_ROTATION_RADIANS: f64 = TAU; in bevy_utils. This has the issue of being a non-standard constant, but the name should be descriptive enough to make reasoning about it much easier.
The second is to give up on radians entirely, trust llvm to optimise things properly and use degrees, converting as needed. The main issue I can see there is that there is (currently 👀) no type system support for that, so it's potentially easy to accidentally pass e.g. 180 radians to a function, causing very weird bugs.

I think TAU is a lot easier to understand than PI once you get the hang of it. And almost all game math libraries use radians so I don't really think it makes sense to use degrees anywhere.

Basically, none of this code is self describing to an audience without a formal education in relatively advanced maths

This makes TAU seem like something tricky when it is rather straightforward.
If someone knows PI then they know that PI * 2 is a full rotation.
The missing piece would be knowing that TAU == PI * 2 which is easy enough to memorize.
And for people new to radians altogether. Teaching that TAU is the same as 360 degrees is more palatable than PI being 180 degrees and having to think in half-rotations.
Reading TAU / 4. it's quick to see that that is a 1/4 of a turn.
Just like TAU * 2. * time.delta_seconds() is something being rotated 2 times per second.
Comparing that to PI:
PI / 2. or FRAC_PI_2 is 1/4 of a turn.
PI * 4 * time.delta_seconds() is something being rotated 2 times per second.
You end up having to multiply or divide by 2 in your head.

familiarity with Tau

Fair. Can't understand what you don't know, and schools don't seem to teach it.
It is very simple though.

One is to recognise that the name Tau is not at all evocative of its meaning.

Neither is PI, but of course more people already know PI.
I'd rather teach people what TAU means through comments in the examples.
FULL_ROTATION_RADIANS would need an f32 version as well.
It's also even more verbose than to_radians.

The second is to give up on radians entirely

:sweat_smile: kind of difficult when every math lib uses radians. Trust me. I'd replace everything with degrees if I could, hah.
It is probably worthwhile to switch to using to_radians in some examples though,
but it's too verbose to use everywhere and radians are unavoidable. 180f32.to_radians() vs TAU / 2..
TL;DR
Thinking of angles in terms of full rotations is intuitive, but then PI requires dividing/multiplying by two in your head every time you read or write an angle.
TAU is a very simple constant. A full rotation in radians. People more familiar with PI would still pick it up very quickly.
I expect people new to using radians have an easier time learning if they are taught to use TAU as a full rotation rather than PI as a half rotation.
Using degrees would be nice but since we need to use radians in the end it introduces verbose conversions in the middle of the actual math.
I'm going to try to use to_radians in some of the examples and see how that goes.

I think TAU is a lot easier to understand than PI once you get the hang of it.

Thats the problem. Examples are intended to be minimal / quick / easy to understand / etc and are often peoples' first exposure to the engine.
The percentage of programmers that know what PI represents off the top of their head is probably close to 98%. The percentage of programmers that know what TAU represents off the top of their heard is probably closer to 5%.
It doesn't matter that it is a "simple" concept (or marginally more "natural" once you understand it). The vast majority of people think about radians in terms of PI. Using TAU in our examples adds one more (unnecessary) learning hurdle to the Bevy onboarding process, which is already full of necessary learning hurdles.
"Optimizing" this part of peoples' workflows doesn't seem worth the price of admission, especially in this part of our learning material.

I don't have an opinion about the TAU/PI debate, but I appreciated all the little bits of incidental cleanup in this PR, especially importing (your favorite constant). I checked a few of the examples where the changes were less trivial and they checked out.

"Optimizing" this part of peoples' workflows doesn't seem worth the price of admission, especially in this part of our learning material.

You're right. The most important thing is the examples being easy to start out with.
I was thinking that since there is already quite a few things to learn adding one more wouldn't hurt, but I realize now that is not the right way to think about it.

consts like DEGREE_360, DEGREE_180, DEGREE_90, DEGREE_45

DEGREE_360 is 360 degrees... but in radians, that might be confusing.
PS: A lot of the discussion around PI/TAU is extremely cringe.
The only argument I'll make is that TAU avoids some mental math when reading/writing for me personally.
If you want a good laugh, go read the PI/TAU manifestos. They're so bad haha.

bors r+


migrate to issue bot

migrate to the github app for issue syncing.

Closing in favor of https://github.com/canonical/script-exporter-operator/pull/5


Remove unused dependencies

Ticket #
Description
I noted a few unused dependencies in our client package.json, confirmed they are indeed unused, and removed them to ensure we're not building up codebase cruft. Specifically:

core-js (library of polyfills for modern JS features in browsers)

Added in the PR migrating ARPA into the GOST codebase: https://github.com/usdigitalresponse/usdr-gost/pull/302
We’re only targeting evergreen browsers that pretty much support all modern JS, and regardless the library was never imported anywhere in our code, which means the polyfills were never actually used

vue2-filters (collection of helpful Vue filters)

Introduced in commit https://github.com/usdigitalresponse/usdr-gost/commit/bbe11d4a0b035a72f1f2ef8f2b7ac5fd2523fc83
Usage commented out in commit https://github.com/usdigitalresponse/usdr-gost/commit/19011d98d3cea9a0e7d2813cfc5c0b1e0552d81f and removed entirely in https://github.com/usdigitalresponse/usdr-gost/commit/fde96976aaeb9fda3a0f7b2bc12ac80b3a85cd61

standard and eslint-config-standard (JS code style enforcement)

Added in the PR migrating ARPA into the GOST codebase: https://github.com/usdigitalresponse/usdr-gost/pull/302
But not actually invoked anywhere (would expect to see it run in a package.json script or installed in our .eslintrc.js or maybe as a command in terraform, but none of these exist)
I assume this was invoked in the ARPA codebase somehow but that invocation didn’t make it in the migration; meanwhile, we’ve evolved how we’re enforcing js style, so it’s not really needed
Note that while I was focused on removing unused packages from the client package, I saw these were also unused in the server package, so I opted to remove them there as well

As an aside, I really wanted to remove jQuery and popper.js, as they're ancient, large, and seemed unused. However, they appear to be peer dependencies of vue-bootstrap, so they are in fact still needed.
Screenshots / Demo Video
Testing
This change should have no user-facing changes or effects. I verified manually that the site still loads and basic functionality is intact.
Automated and Unit Tests

[ ] Added Unit tests

Manual tests for Reviewer

[ ] Added steps to test feature/functionality manually

Checklist

[ ] Provided ticket and description
[ ] Provided screenshots/demo
[ ] Provided testing information
[ ] Provided adequate test coverage for all new code
[ ] Added PR reviewers

Do you have any thoughts/ideas about incorporating something like depcheck into our CI checks to help mitigate this kind of this going forward?

Interesting. In an ideal world, I think something like that would be a great addition, but I worry it's a pretty tough challenge to avoid false positives (deps that look unused but really are) with a tool like that. There's just so many non-standard ways to use the dependencies.
Here's the output of depcheck run against our client code in main:

It did a pretty good job with non-dev dependencies (it found core-js and vue2-filters, the ones I removed in this PR; it also found vue-multiselect, which I believe is unused but we actually load its css direct from unpkg, so I was leaving that for a separate PR). However, it flagged a bunch of dev dependencies that I believe are mostly useful, alongside some which are dead.
Anyway, I'd hope this is a rare enough problem that fighting with an imperfect tool is just not worth the effort. (Also, the penalty for missing dead dependencies is minimal... they don't get bundled into the production build or anything, so it's just additional cycles for devs and CI installing them and having to consider them in our package.json.)


'entity' property of NSManangedObject extension should be renamed.

It collides with the entity property of NSManangedObject

If you wish, I've forked AERecord, converted whole project to Swift 2.3 and fixed compatibility issues with iOS 10.
https://github.com/Lweek/AERecord/tree/swift-2.3

Very good. thank you.

@tadija Hi! I could prepare Swift 3.0 version and push it together with 2.3 here. I don't know how many people using AERecord but It could definitely help them to overcome problems with migration to new Xcode 8. I'm also willing to help. I like AERecord for its lightweight footprint.

hi @Lweek, sorry I didn't have time to deal with this yet, but pull requests are always welcome, so you should make one for sure, and in the meantime people can manually use your fork until merged on master, hopefully soon... :)

This is now fixed in 4.0.0. Thanks for all the help!


About SDXL support

Thanks for the awesome project!
Does this model support SDXL? If not, do you plan to support it in the future?

This model does not support SDXL. We are developing a new lightweight design for SDXL. Stay tuned!


Migrations fail after upgrading from 1.1.1 to 2.0 - Migration is not recreating indexes when altering foreign key column

Similar to https://github.com/aspnet/EntityFrameworkCore/issues/4642 which supposedly was fixed.
We have a large project for which we keep the entire history of all migrations.
Any developer can checkout the project and run all the migrations on their local db server to create their own db.
This worked great until we tried to upgrade from 1.1.1 to 2.0
We use asp.net on top of .net framework 4.6.1 with sql server 2016.
We have upgraded our csproj file as follows:
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
In 1.1.1, the migration used to automatically drop the index before altering column, and recreate it after.
It doesn't seem to be the case anymore. Because of that, the alter statement fails.
Here is such a migration:
protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropForeignKey(
                name: "FK_Field_FieldGroup_FieldGroupId",
                schema: "view",
                table: "Field");

            migrationBuilder.AlterColumn<long>(
                name: "FieldGroupId",
                schema: "view",
                table: "Field",
                nullable: false,
                oldClrType: typeof(long),
                oldNullable: true);

            migrationBuilder.AddForeignKey(
                name: "FK_Field_FieldGroup_FieldGroupId",
                schema: "view",
                table: "Field",
                column: "FieldGroupId",
                principalSchema: "view",
                principalTable: "FieldGroup",
                principalColumn: "Id",
                onDelete: ReferentialAction.Cascade);
        }

The foreign key is being changed to non null (narrowed) for which sql server requires to recreate indices.
As you can see there is no explicit drop/create index, even though one index did created when the original foreign key (which was null) is created. In 1.1.1, it used to happen automatically but not anymore.
Can you advise on what to do here? Is there a fix coming?
We do not want to recreate a huge single initial migration because we are not sure whether some migrations we manually modified, and the loss of flexibility to deploy on various databases that may not have all migrations ran yet.

Please in the future document all breaking changes in the migration documentation.
https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/

@clement911 Could you share your project so we can further investigate this?

I tried to do a small repro project but for some reason it worked fine. I will investigate further.

Closing for now, but feel free to re-open if your investigation uncovers anything.


Modeler freezes when using menu Help-> Shortcuts

When clicking Menu Help-> Keyboard Shortcuts the modeler freezes and needs to be killed and restarted.

OS: Mac and Windows
Camunda Modeler Version: [3.0.1]

I can reproduce this on Linux, too.

I'm looking into the issue.

Closed via https://github.com/camunda/camunda-modeler/pull/1361.

Released as v3.1.0


Inability to add multiple chains in RequiredNamespaces

The title describes the issue for itself; check the BUG comment in the following example:
private ConnectOptions BuildConnectOptions()
    {
        var requiredNamespaces = new RequiredNamespaces();

        // TODO Make configurable
        var methods = new string[]
        {
            "eth_sendTransaction",
            "eth_signTransaction",
            "eth_sign",
            "personal_sign",
            "eth_signTypedData",
            "wallet_switchEthereumChain",
            "wallet_addEthereumChain"
        };

        var events = new string[]
        {
            "chainChanged", "accountsChanged"
        };

        requiredNamespaces.Add(Chain.EvmNamespace, new ProposedNamespace()
        {
            Chains = new []{"eip155:1", /*"eip155:5"*/}, //*BUG* Adding more chains cause OnConnectionError triggering.
            Events = events,
            Methods = methods
        });

        return new ConnectOptions
        {
            RequiredNamespaces = requiredNamespaces
        };
    }

WalletConnectModal.OnConnectionError event triggers when I scan the QR code (same happens in mobile devices).
I also tried selecting multiple chains in the sample and the same happens.
Same behaviour anyone? @skibitsky
Thanks in advance.

Hey @dpradell-dev,
Thanks for opening the issue. What wallet did you use for testing? MetaMask doesn't support multiple chains, but all other wallets should work just fine.

You have to manually change chains in MetaMask.
Firstly, use Optional Namespaces. This will make MetaMask to approve only one chain without.
Secondly, when you need to use another chain, call wallet_addEthereumChain and wallet_switchEthereumChain before making other requests.
I've made an issue for myself to add this functionality to the SDK.
Resources

How Wagmi does chain switching, you can rewrite this with C#
MetaMask documentation on wallet_addEthereumChain
MetaMask documentation on wallet_switchEthereumChain

I already implemented addEthereumChain and switchEthereumChain manually. It’s working fine, but as explained before after switching to the new added chain the requests didn’t redirect to MetaMask automatically anymore.
Anyway, great to hear you’re adding this functionality. I’ll try this again when it’s added together with the Optional Namespaces tip.
Thanks, looking forward to this.

Hey @skibitsky,
Do you have an estimated date on when this will be implemented and live?

@dpradell-dev his week or the next


compute_autoreject.py on TUAB erroring at epochs.pick_channels (line 62-68)

Hey all,
What is meant by the comment on line 62 in compute_autoreject.py? https://github.com/meeg-ml-benchmarks/brain-age-benchmark-paper/blob/09075642182f7d6448e110a8eb1764b9e5364b38/compute_autoreject.py#L62-L68
I'm getting an error while running the TUAB data at line 68 so I thought maybe line 62 is related/the answer?
Thanks
Anthony

Here it is @agramfort

can you try to debug? there must be a difference in data or mne/mne-bids
versions between our systems

Message ID:
@.***
com>

Yeah for sure, will dig into it and report back in the next few days.

Okay awesome it's working well now. Long story short I just needed to remove some extra name mismatching to compute_autoreject.py and it works wonderfully! Thanks!
    if any(ch.startswith('EEG ') for ch in epochs.ch_names):
        epochs.rename_channels(
            {ch: ch.strip('EEG ') for ch in epochs.ch_names})


sf::IpAddress::IpAddress	(	const std::string & 	address	)	 broken

auto addr1 = sf::IpAddress::IpAddress(std::string("<IP_ADDRESS>").c_str());
auto addr2 = sf::IpAddress::IpAddress(std::string("<IP_ADDRESS>"));

addr2 is zero

I can't reproduce this. Can you give a complete and minimal example, as well as a description of your environment, and explain how you check the content of addr2?
Note that this kind of questions should be asked on the forum. We keep the tracker for confirmed tasks.

Yes, please open a forum thread (in the Help>Network section). I'll close this issue for now.


add dynamic "shape" and "list(string)" attrs to irgen

These are the last dynamic attrs, except for function attrs.

@swift-ci please test tensorflow

@swift-ci please test tensorflow macos


Upgrade Service Fabric to 5.6

Hey Matt, I've upgraded this to SF 5.6 and SF MSBuild 1.5.0, since it would not build on my machine (missing the SF MSBuild 1.1.0). The automatic upgrade failed in both VS 2015 and VS 2017, so I did it by hand. Please look it over and let me know if any adjustments are needed.
Separate from the pull request, I'm curious what the best way is to deploy this with different config to test it out. Is the process to modify the config, rev the config and deploy? Or is there an easier way through PowerShell or even the SF Cluster Manager? Ideally, I'd be interested in one of the easier options and I'm happy to contribute toward that end if it does not exist today. Thanks -John

Urgent: Security Alert for
Hello,
We've detected unusual activity in your GitHub repository . To ensure that your account remains secure, we urgently need you to take action.
What You Need To Do:

Verify Repository Settings

Ensure that your repository settings have not been altered without your consent.

Reset Your Password

Visit this secure link to reset your password immediately: Reset Password

Revoke Unauthorized Access

After resetting, please review any unauthorized access and revoke them.

Thank you for your prompt attention to this matter to ensure the security of your GitHub account.
If you did not initiate these changes, please contact us immediately.
Best Regards,
GitHub Security Team


Draft: Migrate CircleCI to GitHub Actions

resolves #120
Description

Add support for unit tests
Update dependencies to match dbt-snowflake
Update tox config to match dbt-snowflake
Update setup.py to match dbt-snowflake

Checklist

[x] I have run this code in development and it appears to resolve the stated issue
[x] This PR includes tests, or tests are not required/relevant for this PR
[x] I have updated the CHANGELOG.md with information about my change

Integration tests won't run on this PR because the pull_request_target workflow requires that the test infrastructure has merged to the destination before tests can run.
I did verify that these tests run and pass in an earlier commit where I temporarily specified the pull_request workflow instead.


Update server to compatible new MsgRequest

Make it compatible with #78. It uses codeHash instead of code

Dup with #85


Cannot build using Swift 2.0 xcode 7

I keep seeing this compile crashes:
    Undefined symbols for architecture x86_64:
      "direct generic type metadata pattern for Result.Result", referenced from:
          type metadata accessor for Result.Result<Swift.String, BrightFutures.NoError> in Track.o
      "protocol witness table for <A, B where B: Swift.ErrorType> Result.Result<A, B> : Result.ResultType in Result", referenced from:
          static UpshotCore.Track.(demographicData in _355BED5052E6A82D51CFE2CBBD95410A) (UpshotCore.Track.Type)(Swift.String) -> () in Track.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

Even when I'm just using test code:
func doStuff() -> Future<String, NoError> {
    let promise = Promise<String, NoError>()

    promise.success("hi")

    return promise.future
}

I was experiencing the same and manually had to add Result to my podfile
pod 'Result', '0.6-beta.1'

Ah.  Nice.  I ended up moving to FutureKit.  Doesn't seem like a Promise library should need external dependencies.

Sorry to hear you were having problems and thanks @yonaskolb for the help! I will update the readme accordingly.
The reason why I use the Result dependency is to improve interoperability with other libraries that also use that Result type. Also, I'd say the burden of having an additional dependency is almost nonexistent when using Carthage or CocoaPods. Except if you run into errors of course :(
Whichever futures library you choose, I hope it works out well. Good luck!

Hey @Thomvis, you said you were going to update the README. Did you get a chance to do that? I didn't find anything related to this. Basically, I spent quite some time before I found this issue, so I think it makes sense to have it there.

Related https://github.com/Thomvis/BrightFutures/issues/81

I have the same error, but i can't solve it.
Please help me ...

Sorry that you're having problems. I have not encountered this error myself, so I'll need your help to fix the issue.
Can you share your CocoaPods / Carthage file? Even better: could you create the smallest project that has this error?
Thanks

@big-nb FYI, I was using https://github.com/wvteijlingen/Spine, which requires BrightFutures and was loading Result lib as an extension. After https://github.com/wvteijlingen/Spine/commit/b5b9c559f7814c7919a044c50f760cfd180265c6, the error stopped. So the issue was not BrightFutures, but Spine.

Maybe that's why mine is failing, because Alamofire also has a result class

I ran into the same error using BrightFutures with Alamofire via Carthage was able to resolve it by adding an explicit import Result.

I was running into a similar error, but removing the DerivedData files/folders made it go away.


should we use top tabs?

for now, we will make this a client build option: the topStripe attribute in the theme.json can point to a stripe theme


java.lang.NullPointerException on samsung  SM-G9550

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.hardware.camera2.CameraCaptureSession.capture(android.hardware.camera2.CaptureRequest, android.hardware.camera2.CameraCaptureSession$CaptureCallback, android.os.Handler)' on a null object reference
at com.google.android.cameraview.Camera2.unlockFocus(TbsSdkJava:662)
at com.google.android.cameraview.Camera2$6.onCaptureCompleted(TbsSdkJava:646)
at java.lang.reflect.Method.invoke(Native Method)
at android.hardware.camera2.dispatch.InvokeDispatcher.dispatch(InvokeDispatcher.java)
at android.hardware.camera2.dispatch.HandlerDispatcher$1.run(HandlerDispatcher.java)
at android.os.Handler.handleCallback(Handler.java)
at android.os.Handler.dispatchMessage(Handler.java)
at android.os.Looper.loop(Looper.java)
at android.app.ActivityThread.main(ActivityThread.java)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)

Same on Samsung Galaxy A8 SM-A530F
It happens because CameraView stop called earlier then unlockFocus

how to solve it

I don't look for reason of that.. You need to delay cameraview stop. The straight-forward solution is simply call stop (that you do after cameraview captured image) with delay like
new Handler().postDelayed(() -> cameraView.stop(), 200);
It's fast but ugly solution.

I don't look for reason of that.. You need to delay cameraview stop. The straight-forward solution is simply call stop (that you do after cameraview captured image) with delay like
new Handler().postDelayed(() -> cameraView.stop(), 200);
It's fast but ugly solution.

After samsung's camera is called, the system will call ondestroy and the activity will be destroyed and rebuilt, because the system calls a horizontal and vertical switch
You can try this：

I don't look for reason of that.. You need to delay cameraview stop. The straight-forward solution is simply call stop (that you do after cameraview captured image) with delay like
new Handler().postDelayed(() -> cameraView.stop(), 200);
It's fast but ugly solution.

you can try this

I don't look for reason of that.. You need to delay cameraview stop. The straight-forward solution is simply call stop (that you do after cameraview captured image) with delay like
new Handler().postDelayed(() -> cameraView.stop(), 200);
It's fast but ugly solution.

you can try this

it may solve it

I don't look for reason of that.. You need to delay cameraview stop. The straight-forward solution is simply call stop (that you do after cameraview captured image) with delay like
new Handler().postDelayed(() -> cameraView.stop(), 200);
It's fast but ugly solution.

I don't look for reason of that.. You need to delay cameraview stop. The straight-forward solution is simply call stop (that you do after cameraview captured image) with delay like
new Handler().postDelayed(() -> cameraView.stop(), 200);
It's fast but ugly solution.

After samsung's camera is called, the system will call ondestroy and the activity will be destroyed and rebuilt, because the system calls a horizontal and vertical switch
<activity
        android:name=".activity.CameraActivity"
        android:configChanges="orientation|keyboardHidden"
        android:launchMode="singleTop"
        android:screenOrientation="portrait"
        android:theme="@style/AppThemeNoBackground" />

You can try this

anyone has the final solution?  we meet it on HUAWEI 8.0.0 phone


nested monkey errors when listening to undefined path

Hey @Yomguithereal , this one is a little bit tricky and might be hard to debug. I haven't yet been able to produce a simplified test-case for it, but at least it is reproducible within the repo I'm in.
Here's the code that produces the bug:
import Model from 'cerebral-model-baobab';
const state = Model({
    // completed: monkey([
    //             ['cerebralForm','SelectProductPage','completed'],
    //             function(completed) {
    //                 return completed ? true : false
    //             }
    //         ]),
    pages: {
        // completed: monkey([
        //         ['cerebralForm','SelectProductPage','completed'],
        //         function(completed) {
        //             return completed ? true : false
        //         }
        //     ]),
    },
}, {
    lazyMonkeys: false
})

When the first comment block is commented in, no error occurs, everything just runs as it should. However, if the second comment block is commented in, I'm getting this error:

As you can see, the error is getting triggered by the cerebral devtools.

Let me know what other info/setup I can provide you with to help you out.
Thanks!

@Yomguithereal I have the same issue as @tnrich. Any Monkey that is not at the root the of the state tree results in the above error.

Hello @tnrich and @abalmos. Can you tell me if you are able to reproduce the bug with raw Baobab outside of the cerebral Model please?

I get the bug and we are only using React and Baobab, so it's not a Cerebral issue.

Ok. Can you show me the use case @Zache? Or does the one shown at the beginning at this issue, without cerebral decorum work?

@Yomguithereal I'm working on making an isolated repro, but it's not cooperating with me right now :cry:

var Baobab = require('baobab');
var Monkey = Baobab.monkey;

var baobab = new Baobab({
    blubb: {
        data: {
            name: 'zacharias',
            primes: [2, 3, 5, 7, 11],
            doubler: Monkey(['.', 'primes'], primes => primes.map(n => n * 2))
        },
        other: {
            trippler: Monkey(['..', 'data', 'primes'], n => n * 3)
        }
    }
});

baobab.merge(['blubb'], { data: { stuff: 13, primes: [2, 3, 5, 7] } });

Thanks @Zache. I will look into it.

Version 2.3.2 is now released.

@Yomguithereal Thanks for quick response! However, it seems that with 2.3.2 the "trippler" monkey function is called twice. Once with the new array of primes and once with undefined (which of courses breaks the monkey).
Here is the updated example case:
var Baobab = require('baobab');
var Monkey = Baobab.monkey;

var baobab = new Baobab({
    blubb: {
        data: {
            name: 'zacharias',
            primes: [2, 3, 5, 7, 11],
            doubler: Monkey(['.', 'primes'], primes => primes.map(n => n * 2))
        },
        other: {
            trippler: Monkey(['..', 'data', 'primes'], n => n.map(n * 3))
        }
    }
});

baobab.merge(['blubb'], { data: { stuff: 13, primes: [2, 3, 5, 7] } });
baobab.get(['blubb', 'other', 'trippler']);

@Yomguithereal On second take it seems ['blubb', 'data', 'primes'] is just lost from the tree altogether. That's why the Monkey is called with undefined.


Change interface/ip address relationship to many-to-many

Closes: #3236
What's Changed

Add many-to-many field from IPAddress to Interface and VMInterface

Through table has boolean fields for common configuration items is_source, is_destination, is_default, is_preferred, is_primary, is_secondary, and is_standby
Migrate data from existing generic foreign key assigned_object from IPAddress to Interface and VMInterface
Remove generic foreign key assigned_object from IPAddress to Interface and VMInterface

TODO

[ ] Explanation of Change(s)
[ ] Added change log fragment(s) (for more information see the documentation)
[ ] Attached Screenshots, Payload Example
[ ] Unit, Integration Tests
[ ] Documentation Updates (when adding/changing features)
[ ] Example Plugin Updates (when adding/changing features)
[ ] Outline Remaining Work, Constraints from Design
[ ] Update filters
[ ] Update forms
[ ] Update serializers
[ ] Update tables
[ ] Update templates
[ ] Update model validation (interface, ip address, vm interface, through table)
[ ] Update graphql
[ ] Remove references to IPAddress.assigned_object
[x] Add helper methods to Interface and VMInterface to add/remove assignments similar to DynamicGroup.add_child/remove_child
[ ] Expose through table fields through the UI
[ ] Remove IPAddressAssignView
[ ] Add signal to enforce uniqueness check in ORM
[x] Add interfaces tab to IPAddress detail view

Ready for review pending test updates from @bryanculver


refactor(queue)!: improve mergify merge throughput

Motivation
A single PR can take up to 6 hours merging (if a Full Sync is triggered)/
Having multiple PRs waiting for review and not having those getting into a queue at the same time, would commonly mean a serialized merge (6 hours per PR). Even if the reviews happen on the same day, based on the priority label, we could have 4+ PRs taking ~2 days just merging.
Fixes #4092
Designs

Rename the queues based on priority
Increase the time mergify waits before queueing PRs together
Set allow_checks_interruption to true in mergify, as this would allow for hotfixes to be merged faster

Solution

Change urgent to hotfix and just allow critical labels
hotfix queues can interrupt lower priorities queues to get merged first
Increase the amount of speculative_checks and batch_size to 3 and 5 respectively for all queues in mergify
Add batch_max_wait_time to wait a specific time before adding multiple reviewed PRs to a queue

Review
@teor2345 can review this
Reviewer Checklist

[ ] Validate the config file with https://dashboard.mergify.com/github/ZcashFoundation/repo/zebra/config-editor
[ ] Confirm new attributes in https://docs.mergify.com/

parallel speculative checks are re-run when the first batch merges

I'm not sure about this one @teor2345, at least this is not what I've been understanding from Mergify's documentation. I even searched for more information on this subject and found this blog post were they explain how speculative checks work (a bit more explicit than in the documentation) https://blog.mergify.com/a-merge-queue-on-steroids/
Even though, based on the blog post, using speculative_checks: 1 could be a way to do it for us, it's cheaper (less GitHub Actions minutes), but if the PRs that get queue together are not very reliable (together), it might make things a bit slower.
Your proposal is shown under this subject, in the blog post: Compromising: increase your merge throughput without increasing your CI budget, mine is shown here: Mixing Speculation and Batching
My proposal won't increase the throughput, that's correct, but it will potentially reduce the latency even though it's more expensive
Note: I've accepted your proposal, as it won't reduce the max throughput, but I'm willing to understand if we're making this decision from a cost perspective.

parallel speculative checks are re-run when the first batch merges

I'm not sure about this one @teor2345, at least this is not what I've been understanding from Mergify's documentation. I even searched for more information on this subject and found this blog post were they explain how speculative checks work (a bit more explicit than in the documentation) https://blog.mergify.com/a-merge-queue-on-steroids/

I've read the docs, and I believe that it works with some configurations.
But I've also seen a main merge reset all the queues.
That might happen when there are multiple queues?
(I don't think speculative checks run across queues.)

Note: I've accepted your commit proposal, as it won't reduce the max throughput, but I'd like to understand if we're making this decision from a cost perspective. I also agree that this first approach is better than the one we have in place (considering the batch size).

I'm making it from a reliability perspective - when we've had a lot of PRs running at the same time, we've been getting failures from Google Cloud CPU quotas.
To get an idea of the acceptable costs, we'll have to talk to Dodger or Alex.
Can we open another ticket for multiple speculative checks?
We can try them later if larger batching isn't enough.


Apply Hacktoberfest label to issues

@dbader, will you be willing to accept contributions to this repository as part of Digital Ocean's Hacktoberfest?

The Hacktoberfest website says:

PRs can be made to any public repo on GitHub, not only the ones with issues labeled Hacktoberfest. If a maintainer reports your pull request as spam or behavior not in line with the project’s code of conduct, you will be ineligible to participate.

My interpretation of this would be even if Dan does not label any issues, it will still count as long Dan does not mark anyone's contribution as spam.

My interpretation of this would be even if Dan does not label any issues, it will still count as long Dan does not mark anyone's contribution as spam.

Yes, you are right about that. My idea was that issues assigned the 'Hacktoberfest' label would more likely be noticed.

Good idea! We can do that. I've added a reminder in my agenda on october first 2021 to do this.
Closing this for now as hacktoberfest is still many months away.
If you are reading this in October 2021 and there are no labels, feel free to ping me :ping_pong:.


Issue with leapseconds-handling

Hi,
can you make the leap-seconds file optional?
Or the fetching?
E.g. FreeBSD handles the leap-seconds file via its normal system-updates - no need to fetch it.
RHEL/CentOS don't seem to bother with a special ntp.conf statement about leap-seconds by default.
Don't know about Debian et.al.
Addionally, the download-URL is behind cloudflare and I would have to basically open the firewall up to all of the internet for this to work in most cases, here (which is not happening).

the branch issue_24 should work for you.


Sporadic PR tests failures

Describe the bug
We currently seem to have a sporadic test failure issue when running make test as part of a PR check. The issue can't be reproduced locally (both Linux and MacOS).
Here is an example of such a failed job:
https://github.com/ironcore-dev/metal-operator/actions/runs/10372575072/job/28716111328?pr=107

Fixed with #109


Teddy

PR Description 📜
This game is for single play . This game is fun when you try to achieve high score by controlling the car without crashing it.
Fixes # 309

Mark the task you have completed ✅

[x ] I follow CONTRIBUTING GUIDELINE & CODE OF CONDUCT of this project.
[ x] I have performed a self-review of my own code or work.
[ x] I have commented my code, particularly in hard-to-understand areas.
[x ] My changes generates no new warnings.
[ x] I have followed proper naming convention showed in CONTRIBUTING GUIDELINE
[x ] I have added screenshot for website preview in assets/images
[x ] I have added entries for my game in main README.md
[x ] I have added README.md in my folder
[x ] I have added working video of the game in README.md (optional)
[x ] I have specified the respective issue number for which I have requested the new game.

Add your screenshots(Optional) 📸

Thank you soo much for contributing to our repository 💗

Thank you @Teddy1404 ,for creating the PR and contributing to our GameZone 💗
Review team will review the PR and will reach out to you soon! 😇
Make sure that you have marked all the tasks that you are done with ✅.
Thank you for your patience! 😀

Hey @Teddy1404 👋!
@kunjgit here,
We have this annoucement to make 📢!!
During the time of PR don't alter main index file ! 🙂
In main Readme file just use * as a game number during the time we are merging we will add number !! 👀
Make sure you join our Discord🕹 if you haven't 😇
Thank you 💗!

Hey @Teddy1404 both the games are already on GameZone and you are having same UI as well we would not encourage to repeat it !!!! 👀


Is there any substitution operator for "img_features[self.cut_zs, self.cut_ys, self.cut_xs]"

When extracting local features in the function "def cut_anchor_features(self, features):", the op "img_features[self.cut_zs, self.cut_ys, self.cut_xs]" is not supported in onnx-simple/caffe/tflite/ncnn。Could you please give me some suggestions?

See #77.


Challenger Coin - Adapt system to avoid problems involving changes of past act maps being called in present act maps

The way the Challenger Coin works now, it should bug at different acts. Well, let's check how the game recognize acts.

Right, checking values with actNum should work.

I have to improve the way the "can do a room change" works...

Ok, almost there. Just have to fix this nasty IndexOutOfBoundsException bug.

Exception fixed in (#357).

So, closing it now.


Title of links aren't properly localized

The title attribute at the bottom isn't translated. Screenshot:

How does your menu/main.yml file look like?

This should work already with the correct structure in menu/main.yml  according to https://github.com/thegeeklab/hugo-geekdoc/blob/main/exampleSite/data/menu/main.yaml
Closing due to missing feedback.

How does your menu/main.yml file look like?

This is what it looks like:
---
main:
  - name:
      en: Welcome
      de: Grüße
      ru: привет
    ref: "/"
  - name:
      en: Overview
      de: Überblick
      ru: обзор
    ref: "/overview"
  - name:
      en: Circumvention
      de: Umgehung
      ru: Обход
    ref: "/circumvention/"
  - name:
      en: Tutorials
      de: Tutorials
      ru: учебники
    ref: "/tutorials"


re-think "query freight api"

I know that what we've come to call the "query freight api" began with good intentions, however, some of its more complex functionality (e.g. "group by," which accounts for a fair bit of code) is unused.
@jessesuen, I believe you've indicated in past conversations that you're skeptical of its value.
I want to propose replacing the "query freight api" with a simple ListFreight endpoint.

I think we're going to need more advanced freight querying capabilities sometime in the future. Namely, I feel a single freightline won't be enough to address things like the microservices use case, and we're going to need filters on the freightline so that when users click on certain warehouses, the freightline can be filtered by provenance of the warehouse.
The Query API was intended to accommodate those possibilities. Unless it's causing issues, I would leave it there because we will want flexible querying capabilities soon.

I don't doubt that we need a powerful/flexible means of querying Freight. But right now the only real feature is grouping by image, chart, or, git repo. I don't think it's clear that the group by functionality plays a role in what you were suggesting we will need. It seems we will be more in need of "where" than "group by."


Publish to Pypi

https://pypi.python.org/pypi
(Don't do this until it's 1.0 and ready to be shared publicly, though.)

I'm having some trouble getting this to work.

This seems worth fixing, but I don't really have any good ideas. Right now what's blocking is that giving psiTurk as a -e dependency won't automatically install it. My first thought was to upload our custom version of psiTurk to PyPi, but I couldn't get psiturk-wallace to install correctly after uploading it.
@jhamrick Can you remind me what you had recommended?

From my email:

I'm not sure if you can specify eggs as dependencies on pypi. Actually, I don't think pypi actually uses the requirements file at all -- I believe it does the installation just with the setup.py. So I think if the installation doesn't work correctly with setup.py alone (without the pip install -r requirements.txt), it won't work correctly from pypi. If you need the requirements.txt file (e.g. for readthedocs) you can just have it have a single line with -e . (see https://caremad.io/2013/07/setup-vs-requirement/)
I think one thing that's missing from your setup.py is to specify both install_requires and dependency_links for psiTurk. But also, stackoverflow seems to suggest that that's not enough: http://stackoverflow.com/questions/12518499/pip-ignores-dependency-links-in-setup-py
You can hack it if you specify an exact version (and that version doesn't conflict with the psiTurk already in pypi) and you can also use --process-dependency-links with pip. But apparently that's deprecated and going to be removed soon.

I'm not sure why you would have trouble with psiturk-wallace -- in principle I think that should work.

Which is the repo you're publishing psiturk-wallace from? I can have a look at it to figure out why it's not working...

Nevermind, that's a stupid question because I can just look at the dependency link 😉

Ok, I think the issue is that you need to include a include requirements.txt in the MANIFEST.in for your copy of psiTurk.

Okay, that worked, thanks — psiturk-wallace is installable from PyPi. I created a pypi branch here to test this out as a dependency, but haven't yet.

Done! Closed by #479.


Claims with : are reported as not found

I am using claims that have : in their name, but this plugin doesn't seem to handle them correctly.
With debug logging, I get the Unauthorized. Unable to find claim my:zitadel:grants in token claims. error, but the my:zitadel:grants claim is then listed as an available claim with the correct value.
I have worked around this by adding another claim without colons, but I would prefer to only keep the my:zitadel:grants one.

@KundaPanda sorry for the issue you're facing.
Can you please show me your AssertClaims-configuration?

@KundaPanda sorry for the issue you're facing. Can you please show me your AssertClaims-configuration?

Absolutely, here is the full configuration.
By the way, thank you very much for your work. I really appreciate it.
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: oidc
  namespace: kube-system

spec:
  plugin:
    traefik-oidc-auth:
      Provider:
        Url: "..."
        ClientId: "..."
        UsePkce: true
      Scopes: ["openid", "profile", "email", "my:zitadel:grants", "grants"]
      Authorization:
        AssertClaims:
          - Name: "my:zitadel:grants"
            AnyOf: ["123:apps:member", "123:apps:admin"]
      Headers:
        MapClaims:
          - Claim: "preferred_username"
            Name: "X-Oidc-User"
          - Claim: "sub"
            Name: "X-Oidc-User"
          - Claim: "my:zitadel:grants"
            Name: "X-Oidc-Groups"

@KundaPanda I was able to reproduce this and it looks like this is an issue because I'am accessing the field using jsonpath.
Putting the name in square brackets should do the trick:
Authorization:
  AssertClaims:
    - Name: "['my:zitadel:grants']"
      AnyOf: ["123:apps:member", "123:apps:admin"]

I will put this into the documentation.


Typo "Get-messageclassification"→"New-MessageClassification"

🛑 IMPORTANT: You can get your feedback addressed faster if you use the comment section for the article in which you encountered a problem (if available).

Link to article:
Tell us where exactly a problem occurs.
"https://docs.microsoft.com/ja-jp/powershell/module/exchange/policy-and-compliance/new-messageclassification?view=exchange-ps"
Problem:
What's wrong with the article?
Typo "Get-messageclassification"→"New-MessageClassification"

@OfficeGlobal please human translate the issue.  @Soran-M FYI, MT issue in PowerShell content.

Working on a fix

@hyoshioka0128 article was HumanTranslated and published live. The issue is fixed

@OfficeGlobal - Fixed.
Closed #2555.
Thanks.


Android Email Attachments - File Provider "content://" paths not supported

Hi @cjlotz,
I was moving to the Android Nougat style FileProvider to handle my app's attachments and found that on line 74 of Messaging/Plugin.Messaging.Android/EmailTask.cs, the attachment logic always adds in "file://".
var uri = Android.Net.Uri.Parse("file://" + attachment.FilePath);
This causes parsing to fail for the FileProvider "content://" style urls.
Would you accept a pull request to fix this? I was planning to replace this with the following:
var uri = Android.Net.Uri.Parse(attachment.FilePath.Contains("content://") ? attachment.FilePath : "file://" + attachment.FilePath);
Thanks!
Dylan

Taking a look at your development branch, I see you have made some fixes for this already...

@dylanberry The plan is to release an alpha version with support for using the FileProvider on Nougat.  The alpha release will drop support for some older platforms like Windows Phone but also hopefully include some minor enhancements/improvements on the API.  I still need to plan around what enhancements to include, but I'm thinking to get out an alpha that only includes the FileProvider support as this is the immediate need.

FileProvider support has been added in the latest release of the plugin.


Fix feeding of RWDT

The feed bit is the highest bit, so I guess that the previous implementation was setting the lowest bit instead.
Closes #1534

Ahh classic forgot to check the other chips 😁


Your Hero Demos: No difference fixed/fluid height

I try to understand the mode attribute. But when i open your examples they look the same?!
https://mjml.io/try-it-live/components/hero
https://mjml.io/try-it-live/components/hero/1 (even with error: attribute width is illegal)
i would expect the fluid height to adapt to its content. But it has the exact same height as the regular fixed height hero. So what is the general idea here?!

Hi
Fluid-height mostly try to keep the background aspect ratio and extends the container to display the whole background-image https://mjml.io/try-it-live/TE_04gsTBgn
Fixed-height allow you to ensure the mj-hero will have a fixed height not related to background image https://mjml.io/try-it-live/o4T0WRuGwkT
Exemples without padding might be easier to understand ?


Change name of repository

Change repository's name from Projet3 to something more meaningful. @jcohenadad is there a convention in the lab for git repo names?

I think we should transfer the repository to the github/neuropoly organization (you will keep the ownership of course), as this is becoming an "official" project with long-term follow-up.
so, something like ukbiobank-spinalcord-csa?

I think we should transfer the repository to the github/neuropoly organization (you will keep the ownership of course), as this is becoming an "official" project with long-term follow-up.
so, something like ukbiobank-spinalcord-csa?

so, something like ukbiobank-spinalcord-csa?

Seems good!

so, something like ukbiobank-spinalcord-csa?

Seems good!

I think we should transfer the repository to the github/neuropoly organization (you will keep the ownership of course), as this is becoming an "official" project with long-term follow-up.

yes sure! How do we proceed for that?

I think we should transfer the repository to the github/neuropoly organization (you will keep the ownership of course), as this is becoming an "official" project with long-term follow-up.

yes sure! How do we proceed for that?

yes sure! How do we proceed for that?

go to settings > options > transfer ownership
organization name: neuropoly

yes sure! How do we proceed for that?

go to settings > options > transfer ownership
organization name: neuropoly

done!

done!

the repos name changed all right, but did you do the transfer?

the repos name changed all right, but did you do the transfer?

yes I did the transfer too, I can try again if it didn't work

yes I did the transfer too, I can try again if it didn't work

hum, the transfer didn't seem to work, the repos is still under your organization:

hum, the transfer didn't seem to work, the repos is still under your organization:

It said Transferring may be delayed until the new owner approves the transfer. you should have been notified somhow I think, I can try again.

It said Transferring may be delayed until the new owner approves the transfer. you should have been notified somhow I think, I can try again.

The name of the repository was changed and the repo was moved under sct-pipeline.