An APIcast policy that enables SSL/TLS client certificate authentication

Hi team,
This pull request is a preliminary support for SSL/TLS client certificate authentication that fits the new policy system.
Customer needs
Need 1: handle COTS software
Some customers needs to handle "Commercial-off-the-shelf" (COTS) applications within 3scale.
They need to handle access control, quotas and track usages of those apps just like any normal app within 3scale.
Usually, those COTS application can be configured with an alternate URL that can be set to the APIcast gateway but there is usually no way to add something as HTTP headers or in the Query String.
However, most of these apps can be configured to use a TLS Key Store and authenticate using TLS client certificate authentication.
Need 2: have a higher level of security and authenticate the client application using Certificates
Some customers have requirements to use SSL/TLS client certificate authentication to authenticate the client application. This is a strong requirement in the EU (and especially in France where the ANSSI strongly pushes the usage of certificates everywhere).
Design choices
In order to be manageable, the SSL/TLS client certificate authentication needs to enforced at the APIcast level, but access control and the whole management needs to remain in the 3scale Admin Portal.
So, I piggybacked the SSL/TLS client certificate authentication onto the existing API Key support of 3scale. Namely, a successful client certificate authentication is mapped to an API Key that has the following value: certificate-<SHA1> where <SHA1> is the SHA1 hash of the Common Name(s) of the client certificate concatenated with the service_id.
Current state
I ran out of time to make everything nice and clean so there are some missing parts that needs to be completed:

make the policy configurable (which information contributes to the identification data)
unit testing
discuss and validate the design more thoroughly
discuss how to handle the TLS configuration of nginx (could either be out-of-the-box in APIcast or provided by the policy as metadata ?)

I also had issues during the development with Rover so I had to fallback to luarocks but the final implementation should use Rover instead.
Of course this pull request is not intended to be merged as-is in the product. It would be more a discussion on the subject.
Many thanks for your help !
Nicolas

cc @mikz, @andrewdavidmackenzie, @lucamaf, @kevprice83

@nmasse-itix I think this would make sense to me with some small details.
I belive this policy should do one thing and one thing only:
extract the commonName and use it as user-key or app-id or whatever is configured in the service.
It should not check and enforce the auth scheme is set to "headers" or verify the service is loaded. There are other policies that do that.
This policy should complement the default implementation and not try to override it.
The same way OIDC extracts app_id/key from the JWT this could extract it from the cert.
And I'd imagine there could be some option to pass a secret key and do HMAC to create app_key from the commonName (or any other configured field).
If we could provide ssl_verify_client set to optional or optional_no_ca in the default configuration then all the work of verifying the cert could be delegated to the policy.
And can't be the common name from the client cert be extracted from nginx variable like $ssl_client_s_dn?

Hi @mikz ! Thanks for the feedback !
I initially used the commonName and the service id to identify the app to have different user-key/app-id if the app needs to access multiple services. I thought we might have issues since the user-key/app-id is used as an identifier to find the app. I double checked the API doc for AuthRep and it seems the service id is also passed along with the user-key / app-id. Do you confirm that different apps that uses different services can have the same user-key / app-id ?
I agree on the idea that the policy should be minimal and do only one thing.
Regarding the customer need [1], I wanted to let the customer have a mix of usual user-keys and certificates. But for need [2] it would definitely makes more sense to only set the user-key/app-id with the certificate chosen identification data.
Also for need [1], since I allowed a mix of usual user-keys and certificates, I had to make sure that someone would not pass an HTTP header with a chosen user-key identifying another application (since certificate data are considered public, one could generate the user-key / app-id). That's why I had to check for that case.
So, to support use case [1] and [2], we could split this policy in two:
A. one that checks if the client authenticated with a certificate and if yes, use the configured identification data to generate and set the credentials
B. one that does surface checks on the provided credentials (ensure that user-key / app-id matches a certain pattern)
For use case [1], we would need first policy B followed by policy A.
For use case [2], we would need first a policy that enforces the uses of a TLS client certificate (require_tls_certificate.lua in #607) followed by policy A
Finally, I used the openssl library to properly decode the subject DN of the certificate since parsing DN as a string is very complicated to get right and error prone. There are a lot of corner cases / quoting / encoding issues, etc.
And I wanted to allow the customer to compute the identification data by himself (so that the custom user-key / app-id could be computed externally and set automatically through the 3scale APIs) so that means having a reliable mechanism for extracting data from the certificate.
So if I try to sum up the remaining work:

split the policy in two as described earlier
make them configurable
handle other credential types (app-id / user-key)
handle other credential locations (query-string / headers)
use the suggested libraries (resty.sha1 / ffi)
remove the service id from the identification data

Last question: do we set the credentials by manipulating the request (adding headers / query_string) as I did or do you planned to have more formal representation of the credentials (set a context variable ?) that could be read/written by policies ?
Thanks again for your feedback.

@nmasse-itix user_id/app_id do not have to be unique across services in AMP deployment. This is not true on SaaS where they have to be unique. But at some point we could lift this constraint everywhere.
Definitely get that for [1] you need a mix of certs and tokens. And for [2] you don't want to provide fallback but rather cert be the only auth option. This could just a configuration option.
The detail how to exactly provide credentials fallback / override is a task for further exploration (policy context, setting header/param, ...). But more on that later.
I understand the concern of verifying the commonName against the user_key/app_id.
Basically none of the public information in the certificate can be used as user_key/app_key.
I guess what we want to do is the app_id+app_key auth:
If the client certificate is valid take the commonName/serialNumber and use it as app_id and authenticate with 3scale backend without app_key.
If that would not be possible then we could try to use the OAuth2 API that allows to lookup app_key for any app_id. Then APIcast would cache the app_key and use for authrep.
Otherwise require app_id+app_key in the request.
I think this could be just simple configuration option that would terminate the request if the client certificate is not valid (for case [2]). We are still experimenting with what is better to split and what is better to keep together, but I guess the rule could be: "can it be used standalone". As for the "B" policy I think it should not be needed at all.
I have no preference whether to use OpenSSL as FFI or write pure Lua RFC 2253 parser. If going for the pure Lua there is https://github.com/pygy/LuLPeg that might be help and some examples how to use lpeg: https://github.com/daurnimator/lpeg_patterns. Do you have any example of a cert with complicated metadata? To me it seems similar to other formats and might not be that hard to parse in Lua.
And how to define the credentials. I'm not sure. I guess over time we will definitely want to use the context. But maybe for now it might be easier to change the request. Right now it actually might be pretty hard even to just replace extracting credentials.  Easiest option might be to override service.extract_credentials.  Suggestion welcome. This will require some prototyping various versions and then deciding what is the best approach.
For prototyping I'd go with changing https://github.com/3scale/apicast/blob/1bfd8b791ca2bcf85ddaf481e8a9f42b6285445a/gateway/src/apicast/proxy.lua#L268
into:
local credentials, err
if context.credentials then
  credentials = context.credentials
else
  credentials, err = service:extract_credentials()
end

Thank you so much! This is great 👍

Here is FFI way to get commonName from PEM cert:
local ssl = require('ngx.ssl')
local pem = [[-----BEGIN CERTIFICATE-----
MIIBRzCB7gIJAPHi8uNGM8wDMAoGCCqGSM49BAMCMCwxFjAUBgNVBAoMDVRlc3Q6
OkFQSWNhc3QxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0xODA2MDUwOTQ0MjRaFw0y
ODA2MDIwOTQ0MjRaMCwxFjAUBgNVBAoMDVRlc3Q6OkFQSWNhc3QxEjAQBgNVBAMM
CWxvY2FsaG9zdDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABI3IZUvpJsaQbiLy
/yfthJDd/+BIaKzAbgMAimth4ePOi3a/YICwsHyq6sBxbgvMeTwxNJIHpe3td4tB
VZ5Wr10wCgYIKoZIzj0EAwIDSAAwRQIhAPRkfbxowt0H7p5xZYpwoMKanUXz9eKQ
0sGkOw+TqqGXAiAMKJRqtjnCF2LIjGygHG6BlgjM4NgIMDHteZPEr4qEmw==
-----END CERTIFICATE-----]]

local chain = ssl.parse_pem_cert(pem)

local ffi = require "ffi"

ffi.load("ssl", true)
ffi.load("crypto", true)

ffi.cdef([[
typedef struct stack_st OPENSSL_STACK;

int OPENSSL_sk_num(const OPENSSL_STACK *);
void *OPENSSL_sk_value(const OPENSSL_STACK *, int);

typedef void X509_NAME;
typedef void X509_NAME_ENTRY;
typedef void X509;
typedef void ASN1_STRING;

X509_NAME *X509_get_subject_name(const X509 *x);
int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos);

int X509_NAME_entry_count(const X509_NAME *name);
X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc);
ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne);
unsigned char * ASN1_STRING_data(ASN1_STRING *x);

]])

local C = ffi.C
local n = C.OPENSSL_sk_num(chain)

print('certifictes in chain: ', n)

local NID_commonName = 13

for i=0, n-1 do
	local crt = C.OPENSSL_sk_value(chain, i)
	local nm = C.X509_get_subject_name(crt)

	local lastpos = -1;
	local entry, data, str

 	while true do
		lastpos = C.X509_NAME_get_index_by_NID(nm, NID_commonName, lastpos);
		if lastpos == -1 then break end
		entry = C.X509_NAME_get_entry(nm, lastpos);
		data = C.X509_NAME_ENTRY_get_data(entry);
		str = C.ASN1_STRING_data(data);
		print('str: ', ffi.string(str))
	end
end

BTW https://zakird.com/2013/10/13/certificate-parsing-with-openssl is very nice article and has plenty of examples of common operations.

@nmasse-itix would be good to make a summary into a todo list of what we want to achieve here and tick off items that are done.

[ ] Listen on HTTPS (https://github.com/3scale/apicast/pull/622)
[ ] Configuration options for client certificates
[ ] Define more steps


docs(store): add comment to describe $dispose would not clean up the state in pinia.state

Close #1821


Will OpenRLHF handle gradient_accumulation_steps with loss?

It seems that ds_config does not provide gradient_accumulation_steps for the engine initialization。
Is there any following steps handle the case where gradient_accumulation_steps > 1?
https://github.com/OpenRLHF/OpenRLHF/blob/46f2e69b67d5605f5032fe6160440b2a2b0f05ee/openrlhf/utils/deepspeed.py#L185-L203
https://github.com/microsoft/DeepSpeed/blob/9b7fc5452471392b0f58844219fcfdd14a9cdc77/deepspeed/runtime/engine.py#L856

It was set by train_batch_size  / micro_train_batch_size
https://github.com/OpenRLHF/OpenRLHF/blob/46f2e69b67d5605f5032fe6160440b2a2b0f05ee/openrlhf/utils/deepspeed.py#L198

It was set by train_batch_size / micro_train_batch_size
https://github.com/OpenRLHF/OpenRLHF/blob/46f2e69b67d5605f5032fe6160440b2a2b0f05ee/openrlhf/utils/deepspeed.py#L198

Thanks for the comment.
I try to call and print engine.gradient_accumulation_steps() . If I do not set ds_config["gradient_accumulation_steps"], there is nothing. If I set ds_config["gradient_accumulation_steps"], I get a clear printing of gradient_accumulation_steps.
https://github.com/microsoft/DeepSpeed/blob/9b7fc5452471392b0f58844219fcfdd14a9cdc77/deepspeed/runtime/engine.py#L856-L857
I check DeepSpeedEngine.set_train_batch_size(), it will set gradient_accumulation_steps according to train_micro_batch_size_per_gpu, but I do not find where it is called.
https://github.com/microsoft/DeepSpeed/blob/9b7fc5452471392b0f58844219fcfdd14a9cdc77/deepspeed/runtime/engine.py#L455-L471
Could you please provide more information?

See here: https://www.deepspeed.ai/docs/config-json/

Thank you.


ERROR: No bundle URL present.

Environment
react-native -v:12.3.6(npx)
npm ls<EMAIL_ADDRESS>node -v:v21.7.2
npm -v:10.5.0
yarn --version:1.22.22
xcodebuild -version:Xcode 15.3 Build version 15E204a

Steps to reproduce the bug
Do this getting started.
https://microsoft.github.io/react-native-windows/docs/rnm-getting-started
Before npx react-native run-macos, you should run cd macos && pod install.
I cannot run app without this step.
Expected Behavior
Launch application and show ui same as iOS.
Actual Behavior

Reproducible Demo
src.zip
Full size is over 25MB.
So this is a sample deleted this:

macos/Pod

you can get with: cd macos && pod install

node_module

you can get with: yarn install

Additional context
I tryed what this comment telling, but I cannot launch app.
https://github.com/microsoft/react-native-macos/issues/400#issuecomment-632348718
First, --use-react-native-macos has occured not found error.
error messeage: error: unknown option '--use-react-native-macos'
So I  removed 👆 option and  run this: node node_modules/react-native-macos/local-cli/cli.js bundle --entry-file index.js --platform macos --bundle-output MyApp.jsbundle
But same error has occured.

Yeah that option is deprecated / removed so we should update the docs.
Does your app work if you run a metro server locally (I.e run 'npx react-native start' from a terminal while the app is running)?

@Saadnajmi
I'm sorry for late message.
iOS App is work. but macOS App is not work.
To begin with, when I run npx react-native start, I don't see the macOS startup options.
Only "reload the app", "open developer menu", "run on iOS", "run on Android".

@neko3cs The macOS startup options won't show, but if you click "Reload" in the Redbox, it should still properly reload the bundle

@Saadnajmi
I think We have difference in perception. The image of section "Actual Behavior" is what running "npx react-native run-macos", not "npx react-native start". Both of that commands behave differently.

npx react-native start

Currently, executing npx react-native run-macos in version 0.73.0 does indeed result in the issue of "No bundle URL present." However, you can first run npx react-native start in one terminal to manually start the local Metro server, and then execute npx react-native run-macos to start the macOS application.

@Saadnajmi I think We have difference in perception. The image of section "Actual Behavior" is what running "npx react-native run-macos", not "npx react-native start". Both of that commands behave differently.

Currently, executing npx react-native run-macos in version 0.73.0 does indeed result in the issue of "No bundle URL present." However, you can first run npx react-native start in one terminal to manually start the local Metro server, and then execute npx react-native run-macos to start the macOS application.

@bear-ai Thanks, yes I think run-macos is broken atm, I want to replace it with https://github.com/react-native-community/cli/tree/main/packages/cli-platform-apple , perhaps with the 0.74 release. I'm glad we found a workaround!

Yeeeeeaaaaaah!!! I'm happy to lauch my app!
@Saadnajmi @bear-ei Thank you so much for your helping!
I ran metro server on background(npx react-native start on other terminal), and I ran npx react-native run-macos.
So app is launched.
I hope to fix this problem. Is this a Metro server issue?
Should I open an Issue in the Repository?

also having this issue

solution of @bear-ei worked in 0.71.0, which I new project by referring the official document.
But if I new a project with latest version(0.76.5) by command: npx react-native@latest init test2, following error occured:
✔ Downloading template
✔ Copying template
✔ Processing template
✔ Installing dependencies
✔ Do you want to install CocoaPods now? Only needed if you run your project in Xcode directly … yes
✔ Installing Ruby Gems
✖ Installing CocoaPods dependencies with New Architecture (this may take a few minutes)
error   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 23.3M  100 23.3M    0     0   368k      0  0:01:04  0:01:04 --:--:--  371k
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 16.3M  100 16.3M    0     0   365k      0  0:00:45  0:00:45 --:--:--  369k

[!] [Codegen] warn: using experimental new codegen integration
error Installing Cocoapods failed. This doesn't affect project initialization and you can safely proceed. However, you will need to install Cocoapods manually when running iOS, follow additional steps in "Run instructions for iOS" section.

Error: Looks like your iOS environment is not properly set. Please go to https://reactnative.dev/docs/environment-setup?os=macos&platform=ios&guide=native and follow the React Native CLI QuickStart guide for macOS and iOS.

Installing Cocoapods failed. This doesn't affect project initialization and you can safely proceed. However, you will need to install Cocoapods manually when running iOS, follow additional steps in "Run instructions for iOS" section

I think that for questions related to react-native-cli, you should refer to the main branch of react native. Because the error message clearly mentions that you are using react-native-cli to initialize a react native project. At this stage, it has nothing to do with react-native-macos currently. "Installing Cocoapods failed" usually occurs due to problems with your network (such as using a VPN in a specific region) or the configuration of your local development environment.

yeah, fixed it by change directory into the 'ios' , run command bundle install and bundle exec pod install, and then change to app project directory, init react native macos. Thanks @bear-ei


Link to EFO site appears to be broken

Link on this page
specifically
Sex (any child term of EFO_0000695) {http://www.ebi.ac.uk/efo/EFO_0000695}
does not render

It does, thanks for letting us know

There is now a pull request for the fix
https://github.com/FAANG/faang-metadata/pull/11
Please do feel free to comment on the fix and if it is appropriate

@davidrichardson can you resolve this if it is correct

Resolved.


Processes do not send output to task terminal until they are finished

The stream of output that some tasks produce, while they are running (e.g., terraform apply), is not displayed in a corresponding task terminal. In this example, that means, that the user does not get any feedback from the process until the task is finished.
Is there a possibility to enable this with overseer?
On another note, what do you think about external task runners, e.g., another tmux or kitty tab?

Overseer is just using the normal Neovim terminal. If there's no output in the terminal, that means there's no output from the process (unless there's a bug in libvterm or Neovim). Do you see anything different if you run the command in your shell versus in Neovim :terminal?
In general, I don't think that other task runners (internally referred to as "strategy") are a good idea. A lot of the value of overseer is built on top of tightly controlling the running processes and being able to handle the output of those processes. That said, you can create your own strategy that uses anything under the hood, as long as it conforms to the expected interface.

It was a mistake on my side, I misremembered how the output works, or they changed something recently. So the issue is obsolete.
That strategy part seems interesting, I will take a look. Maybe I should just use a nvim tab instead of a tmux tab, as I like tabs more than splits, for long-running tasks or debug logs that run in the background and only occasionally need a look.

If you're thinking of tabs vs splits, you don't need to make a new strategy. The default terminal strategy runs the task in a terminal buffer, and you can open that wherever you want (tab, split, float, etc). There are already actions for opening the terminal in a split or float, but it would be easy to add another one to open the terminal in a new tab instead.
https://github.com/stevearc/overseer.nvim/blob/c17a27821396d76d1ac5759ccefaa000f10d534d/lua/overseer/task_list/actions.lua#L133-L144

That's pretty neat and yields (with some slight modification) exactly what I want: the task running in a background nvim tab:
["open tab (background)"] = {
  desc = "open terminal in a new tab",
  condition = function(task)
    local bufnr = task:get_bufnr()
    return bufnr and vim.api.nvim_buf_is_valid(bufnr)
  end,
  run = function(task)
    local t = vim.api.nvim_get_current_tabpage()
    vim.cmd([[tabnew]])
    vim.api.nvim_win_set_buf(0, task:get_bufnr())
    vim.api.nvim_set_current_tabpage(t)
  end,
},

Thanks!

Great! And in case you didn't find it yet, the Actions section of the README explains how to easily add your own custom actions (as opposed to modifying the overseer source)


feat: add developer links and bottom image to AboutModal

I added GitHub links to developer names and included a bottom-right image (modal.png) in the modal. Also, I adjusted font sizes and modal layout for better readability.
Please check it!!

I checked it! It looks much better than before. Thank you :)


Add an option to move BSS segment into PSRAM (CON-1382)

I am currently working on freeing up internal memory. When esp-matter is configured to support 100 dynamic endpoints (CONFIG_ESP_MATTER_MAX_DYNAMIC_ENDPOINT_COUNT=100), the BSS section of libesp_matter.a consumes nearly 60 KB of internal memory. I measured that each endpoint allocates approximately 330 bytes of static, uninitialized, internal memory (BSS). This means that almost 30 KB are occupied by default, with an additional 30 KB for the 100 endpoints.
There is a menuconfig option, CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY, which moves some BSS segments (lwip, net80211, pp, bt) into PSRAM. According to the documentation here and here, the most elegant solution to reduce the internal memory footprint would be to move the esp-matter component's BSS segment into PSRAM as well.
I believe that for boards with PSRAM, this option could significantly free up internal memory and help reduce the large footprint of esp-matter. Could you provide some guidelines on how to move esp-matter's BSS segment into PSRAM?
Thank you!

@jzwyssig can you please try this linker.lf file (https://github.com/espressif/esp-matter/blob/main/examples/all_device_types_app/main/linker.lf), this places the BSS of libCHIP.a and libesp_matter.a into external RAM when CONFIG_ ESP_ALLOW_BSS_SEG_EXTERNAL_MEMORY option is enabled.
Please drop this file in your main component. Then you will need to make these minor changes to main/CMakeLists.txt...
https://github.com/espressif/esp-matter/blob/7d3ec1ec981a77280d4b5c246a6ace4e57df4a47/examples/all_device_types_app/main/CMakeLists.txt#L3 and https://github.com/espressif/esp-matter/blob/7d3ec1ec981a77280d4b5c246a6ace4e57df4a47/examples/all_device_types_app/main/CMakeLists.txt#L15
In the mean time I'll try to add these under CONFIG_ESP_ALLOW_BSS_SEG_EXTERNAL_MEMORY in esp-matter and chip component, so that the changes are streamlined.

Thank you @shubhamdp for the fast reply, it works perfecty! This really is a game changer. :-)


Laravel 5

I think this package is not compatible with L5 yet. Do you plan to update?

+1 Great package! I'd also love to see this updated for L5.

+1 L5. Thanks!

Hey guys, sorry for the delay in replying.  It could definitely use an update and rewrite... It wouldn't be too complicated, but I haven't been using firebase in any projects as of late instead opting for my own sockets.io-based solution for event streams...
I'll try to create an L5 branch this summer as soon as I have a free moment, since this seems to be useful for enough people to make it worthwhile.  Thanks for the patience, and sorry it'll take so long!

Hi @j42! If you could create the L5 branch and give me a bit of feedback, I'd like to add support for L5 for this package.
What do you think? :)

adding L5 support shortly -- stay tuned

thnx lots for the efforts @j42 we are still waiting for the updates on L5

Is Laravel 5 still on? I would love to see this becoming a real thing :)

+1 Would even pay for it :) Any chance to see an update for L5 anytime soon?

is it available for laravel 5 now?


Ignore unkown hooks

Fixes hook after this commit to dehydrated: https://github.com/lukas2511/dehydrated/commit/9ebab3e026569e79971fd7be14c522b22025150d#diff-f8a3fd80bfeb8e8456d63862cb71da83
Without this fix dehydrated will error out:
 + CloudFlare hook executing: h03v/NxKh5XWYVoZxDl7yg==
Traceback (most recent call last):
  File "/etc/dehydrated/hooks/cloudflare/hook.py", line 206, in <module>
    main(sys.argv[1:])
  File "/etc/dehydrated/hooks/cloudflare/hook.py", line 202, in main
    ops[argv[0]](argv[1:])
KeyError: 'h03v/NxKh5XWYVoZxDl7yg=='

Fixes #46


'latest' tag for versions of Xcode

Certain wotkflows work off of the 'latest' stable version of Xcode. It would be nice to be able to specify 'latest' for the version property.

the command_line_tools resource supports this, but xcode still does not.

Given how complex determining the "latest" Xcode actually turned out to be this WWDC season, I think I'm putting this feature outside the scope of this resource. There were instances where we had betas of 11.0 available that were "newer" (i.e., released most recently) than betas of 11.1, despite 11.1 being "later" version-wise. I'd rather those decisions be declared explicitly.
There is an exact copy of this feature request on the xcode-install gem (https://github.com/xcpretty/xcode-install/issues/344), which would likely deal with the same complexity, but I'll defer to them to implement it or not.


Unclear how to configure direct routing resource account in non hybrid scenario

Unclear how to add a Direct Routing based endpoint. It says to use New-CsHybridApplicationEndpoint but is it considered hybrid to use direct routing when it isn't a hybrid deployment?
Can you put in a Direct Routing specific example.

https://docs.microsoft.com/en-us/microsoftteams/manage-resource-accounts

@officedocsbot assign @scanum

@scanum There is a docs linked issue that this could be merged with #2021

@radderz - thank you for submitting feedback.
I think the best way forward is if you open a service ticket in your tenant so this can get resolved ASAP. Based on the outcome let me know if it is something that can be called out in the docs.
Please follow this link to contact support for business products:  https://docs.microsoft.com/office365/admin/contact-support-for-business-products
Please keep us posted here on the resolution so we can feed whatever information you discover into the content.

@officedocsbot close


PHPUnit setup and teardown methods should be protected

What about fixing PHPUnit setup() and teardown() methods to be protected when they are public? That's a common mistake and would be nice to have a fixed for that.

Would be nice to fixer.
How would the detection if we are fixing a utest class look like (as both methods might be used in other classes as well);

must be method of a utest class
class is a likely to be a utest class if declared in a namespace that contains test; or
class extends \PHPUnit_Framework_TestCase; or
or class extends PHPUnit\Framework\TestCase; or
class name ends with Test

Still risky fixer as all tests would not be fool proof, wonder if others have an idea to do the detection better :)

Not worth the effort. Only a perfectionist would care about the difference; it has no bearing on functionality whatsoever.

actually we had same issue and had to fix it.
I would simplify check - *Test(?:Case)? in name or parent class.

While you're at it, rename setup to setUp and teardown to tearDown.


Terminal | Ctrl + Backspace

Can we have an option to be able to delete left words in the vscode integrated terminal by Ctrl + Backspace ? In the windows shell it doesn't work. I know this might not a priority but it's frustrating not being able to do so.
I know there's a current feature request open for this, but we can't comment of give any feedbacks about it. Any idea when would this be implemented or how to do it differently on Windows?

@AllElbows Ctrl+Left/Right Arrows does work for me

If the shell accepts something to delete a word to the left you can make a keybinding to send it:
{
    "key": "ctrl+backspace",
    "command": "workbench.action.terminal.sendSequence",
    "when": "terminalFocus",
    "args": {
        "text": "something"
    }
}

This would be the best VS Code core could do as well as, just sending stuff to the shell. @TylerLeonhardt there's nothing we can send to powershell for this right?

In PSReadLine we added additional keybinding for VS Code:
https://github.com/PowerShell/PSReadLine/blob/ebfe4ce0db94d7dc507c87e412b747def5a1c6e6/PSReadLine/KeyBindings.cs#L232-L235
So as long as you have a newer version of PSReadLine, Ctrl+Backspace should "just work".
Which version of PSReadLine do you have?
In PowerShell 6+:
Get-Module PSReadLine

In Windows PowerShell:
# Run both
Get-Module PSReadLine
Get-Module PSReadLine | % { $_.PrivateData.PSData }

If you don't have the 2.0.0 stable version of PSReadLine, please follow these steps to update:
https://github.com/PowerShell/PSReadLine#upgrading
Then this should "just work"

Now for Ctrl+Arrow keys, I'm not sure how VS Code sends those to the shell. @Tyriar do you know?

Doesn't work for me?

You can see what gets sent by enabling escape sequence logging: https://github.com/microsoft/vscode/wiki/Terminal-Issues#enabling-escape-sequence-logging

Note for ctrl+backspace there is this default keybinding:
{ "key": "ctrl+backspace",        "command": "workbench.action.terminal.deleteWordLeft",
	"when": "terminalFocus" },

This binds the same as ctrl+w:
https://github.com/microsoft/vscode/blob/9fea64a934a9c00f7b38ef2519baaa188bcb2567/src/vs/workbench/contrib/terminal/browser/terminalActions.ts#L196-L197

Updating to PowerShell 7 fixes the issue for me 🎉

Thanks it does work now!


[enhancement] support for invalidate

it would be amazing feature if ttlcache would additionally support invalidation of a given cache entry besides the time based expiration.
invalidation could be sync or async (depending of a boolean flag). upon invalidation, the expiration callback could be executed.

After v2 and #31 i will have to re-evaluate this. The API call is easy, i'm not sure if the heap removal and additional sorting are easy to do.

This was more of a bug than a feature. It's also available for testing on the v2 branch.


Port FLEXWebViewController to WKWebview

Overview
Upgrading UIWebviews to WKWebViews.
Details
Basically the code changes that are in a PR on FLEX's main repo.
Related PRs
dragons3d PR
pgengine PR
FLEX PR

Same as base PR: @KLpocketgems primary, @juan-pg secondary


Add typeid-generator extension

Description

Screencast

Checklist

[ ] I read the extension guidelines
[ ] I read the documentation about publishing
[ ] I ran npm run build and tested this distribution build in Raycast
[ ] I checked that files in the assets folder are used by the extension itself
[ ] I checked that assets used by the README are placed outside of the metadata folder

Hi 👋
I think this is already a part of https://www.raycast.com/jmaeso/uuid-generator, can you check that one out?

Hi 👋
I think this is already a part of https://www.raycast.com/jmaeso/uuid-generator, can you check that one out?

Hey, The generator part definitely is, but this extension also add's the ability to convert between typeid and uuid. Which uuid-generator does not. I'm not sure that fits within that extension. But let me know if you think I should propose these additional features there instead

What do you think @jmaeso 🙂

Hi 👋 !
For uuid generator extension, I already manifested in the past that the main goal should be to keep the uuid generation as simple as posible within minimal keystrokes required. Extra functionalities could be added there.
This being said, TIL about typeid, and not sure how that's related to uuids.
Is that usecase really frequent and I just don't know it? Then might have a fit to my extension
Is that usecase rare and specific for very few people? Then might be better to isolate it
Since I can't decide if I miss some knowledge vs that knowledge being "rare" I can't take a decision.
Hope my 5 cents are helpful

Note: I see now this typeID <--> uuid conversion is based on UUIDv7 not any UUID version
Note2: A good explanation on the topic: https://github.com/jetify-com/typeid
Note3: FYI The icon used on this extension is a company logo (jetify) and not mentioned anywhere, not sure if that's important or not

Could you answer here @jwalton9


Fixing ElementName binding sin TransitioningContent

Fixing name scope issue that would cause ElementName bindings to fail when used inside of a TransitioningContentBase.
Fixes #950

Is this fixed? I'am new to GitHub

@proxact this is a pull request. So it is the first step into getting it fixed. The general flow looks like this:

Issue created in github.
Fix created in a pull request (this is the step we are currently at).
Pull request is reviewed and merged into the repository (this requires @ButchersBoy to do it)
NuGet package created with the latest code that contains the fix.

If you want to compile the library manually you can always check out my branch and build it manually.


Added Strong Pass Extension

Description
Strong Password Generator aims to solve the problem of users needing to create strong, unique passwords for their online accounts by providing an easy-to-use tool for generating secure and strong passwords.
Fixes:  #197
Type of change

[ ] Bug fix (non-breaking change which fixes an issue)
[X] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update

Checklist:

[X] I have made this from my own
[ ] I have taken help from some online resourses
[X] My code follows the style guidelines of this project
[X] I have performed a self-review of my own code
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[X] My changes generate no new warnings

@Sulagna-Dutta-Roy Please review my PR and merge it if it is good to go

@Sulagna-Dutta-Roy I guess you were instructed to only change labels for workflows not these issues

Yeah, I'm working on this. Thanks for the patience.
It's messed because of some new PRs

@Sulagna-Dutta-Roy mam,
I know you have recieved instructions so you have removed level3/level2 label but you can assign me 'level1' label for workflow PRs
"It has been communicated before that dont give level more than 1 or no levels." This was the message conveyed so according to it, 'level1' label can be granted right?
The final decision is still yours but i just reminded you
Thank you!

Kindly check again 🙏🙏


Handling of casts to nullable type differs between 2.1.0-preview2 and 2.0.0

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;

class Program
{
    static void Main(string[] args)
    {
        using (var db = new Context())
        {
            db.Database.EnsureDeleted();
            db.Database.EnsureCreated();

            db.Entities.Add(new Main());
            db.SaveChanges();

            var result = db
                .Entities
                .Select(e => new { DependentId = (int?)e.Dependent.FirstOrDefault().Id })
                .First();
            Console.WriteLine(result.DependentId?.ToString() ?? "null");
        }
    }
}

public class Context : DbContext
{
    public DbSet<Main> Entities { get; set; }
    public DbSet<Dependent> Values { get; set; }
}

public class Main
{
    public int Id { get; set; }
    public ICollection<Dependent> Dependent { get; set; }
}

public class Dependent
{
    public int Id { get; set; }
    public int MainId { get; set; }
    public Main Main { get; set; }
}

This query returns null on EF Core 2.0.2, but 0 on 2.1.0-preview2. Is this breaking change intentional?

The change was intentional and is a result of fixing https://github.com/aspnet/EntityFrameworkCore/issues/10294

This is really unfortunate. Now we're forced to write something like
            var result = db
                .Entities
                .Select(e => new
                {
                    FirstDependentCreated = e.Dependent.Any()
                        ? e.Dependent.Select(d => d.Created).OrderBy(d => d).FirstOrDefault()
                        : (DateTime?)null,
                })
                .First();

And the generated SQL is long and suboptimal, making two scans on the dependent table:
      SELECT CASE
          WHEN (
              SELECT CASE
                  WHEN EXISTS (
                      SELECT 1
                      FROM "Values" AS "v"
                      WHERE "e"."Id" = "v"."MainId")
                  THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT)
              END
          ) = 1
          THEN COALESCE((
              SELECT "d"."Created"
              FROM "Values" AS "d"
              WHERE "e"."Id" = "d"."MainId"
              ORDER BY "d"."Created"
              LIMIT 1
          ), '0001-01-01 00:00:00') ELSE NULL
      END AS "FirstDependentCreated"
      FROM "Entities" AS "e"
      LIMIT 1

For comparison, 2.0 version generates this nice and simple query:
      SELECT (
          SELECT "d"."Created"
          FROM "Values" AS "d"
          WHERE "e"."Id" = "d"."MainId"
          ORDER BY "d"."Created"
          LIMIT 1
      ) AS "FirstDependentCreated"
      FROM "Entities" AS "e"
      LIMIT 1

Clearing milestone to get a better understanding of this in triage.

@maumar Indeed, this works, and looks like it covers all cases where a single field from a dependent entity is selected. Thanks for the tip.

fixed in 542de5520a48b5acd6d6219f73675984059daaa0

@mbashov we ended up reverting the behavior to the 2.0, i.e.
customers.Select(c => (int?)c.Orders.Where(o => false).FirstOrDefault().Id) will now return collection of nulls
however:
customers.Select(c => c.Orders.Where(o => false).Select(o => o.Id).FirstOrDefault()) will produce collection of 0s


fix: Forward compatibility with unstructured-client

Address a few more compatibility issues in the upcoming 0.26.0 unstructured-client. All calls to s.general.partition will now require keyword args - see this PR for context.
While I'm in here, I extracted the SDK code to its own file, to be reused by the Partitioner and Chunker.
Testing
You can install the preview of the new SDK, and then run a pipeline with partitioning/chunking by API to hit both paths. If you try this on main, you'll see errors related to the positional args of the SDK, e.g. partition() takes 1 positional argument but 2 were given
pip install --pre -U unstructured-client
unstructured-ingest local --input-path $SAMPLE_DIR --output-dir local-ingest-output --num-processes 2 --partition-by-api --api-key $SERVERLESS_KEY --chunking-strategy=by_title --chunk-by-api --chunk-api-key $SERVERLESS_KEY

Probably want to ergnernate teh requirements file associated with this to pull in the latest version of the client when we test in CI: https://github.com/Unstructured-IO/unstructured-ingest/blob/main/requirements/remote/client.in

Also if this breaks how it uses the client with previous versions, you can also bump the constraint on that library in the client.in file.

Also if the client now supports async, we could also update the ingest library to use that rather than wrapping it in an event loop. I'll leave that up to you if it's something you want to tackle in this PR.

Also if the client now supports async, we could also update the ingest library to use that rather than wrapping it in an event loop. I'll leave that up to you if it's something you want to tackle in this PR.

We've got

@rbiseck3 I'm seeing ingest differences that shouldn't be related to this pr. Should I update the fixtures on this branch?

@awalker4 if the changes persist after rerunning the CI, then yes. That means we're getting different results from the api.

Looks like these final failures may be due to Astra changes. I'll bump the dependencies per here so we can see hopefully get everything green.

I think if you add the astrapy fix here: we will be in good shape.
https://github.com/Unstructured-IO/unstructured-ingest/pull/140

I think if you add the astrapy fix here: we will be in good shape. #140

Actually looks like dest tests passed...without it. ?


Bounds of walking area of the ants

I added the check_bounds_area method in the Simulation class to make sure the ants don't go beyond the canvas borders. When the window size is changed using the 'Size' button, this is automatically detected, and the ants' boundaries dynamically adjust to the new size.
When the canvas is zoomed out, it's hard to see exactly where the boundaries are. That's why I added the draw_bounds method in the SimulationWidget class to visually show the boundaries with a rectangle that has black edges.
However, there's a small problem: Sometimes the ants cross the boundaries before changing their direction to be back within the boundaries. This is especially noticeable when the Step_size is set large, like 15.

This is a minor problem that doesn't affect the functionality of the simulation. I will think about how to solve this problem. Your suggestions can help! But for now, this branch can be merged with the main if there are no other comments.

The problem was that the move() method in the Ant class directly overwrote the Ant.coordinates attribute, causing the check to occur only after the ant moved to the next position. The solution involved changing the structure of the move() method. Instead of directly overwriting the Ant.coordinates attribute, the method now returns the newly calculated position.
move(self):
        ...
        future_position = position + self.direction
        self.epoch += 1
        return tuple(future_position)

In the Simulation class, within the next_epoch method, the move() method of the Ant class is called. The return value, which is the anticipated future position, is stored in a variable named future_position. This future_position is then checked using the newly implemented method check_future_position. If the coordinates are outside the set boundaries, check_future_position adjusts them to lie exactly on the boundary. Only after this adjustment is the new position assigned to Ant.coordinates.
 def next_epoch(self):
     for colony in self.colonies:
         for ant in colony.ants:
             self.update_pheromone(ant)
             future_position = ant.move()
             adjusted_position = self.check_future_position(future_position)
             ant.coordinates = adjusted_position

When the window size is changed using the 'Size' button, the boundary automatically and dynamically adjusts to the new size.

To prevent the ants from permanently running into the edge, I have added that the direction is rotated by 180° with ant.direction *= -1.

Very good work @AlhaririAnas!

@Jonah-gr, I don't think we need ant.direction *= -1 because the ants should be allowed to move along the edge as they would in reality, instead of immediately changing their direction as soon as they reach the boundary.
So, when an ant reaches the boundary, it should autonomously decide which way to proceed from there, kind of 'randomly.' Do you see what I mean? 😅

Ah I see, that would probably be the most "natural" way. So if the ants are kept in too small a space with too high step size, they're likely to hang around the edge a lot. So good work! Then i will merge it now.

One more thing: why did you remove self.epoch += 1 from the ant.move method within ìf self.epoch == 0:`? So self.epoch remains permanently at 0, right?

@Jonah-gr Since self.epoch increments by one in each iteration (call) of the function, regardless of whether it's in the if or else block, it would be more efficient to move the increment of self.epoch to the end of the function (outside the if and else block). This way, self.epoch is uniformly and only once increased at the end of the function.
If there are any more questions or uncertainties, feel free to ask them. Otherwise, I have completed the development of this feature, and it can now be merged into the main branch. 😄

Ah, thank you. Now I have understood. Great job!


Discuss whether it makes sense to parametrize gnomAD resource paths

This would allow users to supply their own local paths of gnomAD resources to our standard Python library functions, rather than rely on the hard-coded cloud references (e.g., meta.ht()).
This would likely be a large effort to revise existing functions, but we could do this if we get several requests for this functionality.
See discussion here: https://discuss.hail.is/t/hail-utilities-for-gnomad-in-local-cluster/1790

broadinstitute/gnomad_methods#265 allows loading resources from different buckets / paths.


Improve v3.0 & fixs

fixs logs with threads
add interactive
add "--standelone" option
update bypass
increase sleep time

Hello @Erim32! Thanks for opening this PR. We checked the lines you've touched for PEP 8 issues, and found:

In the file BotTwitter/bot.py:

Line 28:23: E203 whitespace before ':'
Line 28:25: E261 at least two spaces before inline comment
Line 35:48: E261 at least two spaces before inline comment
Line 35:80: E501 line too long (96 > 79 characters)
Line 43:80: E501 line too long (123 > 79 characters)
Line 45:80: E501 line too long (113 > 79 characters)
Line 58:33: E203 whitespace before ','
Line 58:34: E231 missing whitespace after ','
Line 62:24: E261 at least two spaces before inline comment
Line 62:25: E262 inline comment should start with '# '
Line 65:80: E501 line too long (88 > 79 characters)
Line 66:80: E501 line too long (85 > 79 characters)
Line 73:13: E303 too many blank lines (2)
Line 77:80: E501 line too long (92 > 79 characters)
Line 78:80: E501 line too long (104 > 79 characters)
Line 78:100: E225 missing whitespace around operator
Line 79:80: E501 line too long (115 > 79 characters)
Line 81:80: E501 line too long (81 > 79 characters)
Line 84:80: E501 line too long (117 > 79 characters)
Line 87:39: E201 whitespace after '('
Line 87:80: E501 line too long (121 > 79 characters)
Line 87:122: W291 trailing whitespace
Line 88:33: E128 continuation line under-indented for visual indent
Line 88:80: E501 line too long (161 > 79 characters)
Line 89:42: E225 missing whitespace around operator
Line 89:80: E501 line too long (147 > 79 characters)
Line 90:42: E225 missing whitespace around operator
Line 90:80: E501 line too long (105 > 79 characters)
Line 91:42: E225 missing whitespace around operator
Line 91:80: E501 line too long (86 > 79 characters)
Line 91:83: E225 missing whitespace around operator
Line 92:42: E225 missing whitespace around operator
Line 92:80: E501 line too long (100 > 79 characters)
Line 92:97: E225 missing whitespace around operator
Line 93:42: E225 missing whitespace around operator
Line 93:80: E501 line too long (94 > 79 characters)
Line 94:42: E225 missing whitespace around operator
Line 94:80: E501 line too long (130 > 79 characters)
Line 94:127: E225 missing whitespace around operator
Line 95:42: E225 missing whitespace around operator
Line 97:41: E265 block comment should start with '# '
Line 97:80: E501 line too long (107 > 79 characters)
Line 98:41: E265 block comment should start with '# '
Line 99:42: E225 missing whitespace around operator
Line 99:80: E501 line too long (107 > 79 characters)
Line 100:25: E124 closing bracket does not match visual indentation
Line 103:39: E201 whitespace after '('
Line 103:80: E501 line too long (121 > 79 characters)
Line 104:33: E128 continuation line under-indented for visual indent
Line 104:80: E501 line too long (93 > 79 characters)
Line 112:5: E303 too many blank lines (2)
Line 113:80: E501 line too long (99 > 79 characters)
Line 114:80: E501 line too long (96 > 79 characters)
Line 119:80: E501 line too long (148 > 79 characters)
Line 119:123: E231 missing whitespace after ','
Line 122:80: E501 line too long (145 > 79 characters)
Line 133:1: W391 blank line at end of file

In the file BotTwitter/bypass_antibot.py:

Line 122:80: E501 line too long (84 > 79 characters)
Line 157:80: E501 line too long (102 > 79 characters)
Line 176:80: E501 line too long (89 > 79 characters)
Line 177:29: E127 continuation line over-indented for visual indent
Line 185:5: E265 block comment should start with '# '
Line 185:5: E303 too many blank lines (6)
Line 186:5: E301 expected 1 blank line, found 0
Line 191:13: E265 block comment should start with '# '
Line 193:13: E265 block comment should start with '# '
Line 196:13: E265 block comment should start with '# '
Line 200:80: E501 line too long (150 > 79 characters)
Line 202:21: E265 block comment should start with '# '
Line 207:25: E265 block comment should start with '# '
Line 207:80: E501 line too long (92 > 79 characters)
Line 210:25: E265 block comment should start with '# '
Line 215:21: E265 block comment should start with '# '
Line 230:80: E501 line too long (106 > 79 characters)
Line 234:40: W292 no newline at end of file

In the file BotTwitter/helpers.py:

Line 42:80: E501 line too long (105 > 79 characters)
Line 84:19: E225 missing whitespace around operator
Line 84:80: E501 line too long (88 > 79 characters)
Line 86:19: E225 missing whitespace around operator
Line 86:80: E501 line too long (92 > 79 characters)
Line 127:9: E265 block comment should start with '# '
Line 150:80: E501 line too long (89 > 79 characters)

In the file BotTwitter/manage_giveaway.py:

Line 102:80: E501 line too long (119 > 79 characters)
Line 103:38: W292 no newline at end of file


After render the images , there is a lot of position shift

we need to deal with the rendering effects of your images.

This will also trigger a large number of image renders, significantly occupying memory, causing oom


chore(react): update Codesandbox examples

Description
This update replaces parcel-bundler with react-scripts for all React Codesandbox examples. Additionally, it removes unused dependencies, files, and code. With the deprecation of parcel-bundler, the React Codesandbox examples builds were all failing, causing this action to fail.
Note: The react-scripts version being used is one major version behind and released ~1 year ago. There is an internal dependency error in the latest version (5.0.1) which is still open as a bug. None of the solutions presented in this discussion resolve the issue in our examples. Once this bug is resolved in the latest version, the examples can be updated to use them.

Changelog
New

adds Browserstack entries to package.json

Changed

replace parcel-bundler with react-scripts

Removed

unused dependencies, files, and imports

I tested a few locally and they all seem to be working, but none of them are coming through here: https://react-codesandbox.s3-web.us-east.cloud-object-storage.appdomain.cloud/deploy-previews/9130/index.html?

I tested a few locally and they all seem to be working, but none of them are coming through here

@ariellalgilmore Fixed!


Collaborative Discussion: Ensuring Authenticity and Safety of Tech Job Leads

Issue Description:
In our mission to provide a valuable resource hub for aspiring tech professionals, we've encountered significant challenges related to the authenticity and safety of job leads. Scammers and fraudulent listings prey on the vulnerability of job seekers, and we believe that by pooling our collective knowledge and experience, we can create a set of protocols that empower job seekers to navigate this landscape with confidence and security.
Challenges Faced:

Poor User Experience on Official Portals: Many official careers portals suffer from poor user experience, outdated listings, and accessibility issues that can deter job seekers from using them effectively.

Proliferation of Fake Listings: Fraudulent job listings on third-party platforms, especially those that mimic legitimate companies, make it challenging to distinguish genuine opportunities from scams.

Difficulty in Verification: Verifying the authenticity of job leads from lesser-known companies or startups can be challenging, often leading to uncertainty for job seekers.

Limited Access to Verified Information: Some legitimate job leads might not be available on official portals and instead are posted on engineers' profiles or platforms with varying degrees of trustworthiness.

Objective:
This issue serves as a platform for initiating an open and honest discussion among different stakeholders, including students, experienced job seekers, engineers, recruiters, and training and placement officers. Our aim is to collaboratively devise effective protocols that address these challenges and establish a safer environment for job seekers.
Proposed Discussion Topics:

Recognizing Red Flags: Sharing experiences and insights about common tactics used by scammers in the tech job search landscape.
Personal Experiences: Sharing anecdotes about encountering fraudulent job listings or phishing attempts.
Verification Best Practices: Discussing strategies and tools that can be used to verify the authenticity of job leads and company information.
Encouraging Regular Updates: Brainstorming ways to encourage legitimate companies to maintain updated and informative official careers portals.
Viable Validation Tools: Exploring the potential for tools or platforms that can provide validation and security checks for job listings.
Empowering Job Seekers: Crafting a comprehensive checklist or guide that job seekers can use to evaluate the legitimacy of job opportunities.

How to Contribute:
Please engage in this discussion by sharing your valuable thoughts, experiences, suggestions, and ideas in the comments section below. This discussion is open-ended and aims to leverage diverse perspectives to collectively create pragmatic and effective protocols.
Guidelines for Participation:

Respectful Dialogue: Maintain a respectful and constructive tone throughout the discussion.
Realistic Examples: Feel free to share real-world examples of your experiences while safeguarding any sensitive personal information.
Actionable Suggestions: Contribute actionable suggestions that can be realistically implemented to improve the authenticity and safety of job leads.
Supportive Interaction: Upvote or express agreement with comments that align with your own experiences and insights.

Important Note:
While the goal of this discussion is to foster a supportive and informed community, any protocols, guidelines, or recommendations discussed are for informational purposes only and should not be interpreted as official endorsements. Individual discretion and verification are strongly advised when pursuing job opportunities.
Together, let's create a safer and more trustworthy environment for tech job seekers by harnessing the power of collaboration and shared knowledge.

Unresolved and due to no further support the repo is being killed off

unresolved and as stated above this repo will be killed off due to no support.


[resource] Bedrock

It could be useful to add some Bedrock resources.
SDK go reference: https://docs.aws.amazon.com/sdk-for-go/api/service/bedrock/

:tada: This issue has been resolved in version 3.32.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Write after end on browserSync.reload

Hi, I am trying to get browserSync to work with a watch task for a Polymer app. Here is my gulp file:

function source() {
  return project.splitSource()
    .pipe(gulpif('**/*.html', html.lint())).on('end', log('Linted HTML'))
    .pipe(gulpif('**/*.html', html.minify())).on('end', log('Minified HTML'))

    .pipe(gulpif('**/*.js', javascript.minify())).on('end', log('Minified Javascript'))
      .pipe(gulpif('**/*.js', javascript.babelify())).on('end', log('Transpiled Javascript'))
      .pipe(gulpif('**/*.{gif,jpg,svg}', images.minify())).on('end', log('Minified Images'))

    .pipe(project.rejoin()); // Call rejoin when you're finished
}

function dependencies() {
  return project.splitDependencies()
    .pipe(project.rejoin());
}

gulp.task('default', gulp.series([
  clean.build,
  project.merge(source, dependencies),
  project.serviceWorker
]));

gulp.task('reload', function(){
  browserSync.reload();
} );

gulp.task('dev',  gulp.series(
  project.merge(source, dependencies)
 ));

gulp.task('browser-sync', function(){
  return new Promise(function(resolve){
    resolve( browserSync({
      port: 5000,
      notify: false,
      logPrefix: 'PSK',
      snippetOptions: {
        rule: {
          match: '',
          fn: function(snippet) {
            return snippet;
          }
        }
      },

      server: {
        baseDir: ['./'],
      }
    })
    )
  });
})
gulp.task('watch', function(){
  gulp.watch(['**/*.html'], gulp.series('dev','reload'));
  gulp.watch(['**/*.js'], gulp.series('dev', 'reload'));
});

gulp.task('serve',
  gulp.series(
      'dev',
      gulp.parallel('browser-sync','watch')), function(){
      return gulp.src('**/*.html', {passthrough:true})
    }
);

When I run gulp serve , the tasks complete and my app is served. As soon as I change the contents of a file, the watch runs the dev task and attempts to run the reload task, and thats where it crashes. Here is the command line messages for this entire process :
→ gulp serve
[08:53:43] Using gulpfile ~/Documents/Projects/unicef/etools-dashboard/gulpfile.js
[08:53:43] Starting 'serve'...
[08:53:43] Starting 'dev'...
[08:53:43] Starting 'output'...
[08:55:20] Linted HTML
[08:55:20] Minified HTML
[08:55:20] Minified CSS
[08:55:20] Minified Javascript
[08:55:20] Transpiled Javascript
[08:55:20] gulp-imagemin: Minified 511 images (saved 212 kB - 3.1%)
[08:55:20] Minified Images
[08:55:29] Finished 'output' after 1.75 min
[08:55:29] Finished 'dev' after 1.75 min
[08:55:29] Starting 'browser-sync'...
[08:55:29] Starting 'watch'...
[08:55:30] Finished 'browser-sync' after 551 ms
[PSK] Access URLs:
 --------------------------------------
       Local: http://localhost:5000
    External: http://<IP_ADDRESS>:5000
 --------------------------------------
          UI: http://localhost:3001
 UI External: http://<IP_ADDRESS>:3001
 --------------------------------------
[PSK] Serving files from: ./
[08:56:20] Starting 'dev'...
[08:56:20] Starting 'output'...
[08:56:20] Finished 'output' after 288 ms
[08:56:20] Finished 'dev' after 290 ms
[08:56:20] Starting 'reload'...
[PSK] Reloading Browsers...
Error: write after end
    at writeAfterEnd (_stream_writable.js:159:12)
    at StreamAnalyzer.Writable.write (_stream_writable.js:204:5)
    at PassThrough.ondata (/Users/Marko1/Documents/Projects/unicef/etools-dashboard/node_modules/merge-stream/node_modules/readable-stream/lib/_stream_readable.js:546:20)
    at emitOne (events.js:77:13)
    at PassThrough.emit (events.js:169:7)
    at readableAddChunk (/Users/Marko1/Documents/Projects/unicef/etools-dashboard/node_modules/merge-stream/node_modules/readable-stream/lib/_stream_readable.js:217:18)
    at PassThrough.Readable.push (/Users/Marko1/Documents/Projects/unicef/etools-dashboard/node_modules/merge-stream/node_modules/readable-stream/lib/_stream_readable.js:176:10)
    at PassThrough.Transform.push (/Users/Marko1/Documents/Projects/unicef/etools-dashboard/node_modules/merge-stream/node_modules/readable-stream/lib/_stream_transform.js:123:32)
    at afterTransform (/Users/Marko1/Documents/Projects/unicef/etools-dashboard/node_modules/merge-stream/node_modules/readable-stream/lib/_stream_transform.js:79:51)
    at TransformState.afterTransform (/Users/Marko1/Documents/Projects/unicef/etools-dashboard/node_modules/merge-stream/node_modules/readable-stream/lib/_stream_transform.js:58:12)
[08:56:21] The following tasks did not complete: serve, <parallel>, watch, <series>, reload
[08:56:21] Did you forget to signal async completion?

Any idea why the reload causes this to crash? I've googled this "write after end" and seems like the stream needs to be returned or async actions need an explicit done cb, but I'm not sure how to do that with gulp 4. Any advice would be of great help.

Support questions should be directed to StackOverflow.

@marko911 did you solve this? Is there a StackOverflow question for this?


Use SLF4J for logging

This repo started as part of https://github.com/gradle/native-platform where we did not want to introduce a dependency just for Java-side logging, so we opted to use JUL. But now we don't have to be part of native-platform, so we can change this, and just use SLF4J like the rest of gradle/gradle.
This could simplify the interactions between the native logging and Gradle's own logging system by skipping the JUL-to-SLF4J bridge.

➕ for this change.
We expect it will help us remedy an issue where we have a huge logging overhead.
We have seen INFO logs being printed on stderr without the --info flag set in Gradle.


Keep previous screen alive

My MainScreen always re-render when nagivateUp() from SettingsScreen
MainScreen > tap settings > render SettingsScreen > tap back > render MainScreen
what i want like this
MainScreen > tap settings > render SettingsScreen > tap back > goto MainScreen without re-render
it is possible to do that when using NavHost?

When you navigate to settings screen, your MainScreen composable leaves composition (because it is not showing). So when you navigate back, it has to render, but it's not "again" it's the first render because MainScreen was no longer rendering.
There is no way to "keep screens alive". What you do is use a ViewModel tied to the NavBackStackEntry and the ViewModel does stay alive in this case. So when you go back, all data needed to render the UI is ready (since it comes from the ViewModel which survived) but the rendering itself needs to happen of course :)


Please mark this repo as deprecated.

There hasn't been a commit here in a couple years. It seems like the spiritual successor is https://github.com/RustCrypto.

You could send a PR that changes the main README.md file.

The last time I sent a PR changing the README was one year ago tomorrow :-D
Which is fine, projects come and go, no worries. But this project has such a position in Google search results, that it might be nice to mark its status more clearly, one way or another.

Also crypto-hash.
And yes, please, merge that PR, so I immediately know that I need to look elsewhere.
Thanks

Note: Unless we hear otherwise, we are going to officially start tracking this crate as unmaintained in the RustSec Advisory Database:
https://github.com/RustSec/advisory-db/pull/181


Verify number of MCMC draws for dynare robustness

Looks like the code was doing for first order:
estimation(datafile = '../../data/rbc_1.csv', mode_file = 'rbc_mode.mat', order = 1, mh_nblocks = 1, mh_replic = 110000, mh_drop = 0.1, mh_jscale = 0.01, mode_compute = 0, mcmc_jumping_covariance = identity_matrix);

And for second order:
estimation(datafile = '../../data/rbc_2.csv', mode_file = 'rbc_mode.mat', order = 2, mh_nblocks = 1, mh_replic = 1250, mh_drop = 0.1, mode_compute = 0, mcmc_jumping_covariance = identity_matrix, number_of_particles = 20000, mh_jscale = 0.01);

Looks like the same as before, and no issues. Runtime may change relative to old figures due to execution variability, but current code will adjust labels for that.
Fine by me.


hypnotix: providers not saved to disk

Describe the bug
A newly added provider is not persisted to disk, which means that I need to add the provider each time I start.
Steps To Reproduce
Steps to reproduce the behavior:

Add new provider
Choose Type: Xtream API and fill in credentials, leave EPG empty
Use provider
Close program
Start hypnotix again, provider gone.

Expected behavior
The provider is persisted.
Additional context
Logs:
$ hypnotix                                                                                [6/4655]
Free-TV: 1047 channels, 57 groups, 0 series, 173 movies
Loading providers...
Free-TV: Getting playlist...
Free-TV: Checking playlist...
Free-TV: Loading channels...
Loading providers...
Free-TV: Downloading playlist...

(hypnotix.py:489633): dconf-WARNING **: 20:09:17.735: failed to commit changes to dconf: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name ca.desrt.dconf was not provided by any .service files
4194304 bytes
Free-TV: Checking playlist...
Free-TV: Loading channels...
Free-TV: 1047 channels, 57 groups, 0 series, 175 movies
XTREAM `New provider` Loading Channels
Loaded 117 Live Groups in 0.254 seconds
Loaded 12776 Live Streams in 1.027 seconds
Loaded 38 VOD Groups in 0.326 seconds
Loaded 21595 VOD Streams in 1.273 seconds
Loaded 11 Series Groups in 0.254 seconds
Loaded 4201 Series Streams in 1.414 seconds
 - Skipped 1 unprintable Series streams

(hypnotix.py:489633): dconf-WARNING **: 20:09:40.598: failed to commit changes to dconf: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name ca.desrt.dconf was not provided by any .service files
CHANNEL: '<CHANNEL>' (http://...)
Cannot load libcuda.so.1

Closed and then started:
$ hypnotix
Free-TV: 1047 channels, 57 groups, 0 series, 175 movies
Loading providers...
Free-TV: Getting playlist...
Free-TV: Checking playlist...
Free-TV: Loading channels...

Notify maintainers
@dotlambda @bobby285271
Metadata
Hypnotix version: 3.5
[user@system:~]$ nix-shell -p nix-info --run "nix-info -m"
 - system: `"x86_64-linux"`
 - host os: `Linux 6.1.38, NixOS, 23.11 (Tapir), 23.11pre503663.2de8efefb6c`
 - multi-user?: `yes`
 - sandbox: `yes`
 - version: `nix-env (Nix) 2.15.1`
 - channels(root): `"nixos"`
 - channels(thall): `"home-manager"`
 - nixpkgs: `/nix/var/nix/profiles/per-user/root/channels/nixos`

What desktop do you use? If you are not using GNOME / GNOME-adjacent desktop (e.g. Cinnamon), do you have programs.dconf.enable = true; set?

What desktop do you use? If you are not using GNOME / GNOME-adjacent desktop (e.g. Cinnamon), do you have programs.dconf.enable = true; set?

KDE Plasma. I had not, adding that solved the issue, thanks!


Verify that clew correctly hides appliance types which have VMTs only on inactive tenants

Fixes #190

This had already been fixed but I added a test which checks for the error condition.

:+1:


inherit the mapper of query

I still think that the place to fix it is https://github.com/scylladb/gocqlx/pull/93/files#diff-5db579516f464ed50b8104cdafd2763aR47

change Iter() to accept mapper?

Fixed with #124


Revert "Add must-gather-service enhancement"

Reverts konveyor/enhancements#36

@aufi I clicked the wrong button


WFLY-20045 Upgrade OpenTelemetry from 1.39.1 to 1.42.1 and SR OpenTelemetry to 2.8.2

Resolves
https://issues.redhat.com/browse/WFLY-20045 Upgrade OpenTelemetry from 1.39.1 to 1.42.1 and SR OpenTelemetry to 2.8.2
https://issues.redhat.com/browse/WFLY-20043 SR OpenTelemetry doesn't work with security manager
https://issues.redhat.com/browse/WFLY-20044 SR OpenTelemetry leaks anyone access to Thread.currentThread().getContextClassLoader()

The release is now available in central - https://central.sonatype.com/artifact/io.smallrye.opentelemetry/smallrye-opentelemetry-cdi/versions - thanks @jasondlee - so converting to regular PR now.

Thanks @rhusar and @jasondlee


code format cause

If the < template > tag is followed by a comment<! -->,
Repeated running of volar's code format will cause the < template > tag to be lost

first:
second:
and then:

Thanks for the report! You can use this version for now:
volar-1.1.6-alpha.1.vsix.zip


How can we get uid of a draft during compose email

I am working on a gmail extension, in whichI want functionality like I gave a button which closes compose window and gets uid of the message, on other end I want to extract body of email by providing that uid which i got during composing,
the problem is I am just getting draft Id not draft uid, how can i get uid during composition of draft

To the best of my knowledge there is no way using this API to get a unique ID for a draft from a compose window.
Any patches to provide this functionality would be very much welcome.

Closing issue due to question being answered and lack of activity.


feature: add implemeneted branch coverage of convert number to words

Feature description
Implement manual branch coverage analysis for the convert<EMAIL_ADDRESS>

Resolved in commit 00dfbba


autorequire should try directories for gems with dashed names

For example, when your Gemfile contains gem "jquery-rails", Bundler should try both require 'jquery-rails' and require 'jquery/rails'.

Is there any chance of this making it into 1.0.x?

No, that would violate SemVer. Sorry.
On Nov 30, 2011, at 7:54 AM, Ben<EMAIL_ADDRESS>wrote:

Is there any chance of this making it into 1.0.x?

Reply to this email directly or view it on GitHub:
https://github.com/carlhuda/bundler/issues/1205#issuecomment-2963402


Branch is main or master?

Why are some of the branch names in troubleshooting main and some master?

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 8e94f3fb-7da7-3ddf-bf38-32e4fea00699
Version Independent ID: 59222ad8-9930-b889-f0a9-c9bc3c642e38
Content: Deploy from local Git repo - Azure App Service
Content Source: articles/app-service/deploy-local-git.md
Service: app-service
GitHub Login: @cephalin
Microsoft Alias: cephalin

@diberry Thanks for the question. We're investigating this and will get back to you shortly.

Hey,
I think the naming, especially of Azure DevOps repositories, changed in the past from master to main:
https://devblogs.microsoft.com/devops/azure-repos-default-branch-name/

@diberry As @kaiaschulz mentioned above, Azure DevOps has renamed the default branch of new repositories from master to main in an effort to move towards a more inclusive language. More details in the referenced blog above.
That said, I have submitted a PR to replace the remaining occurrences of master to main in this How-To guide that's in review. Thanks again for bringing this to our attention.

@diberry @BhargaviAnnadevara-MSFT I'm currently changing the names strategically. Please don't make any systematic changes because App Service still uses master as the default branch and telling customers to just push with a different command will just result in deployment failure.

@diberry any "main" you see in our docs is most likely from someone other than us doing bulk changes. it doesn't actually help our docs.

@cephalin Here is the commit/PR I referred to: https://github.com/MicrosoftDocs/azure-docs-pr/pull/142092 from about 6 months ago. There was also a User story linked within.
#reassign:cephalin

Added a section in the doc to explain between master and main and fixed some of the discrepancies. #please-close


Radian shorthand should be rad, not r

My first thought was definitely rad, but looking at the source code I see it's r. I believe typing #qty("2", "rad") should work, it's more intuitive.
What is the rationale of using r?

That's a good question. I guess I wanted to save on some typing work. I can easily fix it by adding rad, too.


iOS await connect() blocks the app

When doing stream from await connect() it is blocking the app.
Stream<String> timedConnectionContinous() async* {
    bool shoudRepeat = true;
    while (shoudRepeat) {
      try {
        String response = await connect();
        yield response;
        if (response == "session_connected") break;
      } catch (e) {
        yield "not connected";
      }
      await Future.delayed(Duration(seconds: 10));
    }
  }

How to solve it?

Same issue, here, for Flutter web:
debugPrint("Debut des actions avec le FTP...");     try {       client.connect().then((String result) {         debugPrint("ConnectResult : " + result);         client.connectSFTP().then((String result) {           debugPrint("ConnectFTPResult : " + result);           client.sftpDownload(path: "./cours/$file", toPath: "./cours/$file")               .then((String resultDownload) {             debugPrint("GetFileResult : " + resultDownload);             client.disconnectSFTP().then((dynamic result){               client.disconnect();               OpenFile.open("./cours/$file").then((String result) {                 debugPrint("Open file result : " + result);               });             });           });         });       });     } on PlatformException catch (e) {       debugPrint('Error: ${e.code}\nError Message: ${e.message}');     }
The app displays the first log and hangs there...

Hi,
Are you able to debug the app in XCode or Android Studio? (Not sure if it's possible with Flutter web.)
Please set a breakpoint in the connectToHost() function then step in to see where it gets stuck.
For iOS:
https://github.com/shaqian/flutter_ssh/blob/master/ios/Classes/SshPlugin.m#L114
For Android:
https://github.com/shaqian/flutter_ssh/blob/master/android/src/main/java/sq/flutter/ssh/SshPlugin.java#L215
Thanks,
Qian

Does it work on Flutter web chanel? After calling client.connect() there is no exception and the function   never ends. It never goes to the next line, it looks like it is all the time doing something. There is no timeout also.


Update package.json version

Update package.json version to 3.1.0
https://github.com/architec/mistake/blob/main/package.json

@dvjsharma your pull request was closed, please reopen it.

assign please

#101


ARRAY of POINT from PostgreSQL in SQLModel

First Check

[X] I added a very descriptive title to this issue.
[X] I used the GitHub search to find a similar issue and didn't find it.
[X] I searched the SQLModel documentation, with the integrated search.
[X] I already searched in Google "How to X in SQLModel" and didn't find any information.
[X] I already read and followed all the tutorial in the docs and didn't find an answer.
[X] I already checked if it is not related to SQLModel but to Pydantic.
[X] I already checked if it is not related to SQLModel but to SQLAlchemy.

Commit to Help

[X] I commit to help with one of those options 👆

Example Code
from sqlmodel import Field, Session, SQLModel, create_engine, select, ARRAY, Integer, String, FLOAT
from geoalchemy2 import Geometry
from typing import Optional
from datetime import datetime
from urllib.parse import quote_plus
from typing import List, Optional, Set
from sqlalchemy.sql.schema import Column

class Site_Metrics(SQLModel, table=True):
    site_metric_id: Optional[int] = Field(default=None, primary_key=True)
    site_id: int
    metric_id: int
    created_at: datetime
    updated_at: datetime
    n_value: float
    a_value: Optional[List] = Field(default_factory=list, sa_column=Column(ARRAY(Geometry('POINT'))))
    deleted_at: datetime

Description
I have point[] type in SQLModel but by far without luck. I tried many things but this variation is the closest I have got. Is there any other way to do this? Thanks
Operating System
macOS
Operating System Details
No response
SQLModel Version
0.0.8
Python Version
3.8.0
Additional Context
No response

Any success with this? I also tried to find whether pydantic has some capabilities around geospatial data. The closest I have found is https://pypi.org/project/geojson-pydantic/

I managed to parse the DB data to a json response by defining this
from pydantic_geojson import FeatureModel
from geoalchemy2 import WKBElement
from geoalchemy2.shape import to_shape
from shapely import to_geojson
import json

class WKBToGeoJSON(FeatureModel):
    @classmethod
    def validate(cls, value):
        if not isinstance(value, WKBElement):
            raise TypeError("value must be a WKBElement object")
        shape = to_shape(value)
        if shape.type != "Point":
            raise TypeError("value must be a Point")
        return json.loads(to_geojson(shape))

And then defining my model using this Field
class Asset(BaseModel, table=True):
    name: Optional[str] = Field(default=None)
    description: Optional[str] = Field(default=None)
    location: WKBToGeoJSON = Field(
        default=None, sa_column=Column(Geometry("POINT", srid=4326))
    )

I havent tried it yet but I assume that the other way (geojson to sqlalchemy will fail).
@tiangolo is there some documentation on how to define the two way transformations for more exotic types?

I would also love to know how to handle geoJSON input/output for Geometry in a Postgres/Spatialite database backend. It appears to work just fine for WKT but it would be great to be able to validate/dump geoJSON. Two killer features for me are supporting geometry and JSON (e.g. for a JSONB column).

I'm not sure if this is the correct way to go about it but I ended up doing this to test reading and writing geometry as GeoJSON and it appears to work well:
import uuid
from typing import Literal, Optional

from fastapi import FastAPI, HTTPException

import geoalchemy2 as ga
from pydantic import Json
from sqlmodel import Field, Session, SQLModel, create_engine, select
from sqlalchemy.dialects.postgresql import JSONB

engine = create_engine("postgresql://postgres:password@postgres/mydb")
app = FastAPI()

class GeoJSONGeometry(SQLModel):
    """A GeoJSON geometry fragment."""

    type: Literal["Point", "LineString", "Polygon"]
    coordinates: tuple[float, float] | list[tuple[float, float]]

class Feature(SQLModel, table=True):
    id: Optional[uuid.UUID] = Field(
        default_factory=uuid.uuid4,
        primary_key=True,
        index=True,
        nullable=False,
    )
    geometry: bytes = Field(
        sa_type=ga.Geometry,
        nullable=False,
    )
    properties: Optional[Json] = Field(
        default=None,
        sa_type=JSONB,
        nullable=True,
    )

class FeatureCreate(SQLModel):
    geometry: GeoJSONGeometry = Field(
        default=None,
        sa_type=JSONB,
        nullable=False,
    )
    properties: Optional[Json]

class FeatureRead(FeatureCreate):
    id: uuid.UUID
    geometry: GeoJSONGeometry
    properties: Optional[Json]

@app.post("/features/", response_model=FeatureRead)
def create_feature(feature: FeatureCreate):
    with Session(engine) as session:
        db_feature = Feature(
            geometry=ga.functions.ST_SetSRID(
                ga.functions.ST_GeomFromGeoJSON(feature.geometry.model_dump_json()),
                0,
            ),
            properties=feature.properties,
        )
        session.add(db_feature)
        session.commit()
        session.refresh(db_feature)
        geojson = session.exec(
            select(ga.functions.ST_AsGeoJSON(db_feature.geometry))
        ).one()
    response = Feature(
        id=db_feature.id,
        geometry=GeoJSONGeometry.model_validate_json(geojson),
        properties=feature.properties,
    )
    return response

@app.get("/features/{feature_id}", response_model=FeatureRead)
def read_feature(feature_id: uuid.UUID):
    with Session(engine) as session:
        db_feature = session.get(Feature, feature_id)
        if db_feature is None:
            raise HTTPException(status_code=404, detail="Feature not found")
        geojson = session.exec(
            select(ga.functions.ST_AsGeoJSON(db_feature.geometry))
        ).one()
    response = FeatureRead(
        id=db_feature.id,
        geometry=GeoJSONGeometry.model_validate_json(geojson),
        properties=db_feature.properties,
    )
    return response


Transcribe audio

URL
https://m.youtube.com/watch?v=G0k_GjxuJDM

Timed out after half an hour (Replicate default timeout).


Suggestion: add a new field method to Response class

If it make sense to include the url field to the Response class in order to be human friendly when automatic redirection kicks in, shouldn't there be a method field as well, for the case when a POST results in 302 with which Requests respond with GET ?
Background: I was investigating an issue with a Consul REST API client which was based on Requests, and found out it was related to #2590 . While it's great the v3.0 will be shipped with the fix #3757, my observation was it was tricky to figure out what was going on under the hood. I could see my PUT was redirected from /v1/kv/a//b to /v1/kv/a/b by 301 but at first I had no idea the method was also changed to GET, striping the content data away. I gave a try on curl -v and hurrah, it displayed "Switch from POST to GET".
Moreover, if my understanding is correct (web isn't my field of specialty,) in a hypothetical situation when Requests is following a looong chain of mixture of 301 and 303, it would be helpful to be able to identify at which point the method changed from, say, PUT to GET.
Anyways the bottom line is, the url isn't complete without an accompanying method field, I think.

@nodakai that all is available in the response history already. I don't understand how the final response having a method would help you identify that. response.request.method already exists and (I thought) is documented.

Also, hi! Welcome! Thanks for opening this and starting the discussion for it. I'm a bit distracted so my responses will be a bit.. short. :)

Thanks for this request!
So I agree with @sigmavirus24. While the response.url field is a handy convenience, in general we make sure that the request that triggered a given response is always available at response.request, and can be introspected.
If you didn't find that obvious, I'd be delighted to merge a pull request with clarifying documentation.


OpenEXR: Fix autotools build system and change doc install

The build sysem for the OpenEXR sub-module is greatly broken.
This patch is being used on Gentoo Linux with great success.
It also adresses the issue of linking to previously installed
versions.
Signed-off by: Jonathan Scruggs<EMAIL_ADDRESS>Signed-off by: David Seifert<EMAIL_ADDRESS>

thanks for the fixes


Do not re-fetch table metada on adding a new filter

What happened:
Whenever I add an ad-hoc filter for a panel, the plugin makes a request SELECT name, type, table FROM system.columns, which adds a few sec. delay.
What you expected to happen:
Do not fetch definitions again, if the plugin already has the necessary data.
How to reproduce it (as minimally and precisely as possible):

Crete a panel
add an ad-hoc filter variable
add a filter
add another filter

Screenshots

Environment:

Grafana version: main branch
Plugin version: v3.1.0

Hi @mshustov, thank you for opening this. I'm unsure this is a bug, how can we be certain that the schema hasn't changed in between the filters being added? If a datasource is left open for awhile that could be enough time for the schema to change and those changes would not be reflected in the options.

how can we be certain that the schema hasn't changed in between the filters being added? If a datasource is left open for awhile that could be enough time for the schema to change and those changes would not be reflected in the options.

The plugin can implement time-based or any other caching policy. I don't think the plugin re-fetches data on Expore view for example, and it provides a way better UX.

I think it makes sense to cache the schema for the session on the frontend. It would make a better user experience