3d dimension but real matrix

I use Butterfly matrix when input size is like (128,256,64).
But due to the dimension, I can't use thie tensor....
How should I fix the code ?
Also As this website mentioned, (https://dawn.cs.stanford.edu/2019/06/13/butterfly/#compression)
I want to sample the pemutation matrix from butterfly matrices in order to take smoothness loss, but can't find the code

You can reshape the input to combine the first 2 dimensions before passing through the butterfly layer:
butterfly = Butterfly(64, 64)
b, m, n = x.shape
output = butterfly(x.reshape(-1, n)).reshape(x.shape)

Re: permutation code: we're in the process of cleaning up that code for release.

thanks! It very cool.....
Now I'm trying to train the permutated image whose number of blocks are 64 with Butterfly matrix + ResNet.
But if I only use one Butterfly(64, 64) layer, is it mean that the Butterfly(64, 64) will be permutation matrix ? (LIke Fig7.'s 4 red buttefly matrices?)
https://dawn.cs.stanford.edu/2019/06/13/butterfly/#compression
By the way, if you aren't mind, I want to use code of making permutation matrix which is made by Butterfly matrices

I'm not sure I understand what "number of blocks" mean.
Figure 7 contains multiple sparse matrices, each is called a butterfly factor. The product of those log_n butterfly factor is called a butterfly matrix. So Butterfly(64, 64) is a product of log 64 = 6 butterfly factors.
To capture a permutation matrix of size 64, you'll need a butterfly and the transpose of another butterfly:
torch.nn.Sequential(
    Butterfly(64, 64, bias=False, tied_weight=False, increasing_stride=False),
    Butterfly(64, 64, bias=False, tied_weight=False, increasing_stride=True)
)

For the code above, increasing_stride=False means it's a transpose of a butterfly, and increasing_stride=True means it's a butterfly matrix. The flag tied_weight should generally be set to False for increased expressivity. The default value of tied_weight=True is just for compatibility with the experiments in our ICML19 paper (https://arxiv.org/abs/1903.05895).
PS: I'll try to find the permutation code today or tomorrow. Hopefully that'll give you a better idea of how to implement permutation sampling with butterfly.

I tried to say "number of blocks" is like a number of puzzle pieces!
I understand the structure of the Butterfly matrix! thank you and sorry for taking your time...
Thank you for sharing the code, although I didn't fully understand the mathematical equations on the ICML19 paper (https://arxiv.org/abs/1903.05895), try to read the paper by confirming the code and understand these functions!!
Thank you very much!! because this paper may be applied to my project, It is very helpful m(_ )mm( )mm( )mm( _)m

To use a (soft) permutation matrix, you want a Butterfly matrix where each 2x2 block in the factors are constrained to be doubly stochastic (bullet 1 in the blog post). This version of the class accepts argument param='ds', param='logit', or param='ortho2', all of which represent doubly stochastic butterfly matrices. (The latter two options map the underlying parameter through the sigmoid or cos^2 function, respectively.)
Here's an example of experimental code which implements the ResNet with a butterfly layer in front.

Thank you for telling how to use this code!!
If I use PResNet for assuming that input is puzzle images and recover original state, is is adequate to set method='butterfly' in class  TensorPermutation(Permutation) and set param='ds', param='logit', or param='ortho2' in class ButterflyPermutation(Permutation)?

The latter is the most flexible way to create the latent doubly stochastic matrix.


g4dn - GameStream still unavailable after install

I've installed this script numerous times on a Win 2016 and 2019 g4dn instance in AWS Sydney region.  Each time the script completes successfully, however after logging into GeForce Experience, GameStream is still not available.  Steps take:

Launch instance with full network access to my home IP
Once launched, turn off Windows Firewall
Install Firefox
Install TightVNC Server
Login via VNC and launch this script in PowerShell admin
Yes to everything (Audio, GRID (which now works automatically after issue 4 resolve))
Allow reboots when requested
Relaunch script in Admin PowerShell via VNC after any reboot
Open GeForce Experience <IP_ADDRESS> and login via email
Navigate to Settings - No features are available, with the error on GameStream being that I don't meet the Desktop GPU requirement

While the script works well, and I've been using it to prep instances for use with Parsec, I CANNOT get GameStream to work on a g4dn instance with T4 GPU using this script.
Am I missing something, or is this an issue and is g4dn not actually supported?
Thanks :)

So I think I know what the issue is here, but just to confirm, on step 8 you meant running the shortcut created on the desktop, right? Anyway, since I doubt this is the issue, I looked up TightVNC and found out it's using Windows' mirror driver to render the desktop. This is a problem since GameStream only activates once GeForce Experience if there is a monitor attached to the NVIDIA GPU and this mirror driver creates a fake monitor in RAM that won't work. Using other solutions that use GDI or desktop capturing API such as AnyDesk or TeamViewer will probably fix your issue.

Hi,
I can confirm it works fine with g4dn on AWS. I skipped the installation of vcable and update the GPU driver though. I already have Parsec installed so sound is ok and I'm using the NVIDIA Gaming image (and didn't want to mess with the shipped driver).
I think you can close this issue.

@amaumene Thank you for the confirmation. I can't really attest to it working or not myself since I don't have a way to test AWS machines so I will leave the issue open just in case.

@amaumene Could you confirm the steps you are following? I tried using this on both the NVIDIA AWS Gaming Image win19 server and the base win 19 server. I'm unable to get the gamestream to show up as active.

Thanks for trying to solve our issue.
I confirm the GameStream service isn't started after the installation. I'm using NVIDIA AWS Gaming Image with g4dn.
I have tried with anydesk, vnc, rdp and even via steam (streaming wordpad and then reaching the desktop to run the installation script again).
Also I have used jamesstringerparsec's GPU update script as it was suggested by the script.
I have tried running nvstreamer.exe with the following command found in another issue here:
start /B "" /D "C:\Program Files\NVIDIA Corporation\NvContainer" "C:\Program Files\NVIDIA Corporation\NvStreamSrv\nvstreamer.exe"
Here are the results. It seems to start and stays opened. I can see the nvstreamer.exe process running. Still the GameStream service is not running and moonlight host tester and GFE say that GameStream is off:
Microsoft Windows [Version 10.0.17763.1158]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Users\Administrator>start /B "" /D "C:\Program Files\NVIDIA Corporation\NvContainer" "C:\Program Files\NVIDIA Corporation\NvStreamSrv\nvstreamer.exe"

C:\Users\Administrator>[libprotobuf WARNING ..\src\google\protobuf\descriptor_database.cc:58] File already exists in database: BusMessage.proto
[libprotobuf WARNING ..\src\google\protobuf\descriptor_database.cc:115] Symbol name "BusMessage" conflicts with the existing symbol "BusMessage".
[libprotobuf WARNING ..\src\google\protobuf\message.cc:288] File is already registered: BusMessage.proto
You can run C:\Program Files\NVIDIA Corporation\NvStreamSrv\nvstreamer.exe -help to see all the help options.
#1(I)[2020-12-28 14:42:04,365]=14:42:04={00001DB8} Custom Ctrl+C handler successfully set.
#2(I)[2020-12-28 14:42:04,366]=14:42:04={00001DB8} PID 1688
#3(I)[2020-12-28 14:42:04,375]=14:42:04={00001DB8} Streaming Process ID: 0
#4(I)[2020-12-28 14:42:04,384]=14:42:04={00001DB8} P4 Changelist: 23612337
#5(I)[2020-12-28 14:42:04,394]=14:42:04={00001DB8} Enumerating network adapters on this system
#6(I)[2020-12-28 14:42:04,415]=14:42:04={00001DB8} --- ...: ... / ...
#7(I)[2020-12-28 14:42:04,429]=14:42:04={00001DB8} Building head list
#8(I)[2020-12-28 14:42:04,581]=14:42:04={00001DB8} Adapter vendor id: 0x10de, device name: \\.\DISPLAY1
#9(I)[2020-12-28 14:42:04,599]=14:42:04={00001DB8} Creating a Standalone SCI Thread
#0(I)[2020-12-28 14:42:04,611]=14:42:04={00001DB8} Received ServerListenForIncomingStreams
#1(I)[2020-12-28 14:42:04,618]=14:42:04={00001DB8} Using: OpenSSL 1.0.2n  7 Dec 2017
#2(I)[2020-12-28 14:42:04,809]=14:42:04={00001DB8} RND is initialized
#3(I)[2020-12-28 14:42:04,814]=14:42:04={000005D8} Starting initialization of the main server thread
#4(I)[2020-12-28 14:42:04,863]=14:42:04={000005D8} RTSP Server: TCP instance
#5(I)[2020-12-28 14:42:04,872]=14:42:04={000005D8} RTSP server successfully started on port 48010 (thread count 4)
#6(I)[2020-12-28 14:42:04,880]=14:42:04={000005D8} Allocated 1 ConnectionInfo entries
#7(I)[2020-12-28 14:42:04,886]=14:42:04={000005D8} Completed initialization of the main server thread with state 2
#8(I)[2020-12-28 14:42:04,897]=14:42:04={00001DB8} Not sending a message.
#9(I)[2020-12-28 14:42:04,902]=14:42:04={00001DB8} SCI Thread creation done
#0(I)[2020-12-28 14:42:04,914]=14:42:04={00001DB8} Computing SPS/PPS headers.
#1(I)[2020-12-28 14:42:04,992]=14:42:04={00001DB8} Loaded library from '...'
#2(I)[2020-12-28 14:42:05,179]=14:42:05={00001DB8} Initialized context for adapter 0: 3840 x 2160 @ 60.0 Hz
#3(I)[2020-12-28 14:42:05,185]=14:42:05={00001DB8} Driver version is 445.87, branch is r445_85.
#4(I)[2020-12-28 14:42:05,198]=14:42:05={00001DB8} System is NOT co-proc.
#5(I)[2020-12-28 14:42:06,138]=14:42:06={00001DB8} Initialized CUDA for device 'Tesla T4' (SM 7.5) in compute mode 'CU_COMPUTEMODE_DEFAULT'.
#6(I)[2020-12-28 14:42:06,170]=14:42:06={00001DB8} GPU's = {
#7(I)[2020-12-28 14:42:06,174]=14:42:06={00001DB8}      {
#8(I)[2020-12-28 14:42:06,179]=14:42:06={00001DB8}      FriendlyName=Tesla T4
#9(I)[2020-12-28 14:42:06,184]=14:42:06={00001DB8}      }
#0(I)[2020-12-28 14:42:06,189]=14:42:06={00001DB8}      {
#1(I)[2020-12-28 14:42:06,193]=14:42:06={00001DB8}      FriendlyName=MICROSOFT BASIC DISPLAY ADAPTER
#2(I)[2020-12-28 14:42:06,201]=14:42:06={00001DB8}      }
#3(I)[2020-12-28 14:42:06,204]=14:42:06={00001DB8} }
#4(I)[2020-12-28 14:42:06,209]=14:42:06={00001DB8} Nvidia GPU count: 1, Non Nvidia GPU count: 1
#5(I)[2020-12-28 14:42:06,213]=14:42:06={00001DB8} Found a match at [19]
#6(W)[2020-12-28 14:42:06,219]=14:42:06={00001DB8} GPU does not support local streaming
#7(I)[2020-12-28 14:42:06,225]=14:42:06={00001DB8} Initializing NvEnc7VideoEncoder.
#8(I)[2020-12-28 14:42:06,232]=14:42:06={00001DB8} Using NvEnc header version 0.7.
#9(I)[2020-12-28 14:42:06,290]=14:42:06={00001DB8} Found a match at [19]
#0(W)[2020-12-28 14:42:06,294]=14:42:06={00001DB8} GPU does not support local streaming
#1(I)[2020-12-28 14:42:06,301]=14:42:06={00001DB8} Found a match at [19]
#2(W)[2020-12-28 14:42:06,305]=14:42:06={00001DB8} GPU does not support local streaming
#3(I)[2020-12-28 14:42:06,312]=14:42:06={00001DB8} Generating SPS/PPS header for 1280x720@30 FPS in video format H.264.
#4(I)[2020-12-28 14:42:06,384]=14:42:06={00001DB8} Encoder maxLumaPixelsPerSec<PHONE_NUMBER>
#5(I)[2020-12-28 14:42:06,389]=14:42:06={00001DB8} Encoder maxLumaPixelsPerSec<PHONE_NUMBER>
#6(I)[2020-12-28 14:42:06,399]=14:42:06={00001DB8} SPS/PPS LUT match, idx 0
#7(I)[2020-12-28 14:42:06,404]=14:42:06={00001DB8} Found a match at [19]
#8(W)[2020-12-28 14:42:06,409]=14:42:06={00001DB8} GPU does not support local streaming
#9(I)[2020-12-28 14:42:06,415]=14:42:06={00001DB8} Generating SPS/PPS header for 1280x720@60 FPS in video format H.264.
#0(I)[2020-12-28 14:42:06,422]=14:42:06={00001DB8} SPS/PPS LUT match, idx 3
#1(I)[2020-12-28 14:42:06,427]=14:42:06={00001DB8} Found a match at [19]
#2(W)[2020-12-28 14:42:06,433]=14:42:06={00001DB8} GPU does not support local streaming
#3(I)[2020-12-28 14:42:06,438]=14:42:06={00001DB8} Generating SPS/PPS header for 1920x1080@30 FPS in video format H.264.#4(I)[2020-12-28 14:42:06,447]=14:42:06={00001DB8} SPS/PPS LUT match, idx 1
#5(I)[2020-12-28 14:42:06,453]=14:42:06={00001DB8} Found a match at [19]
#6(W)[2020-12-28 14:42:06,457]=14:42:06={00001DB8} GPU does not support local streaming
#7(I)[2020-12-28 14:42:06,463]=14:42:06={00001DB8} Generating SPS/PPS header for 1920x1080@60 FPS in video format H.264.#8(I)[2020-12-28 14:42:06,472]=14:42:06={00001DB8} SPS/PPS LUT match, idx 4
#9(I)[2020-12-28 14:42:06,476]=14:42:06={00001DB8} Found a match at [19]
#0(W)[2020-12-28 14:42:06,482]=14:42:06={00001DB8} GPU does not support local streaming
#1(I)[2020-12-28 14:42:06,488]=14:42:06={00001DB8} Generating SPS/PPS header for 3840x2160@30 FPS in video format H.264.#2(I)[2020-12-28 14:42:06,497]=14:42:06={00001DB8} SPS/PPS LUT match, idx 2
#3(I)[2020-12-28 14:42:06,503]=14:42:06={00001DB8} Found a match at [19]
#4(W)[2020-12-28 14:42:06,507]=14:42:06={00001DB8} GPU does not support local streaming
#5(I)[2020-12-28 14:42:06,513]=14:42:06={00001DB8} Generating SPS/PPS header for 3840x2160@60 FPS in video format H.264.#6(I)[2020-12-28 14:42:06,521]=14:42:06={00001DB8} SPS/PPS LUT match, idx 5
#7(I)[2020-12-28 14:42:06,536]=14:42:06={00001DB8} Found a match at [19]
#8(W)[2020-12-28 14:42:06,540]=14:42:06={00001DB8} GPU does not support local streaming
#9(I)[2020-12-28 14:42:06,545]=14:42:06={00001DB8} Generating SPS/PPS header for 1280x720@30 FPS in video format HEVC.
#0(I)[2020-12-28 14:42:06,553]=14:42:06={00001DB8} SPS/PPS LUT match, idx 6
#1(I)[2020-12-28 14:42:06,558]=14:42:06={00001DB8} Found a match at [19]
#2(W)[2020-12-28 14:42:06,563]=14:42:06={00001DB8} GPU does not support local streaming
#3(I)[2020-12-28 14:42:06,569]=14:42:06={00001DB8} Generating SPS/PPS header for 1280x720@60 FPS in video format HEVC.
#4(I)[2020-12-28 14:42:06,577]=14:42:06={00001DB8} SPS/PPS LUT match, idx 9
#5(I)[2020-12-28 14:42:06,582]=14:42:06={00001DB8} Found a match at [19]
#6(W)[2020-12-28 14:42:06,586]=14:42:06={00001DB8} GPU does not support local streaming
#7(I)[2020-12-28 14:42:06,592]=14:42:06={00001DB8} Generating SPS/PPS header for 1920x1080@30 FPS in video format HEVC.
#8(I)[2020-12-28 14:42:06,601]=14:42:06={00001DB8} SPS/PPS LUT match, idx 7
#9(I)[2020-12-28 14:42:06,606]=14:42:06={00001DB8} Found a match at [19]
#0(W)[2020-12-28 14:42:06,611]=14:42:06={00001DB8} GPU does not support local streaming
#1(I)[2020-12-28 14:42:06,617]=14:42:06={00001DB8} Generating SPS/PPS header for 1920x1080@60 FPS in video format HEVC.
#2(I)[2020-12-28 14:42:06,625]=14:42:06={00001DB8} SPS/PPS LUT match, idx 10
#3(I)[2020-12-28 14:42:06,630]=14:42:06={00001DB8} Found a match at [19]
#4(W)[2020-12-28 14:42:06,634]=14:42:06={00001DB8} GPU does not support local streaming
#5(I)[2020-12-28 14:42:06,640]=14:42:06={00001DB8} Generating SPS/PPS header for 3840x2160@30 FPS in video format HEVC.
#6(I)[2020-12-28 14:42:06,652]=14:42:06={00001DB8} Encoder supports encoding 10 bit
#7(I)[2020-12-28 14:42:06,658]=14:42:06={00001DB8} SPS/PPS LUT match, idx 8
#8(I)[2020-12-28 14:42:06,663]=14:42:06={00001DB8} Found a match at [19]
#9(W)[2020-12-28 14:42:06,669]=14:42:06={00001DB8} GPU does not support local streaming
#0(I)[2020-12-28 14:42:06,674]=14:42:06={00001DB8} Generating SPS/PPS header for 3840x2160@60 FPS in video format HEVC.
#1(I)[2020-12-28 14:42:06,683]=14:42:06={00001DB8} SPS/PPS LUT match, idx 11
#2(I)[2020-12-28 14:42:06,719]=14:42:06={00001DB8} Deinitialized CUDA context for adapter 0.
#3(I)[2020-12-28 14:42:06,736]=14:42:06={00001DB8} Deinitialized context for adapter 0
#4(W)[2020-12-28 14:42:06,744]=14:42:06={00001DB8} IsEnableGFNMicSupport setting not found
#5(I)[2020-12-28 14:42:06,750]=14:42:06={00001DB8} initializeAudio
#6(I)[2020-12-28 14:42:06,754]=14:42:06={00001DB8} Trying to create and open audio source (new API), bIsMicEnabled: 0
#7(I)[2020-12-28 14:42:06,850]=14:42:06={00001DB8} Setting channel count to 2
#8(I)[2020-12-28 14:42:06,855]=14:42:06={00001DB8} Setting opus channel mapping mode to FALSE
#9(I)[2020-12-28 14:42:06,861]=14:42:06={00001DB8} Setting opus channel mappingMode = FALSE
#0(I)[2020-12-28 14:42:06,894]=14:42:06={00001DB8} initializing NvVAD m_bRegisterNvVADEndpoint: 0
#1(I)[2020-12-28 14:42:06,900]=14:42:06={00001DB8} Surround is supported
#2(I)[2020-12-28 14:42:06,905]=14:42:06={00001DB8} DLL version supports surround audio
#3(I)[2020-12-28 14:42:06,915]=14:42:06={00001DB8} NvAudCapAudioSource successfully opened
#4(I)[2020-12-28 14:42:06,920]=14:42:06={00001DB8} Created and opened audio source
#5(I)[2020-12-28 14:42:06,925]=14:42:06={00001DB8} Updating Audio source
#6(I)[2020-12-28 14:42:06,930]=14:42:06={00001DB8} Starting the SCI thread
#7(I)[2020-12-28 14:42:06,936]=14:42:06={00001DB8} Not sending a message.
#8(I)[2020-12-28 14:42:06,940]=14:42:06={00001DB8} Sent event StreamerInitOk:

Feel free to ask for more information. Thanks!

It appears there are no errors with GFE. Can you check Windows' "Advanced display settings" and see if there is a monitor with the GPU attached? And if there is, are you sure you are running GFE on that monitor?

Thanks for the quick response!
I have the following:

It's very strange that it's not working for you at this point. Do you have an audio interface installed? Can you manually start the NvContainerLocalSystem service? If so, the last thing I can think of is to re-run step 2 from the Steps folder and rebooting the VM.

This service was already running. I have stopped it and started it again. Here is what I currently have

I have relaunched step 2 successfully and rebooted. I logged in via anydesk and ran Moonlight Internet Streaming Tester which said that GameStream is Off. Here are the logs.
Thanks again for your help.
Moonlight Internet Streaming Tester v<IP_ADDRESS>
The current UTC time is: 04:01:50 PM
RegQueryValueExA() failed: 2
GameStream is not enabled in GeForce Experience. Please open GeForce Experience settings, navigate to the Shield tab, and turn GameStream on.
--------------- CURRENT MISS LOG -------------------
Moonlight Internet Streaming Service v<IP_ADDRESS>
The current UTC time is: 04:00:35 PM
RegQueryValueExA() failed: 2
RegQueryValueExA() failed: 2
GameStream is OFF!
Finding upstream IPv4 hops via traceroute...
IcmpSendEcho() failed: 11010
Found 0 hops
Starting port mapping update on default gateway to local machine...
UPnP IPv4 IGD discovery completed with error code: 0
NAT-PMP public address request failed: -100
No UPnP device found!
Updating PCP port mapping for TCP 47984...NO RESPONSE
Updating PCP port mapping for TCP 47989...NO RESPONSE
Updating PCP port mapping for TCP 48010...NO RESPONSE
Updating PCP port mapping for UDP 47998...NO RESPONSE
Updating PCP port mapping for UDP 47999...NO RESPONSE
Updating PCP port mapping for UDP 48000...NO RESPONSE
Updating PCP port mapping for UDP 48002...NO RESPONSE
Updating PCP port mapping for UDP 48010...NO RESPONSE
No valid upstream IPv4 address found!
Going to sleep...

Regarding audio devices I didn't install anything. Here is the list of my device.

The only thing I have done was to remove the Microsoft Basic Display Driver based on http://lg.io/2015/07/05/revised-and-much-faster-run-your-own-highend-cloud-gaming-service-on-ec2.html (with takeown cacls and del commands but with an updated path)

Did you check if the SHIELD tab is present after rebooting?

Thanks a lot!!!!!!!!! I didn't notice this new tab on the left!!!!
GameStream is working properly! Thanks again!!!!!!


Refactor Options

Right now setup options are being conflated with command options. For example, "UseGlobalTransaction" is not relevant if you're only looking to get a count of outstanding migrations. It's specific to the command you're running. Whereas "MigrationsTable" is relevant to any command, so it's more of a setup option.
I'd like to rework Mayflower such that the Options object only contains setup properties. These are:

ConnectionString
Database
Server
Directory
MigrationsTable
Output
AutoRunPrefixes
Provider (not actually settable currently)
Verbosity (planned feature)

The Output option is a bit ambiguous as to whether it's a setup or a command option. I'm leaning more towards setup, for simplicity.

Current properties which would be removed from the Options class:

CommandTimeout
IsPreview
UseGlobalTransaction
Force

The Migrator object would be refactored to allow it to be constructed directly using an Options argument, then you could run as many commands on it as you want. Each command would correspond to an instance method on Migrator, and would accept parameters as the command options, rather than having a dedicated Options class for each command.
Furthermore, the CLI would be refactored to better support adding commands in the future. Each command will accept any of the setup arguments, but may also have its own arguments which are specific to that command. The first argument must always be a command, such as "migrate" or "status".

It's possible that the Options class is entirely redundant, and could be replaced with parameters on the Migrator constructor.

After giving it a little bit more thought, I'm going to move the connection options out of the Migrator constructor as well. The basic idea is that I'd like you to be able to construct the migrator, and then run various commands with one or more databases.

This is more or less done in the redesign branch.


build: bundle the library in angular package format

I was trying out our app with the new ivy compiler and this package wasn't working with it because it wasn't in the angular package format, this refactors all the build process to use ng-packagr which nicely takes care of all the hard work. Thanks for your work on this library! 😄

Hey @mattlewis92 , thanks for the cool PR 😄
Could you please look into the conflicts and push then?
I'll be testing your PR locally with ivy renderer and potentially add a demo too to this project :) Thanks.

@AhsanAyaz sure, fixed!


chore: add .aab artifact, change logo and package name

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 46.58%. Comparing base (32dc9db) to head (5074a11).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #354      +/-   ##
==========================================
+ Coverage   46.55%   46.58%   +0.03%
==========================================
  Files         155      155
  Lines       19086    19086
==========================================
+ Hits         8886     8892       +6
+ Misses      10200    10194       -6

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


New ValueTask Computation Expression to replace Async

As discussed, this CE replaces Async for performance and more fluidly fit into Asp.net code framework.
The CE is overloaded to take value ('T), 'Task<'T>, ValueTask<'T> and Async<'T>
Feel free to reject fsproj header  changes, don't know why they are showing up here.
I have updated all tests too and ensure they pass

Hey, there seems to be an issue when executing the tests. I re-started the build for the commit and I can see that it gets stuck on the text execution again:

It will be stuck at this point now until I run out of build minutes and after 60 minutes AppVeyor will mark the build as failed saying that I ran out of the maximum build time (1h).
The first thought that comes to my mind is that the test execution got deadlocked somewhere. We should investigate this and make sure that the build will succeed on AppVeyor.

Fully agree, please kill build if you can? The tests ran and passed in 2 seconds on my machine (after having failed pre test updates), I was running with dotnet core 2.0 pr1 so I wonder if that is cause for discrepancy? I will re-review tests, sounds like 'Task' failing to complete in tests

From Build Tests page, it appears these are the two tests causing the issue:
Giraffe.ModelBindingTests.bindModel during HTTP GET request with query string returns correct result
Giraffe.HttpHandlerTests.PUT "/post/2" returns 404 "Not found"
Will investigate these some more, I have rerun test on my machine and all complete fine so
Test run for F:\Code\Giraffe\tests\Giraffe.Tests\bin\Debug\netcoreapp1.1\Giraffe.Tests.dll(.NETCoreApp,Version=v1.1)
Microsoft (R) Test Execution Command Line Tool Version <IP_ADDRESS>
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...
[xUnit.net 00:00:00.5216346]   Discovering: Giraffe.Tests
[xUnit.net 00:00:00.6542994]   Discovered:  Giraffe.Tests
[xUnit.net 00:00:00.7086648]   Starting:    Giraffe.Tests
[xUnit.net 00:00:01.3558138]   Finished:    Giraffe.Tests

Total tests: 74. Passed: 74. Failed: 0. Skipped: 0.
Test Run Successful.
Test execution time: 1.8489 Seconds

Ok cool, I also need to spend a bit more time to review the new ValueTaskCE.fs and better understand what is going on there. I might reach out to you with a few questions. Meanwhile I also created this as a suggestion to the F# language. I think you're right that the constant conversion from task to async doesn't make a lot of sense. Please feel free to add your own comments there or help me push this suggestion by upvoting :).

... hmmm, your a braver man than I, using task over async is heresy to a lot of FP diehards! It fits this case perfectly due to vast majority of work being done in Task by asp.net core anyway so just removing conversion overhead as well as taking advantage of recent TPL performance updates (many who claim Async faster were correct pre 2013 before asp.net team started to performance tweak for asp.net core).
I noticed you identified linux build test in over PR was due to beta XUnit, could this also perhaps be the reason my PR tests are failing?
If you have any questions about ValueTask or CE, feel free to fire them across.

The other PR had a dependency upgrade from a stable xunit version to a beta version, but I don't see this change in this PR, so not sure if it is the same issue.
I don't care what some FP diehards believe, I want F# to be as good as possible and it feels like that it can do a lot better on the async vs task topic at the current stage of where we are in .NET and therefore I feel brave enough to suggest it :)

Where would we be without tests ... My implementation with ValueTask is not working properly with CE TryWith ... all the overloading and type inference is getting messy to the point I am wondering should we just still with plain Task CE and sync bindings can be looked into as part of Discussion I can raise on continuation handlers (vs bind ones). I will fiddle around with it a bit more but I think that due to the fact that I cannot gain access to the underlying task, to attach a continueWith handler, before it's faulted means it may not be possible to handle correctly.

Yes I think its a smart move to improve the API in small steps. Let's get the regular Task CE in place and then once that is confirmed to work well we can get ValueTasks integrated as well.
I had a look at your Task CE implementation and it is mostly clear to me, but I was wondering why we were using GetAwaiter instaed of ContinueWith. I think the SO thread mentioned initially that GetAwaiter would perform faster, but then later it has been acknowledged that there was no real evidence for it. From my readings today I think that GetAwaiter is not really intended to be used and ContinueWith is the easier (and probably preferred) option to implement it in our case.
FSharpX and Orleankka do the same. The other difference  noticed is that in the TryWith we return an AggregateException in the case of failure while the task CE in FSharpX and Orleankka would return t.Exception.GetBaseException(), but maybe I misunderstood the code.

Could have saved myself a bit of headache not bothering with ValueTask ... I butchered TryWith trying to get it to work with all the already extra overloads and its not working properly ... hence why not same as originals, they work, thats why one of the tests are not working, the error handler is not firing properly as TryWith is a mess. I will wind back all the changes to plain Task CE.
Task.Result = GetAwaiter().GetResult() like ContinueWith is almost same as awaiter().OnCompleted ... the awaiter methods are the compiler low level methods that generally should not be touched, I know the speed difference between ContinueWith and awaiter are essentially the same so I will use ContinueWith if you prefer.
No worries on the help ... this is the first open source Project I've really helped on (with exception of small Paket performance optimizations), the quality of the docs and code make it a pleasure!

I dont think Travis CI is configured, hence why keeps failing anyway but on appveyor, one of the tests is failing due to an expected result which may not be correct.
let ``Test /error returns status code 500`` () =
    use server = new TestServer(createHost())
    use client = server.CreateClient()

    get client "/error"
    |> isStatus HttpStatusCode.InternalServerError
    |> readText
    |> shouldEqual "One or more errors occurred. (Something went wrong!)"

But in the route, the fail message is
let webApp =
    choose [
        GET >=>
            choose [
                route  "/"           >=> text "index"
                route  "/ping"       >=> text "pong"
                route  "/error"      >=> (fun _ -> failwith "Something went wrong!")
                route  "/login"      >=> loginHandler
                ... ]
          ]

My exception handler is sending as "Something went wrong!", I cannot find where/how it is being wrapped in One or more errors occurred. (%A)
Was the error response just returning this when using Async and it was used as expected result to match up with test? I doesn't seem correct to me if we are including text we do not control (we can manually wrap such a response if we want but shouldn't be happening automatically unless I am missing something? If I update expectation to Something went wrong! it passes

Hi Gerard, thanks for all the work. I just did a quick review and the only questions I have now is:

why do we have to use task.AwaitTask in certain situations
why do we need to run asPlainTask in the middleware?

I am at a wedding today but I think the rest looks fine and I will try to get some time tomorrow morning to merge the PR, otherwise latest on Monday morning!

No rush on the merge, it's best we take time to get it right, reach the right compromise.
The answer to both questions is fundamentally same, .net plain Task is not same as Task<'T>.
Everything looked fine initially as I overloaded the CE to take both Task and Task<'T> but then due to compiler issue with type inference, it wasn't able to infer the types of some bindings (was able to bind most). having to put type annotations on bind values is not ideal so I added task.AwaitTask function to convert Task to Task<unit> , and removed the overload, so now was only Task<'T>.
The Invoke methods in the middle ware all use Task, not Task<'T>, what is returned by Task CE ... so I cast Task<'T> to Task (as Task<'T> inherits from Task (one reasons break inference)).
I have submitted alternative that has both overloads, and requires some type inference in places, and I also added an additional await CE, which is a CE for plain Task that is just used in middleware where we are both binding and returning Task.
It's a pain that Task is not compatible with Task<unit> so need to figure out if convenience of overload CE, with better performance but occasional type annotations being required is better then using no overload and having to convert Task, to Task<unit> to make it compatible with non-overloaded task CE.

@dustinmoris should we scrap this, allow me to rebase and try again or are you able to resolve conflicts? there's probably quite a few with recent two PRs.

I think I will be able to resolve this. I planned on doing it today
actually...
On 23 Jun 2017 9:00 am, "Gerard"<EMAIL_ADDRESS>wrote:

@dustinmoris https://github.com/dustinmoris should we scrap this, allow
me to rebase and try again or are you able to resolve conflicts? there's
probably quite a few with recent two PRs.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/dustinmoris/Giraffe/pull/59#issuecomment-310599494,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AEXlat6e6DCrvEZTS7GQHFBlE-1_oo4Yks5sG3CMgaJpZM4N6n9s
.

Cool, and is it clear the difference between overloading CE with plain 'Task' ?
Pros overload

No need to additionally bind to additional task with additional awaitTask fn.
Better performance no wasteful bind
Simpler consistent bind
Cons overload
due to method overload with Task/FSharpFunc, cannot always infer
In some bind cases, let! binding requires type annotation e.g.:

task { let! (ctx:HttpContext) = ...  }

some/most task binding does work, unsure about why the 3/4 fringe cases in project happen.

I have resolved the conflicts and moved this PR into this new branch.
A few things I changed:

I removed a few usages of task where the original method could be just rewritten without the task CE. For example, the readFileAsString in Common.fs didn't need to have a dependency on Giraffe.Tasks:

let readFileAsString (filePath : string) =
    use stream = new FileStream(filePath, FileMode.Open)
    use reader = new StreamReader(stream)
    reader.ReadToEndAsync()

I've made similar changes elsewhere applicable.
I did some experimentation, but couldn't get the type inference properly working either, which is really annoying and I tried to get rid of the second AwaitBuilder by overloading the this.Return from the task CE but that always resulted in the unit test which checks for error handling to fail.
Looks like we have two new CE, which is not very nice to be honest. This get's quite complicated when there is async, task and await now available. I think the aim should be to have one properly working task CE and not have to require a third await one :(
The other thing which is still something I would like to understand is the difference between this task CE implementation and the normal async workflow from F#. The error handling of tasks seems to be different and this is why you had to change the unit test from the sample app.

With Computation Expressions, a hybrid form of Monad, the return/wrapped type should be the same so there is usually no way you could overload return type as you would then need to add additional overloads to all the binds, combines, for/while/try.... it becomes a disaster and although it's technically possible , practically it's not, not with generic types and method overloading inference issues.
The await is not needed at all, it's purely only used in middle ware, wasn't for general use anywhere else, if you don't want it, we can just imperatively return Task from each relevant exec branch.
I'll try re-merge my develop branch to your new branch, this may be too much of a breaking change for most who don't care about performance, tough call.
Error handling between two is similar, tasks return aggr exception if (isfaulted), the task {} currently just extracts the base exception, the Async tells you there was aggregate exceptions text wrapping the base zen... it may list multiple too ... I think users should probably get just base as they are not debugging the system!


Feature/android gestures reader

This PR brings support for importing gesture recognizer files from android's recognizer.
The example project is also updated to test this feature.

👍

Hi! Thanks for your PR and sorry for not responding! (missed it...busy etc.). I'll have a look at it and comment as soon as possible.

Very nice, thanks. I've merged it into master and updated the readme to mention your contribution. Just cleaned up a warning and compilation error and stripped the PennyPincher prefix from the importer since it's already namespaced via the framework / module.

Thank you Fe9lix!


Match JUnit 5 in TestMethod, TestClass, AssertionMethod ...

Would it be possible to extend classes related to test frameworks (e.g. TestMethod, TestClass, AssertionMethod) to check JUnit 5 as well?
The package is different and the API changed quite a lot, so the existing JUnit 4 checks to not match it.

That sounds like a reasonable thing that we should definitely do.  If you're feeling up for it you may want to take a stab at a PR yourself?  Otherwise we'll get around to it when time permits.


[Proposal]Add last tablet report time in show backends

Recently, I found a cluster's BE's tablets is not balance, and the balance error msg is path hash is not set, I finally found that some BE cannot report it's tablets to BE because the report_all_tablet's logic is not good enough, and the problem is solved.But I think we should add a column in show backends to display the last report tablets time for BE, so that we can quickly found is there some BE encounter some problems.

LGTM, maybe we can add a new column to show some info together in JSON format.
So that if we want to add more info later, there is no need to add more columns in result of show backends

LGTM, maybe we can add a new column to show some info together in JSON format.
So that if we want to add more info later, there is no need to add more columns in result of show backends

It sounds good, but a JSON format string in the column is not easily to read than a column, we may need to display the JSON format string in a pretty way.


Can not install "Ubuntu on Windows" behind a proxy server

Hi all
Can you install "Ubuntu on Windows" behind a proxy server authentication env?

bash
-- Beta feature --
This will install Ubuntu on Windows, distributed by Canonical
and licensed under its terms available here:
https:aka.ms/uowterms

Type "y" to continue: y
Downloading from the Windows Store... 0%>>: 0x80070005

If your proxy block all coming from Microsoft, or your company use WSUS nope.
https://msdn.microsoft.com/en-us/library/bb332157.aspx
Check with your network administrator.

Hi jolibert!
It seems bash command (not Ubuntu land) can not handle http proxy authentication.
(HTTP 407)
Simple solution:
Enable manual download "Bash on Ubuntu on Windows" on the Windows Store image-files.
But I can not do it.

We've changed the API that is used to download our image from the Windows Store.  Have you tried on a more recent Windows Insider build?

Closing since we've not heard back from OP in 3 months and question was answered: If you're behind a proxy that blocks content from Microsoft, then, no, you won't be able to acquire the necessary Linux distro during installation.


CG alerts for SBRP

While working on the 1ES templates, I got CG errors because the SBRP repo defines packages for two vulnerable packages in the 7.0 branch:

System.Drawing.Common.4.7.0
System.Security.Cryptography.Xml.4.7.0

System.Drawing.Common.4.7.0 also applies to the 6.0 branch.
These should be upgraded or removed as appropriate.

Quick investigation on the usage of System.Drawing.Common. It looks like it's a dependency of System.Windows.Extensions. System.Windows.Extensions is used in SBE by application-insights 2.21 and by src/roslyn-analyzers/src/Test.Utilities/AdditionalMetadataReferences.cs.
App insights 2.21 is being removed by https://github.com/dotnet/source-build-externals/pull/302. The reference in roslyn-analyzers requires further investigation.

We decided to dismiss the issues for 7.0 given its upcoming EOL. I'm currently working on the fix for 6.0 but having issues with SBRP building System.Windows.Extensions (which depends on System.Drawing.Common) in the tarball build.

Pretty sure the error is caused by the System.Windows.Extensions referencing the online nuget feed. It seems to be similar to what's described in https://github.com/dotnet/source-build-reference-packages/pull/859.
The infra is quite a bit different for 6.0, so it's not as simple as adding the property to the build arg. I'm trying to see if I can copy the output for the dependent projects to CurrentRepoSourceBuiltNupkgCache in addition to the CurrentRepoSourceBuiltNupkgCacheDir, which would be the correct package-cache directory.


Can't record on android

I don't have access to Android to test this, but the failure is happening in https://github.com/tarasglek/chatcraft.org/blob/8070bf0707f0555ef4a7e78ed75da2bcf446fc95/src/components/MicIcon.tsx#L87
Based on the error message in the screenshot, we're likely failing in https://github.com/tarasglek/chatcraft.org/blob/main/src/lib/speech-recognition.ts#L134, and based on https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder/state, this can throw if the recording isn't happening.  It's weird that you'd already be in state=inactive when .stop() is called.  What was the sequence of events that got you to this point?  Does it always happen?
An obvious fix here would be to check the state before we call .stop() or try/catch.


Remove warnings from code

This PR removes almost all the WARNING messages when running tests:

migrate render_to_response to render from Django
use prepend_urls instead override_urls from tastypie

There are two more warnings:

Tastypie uses an old method from Django, but we can't upgrade (even from 0.13.0 to 0.13.3) because there are some tests that do not pass (I could take a look at this in another PR)

readthedocs/rtd_tests/tests/test_api.py::APITests::test_make_project
  /home/humitos/rtfd/code/readthedocs.org/.tox/py27/lib/python2.7/site-packages/tastypie/resources.py:2116: RemovedInDjango110Warning: 'get_all_field_names is an unofficial API that has been deprecated. You may be able to replace it with 'get_fields()'
    field_names = self._meta.object_class._meta.get_all_field_names()

Linaro Django Pagination uses context_instance for render_to_string. I took a look at the code but we are using an specific commit directly from git and I found that project was forked and abandoned a couple of times. So, I'm not sure if it's safe to update and to what version

readthedocs/rtd_tests/tests/test_privacy.py::PrivacyTests::test_build_filtering
  /home/humitos/rtfd/code/readthedocs.org/.tox/py27/lib/python2.7/site-packages/linaro_django_pagination/templatetags/pagination_tags.py:199: RemovedInDjango110Warning: The context_instance argument of render_to_string is deprecated.
    context_instance = context)

We should deprecate our tastypie API and remove it.
Not sure about.

This is a solid :+1: from me once the tests pass :)

Test are passing, the problem is the linting. I wasn't sure if I should apply all the tools we have to this files or not.
Since, you already review it, I could apply them and make a new commit with all of the files involved.

and 2) could be in another PR I think.

LGTM. Will likely cause a bunch of other PR's to conflict though :(


Remove "background" section from readme.

It's a bit irrelevant for CakePHP 3.x compatible version of the plugin.

Coverage remained the same at 100.0% when pulling c30ad1ef949d31efa6b2e0c96257855df67cd626 on ADmad:patch-1 into e6eb080d08294327c598b0f2ea513efd99d03459 on josegonzalez:master.


Error in execution of the "train_haim_drl_in_carla" training

Hi!!   I am  very intrigued by your work,by the way I have watched your report about this paper which is so amazing and I want to try out the method for myself for further research purposes. I followed the installation guide and i want interacting with  carla core which is 0.9.13 version, but i faced some errors when i run "python train_haim_drl_in_carla.py --num-gpus=1" .
Here is the error I'm getting:
ModuleNotFoundError: No module named 'haco'

I would greatly appreciate it if you could offer me some advice on this matter.

Hello, thank you for your attention. Yes, we noticed some errors in Carla's experiment. We are working on fixing them, and we hope to be able to upload the new code in the next week. Maybe you can try to run Metadrive during the fixing periods. Also, we release our latest projects: PE-RLHF

Hello, thank you for your attention. Yes, we noticed some errors in Carla's experiment. We are working on fixing them, and we hope to be able to upload the new code in the next week. Maybe you can try to run Metadrive during the fixing periods. Also, we release our latest projects: PE-RLHF
Thanks a lot  for your reply. Currently, my experiments still require collaboration with Carla. I'm thrilled to see your new work and look forward to the release of your new code. Thanks for your reply again

Thanks a lot for your reply. Currently, my experiments still require collaboration with Carla. I'm thrilled to see your new work and look forward to the release of your new code. Thanks for your reply again


⚠ EXT: Rex's ARK has degraded performance

In 81943c2, EXT: Rex's ARK (https://panel.truenorthroleplay.net/api/client/servers/$PTYL_REXARK_UUID/resources) experienced degraded performance:

HTTP code: 200
Response time: 300 ms

Resolved: EXT: Rex's ARK performance has improved in 0f25bf0.


graphite: 1.0.2 -> 1.1.3 & moved dependencies to python-modules

Motivation for this change
Fixes #30891 and should replace https://github.com/NixOS/nixpkgs/pull/44246.
Things done

Upgrade graphite-web, carbon and whisper from 1.0.2 -> 1.1.3.

Extend the pythonPackages.callPackage scope with the
sharedVersions attribute set. This set contains versions that are
shared by multiple python packages. Currently it only contains the
graphiteVersion.

Replaced the deprecated pythonPackages.graphite_influxdb with
pythonPackages.influxgraph.

Renamed pythonPackages.graphite_web to pythonPackages.graphite-web
to be consistent with the Python package name.

Replaced the unmaintained pythonPackages.graphite_pager with
pythonPackages.graphitepager

Moved all new packages from python-packages.nix to
pkgs/development/python-modules

The following test passes:
nix-build nixos/release.nix -A tests.graphite.x86_64-linux

[ ] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[x] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[x] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[x] Fits CONTRIBUTING.md.

@dotlambda @FRidh @adisbladis @offlinehacker @rickynils

What's the advantage of having graphiteVersion instead of specifying the version for each package? Do they really need to be the same version? E.g., graphite_api seems to work even though it is at a different version.
I'm asking because specifying the version individually would allow us to include the graphite packages in batch upgrades.

@GrahamcOfBorg test graphite

No attempt on aarch64-linux (full log)
The following builds were skipped because they don't evaluate on aarch64-linux: tests.graphite
Partial log (click to expand)

a) For `nixos-rebuild` you can set
  { nixpkgs.config.allowUnfree = true; }
in configuration.nix to override this.

b) For `nix-env`, `nix-build`, `nix-shell` or any other Nix command you can add
  { allowUnfree = true; }
to ~/.config/nixpkgs/config.nix.

Success on x86_64-linux (full log)
Attempted: tests.graphite
Partial log (click to expand)
one: exit status 1
syncing
one: running command: sync
one: exit status 0
test script finished in 26.38s
cleaning up
killing one (pid 597)
vde_switch: EOF on stdin, cleaning up and exiting
vde_switch: Could not remove ctl dir '/build/vde1.ctl': Directory not empty
/nix/store/98ai277yc66vbw89ks6akskcjavn5a0h-vm-test-run-graphite

@dotlambda it could be possible that different versions of graphite-web, carbon and whisper can work together. However, since they share the same version, are published on the same date and share the same release notes I think upstream intends them to be used together. Having a shared graphiteVersion ensures this in nixpkgs.
Note that we do something similar with the Elasticsearch stack.
Having support for batch upgrades would also be nice of course. I guess batch upgrades can also ensure we upgrade all graphite packages together. What needs to be done to get the graphite packages to batch upgrade?

What needs to be done to get the graphite packages to batch upgrade?

Currently, our script can only deal with the version being specified in each file. If new versions are published on the same date, they would be updated simultaneously anyway.

There's no need to add packages manually. It's applied to all packages in pkgs/development/python-modules. You'll find it here: https://github.com/NixOS/nixpkgs/blob/master/maintainers/scripts/update-python-libraries

Great. I've updated my PR and removed graphiteVersion.

@dotlambda @FRidh I think this is ready to be merged now.
I also performed a manual test by modifying the graphite test to enable an xserver and install firefox. Then I ran the VM using $(nix-build nixos/tests/graphite.nix -A driver)/bin/nixos-run-vms and pointed firefox to graphite-web on localhost:8080. I could successfully operate the app.

Unrelated, but:
  carbonEnv = {
    PYTHONPATH = let
      cenv = pkgs.python.buildEnv.override {
        extraLibs = [ pkgs.python27Packages.carbon ];
      };
      cenvPack =  "${cenv}/${pkgs.python.sitePackages}";
    # opt/graphite/lib contains twisted.plugins.carbon-cache
    in "${cenvPack}/opt/graphite/lib:${cenvPack}";

How about moving opt/graphite/lib to a Python package?

Btw, should the changes to the module be mentioned in the changelog?

@dotlambda thanks for the merge. The API of the graphite module hasn't changed. So existing invocations of the module don't have to be changed. So I don't think a changelog entry is needed.

@FRidh about making $(nix-build -A python27Packages.carbon)/lib/python2.7/site-packages/opt/graphite/lib/ a Python package: this should ideally be done by upstream right?


add pre/during/post upgrade tags to be able to use it more efficiently

add the following tags for upgrade tests:

PreUpgrade
DuringUpgrade
PostUpgrade

This is to use it more efficiently and include each separately without needing to use the file path/name that was changed between the branches.
related to jira ticket: RHOAIENG-2720

Also, I'm wondering whether the name 0201__pre_upgrades.robot was chosen intentionally (upgrades vs upgrade in the other filenames).

might be a typo, we could change it in this PR if @kobihk agrees


build: use develop branch, add comments

Now that the test-ApiCallbacks file is merged back into develop branch for Smoke tests this UI CI config can use it there.  Also ensures changes to that file go through PR

:tada: This PR is included in version 0.361.6 :tada:
The release is available on:

npm package (@next dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


[Style] : Changing of footer of main page

What's the style idea?
I need to improve the footer of the main page which is looking dull i need to change the interface according to navbar look i done some changes please go through the changes i done , I added the contact us links in footer as well which makes easier for the user to follow.
before :

After:

Please assign me this issue @CSEdgeOff to make contribution
Checklist

[X] I have checked the existing issues.
[X] I follow Contributing Guidelines of this project.
[X] I am a GSSoC'24 contributor.

Code of Conduct

[X] I agree to follow this project's "Code of Conduct".

ok sir

These are the mobile view interfaces @Durgesh-Vaigandla and also check the responsiveness of the footer as well it was good  sir please go through it.

Assign me this issue @Durgesh-Vaigandla  sir to make contribution to the project
Thank you