feat: inline Environment

Building further on #389, with implementing the environment inline there is no more need to encapsulate a Tanka Environment in a directory.
This proposes a solution for #390.
Might also help for #394 as the "spec" is now evaluated in Jsonnet.
This PR will allow us to use the Environment inline, like this:
{
  apiVersion: 'tanka.dev/v1alpha1',
  kind: 'Environment',
  metadata: {
    name: 'myenv',
  },
  spec: {
    apiServer: 'https://localhost',
    namespace: 'myns',
  },
  data: {
    // put here what used to be in main.jsonnet
    // or just (import 'main.jsonnet') and call this file with tanka directly
  },
}

It is fully backwards compatible but has a few drawbacks:

The tanka.dev/Environment extCode is based on the premise that the env is availabe before runtime, it is now generated at runtime, it doesn't make much sense to read env from tk.env now as the env is now available inside your jsonnet anyway.
tk env is build upon the spec.json, it will be hard to support inline environments with this
tk complete might need some adjustments

rebased.

rebased.

Also, I think the current main.jsonnet/spec.json approach is actually very beginner friendly
I agree, I don't think we should change the defaults.

My first thought is that option 1. is closer to existing behavior which I like but I'm also keen on how 2. looks aesthetically. 2. adjusts the relationship between the environment and data (environment contains data rather than being composed with it), and I'm not sure if there is enough value to justify confusing that relationship.
That being said I'm not sure which of the two relationships is objectively better out of:

environment contains data
environment and data are composed together

That being said I'm not sure which of the two relationships is objectively better out of:

environment contains data
environment and data are composed together
To really get a sense of where this is going, it helps to look at the next step that @Duologic has in mind, where you can have multiple environments within one setup. That I think will drive exactly how this is expressed.

I'm wondering whether we should do it in one go but I'm worried this PR becomes to big.

I really like the possibilities that this brings. A few thoughts:

I feel it is fair to assume there will be either a spec.json or a main.jsonnet that evaluates to a single environment having spec and data fields. I like enforced structure and prefer checked assumptions to supporting any desired style.
If we don't detect a spec.json, we can assume we are in the "new" mode and do a first pass that evaluates .spec to get all of the metadata we need. That will let us support tk env and friends with less overhead, as well as keeping the extCodes working and things.
I am still not sold on #414, since running multiple environments is a much larger paradigm shift in the workflows around tanka. It is a lot more involved than slightly refactoring the input format.

I'm a bit out here and surely didn't attend all discussions, so I might miss obvious things.
I'm generally on the lines of @captncraig, where I am in favor of a slight refactor / workflow change (this PR), but #414 seems more far-reaching to me. I do not fully understand the use-case for #414, but I am sure @Duologic can explain that to me.
Some random thoughts I had while reading along:

If we don't detect a spec.json, we can assume we are in the "new" mode

Existing behavior explicitly supports not having a spec.json, resulting in namespace=default and an empty apiServer url. We need to take care not to break users in unexpected ways.

either a spec.json or a main.jsonnet

We introduce more than one way to do the same thing here, mostly for compatibility reasons.
I'd really like to avoid a "basic" and "advanced" mode. Could we instead identify what makes the Jsonnet mode harder and make it much simpler so we can ship it as the one and only way?

I'm generally on the lines of @captncraig, where I am in favor of a slight refactor / workflow change (this PR), but #414 seems more far-reaching to me. I do not fully understand the use-case for #414, but I am sure @Duologic can explain that to me.

As mentioned in #414, it proposes an answer to the question "What if the jsonnet has multiple environments?" This can also be answered with an error message saying Tanka won't handle multiple environments at once,  that seems a bit dense to me as it is perfectly possible to handle multiple environments at once.

I'd really like to avoid a "basic" and "advanced" mode. Could we instead identify what makes the Jsonnet mode harder and make it much simpler so we can ship it as the one and only way?

The "advanced mode" does not necessarily reflect on Tanka, the way of working (basic/advanced) becomes a matter of applying conventions to your jsonnet code base instead of imposing restrictions by the runtime (Tanka). With saying basic, I mean defining the current approach as the simplest convention possible on how to use Tanka. If we want to bring out a different convention as the basic use case, then we can, for both the single environment and multiple environments pull requests.
There are some implementation details I've put into place on #414 (like finding the environments), I'd like to backport to this PR in case #414 doesn't get accepted. This would allow us to simply pull all Environments out of the jsonnet code, and if there is more than 1, we can return aforementioned error instead of trying to apply them.

re data::
As I said before, the argument for making data part of the Environment object is to ensure the jsonnet is
deterministic about what it represents.
Any other the Jsonnet objects can exist as siblings to the Environment object, removing the assumption that all visible
objects are Kubernetes objects. This brings opportunities here for other tools to jump less hoops for the same jsonnet
codebase. (grizzly hacks in making $.grafanaDashboards visible at runtime, for example)
re spec.json behavior:
The code currently looks for an Environment object, if that doesn't exist it assumes the old spec.json behavior. This is
required to keep backwards compatibility. We can deprecate that way of working over time, but that doesn't need to be
decided here.


Randomize init BG for the gym env

I think you also need to update EGPb and Vm0 since they depend on Gb. Otherwise, the resulting bg has some anomalies. See #25.


Not used default twitter app loggedIn account in ios

Hi...
This is great package for login with twitter for react native.It is working good.But I have one issue.
Twitter app is installed in my ios device and i logged in with my twitter account in twitter app.After that when I tried to login with twitter using this package in my react native app,it does not use that twitter account and opening login screen.
By default ,it has to use default logged in twitter account of Twitter app just like facebook provides.

Any one can help?

+1

I believe the new version would fix this issue for you @bhoomika911


Symfony 4 compatibility

This PR makes paratest compatible with Symfony 4 components as well as allowing installation as a dependency alongside projects using said components.
Symfony Process: there's no easy way to compatibilize Symfony Process usage from 3.2 to 4.0 without a great deal of boilerplate. ProcessBuilder is deprecated in 3.4 and removed in 4, so Process has to be used directly. Unfortunately the method signature is different across Symfony 3 versions (3.2 requires a string as a first argument, 3.3/4 require an array).
As a tradeoff, this PR locks minimum version at 3.4 which happens to be LTS. 3.2 is currently unsupported.

@julianseeger ?

last commit on master was end of August .. hopefully its just a temporary hiatus ..

Hmm true that 🤔 perhaps might be worth forking, even temporarily until he
or she gets back to it.
On Thu, 21 Dec 2017, 19:52 Lukas Kahwe Smith<EMAIL_ADDRESS>wrote:

last commit on master was end of August .. hopefully its just a temporary
hiatus ..
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/brianium/paratest/pull/290#issuecomment-353442443,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AGF8V_K5hkUpTyZwnIcpAr-Ma9id2sfiks5tCrbkgaJpZM4Q-98O
.

--
Kind regards,
Luis Pabon

@julianseeger @luispabon @lsmith77 - this could partially be my fault. I have not worked on or used paratest myself in some time (not doing much in the way of php these days). I still have it on my backlog to move paratest to a separate organization (I've created it, but I've not yet moved the repo).
Managing ParaTest isn't really even on my radar these days 😞 - I would hate for it to collect dust while so many people use it. Is it time to find some more maintainers. I am certainly open to this if someone is willing/able to take the reigns. Even moving it to a separate org and handling all things that go with that in terms of a smooth transition for users.
If you or anyone you know might be interested, it might be better for the long term health of the project 🤷♂

maybe PHPUnit itself would take over maintenance?
/cc @sebastianbergmann


Logo Improvement

Description
Problem
The logo of the website is not clearly visible in the header section. Also, the logo does not go well with the color combination of the website.
Proposed Changes
I will design a new logo and add it to the website.
I'd be grateful if you could assign this task to me under GSSoC22.
@SauravMukherjee44  @jheel05
Screenshots

@Sukriti-m do it

Hii @jheel05

Can you please review this logo? Is the logo fine? Should I proceed to make changes in the code?

@Sukriti-m You can submit your designed logos in the assets folder. Submit multiple, We will update the best logo on the website.


chore(config): Add Pos to Config

Summary:

Adds Pos wrapper struct around Config fields
Introduces a new trait and macro to handle adding positional details to each field
Minor refactors to from_document and other parts of the code

Issue Reference(s):
Fixes #1698
Build & Testing:

[x] I ran cargo test successfully.
[x] I have run ./lint.sh --mode=fix to fix all linting issues raised by ./lint.sh --mode=check.

Checklist:

[x] I have added relevant unit & integration tests.
[ ] I have updated the documentation accordingly.
[x] I have performed a self-review of my code.
[x] PR follows the naming convention of <type>(<optional scope>): <title>

Waiting a review on this PR to know if it's a desired approach, once the review is done I'll update it to finalize the fix.

@bnchi I tried to use this PR but it doesn't seem to show the errors as provided in the PR.

@bnchi I tried to use this PR but it doesn't seem to show the errors as provided in the PR.

@tusharmath
The current error handling in the codebase have a bug if a baseURL is not specified in @upstream all the other directives that depends on a common baseURL like @http for example errors out leading to this invalid configuration errors.
ERROR Invalid Configuration
Caused by:
  • No base URL defined [at Post.user.@call.@http]
  • No base URL defined [at Query.posts.@http]
  • No base URL defined [at Query.user.@http]
  • No base URL defined [at Query.users.@http]

We discussed this on discord and if I'm not mistaken you mentioned we could clear this bug in a separate PR and add the position details to the trace. If you would like me to clear this bug also in this PR let me know, but this might make the PR harder to review.
This PR adds Pos wrappers around all the Config fields. There's still some work to do here for some types but I just wanted to make sure it's a desired approach before changing all the other ones.
For example given the original example file provided in the issue examples/jsonplaceholder.graphql here's how a config look like now :

    Click here to expand a config_module dbg! output

{
   config: Config {
       server: Pos {
           line: 2,
           column: 3,
           inner: Server {
               apollo_tracing: None,
               batch_requests: None,
               headers: Some(
                   Pos {
                       line: 2,
                       column: 23,
                       inner: Headers {
                           cache_control: None,
                           custom: [],
                           experimental: None,
                           set_cookies: None,
                           cors: Some(
                               Cors {
                                   allow_credentials: None,
                                   allow_headers: [
                                       "*",
                                   ],
                                   allow_methods: [
                                       POST,
                                       GET,
                                       OPTIONS,
                                   ],
                                   allow_origins: [
                                       "*",
                                   ],
                                   allow_private_network: None,
                                   expose_headers: [],
                                   max_age: None,
                                   vary: [
                                       "origin",
                                       "access-control-request-method",
                                       "access-control-request-headers",
                                   ],
                               },
                           ),
                       },
                   },
               ),
               global_response_timeout: None,
               hostname: None,
               introspection: None,
               pipeline_flush: None,
               port: Some(
                   Pos {
                       line: 2,
                       column: 11,
                       inner: 8000,
                   },
               ),
               query_validation: None,
               response_validation: None,
               script: None,
               showcase: None,
               vars: [],
               version: None,
               workers: None,
           },
       },
       upstream: Pos {
           line: 3,
           column: 3,
           inner: Upstream {
               allowed_headers: None,
               base_url: Some(
                   Pos {
                       line: 3,
                       column: 13,
                       inner: "http://jsonplaceholder.typicode.com",
                   },
               ),
               batch: Some(
                   Pos {
                       line: 3,
                       column: 76,
                       inner: Batch {
                           delay: 100,
                           headers: {},
                           max_size: None,
                       },
                   },
               ),
               connect_timeout: None,
               http_cache: Some(
                   Pos {
                       line: 3,
                       column: 61,
                       inner: 42,
                   },
               ),
               http_2_only: None,
               keep_alive_interval: None,
               keep_alive_timeout: None,
               keep_alive_while_idle: None,
               pool_max_idle_per_host: None,
               pool_idle_timeout: None,
               proxy: None,
               tcp_keep_alive: None,
               timeout: None,
               user_agent: None,
               dedupe: None,
           },
       },
       schema: RootSchema {
           query: Some(
               "Query",
           ),
           mutation: None,
           subscription: None,
       },
       types: {
           "Post": Pos {
               line: 22,
               column: 1,
               inner: Type {
                   fields: {
                       "body": Field {
                           type_of: "String",
                           list: false,
                           required: true,
                           list_type_required: false,
                           args: {},
                           doc: None,
                           modify: None,
                           omit: None,
                           http: None,
                           call: None,
                           grpc: None,
                           script: None,
                           const_field: None,
                           graphql: None,
                           cache: None,
                           protected: None,
                       },
                       "id": Field {
                           type_of: "Int",
                           list: false,
                           required: true,
                           list_type_required: false,
                           args: {},
                           doc: None,
                           modify: None,
                           omit: None,
                           http: None,
                           call: None,
                           grpc: None,
                           script: None,
                           const_field: None,
                           graphql: None,
                           cache: None,
                           protected: None,
                       },
                       "title": Field {
                           type_of: "String",
                           list: false,
                           required: true,
                           list_type_required: false,
                           args: {},
                           doc: None,
                           modify: None,
                           omit: None,
                           http: None,
                           call: None,
                           grpc: None,
                           script: None,
                           const_field: None,
                           graphql: None,
                           cache: None,
                           protected: None,
                       },
                       "user": Field {
                           type_of: "User",
                           list: false,
                           required: false,
                           list_type_required: false,
                           args: {},
                           doc: None,
                           modify: None,
                           omit: None,
                           http: None,
                           call: Some(
                               Pos {
                                   line: 27,
                                   column: 14,
                                   inner: Call {
                                       steps: Pos {
                                           line: 0,
                                           column: 0,
                                           inner: [
                                               Step {
                                                   query: Some(
                                                       "user",
                                                   ),
                                                   mutation: None,
                                                   args: {
                                                       "id": String("{{.value.userId}}"),
                                                   },
                                               },
                                           ],
                                       },
                                   },
                               },
                           ),
                           grpc: None,
                           script: None,
                           const_field: None,
                           graphql: None,
                           cache: None,
                           protected: None,
                       },
                       "userId": Field {
                           type_of: "Int",
                           list: false,
                           required: true,
                           list_type_required: false,
                           args: {},
                           doc: None,
                           modify: None,
                           omit: None,
                           http: None,
                           call: None,
                           grpc: None,
                           script: None,
                           const_field: None,
                           graphql: None,
                           cache: None,
                           protected: None,
                       },
                   },
                   added_fields: [],
                   doc: None,
                   implements: {},
                   cache: None,
                   protected: None,
                   tag: None,
               },
           },
           "Query": Pos {
               line: 7,
               column: 1,
               inner: Type {
                   fields: {
                       "posts": Field {
                           type_of: "Post",
                           list: true,
                           required: false,
                           list_type_required: false,
                           args: {},
                           doc: None,
                           modify: None,
                           omit: None,
                           http: Some(
                               Pos {
                                   line: 8,
                                   column: 17,
                                   inner: Http {
                                       base_url: None,
                                       body: None,
                                       encoding: ApplicationJson,
                                       group_by: [],
                                       headers: [],
                                       input: None,
                                       method: GET,
                                       path: "/posts",
                                       output: None,
                                       query: [],
                                   },
                               },
                           ),
                           call: None,
                           grpc: None,
                           script: None,
                           const_field: None,
                           graphql: None,
                           cache: None,
                           protected: None,
                       },
                       "user": Field {
                           type_of: "User",
                           list: false,
                           required: false,
                           list_type_required: false,
                           args: {
                               "id": Arg {
                                   type_of: "Int",
                                   list: false,
                                   required: true,
                                   doc: None,
                                   modify: None,
                                   default_value: None,
                               },
                           },
                           doc: None,
                           modify: None,
                           omit: None,
                           http: Some(
                               Pos {
                                   line: 10,
                                   column: 24,
                                   inner: Http {
                                       base_url: None,
                                       body: None,
                                       encoding: ApplicationJson,
                                       group_by: [],
                                       headers: [],
                                       input: None,
                                       method: GET,
                                       path: "/users/{{.args.id}}",
                                       output: None,
                                       query: [],
                                   },
                               },
                           ),
                           call: None,
                           grpc: None,
                           script: None,
                           const_field: None,
                           graphql: None,
                           cache: None,
                           protected: None,
                       },
                       "users": Field {
                           type_of: "User",
                           list: true,
                           required: false,
                           list_type_required: false,
                           args: {},
                           doc: None,
                           modify: None,
                           omit: None,
                           http: Some(
                               Pos {
                                   line: 9,
                                   column: 17,
                                   inner: Http {
                                       base_url: None,
                                       body: None,
                                       encoding: ApplicationJson,
                                       group_by: [],
                                       headers: [],
                                       input: None,
                                       method: GET,
                                       path: "/users",
                                       output: None,
                                       query: [],
                                   },
                               },
                           ),
                           call: None,
                           grpc: None,
                           script: None,
                           const_field: None,
                           graphql: None,
                           cache: None,
                           protected: None,
                       },
                   },
                   added_fields: [],
                   doc: None,
                   implements: {},
                   cache: None,
                   protected: None,
                   tag: None,
               },
           },
           "User": Pos {
               line: 13,
               column: 1,
               inner: Type {
                   fields: {
                       "email": Field {
                           type_of: "String",
                           list: false,
                           required: true,
                           list_type_required: false,
                           args: {},
                           doc: None,
                           modify: None,
                           omit: None,
                           http: None,
                           call: None,
                           grpc: None,
                           script: None,
                           const_field: None,
                           graphql: None,
                           cache: None,
                           protected: None,
                       },
                       "id": Field {
                           type_of: "Int",
                           list: false,
                           required: true,
                           list_type_required: false,
                           args: {},
                           doc: None,
                           modify: None,
                           omit: None,
                           http: None,
                           call: None,
                           grpc: None,
                           script: None,
                           const_field: None,
                           graphql: None,
                           cache: None,
                           protected: None,
                       },
                       "name": Field {
                           type_of: "String",
                           list: false,
                           required: true,
                           list_type_required: false,
                           args: {},
                           doc: None,
                           modify: None,
                           omit: None,
                           http: None,
                           call: None,
                           grpc: None,
                           script: None,
                           const_field: None,
                           graphql: None,
                           cache: None,
                           protected: None,
                       },
                       "phone": Field {
                           type_of: "String",
                           list: false,
                           required: false,
                           list_type_required: false,
                           args: {},
                           doc: None,
                           modify: None,
                           omit: None,
                           http: None,
                           call: None,
                           grpc: None,
                           script: None,
                           const_field: None,
                           graphql: None,
                           cache: None,
                           protected: None,
                       },
                       "username": Field {
                           type_of: "String",
                           list: false,
                           required: true,
                           list_type_required: false,
                           args: {},
                           doc: None,
                           modify: None,
                           omit: None,
                           http: None,
                           call: None,
                           grpc: None,
                           script: None,
                           const_field: None,
                           graphql: None,
                           cache: None,
                           protected: None,
                       },
                       "website": Field {
                           type_of: "String",
                           list: false,
                           required: false,
                           list_type_required: false,
                           args: {},
                           doc: None,
                           modify: None,
                           omit: None,
                           http: None,
                           call: None,
                           grpc: None,
                           script: None,
                           const_field: None,
                           graphql: None,
                           cache: None,
                           protected: None,
                       },
                   },
                   added_fields: [],
                   doc: None,
                   implements: {},
                   cache: None,
                   protected: None,
                   tag: None,
               },
           },
       },
       unions: {},
       enums: {},
       links: [],
       telemetry: Pos {
           line: 0,
           column: 0,
           inner: Telemetry {
               export: None,
               request_headers: [],
           },
       },
   },
   extensions: Extensions {
       grpc_file_descriptors: {},
       script: None,
       cert: [],
       keys: [],
       endpoint_set: EndpointSet {
           endpoints: [],
           marker: PhantomData<tailcall::core::rest::endpoint_set::Unchecked>,
       },
       htpasswd: [],
       jwks: [],
   },
   input_types: {},
   output_types: {
       "Query",
       "Post",
       "User",
   },
   interface_types: {},
}

@bnchi Moving it to draft. Whenever you are ready and the test case mentioned in the issue passes, please mark it as ready to review.

The PR is ready for a review, the lint and darwin-arm64 are failing in the CI for some reason there's no issues or errors but the build just can't seem to continue on those two checks.
@tusharmath

I noticed a bug the new Pos wrapper type breaks gen_gql_schema.rs it seems like there are still work that needs to be done there in order for these changes to not break the generation of the types in that file, I'm going to bring this back to a draft.

Getting the line and column from JSON and YML isn't an easy task a lot of the serde implementations doesn't seem to provide a way to get those from source, even if it was possible this will cause a complete shift on how to approach this task. For those reasons I'm going to close the PR

The PR is ready for review here are the latest changes summary :

Introduced a new field to Cause to store something of type SourcePos that allow us to identify the position at which an error occurred from a file
Added a new method to Validator trait that can be called on Valid which helps decouple the trace from positioned errors so now we can just call this method for places that support these types of errors
CLIError struct now as well got a new field to show positioned errors in the console in case it was supported. When printing we favor positioned error messages over normal traces
Refactored json_schema  and added a new type that allow us to point exactly where an error occurred from source when comparing two schemas together that are read from source

I would appreciate if you can closely review the changes made to the new Transformer logic and test that because while developing this PR I had to deal with a lot of new changes there while developing this feature, so smoke/integration testing to make sure everything works.


Save Images Mikey has no help

Hi ... I can;t find a help page or reference for your node "Save Images Mikey"
I am mainly interested in its ability to save variables in the filename or other fields such as Model Name, Seed, Sampler, etc.

Thank you :D

Thanks... I just came to share the same :D
Really, just wanted to ask about saving options like JPG, PNG and WEBP formats... any possibility to get those options added?
PREFERENCE: Radio Buttons to select any or all formats. So as to save just one file type or two or all three or a mix.
Thank you so much!

Hi,
The way to use the search and replace feature of comfy is to use this format: %node_name.widget_name%
For example %KSampler.seed% or %CheckpointLoaderSimple.ckpt_name%

Thank you


How does it work?

I haven't read the source code, but I guess whether there is a nodejs binary file, which is called by exec?
I actually want to ask if I use this plugin, how big will it be after being packaged into an apk (how big will this plugin occupy)?

This library is a complete re-write of the puppeteer API (which is developed in NodeJS), it doesn't use at all nodejs.
This library works like this:

Download the compiled chromium binaries (if needed)
Start the chromium process with some specifics flags to enable "automation mode"
Open a websocket connection to the chromium devtools to send json commands
Expose a high-level API to perform classical browser automation tasks (navigate, click button, capture network etc...).

Note that starting a chromium process is not supported on platform like Android and iOS (you can't launch arbitrary process with custom flags as per OS restriction).
If you want to use this library on mobile, you will have to launch the chromium process on a server.

I think I get it. I need to run the library on ios and andriod to implement web crawlers. Could you tell me how big it is after packaging?


Add minimum and target display size to UX guidelines

As discussed here: https://pre-release.mattermost.com/core/pl/xns8xbfabtf6pg5tqdk498wzzr
@asaadmahmood I also added 1920x1080 as a target screen size for desktop since it's very common, and I'm not sure what size our designs are made against

Okay thanks Harrison, I'll wait for @asaadmahmood to review this first


Low quality title bar and tray icons on Windows

On Windows, both the title bar icon and the tray icon are of way worse quality than they are in Brackets core.
See https://github.com/atom/atom/issues/4811 for info how they fixed that.
Title bar icon:

Tray icon:

This should be fixed in current master.

Icons in https://github.com/zaggino/brackets-electron/tree/master/build/icons are used right now, closing.


Add "clustering" topic to algorithmic innovation and data science & ML categories

So that ArborX gets classified properly

The main copy of the catalog is maintained on GitLab, so I've transferred this over. Thanks!


File execution order is not working on a TypeScript project

(Note: Non-breaking issues are likely not to be prioritized. Please consider a PR in addition to your issue)

Expected Behavior
Files in filePushOrder are executed first. Even for compiled typescript code.
Actual Behavior
I don't think that filePushOrder is working in a typescript project. I am trying two ways:

Path of file after clasp push
"filePushOrder":["ts/helpers/LibraryExternalProperty.gs"],

Path of file befose clasp push
"filePushOrder":["src/ts/helpers/LibraryExternalProperty.ts"],

neither way the file LibraryExternalProperty.ts is executing first. I put a Logger.log("hi") there and its not logging An error come up first because dont recognize LibraryExternalProperty class.
Can you help me please?
Thanks
Specifications

Node version (node -v): 10.15.1
Version (clasp -v): 2.0.1
OS (Mac/Linux/Windows): Windows

@kornthing can you please give a status about this issue?

If anyone is coming in here still with filePushOrder still not working, have a look at the rootDir property inside .clasp.json. On windows, when you clone a project, the rootDir stores the full path of the folder. I changed it to a relative path and filePushOrder started to work.
Clasp version 9.4.1
Before
{
    "scriptId": "XXXXXXXXXXXXXXXXXXXXX",
    "rootDir": "C:\\devfolder\\project1",
    "filePushOrder": [
        "subfolder1/campaigns.js",
        "subfolder1/dispositions.js",
        "subfolder1/globalSettings.js",
    ]
}

After
{
    "scriptId": "XXXXXXXXXXXXXXXXXXXXX",
    "rootDir": ".",
    "filePushOrder": [
        "subfolder1/campaigns.js",
        "subfolder1/dispositions.js",
        "subfolder1/globalSettings.js",
    ]
}


Run pre-commit autoupdate

Bumps the following tools:

mypy  v1.5.1 -> v1.6.1
black v23.9.1 -> v23.10.1
ruff  v0.0.292 -> v0.1.2

In particular, this brings ruff to the first "stable" v0.1.x.

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

Comparison is base (5f68b59) 87.15% compared to head (c8f6f16) 87.15%.

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@           Coverage Diff           @@
##             main     #118   +/-   ##
=======================================
  Coverage   87.15%   87.15%
=======================================
  Files           7        7
  Lines         467      467
  Branches       62       62
=======================================
  Hits          407      407
  Misses         35       35
  Partials       25       25

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


oidc: preserve authorization header

Envoy OAuth2 filter deletes the HTTP authorization header by default, which surprises users.
This PR sets the Envoy OAuth2 filter's preserve_authorization_header field to true by default. This flag can be flipped and added to the EG API if needed in the future.
fix: https://github.com/envoyproxy/gateway/issues/3396#issuecomment-2155699257

still another discussion is https://github.com/envoyproxy/gateway/pull/3567/files#r1632057185 :) so this pr cannot work as-is. It needs changes


continue to train

Hi. Thank you so much for your contribution. Interrupting the training process to continue training on what instructions to use. I used --save_model= XXX.pth and got an instruction error. What instructions should I use

Thank you. I've taken care of it


TAJO-2060: Upgrade geoip-api-java library

Tajo use the dspace-geoip library, version is 1.2.3.
Now geoip data doesn't work at 1.2.3 version.
We need change 1.2.14 from 1.2.3 version.

@combineads
Thanks for your contribution.
I left some comments

I’ve update the patch that reflects your suggestions. @jinossy
Thank you for comment.

+1 LGTM!
Test failure is not related this PR


Colorized mesh's in gui_interactive

Hey,
I would like to know if there's any chance I can see the real textures of the objects in an igibson_scene using the gui mode ? I could not find any flag for it so far.
Thanks :)

You should normally be seeing these in gui_interactive (not the pybullet GUI right?). Can you send a screenshot of what you get instead?

Hey,
no you are right, I use gui_interactive but everything is colored (I think it has been changed for iGibson 2.0) in the earlier versions I could see the real mesh files of the objects. Is there any way to get back to this ?
Tahnks

The textures are now encrypted, the pybullet gui cannot display the encrypted textures so it shows  solid primary colors. You can send a screenshot to confirm but this is almost certainly your issue, and there is not a fix other to use only the cv2 based iG viewer (we can't add our decryption pipeline to pybullet).

Okay still thanks. Would have been nice for illustrations in a paper. Perhaps it can be added in the future :)

The regular iG viewer should work fine for this purpose.

alright :)


Rectangles layout refactor

I've been playing around with this layout component quite a bit. And as you can imagine, through experimentation I've found the need to modify / add / remove features.
I've used it to label bubble series, where overlapping labels are removed:

And for mapping, where you don't have scales:

Here's a summary of the changes:

Removed the 'anchor' concept, the API was a bit odd, also, in practice you have access to this information already, all it was really doing was proving a simple coordinate system transformation.
Removed the array functor, in most cases it is easier to provide a function that returns the array / tuple
Changed containerWidth and containerHeight to a single bounds property - much more concise
A new removeCollisions property that removes rectangles that have an overlap, this is performed iteratively in the order of decreasing overlap area.

TODO:

[ ] update the website docs

@WPFerg - it would be great if you could review this as the original author of this layout!

Particularly like the removal of anchor, that never really sat right, and I'd never considered using a point series (obvious in hindsight!).
It all looks good, fairly straight forward fixes/additions

@chrisprice - I've made the algorithm that removed overlaps pluggable:
    var rectangles = fc.layout.rectangles(fc.layout.strategy.local())
        .size([10, 10])
        .filter(fc.layout.strategy.removeOverlaps())
        .position(function(d) { return [d.x, d.y]; });

This provides an extension point for adding a weight - either by providing a custom filter function, or we could eventually extend removeOverlaps to add weighting.


Post request with JSON string as body does not work

Guzzle version(s) affected: 6.3.3
PHP version: 7.1.28
Description
The following JSON Post request does not work with guzzle whereas the  same query string works fine with php curl, bash curl and postman too. I am passing the following string in the body request :
$OS_USER_DOMAIN_NAME = getenv("OS_USER_DOMAIN_NAME");
$OS_USERNAME = getenv("OS_USERNAME");
$OS_PASSWORD = getenv("OS_PASSWORD");
$OS_PROJECT_NAME = getenv("OS_PROJECT_NAME");
$OS_USER_DOMAIN_NAME = getenv("OS_USER_DOMAIN_NAME");
$OS_AUTH_URL = getenv("OS_AUTH_URL");
$data_string = <<<JSON
{
  "auth": {
    "identity": {
      "methods": [
        "password"
      ],
      "password": {
        "user": {
          "domain": { "name": "$OS_USER_DOMAIN_NAME" },
          "name": "$OS_USERNAME",
          "password": "$OS_PASSWORD"
        }
      }
    },
    "scope": {
      "project": {
        "name": "$OS_PROJECT_NAME",
        "domain": { "name": "$OS_USER_DOMAIN_NAME" }
      }
    }
  }
}
JSON;

How to reproduce
The following snippet based on guzzle does not work:
$client = new GuzzleHttp\Client([
    'base_uri' => $OS_AUTH_URL,
    'verify' => __DIR__ . '/../../certif.crt',
    'proxy' => [
        'http' => getenv('http_proxy'),
        'https' => getenv('https_proxy'),
        'no' => explode(',', getenv('no_proxy')),
    ],
]);

$result = $client->request('post', '/auth/tokens', [
    'debug' => true,
    'body' => $data_string,
    'headers' => [
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
        'Content-Length' => strlen($data_string),
    ]
]);
var_dump($result->getBody());

whereas this one with php curl works fine:
$ch = curl_init($OS_AUTH_URL . "/auth/tokens");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Content-Length: ' . strlen($data_string)
    )
);
curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . '/../../certif.crt');
curl_setopt($ch, CURLOPT_CAPATH, __DIR__ . '/../../certif.crt');
//execute post
$result = curl_exec($ch);

//close connection
var_dump(curl_error($ch));
$token = json_decode($result)->token->user->id;
var_dump($token);
curl_close($ch);

I don't know what's wrong, the raw json string body has been validated with postman and works.
I try to use the json option, same result:
$request = $client->request('POST', '/auth/tokens', [
    'debug' => true,
    'json' => json_decode($data_string, TRUE),
]);

The result is 404 error message which is the error returned by the openstack identity API.
I can see the following messages in the output:
* Curl_http_done: called premature == 0
* Connection #0 to host identity.api.company.org left intact

Can you try posting directly to something like https://requestbin.com/ so we can check the content/headers that are sent?

unfortunately I can't because the site is locked by my company web proxy.
I try to debug using wireshark sending the post request to a fake local site but I did not see differences between http queries!

I have no way to be able to reproduce this bug.
Please provide a Dockerfile or a failing unit test. Feel free to reopen this issue with that information.


refactor: use validator to validate fields

#511
I didn't test every plugin, but I checked them all as much as I could.
Some of the validation rules are too complicated. For example: githubactions/golang/validate.go , I kept some of the original validation rules.

Please review carefully, there are too many changes😥

I've tested a normal use case for the following plugins:

github-repo-scaffolding-golang
githubactions-golang
argocd
argocdapp

And it worked.
Didn't regression-test all plugins or abnormal cases.

@iyear thanks for this great improvement.

A very good proposal and an elegant solution. Keep up the good work!
It's not easy to test all plugins in this PR. I'll create an issue for each plugin to improve.
@iyear


Adapt Readme: Remove Support for Fedora

Remove Fedora as a "known to work platform" because of missing support for Tensorflow.

@mbutrovich I can remember you had/solved/whatever problems with new XCode Versions. Please let me know if the version in the README is still correct or if we can add another one.

@tcm-marcel I'm okay with that.

Command Line Tools for Xcode 9.3 manifests this LLVM bug and fails to build Peloton.
@mbutrovich
I think we don't actually use the captured value and it is probably not a compiler bug. Correct me if I'm wrong. I tried to remove the unused value in #1265 and it seems to work.

@zhaoguoquan94 You're probably right. At first glance it looked like a spurious warning to me which aligned with false positives for that warning in recent LLVM releases. I'll modify the wiki accordingly and remove the comment about 9.3.


Implemented filter for subscriptions tree

Searching name, url, discription
Search field over FolderView
Restoring scrolling and selection after filter.

Implementation: when exist some filter query, datasource for FolderView - FoldersTree, swapped with proxy object that contains FoldersTree and implements filter, and after swapped back so all behavior such drag&drop only available when there is no filter query.
Maybe ditch restoring to selection before filter, and keep selected item by itemId.

investigating why the Travis CI build failed...

Related: https://github.com/ViennaRSS/vienna-rss/issues/450

@diimdeep I am planning on merging this before the next release, I just need to work out why Travis CI suddenly is failing but your change builds fine on my system.
Travis says: ```Database.m:1445:30: error: use of undeclared identifier 'SQLITE_OK'
    if (lastErrorCode != SQLITE_OK) {```

this is imported correctly though through FMDB.h.

Hi @josh64x2 . Any update on the Travis problem ?

It's an issue with fmdb headers and travis... i'll try and get a better look at it today. :smile:

I've fixed the travis build issue - it was due to a bad .gitignore file and cocoapods.
The fix will be available once https://github.com/barijaona/vienna-rss/pull/5 and then https://github.com/ViennaRSS/vienna-rss/pull/558 have been merged.

I see a small name conflict in our UI here.
@dimdeep, you use the word “subscription” while Vienna traditionally uses the word ”folder”. And in fact, this filter also allows searching folders and smart folders.

I agree that "subscriptions" is easier to understand, and It would be reasonable to switch, but for the time being, I suggest we keep consistency with the current convention.


Time for typography

Basic font choices made. Tweaks still need doing. Closes #1

not quite understanding why it said there were uncommitted bits, but then all of a sudden there are :/ perhaps I'm not waiting long enough?


One-line configuration of the kubernetes client

Description
This is a re-iteration of an earlier feature request, that was deemed redundant:

https://github.com/lima-vm/lima/issues/514

I would like to make the config more similar to the config of Docker / Podman.
This by letting lima do the steps of creating the config directory and the file...

That way, we don't have to carry the shell scripts and config locations around.
Making it more similar, to how we tunnel the docker.sock and podman.sock ?
export DOCKER_HOST=$(limactl list docker --format 'unix://{{.Dir}}/sock/docker.sock')
export CONTAINER_HOST=$(limactl list podman --format 'unix://{{.Dir}}/sock/podman.sock')
So the request is to make ConfigFile into a configuration item, like PortForward:
diff --git a/examples/k3s.yaml b/examples/k3s.yaml
index c3d0769..438b018 100644
--- a/examples/k3s.yaml
+++ b/examples/k3s.yaml
@@ -5,8 +5,7 @@
 # It can be accessed from the host by exporting the kubeconfig file;
 # the ports are already forwarded automatically by lima:
 #
-# $ export KUBECONFIG=$PWD/kubeconfig.yaml
-# $ limactl shell k3s sudo cat /etc/rancher/k3s/k3s.yaml >$KUBECONFIG
+# $ export KUBECONFIG=$(limactl list k3s --format 'unix://{{.Dir}}/conf/kubeconfig.yaml')
 # $ kubectl get no
 # NAME       STATUS   ROLES                  AGE   VERSION
 # lima-k3s   Ready    control-plane,master   69s   v1.21.1+k3s1
@@ -54,11 +53,12 @@ probes:
     The k3s kubeconfig file has not yet been created.
     Run "limactl shell k3s sudo journalctl -u k3s" to check the log.
     If that is still empty, check the bottom of the log at "/var/log/cloud-init-output.log".
+configFiles:
+- guestFile: "/etc/rancher/k3s/k3s.yaml"
+  hostFile: "{{.Dir}}/conf/kubeconfig.yaml"
 message: |
   To run `kubectl` on the host (assumes kubectl is installed), run the following commands:
   ------
-  mkdir -p "{{.Dir}}/conf"
   export KUBECONFIG="{{.Dir}}/conf/kubeconfig.yaml"
-  limactl shell {{.Name}} sudo cat /etc/rancher/k3s/k3s.yaml >$KUBECONFIG
   kubectl ...
   ------
diff --git a/examples/k8s.yaml b/examples/k8s.yaml
index 088ce25..44f8aee 100644
--- a/examples/k8s.yaml
+++ b/examples/k8s.yaml
@@ -5,8 +5,7 @@
 # It can be accessed from the host by exporting the kubeconfig file;
 # the ports are already forwarded automatically by lima:
 #
-# $ export KUBECONFIG=$PWD/kubeconfig.yaml
-# $ limactl shell k8s sudo cat /etc/kubernetes/admin.conf >$KUBECONFIG
+# $ export KUBECONFIG=$(limactl list k8s --format 'unix://{{.Dir}}/conf/kubeconfig.yaml')
 # $ kubectl get no
 # NAME       STATUS   ROLES                  AGE   VERSION
 # lima-k8s   Ready    control-plane,master   44s   v1.22.3
@@ -155,11 +154,12 @@ probes:
       echo >&2 "kubernetes cluster is not up and running yet"
       exit 1
     fi
+configFiles:
+- guestFile: "/etc/kubernetes/admin.conf"
+  hostFile: "{{.Dir}}/conf/kubeconfig.yaml"
 message: |
   To run `kubectl` on the host (assumes kubectl is installed), run the following commands:
   ------
-  mkdir -p "{{.Dir}}/conf"
   export KUBECONFIG="{{.Dir}}/conf/kubeconfig.yaml"
-  limactl shell {{.Name}} sudo cat /etc/kubernetes/admin.conf >$KUBECONFIG
   kubectl ...
   ------

It just runs cat, over ssh. There is configuration (called "mode"), for the sudo.

Kubernetes are apparently evaluating alternatives, to the minikube start. For the "Getting Started" tutorials, that is:
https://kubernetes.io/docs/tutorials/hello-minikube/
I would like to make limactl start a candidate, without having to use all of Rancher Desktop or Colima or something.
The other two candidates are running in the cloud (killercoda), or running nested in Docker with kind or with k3d.

One could also do similar hacks as the current docker.lima script, like kubectl.lima:
https://github.com/lima-vm/lima/blob/master/cmd/docker.lima
#!/bin/sh
set -eu
: "${LIMA_INSTANCE:=k8s}"
: "${KUBECTL:=kubectl}"

if [ "$(limactl ls -q "$LIMA_INSTANCE" 2>/dev/null)" != "$LIMA_INSTANCE" ]; then
  echo "instance \"$LIMA_INSTANCE\" does not exist, run \`limactl start --name=$LIMA_INSTANCE template://k8s\` to create a new instance" >&2
  exit 1
fi
KUBECTL=$(command -v "$KUBECTL" || true)
if [ -n "$KUBECTL" ]; then
  KUBECONFIG=$(limactl list "$LIMA_INSTANCE" --format '{{.Dir}}/conf/kubeconfig.yaml')
  export KUBECONFIG
  exec "$KUBECTL" "$@"
else
  export LIMA_INSTANCE
  exec lima sudo kubectl "$@"
fi

And we can argue if it should be LIMA_INSTANCE=k3s KUBECTL="k3s kubectl" - or not.

One could also do similar hacks as the current docker.lima script, like kubectl.lima:

I think this is fine. We need to draw the line somewhere, but given that even apptainer has a lima wrapper, k8s definitely deserves to have one too.

And we can argue if it should be LIMA_INSTANCE=k3s KUBECTL="kubectl" - or not.

Maybe
if [ -z "$LIMA_INSTANCE" ]; then
    if [ "$(limactl ls -f '{{.Status}}' k3s 2>/dev/null)" = "Running" ]; then
        LIMA_INSTANCE=k3s
    elif [ "$(limactl ls '{{.Status}}' k8s 2>/dev/null)" = "Running" ]; then
        LIMA_INSTANCE=k8s
    fi
fi

That way the script choses k3s or k8s if they are running, and still default to default if neither one are (user will have to setup Kubernetes in default themselves).
Maybe that is too magical, but I think it probably will do the right thing for most users most of the time, and that is the main point of bundling a helper script.

Or just error out perhaps, like the other ones ? "Please start one of the bundled Kubernetes templates"

With "kubectl wrappers", I meant there is a large number of projects to address the version craziness.
The client has to match the server API, within a certain amount of version skew, or it will fail to connect.
So there are projects that will look up the cluster version (somehow), and exec the right version binary...

https://github.com/flavio/kuberlr

Even wrote some similar ones myself.
They will all be $KUBECTL in this context.

Not sure if the running check is even needed, the error message seems to be quite OK if it is not ?

I did the "Running" check in case you have both a stopped k3s instance and a running k8s instance. 😄

So there are projects that will look up the cluster version (somehow), and exec the right version binary...

I know:
$ readlink "$(which kubectl)"
/Applications/Rancher Desktop.app/Contents/Resources/resources/darwin/bin/kubectl

$ readlink "$(readlink "$(which kubectl)")"
kuberlr

The fallback is to run kubectl on the node directly, that should at least be the correct version...
Removed the templates, added a check in case you override the LIMA_INSTANCE yourself.

Closed in PR #1302


[DOC] add link to bluesky account instead of twitter

Ping @rcap107 who has become our official social media / PR person despite himself :stuck_out_tongue_closed_eyes:

"volunteered"
Not sure if we should replace the icon entirely, or keep both bsky and twitter, @GaelVaroquaux what do you think?

note the pydata sphinx theme does not seem to like more than 2 icons -- but we already have that problem with the current number of links

What happens if we have 4 icons? I'm slightly uncomfortable leaving Twitter entirely, some people could see a politically motivated move


Generate major repairs

🤔 What type of PR is this? (check all applicable)

[ ] 🍕 Addition
[ ] ⌨ Productivity
[x] 🐛 Bug Fix
[x] 🔥 Optimization
[x] ⚙ Configuration
[ ] 🌟 Quality Of Life
[ ] ✨ Enhancement
[ ] 📝 Documentation

📝 Description
Fixed configuration (bandit&soldier health/generation rate) and cleaned up some code
This is the third submission, I don't know if it meets your requirements
🚦 Testing

[ ] Server
[x] Client
[ ] Client and server testing for other computers

This is not really a step in the good direction you took out hot reloadability

This is not really a step in the good direction you took out hot reloadability

But this at least fixed the problem of bandits and soldiers generating

Yeah but it needs to be fixed without making the config worst

Waiting for my further improvement.

This seems to be unable to hot reload, as entities cannot be changed at the moment the game is launched

@Desoroxxx If this is feasible, I will soon merge it

Accept the invite I sent you, just realized Paneedah never added you...
Anyway accept it and you will be able to create branch on this repo no need for your fork anymore

Please do this, I want to test this before any kind of review

I know, I will do this next time I make changes

Yeah but:

This is not up to date with Master
I can't test it without it being a branch


[R2] Statistic

https://taskman.eionet.europa.eu/issues/147794
https://62713c57bcbdf4004a3d99b8-zwhfqvmqaa.chromatic.com/?path=/story/components-statistic--default

@eea-jenkins build storybook

Let's try to also get into this PR the "count up" animation that you can see on this article made by EEA some time ago
https://www.eea.europa.eu/themes/water/europes-seas-and-coasts/assessments/marine-litterwatch/briefing#about
It should be exposed in the control, and by default off with some options to configure it, e.g. animation speed.
if possible, please add other animations/transitions, if easy to add.

@eea-jenkins build storybook

@eea-jenkins build storybook

@g-stamatis https://62713c57bcbdf4004a3d99b8-zwhfqvmqaa.chromatic.com/?path=/story/components-statistic--animation-group&args=valueVariation:primary;labelVariation:secondary;inverted:true
For the animation group you should add the buttons from the Animation storybook since you give options
but you can't replay the animations after you've played with any of the options

https://62713c57bcbdf4004a3d99b8-zwhfqvmqaa.chromatic.com/?path=/story/components-statistic--animation&args=decimals:1;prefix:d;suffix:z;size:huge;horizontal:true&globals=backgrounds.grid:false
@g-stamatis  I see the following issues:

when you are on mobile and you enable horizontal the value goes out of view when using a larger size
the value is enlarged but what if there is a need to have also the subtext larger?
Horizontal and inverted will push bring a bg color that looks bad without some padding in the content area

@eea-jenkins build storybook

@eea-jenkins build storybook

@eea-jenkins build storybook


pull request for e2e test at 12/28/2016 09:45:06

:white_check_mark: Validation status: passed
For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


Additional Type Hints like pandas-stubs for uv run mypy

Let's take pandas-stubs as an example. If I don't install it, mypy will indicate that some pandas types are unrecognized.
However, I want to know how to add these additional type hints in a uv project and ensure that the tools managed by uv can recognize the existence of these type annotations.
When I use uv add pandas-stubs, it is indeed added to the dependencies of my current project, but running uv run mypy or uvx mypy seems unable to recognize it.
How should I use type checking within a uv environment?
anjiwong@AnjideMacBook-Air ~/d/addr_dup_checker_for_brox (main)> uv tree
Resolved 14 packages in 18ms
addr-dup-checker v0.1.0
├── openpyxl v3.1.5
│   └── et-xmlfile v1.1.0
├── pandas v2.2.3
│   ├── numpy v2.1.2
│   ├── python-dateutil v2.9.0.post0
│   │   └── six v1.16.0
│   ├── pytz v2024.2
│   └── tzdata v2024.2
├── pandas-stubs v<IP_ADDRESS>009
│   ├── numpy v2.1.2
│   └── types-pytz v2<IP_ADDRESS>41003
├── pyfiglet v1.0.2
└── thefuzz v0.22.1
    └── rapidfuzz v3.10.0
anjiwong@AnjideMacBook-Air ~/d/addr_dup_checker_for_brox (main)> uvx mypy ./main.py
src/order_parser.py:4: error: Library stubs not installed for "pandas"  [import-untyped]
src/order_parser.py:6: error: Library stubs not installed for "pandas.core.groupby"  [import-untyped]
src/duplicate_checker.py:7: error: Library stubs not installed for "pandas"  [import-untyped]
src/duplicate_checker.py:8: error: Cannot find implementation or library stub for module named "thefuzz"  [import-not-found]
main.py:7: error: Library stubs not installed for "pandas"  [import-untyped]
main.py:7: note: Hint: "python3 -m pip install pandas-stubs"
main.py:7: note: (or run "mypy --install-types" to install all missing stub packages)
main.py:7: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
main.py:10: error: Cannot find implementation or library stub for module named "pyfiglet"  [import-not-found]
main.py:214: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
main.py:229: note: By default the bodies of untyped functions are not checked, consider using --check-untyped-defs  [annotation-unchecked]
Found 6 errors in 3 files (checked 1 source file)
anjiwong@AnjideMacBook-Air ~/d/addr_dup_checker_for_brox (main) [1]>

In your snippet, you're using uvx mypy which is an alias for uv tool run (which makes an isolated environment). I think what you're looking for is uv run mypy ./main.py.

In your snippet, you're using uvx mypy which is an alias for uv tool run (which makes an isolated environment). I think what you're looking for is uv run mypy ./main.py.

I think it's still not working...
 src  uv tree
Resolved 17 packages in 1ms
addr-dup-checker v0.1.0
├── mypy v1.11.2
│   ├── mypy-extensions v1.0.0
│   └── typing-extensions v4.12.2
├── openpyxl v3.1.5
│   └── et-xmlfile v1.1.0
├── pandas v2.2.3
│   ├── numpy v2.1.2
│   ├── python-dateutil v2.9.0.post0
│   │   └── six v1.16.0
│   ├── pytz v2024.2
│   └── tzdata v2024.2
├── pandas-stubs v<IP_ADDRESS>009
│   ├── numpy v2.1.2
│   └── types-pytz v2<IP_ADDRESS>41003
├── pyfiglet v1.0.2
└── thefuzz v0.22.1
    └── rapidfuzz v3.10.0
 src  uv run mypy .\order_parser.py
order_parser.py:4: error: Library stubs not installed for "pandas.api.typing"  [import-untyped]
order_parser.py:4: note: Hint: "python3 -m pip install pandas-stubs"
order_parser.py:4: note: (or run "mypy --install-types" to install all missing stub packages)
order_parser.py:4: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
order_parser.py:78: error: Incompatible return value type (got "DataFrameGroupBy[tuple[Any, ...]]", expected "list[tuple[int, DataFrame]]")  [return-value]
Found 2 errors in 1 file (checked 1 source file)

In your snippet, you're using uvx mypy which is an alias for uv tool run (which makes an isolated environment). I think what you're looking for is uv run mypy ./main.py.

OK.. Problem solved by replacing import statement to
# from pandas.api.typing import DataFrameGroupBy
from pandas.core.groupby import DataFrameGroupBy

Thanks for your reply!


Did not receive ping response within timeout

I don't know what the issue is. I tried multiple reinstalls of Raspberry Pi OS Lite and re-configuring the satellite using the built-in installer tool. But after the satellite starts, it connects, then fails 5 seconds later with:
WARNING:root:Did not receive ping response within timeout
INFO:root:Disconnected from server

The weird thing is that this used to work. I had no problems initially, and have no clue what could have possibly changed.

I am running Home Assistant 2024.1.3

This is a new code pushed by @synesthesiam a few hours ago... 33e6d80786ed888ecb662dcdf597ef0cb2c67937
I see a corresponding commit in the core of Home Assistant for the new wyoming protocol 1.5.0, but, don't know when those will be pushed. I would say right now current version is broken if you are not in the dev branch of Home Assistant.
I'm testing how to rollback to the previous version...

I tried that and got closer, but now I'm having different problems.

I just wish HASS would tell me exactly what was going wrong. The logs are super vague, even when the level is set to debug. Quite frustrating...

I see you are using remote wake word detection (in HA and not satellite). Even if I change my config to this I can't reproduce your error.
Do you have your pipeline correctly configured in there? (wake word installed, etc)

Yeah, everything is installed properly. I even uninstalled then reinstalled all of the addons, and... nothing. I did, however, just finish enabling local openWakeWord on the Pi, and it seems to be working now for the most part. It responds to queries.

Does this have to do with some kind of code change in HASS 2024.1.3? Because I might have a backup of the previous version. Or might it be a better idea to try a dev build of Home Assistant?

Does this have to do with some kind of code change in HASS 2024.1.3? Because I might have a backup of the previous version. Or might it be a better idea to try a dev build of Home Assistant?

I'm on the same version and everything works properly... I would guess you are missing something in your Assistant configuration.
In your Wyoming integration, you will see a device for the satellite. Make sure your pipeline is selected there.
Also, go to the Voice Assistant settings for the desired assistant  and make sure everything is configured there. Specially the wake word at the end.
I would wait some feedback from synesthesiam before going down the dev build route...

EDIT: Should've really read back a few posts; you mentioned a code push for Wyoming Protocol V1.5.0.

Thing is, if my understanding is correct, we will see this only when a new HA version will be released, which could be long...

I've already gone through those a bunch. Guess it wouldn't hurt to try again.
I can spin up an experimental HASS VM for testing on the dev branch when I get a chance.

There's a new build of HA that works for me:  ghcr.io/home-assistant/home-assistant:2024.2.0.dev20240117

How do I apply that?

Are you running HA via docker or HA OS? I forgot to mention my link was specifically a docker build

HA OS

Ah, yeah you might need to build from source in that case :(

What about this?

This should work: https://www.home-assistant.io/common-tasks/os/#run-a-development-version

Okay, I'll try that. I need to login to the KVM host.

 Thank you so much! It's all working, including server-side openWakeWord.
Hopefully I'm not angering the gods and potentially jinxing myself by saying that.

What kind of timeframe are we looking at for a normal fix (HA OS update)? Weeks, or hours? I just built a satellite on a Zero 2 W and got the timeout issue. Everything works for a few seconds, then timeouts. In you all's more expert opinions, is it easier to drop the satellite down to 1.4.x or push HA OS to the dev branch?
INFO:root:Ready
DEBUG:root:Detected IP: <IP_ADDRESS>
DEBUG:root:Zeroconf discovery enabled (name=e45f013f8db8, host=None)
DEBUG:root:Connecting to mic service: ['arecord', '-D', 'plughw:CARD=CameraB409241,DEV=0', '-r', '16000', '-c', '1', '-f', 'S16_LE', '-t', 'raw']
INFO:root:Connected to services
Recording raw data 'stdin' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
DEBUG:root:Connected to mic service
DEBUG:root:Server set:<PHONE_NUMBER>395
INFO:root:Connected to server
INFO:root:Streaming audio
DEBUG:root:Wake word detected
WARNING:root:Did not receive ping response within timeout
DEBUG:root:Server disconnected
INFO:root:Disconnected from server

Ah I was missing the git reset command when I downgraded to 1.4.2, so I switched to the dev branch of HA OS and that is working correctly. I'll stick to that until the main branch gets the commit.

Sorry, everyone. I forgot that the HA side of things was in nightly only, so I've pushed a new commit here to only enable pinging if the server supports it.

i know this is solved and closed, but as i run into the same or for me very similar, error message, i am wondering if there is a way to just ignore the ping or disable it temporarily? i am kinda lost on how to proceed to ignore the ping.
in my case i get
WARNING:root:Did not receive ping response within timeout
INFO:root:Disconnected from server

but only when i have a long response that the voice satellite is sending to my sonos. there does not seem to be anything wrong with the response, besides the fact that the voice satellite aborts after not receiving a ping. this usually happens while sonos is still talking.

There's no way currently to ignore or change the ping without modifying the code.
If you want to modify the code, you can try to comment this line:
https://github.com/rhasspy/wyoming-satellite/blob/8850100ca658a80708e562e6741739ed27c91f99/wyoming_satellite/satellite.py#L243
All the scripting and http calls you are doing seem to be synchronous and blocking the execution of the satellite.
The ping timeout is 5 seconds. I just tested a reply of several seconds, and had no issues.

thank you for your advice @llluis !
commenting that line out and reloading the wyoming-satellite service did remove the warning about the ping.
unfortunately it brought up some kind of unknown error 524 which seems to be some error with snd read task.
the warning regarding the missing ping is actually not that big of a deal for me.
it's just a little annoying that the satellite reconnects and blinks red and green while my announcement is being given on a separate speaker.
and then the logs show that curl returns the result of the post call.
so i enable the ping back on for now. do you by any chance know if there is a way to increae the timeout for this ping?
i already tried sending the curl calls to the background via & behind the shell command but that did not help. so i am kinda wondering if i have to live with it for long text responses via post calls to external speakers.

do you by any chance know if there is a way to increae the timeout for this ping?

https://github.com/rhasspy/wyoming-satellite/blob/8850100ca658a80708e562e6741739ed27c91f99/wyoming_satellite/satellite.py#L40

_PONG_TIMEOUT: Final = 20
Thanks, changing the timeout has fixed the server disconnect for me!


AFURLSessionManager crashes with EXC_BAD_ACCESS

I am trying to upload multiple files in the background in my iOS application. I based my code on the Creating an Upload Task for a Multi-Part Request, with Progress, example. When I construct AFURLSessionManager with [NSURLSessionConfiguration defaultSessionConfiguration]] everything is working as expected. However when I try to use [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:[[NSUUID UUID] UUIDString]]] to enable background upload, the application crashes with  EXC_BAD_ACCESS in the AFNetworking library. I have attemped to ask for help/insight on stackoverflow without success: http://stackoverflow.com/questions/34048865/afurlsessionmanager-crashes-with-exc-bad-access
Has anyone else run into this issue before? It seems more and more like a bug. See stackoverflow post for complete code

Do you have any more information around the crash it self? Can you provide a full stack trace?

Here are some screenshots from the stacktrace and where in the library it is crashing.

The same issue
https://github.com/AFNetworking/AFNetworking/issues/3203
. Upload with Streamed request is not possible in the background mode. as stated in docs
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html
You have to use the  AFURLSessionManager uploadTaskWithRequest
But it's unclear how to include request parameters. (look in the issue above)

I tried changing my code to use uploadTaskWithRequest instead of uploadTaskWithStreamedRequest, but this produced the same results when using [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"MyID"]]

Make sure you use the same identifier each time your app launches. You're expected to use something like @"com.mycompany.myapplication" That's how your app reconnects to the transfers that were started in a previous run of your app but completed when your app is not running.


Deduplication / hashing algorithm

I am evaluating different stores for the properties of immutability and deduplication.
Noms DB (R.I.P.) has a nice way of making sure that JSON documents are hashed per node, making sure that data is only inserted when it is actually new. This also allows querying the document (sub)graph using a content-hash (as opposed to commit hash which I think is Irmin's model).
I was wondering how this works in the default implementation of Irmin. I have seen "content-addressable-store" being mentioned here, but it is not clear yet (to me as non-OCaml developer) what the implications are.
Is any content deduplication performed? If so, is it possible to have GraphQL return the resulting content hash after running a mutation? Or is the resulting hash already something like it? If not, would something like this then be one of the use cases of a custom storage backend?

Irmin data-model is very close to Git (see for instance this blog post but there are many other explaining the model), so it is deduplicating every node, contents and commits.
Moreover, using the JSON tree content-type (which is probably not exposed to the CLI yet /cc @zshipko who might be able to confirm), it is possible to deduplicate parts of the JSON doc too, e.g. the JSON doc is projected into an Irmin tree where list, objects, become normal Irmin nodes an can be deduplicated too.
Regarding getting the hash of contents and nodes: the OCaml API exposes it (e.g. Tree.hash and Tree.of_hash) but I am not sure about the GraphQL API. Maybe @zshipko or @andreas could give more tips. In any case, it should not be hard to expose these calls as the server already have them.

Hi there, thanks for your interest!

Thank you for your quick reply!

Irmin data-model is very close to Git (see for instance this blog post but there are many other explaining the model), so it is deduplicating every node, contents and commits.

That is very good news to hear. Then I can proceed writing a test suite for myself.

Moreover, using the JSON tree content-type (which is probably not exposed to the CLI yet /cc @zshipko who might be able to confirm), it is possible to deduplicate parts of the JSON doc too, e.g. the JSON doc is projected into an Irmin tree where list, objects, become normal Irmin nodes an can be deduplicated too.

I think he merged that: https://github.com/mirage/irmin/pull/694. That was according to our discussion here: https://github.com/mirage/irmin/issues/693#issuecomment-498462777

Regarding getting the hash of contents and nodes: the OCaml API exposes it (e.g. Tree.hash and Tree.of_hash) but I am not sure about the GraphQL API. Maybe @zshipko or @andreas could give more tips. In any case, it should not be hard to expose these calls as the server already have them.

If you say the JSON tree is already deduplicated, then if I understand correctly, when a new JSON document is pushed of which the contents already exist in some commit of the store, the query will return the commit hash of the last commit that contained the original identical node. Is that correct? That would make this project a much bigger deal than is advertised.
If that is so, a content hash is not so important anymore, except that a content hash would remove the necessity of having to specify a key path in order to retrieve a specific subgraph of the posted JSON document (since a store may be tracking multiple files). I assume here that the same commit hash is returned when an existing JSON document is pushed to two different key paths. I ask this because I am hoping the HTTP server could return a document fragment based on a hash argument, such as in GET localhost:8080/irmin/json/iuhhfgiywrgfyt47t297y28y8yr.json (example).

I am not sure to exactly understand what you are asking :-)
If I understand correctly, you do not really care about the history ; you are just looking at a way to deduplicate large JSON objects. Is that correct?
So Irmin does not exactly does that ; the base API is based around manipulating history : eg. every time you modify the database, you get a new commit hash (which contains a reference to the previous commit hash, so it's always different). It is relatively easy to discard the history but then we really need to hook a GC to reclaim the unused blobs (we have various WIP for this, but none are totally satisfying yet).
But then, you could ask Irmin to give you the hash of some contents, for a given path. Even if the commit hash might change, the contents (or node) hash will not change if the corresponding subtree has not been updated. If you store something similar in a different part of the tree it will be deduplicated internally. If you change the contents for a given path, and then change it back, it will have the same hash again.
Regarding JSON encoding: the json_value content-type uses some kind of normalisation on JSON documents, so yes {a:b, c:d} and {c:d, a:b} will be recognized as identical and will have the same hash.
You also have questions about the HTTP API. Currently, only the low-level store is availble via HTTP, which will give you the internal objects. SoGET localhost:8080/irmin/tree/iuhhfgiywrgfyt47t297y28y8yr will return a part of the document that you are interested in (but not the full subtree, so that's probably not what you want). Now that we have a nice high-level GraphQL API to write bindings in other languages, I guess it makes senses to expose a few more HTTP calls to simplify scripting. I'll think about it a bit more.

I am not sure to exactly understand what you are asking :-)
But if I understand correctly, you do not really care about the history ; you are just looking at a way to deduplicate large JSON objects. Is that correct?
But then, you could ask Irmin to give you the hash of some contents, for a given path. Even if the commit hash might change, the contents (or node) hash will not change if the corresponding subtree has not been updated. If you store something similar in a different part of the tree it will be deduplicated internally. If you change the contents for a given path, and then change it back, it will have the same hash again.

Thank you for thinking with me! No I definitely care about history. Deduplication without the append-only immutability would be much easier, basically a hash-keyed MongoDB or LevelDB.
My case is the following. I'm working on a collaborative sheet music application where a score is accessed using a URL like /score/r983yr9824yrui4h4. The hash in the URL should be a hash linked to the structure of the score contents, so every time a note is added the hash changes. This way, the link always refers to a specific revision of a specific score in time. Irmin provides all the branching and history I need for this and effective undo/redo and time-travelling features. However, I'm trying to additionally get the property that if two scores that started out separately converge to the same structure, they end up with the same hash. As you have explained it to me, I understand that if the two (then identical) scores would be pushed into the store on their own paths, say /score1 and /score2, every commit would return a new hash, but if I then query for the content hashes at those paths, I would get back the content-addressable hashes I am looking for, plus that the structures would internally have been deduplicated. Is this right?
In that case, I am just looking for a way to return the content hash of a path when running a GraphQL mutation. So that would be...
mutation {
  merge_tree(key: "/path/to", value: "{json: 'value', dedupe: true}") {
    tree {
      get_tree(key: "/path/to") {
        hash
      }
    }
  }
}

Correct? Or does the tree hash refer to the commit (hash) it is in?
Then, based on your answer here:

Currently, only the low-level store is availble via HTTP, which will give you the internal objects. SoGET localhost:8080/irmin/tree/iuhhfgiywrgfyt47t297y28y8yr will return a part of the document that you are interested in (but not the full subtree, so that's probably not what you want).

I take that given a content hash, there is no way yet to retrieve the associated document without knowing the last commit hash that that version of the tree was in. This can be solved in the short term by making a mapping in the Irmin store of content hash => commit hash with an extra call at the application level I guess, as you mentioned.
Again, thank you for your time clarifying this for me. It makes it clear how Irmin would (almost) be a drop-in replacement for the likes of NomsDB, jsonbin.org and Datomic.


How to do the very basics.

Hi there,
I've been trying to figure out the  very basics  for hours and I've got a point where I'm not sure if I'm missing something or if there's a misconfig with my lunarvim setup.
I'm sure this is going to help a lot of newbies like myself looking for answers.
Q.1: How do you accept the suggestions? I see that in your default settings you're suggesting CR, which I think it's enter? - which doesn't do anything other than newline.

Q.2:
:help copilot and a few other options are not working, is this intentional - is there a problem with my packages?

Q.1: How do you accept the suggestions? I see that in your default settings you're suggesting CR, which I think it's enter? - which doesn't do anything other than newline.

That's for Copilot Panel. Panel is opened by pressing <M-CR> (i.e. Alt+Enter or Option+Enter).
For suggestion keymaps, check suggestion.keymap config (it's commented out in your screenshot).

Q.2:
:help copilot and a few other options are not working, is this intentional - is there a problem with my packages?

This plugin doesn't have any helpfile. Check the README.md file on this repo for all the info: https://github.com/zbirenbaum/copilot.lua/blob/master/README.md

Okay, so here's a more complete guide:

Install zbirenbaum/copilot.lua with your plugin manager of choice (vim-plug or packer.nvim or lazy.nvim or something else).

Setup copilot.lua.

require("copilot").setup({
  panel = {
    auto_refresh = false,
    keymap = {
      accept = "<CR>",
      jump_prev = "[[",
      jump_next = "]]",
      refresh = "gr",
      open = "<M-CR>",
    },
  },
  suggestion = {
    auto_trigger = true,
    keymap = {
      accept = "<M-l>",
      prev = "<M-[>",
      next = "<M-]>",
      dismiss = "<C-]>",
    },
  },
})

Restart Neovim.

Run :Copilot auth and complete the authentication process (if it's not done already)

Run :Copilot status to make sure copilot is runninga and enabled

Now open a file and start writing codes/comments. Copilot will autmatically show suggestions.

You can accept the suggestion by pressing the suggestion.keymap.accept key (as set in Step 2). Or request the prev/next suggestion by pressing suggestion.keymap.prev/suggestion.keymap.next key (as set in Step 2).
Note: <M-l> means Alt+Tab (or Option+Tab for Mac). If for some reason Alt+Tab does not work on the terminal you're using, try using different keymap in Step 2.


Hide contributors

Describe the feature
When working on projects as a single contributor, the "contributors" section gets a little irrelevant.
Would also be nice to change the title - in case you need it in a boring corporate no-emoji setup. 😊
Additional information

[X] Would you be willing to help implement this feature?

Until there's a fix provided, you can use the flag --excludeAuthors=<yourname> and it should also hide the contributors section if all authors are excluded. See https://github.com/unjs/changelogen/pull/95.


[observability] Improve observability using MBeans

Connect to docker container bash
sudo docker ps
sudo docker exec -it <container-id> sh

https://stackoverflow.com/questions/35108868/how-do-i-attach-visualvm-to-a-simple-java-process-running-in-a-docker-container

How to connect to wildfly inside a docker container:
https://dev.to/kgoedert/monitoring-wildfly-inside-docker-14c5

Download the same wildfly as you have inside docker from https://www.wildfly.org/downloads/ to your desktop
Go to wildfly directory and run bin/jconsole.sh
Type service:jmx:remote+http://<IP_ADDRESS>:9990/, login admin, password admin


Fix infinite loop in build_bins Ubuntu download

Recent changes to build_bins.sh result in an infinite loop, as it checks for a non-existent filename over and over.
This commit moves the filename into a variable to avoid this issue now and in the future.

It built


Improper error codes while signing up

We need to check all the error codes for the various endpoints and also make sue the error message is descriptive

Fixed in #157


Host.exists(): which(1) fallback forced incorrectly when dash(1) shell is being used

The Host.exists() method uses the following logic:
https://github.com/pytest-dev/pytest-testinfra/blob/5cd690cd311002032cec0d0b797242e51fd9ca61/testinfra/host.py#L30-L36
This assumes that 127 exit status means that command -v is not available and a fallback to which(1) is forced. However, this is incorrect and 127 exit status is used e.g. by dash(1) shell to indicate that the requested executable is not available, i.e.:
$ sh -c 'command -v foobar ; echo $?'
127

This is a valid behavior according to POSIX.
We've noticed because we're working on making which(1) entirely optional on Gentoo systems, and right now testinfra is incorrectly crashing because of missing which(1) when dash is used as /bin/sh.

Hmm, perhaps this could be solved by checking command -v command ;-). I'm going to try.


fix: bind depth stencil view + use cloned buffer handle

Hi there!
@SK83RJOSH and I were investigating why egui-directx10 wasn't rendering at all natively (but was under DXVK), and after a lot of trial-and-error and debugging, we narrowed it down to two issues:

The depth-stencil view was being reset by the setup call. This wasn't really the issue, but users might want to control the behaviour here anyhow.

The actual issue: the vertex buffer was being passed by value to IASetVertexBuffers, which would execute its Drop destructor, resulting in it being invalidated by the time rendering actually took place. We believe it worked under DXVK because it manages lifetimes slightly differently.
We've fixed this by cloning the buffer before passing it in, which bumps the ref-count by 1 and thus keeps it alive enough for rendering to take place. We're not really sure why the bindings allow for this kind of mistake :thinking:

This latter fix has resolved the issue for us entirely, so we're upstreaming it because there's a chance it affects DX11 as well.

First off, thank you for your thorough investigation and for submitting this pull request! I appreciate the time and effort you and @SK83RJOSH have put into debugging the rendering issues on D3D11.
Regarding the second issue, as stated in the Direct3D 11 documentation (for example ID3D11DeviceContext::OMSetRenderTargets method (d3d11.h)):

The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

In Direct3D 11, it is indeed safe and common to pass a COM interface with a ref-count of 1 to an API and release it immediately after the call returns, which is exactly what the Drop implementation of the windows binding does. This may explain why the unchanged code works on DXVK. Given this difference widely exists between D3D11 and D3D10, perhaps technically each COM interface passing into a Direct3D API should come with a clone when targeting D3D10 to avoid any potential issues, and I'm not sure whether this crate should come with all those.
I've checked the changes and noticed the silly vb and ib typos. I'll fix them and I’d be happy to add you as a co-author if you’d like—no offense taken at all! XD
(separator)
As for the first issue, I’m hesitant to alter the current behavior or add an Option<ID3D11DepthStencilView> parameter to Renderer::render at this time. Here are my thoughts:
In Direct3D APIs (10 or 11), render target views (RTVs) and depth-stencil views (DSVs) are typically set together using a single API call (e.g., ID3D11DeviceContext/ID3D10Device::OMSetRenderTargets). Regardless of whether we accept a DSV in Renderer::render, users must provide a DSV before the next draw call if they wish to change either the RTVs or the DSV.
If users want to maintain the same RTVs and DSVs provided to Renderer::render, I believe they should explicitly set them up before the next draw call instead of relying on the behavior of Render::render. This approach aligns with Rust's philosophy of being explicit and helps avoid implicit dependencies. Such implicit dependencies are easy to break by reordering adjacent draw calls or render passes, especially in rapidly evolving game engines or graphics prototypes.
From a design perspective, I believe it’s important for this crate to maintain a clear and predictable behavior. My intention is for Renderer::render to leave the pipeline in an undefined state after it is called, which encourages users to explicitly re-establish all pipeline states. This approach helps users reason about the pipeline's behavior without needing to delve into the source code of our crate.
In fact, in an earlier version of this crate, I enforced a stricter "leave nothing behind" policy, where Renderer::render would call ID3D11DeviceContext::ClearState before and after the draw call. However, I adjusted this behavior based on feedback indicating that backing up and restoring a full set of pipeline states could be burdensome. I aimed to communicate this design consideration in the documentation for Renderer::render, but I recognize that it may not have been clear enough.
Besides, since Renderer::render is a major part of our public API, we must be cautious about any changes. Although our renderer does not utilize a DSV or depend on it in any way, I worry that accepting an additional DSV parameter might confuse users regarding whether they need to prepare a proper DSV for Renderer::render to function as expected.
Thank you once again for the valuable contributions and insights from both you and your collaborator. I look forward to your thoughts on this!

Hi there!

In Direct3D 11, it is indeed safe and common to pass a COM interface with a ref-count of 1 to an API and release it immediately after the call returns, which is exactly what the Drop implementation of the windows binding does. This may explain why the unchanged code works on DXVK. Given this difference widely exists between D3D11 and D3D10, perhaps technically each COM interface passing into a Direct3D API should come with a clone when targeting D3D10 to avoid any potential issues, and I'm not sure whether this crate should come with all those.

Oh wow - thanks for spotting this, that makes a lot of sense! Yes, it's fine as-is for D3D11 - we'll just have to make sure we're vigilant for D3D10 🙂

I've checked the changes and noticed the silly vb and ib typos. I'll fix them and I’d be happy to add you as a co-author if you’d like—no offense taken at all! XD

No credit necessary, I'm just glad it'll be fixed - we confused ourselves for a bit there :joy:

As for the first issue, I’m hesitant to alter the current behavior or add an Option<ID3D11DepthStencilView> parameter to Renderer::render at this time.

Yes, your reasoning makes perfect sense. Truthfully, we introduced this change as a "hail mary" fix while attempting to track down the cause of the problem, but given what you've said and with the knowledge that the fix was unrelated, we don't believe it's necessary now.
Our logic behind this was to mirror the RenderTargetView parameter and ensure that egui was rendering to the correct set of state; however, since that egui doesn't use the depth-stencil target, it should be fine without this.
We weren't too concerned about preserving the state for future rendering, because our use of egui is set up to render at the end of the frame. (But more on that in the next section.)

From a design perspective, I believe it’s important for this crate to maintain a clear and predictable behavior. My intention is for Renderer::render to leave the pipeline in an undefined state after it is called, which encourages users to explicitly re-establish all pipeline states. This approach helps users reason about the pipeline's behavior without needing to delve into the source code of our crate.
In fact, in an earlier version of this crate, I enforced a stricter "leave nothing behind" policy, where Renderer::render would call ID3D11DeviceContext::ClearState before and after the draw call. However, I adjusted this behavior based on feedback indicating that backing up and restoring a full set of pipeline states could be burdensome. I aimed to communicate this design consideration in the documentation for Renderer::render, but I recognize that it may not have been clear enough.

Completely agreed from our perspective. We've introduced a state block in egui-directx10 to assist with restoring the state after rendering[^1], but this is a consideration that's largely exclusive to our use case (integrating into an existing game). Otherwise, users should assume the entire state is dirty and accommodate for that as necessary.
Something that would be convenient, but not necessary, would be to list the state that's dirtied so that users know exactly what they have to restore / reset, but given egui rendering often takes place at the end of a frame, I have no problem with leaving it unspecified as it is currently.

Besides, since Renderer::render is a major part of our public API, we must be cautious about any changes. Although our renderer does not utilize a DSV or depend on it in any way, I worry that accepting an additional DSV parameter might confuse users regarding whether they need to prepare a proper DSV for Renderer::render to function as expected.

Fair enough! I introduced it as an Option parameter here, but I recognise that it complicates the API surface, especially for something that's not actually needed.

Thank you once again for the valuable contributions and insights from both you and your collaborator. I look forward to your thoughts on this!

Likewise! Thanks for the thorough response and clarifying the decisions here; this all makes much more sense than it did going in.
Given the excellent points you've made here, I'm going to close this PR, and cut down the changes we've made to egui-directx10 to just what's necessary. Who knew that they changed how they handled references between DX10 and DX11? 😅
[^1]: We're not actually sure if this is necessary; we were seeing some rendering artifacts after rendering egui, but the game should be resetting state on the next frame regardless. We'll have to investigate further.