Consider basing fuelup's component fetching on IPFS? Or providing an IPFS backup?

Currently, fuelup fetches all binaries directly from GitHub. This means if GitHub goes down for whatever reason, fuelup may fail to fetch tools during installation / updating.
Perhaps we should consider fetching via IPFS?
This might involve:

Setting up a Fuel Labs IPFS node.
Having the IPFS node automatically fetch all fuel repo binaries as they're published and host them.
Host a "CID index", i.e. a mapping of tool versions to their associated CIDs (IPFS hashes) either on GitHub (similar to our channels) or the IPFS node.
At fuelup's compile time, we bake in a table of all known tool versions and their CIDs. This way, if our CID index goes down, we can at least attempt to fetch these versions that were known at compile time via IPFS.
During fuelup installation, updating or checking for new packages, fuelup maintains a local CID index (e.g. something simple like a directory with file for each binary version containing its hash). We can fallback to this local table in the case that our CID index goes down.

I feel like this could probably be designed in the same vein as https://github.com/FuelLabs/sway/issues/3443... IPFS as an alternate source for our components sounds like a neat idea.


Removal of main Task to save ram

If I read the code correctly, the main Task is just a placeholder to hold prev and next, which is very elegant but it unnecessarily takes 4k of RAM.
declaring it as a pointer and using the first started task in its place saves almost 5k.
Task *SchedulerClass::main = NULL;
Task *SchedulerClass::current = NULL;
SchedulerClass::SchedulerClass() {}

void SchedulerClass::start(Task *task) {
  if (!main) {
    main = task;
    current = main;
    main->next = main;
    main->prev = main;
  }
  task->next = main;
  task->prev = main->prev;

  main->prev->next = task;
  main->prev = task;
}

My sketch seems to be working fine with this and allows me an extra concurrent task.
From experiments, it seems like 24k of free heap are necessary to establish an SSL connection, so this makes a big difference (3 concurrent tasks can run ok)

Hey, this seems like a great idea. Why dont you make a PR to this effect.


✨  [CW-21867] feat: support LTC on lite

Checklist:

README.md includes:

[ ] The details of signing data and transaction data, this includes parameters.
[ ] Official docs or white paper.
[ ] Website or api can query assets and broadcast transaction.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license

Task linked: CW-21867 LTC


output file support

As of now, this can be done using using > operator, but we can support this with the flag o to write output results into a given file.
chaos -d uber.com -o uber.txt

Implemented in #9


Hide onboarding when Duck Player page or overlay are shown

Task/Issue URL: https://app.asana.com/0/0/1208082741726951/f
Description
Steps to test this PR
Feature 1

[ ]
[ ]

UI changes

Before
After

!(Upload before screenshot)
(Upload after screenshot)

[!WARNING]
This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

#4924  👈
#4917 : 1 other dependent PR (#4919 )
#4902
#4897
#4663 : 5 other dependent PRs (#4748 , #4752 , #4780  and 2 others)
develop

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @CrisBarreiro and the rest of your teammates on  Graphite


Add source jar in maven repo

Hi,
Please consider adding source jar in maven in repo so it becomes more easy for dev to checkout the implementation.
Regards.

Hi, I checked maven repo for M3, sources are included:
http://central.maven.org/maven2/org/mapdb/mapdb/3.0.0-M3/
What is your usage scenario, that sources are not found in?

Somehow, IDEA couldn't download the source autometically as it always does and when I checked google I went into "http://mvnrepository.com/artifact/org.mapdb/mapdb" instead of maven central site. That's how the confusion.
Thanks for pointing the correct site. We can close this issue.


BasicTextField with custom decoration box is not working on desktop

Describe the bug
Text field doesn't react on input if innerTextField is not used.
It works normally on Android.
Affected platforms

Desktop (haven't checked other)

Versions

Compose Multiplatform version*: 1.5.11

To Reproduce

Run the code below
Click on the first rect
Try type something - nothing happens

When you tap on it - it receives and instantly loses focus.
It also doesn't produce press and release interactions like it does on Android (https://github.com/JetBrains/compose-multiplatform/issues/4087 - not only outlined text field affected).
If you  press on text field and hold it while typing - input works correctly (as it has focus during press)
 var text by remember {
        mutableStateOf("")
    }

BasicTextField(
    value = text,
    onValueChange = {
        text = it
    }
) { notUsedInnerTextField ->
    Row(
        horizontalArrangement = Arrangement
            .spacedBy(12.dp)
    ) {
        repeat(6) {
            Box(
                modifier = Modifier
                    .width(35.dp)
                    .height(50.dp)
                    .border(1.dp, Color.Black),
                contentAlignment = Alignment.Center
            ) {
                Text(text = text.getOrNull(it)?.toString().orEmpty(),)
            }
        }
    }
}

Works fine on latest jb-main

Please check the following ticket on YouTrack for follow-ups to this issue. GitHub issues will be closed in the coming weeks.


Remove support for configuring rewriters in solrconfig.xml by December 2022 - PLEASE UPDATE YOUR SOLR DEPLOYMENT NOW

Querqy 5 changed how rewriters can be configured by moving to an HTTP-based API. In order to facilitate the transition we allowed a temporary solution in solrconfig.xml via searcherListeners that is supposed to be removed in the first release in 2022 (see
https://docs.querqy.org/querqy/querqy5-solr-migration.html#configuring-and-using-rewriters).
If you are still using this temporary solution, please update your rewriter deployment under Solr NOW - we will stop supporting this solution by March 2022!

@renekrie I urge you not to!
Here's why: I see two use cases that actively use this feature for a good reason. I lay out both use cases below. I understand that you want to keep the code base clean. But those classes are not touching the main functionality as they are only support classes.

I'd like to see that we make Querqy adoption and update paths not harder than we have to. IT departments and teams do not follow releases at the speed of open source.

Scenarios
These are two scenarios I have seen in the wild currently using Querqy.
1. Self-contained Solr Docker image
In this setup a Docker image derived from the docker-solr image is baked during continuous integration. It contains all custom components and all Solr configuration and configsets (and Querqy rules). Upon launch the image populates the attached Zookeeper cluster if empty. The Querqy configuration ClassicRewriteChainLoader is used to upload the Querqy configuration upon the firstSearcher event. This image can be tested in a test environment, can be approved by QA and be installed in the live environment. Using this process makes sure, that code & configuration is approved in one piece.
Without the ClassicRewriteChainLoader there is no way to populate the Zookeeper before Solr starts. It has to be some external process (maybe in a sidecar) that populates the API. This effectivly breaks the self-contained contract of the image.
2. Classic replicated environments
In classic replicated Solr setups (without SolrCloud) you replicate both the index content as well as the Solr config files. In this setup the Querqy rule files are changed/maintained on the leader server and then replicated via the classic Solr replication to the followers. There we use the ClassicRewriteChainLoader to load the Querq rules upon every commit.
Without the ClassicRewriteChainLoader you'd have to built a custom (or external) component that updates the Querqy rules via the API. That component has to synchronize across all follower servers.
Solutions
1. Self-contained Solr Docker image: Provide Querqy CLI as executable JAR
As noted in #175 I'd like to see Querqy as a executable JAR (much like the Solr CLI). This way we can populate the Zookeeper before the first launch of Solr during the setup of the Docker image.
$ java -jar querqy.jar -z localhost:2181 rules.txt

I'd contribute this if it has chances of being accepted :-/
2. Classic replicated environments: ---
In classic replicated environments unfortunately there is no solution.

Hi @tboeghk,
Thank you for your comments. As far as I can see, we don't need a new solution for '2. Classic replicated environments' - you can simply make Querqy's rewriter config files part of the replicated file set and then it will be replicated (and reloaded) on every commit (I've already seen this on production). You can also just put the rewriter config files into the config dir before starting Solr to solve the 'coldstart & tested' problem for this type of replication.
I kind of like your suggestion to solving the 'Solr-Docker image problem'. What I want to achieve is to get rid of references to rules.txt or other dependencies and to get rid of the deprecated Classic* loader/factory/listener stuff. An alternative to what you suggested could be the following:

Make the rewriter configurations available as JSON files. For example, there could be a common_rules.json that contains the entire payload of a Common Rules Rewriter config request.
In the Querqy config, point to a collection/bundle of such rewriter config files (= a directory, a .zip file, a classpath resource) (maybe as part of the config of the QuerqyRewriterRequestHandler in solrconfig.xml). When this request handler loads, it will push these rewriter configs to ZK under the following conditions:
** The Handler is being loaded on the collection overseer
** The rewriter config doesn't exist in ZK yet (there could also be some versioning?!)

I'm not sure how much this would allow us to avoid writing the 'coldstart' rewriter config from multiple nodes when SolrCloud starts up (and possibly triggering unwanted rewriter reloads on other nodes) but I think we can get very far.
A benefit would be that we'd just use one type of rewriter config/factory and get rid of knowing about rules.txt etc. (I think that's a major concern that I'd have with your proposal: in $ java -jar querqy.jar -z localhost:2181 rules.txt - rules.txt is specific to the common rules rewriter while it should be transparent at this point). Using the above approach, we'd also avoid creating an executable, with all the implications on maintaining it.
How does that sound?

Extending the 'grace period' as we'll have more urgent tasks to do once Solr 9 is released.


don't send approve email for OSC

Fixes opencollective/opencollective#1029

Coverage increased (+0.006%) to 71.493% when pulling 7cee0a88f86b3a8c97ccf9aa95fe3d7b3c17b8de on fix1029 into 923fe55420dec7b663a6baf9733795ddfd3446b5 on master.


[SUPPORT] Add new VPC peerings for DiT

What
This commit adds the new VPC peerings as requested via support.
How to review
Code review and check against the details in ticket 9129
Who can review
Not @46bit or @LeePorte

Looks legit


router DC changes for setting x_forwarded_for header

With OpenShift <IP_ADDRESS> and 3.4.1, the OpenShift router image accepts the environment var ROUTER_USE_PROXY_PROTOCOL to have the router pod use the PROXY protocol.
This allows propogation of the X-FORWARDED-FOR HTTP header showing the client IP address instead of the AWS ELB's IP.
This will be the default setting going forward. This requires the AWS ELB to be configured to speak the PROXY protocol as well (https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/enable-proxy-protocol.html).
For GCP ELBs, there is no need for this var, so only apply the extra env var when cloud is 'aws'.

👍 #2012 in stg


Add support for masks and screenshots of individual elements

Additional changes:

Changes options per screenshot
Remove the need for the PID file
Improved README
Improved Documentation
Improved Example Project

NOTES:
->This is a major since we change the way we used to create the Run. We didn't change the release notes.

@fvanwijk @skwakman I need to have the option for masks as well so it would be great if this PR is merged. Is that possible or are there still issues with it?

I'm sorry, @skwakman and @dmarjenburgh were the only maintainers, but the project is abandoned some time ago. As repo admin I will archive it. No code will be merged because it won't be published on npm (to prevent confusion).
Please fork the project and claim a new npm package name if you want to continue using (and developing) VisualReview.


dejagnu: 1.6 -> 1.6.1

Motivation for this change
Things done

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

[X] NixOS
[X] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[X] 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.

@GrahamcOfBorg build dejagnu

Success on x86_64-darwin (full log)
Attempted: dejagnu
Partial log (click to expand)
 /nix/store/4biv886kklq2jbx8ca23krwn66kcp53a-coreutils-8.29/bin/install -c -m 644 stub-loader.c testglue.c runtest.exp lib/debugger.exp lib/dejagnu.exp lib/dg.exp lib/dmucs.exp lib/framework.exp lib/ftp.exp lib/kermit.exp lib/libgloss.exp lib/remote.exp lib/rlogin.exp lib/rsh.exp lib/ssh.exp lib/standard.exp lib/target.exp lib/targetdb.exp lib/telnet.exp lib/tip.exp lib/utils.exp '/nix/store/a4knw3snna812b6dscbjl8w8fj4j4zpc-dejagnu-1.6.1/share/dejagnu'
make[1]: Leaving directory '/private/tmp/nix-build-dejagnu-1.6.1.drv-0/dejagnu-1.6.1'
post-installation fixup
gzipping man pages under /nix/store/a4knw3snna812b6dscbjl8w8fj4j4zpc-dejagnu-1.6.1/share/man/
strip is /nix/store/8axizw5mf6dx7wip65nbkyrmlkhmjhc5-cctools-binutils-darwin/bin/strip
stripping (with command strip and flags -S) in /nix/store/a4knw3snna812b6dscbjl8w8fj4j4zpc-dejagnu-1.6.1/bin
patching script interpreter paths in /nix/store/a4knw3snna812b6dscbjl8w8fj4j4zpc-dejagnu-1.6.1
/nix/store/a4knw3snna812b6dscbjl8w8fj4j4zpc-dejagnu-1.6.1/bin/.runtest-wrapped: interpreter directive changed from "/bin/sh" to "/nix/store/mdzgfbangzw62b6cb48dg0q83sxdy12y-bash-4.4-p23/bin/sh"
/nix/store/a4knw3snna812b6dscbjl8w8fj4j4zpc-dejagnu-1.6.1/share/dejagnu/libexec/config.guess: interpreter directive changed from " /bin/sh" to "/nix/store/mdzgfbangzw62b6cb48dg0q83sxdy12y-bash-4.4-p23/bin/sh"
/nix/store/a4knw3snna812b6dscbjl8w8fj4j4zpc-dejagnu-1.6.1

Success on x86_64-linux (full log)
Attempted: dejagnu
Partial log (click to expand)
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/8s01vj9m959bqs5fp7zs9if19lg7k9km-dejagnu-1.6.1
gzipping man pages under /nix/store/8s01vj9m959bqs5fp7zs9if19lg7k9km-dejagnu-1.6.1/share/man/
strip is /nix/store/90vmpr41dzsx350k5argycaf693hnl1l-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/8s01vj9m959bqs5fp7zs9if19lg7k9km-dejagnu-1.6.1/bin
patching script interpreter paths in /nix/store/8s01vj9m959bqs5fp7zs9if19lg7k9km-dejagnu-1.6.1
/nix/store/8s01vj9m959bqs5fp7zs9if19lg7k9km-dejagnu-1.6.1/share/dejagnu/libexec/config.guess: interpreter directive changed from " /bin/sh" to "/nix/store/z9qg7lpkrajdnlgw5pxp9yx984prl1fi-bash-4.4-p23/bin/sh"
/nix/store/8s01vj9m959bqs5fp7zs9if19lg7k9km-dejagnu-1.6.1/bin/.runtest-wrapped: interpreter directive changed from "/bin/sh" to "/nix/store/z9qg7lpkrajdnlgw5pxp9yx984prl1fi-bash-4.4-p23/bin/sh"
checking for references to /build in /nix/store/8s01vj9m959bqs5fp7zs9if19lg7k9km-dejagnu-1.6.1...
/nix/store/8s01vj9m959bqs5fp7zs9if19lg7k9km-dejagnu-1.6.1

Success on aarch64-linux (full log)
Attempted: dejagnu
Partial log (click to expand)
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/ndvgpb2x3xzlzy7hxd4448xabmjxdic2-dejagnu-1.6.1
gzipping man pages under /nix/store/ndvgpb2x3xzlzy7hxd4448xabmjxdic2-dejagnu-1.6.1/share/man/
strip is /nix/store/7iyn7gn33i7xxjgmwf25k20246y6nd9d-binutils-2.30/bin/strip
stripping (with command strip and flags -S) in /nix/store/ndvgpb2x3xzlzy7hxd4448xabmjxdic2-dejagnu-1.6.1/bin
patching script interpreter paths in /nix/store/ndvgpb2x3xzlzy7hxd4448xabmjxdic2-dejagnu-1.6.1
/nix/store/ndvgpb2x3xzlzy7hxd4448xabmjxdic2-dejagnu-1.6.1/share/dejagnu/libexec/config.guess: interpreter directive changed from " /bin/sh" to "/nix/store/3swzdhnphnbxjcyx2bkk1gh9k8gi3kl6-bash-4.4-p23/bin/sh"
/nix/store/ndvgpb2x3xzlzy7hxd4448xabmjxdic2-dejagnu-1.6.1/bin/.runtest-wrapped: interpreter directive changed from "/bin/sh" to "/nix/store/3swzdhnphnbxjcyx2bkk1gh9k8gi3kl6-bash-4.4-p23/bin/sh"
checking for references to /build in /nix/store/ndvgpb2x3xzlzy7hxd4448xabmjxdic2-dejagnu-1.6.1...
/nix/store/ndvgpb2x3xzlzy7hxd4448xabmjxdic2-dejagnu-1.6.1


feat: add standard flag resolution codes

Introduces a default set of flag resolution codes as defined in the spec
refs #21

I have updated the wording. Do you want me to add the new constant/enum now?

I have updated the wording. Do you want me to add the new constant/enum now?

I think so, if it makes sense to you, otherwise we can do it later. As this stands, it's a good improvement I think. Up to you to decide if you like the additional enum idea.

@toddbaert @beeme1mr I have updated the wording and added the STATIC enum :)

@weyert thanks again!


CMake naming

Add prefix "typeart" to functions, variables and important files.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.6%) to 89.52%

Totals

Change from base Build<PHONE_NUMBER>:
0.6%

Covered Lines:
3186

Relevant Lines:
3559

💛  - Coveralls


Variable name depends on type

Hey i've been using this plugin since it's released, thank you for developing and improving it.
Could you make an option the change prefix of variable name? Such as boolean types of variables generally starting with is (isSuccess, isGenerated etc.) but the plugin generates getSuccess which is not well i think.
Thank you.

Thank you for your feedback, I will fix as soon as possible

Thank you @zzz40500


bug(COMPONENT): TITLE reading KML data from a file support in google maps

Reproduction
Use StackBlitz to reproduce your issue:

https://stackblitz.com/edit/angular-ivy-nc8iqn

Steps to reproduce:
1.have one static kml and refer the same in component
if we use a kml https url of same content it is working
2.
Expected Behavior
What behavior were you expecting to see?
Actual Behavior
What behavior did you actually see?
it is expected to load kml
Environment

Angular:
CDK/Material:
Browser(s):
Operating System (e.g. Windows, macOS, Ubuntu):

We proxy the url directly through to the Google Maps API so this is either an issue with the formatting of your URL or something in Google Maps. I'm closing the issue since we can't do much more about it.


[WIP] Pipes ES5 Guide

Hey this is a test and a work in progress. You can ignore this for now.
I hope @DeborahK reads this.

Closing because we are not translating to ES5 in this manner.


Cannot read property 'preventDefault' of undefined. in input-moment.js

You are not providing the event argument when calling "handleClickTab" method so it will throw the error i mentioned in the title, just change:
onClick={() => this.handleClickTab(0)} to onClick={(event) => this.handleClickTab(0, event)}
and
onClick={() => this.handleClickTab(1)} to onClick={(event) => this.handleClickTab(1, event)}
and it should be good :)

Thanks, fix available in 0.3.4


Adding Firebase Emulator Suite Support in Firestore

I saw the possibility to add support to Firebase Emulator Suite for Firestore. I don't know if there's a better way to do this, but if you find it interesting, please check it out.
Detail: It's my first pull request through a fork, so be kind :) lol

@danilomartins18 thanks to contribute, I really appreciate.

@aguacongas It is an honor to contribute to this project.
No problems about the appveyor.
Of course, I just commited the unit tests, please check it out if it is enough.

@danilomartins18 It's ok for unit tests but please update your code as expected in the review

What do you mean about update the code as expected in the review?

@danilomartins18  I reviewed your code and wrote comments . please fix UseEmulator private method at line 179 of IdentityBuilderExtensions.cs by removing conditional compilation directive.

Okay, sorry but your comment review doesn't display for me. I removed the conditional compilation directive, please check it out.


Automatic pypi release on tags

We shouldn't be running python setup.py sdist bdist_wheel upload manually when travis can do it for us.

I can take care of this, if you want

Please do


MHGAN model

This model is an Auxiliary Classifier GAN model implemented using torchgan which samples images using the Metropolis Hastings algorithm.
MHGAN Research Paper - https://arxiv.org/pdf/1811.11357.pdf)

@k-k-d please rebase and update the code according to the guidelines in the readme

@avik-pal I have rebased the repo and updated it as much as I could understand. If I need to to something more, let me know.

@k-k-d Firstly fix the linting issues. It is mostly unused imports. You can run isort and yapf it will fix most of them. Then you shall have to fix the remaining manually


Please add #[derive(PartialEq)] to ScanError

Errors which derive from ScanError can't #[derive(PartialEq)] because ScanError doesn't implement PartialEq itself. Could you please add the missing derive ?

Sure thing - done!

Very cool, thanks a lot !


A GNN-based Meta-Learning Method for Sparse Portfolio Optimization

Hello Robert,
Let me start by saying that I am a fan of your work here. I have recently open-sourced by GNN-based meta-learning method for optimization. I have applied it to the sparse index-tracking problem from real-world (after an initial benchmarking on Schwefel function), and it seems to outperform Fast CMA-ES significantly both in terms of producing robust solutions on the blind test set and also in terms of time (total duration and iterations) and space complexity. I include the link to my repository here, in case you would consider adding the method or the benchmarking problem to your repository. Note: GNN, which learns how to generate populations of solutions at each iteration, is trained using gradients retrieved from the loss function, as opposed to black-box ones.
Sincerely, K

Hi @kayuksel,
Very cool work. I assume there is no preprint? I am myself very much interested in meta-learning ES/black-box optimizers (see link). But how can I/evosax help you? Do you want to implement your GNN-based BBO in JAX and open a PR?
Best wishes,
Rob

Hello again,
Thank you for your response. By the way, I am also an ex-TU-Berlin (through BCCN-Berlin, DAI-Labor, and T-Labs). I actually developed this method 2 years ago but couldn't find the time to write a publication as I am working full-time in the industry.
I first started with a game-theoretic mechanism for global optimization through the positive surprise (using a surrogate model as the critic for the generator). That turned out to be beneficial but not very critical in many of the problems that I've tried on.
Hence, I probably need to write my publication from scratch (which was extremely focused on that idea). It was also difficult for me to write many benchmark methods as you did, and run the experiments. If you like, we can collaborate on such a publication.
About the JAX implementation, the PyTorch code is actually under 100 lines. But as I have never yet developed with JAX, I am unsure that I could convert that easily myself or when I would be able to do that as I currently have some work congestion.
Sincerely, K

Correct me if I am wrong, but you do need to be able to calculate gradients through the objective function, right? So it is not generally applicable to black-box optimization and closer to the line of work learned gradient-based optimization by Luke Metz.

Yes, that is true. It is possible to train a surrogate function to get the gradients from it for black-box optimization. But then, the convergence was much slower - at least in the few attempts I made to overcome that issue. The method has advantages over the existing black-box optimization methods when candidate rewards have dependencies, such as in multi-agent settings. I am unsure which work of Luke Metz you refer to, but the main difference could be that my method is a population-based generative one.

Okay, I will close this issue for now, since it is a gradient-based method and there is no reference paper (yet). Finally, I don't have a trained checkpoint/details for meta-training. Please feel free to open a PR once you are ready/have a JAX implementation. Luke Metz's work can be found here.


Zoom control on Click

no option for image zoom.

Ya i too need the same... please  help in doing that

Mee to need the same.

Zoom feature is a must in such library as this one. Please add it in next release.


Adds headers to kwargs to pass headers to OpenAI for Azure model

Adds headers to support Azure OpenAI Service custom endpoints
Trying to solve issue: https://github.com/hwchase17/langchain/issues/3992
If this goes into a release, here's my twitter: @aadiaakash

@hwchase17 Should this be merged?
I understand that the headers are not required with Service Principal setup in OpenAI (with Azure viz. different from AzureOpenAI), however if it is not (not ideal) this will be helpful.


[Security] Potential Secret Leak

It has been noticed that while using r0adkll/sign-android-release@v1 your keyStorePassword 123456 is present in plaintext. Please ensure that secrets are encrypted or not passed as plain text in github workflows.

This is normal behaviour - this is debug key


[FR] [iOS] Expose the registerForRemoteNotifications method

Expose the registerForRemoteNotifications method to allow the use of Silent Push on iOS before even asking for user permission.
If we do not request permission to push or if the user does not give permission, the getToken method responds with the error "APNS device token not set before retrieving FCM Token for Sender ID". On iOS we need to call the registerForRemoteNotifications method before getToken if we want to use Silent Push.

Feature request

@dpa99c I think you implemented the FR about initiateOnDeviceConversionMeasurement from https://github.com/dpa99c/cordova-plugin-firebasex/issues/843 ... I don't see changes about method registerForRemoteNotifications in v16.3.0.


Sending splits statements

When I send the text to the buffer, the statements are executed as if I put them in the REPL one by one, pressing enter on each line, but the expected behavior is to execute the entire code chunk at once. The code to be send is
"Solve the system in the form of ``AX = B``"
function solve_precisely(A, B)
   A \ B
end

It is executed as follows.

At first, I send the text to the REPL, so the given string is input as a statement, then a function definition is input as another statement. I would like it to work as the second time, obtained by copying the text, pasting it to the buffer with the REPL and then pressing enter. In the first case, the string can't be interpreted as a docstring, therefore ?solve_precisely doesn't show any documentation.
Additionally, you can see the indentation problems in the first approach, but this is not the topic of this issue.

I'm sorry for taking long to respond - this somehow got lost in my notifications.
I'm not sure about julia as I don't know much about it, but I would assume it does allow for bracketed paste.
In your config, you can try adding the following:
require("iron").setup {
  config = {
    -- your config
    repl_definition = {
      julia = {
        command = {"julia"},
        format = require("iron.fts.common").bracketed_paste
      }
    }
  }
}

If that works, I can probably add it as a default to the julia repl.
Best regards,
Henry

I tested the snippet you provided for the snippet I had originally given, and it appeared to work. Thank you!


fix(rustup): adjust to changed TyPath variant

The fix was simple, as variant fields just had to be swapped.

Apologies, I made the same fix. Thanks v much for the patch


Enhancement: extend aad app get with --save

From: https://github.com/pnp/cli-microsoft365/issues/2815#issuecomment-972742278
In #2813 we introduced a command that allows you to operate on an AAD app using information stored in a .m365rc.json file, which contains the appId property with the ID of the AAD app. We should extend the aad app get command with a new --save option. When used, it will cause the command to write the information about the specified existing app to the .m365rc.json file in the working directory.
The logic for writing to the file:

check if the file exists, create if it doesn't
read the file contents as JSON, if there's an exception, throw
if the contents already contain a reference to this appId, skip
if the contents don't contain a reference to this appId, add it and write the updated object back to the file
existing output remains as-is

Hi Waldek,
You can assign me on this one...

Awesome! Assigned 🚀

Let's get this party started 🐱🏍


Support URI query string for configuration via DATABASE_URL

Ridgepole is not aware of query string of DATABASE_URL. It just ignores query string.
Our project uses postgresql's schema. I can specify schema with schema_search_path query string with Active Record, but I cannot do it with ridgepole.
For example: postgresql://user:password@hostname:5432/database-name?schema_search_path=schema_name
Ridgepole will merge query string to config by this change. It is the same behaviour with Active Record.
https://github.com/rails/rails/blob/72842b36953f1620b59d3fed4d748a8cfab986c3/activerecord/lib/active_record/connection_adapters/connection_specification.rb#L66-L77
Thank you for the great product!

Thank you! 😄

v0.7.7 has been released

Thank you!


Suggest splitting the workflow in different jobs

CI would give feedback a lot faster if you split it into multiple jobs. Some things don't need to be run on every cell in the build matrix, and some jobs can give feedback much faster, and Actions will parallelize for you.
(See Quinn for an example.)

The CI pipeline for this feels fast enough, esp. compared to neqo. Would this really get us much?


Why the Lookup-Matches assertion returns error even if it is not supposed to ?

Hi All,
I'm trying to build a test using the lookup-matches assertion, based on the documentation:

If a row from the candidate result-set has no matching key in the reference result-set, it’s not considered as an issue for the test and this row will be considered as successful.

Anyway, when I execute it trough Azure DevOps I get a failure with the following message

Am I missing something ?
This is the test template I'm using

Thanks in advance for any useful feedback :)

I was a bit by surprise by my own documentation when reading

If a row from the candidate result-set has no matching key in the reference result-set, it’s not considered as an issue for the test and this row will be considered as successful.

and the code confirmed my doubts
https://github.com/Seddryck/NBi/blob/9c01075681d4532137b6bfbbf06cbfae20e6fd93/NBi.Core/ResultSet/Lookup/LookupMatchesAnalyzer.cs#L72-L73
Clearly sounds that the documentation is not aligned with the code ... it means that the truth is in the tests! Unfortunately, the tests are giving following answer: the code is right and the documentation is wrong. We've a specific test checking that candidate rows without matching keys in the reference should be reported as violations.
https://github.com/Seddryck/NBi/blob/9c01075681d4532137b6bfbbf06cbfae20e6fd93/NBi.Testing.Core/ResultSet/Lookup/LookupMatchesAnalyzerTest.cs#L110-L119

I'll be waiting your feedback and especially your use-case for considering that candidate rows without matching reference keys should be marked as successful. I can always change my mind!

Hi Seddryck,
sorry for late response, my intent was to have a test that checks the following:
given two dataset A and B, all rows from A that have a Key match with B must have equal Value too.
All non matching rows we don't care.

In the example above, only the two matching record would be compared, all others would be ignored and therefore the test would be successful.

Ok, I'll apply a fix in this case to align with the documentation.


Workaround slow insertion of rewards and epoch staking data at epoch boundaries

Currently, at epoch boundaries, there is a large amount of data that needs to be pulled out of the ledger state and inserted into the database. The amount of data has been increasing epoch by epoch and inserting this data now takes a significant amount of time (10 minutes or more).
All of this data is calculated earlier in the previous epoch. It could be extracted from the ledger state as soon as it is available and inserted into the data base and only be committed at the epoch boundary.

The plan for this is to extract the required data from the ledger state as soon as it is available, ship it to a separate thread and then in a single transaction, insert all the data without committing it. The data will finally be committed when the epoch boundary is reached.

This was fixed long ago.

Yes, its in version 10.0.0. The delay on releasing that is due to the getting the bugs ironed out from the snapshot functionality.


Change copy output to work as a fixture

Acting on some feedback from @gautam & @johnkpaul, this PR changes the output of the Copy button to conform to what robot.receive() actually receives. Previously, the entire request was copied (headers, body); now, only the event and payload are copied. Specifically this:
{
  event: item['x-github-event'],
  payload: item.body
}

Also I restarted the builds since they timed out causing a fail before but it seems fine now, aside from codecov


Update index.json

Music player added

@Anoobee please add a signoff to your commit

added another PR


Upgrade this module to use the new lambda version

appsync-parameter-store-resolver = 0.0.2

release v3.0.2


Setting basePath to demo environment does not work

https://github.com/docusign/docusign-click-csharp-client/blob/df074b2d6716f1a9a0655e08e2d8f0f84cd9a940/sdk/src/DocuSign.Click/Client/DocuSignClient.cs#L108
This line states, that my basePath will only be used, if it is null or empty. Or do i miss something?

No, this lines means we default to production, if you do not set anything. We set it to what you have in the configuration object, but if you have nothing (null or empty) we default to Production_REST_BasePath

Isn't there a ! missing in front of the string.IsNullOrEmpty? I don't get it... I cloned the repo and set the !, now it works for me...

Thanks for your report @niebuhrFirstcon - this does indeed look like a bug. Our team will look into it.


error validating aws-cvs driver. failed to read version

trident-plugin:19.07.0
Docker 18.09.4
I have just installed the plugin and am trying to create my first volume.  When I try to create the volume I get this error:
$ docker volume create -d netapp --name first
Error response from daemon: create first: VolumeDriver.Create: Trident initialization failed; problem initializing storage driver 'aws-cvs': error validating aws-cvs driver. failed to read version: use 'journalctl -fu docker' to learn more

There is no log in /var/log/netappdvp.  The error from journalctl is:
Sep 11 16:31:54 usdlvfal500 dockerd[2463]: time="2019-09-11T16:31:54.986923661-04:00" level=error msg="Handler for POST /v1.39/volumes/create returned error: create first: VolumeDriver.Create: Trident initialization failed; problem initializing storage driver 'aws-cvs': error validating aws-cvs driver. failed to read version: use 'journalctl -fu docker' to learn more"

Here is the configuration that I got from our storage team:
$ cat /etc/netappdvp/config.json
{
    "version": 1,
    "storageDriverName": "aws-cvs",
    "apiRegion": "us-ch4",
    "apiURL": "https://twusgrid01.mycorp.com:8082/IDB_DEV_USCH4",
    "apiKey":    " KJN4R6G993U6037MXHJ9",
    "secretKey": " G859026HztGaXjy38SHrqRB3KoUpR+rqMoAi2MoT",
    "region": " us-ch4",
    "serviceLevel": "premium",
    "storagePrefix": "cvs-",
    "limitVolumeSize": "100Gi",
    "defaults": {
        "snapshotReserve": "5",
        "size": "100Gi"
    }
}

I also tried "apiURL": "https://twusgrid01.mycorp.com:8082".
Thanks for your help.

Hi, @sourcedelica.  The apiURL in your config.json file should be what you find in the CVS UI in the same place you find your API keys.  For example, in us-east-1, the apiURL is https://cds-aws-bundles.netapp.com:8080/v1/

Hi @clintonk - It turns out that we have Netapp Storage Grid on prem, not Netapp CVS for AWS.  Is Trident compatible with that?

Hi, @sourcedelica.  Trident supports virtually all of NetApp's file & block storage portfolio, but StorageGRID is our object storage solution.  Kubernetes doesn't really have an object storage story; if and when that changes, I suspect Trident will be there with StorageGRID!


'hono-openapi/zod' does not provide an export named 'validator'

I wanted to try it out as I was looking for a better openapi plugin for Hono, but got this error when I tried for the first time.
import { validator as zValidator } from 'hono-openapi/zod'
some important versions:
    "@hono/node-server": "^1.13.1",
    "@hono/zod-validator": "^0.4.1",
    "hono": "^4.6.3",
    "hono-openapi": "^0.1.4",
    "zod": "^3.23.8",
    "zod-openapi": "^3.3.0"

node version: v18.19.1
tsconfig:
{
  "compilerOptions": {
    "target": "ES2022",
    "declaration": true,
    "moduleResolution": "Bundler",
    "outDir": "./dist",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true,
    "noUnusedLocals": false,
    "noUnusedParameters": false,
    "types": ["node"],
    "jsx": "react",
    "jsxFactory": "jsx",
    "jsxFragmentFactory": "Fragment",
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    }
  },
  "include": ["src/**/*.ts", "src/**/*.d.ts"],
  "exclude": ["node_modules"]
}

import openapi from 'hono-openapi/zod'
openapi.validator()

this works fine

I tested the tsconfig setup and also created new projects with both Hono.js and Node.js, and everything seems to be working fine on my end. Could you set up a reproduction on CodeSandbox or StackBlitz so I can take a closer look? That way, I’ll be able to help you troubleshoot more effectively.

I suspect the issue has the same root cause as in hono: https://github.com/honojs/hono/issues/3284. The exports in package.json are not correct and depending on the project type (esm or cjs) and the project specific tsconfig settings this will cause issues when importing from this package.


Improve Dockerfile to ignore more things

Ignore statically-built libraries and Vibe.d's examples / tests.

Note: This shrinks the build context from 300Mb+ to 50 Mbs.


can guid impl be changed?

Hi there,
While testing fastapi-users [sqlalchemy] along with sqladmin I bumped on this
  File "/mnt/1T/work/user-management/.venv/lib/python3.8/site-packages/sqladmin/forms.py", line 78, in get_converter
    raise Exception(  # pragma: nocover
Exception: Could not find field converter for column id (<class 'fastapi_users_db_sqlalchemy.guid.GUID'>).

I understand that sqladmin does not know how to handle this since it does not have converter for UUIDChar (https://github.com/aminalaee/sqladmin/blob/main/sqladmin/forms.py#L78). It does handle UUID though.
This is provoqued by the following line at fastapi-users-db-sqlalchemy/
https://github.com/fastapi-users/fastapi-users-db-sqlalchemy/blob/3e537753fb13626e56291069a417d8793a492685/fastapi_users_db_sqlalchemy/guid.py#L18
.venv/lib/python3.8/site-packages/fastapi_users_db_sqlalchemy/guid.py

Is impl = UUIDChar a "standard" implementation or it should be named impl = UUID instead?
Otherwise, any way can I overwrite this?

Actually, UUIDChar is defined just above. The rationale about why it's like this is here: https://github.com/fastapi-users/fastapi-users/issues/646 In a nutshell, some libraries need to have the python_type explicitly defined to work.
I think it's more an issue on sqladmin side: overloading an impl is quite common and I believe they should support this case. For example, on pydantic-sqlalchemy, they take care of looking for a python_type everywhere: https://github.com/tiangolo/pydantic-sqlalchemy/blob/8667e213a6ad8e62288fad2a6621958e8ab0b688/pydantic_sqlalchemy/main.py#L25-L29

Thanks for your clarification @frankie567 :metal:


Add support for legacy plugins using October's ExtendableTrait

Fix infinite loop for Models using October's ExtendableTrait.

This was tested with the plugin that was experiencing the infinite loop.


Show progress bars for the three indicators

Closes #121
Is this what you thought of @mdrie?

Strange! The Issue was not closed by merging this PR... What is wrong?

Will now try to link the issue by hand.

closes #121

Guess, that does not work after merging?


python312Packages.hishel: 0.0.33 -> 0.1.1

Diff: https://github.com/karpetrosyan/hishel/compare/refs/tags/0.0.33...0.1.1
Changelog: https://github.com/karpetrosyan/hishel/blob/0.1.1/CHANGELOG.md

Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
24.11 Release Notes (or backporting 23.11 and 24.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

nixpkgs-review result
Generated using nixpkgs-review.
Command: nixpkgs-review pr 353363

x86_64-linux

:x: 2 packages failed to build:

pdm
pdm.dist

:white_check_mark: 8 packages built:

python311Packages.githubkit
python311Packages.githubkit.dist
python311Packages.hishel
python311Packages.hishel.dist
python312Packages.githubkit
python312Packages.githubkit.dist
python312Packages.hishel
python312Packages.hishel.dist

nixpkgs-review result
Generated using nixpkgs-review.
Command: nixpkgs-review pr 353363

x86_64-linux

:white_check_mark: 10 packages built:

pdm
pdm.dist
python311Packages.githubkit
python311Packages.githubkit.dist
python311Packages.hishel
python311Packages.hishel.dist
python312Packages.githubkit
python312Packages.githubkit.dist
python312Packages.hishel
python312Packages.hishel.dist


net: pure Go DNS resolver hangs with ipv6 link-local address on macOS

What version of Go are you using (go version)?

$ go version
go version go1.18 darwin/amd64

This is also reproduced against go1.17.8, so doesn't appear to be new to go1.18.
Does this issue reproduce with the latest release?
Yes.
What operating system and processor architecture are you using (go env)?
macOS 12.3, Intel (amd64)
go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/xxx/Library/Caches/go-build"
GOENV="/Users/xxx/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/xxx/go/pkg/mod"
GOOS="darwin"
GOPATH="/Users/xxx/go"
GOPROXY="https://proxy.golang.org/,direct"
GOROOT="/usr/local/Cellar/go/1.18/libexec"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.18/libexec/pkg/tool/darwin_amd64"
GOVCS=""
GOVERSION="go1.18"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/dev/null"
GOWORK=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/pb/fk1_tmbn1nq32bgpd6njflcw0000gn/T/go-build3259567292=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?
Making a DNS lookup against an ipv6 link-local address hangs and fails on macOS when using thenative (non-CGO) resolver.
This appears to manifest within the non-CGO based DNS resolver, but I believe it's more generally applicable to the network stack itself, it's just easier to reproduce through DNS.
The simplest reproduction we could come up with was this compiled with CGO_ENABLED=0:
package main

import (
	"context"
	"fmt"
	"net"
	"os"
	"time"
)

func main() {
	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
	defer cancel()
	ips, err := net.DefaultResolver.LookupIP(ctx, "ip", "google.com")
	if err != nil {
		fmt.Fprintf(os.Stderr, "Could not get IPs: %v\n", err)
		os.Exit(1)
	}
	for _, ip := range ips {
		fmt.Printf("google.com. IN A %s\n", ip.String())
	}
}

Paired with an /etc/resolv.conf of:
nameserver fe80::a04e:cfff:fe2f:ad64%en0
nameserver <IP_ADDRESS>

I've deduced this down to explicitly any link-local address (fe80::*) and not generically to ipv6. Other ipv6 addresses, both public and private network appear fine.
This behavior is especially concerning because it seems to cascade into larger macOS failures. All DNS seems to start failing on the whole system requiring ultimately a reboot to restore stability.
Given this, I believe this is also a bug within macOS that Go happens to be exploiting somehow.
I personally don't have a macOS machine to iterate on this, but we've deduced this both with customers running our CLI (https://github.com/planetscale/cli) as well as employees internally.
After a bunch of deducing, we've narrowed it down to the link-local address.
Again, when compiled with CGO_ENABLED=1, everything works correctly and is fine. The issue only occurs when compiled with CGO_ENABLED=0, triggering the pure Go DNS resolution path.
We originally thought this was related to arm64 (M1 Macs), but was able to finally reproduce it on Intel.
What did you expect to see?
Fast DNS resolution
What did you see instead?
Program hangs, eventually times out, in extreme cases, causing entire OS to become unstable.
For additional context: https://github.com/planetscale/discussion/discussions/181

cc @ianlancetaylor @neild

We reproduced this with Go 1.18.4 and Go 1.16.5 on M1 and Intel machines running OS X 12.3-12.5 with two different Go applications. All affected users had the fe80::* IPv6 DNS address in their nameservers. The behaviour was always what the OP described as the extreme circumstances - hung process that ignores signals, eventual network disconnection and then a frozen machine needing forced reboots.
Changing DNS servers on the network connection to drop the fe80::* address resolved it. As a mitigation we also started to build OS X binaries on OS X machines with Cgo enabled to force the use of the Cgo resolver. We lost several days debugging this ourselves and when I came to report this I found this issue already. Is there any update or ETA on when investigation might take place? This seems fairly critical.

One possible way to confound a reproduction on darwin_amd64 is if a program is being built for both darwin_amd64 and darwin_arm64 on a build worker whose native toolchain is the darwin_arm64 one. In that situation the default for CGO_ENABLED is different between the two targets: darwin_arm64 is considered to be a cross-compile and therefore CGO_ENABLED defaults to off.
I wrote some more about this in a comment on the general issue about the pure Go resolver on macOS. The short version is that if you want to reproduce it reliably it's important to explicitly set CGO_ENABLED=0 or CGO_ENABLED=1 consistently across builds for both architectures, and not rely on the default. That will then ensure that both of your builds are using the same resolver implementation.

I'm expereincing this issue too using Terraform (which is based on GoLang).
Very very bad bug. All my network stack crashes and I'm forced to:

force close the apps that are using nework (slack, browser, terminal...)
Reboot mac

Check https://github.com/hashicorp/terraform/issues/31467#issuecomment-1245176316
It is worth to get in touch with macOS network devs, because even if there is some issue in go implementation, network stack shouldn't crash so dramatically, to the point that reboot is the only option.

cc @golang/darwin

I'm using WSL and faced issues with this, so no restricted to Macs :(

Hi @pacorreia,
Given that everything so far has suggested a bad interaction between the pure Go resolver and macOS, I think it would help if you could reproduce the bug template in a comment here, with similar content to the original issue comment but describing the experience on your own system, to help recognize whether you've found another instance of the same problem or if you've found a different problem with similar symptoms.

package main

import (
	"context"
	"fmt"
	"net"
	"os"
	"time"
)

func main() {
	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
	defer cancel()
	ips, err := net.DefaultResolver.LookupIP(ctx, "ip", "google.com")
	if err != nil {
		fmt.Fprintf(os.Stderr, "Could not get IPs: %v\n", err)
		os.Exit(1)
	}
	for _, ip := range ips {
		fmt.Printf("google.com. IN A %s\n", ip.String())
	}
}

Thanks for your suggestion, since this is being experienced through Terraform I will open an issue with them following the guidelines of Go project, then they will be in touch with you if necessary.

I'm using mac M1 Ventura 13.5 (22G74), the local dns issue is actually affected my nslookup command, but it didn't affect the go program you provide with whether CGO enabled or not.

I'm seeing the same behaviour: go version go1.22.2 darwin/arm64!

Does this resolved?


It's possible to edit User Agent ?

It's possible to edit User Agent ?

For now, you can edit User Agent in utils.js file from line 1 to 6 :
const USER_AGENT_MAC =
  'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36';
const USER_AGENT_WINDOWS =
  'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36';
const USER_AGENT_LINUX =
  'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36';

This should probably be made configurable in the future.

I bring a precision to my previous message. Another way to set up your own User Agent is to use this code found here.
This approach avoids touching the source code of the package and is more configurable.

Nice this sounds really good I will try !


Setup CI for Pull Request checks

Lots of options to choose from. Since this is an Open Source project, funding doesn't appear to be an issue (presumably based on low usage).

See also https://github.com/golangci/golangci-lint/cmd/golangci-lint

The latter was referenced from the goracle README.

See also https://github.com/golangci/golangci-lint/cmd/golangci-lint

Visual Studio Code also provides an easy way to use it for a linter. #76 was generated as a result of testing it against the current codebase.

On (mostly) a whim I signed up for GitHub Actions "beta" and was offered a template Go workflow for use with this repo. I accepted and #98 is the result. Working on integrating a few extra tools to provide linting checks to pass/fail PRs based on the results. So far it's very promising.


Take inspiration from streamlit-pydantic

streamlit-pydantic is an existing, more mature package. There might be a lot of things to learn and get inspiration from including the documentation and implementation.
The request is

To update the the README and documentation with inspiration from streamlit-pydantic
consider renaming to panel-pydantic similarly to streamlit-pydantic
Evaluate whether there are things in the streamlit-pydantic implementation that could inspire or be reused. If yes then create a list of things to implement in the issue list.

Actually what inspired me to write this package was frustration with streamlit-pydantic (so i should probably add them to the credits list :laughing: )
My goal for this implementation is to be the opposite of that implementation...
Im mostly joking of course, they do have a very nice README. I just dont yet feel comfortable advertising it so aggressively when its not yet stable and I dont have proper testing set up...
regarding the name change, as soon as the package is stable and feels like a "real" python package then id be happy to rename it and restart the version counter.
P.S. The only reason I'm bumping the version currently is that I'm using it in another project that is deployed with pip so I tend to bump the version even after small changes if I happen to need them in the other package.

Could you describe the issues with streamlit-pydantic that you are trying to solve? What should be done better here?

Mostly the approach. They take the model .schema() result and they have a list of supported jsonschema specs, for each property they just go one by one with a huge if-else statement and test whether it matches that property type and if it does they call the appropriate function on the rendering class. There is no support for arbitrary types and configuration, only jsonschema stuff. My approach is to use the actual python type for dispatching what widget builder to use and to use the information in the actual ModelField instance inside the widget builder to construct a widget. The dispatch system is based on the python type-system and is completely overridable, so any user can add support for arbitrary python types or override the widget builder for a supported type or only for a specific sub-class.
For instance if you have a subclass of some type, eg
import pandas as pd
class DatetimeInterval(pd.Interval):
    # some logic asserting left and right are pd.Timestamp

and you wanted these intervals to be edited with the DatetimeRangePicker, you would just do:
import pydantic_panel as pp
import panel as pn

class TimeIntervalEditor(DatetimeRangePicker):
    value = param.ClassSelector(DatetimeInterval, default=None)

    def _serialize_value(self, value):
        value = super()._serialize_value(value)
        if any([v is None for v in value]):
            return None
        return DatetimeInterval(left=value[0], right=value[1])

    def _deserialize_value(self, value):
        if isinstance(value, DatetimeInterval):
            value = value.left, value.right

        value = super()._deserialize_value(value)
        return value

    @param.depends('start', 'end', watch=True)
    def _update_value_bounds(self):
        pass

@pp.infer_widget.dispatch(precedence=2)
def infer_widget(value: DatetimeInterval, field: Optional[ModelField] = None, **kwargs):
    kwargs = clean_kwargs(TimeIntervalEditor, kwargs)
    return TimeIntervalEditor(value=value, **kwargs)

This kind of this is impossible in streamlit-pydantic just by nature of their design choices.


fix(KFLUXBUGS-1116): support signing all manifest digests

extract-index-image now produces a result of the digests for each arch found in the manifest list
sign-index-image now consumes this list and creates an InternalRequest for each digest.
fbc-release updated to specify new parameter for sign-index-image

/test release-pipelines-e2e-suite

closing since I have to alter my strategy...


Create spacing tokens for typography

Measure the space between the different text styles from the Typography component, so instead tell to designers how to do it, we just give them the final value they should use depending on the case. So is needed to check all the text style combinations for the values for the different fonts (Inter and Equinor font).
Definition of done: a table with all the values for different font styles.
Example: title in Equinor font + Body text style (Inter).


configure hourUnit format

Hi. How can i specify format for hourUnit, minuteUnit and secondUnit like this:

{{minutes}} {{minuteUnit}}

{{seconds}} {{secondUnit}}
```

Hi @sluchznak ,
We use https://github.com/EvanHahn/HumanizeDuration.js#usage to display time units. It only allows us to display time this way:
humanizeDuration(97320000)  // "1 day, 3 hours, 2 minutes"

So at the moment, what you ask, having the unit translated separately from the time value is not yet possible, it would be a great Pull request to HumanizeDuration thought.
What you can do is if your unit is hour, minute and second :

{{hours}}  hour{{hoursS}}

{{minutes}} minute{{minutesS }}

{{seconds}} second{{secondsS}}


demo how to use lazy loading with Webpack

As a developer I want to have an easy to understand demo of how to use the lazy loading functionality in Webpack projects.
DoD:

the 'dynamic imports' demo on the 'Code Splitting' section is raised to be the second on the page (above HTML Imports)
the 'dynamic imports' demo includes a working example of how to use it with Webpack along with an explanation of why the things work the way the do

hey, thanks for this component is awesome! but beside the demo, how can I achieve the lazy-loading witg Webpack? it is documented somewhere?

Hi @moebiusmania! Have you already checked https://github.com/web-padawan/polymer3-webpack-starter? It has an example of using Vaadin Router with Webpack and lazy-loading.


pynvml.nvml.NVMLError_NotSupported: Not Supported

when I running main.py
traceback this:
C:\ProgramData\Anaconda3\python.exe D:/ChromeDownloads/xview2-master/xview2-master/main.py
Traceback (most recent call last):
File "D:/ChromeDownloads/xview2-master/xview2-master/main.py", line 65, in
affinity = set_affinity(os.getenv("LOCAL_RANK", "0"), "socket_unique_interleaved")
File "D:\ChromeDownloads\xview2-master\xview2-master\utils\gpu_affinity.py", line 139, in set_affinity
set_socket_unique_affinity(gpu_id, world_size, "interleaved")
File "D:\ChromeDownloads\xview2-master\xview2-master\utils\gpu_affinity.py", line 81, in set_socket_unique_affinity
socket_affinities = [dev.getCpuAffinity() for dev in device_ids]
File "D:\ChromeDownloads\xview2-master\xview2-master\utils\gpu_affinity.py", line 81, in
socket_affinities = [dev.getCpuAffinity() for dev in device_ids]
File "D:\ChromeDownloads\xview2-master\xview2-master\utils\gpu_affinity.py", line 34, in getCpuAffinity
for j in pynvml.nvmlDeviceGetCpuAffinity(self.handle, device._nvml_affinity_elements):
File "C:\ProgramData\Anaconda3\lib\site-packages\pynvml\nvml.py", line 989, in nvmlDeviceGetCpuAffinity
check_return(ret)
File "C:\ProgramData\Anaconda3\lib\site-packages\pynvml\nvml.py", line 366, in check_return
raise NVMLError(ret)
pynvml.nvml.NVMLError_NotSupported: Not Supported
Process finished with exit code 1
thanks very much!

You can see if commenting line 65 inmain.py file with: affinity = set_affinity(os.getenv("LOCAL_RANK", "0"), "socket_unique_interleaved") solves this problem.

yes,it works,thanks a lot.but a new error:
Downloading: "https://s3.us-west-1.wasabisys.com/resnest/torch/resnest200-75117900.pth" to C:\Users\14548/.cache\torch\hub\checkpoints\resnest200-75117900.pth
Traceback (most recent call last):
File "D:/ChromeDownloads/xview2-master/xview2-master/main.py", line 72, in
model = Model(args)
File "D:\ChromeDownloads\xview2-master\xview2-master\model\plt.py", line 26, in init
self.model = UNetLoc(args) if args.type == "pre" else get_dmg_unet(args)
File "D:\ChromeDownloads\xview2-master\xview2-master\model\unet.py", line 41, in get_dmg_unet
model = dmg_unets[args.dmg_model](args, nclass)
File "D:\ChromeDownloads\xview2-master\xview2-master\model\unet.py", line 221, in init
self.unet = UNetTemplate(args)
File "D:\ChromeDownloads\xview2-master\xview2-master\model\unet.py", line 121, in init
self.enc_chn, self.enc_l1, self.enc_l2, self.enc_l3, self.enc_l4, self.enc_l5 = get_encoder(
File "D:\ChromeDownloads\xview2-master\xview2-master\model\unet.py", line 52, in get_encoder
encoder = resnest[encoder_str](pretrained=pretrained, dilation=dilation)
File "C:\ProgramData\Anaconda3\lib\site-packages\resnest\torch\resnest.py", line 59, in resnest200
model.load_state_dict(torch.hub.load_state_dict_from_url(
File "C:\ProgramData\Anaconda3\lib\site-packages\torch\hub.py", line 555, in load_state_dict_from_url
download_url_to_file(url, cached_file, hash_prefix, progress=progress)
File "C:\ProgramData\Anaconda3\lib\site-packages\torch\hub.py", line 425, in download_url_to_file
u = urlopen(req)
File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 222, in urlopen
return opener.open(url, data, timeout)
File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 531, in open
response = meth(req, response)
File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 640, in http_response
response = self.parent.error(
File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 569, in error
return self._call_chain(*args)
File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 502, in _call_chain
result = func(*args)
File "C:\ProgramData\Anaconda3\lib\urllib\request.py", line 649, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden
Process finished with exit code 1

Are you running your code inside docker container as described in installation section?
I've checked and I don't have problems with checkpoint downloading. Please make sure you are running your code inside docker container such that all dependencies are properly installed.

thank you so much, I will try it on


Functions as table part in Zend\Db\Sql\Select not quoted correctly when using pdo_pgsql driver

I'm trying to use a function as a table in Zend\Db\Sql\Select and it appears to be quoting incorrectly. The entire function including parens is wrapped in quotes and I get an error saying the table doesnt exist.
<?php

require_once 'vendor/autoload.php';

$config = [
    'driver'   => 'pdo_pgsql',
    'host'     => 'postgresvm.dev',
    'username' => 'user',
    'password' => 'pass',
    'dbname'   => 'mydb',
    'port'     => 5432
];

$dbAdapter  = new \Zend\Db\Adapter\Adapter($config);
$sqlAdapter = new \Zend\Db\Sql\Sql($dbAdapter);

$select = new \Zend\Db\Sql\Select();
$select->from("my_schema.ufn_user_client(2, 3)");

$results =  $dbAdapter->query(
    $sqlAdapter->buildSqlString($select),
    \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE
)->toArray();

var_dump($results);

PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[42P01]: Undefined table: 7 ERROR:  relation "my_schema.ufn_user_client(2, 3)" does not exist. I've tried wrapping it in a Zend\Db\Sql\Expression but it requires the table name to be a string.

You have to wrap from part into \Zend\Db\Sql\Expression

Like I said, I tried using an Expression, but from() requires the parameter to be a string.
Zend\Db\Sql\Exception\InvalidArgumentException: $table must be a string, array, or an instance of TableIdentifier in /var/www/appsuite/html/vendor/zendframework/zend-db/src/Sql/Select.php on line 192

If I try calling $expression->getExpression() to get the string then I end up with the same quoting problem I had before. I also tried using TableIdentifier with and without an Expression
<?php

require_once 'vendor/autoload.php';

$config = [
    'driver'   => 'pdo_pgsql',
    'host'     => 'postgresvm.dev',
    'username' => 'vagrant',
    'password' => 'vagrant',
    'dbname'   => 'i3logix',
    'port'     => 5432
];

$dbAdapter  = new \Zend\Db\Adapter\Adapter($config);
$sqlAdapter = new \Zend\Db\Sql\Sql($dbAdapter);

$select = new \Zend\Db\Sql\Select();
$select->from(new \Zend\Db\Sql\TableIdentifier("my_schema.ufn_user_client(2, 3)"));

$results =  $dbAdapter->query(
    $sqlAdapter->buildSqlString($select),
    \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE
)->toArray();

var_dump($results);


Correct spell of eventReceived: for UPPEventSubscriptionDelegate.

Thanks for this, I'll have to consider it as it is a breaking change for the API.


Keep both / and /locale

Is there any way to have both / and /locale simultaneously?
The issue is that Google is banning websites for the following redirects:
/DEFAULT_LOCAL -> /
/ -> /USER_LOCALE

A couple questions:

If you have the same content on / and /default, wouldn't this be bad for SEO since you have duplicate content on multiple pages?
As far as I'm aware, Google bots do not have an accept-language header. Which means when they visit your site at /, no redirection will occur via this library. How would Google know that you have redirection at all?
Assuming you're using prefixDefault: false, how would Google know that /default exists? Are you mistakenly including /default in your sitemap?

@i18nexus,

If you have the same content on / and /default, wouldn't this be bad for SEO since you have duplicate content on multiple pages?

it's possible to leave only one copy – this is Google's recommendation, and Next.js supports this out of the box.

As far as I'm aware, Google bots do not have an accept-language header. Which means when they visit your site at /, no redirection will occur via this library. How would Google know that you have redirection at all?

Google, like all search engines, can detect redirects and even partially execute JavaScript code. Google itself informed me about this issue, pointing out the reasons for the ban.

Assuming you're using prefixDefault: false, how would Google know that /default exists? Are you mistakenly including /default in your sitemap?

Apparently, they parsed the URL and requested it in different ways. It's also possible they visited a page where the language is determined by geolocation, remembered that address, and tried using it with a different IP. The fact is, I see such requests in their analytics. I've temporarily closed off these addresses from indexing, but the problem still persists.

This library does not use geolocation or IP to determine the language. It just uses the accept-language header. But I get your point they may have tricky complex ways of determining which pages can potentially redirect.
Can you show me what your i18nConfig looks like so I can have a better idea of your setup.
Can you also provide the pathname of the pages that Google says are not served on Google due to redirect?

I might also recommend that the hrefs on your links contain the current locale. If your links are always <Link href="/foo" /> even when viewing a page on a non-default locale page like /es, Google will likely click these links and see they are redirected to /es/foo.
For ideal SEO, it is probably ideal to have a component something like this:
const LinkWithLocale(props) {
  const locale = useCurrentLocale(i18nConfig);
  let href = locale === i18nConfig.defaultLocale ? props.href : `/${locale}${props.href}`;

  return <Link {...props} href={href}>{props.children}</Link>;
}

I'll recommend we add this to our documentation.

@i18nexus,

This library does not use geolocation or IP to determine the language.
I determine the geolocation myself )

Can you show me what your i18nConfig looks like so I can have a better idea of your setup.

// middleware.ts

import {
    type NextRequest,
    NextResponse
} from 'next/server';

import {i18nRouter} from 'next-i18n-router';

import {
    getDefaultLocale,
    locales
} from '@/app/i18n/locale';

import {
    type Headers,
    getSecurityHeaders
} from '@/security/headers';

import {DefaultLocaleCookies} from '@/app/cookies';
import {getDefaultCookieOptions} from '@/sdk/cookie';

const setSecurityHeaders = (response: NextResponse, headers: Headers): void => {
    headers.forEach(([name, value, isDev]) => {
        !isDev && response.headers.set(name, value);
    });
};

const setLocale = (response: NextResponse, value: string): void => {
    response.cookies.set(DefaultLocaleCookies.NAME, value, getDefaultCookieOptions());
};

const middleware = (request: NextRequest): NextResponse => {
    const {geo} = request;
    const securityHeaders = getSecurityHeaders(request);
    const defaultLocale = getDefaultLocale(geo?.country);

    const response = i18nRouter(request, {locales, defaultLocale});

    setLocale(response, defaultLocale);
    setSecurityHeaders(response, securityHeaders);

    return response;
};

export const config = {
    matcher: '/((?!api|static|.*\\..*|_next).*)'
};

export {middleware};

// options.ts

import type {Namespace, InitOptions} from 'i18next';

import {
    Locale,
    defaultLocale,
    locales
} from './locale';

import {Company, Domains} from '@/app/config';

const DEFAULT_NAMESPACE = 'translation';

const getOptions = (locale: Locale = defaultLocale, ns: Namespace = DEFAULT_NAMESPACE): InitOptions => {
    return {
        lng: locale,
        supportedLngs: locales,
        fallbackLng: defaultLocale,
        ns,
        defaultNS: DEFAULT_NAMESPACE,
        fallbackNS: DEFAULT_NAMESPACE
    }
};

export {getOptions};
export type {Namespace};

// i18next.ts (client)
import i18next from 'i18next';
import {initReactI18next} from 'react-i18next';
import resourcesToBackend from 'i18next-resources-to-backend';
import LanguageDetector from 'i18next-browser-languagedetector';
import {locales} from './locale';

import {getOptions} from './config';
import {loader} from './loader';

const SSR = typeof window === 'undefined';

i18next.isInitialized || i18next
    .use(initReactI18next)
    .use(LanguageDetector)
    .use(resourcesToBackend(loader))
    .init({
        ...getOptions(),
        lng: undefined,

        detection: {
            order: ['path', 'htmlTag', 'cookie', 'navigator']
        },
        preload: SSR ? locales : []
    });

// i18next.ts (ssr)

import {type Namespace, createInstance} from 'i18next';
import {initReactI18next} from 'react-i18next/initReactI18next';
import resourcesToBackend from 'i18next-resources-to-backend';

import {getOptions} from './config';
import {loader} from './loader';
import {type Locale} from './locale';

const initI18next = async (locale: Locale, namespace?: Namespace) => {
    const i18nInstance = createInstance();

    await i18nInstance
        .use(initReactI18next)
        .use(resourcesToBackend(loader))
        .init(getOptions(locale, namespace))

    return i18nInstance;
};

type Props = {
    locale: Locale;
    namespace?: Namespace;
    key?: string;
};

// SSR
const useTranslation = async ({locale, namespace, key}: Props) => {
    const i18n = await initI18next(locale, namespace);
    const t = i18n.getFixedT(locale, namespace, key);

    return {t, i18n};
};

export {useTranslation};

// change-locale.ts
'use client'

import {
    useEffect,
    useState,
    Dispatch,
    SetStateAction
} from 'react';

import {
    useParams,
    usePathname
} from 'next/navigation';

import {
    type KeyPrefix,
    Namespace
} from 'i18next';

import Cookies from 'universal-cookie';

import {
    type UseTranslationResponse,
    FallbackNs,
    useTranslation as useTranslationOrg
} from 'react-i18next';

import {useRouter} from '@/components/progress-bar/suspense';
import {LocaleCookies} from '@/app/cookies';

import {
    Locale,
    defaultLocale
} from './locale';

import './i18next';

type Translation = UseTranslationResponse<FallbackNs<string>, KeyPrefix<string>>;

const SSR = typeof window === 'undefined';

type LocaleState<T extends Locale> = [T, Dispatch<SetStateAction<T>>];

const useLocale = <T extends Locale>(): LocaleState<T> => {
    const {locale} = useParams<{locale: T}>();

    return useState(locale);
};

type TranslationProps = {
    namespace?: Namespace;
    key?: string;
};

const useTranslation = ({namespace, key}: TranslationProps): Translation => {
    const [pathLocale] = useLocale();
    const result = useTranslationOrg(namespace, {keyPrefix: key});
    const {i18n} = result;

    const cookies = new Cookies(null, {
        path: <string>LocaleCookies.PATH,
        maxAge: <number>LocaleCookies.MAX_AGE
    });

    if (SSR && pathLocale && i18n.resolvedLanguage !== pathLocale) {
        i18n.changeLanguage(pathLocale);
    }
    else {
        // eslint-disable-next-line react-hooks/rules-of-hooks
        const [language, setLanguage] = useState(i18n.resolvedLanguage);

        // eslint-disable-next-line react-hooks/rules-of-hooks
        useEffect(() => {
            if (language === i18n.resolvedLanguage) {
                return void 0;
            }

            setLanguage(i18n.resolvedLanguage);
        }, [language, i18n.resolvedLanguage]);

        // eslint-disable-next-line react-hooks/rules-of-hooks
        useEffect(() => {
            if (!pathLocale || i18n.resolvedLanguage === pathLocale) {
                return void 0;
            }

            i18n.changeLanguage(pathLocale);
        }, [pathLocale, i18n]);

        const cookieLocale = cookies.get(LocaleCookies.NAME);

        // eslint-disable-next-line react-hooks/rules-of-hooks
        useEffect(() => {
            if (cookieLocale === pathLocale) {
                return void 0;
            }

            cookies.set(LocaleCookies.NAME, pathLocale);

        // eslint-disable-next-line react-hooks/exhaustive-deps
        }, [pathLocale, cookieLocale]);
    }

    return result;
};

type ChangeLocaleState<T extends Locale> = [T, (locale: T) => void];

const useChangeLocale = <T extends Locale>(language: T): ChangeLocaleState<T> => {
    const router = useRouter();
    const {locale: pathLocale} = useParams();
    const pathname = usePathname();
    const [locale, setLocale] = useLocale<T>();
    const date = new Date();

    const dispatcher = (locale: T): void => {
        const maxAge = date.getTime() + LocaleCookies.MAX_AGE;

        date.setTime(maxAge);
        const currentPathname = new RegExp(`^/${pathLocale}`);

        if (language === defaultLocale) {
            const newPathname = pathname.replace(currentPathname, '');

            router.push('/' + locale + newPathname);
        }
        else {
            let newPathname = pathname.replace(currentPathname, `/${locale}`);

            router.push(newPathname);
        }

        setLocale(locale);

        router.refresh();
    };

    return [locale, dispatcher];
};

export {
    useLocale,
    useChangeLocale,
    useTranslation
};

export type {Translation};

Code's a bit messy, but here's everything related to localization, just in case.

Can you also provide the pathname of the pages that Google says are not served on Google due to redirect?

Yep, https://wayhunter.com root page

Oh, ok. If you are manually using geolocation then this is your problem. Google is most certainly running into redirects on your app. This library does not use geolocation in the default localeDetector for that reason. Using request headers is a lot more SEO friendly.
When it comes to Google, using redirects for multi-language purposes at all is not recommended. Whether it's via headers or geolocation. They specifically say:
"Avoid automatically redirecting users from one language version of a site to a different language version of a site. For example, don't redirect based on what you think the user's language may be. These redirections could prevent users (and search engines) from viewing all the versions of your site." https://developers.google.com/search/docs/specialty/international/managing-multi-regional-sites
So if you are going to use redirects at all, using the accept-language header carefully is certainly the better of the 2 evils. If using headers carefully, Google will not experience your redirects at all since it wouldn't have a way of knowing your redirects exist. Their bots do not use an accept language header:
"In addition, the crawler sends HTTP requests without setting Accept-Language in the request header." https://developers.google.com/search/docs/specialty/international/locale-adaptive-pages
Is use of geolocation an absolute requirement for you?

Is use of geolocation an absolute requirement for you?

It's not very critical, although it is quite a common and convenient practice. From my point of view, the redirects are set up correctly, but from the search engines' perspective, they are not. As a temporary workaround, I have hidden the default locale from the robots and sent the pages for reindexing. If the situation does not change in 3 days, I will think about how to solve this problem. Thanks for your help.

Yeah, I think as long as you're using geolocation, you'll likely continue running into these problems. The bot's IP is always in the the United States as can be read about in the page I linked above. So if your default language is not English, all of your pages will redirect to /en/.... I personally would avoid using geolocation. But hope you the best on figuring it out, good luck!

After looking at your code again, I do see a problematic line:
const defaultLocale = getDefaultLocale(geo?.country);

The defaultLocale used with next-i18n-router really should not be dynamic. This means if someone in Spain visits your site, / will be in Spanish and /es won't exist. But to someone in the United States, / will be in English and /en won't exist. This can certainly be adding to your SEO problems.

The defaultLocale used with next-i18n-router really should not be dynamic. This means if someone in Spain visits your site, / will be in Spanish and /es won't exist. But to someone in the United States, / will be in English and /en won't exist. This can certainly be adding to your SEO problems.

Not quite right. I have a fixed list of 5 locales. If a user visits from Spain, they will see the page in English because /es doesn't exist. I check in advance if I have such a locale. However, if a user visits from a country where French is spoken, like Benin or Wallis and Futuna, I'll show them the text in French because I have /fr.
enum Locales {
    EN = 'en',
    FR = 'fr',
    KK = 'kk',
    RU = 'ru',
    ZH = 'zh'
}

enum Countries {
    FRANCE = 'FR',
    ....
}

const countries = {
    [Locales.FR]: [
        Countries.BENIN,
        Countries.WALLIS_AND_FUTUNA,
        ....
    ],
    ....
};

const getDefaultLocale = (locale?: string): string => {
    const fallbackLocale = defaultLocale || Locales.EN;

    if (!locale) {
        return fallbackLocale;
    }

    const zones = Object.entries(countries);

    for (const [zone, countries] of zones) {
        if (countries.includes(<Countries>locale!)) {
            return zone;
        }
    }

    return fallbackLocale;
};

This approach is used on many well-known websites, but I don't know how to solve the indexing problem.
The problem is that when the bot accesses from France, /fr becomes the default page and a request like /fr redirects to /, but when the bot accesses from the USA, /fr exists and does not redirect to /.

@monolithed What approach did you end up taking?

@klonwar, the issue is still relevant for me; I haven’t found a way to keep two paths simultaneously. For now, I had to give up on automatic locale detection to avoid being banned by search engines. Ideally, all paths should be accessible because search engines remember the paths of all locales, and if they can't find one, they exclude the main page from the index. I would reopen this task if it can be solved.


feat(compute_ctl): add periodic lease lsn requests for static computes

Problem
It's part of https://github.com/neondatabase/neon/issues/7497
To make sure that Static computes are not affected by GC, we introduced LSN lease API, we need to start using it in compute_ctl.
Summary of changes
It starts a thread for Static computes that periodically ping pageserver(s). Ping interval could be configured via spec.
Question: it spawns system thread. I would be happy to use tokio, but in compute_ctl we don't have some general available tokio runtime. Is this ok?
Checklist before requesting a review

[ ] I have performed a self-review of my code.
[ ] If it is a core feature, I have added thorough tests.
[ ] Do we need to implement analytics? if so did you add the relevant metrics to the dashboard?
[ ] If this PR requires public announcement, mark it with /release-notes label and add several sentences in this section.

Checklist before merging

[ ] Do not forget to reformat commit message to not include the above checklist

Testing:

test_ondemand_download_replica failed with a message from this new code -- but I don't see that test setting an explicit LSN?  Pretty weird, seems like it might be activating incorrectly somehow?
Do we already have a test that sets up a static endpoint, which would exercise the code in this PR?

@jcsp about test_ondemand_download_replica test. I think it's a bug in the test, it actually creates static endpoint instead of replica. https://github.com/neondatabase/neon/blob/main/control_plane/src/bin/neon_local.rs#L816
For hot_standby=false (default) it creates Static. And it doesn't make sense to provide lsn if you expect Replica.
here is the test https://github.com/neondatabase/neon/blob/b6e1c09c733a699cbaf76ff8508f9552eec1db7f/test_runner/regress/test_ondemand_slru_download.py#L118

@hlinnaka could you please check my assamption that the test doesn't do what is expected https://github.com/neondatabase/neon/pull/7994#issuecomment-2173256384?

It's indeed testing on-demand SLRU download in a static endpoint, rather than a replica that would follow the primary. That's intentional, but I agree the naming is misleading.
Is a "static endpoint" a "replica"? Or is it a replica only if it follows the primary? Our terminology is not very well defined.
And it would be good to also test on-demand SLRU download in a hot standby replica that follows the primary. We don't have a test for that currently.

More investigation on failed tests:

test_readonly_node tried to create an endpoint before GC cutoff. Besides the basebackup failure, lsn lease request would fail as well. We should add it to allowed errors:

    env.pageserver.allowed_errors.extend(
        [
            ".*basebackup .* failed: invalid basebackup lsn.*",
            ".*page_service.*error obtaining lsn lease.*.*tried to request a page version that was garbage collected",
        ]
    )

test_ondemand_download_replica failed for the shard=4 case with an error saying NotFound("Tenant  <tenant_id> not found"). Is there anything specific for sharding that could cause this problem allure?


chore: add .dockerignore

What this PR does / why we need it:

This PR will add a .dockerignore file. We need it to reduce the docker image build size and make the build faster. Also good for local development

/assign @sftim

Looks good, thanks!
/lgtm
/approve


SAK-42808 Exception adding assignment with existing grades to gradebook

Looks correct as associateGradebookAssignment would always be null there.


Navigation at Bottom of Page

For wish list—would be useful to be able to go to next page when scrolling through search results.
See "next" here:

Would be useful to have it here too:

The next/previous results navigation is "sticky" - it stays at the top of the page once you scroll down past where it displays normally, so it's always visible and bottom nav would be redundant.


fix: Changelog URL pointing to old changelog

Changes proposed:

[ ] Add
[ ] Delete
[x] Fix
[ ] Prepare

Fixes the "View Updates for new release" extension prompt leading to the old changelog.

Totally saw #2919 😕


Improve Torii documentation

[ ] Architecture decisions of Torii server and Torii client and why they both exist
[ ] Explanation of torii indexing individual worlds and examples of multiple toriis on a network
[ ] Torii P2P explanation and production examples
[ ] Detailed example using dojo.js, torii and graphql
[ ] Detailed example using dojo.js, torii and grpc
[ ] Detailed example using unity and torii
[ ] Contributing to torii Core
[ ] Plans and roadmap post 1.0.0
[ ] Running a torii on slot

@ponderingdemocritus Hello , I believe i can work on this documentations

Hello @ponderingdemocritus! I'd love to tackle the issue "Detailed example using unity and torii". I'm thinking in this ideas to abord the problem: I propose developing an example in Unity using Torii, including research on both tools, as well as documenting this example with clear and concise steps. Lastly, I'll seek feedback for further refinements.

Hi @ponderingdemocritus @ptisserand @milancermak I'm interested in contributing to the "Contributing to torii Core" issue. I've been exploring Torii's innovative use of Rust and its advanced GraphQL and gRPC interfaces. I have an idea to enhance the system's scalability by implementing a caching layer that could reduce load times and improve data retrieval efficiency. Looking forward to collaborating on this and contributing to the project's success.

Hi @ponderingdemocritus, I'm interested in contributing to the "Explanation of torii indexing individual worlds and examples of multiple toriis on a network" issue.

Hi @ponderingdemocritus, I would like to be assigned to the "Architecture decisions of Torii server and Torii client and why they both exist" issue

@coxmars please go ahead

@ponderingdemocritus Can I work on this?

I am applying to this issue via OnlyDust platform.
My background and how it can be leveraged
hi
How I plan on tackling this issue
hi

I am applying to this issue via OnlyDust platform.
My background and how it can be leveraged
i'm a frontend dev i'm i have skills in react, typescript, javascript, tailwind etc
How I plan on tackling this issue
i would easily solve this problem

I am applying to this issue via OnlyDust platform.
My background and how it can be leveraged
I have a strong background in building scalable and performance-optimized web applications, I believe I can make valuable contributions to the Hylé project, particularly in the areas of the Torii server and Torii client
How I plan on tackling this issue
I would approach this issue with following steps
Architecture Decisions of Torii Server and Torii Client:
Understand the distinct roles and responsibilities of the Torii server and Torii client within the overall Hylé architecture.
Analyze the reasons behind the separation of the server and client components, such as scalability, flexibility, and clear delineation of concerns.
Identify the key communication mechanisms and interactions between the Torii server and Torii client.
Torii Indexing and Multi-Torii Networks:
Examine the Torii's indexing capabilities and how it manages the registration and discovery of individual worlds.
Provide examples of how the Torii server handles scenarios with multiple Toriis on a network, including aspects like load balancing, fault tolerance, and seamless world navigation.
Demonstrate the underlying protocols, data structures, and algorithms used to enable efficient indexing and world discovery.
Torii P2P Explanation and Production Examples:
Delve into the Torii's P2P (Peer-to-Peer) capabilities, explaining the benefits and use cases of the decentralized communication model.
Create production-ready examples showcasing the implementation of Torii-based P2P interactions, including features like real-time collaboration, data synchronization, and secure communication.
Highlight the integration of the Torii P2P features with the broader Hylé ecosystem, demonstrating their seamless interoperability.
Detailed Examples with Dojo.js, Torii, and GraphQL/gRPC:
Develop comprehensive examples that demonstrate the integration of the Torii client with popular frontend frameworks like Dojo.js.
Showcase how to leverage the Torii client's capabilities in conjunction with GraphQL and gRPC for efficient data fetching, real-time communication, and seamless user experiences.
Provide detailed code samples, configuration files, and step-by-step instructions to guide developers through the integration process.
Unity and Torii Integration:
Collaborate with Unity developers to create a detailed example showcasing the integration of the Torii client with the Unity game engine.
Demonstrate how to establish bidirectional communication between the web-based Torii client and the 3D world within Unity, enabling seamless interactions and data exchange.
Highlight best practices, performance considerations, and any unique challenges encountered during the integration process.
Contributing to Torii Core:
Identify areas within the Torii core codebase where I can contribute, such as improving performance, enhancing indexing capabilities, or implementing new features.
Propose and discuss potential improvements or new functionalities that align with the Hylé platform's roadmap and the needs of the community.
Provide sample code, test cases, and documentation to facilitate the review and integration of my contributions.
Plans and Roadmap Post 1.0.0:
Analyze the current Torii features and capabilities, and identify areas for potential improvement or expansion.
Propose ideas and recommendations for the Torii's future roadmap, taking into account the evolving needs of the Hylé ecosystem and emerging trends in web and metaverse technologies.
Collaborate with the Hylé team to prioritize and plan the implementation of these roadmap items.
Running a Torii on Slot:
Develop a detailed guide on deploying and running a Torii server on the Slot layer of the Hylé platform.
Provide instructions on the necessary configurations, infrastructure requirements, and integration steps to ensure the Torii server's seamless operation within the Slot environment.
Demonstrate best practices for monitoring, scaling, and maintaining the Torii server running on Slot.

I am applying to this issue via OnlyDust platform.
My background and how it can be leveraged
My background in technical writing and software development has equipped me with a unique blend of skills that are directly applicable to improving Torii documentation. I have a strong understanding of technical concepts and the ability to translate complex information into clear and concise language.
How I plan on tackling this issue
i would Analyze: Assess the current documentation to identify its strengths and weaknesses.
Set Goals: Clearly define what I want to achieve
Plan: Create a detailed plan outlining the steps needed to improve the documentation.
Write and Edit: Create high-quality content that is easy to understand and free of errors.
Review and Test: Ensure the documentation is accurate and helpful by getting feedback from others.
Maintain: Keep the documentation up-to-date as Torii evolves.

I am applying to this issue via OnlyDust platform.
My background and how it can be leveraged
I’m a Computer Engineering student with a keen interest in learning about blockchain technologies, including gRPC and network infrastructure. Although I'm new to open source, I'm highly motivated to dive deep into understanding the architecture and functionality of Torii. This issue provides a great opportunity to explore Torii’s architecture and contribute meaningfully.
How I plan on tackling this issue
Plan for Tackling the Issue:
To address the architecture and functionality of Torii server and client, I plan to:
Understand the architectural decisions behind Torii: I will review the design choices that led to the creation of both the Torii server and client, explaining their respective roles and why both exist.
Explain Torii indexing: I’ll provide a clear explanation of how Torii indexes individual worlds, along with examples of how multiple Toriis can coexist on the same network.
Break down Torii P2P: I will dive into the peer-to-peer (P2P) mechanisms of Torii and provide real-world examples of its use in production environments.
Provide detailed usage examples:
I will create a detailed example using dojo.js, Torii, and GraphQL.
Similarly, I’ll provide a step-by-step example of using dojo.js, Torii, and gRPC.
Additionally, I will demonstrate a use case that integrates Unity with Torii.
Contributing to Torii Core: I will outline how developers can contribute to the Torii Core, making it easier for others to get involved and collaborate.
Discuss the roadmap: I will review the post-1.0.0 roadmap, discussing future plans for the Torii project and potential improvements.
Provide a tutorial on running a Torii on slot: Lastly, I’ll create a tutorial explaining how to set up and run a Torii on slot, making the process accessible for new users.
By following this plan, I aim to provide a comprehensive overview of Torii and offer practical examples that can help other developers better understand its functionality.
Looking forward to contributing and supporting the Torii community!

I am applying to this issue via OnlyDust platform.
My background and how it can be leveraged
I’ve been working on blockchain projects, especially on StarkNet, where I’ve gained solid experience using tools like dojo.js and Starkli. I’m familiar with the architecture behind distributed systems and P2P networks, which makes me well-suited to document and explain Torii’s server-client structure and its P2P model. I’ve worked with protocols like GraphQL and gRPC, and I can bring in-depth examples on how Torii interacts with these technologies.
Recently, I was involved in documenting a P2P system using libp2p, and the experience will be very helpful in explaining how Torii indexes individual worlds and interacts across the network. I also have experience in writing developer-friendly documentation that balances detail and clarity, ensuring that both beginners and advanced users can benefit.
How I plan on tackling this issue
Understand the Torii server/client architecture
First, I d dive into how the Torii server and client are set up and why they re needed. I d start by creating diagrams (using tools like Graphviz or Mermaid.js) to visualize the architecture, showing how the server manages state synchronization between nodes and how the client sends asynchronous messages.
Example:
I d include diagrams that break down how the server handles communication in a P2P network and how it optimizes latency in real-time on-chain games. for example, Torii might use event-driven patterns to update game states across nodes, and I would map out how these processes work step by step.
Indexing individual worlds and network examples
Next, I d walk through how Torii indexes individual worlds and how that information is shared across the network. I d provide detailed examples of how worlds are created, indexed, and communicated between multiple Toriis in a distributed environment.
Example:
Let s say we want to index a world using dojo.js. I d include a step-by-step example where developers can run a simple curl command to index a world and retrieve the state via GraphQL.
curl -X POST http://localhost:8080/index_world -d '{"world_id": "world123", "state": {...}}'
Explain the P2P model and real-world production scenarios
I’d focus on how Torii’s P2P architecture works and give examples of its use in production. For instance, running multiple Torii instances on a network and demonstrating how they maintain state across different nodes. I’d create an example using Docker Compose or Kubernetes to show how Torii can be deployed in real-world applications with scaling in mind.
yaml: services:  torii1:    image: torii:latest
ports:

"8080:8080"
torii2:
image: torii:latest    ports:
"8081:8080"
GraphQL Example: query {
world(id: "world123") {
state
}
}

Contribute to Torii Core
To help people contribute, I d provide an easy-to follow guide on setting up a development environment for Torii Core. This would include details on how to run tests, submit pull requests, and follow the coding standards used in the project. I d also explain key parts of the codebase to help newcomers quickly get involved.
Roadmap post 1.0.0
Finally, I d outline the plans for Torii after version 1.0.0, giving users a heads-up on upcoming features and improvements. This might include better scalability, enhanced P2P protocols, or deeper integration with other tools like dojo.js and Unity.

Hi @ponderingdemocritus , can I work on

Architecture decisions of Torii server and Torii client and why they both exist
Explanation of torii indexing individual worlds and examples of multiple toriis on a network?

I am applying to this issue via OnlyDust platform.
My background and how it can be leveraged
Hi I'm a front end and also a blockchain developer
How I plan on tackling this issue
I will love to work on this