Add decode_payload script to extract and verify update payloads

For payloads created with the delta_generator we have no tool to decode them again.
Add a standalone bash script that relies on protoc to decode the update payloads, extract the payload and optionally the secondary kernel payload, and verify the signature.
How to use
./decode_payload ~/kinvolk/coreos-overlay/coreos-base/coreos-au-key/files/official-v2.pub.pem /var/tmp/flatcar_production_update.gz /var/tmp/flatcar_production_update.bin-decoded
./decode_payload ~/kinvolk/coreos-overlay/coreos-base/coreos-au-key/files/developer-v1.pub.pem /var/tmp/flatcar_test_update-oem-azure.gz /var/tmp/oem-azure.raw-decoded

Testing done
For prod:
Used https://update.release.flatcar-linux.net/amd64-usr/3510.2.2/flatcar_production_update.gz and compared to https://stable.release.flatcar-linux.net/amd64-usr/3510.2.2/flatcar_production_update.bin.bz2
For dev:
Also used Stable but the flatcar_test_update.gz
Sysext case for dev (from bincache):
Used flatcar_test_update-oem-azure.gz and compared to oem-azure.raw
The prod case wasn't tested!

The format is documented in https://github.com/flatcar/update_engine/blob/flatcar-master/src/update_engine/update_metadata.proto but I will add more comments about how offsets are calculated and the parsing of the output.

I'll merge now, it's mainly for validation and testing, not used in the Flatcar image.


Registry System.

Registry System
You can now register elements for later use.
Using Registry<T>::RegisterElement() or Registry<T>::GetElement(), where T is the type you want.
Though you still have to register it manually in a cpp file by doing Registry<T>* Registry<T>::m_Instance = new Registry<T>();.

Can you give one or a few examples of where this would be used?

The registry system would be used to store the base Items and Blocks such that it's easy to handle storing an indefinite number of Items or Blocks, though It could be used for registering other data as well.
It does not have to be used only for Items and Blocks.
If you've ever looked at how Minecraft handles registering blocks and items, it does something similar but to a more advanced degree that what I created here, but it should function the same nonetheless.
So basically we would do something like this:
// Registry.cpp
Registry<Item>* Registry<Item>::m_Instance = new Registry<Item>();

// Some file where we need the item registry
Registry::RegisterElement(someItem);
Item* item = Registry<Item>::GetElement("some_item");

Registry<Item>::RegisterElement(someItem); can be simplified to Registry::RegisterElement(someItem); since someItem is of type Item.

Ah, that's really smart! I like it. Especially since you do explicit instantiation of the registry template, so trying to access an invalid registry will yield a compile-time error!


When the server has multiple NICs, the Agent may choose a NIC that does not properly communicate with the Collector.

When the server has multiple NICs, the Agent may choose a NIC that does not properly communicate with the Collector.
The Agent log shows that the startup is normal, but the Agent information is not visible on the Web. Use netstat -ntpl | grep 9994 to check the network and find that the network packet is blocked on the Send Queue.
So, how can I solve this problem in the case of multiple network cards?

hi ganpengyu
First have you checked the firewall problem with the collector?
Then I have difficulty analyzing problems with current information.
Please post  more detail information.

If the agent does not connect, I wonder how it is recorded in the agent's log.
What kind of multiple network interface card does agent have? and which network cards were selected?
I need other helpful information.

thanks.

There is a Docker daemon on the application server and Docker will create its own virtual NIC. Since I have created another Docker network, there are multiple NICs on the application server at this time.
When launching the application, I can see that the agent outputs the following log information.
[INFO ](com.navercorp.pinpoint.bootstrap.PinpointStarter) pinpoint agent started normally.

This log indicates that the agent started successfully. However, when you use the command netstat -ntpl | grep 9994 to view the network status, you will find that the agent has selected a wrong network card to establish a connection with the Collector. However, due to some restrictions of the network card, the data is blocked in the Send Queue and cannot be sent to Collector.
So, it can be said that this is not a problem with the Pinpoint Agent itself, but due to complex network card information. My question is, can the Agent support the selection of the specified NIC to establish a connection with the Collector?

hi ganpengyu
First have you checked the firewall problem with the collector?
Then I have difficulty analyzing problems with current information.
Please post more detail information.

If the agent does not connect, I wonder how it is recorded in the agent's log.
What kind of multiple network interface card does agent have? and which network cards were selected?
I need other helpful information.

thanks.

There is a Docker daemon on the application server and Docker will create its own virtual NIC. Since I have created another Docker network, there are multiple NICs on the application server at this time.
When launching the application, I can see that the agent outputs the following log information.
INFO  pinpoint agent started normally.
This log indicates that the agent started successfully. However, when you use the command netstat -ntpl | grep 9994 to view the network status, you will find that the agent has selected a wrong network card to establish a connection with the Collector. However, due to some restrictions of the network card, the data is blocked in the Send Queue and cannot be sent to Collector.
So, it can be said that this is not a problem with the Pinpoint Agent itself, but due to complex network card information. My question is, can the Agent support the selection of the specified NIC to establish a connection with the Collector?

I am not familiar with the docker, so I will have difficulty reproduce it
I will try to reproduce it, but it can take a lot of time.
I understood your issue and will continue to comment if need you're help in reproducing it.
thanks.


feat: add buf_index for lualine

Features:
Neovim's bufnr sometimes may very strange when it's number not as same as the order of buffers component. So I add buffer index, which index is as same as buffers component.

In this picture, you can see the number of buffer component are different from bufnr.
I wont delete code about bufnr, I just add buffer index.

I think that feature was very useful.For example, add map for buffers. such as
" buffer
function UpdateBufMap()
  " add keymap
  let bufs = getbufinfo({ 'buflisted': v:true})
  for item in bufs
    let i = index(bufs, item)
    exec 'nmap <A-' . ( i + 1 ) . '> :b' . item.bufnr . '<CR>'
  endfor
endfunction
" 更新keymap
augroup update_buf_map
  autocmd!
  autocmd BufRead,BufDelete,BufNewFile * call UpdateBufMap()
augroup END

That was very easy to add keymap for Alt prefix keys. Just like  switch tabs in chrome or firefox.

Thanks . We were talking about this in #603. I think this should be the default behavior and we should expose a simple way to jump to specific buffer from index in buffers component.
I've added them to this pr . Take a look if you have any objections.
Now we just need some tests Can you add some testing this feature in lualine_spec with other buffers tests ? Should be fairly easy with the statusline assertion we have.


Basic teleop and control

I have been playing around with the examples provided, but there is little else to do.
Is there a recommended premade teleop application that works with your setup?
If not do you plan on providing a teleop example or a go-to example (using inverse kinematics)?

@mdragusu how would you like to control the robot in teleop scenario? There is a possibility to run MoveIt Servo with this driver.

I would like to control it either with a keyboard or xbox360/ps4 controller from a remote computer without a GUI.
Or of possible to ask it to go to x,y,z and let the inverse kinematics do the work, again with not GUI.
Do you have examples like that?

It sounds like you should investigate the MoveIt2 tutorials. The driver isn't what handles this aspect, even though we left a few examples with the package.
Here's a good tutorial for the XBox controller:  http://moveit2_tutorials.picknik.ai/doc/realtime_servo/realtime_servo_tutorial.html
And here's a good tutorial on IK. There are several options for doing this:  http://moveit2_tutorials.picknik.ai/doc/move_group_interface/move_group_interface_tutorial.html


Send a request to a node

Hi, is possibile send a request to a specific node?

Hello, you have to give the requester and a responder a specific key, so that they will only connect to each other. However, this is discouraged.

What i want is more send a request to alla nodes and collect the respinse.
I cant use the nodes list in monitoring for send a request to all the nodes?

But this is already how it works? Create one requester and as many responders as you like on any machine and it will work.

Yes but i need to send to a specific node

Sorry, I'm not quite following. Maybe it would help if you could give me a more concrete example. The requests are load balanced in a round-robin way, so there is no way to influence where they end up. The only way to do it to create special keys, to be shared with a single responder and several requesters.

I have 5 nodes. And any node responds with a different value. What i need is calling all 5 nodes in parallel to capture the 5 differents value but without using publish/subscribe. Is a multi parallel   request/reply to all nodes that expose the same  service but any node return a differenti value (forma example the free memory)

I see. There's no direct way to choose the server you'll send to. Although it's quite tricky, it still can be hacked, though. On the other hand, a quicker hack would be to get the number of connected nodes from the discovery property (requester.discovery.nodes), see which ones you are connected to, and then do the request that many times, so every node will reply at least once. Then save the responses with a unique key from each responder, so you know who they belong to.

Yes this can work thanks. But pub sub can work better


TS declaration file....

can you provide any declaration file for this repo?

Why we need that?

I am using typescript and your repo does not have .d.ts file so i can't import any of functions...

I got it. thanks

Published to npm

I checked it. you have not put .d.ts files to the repo

Please do it by yourself. I have no time these days.

It seems to be fixed.

Good job @moh3n9595 jan. I appreciate your collaboration.


Get Zenodo DOIs

Need to get Zenodo DOIs for Tellurium and possibly RoadRunner/Antimony.

This is very easy and I did it for some repositories. There is a zenodo-github integration via release hooks.
The important part is to register a repo branch with zenodo once, afterwards there is a zenodo archive created automatically for every new release of the registered branch:
see
https://guides.github.com/activities/citable-code/
Takes probably 5 minutes.


Finishing milestone 1.0.0 - Phase 1

Phase 1

Review documentation -> eventually add missing documentation
Full local review on source code -> eventually fix things
Review  code coverage -> eventually improve code coverage

Work still in progress ...


add mips64le to image tonistiigi/binfmt

Signed-off-by: wanghuaiqing<EMAIL_ADDRESS>

@tonistiigi PTAL

Was planning to move this to alpine with upgrade to https://github.com/tonistiigi/xx/pull/14 but I guess using alpine doesn't matter as much here as it does in buildkit Dockerfiles. Afaics alpine mips packages are big-endian. Still, no promises on keeping the support if becomes hard to maintain and you might need to use the old tag or build your own image then. Also planning to remove riscv image for this reason.


Introduce Resource Validator [API-level validation]

Introduce Resource Validator [API-level validation]
Motivation [related to #358]
Current validation of entities approach is very limited and hidden. It allows us to pretty much check only entity properties for validity.
The intent of this change is to expand on the term "validate" and allow making API-level validation, or in other words to validate whether specific POST/PATCH/DELETE requests are valid.
This way we can make custom validation checks prior to actually executing the POST/PATCH/DELETE operation.
Examples of such use cases are:

Platform entities should not be deleted if Service Instance entities exist
Broker entities should not be deleted if Service Instance entities associated with one of the broker's catalog exist
Broker's catalog should not allow removal of one of its Service Plan entities if Service Instance entities associated with this service plan exist

Approach
A new interface ResourceValidator is introduced. Every base controller will have one.
type ResourceValidator interface {
	ValidateCreate(ctx context.Context, repository storage.Repository, object types.Object) error
	ValidateUpdate(ctx context.Context, repository storage.Repository, object types.Object) error
	ValidateDelete(ctx context.Context, repository storage.Repository, object types.Object) error
}

The idea is that just before passing the current object for Creation/Update/Deletion to a controller's repository to execute the request, the corresponding ValidateCreate, ValidateUpdate and ValidateDelete has to be called.
There is a DefaultResourceValidator for controllers which don't require custom validation logic.
Example
An example of the error message returned to the client when trying to remove a plan from a broker's catalog with existing service instances:
{
  "error": "ExistingReferenceEntity",
  "description": "Error executing ServiceBroker request: Could not delete ServicePlan due to one or more existing ServiceInstance reference entities with ID(s): [57bd8c39-d736-4089-aa5c-8a28e0f5d749,e3f8db5b-4425-4a4c-8bc5-95825f785d26,095d0237-ad89-4ef5-8f15-c09216bb52c9]"
}

Pros/Cons of such an API-level validation approach
Pros:

Can have custom validation logic for each API type
Gives access to violation IDs (in cases such as foreign key violation constraints, eg. deleting a Platform with Service Instances)

Cons:

Possible race conditions - validation DB calls are not in the same transaction as the requested CUD operation. [we should think of a way to move this API-level validation a little further down (eg. somewhere right after the start of the interceptor chain) - this way we can ensure that no race conditions will occur]. If we cannot mitigate this - we can at least combine this approach with #358 and in this way when a race condition does occur, the client will receive 400 Bad request with both entity and violation entity - they just won't have the violation IDs in the response message.
Extra DB calls (unavoidable, requiring to do custom validation pretty much guarantees that this will happen)

Note
This change allows us to remove the hidden Validate() invocation from the BytesToObject() implementation. If this new validation approach is adopted, the other repos need to be updated.
Pull Request status

[x] Initial implementation
[x] Integration tests

Coverage decreased (-0.3%) to 87.976% when pulling ac70a4b756c0f48cd6745022442658e04f14d77e on entity-validator into ee42b122ddacba5007f6c25a2fe49c575fb5a71c on async_phase1.

Discontinued in favor of: https://github.com/Peripli/service-manager/pull/365


Concave polygons

Is there any way to make concave polygons with matter.js?

I implemented a convex decomposition algorithm in geom.js, maybe you can reuse (parts of) it. It is a little more complex than a simple ear-clipping algorithm, but produces less convex parts and less vertices on the edge of the polygon.
It's used in svg2physics to allow you to turn SVG images into Box2D physics scenes.

Concave and compound bodies are now supported in the compound-concave branch.
You can also try them out in this demo.
Hopefully these should be merged into master soon!

@liabru
Demos look very promising, do you have any estimates about when will it land in master and/or tagged release? Also, do you think it's mature enough to use for actual game (which I'm considering right now)?

Yea from my testing it's now stable enough in most use cases, so it should be in landing in master within the next week (unless I find new issues but I think I've solved most).
The API for this is also now unlikely to change very much, so I'd say it's ready to start using. It's obviously not mature and battle tested yet, but this obviously will take time and I'll be fixing issues as they come in.

This feature has been merged into master.
Please open new threads for new issues found, thanks!

Can I create holes that way? So I could place a ball inside a ball?

@donaldpipowitch holes are possible if you have a good enough concave decomposition algorithm, or you just define all the convex parts by hand.
Check out the SVG demo and the source code. Also see the compound demo.
Note that if you use Matter.Svg to do convex decomposition, holes aren't guaranteed to work but they often do after some fiddling with your SVG path.

Thank you.

Just to be sure: This isn't tagged in 0.8.0, right? Only master.

Just to be sure: This isn't tagged in 0.8.0, right? Only master.

Correct, only master right now.

Is this https://www.npmjs.com/package/poly-decomp? Is this a peer-dependency now?

That's the right package, but it probably won't work if you're using node rather than browser.
Currently it just expects window.decomp to be available, but I guess now since I recently set browserify up I should probably change this to use require.
Do you need support for this? I've added an issue you can track.

@liabru I had no luck using poly-decomp with an SVG containing a hole. (It seems to treat the hole as a solid shape and ignores the outer shape.) I tried other libraries (https://github.com/mattdesl/svg-mesh-3d which returns a  "simplicial complex"), but had no luck either. Could you create an example with an SVG containing a hole, if this is possible with poly-decomp? If not, I think there are other libraries which could help with triangulation like https://github.com/mapbox/earcut, which are maybe better as poly-decomp?

Strange, I've usually had success with holes using poly-decomp (but it's not a guarantee). As for an example, just look at the SVG demo (ok those arn't exactly holes, but trust me I do have projects that have them).
It probably depends on how the hole is constructed. You often need to experiment with your SVG a bit until it works.
 It's trial and error but it can often help.
You should certainly try https://github.com/mapbox/earcut as I expect it's more robust, but the downside is that it creates triangle parts rather than convex parts which is more optimal, but performance should still be reasonable. I wonder if there's some easy heuristic for joining triangles...
If you do try it, tell me how you get on, I'd be interested in adding support for earcut. There's also libtess which may even be better.

@liabru Thank you for your fast response. Playing with sampleLength doesn't seem to help. I couldn't generate a Body from earcuts results. Maybe I need to change my SVG. This is my path value I used:
d="M540,88.317C791.695,88.317 996.039,292.661 996.039,544.356C996.039,796.051 791.695,1000.39 540,1000.39C288.305,1000.39 83.961,796.051 83.961,544.356C83.961,292.661 288.305,88.317 540,88.317ZM547.838,189.504C551.324,189.523 554.81,189.592 558.294,189.726C565.573,190.007 572.841,190.552 580.081,191.36C599.633,193.543 618.966,197.653 637.714,203.619C650.214,207.596 662.451,212.396 674.323,217.975C685.458,223.208 696.271,229.126 706.683,235.679C724.066,246.619 740.324,259.33 755.181,273.51C766.839,284.636 777.634,296.662 787.487,309.413C795.627,319.947 803.125,330.975 809.963,342.397C821.861,362.269 831.751,383.32 839.706,405.067C847.003,425.017 852.674,445.549 856.869,466.369C861.352,488.615 864.154,511.188 865.502,533.837C865.936,541.117 866.22,548.407 866.361,555.699C866.442,559.88 866.474,564.062 866.465,568.244L865.984,573.609C865.516,575.343 865.197,577.123 864.579,578.809C863.962,580.495 863.193,582.133 862.292,583.687C860.483,586.805 858.143,589.582 855.376,591.893C852.61,594.205 849.461,596.014 846.071,597.24C842.681,598.466 839.102,599.089 835.497,599.081C831.892,599.074 828.317,598.436 824.932,597.195C821.547,595.955 818.405,594.133 815.649,591.81C812.892,589.487 810.563,586.699 808.767,583.574C806.972,580.448 805.736,577.032 805.118,573.481C804.81,571.712 804.796,569.904 804.66,568.114C804.643,567.899 804.661,567.683 804.661,567.468C804.661,567.259 804.662,567.05 804.662,566.842C804.662,566.216 804.66,565.59 804.659,564.964C804.655,563.925 804.648,562.887 804.639,561.848C804.569,554.927 804.365,548.007 804.006,541.094C803.77,536.553 803.469,532.015 803.1,527.483C800.615,496.969 795.041,466.636 785.537,437.507C783.657,431.744 781.623,426.03 779.431,420.378C776.966,414.021 774.301,407.742 771.43,401.558C768.145,394.481 764.591,387.529 760.761,380.732C756.142,372.533 751.124,364.557 745.706,356.862C739.218,347.647 732.158,338.833 724.549,330.518C715.079,320.169 704.758,310.597 693.692,301.974C679.571,290.971 664.239,281.526 648.036,273.912C638.383,269.375 628.425,265.488 618.251,262.286C607.434,258.882 596.373,256.254 585.181,254.427C572.016,252.277 558.671,251.236 545.332,251.312C532.415,251.384 519.505,252.503 506.766,254.644C491.021,257.289 475.543,261.496 460.614,267.154C446.981,272.32 433.811,278.694 421.278,286.14C407.734,294.189 394.94,303.488 383.049,313.821C373.615,322.019 364.75,330.865 356.489,340.243C349.535,348.137 343.01,356.408 336.918,364.985C332.409,371.336 328.137,377.856 324.1,384.517C321.295,389.147 318.603,393.846 316.023,398.606C314.022,402.297 312.089,406.025 310.222,409.786C296.978,436.459 287.097,464.734 280.017,493.64C278.832,498.48 277.725,503.34 276.693,508.215C275.334,514.635 274.106,521.081 273.002,527.549C271.716,535.079 270.599,542.637 269.64,550.215C268.786,556.967 268.057,563.735 267.446,570.513C267.143,573.877 266.872,577.244 266.625,580.612L265.764,585.93C265.173,587.626 264.728,589.379 263.992,591.017C262.515,594.305 260.473,597.309 257.96,599.894C255.447,602.478 252.501,604.603 249.256,606.172C246.01,607.741 242.515,608.731 238.929,609.095C235.343,609.459 231.72,609.194 228.225,608.31C224.731,607.425 221.418,605.937 218.436,603.911C215.454,601.884 212.85,599.352 210.741,596.429C208.633,593.505 207.052,590.235 206.07,586.766C205.581,585.039 205.242,583.261 205.06,581.475C204.879,579.689 204.991,577.884 204.985,576.089C204.984,575.845 205.02,575.602 205.038,575.359C205.075,574.861 205.113,574.364 205.15,573.867C205.301,571.885 205.462,569.905 205.631,567.925C206.52,557.508 207.662,547.113 209.073,536.753C214.2,499.108 222.899,461.88 236.014,426.195C237.807,421.317 239.682,416.468 241.641,411.654C251.687,386.967 263.953,363.162 278.569,340.863C287.205,327.687 296.656,315.043 306.906,303.078C317.656,290.531 329.283,278.733 341.721,267.856C351.804,259.038 362.419,250.826 373.504,243.306C387.321,233.932 401.868,225.634 416.987,218.55C435.25,209.994 454.343,203.213 473.923,198.377C489.444,194.543 505.265,191.929 521.195,190.58C526.577,190.124 531.972,189.813 537.371,189.646C539.908,189.568 542.446,189.525 544.984,189.507C545.935,189.503 546.886,189.502 547.838,189.504Z"

I've experimented with both earcut and libtess. Both gave similar results, neither of them very good for my test cases (lots of missing pieces). I suspect they require explicit information about holes, which would require another tricky algorithm to identify them.
Either way, polydecomp gave better results that were more optimal since it outputs polygons rather than just triangles. So I'm going to stick with it for now as it appears earcut and libtess would require even more effort from users to get working.

Is there an example with polydecomp and SVG's with holes somewhere? I am also facing problems with my SVG's

Is there an example with polydecomp and SVG's with holes somewhere? I am also facing problems with my SVG's

You can try this SO answer but whether it works for you may depend on the nature of your SVG, so you might want to post it. That said, I'm mostly replying for the sake of future visitors since your post was 3 years ago and you've probably moved on by now.

For those who want to make @mapbox/earcut to work with matter.js: you will have to apply this Pull Request, because the position of a convex VertexSet is messed up. Would be great to use whatever algorithm you want though…


Need api: disable FuzzyProvider,  let typedText.length > 0

https://github.com/yongkangchen/atom-ctags/issues/3

1、I need a provider api to disable just FuzzyProvider
for reason is: atom-ctags auto update symbols when file save, there no need to enable FuzzyProvider. But still need autocomplete-snippets, so I can't use exclusive to exclusive all other provider.
2、I need a provider api to let typedText.length > 0 instead of typedText.length is 1 in autocomplete-view.coffee#L188
for reason is: when input (,  bracket-matcher auto insert ), lead to typedText.length == 2, and I need autocomplete to show symbol for pre word which include function param.

@yongkangchen Would it suffice to simply ensure atom-ctags and autocomplete-snippets suggestions are always more specific (and consequently higher in priority) than FuzzyProvider?

@joefitzgerald I'd like to be able to disable FuzzyProvider without disabling all other providers as well, but I'd specifically like the user to be able to decide to disable it or not.
With an earlier version of autocomplete-plus, I could simply use a fork of autocomplete-plus which had FuzzyProvider stripped out. That way the user could install autocomplete-plus or not, or adjust the individual fileBlacklist settings of the two autocomplete engines so that they didn't overlap. This doesn't seem possible anymore (without significant inconvenient rewriting), since providers are expected to use the atom.services api.
I'm chiming in here because I think it's important that however this issue is resolved, the user be in control. I think most of the users of my provider don't want to see the default provider options at all, but some may, and some may want to see them in some contexts but not in others. My solution wasn't optimal, but it let the user decide whether and when they would be presented with the different options. Now that I'm migrating back to the stock autocomplete-plus, I'd still like to provide my users with that same configurability.

:thumbsup: @apcshields: I'm going to provide two ways to suppress FuzzyProvider: 1) a preference to disable it entirely 2) a way for providers to add to a blacklist of selectors where the FuzzyProvider doesn't get used.
This provides flexibility for the user and provider authors.

Great!


Integration tile for Beyla in Grafana Cloud

Borrow inspiration from how the integration tile for Kubernetes monitoring works in Grafana Cloud and make an integration tile, which will let users select few values to quickly onboard with Beyla configuration.
Ideally we should support:

Configuration generation for bare metal
Configuration generation for Docker compose
Configuration generation for Kubernetes, YAML and Helm
Choice for application and network observability
User friendly way to choose what to instrument, e.g. ports, pods, pod labels, etc.

This task is complete


Add missing change note on A0-1-2 and A0-1-4

Description
Add a missing change note on A0-1-2 and A0-1-4. Since we have done a FP fix, we need a change note on it.
Change request type

[ ] Release or process automation (GitHub workflows, internal scripts)
[ ] Internal documentation
[X] External documentation
[ ] Query files (.ql, .qll, .qls or unit tests)
[ ] External scripts (analysis report or other code shipped as part of a release)

Rules with added or modified queries

[X] No rules added
[ ] Queries have been added for the following rules:

rule number here

[ ] Queries have been modified for the following rules:

rule number here

Release change checklist
A change note (development_handbook.md#change-notes) is required for any pull request which modifies:

The structure or layout of the release artifacts.
The evaluation performance (memory, execution time) of an existing query.
The results of an existing query in any circumstance.

If you are only adding new rule queries, a change note is not required.
Author: Is a change note required?

[X] Yes
[ ] No

🚨🚨🚨
Reviewer: Confirm that format of shared queries (not the .qll file, the
.ql file that imports it) is valid by running them within VS Code.

[ ] Confirmed

Reviewer: Confirm that either a change note is not required or the change note is required and has been added.

[ ] Confirmed

Query development review checklist
For PRs that add new queries or modify existing queries, the following checklist should be completed by both the author and reviewer:
Author

[ ] Have all the relevant rule package description files been checked in?
[ ] Have you verified that the metadata properties of each new query is set appropriately?
[ ] Do all the unit tests contain both "COMPLIANT" and "NON_COMPLIANT" cases?
[ ] Are the alert messages properly formatted and consistent with the style guide?
[ ] Have you run the queries on OpenPilot and verified that the performance and results are acceptable?As a rule of thumb, predicates specific to the query should take no more than 1 minute, and for simple queries be under 10 seconds. If this is not the case, this should be highlighted and agreed in the code review process.
[ ] Does the query have an appropriate level of in-query comments/documentation?
[ ] Have you considered/identified possible edge cases?
[ ] Does the query not reinvent features in the standard library?
[ ] Can the query be simplified further (not golfed!)

Reviewer

[ ] Have all the relevant rule package description files been checked in?
[ ] Have you verified that the metadata properties of each new query is set appropriately?
[ ] Do all the unit tests contain both "COMPLIANT" and "NON_COMPLIANT" cases?
[ ] Are the alert messages properly formatted and consistent with the style guide?
[ ] Have you run the queries on OpenPilot and verified that the performance and results are acceptable?As a rule of thumb, predicates specific to the query should take no more than 1 minute, and for simple queries be under 10 seconds. If this is not the case, this should be highlighted and agreed in the code review process.
[ ] Does the query have an appropriate level of in-query comments/documentation?
[ ] Have you considered/identified possible edge cases?
[ ] Does the query not reinvent features in the standard library?
[ ] Can the query be simplified further (not golfed!)

🤖 Beep Boop! clang/c/x86_64 Matrix Testing for this PR has been completed but I didn't find anything to test!

🤖 Beep Boop! gcc/c/x86_64 Matrix Testing for this PR has been completed but I didn't find anything to test!

🤖 Beep Boop! clang/cpp/x86_64 Matrix Testing for this PR has been completed but I didn't find anything to test!

🤖 Beep Boop! gcc/cpp/x86_64 Matrix Testing for this PR has been completed but I didn't find anything to test!

🤖 Beep Boop! Matrix Testing for this PR has been completed. If no reports were posted it means this PR does not contain things that need matrix testing!


airflow-test-connection-fixed

Describe your changes :

I worked on the fixing airflow test connection

Type of change :

[x] Bug fix

Checklist:

[x] I have read the CONTRIBUTING document.
[x] I have commented on my code, particularly in hard-to-understand areas.

Reviewers

@open-metadata/ingestion

Thanks @codingwithabhi , can we double-check if it is working fine for Glue and Airbyte as well please?


[Feature Request] Release DEB package for Debian sid

Is your feature request related to a problem? Please describe.
Per the query result on debian sid, the usage of Azure CLI on Debian sid is not small, but we don't release DEB package for Debian sid:
https://packages.microsoft.com/repos/azure-cli/dists/

Users will then install the unofficial, buggy azure-cli package from https://packages.debian.org/sid/azure-cli and report issues to us (https://github.com/Azure/azure-cli/issues/19640).
Describe the solution you'd like
The best way is to support Debian sid by ourselves, so that users can use the official Azure CLI package.

Release DEB package for Debian sid


deleteDuplicateEntries() is slow

It seems like the de-duplication of the environment variable entries is a big share of the sourcing .env time for simple packages.
On my system it can more than double the time of the quick ones (ncurses for example).
WASTST1@BOSS0152:~/zopen-dt/usr/local/zopen/ncurses $ time . .env

real	0m0.177s
user	0m0.103s
sys	0m0.034s

The awk used is over my head, but maybe it can be simplified? For example the shell-only one with zsh caveats here: https://unix.stackexchange.com/a/338737/89196 cuts the time for ncurses in half and this one doesn't exploit that we only remove duplicates of the thing that was just prepended.
WASTST1@BOSS0152:~/zopen-dt/usr/local/zopen/ncurses $ time . .env.test

real	0m0.073s
user	0m0.042s
sys	0m0.014s

My very modest zopen-dt env only has 5 packages and takes 5 seconds to setup.  git takes almost a second by itself including its dependencies.

Yes it is slow. I think @IgorTodorovskiIBM ans @DevonianTeuchter are hoping to completely (mostly?) eliminate all this stuff by making the tools set their own environment up and recognizing that all the path/LIBPATH/man path only needs to be set once now that we have a common structure

closing - i believe this is cleaned up now. @covener re-open if not


Added docker-compose file

Solves: #15
TODOS:

Need to check if we can only import required depdency for celery service.

@arpanpreneur please review
P.S: Here's my Birthday treat to you, hope it makes you happy 😁 😜😜

nicely done!!!

Hi @divyanshbhowmick , Thank you so much for your great work on your birthday.
Just need a few changes however

We can just have one Dockerfile instead of two, since the environment for Celery and the Webserver is exactly the same. We can just omit mentioning a CMD in the dockerfile and give the entrypoint from the compose entry.
In production we can't run python manage.py runserver because it is a single threaded-single request development web server. We will need to use Gunicorn.
We need the database (Postgres), Redis, Nginx (with proxy config for serving static files and media files) alongside the celery and app_server services you have already created. We should not be exposing the ports, except for the final nginx. Others should refer each other with the hostnames (service names) within the Docker network.

Once again thank you for the effort you have put in. Just the above changes and we are good to merge this.

To make your work simpler, let me put in the Dockerfile for Python Project. Even I copy and paste these to my new project nowadays.
Sample Dockerfile I use in my other services made with Django (works perfectly on Azure Container Apps).
# Dockerfile
# pull official base image
FROM python:3.10

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN pip install --upgrade pip setuptools
RUN apt-get update
RUN apt-get install -y curl
RUN curl -sL https://deb.nodesource.com/setup_16.x | bash
RUN apt-get install -y nodejs npm
RUN node -v
RUN npm -v

# create user for the Django project
RUN useradd -ms /bin/bash askmydata

# set current user
USER askmydata

# set work directory
WORKDIR /home/askmydata

# copy and install pip requirements
COPY --chown=askmydata ./requirements.txt /home/askmydata/requirements.txt
COPY --chown=askmydata ./package.json /home/askmydata/package.json
COPY --chown=askmydata ./package-lock.json /home/askmydata/package-lock.json
ENV PATH /home/askmydata/.local/bin:$PATH
RUN pip install --user -r /home/askmydata/requirements.txt
RUN npm install
RUN npm install --only=dev

# copy Django project files
COPY --chown=askmydata . /home/askmydata/
RUN npm run build-react-code

RUN ["chmod", "+x", "/home/askmydata/docker-entrypoint-gunicorn.sh"]
RUN ["chmod", "+x", "/home/askmydata/docker-entrypoint-celery.sh"]

Where docker-entrypoint-gunicorn.sh is:
python manage.py collectstatic --no-input
python manage.py migrate
gunicorn --workers 3 --bind <IP_ADDRESS>:8000 --timeout 120 askmydata_server.wsgi:application

And docker-entrypoint-celery.sh be like:
celery -A askmydata_server worker -l info --concurrency=2

Please change the Project Names on this from askmydata_server to llmine_core. Also since we don't yet have JS pipelines like I have in other projects you can remove the NPM related changes. Apart from this the redis, postgres and nginx are something you can just pull from dockerhub. @divyanshbhowmick

To make your work simpler, let me put in the Dockerfile for Python Project. Even I copy and paste these to my new project nowadays.
Sample Dockerfile I use in my other services made with Django (works perfectly on Azure Container Apps).
# Dockerfile
# pull official base image
FROM python:3.10

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN pip install --upgrade pip setuptools
RUN apt-get update
RUN apt-get install -y curl
RUN curl -sL https://deb.nodesource.com/setup_16.x | bash
RUN apt-get install -y nodejs npm
RUN node -v
RUN npm -v

# create user for the Django project
RUN useradd -ms /bin/bash askmydata

# set current user
USER askmydata

# set work directory
WORKDIR /home/askmydata

# copy and install pip requirements
COPY --chown=askmydata ./requirements.txt /home/askmydata/requirements.txt
COPY --chown=askmydata ./package.json /home/askmydata/package.json
COPY --chown=askmydata ./package-lock.json /home/askmydata/package-lock.json
ENV PATH /home/askmydata/.local/bin:$PATH
RUN pip install --user -r /home/askmydata/requirements.txt
RUN npm install
RUN npm install --only=dev

# copy Django project files
COPY --chown=askmydata . /home/askmydata/
RUN npm run build-react-code

RUN ["chmod", "+x", "/home/askmydata/docker-entrypoint-gunicorn.sh"]
RUN ["chmod", "+x", "/home/askmydata/docker-entrypoint-celery.sh"]

Where docker-entrypoint-gunicorn.sh is:
python manage.py collectstatic --no-input
python manage.py migrate
gunicorn --workers 3 --bind <IP_ADDRESS>:8000 --timeout 120 askmydata_server.wsgi:application

And docker-entrypoint-celery.sh be like:
celery -A askmydata_server worker -l info --concurrency=2

Please change the Project Names on this from askmydata_server to llmine_core. Also since we don't yet have JS pipelines like I have in other projects you can remove the NPM related changes. Apart from this the redis, postgres and nginx are something you can just pull from dockerhub. @divyanshbhowmick

I've addressed the reivew comments!!


Usefilter_map() instead of filter and then amap

          I think it may be more efficient to use a `filter_map()` here, no?

Originally posted by @Braqzen in https://github.com/FuelLabs/sway/pull/5435#discussion_r1442317525

Just noticed a race-condition so I'll leave to you to decide which issue should be closed. Ref https://github.com/FuelLabs/sway/issues/5437


Feat/backend/communicate websocket api

autogenerated files causing some checks to fail.
closing PR wihout merging.


Start VMs in headless mode

In some cases the VMs need to be started in headless mode since all applications can be forwarded via X11 (Unix-like).
Also the VMs can be accessed from VSCode terminal via ssh.

The issue is done in #3

The issue is done in #3


Skip first time experience on Appveyor

@ryanbrandenburg,
Thanks for having already signed the Contribution License Agreement. Your agreement was validated by .NET Foundation. We will now review your pull request.
Thanks,
.NET Foundation Pull Request Bot

appveyor is not liking this change...


Remove drawScene

This PR is the first step towards getting closer to making elements not a global anymore.
This moves the logic of drawing to the canvas to componentDidUpdate and instead of calling drawScene, we can just do this.forceUpdate() to trigger a re-render and therefore a componentDidUpdate.
The previous PR broke copy and paste, I fixed it by putting the handler in the div above.
I made sure that export to png was still working.


samples: Fix deadlink in TFM secure partition sample

Updated a link to tf-m-user-guide.trustedfirmware.org external documentation that was now a 404.
Also ran formatter to wrap lines at 100 characters.

Also ran formatter to wrap lines at 100 characters.

I don't think there is a requirement for this in .rst files.

Coding guidelines do apply to documentation, even it's not currently enforced by CI.

I also don't like this because it's annoying to edit sentences and have to reformat the entire section just because the rephrased the first sentence, as well as reviewing changes done by others for the same reason.

Rephrasing a sentence would probably still make for a quite readable diff in my experience, even if text happens to wrap slightly differently.

I suggest we undo this formatting change.

🤷♂


Factor directory iterator as a trait

Factor directory iterator as a trait so that other extractor can rely on it and make extension generic so that test (<extension> === 'php') can be overridden if needed.

That would need the same change for the JS extractor to make things DRY.

Thanks for the pull-request, @drzraf !


Better distance measure for type search

The current distance measure gives expected, but counter-intuitive results.
At the moment, when searching for a type, the distance to a found type is defined as the size of the substitution needed to unify the two.
For example, searching for {Int} -> Int gives size :: (a e) -> Int a distance of 2: the substitution is ([], [a -> {}, e -> Int]). On the other hand, sign :: a -> Int has distance 1 with the mgu ([], [a -> {Int}]). It would be more intuitive to give size a lower distance than sign, because the type is much more 'specific': the set of types that can be unified with size is smaller than the set of types that can be unified with sign.
Creating a more intuitive distance measure is important, because it will create a more helpful list of results. For example, functions like id :: a -> a and trace :: msg a -> a appear often at the top of the results because of their very standard types. If they would be 'punished' for being a very general type (unless the searched type is general, of course), the top results would be more useful.
What formal definitions can we use to get to an intuitive distance measure?
A related question is if we should give the same importance to substitutions from left to right as from right to left. For example, the solution of the unification of {Int} -> a with a -> Int is ([a -> Int], [a -> {Int}]): the a in both sides are substituted. By convention in cloogle, the left type is the searched type. In computing the distance, should we give the same importance to substitutions on the search type (left to right) as to substitutions on the found type (right to left)?
Another question is what distance measure we should use when the user searches for both a name and a type. Currently this is computed as length of most general unifier + levenshtein distance between names. However, I think we should first tackle the simpler case of type search only.

Probably unifications with functions should be given high penalties.
For example, searching for Int Int Int -> Int yields:

fromInt :: Int -> a; distance 1; unifier (Int -> (Int -> Int)) ← a
indexOfAfter :: Int s s -> Int; distance 1; unifier Int ← s

Clearly indexOfAfter is much more intuitive.

Specialisations of the searched type should have a higher distance than generalisations, that is, the complexity of unifications on the returned type should weigh more.

Since 70c05db1898105a42d1cea5fa9873c5447f9482d this works reasonably well, closing this. Feel free to reopen / open a new issue for cases where the distance measure should be improved.


Reproducing results in cifar10

Hi, I try the nice code and it is easy to run. But I did not get the exact numbers reported in the paper at the moment. Specifically, I got 97.72 for multi 4 loss 1 setting, while the reported number is 97.89. For multi 8 loss 4 setting, I got 98.10 while the reported one is 98.16. I would like to know whether I miss something important or it is just the variance. Thx

Hi @sagejiaweili,
Thanks for your interest in our work.
I think it's just the variance and as mentioned in the paper, we report the average number over different runs. You can also run our released checkpoints to double check.
Thanks,
Sen


Pull environmnet on Github workflow

Amplify CLI Version
11.0.2
Question
I'd like to create a workflow on github actions to pull my environment so I can run the app and make sure it builds on, this is useful for pull requests, tests and publishing the app. Since there are multiple steps such as logging in on the web, how can do this?
Locally I would pull the environment and it would open a website to authenticate. Is there a way to do it all via CLI by providing let's say a token?
Thanks

Closing due to inactivity and in favor of tracking existing issues


Appveyor now successfully builds

Looks great

Reviewed 1 of 3 files at r4, 21 of 21 files at r5.
Review status: all files reviewed at latest revision, all discussions resolved, some commit checks broke.

Comments from the review on Reviewable.io


Improve empty signature implementation

PR Description
Introduces a more Java-like way to handle empty signatures by introducing a subclass of BLSSignature.
Let me know if this is horrible, or there's a better way to do this. (Seems like a lot of work to avoid a couple of if statements 😝)

I agree that it looks like a lot of work to avoid if statements.  To clarify, I wasn't advocating a new type, or even eliminating if statements.  I didn't like the fact that you have to maintain an isEmpty flag to tell if it is an empty signature. I don't see why you can't detect that a signature is empty without having to maintain a flag.

I was only being facetious 😀. I actually like this a lot better. It's clean and robust.
BLSSignature could use the point at infinity to represent the empty signature, I guess. But, conceivably, there could be legitimate uses for the point at infinity, so that might end up being a problem. And I am uncomfortable with storing other points that are not on the curve in the signature object - it's worse than having a one-bit flag imho.
Really, the empty signature is not a signature at all. It's just a dummy or placeholder, so it makes sense for it to be a different (but compatible) object, I think.

I've used the null idea in #381, which is probably better. These are mutually exclusive.

I agree that #381 seems better. Since you seem to prefer it too, I will go ahead and close this one to avoid it being merged on accident.  if you change your mind later, I yield to your judgement since you are closer to the problem.


Update governance model

As our team grows, we want to update our governance model to accomodate both developer and community roles in the core team.
TODOs

[ ] @ivirshup: send around examples of other governance systems
[ ] receive infos from numfocus

Related PRs

https://github.com/scverse/governance/pull/47 (initial suggestions by @grst)

Lets try and do the actual conversation at the hackathon, but some preparation before.

@ivirshup what preparation did you have in mind?

@scverse/core, summarizing what we discussed at the munich hackathon
Things we (sort-of) agreed on

core team members are split in subteams that organize themselves (for now "community" and "developers")
smaller governance team. Both community and dev-team send representatives to the governance team. Responsibilities:

funding
keeping the shop running

We'd like some level of rotation in the governance team
The steering council remains as a last resort for solving conflicts (maybe find a better name)

Things that need further discussion

clarify roles of governance vs. community vs. developer teams
size of the governance team
rotation cycles of governance team members (term duration? can someone be re-elected?)
How is the governance team determined?
Who can attend governance meetings? Is it necessary to restrict voting rights in governance meetings to current incumbents only?

Some thoughts:

It was important to me that people that invest time into scverse get recognized for it somehow. "Job titles" was one suggestion. That's what for example Nucleate does.
I think that a process where every core member that would be up for a governance team position would be thrown into pool from which we select randomly for 1 year is better than voting people in or out.
We could consider having diversity criteria for the governance team if possible.
We should consider having 1-2 external people that act as "safety officers". Basically external people that are not council or governance team that deal with harassment reports and similar issues.

I think that a process where every core member that would be up for a governance team position would be thrown into pool from which we select randomly for 1 year is better than voting people in or out.

Python does nominations and term limits for rotation.
I don't think someone should be "randomly selected" for this.

We should consider having 1-2 external people that act as "safety officers".

I think NumFOCUS can help organize/ provide this for us

I don't think someone should be "randomly selected" for this.

You'd still need to be willing to contest to be among the list of potential governance team members. Random choice would just replace the election process.

We should consider having 1-2 external people that act as "safety officers".

I think NumFOCUS can help organize/ provide this for us

That would be amazing!

I would be more in favour of a 6 months time limit, that could nevertheless be renewed.

Happy to go with shorter limits. What do you think about imposing a limit on how many consecutive terms (one or two) one can serve? This is also a guarantee that one gets the chance to step down at some point without feeling guilty.

Happy to go with shorter limits. What do you think about imposing a limit on how many consecutive terms (one or two) one can serve? This is also a guarantee that one gets the chance to step down at some point without feeling guilty.

I personally think that 6 months is too short. If people join the governance team that weren't as involved as all of us, it'll take them quite some time to get up to speed. That's like only 6 governance meetings!

I don't think someone should be "randomly selected" for this.

What @grst answered here. Also, organizing proper votes would be a loooot more work to ensure that it is transparent etc. I'm convinced that picking people randomly (of the pool of people that signed up for it!) is less work.

This is also a guarantee that one gets the chance to step down at some point without feeling guilty.

Uhh, pretty sure this is antithetical to our mission and origin. Guilt based motivation is a key driver of open source development.

Guilt based motivation is a key driver of open source development.

I am confident that there are better sources of motivation :) What you're describing can enforce discipline.

I personally think that 6 months is too short. If people join the governance team that weren't as involved as all of us, it'll take them quite some time to get up to speed. That's like only 6 governance meetings!

on the other hand, this fast turnover enables more people to be exposed to such process/task and understand whether it suits them + enables flexibility for sitting governance members. I think faster turnover has really the benefit of increase diversity and exposure to/from the community, and also improve processes (e.g. streamline joining/leaving governance). I can see that it might have a detrimental effect on decision making and vision but I think the chances are quite remote as for big/long term decisions we'd probably want to have a solid community/devs support regardless of the sitting governance members.

@giovp totally fair arguments, but I still lean more on my side thinking that the benefit of experienced people making decisions (we'll hopefully always have a few newcomers in the governance team) outweighs the "flexibility".
Interested in what the others think.

What does the governance team do? They'll do some funding stuff, but I would imagine in practice most funding decisions should be made by the sub teams.
I feel like the biggest value of governance is coordination across sub teams without have members of all teams have to join a meeting every couple weeks.

that the benefit of experienced people making decisions

I think there's also value of institutional knowledge around this stuff.
But, I would like to really figure out what he governance team can do. As an open source community decision making tends to be pretty decentralized. It's ultimately a do-ocracy. So I don't want to overstate the power a governance team would have.

enables flexibility for sitting governance members

Flexibility is good, but I'd also say commitment is even more important for someone in a role with more power.

Off the top of my head I would propose something like: governance team is the chair and co-chair from each sub team + steering council. One of these positions could cycle more quickly, but tbh probably leave it up to the sub team. We can make some rule about amount steering council and these roles can overlap (maybe a little, maybe none).

@giovp totally fair arguments, but I still lean more on my side thinking that the benefit of experienced people making decisions (we'll hopefully always have a few newcomers in the governance team) outweighs the "flexibility".
Interested in what the others think.

I think that higher turnover + term limits is more sustainable long term as it insures more new people getting involved for two reasons:

newcomers will feel intimidated to take a governance team role and feel they'll never be good enough to "replace" any of the experienced members. If some of the experienced members must step down from the governance team for a while due to term limits, this opens seats for newcomers.
Some community members might feel more inclined to give a governance role a try if they don't have to be afraid they can never get rid of the job again.

I think there's also value of institutional knowledge around this stuff.

Just because an experienced member is not on the governance team for a while, doesn't mean they can't be asked for advice.

All seem valid points to me with pros and cons. I would be more in favor of what Lukas said about yearly rotations. This make sense practically IMO, as it ensures that elections or random selections will consistently occur in a designated month, say July, and outgoing members have until September to transition (I am saying random months). Also having a bit more time to adjust makes more sense I think, even in terms of recognition. Being a governance member for year, e.g. 2023.
I also agree with Isaac. It needs to be very clear what the role and the tasks are. It sounds more scary than it is probably.

I also agree with Isaac. It needs to be very clear what the role and the tasks are. It sounds more scary than it is probably.

With some help of GPT4, I reviewed all notes of the past governance meetings. Here's what we have been handling in governance meetings in the past:

Discussions about processes and governance structures

governance structure
processes such as "spending money", onboarding, offboarding

Events and conferences (-> will be mostly handled by community team in future)
Package development (-> will be mostly handled by dev team in future)

API discussions
new packages such as anndata-io, IO/dataloader package
review of ecosystem packages
data structures
cookiecutter template

Funding

interactions with Numfocus, CZI, ...
grants
pushing PIs for funding

Community and Outreach (-> will be mostly handled by community team in future)

community meetings
teaching initatives
social media

Misc

paper
Organize meetings with adisory board and management committee

Given that most of this is delegated to the dev/community teams it essentially boils down to

general directions ("we should do X/have more Y")
define processes
interactions with other institutions and PIs/advisory board
funding

Governance models from similar communities
Bioconductor

Technical advisory board: https://bioconductor.org/about/technical-advisory-board/
Community: https://bioconductor.org/about/community-advisory-board/
Working groups: https://github.com/Bioconductor/BiocWorkingGroups

One thing I would note here is that at least the technical team has resonsibilities about funding in their description.
There is a "core team" which has members from multiple groups, but unfortunately no documentation that I could find.
nf-core
https://nf-co.re/governance
Pangeo

Governance doc (mostly about steering council)
Working group schedueles

A little unclear to me who is on these working groups or how they are defined

Unfortunately, I don't think there is very centralized documentation on this. I know they are doing a bunch, but unclear to me how it's all organized.
Astropy

https://www.astropy.org/team.html
Their coordination committee is I think closest to what we're talking about here

We could frame this governance model update as a purpose-driven change, and my impression is that it makes sense in order to accommodate a larger core team while also keeping the discussions reasonable as not impede the decision-making process. For the latter, binary votes and raising objections don't seem to be the issue as those have been done asynchronously. So the purpose is to handle a potential future influx of people in relation to keeping discussions productive.
The governance/dev/community split seems reasonable as already discussed on multiple occasions however I am wondering about the topic and responsibility split between those entities. For instance, so far it seemed sensible to conduct the governance meetings with the developers/maintainers of core packages as these packages seem to be the kernel of the consortium. The new model should either (a) explicitly move some of those interactions to the dev meetings or (b) keep core packages developers in the governance team. The former would thus repurpose the governance meetings as they are now, the latter would mean we could be inviting people to participate in the core scverse matters with intention, be it development, community, governance, or any combination of those. The former has an added bonus of immediately relieving [at least some of] the core maintainers from the governance overhead however the latter might help us to achieve the same objective in a more sustainable form. Thus I wonder if the latter is a more organic change at this point.
Moreover, this discussion can have more moving parts if we consider people specifically hired through scverse to fill one of the many roles we have, e.g. funding or event management. This might develop into a separate discussion on roles somewhat akin to what @Zethson has mentioned above but I don't think we are there yet.


listArchive types are broken

only allows "files" in options

What are the options you think is missing or can't be combined?
Also need your script example of what not working and output of that.

for example the raw or recursive parameter. i don't use the library anymore so i cant. just try to use it in typescript if you want to reproduce it.

I don't have that issue.
You say broken, but without any support for it. So there is nothing to fix or look over.
Which you would need to do PR.

 I just switched to another library and im in too much stress rn to reproduce it. I'm sorry for any inconvenience caused.


black screen, audio only

Script version
What version is the script on eg 2.9 , 3.1 ect
Describe the bug
A clear and concise description of what the bug is.
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots or a video to help explain your problem.
Desktop (please complete the following information):

OS: [e.g. iOS]
Browser [e.g. chrome, safari]
Version [e.g. 22]

Additional context
Add any other context about the problem here.
when I go to play a video, it starts ok, then screen turns black, & only get audio

Same here

Getting the same problem. Can hear the audio of the video playing in the background but cannot see any elements of the video or player. Cannot interact with any elements either if you click on where you would normally find it. I am using version 5.6 of the script.
OS: MacOS Sonoma 14.5
Browser: Safari Version 17.5 (196<IP_ADDRESS>.6)

Appears to work again if you sign out of YouTube

Fixed in this Pull Request #4756


dragging train onto train and releasing mouse doesn't drop

this is an issue because virtual train sets most mouse click and release events as handled. need to devise something smarter for that

probably make the grid node handle the input for trains before processing the grid, don't use the input handled system.
that makes it consistent with everything else

this should honestly be quite easy, use a contains_point function for trains (-> virtual train), then treat the train like any hover_obj in grid.gd


Custom validators suppress JS errors

Whenever I have a JS error in my custom validation callbacks it just suppresses the error message and then parsley treats the field has valid allowing a form submit.
Is this how it is meant to function or is this an error?

From the CONTRIBUTING file which you apparently haven't read:
Questions?
Please ask questions on StackOverflow and be sure to include the parsley.js tag. Please provide an example, starting for example from this jsfiddle
Issues?
If you believe you have found a bug in parsley, please provide an example, starting for example from this jsfiddle.
This makes it possible for you to be sure you have isolated the issue to a minimal case. It also makes it much easier for us to understand your issue. Sometimes the issue is completely different than what you would expect and only an actual example can lead to a solution.

Loving the condescending first line of your reply.
https://jsfiddle.net/1zqrpq87/3/

Ah, I see, I thought you were referring to addError.
Agreed, that should not happen.
Looks like the validators library is catching all errors, not just constraint validations.

I'm not super familiar with the validators lib, but I've create a PR for @guillaumepotier which I think would resolve the issue.

Oh great, because I faced with this weird behaviour too. And as temporary solution, just to have ability to see errors, I added following strings in "catch ( violation ) { return violation; }" :
    if (violation instanceof Violation) {
      return violation;
    } else {
      console.log(violation);
    }

@marcandre How can I see changes from your PR, for educational purpose?)

@r-polonskiy You click on the PR, click on "commits", and you can see the diff. Or is that not your question?

I'm happy to report that we no longer use the validator.js library and that this is no longer an issue...


DSA : ARRAY - Largest subarray with 0 sum

Description
Given an array having both positive and negative integers. The task is to compute the length of the largest subarray with sum 0.
Example 1:

Input:
N = 8
A[] = {15,-2,2,-8,1,7,10,23}
Output: 5
Explanation: The largest subarray with
sum 0 will be -2 2 -8 1 7.

Domain
DSA
Type of Contribution
Documentation
Code of Conduct

[X] I follow Contributing Guidelines & Code of conduct of this project.

/assign


Preview images no longer open

Ask your question
The preview jpgs downloaded from the following address ..."name":"pictureUrl","value":"https://security-app-eu.eufylife.com/v1/s/g/TXXXXQP5f"... can no longer be opened. Unknown file format. It worked a few days ago. In the meantime I updated the cameras (S300) to version <IP_ADDRESS> and the station (S380) to version <IP_ADDRESS>.
Can it be that the files are now encrypted? Or what else am I doing wrong?

Take a look here: https://github.com/bropat/eufy-security-client/issues/273


Cannot get logs for a function invocation

I noticed a couple of issues with the CLI that prevent me from getting logs for a function. Since the fixes are all related, I'm filing as a single ticket for simplicity.
Version information:
$ fn version
Client version is latest version: 0.5.4
Server version:  0.3.566

fn logs help is incorrect:
Currently outputs fn [global options] get logs <app-name> <call-id> but should be fn [global options] get logs <app-name> <function-name> <call-id>

fn logs fails to render the log message:
DEBUG=1 fn get logs go-flow go-flow 01CQV73V87NG8G00GZJ000000Y

HTTP/1.1 200 OK
Content-Length: 447
Content-Type: application/json; charset=utf-8
Date: Thu, 20 Sep 2018 10:18:13 GMT

{"message":"Successfully loaded log","log":{"call_id":"01CQV73V87NG8G00GZJ000000Y","log":"header: Fnproject-Stageid true 2\nheader: Fnproject-Flowid true 471678d5-7be9-4e61-ac06-ee42224aa1c8\nAwakened flow 471678d5-7be9-4e61-ac06-ee42224aa1c8\nHandling continuation\nInvoking continuation with 1 args\nDecoding arg of type string\nDecoded datum of type *models.ModelBlobDatum\nWriting successful result foo\nConverting value to ModelBlobDatum\n"}}

Fn: json: cannot unmarshal object into Go struct field Log.log of type string

fn list calls help is incorrect:
Currently outputs fn [global options] list calls [command options] <app-name> but should be  fn [global options] list calls [command options] <app-name> <function-name>

The help message also includes references to routes which should be removed.

@gviedma @mantree This shouldn't be closed just yet, no. 1 and 3 still need to be changed in the CLI.

Agreed


body_text and body_html are not available

Hi!
The readme lists the properties body_text and body_html as output options, but on the Github API page there is just body and the properties are empty when I try to use them.
Also, the body output has line breaks in it, is there a way to get it directly like it comes back from the API (as a JSON string with \n line breaks) so the value can be used in a new request that has a JSON body?
Thank you!

Ah, so the body output is not a string (which I can use directly in e.g. in a curl run) but a JSON and I need to convert it - ok, did not get that.
Thank you, that seems to work!

Ok - I works like that:
...
      - shell: bash
        run: |
          curl -X POST -H 'Content-Type:application/json' -d @- https://myapi-host/api 'EOF'
          {"test":${{toJSON(steps.getLatestRelease.outputs.body)}}}
          EOF

Great! I'm glad you found a solution because the docs for GitHub's toJSON and fromJSON aren't completely clear.
So, I'm closing the issue


Improvement: HTTP Status Codes panel over time like Time Distribution panel

Good morning @allinurl.
I believe that it already mentioned here.
Also, this idea can be used to generic fields -- which has also been cited.
I.E for generic fields to have graphic like HTTP Status Codes panel or Time Distribution panel --- over time.
Well.. a idea is use HTTP Status Codes over time -- just for HITS, which is the most important info .
However I bilieve that implementation have some challenges:

show each status as individually into unique graphic -- with same option to hide when mouse over legend;
scale -- the quantities [HITS] of 200s and 300s will be much bigger of 400s and 500s;

For scale I think about:

logarithmic -- already cited here.
two diferents -- on the rigth: for 200s e 300s -- on the left: for 400s e 500s;

Well... I believe this is enough for the initial draft.

Just so I understand, could this be achieved when #117 gets implemented so that when filtering by specific status code, it will update the time distribution panel? e.g., filter by status code = 500 --> it will update all panels matching the 500 filter criteria, including time distribution.

Hi @allinurl .
I think that just OK, for a simple verification.
What I proposed above is a little more complex.
This would allow you to compare requests with errors vs good requests.
However, I agree that it may be that it is important only to me.

... which makes me think about ...
Would it be possible to add a custom graphic/panel, either of the quantity type or over time type, at compilation time?
Through a script that would adjust configuration and necessary code.
I know ... it would involve a lot of work, including generating addition to the HASH table.
... It was just a crazy idea.


Not working on the latest version

Current version:

commit texts are not applied to the msg box:

Nothing here after clicking on the "OK" button:

I have reproduced this problem and it will be fixed in the next version
Thanks for your feedback


Bug fixes in PyMarvel library.

@gpennington I tweeted/emailed you about wanting to help keep this project maintained.

If anyone is reading this, the PyMarvel project has been abandoned. I've started my own library here which is suiting my needs and would be happy to work with anyone on it: https://github.com/rkuykendall/marvelous


Limit to only swipe left or right, not anywhere around the layout

Hey, great library, I must say. I was wondering though, is it possible to limit the swiping to only go left or right, but not freely around the layout?
In my case here, I have a page where I put this swipedeck at the top and other views (horizontal recyclerview etc) below it. So, swiping around freely isn't going to look nice as it would cut the swiping cards at the edge of another views. Plus, scrolling the page up and down is disturbed by the free swiping mechanism.

hey @aimanbaharum
Were you able to resolve this issue?
@aaronbond @shrewduser I love this lib would be happy to explore how we can get an enhanced version of same
Cordially,

Not yet. I just use the free swiping as of now. I was wondering if there is other lib that can do this instead of using Swipe-Deck, which is obviously specifically for "swiping freely".

yes... should be doable with an update. if you guys still want this i could add it to the new version
https://github.com/aaronbond/SwipeDeck2


Allow the Fast, Medium and Slow presets to disable the automatic image grid (tiling)

Firefox's AVIF decoder has a longstanding bug with not supporting AVIF image that use an image grid. An image grid is a sequence of smaller images (tiles) that the decoder combines to reconstruct the full image.
This plugin uses an image grid when saving at the Fast, Medium and Slow presets to keep AOM's encoding time and memory usage at a reasonable level, see #3 for the background on this decision.
The plugin currently uses the following values for the maximum image grid tile size at each preset, if a valid tile size is not found, the image will be will encoded as a single tile.

Encoder Preset
Max Tile Size

Fast
512

Medium
1280

Slow
1920

Very Slow
N/A

Currently the only workaround for compatibility with Firefox is to save the image using the Very Slow preset. This is probelematic because Very Slow also instructs AOM to use its slowest compression mode.
My proposal to fix this issue would be to add a checkbox to the plugin save UI that disables the automatic tiling for those presets when unchecked (or checked?). I am not sure what to call it,  Use Image Grid or Tile Image may be too technical, and Firefox compatibility is specific to a bug in one AVIF implementation.
The checkbox may also need a footnote explaining what it does.
Related to:
https://forums.getpaint.net/topic/124627-some-avifs-cannot-be-opened-in-firefox/
#23
#24

Personally I'm not a fan of adding options to work around bugs in other applications.
It seems like this significantly degrades the user experience because it prevents cancellation and progress reporting, so it probably shouldn't be worded in a way that potentially makes it enticing, e.g. "[x] Improved compression" (Does disabling tiling improve compression?)
I'm not sure there's a good way to succinctly phrase this checkbox in a user-friendly manner, so using a technical and accurate description may be the best route. Especially if it's something you can get more information on with a web search. Perhaps "[x] Enable tiling (recommended)" or "[x] Enable tiled encoding" and have it greyed out when Very Slow is chosen?
"AVIF tiled encoding" at least points someone down what looks like the right path when you search for it:

Personally I'm not a fan of adding options to work around bugs in other applications.

I agree. The degraded user experience is also a mark against this change.
Even if I added this option, tiled images would still be the plugin's default behavior. So it would not solve the Firefox compatibility issue unless the user opted-in to disabling tiling.
As far as I know, Firefox is one of the few browsers with this bug. A comment on that bug report indicates that Safari (or at least some versions of it) have the same issue.

It's also completely non-obvious that you'd use that checkbox to work around the Firefox issue.
My recommendation would be that if you can't find another reason to include the checkbox, then don't. Firefox needs to fix their bug(s). AVIF is a relatively new and high-profile format, folks are excited about it, there should be someone willing to go in and do this -- we're not talking about some bit-rotted code for handling TIFFs or DIBs that nobody understands anymore because it was written on punch cards

I don't have any other reason for adding the checkbox other than this Firefox bug. Mozilla has had that bug open for almost 4 years, I can only hope that they will eventually address it.
Adobe has not added native AVIF support to Photoshop, and they likely have way more resources than Mozilla does. When I wrote my Photoshop AVIF format plugin, I had no idea that people would still be relying on it nearly 4 years later.
I already recommended the use of libavif's CLI encoder in https://github.com/0xC0000054/pdn-avif/issues/24#issuecomment-1928684185. If people need to work around that Firefox bug they can use that tool, or use this plugin on Very Slow.


settings.json - nested keys are inconsistently honored

Version Info
Does this issue occur when all extensions are disabled?: Yes
Version: 1.80.1
Commit: 74f6148eb9ea00507ec113ec51c489d6ffb4b771
Date: 2023-07-12T17:22:25.257Z
Electron: 22.3.14
ElectronBuildId: 21893604
Chromium: 108.0.5359.215
Node.js: 16.17.1
V8: <IP_ADDRESS>-electron.0
OS: Linux x64 6.2.9-300.fc38.x86_64
Steps to Reproduce:
1. Add this to settings.json
{
    "editor": {
        "rulers": [2,3,6,7],
        "fontSize": 30,
        "fontFamily": "Arial"
    },

    "workbench": {
            "colorTheme": "Default High Contrast Light", //WARNING: BRIGHT
    }

    "files": {
        "simpleDialog":{
            "enable":true
        },
        "dialog":{
            "defaultPath":"/away"
        },
    },
}

2. Observe changes

The values will update in "Settings (UI)", and the editor's appearance / behavior will change

3. Use the syntax to change terminal.integrated.shellIntegration.decorationsEnabled:
// "terminal": {"integrated.shellIntegration.decorationsEnabled": "never"}, //doesn't work
// "terminal.integrated": {"shellIntegration.decorationsEnabled": "never"}, //doesn't work
// "terminal.integrated.shellIntegration": {"decorationsEnabled": "never"}, //doesn't work
// "terminal.integrated.shellIntegration.decorationsEnabled": "never"       //works

4. Verify that the second example doesn't work

The values do not update in "Settings (UI)", and the terminal's behavior does not change

Expected Behavior
Either:

Examples 1 and 2 both change the editor's settings, OR
Neither Examples 1 nor 2 change the editor's settings (accords with resolution to # 188624)

Instead,

The second example does not work, but the first example does

@sandy081 do we support handling nested settings like this?

No:

This is not supported in settings.json file. One has to provide a complete setting key.

see #188624 for full context

I think right now we do indeed just not support this, by inconsistent support I'm guessing you're referring to things like terminal.integrated.env.windows which takes an object, but that's different to breaking up the keys. I'll pass this over to @sandy081 again as the owner of settings to confirm whether we need any doc updates.

Here is the documentation for settings.json - https://code.visualstudio.com/docs/getstarted/settings#_settingsjson
Please take a look and let me know if it is not clear enough. Feel free to contribute to the documentation in this repo - https://github.com/microsoft/vscode-docs


How to generate the binary occlusion map in the paper？

I got  yellow images after setting mode=generate_fake_flow_occlusion.

https://github.com/ppliuboy/DDFlow/blob/master/utils.py#L83

This is not my trouble. I want to know how to convert occ_fw and occ_bw into the binary images as in the paper.

The output is already a binary image, with only 0 and 1. You can dirrectly save it.


Postal code using Java Script

Is your feature request related to a problem? Please describe.
Postal code application is used to search for all the locations that are having the postal code entered by the user. Here the user should enter the postal code in the given search box and click on search button , then all the areas/locations under the mentioned postal pin will be displayed.
Describe the solution you'd like
I would like to use an API for this purpose.

This project is already present in the repo
https://github.com/TusharKesarwani/Front-End-Projects/tree/main/Projects/Pincode checker


SEO Audit

I've noticed a few times when googling that old links from qiskit.org or IQP that no longer exist are showing up on the front page of the search results. I think we should do some sort SEO audit and see what we can do to de-prioritise old links and more highly prioritise high profile content. Also if there are just any general things we could be doing to improve our SEO that would be great. In the past we have been updating page metadata but I wonder if there's more we could be doing 🤔

related: https://github.com/Qiskit/documentation/issues/347#issue-1992669444

We've chatted with the SEO team and I don't think there's more we could be doing. It took some time for qiskit.org's old SEO to switch over, and we're still negatively impacted by how older versions were prioritized, but we're doing what we can to address that.
We now have automated checks to ensure our metadata meets standards for guides pages.


Stop combine admin enqueue JavaScript into one file or add ignore options

/gulpfile.babel.js
// Combine JavaScript into one file
The Wordpress can enqueue separate JavaScript files for the administrative panel
action wp_enqueue_scripts & action admin_enqueue_scripts  ( or customizer enqueue )
If I add such a file to src\assets\js\  folder, then it merges with the app.js
It is not necessary
See example in
twentyseventeen/functions.php
twentyseventeen/inc/customizer.php
https://developer.wordpress.org/reference/hooks/admin_enqueue_scripts/

@Makar I believe the latest version of FoundationPress combines js using webpack imports in /src/assets/js/app.js. It shouldn't be combining every file placed in /src/assets/js/, although it did in prior versions.
You can exclude or include files using the PATHS variable in config.yml.

@Makar my apologies, I misunderstood what you were saying at first. I thought you were talking about all JavaScript files. I see you mean the admin only js. Feel free to make a pull request regarding this.

I placed these files in a separate folder and registered the path to them

@MrAndreius I just did a test and this is not necessary to use separate folders. You can use the /src/assets/js/* folder and it will not automatically combine anything unless you import it in app.js.
It does, however, run the gulp tasks for javascript whenever you add or change a file in that directory, so maybe that is why you thought it was combining them. As you know, FP doesn't copy js files without tweaking. We could possibly set up a special admin directory inside of src/assets/js/ and modify the gulpfile to make it easier to add and enqueue admin scripts out of the box.

Yes, but!
individual files are not included in the import
this folder is ignored when copying
and the
.pipe(gulp.dest(PATHS.dist + '/assets/css'))
.pipe(gulp.dest(PATHS.dist + '/assets/js'));
.pipe(gulp.dest(PATHS.dist + '/assets/img'));
erases the dist folder and overwrites it
and it turns out that the files disappear if they are not put as described above

@MrAndreius @colin-marshall I'm not sure this is exactly what you mean, but I can see that there is no way without moving things around to enqueue scripts individually in the "src" folder as that during the build process the distribution folder is overwritten each time. So, I guess you would have to deploy the src folder and enqueue from there....?

After looking further into this, the best way to do it is to use Webpack. I'm new to Webpack so I can't give you specific instructions yet, but it basically goes like this:

Create an additional entry point file (like src/assets/js/admin.js)
Add the new entry point file to the webpack config file so it knows to process it.
Create your custom admin js as a module, for example src/assets/js/lib/my-admin-module.js
Import the module in the newly created entry point file
Enqueue the script

Then you should end up with an app.js and an admin.js in your dist folder and you don't need to modify the build system at all.

Unfortunately, I know even less about js

@MrAndreius I have looked into it now, and it's actually very easy to do:

Create new admin.js file in src/assets/js directory and add your code to it. If you're going to use jquery, make sure to add import $ from 'jquery'; at the top of the file.
In config.yml add src/assets/js/admin.js to PATHS.entries.
Enqueue the script in library/enqueue-scripts.php.
Run gulp

That's it. It gets more complicated if you want to break it out into separate modules for different js functionalities where you then import them through the src/assets/js/admin.js file, It's not mandatory to do that though, and it doesn't sound like you will be doing anything like that anyway.

@MrAndreius I'm closing this issue. If you still have trouble, feel free to reopen it.


Integrate new copy/data into Oil Sands Extraction product

The clients have provided updated text and data for the Oil Sands Extraction product. Integrate these changes in English and French.

Hey team! Please add your planning poker estimate with ZenHub @spencerwahl @yileifeng @RyanCoulsonCA


⚠ Bofrost.be has degraded performance

In 41d7187, Bofrost.be (https://www.bofrost.be) experienced degraded performance:

HTTP code: 200
Response time: 981 ms

Resolved: Bofrost.be performance has improved in c7964cf.


Add callback for transforming unhandled binding parameters

@noteflakes Thanks for inviting me as collaborator. Still, I'd like to get your feedback before I merge something like this PR. Happy to make changes to it. I still need to write tests for prepared statements and update the README.
This will make it easier to bind values like Date or Time by supplying a block that gets executed when you are trying to bind an unhandled parameter type.
require "date"
require "time"

db = Extralite::Database.new(':memory:')
db.on_unhandled_parameter = ->(value) do
  case value
  when Date
    value.iso8601
  when Time
    value.utc.iso8601
  else
    raise "don't know how to handle #{value.class}"
  end
end

db.query_single_value('select ?', Date.new(2023, 12, 24))
db.query_single_value('select ?', Time.new(2023, 12, 24, 20, 30, 0, '+02:00'))

The only thing I'm not clear about is the nested flag. What is its purpose?

The nested flag is a breaking change. Currently it's possible to bind named parameters from nested hashes.
The following works because it binds y and z from the nested hash.
db.query('SELECT :x AS x, :y AS y, :z AS z', { x: 1, more: { y: 2, z: 3 } })
# => [{ x: 1, y: 2, z: 3 }]

I think that's an unexpected and undocumented behavior. I'd prefer if the previous code raises an error because it can't bind the more key. It would be better if developers could define how nested objects are bound.
For example, the following code would bind more as JSON string.
db.on_unhandled_parameter = ->(value) do
  case value
  when Hash
    value.to_json
  else
    raise "don't know how to handle #{value.class}"
  end
end

db.query('SELECT :x AS x, :more AS more', { x: 1, more: { y: 2, z: 3 } })
# => [{ x: 1, more: '{"y":2,"z":3}' }]

The original behavior can still be achieved by slightly changing how parameters are supplied.
db.query('SELECT :x AS x, :y AS y, :z AS z', { x: 1 }, { y: 2, z: 3 })
# => [{ x: 1, y: 2, z: 3 }]

db.query('SELECT :x AS x, :y AS y, :z AS z', { x: 1, y: 2, z: 3 })
# => [{ x: 1, y: 2, z: 3 }]

If we don't want this to be a breaking change, then I guess we could allow binding of nested objects (hash, struct) unless  a on_unhandled_parameter block is supplied.
What do you think?

I think that's an unexpected and undocumented behavior. I'd prefer if the previous code raises an error because it can't bind the more key. It would be better if developers could define how nested objects are bound.

Indeed that's an unintended behaviour.

For example, the following code would bind more as JSON string.
...
db.query('SELECT :x AS x, :more AS more', { x: 1, more: { y: 2, z: 3 } })
=> [{ x: 1, more: '{"y":2,"z":3}' }]

Personally I prefer being more explicit at the callsite, i.e. not using on_unhandled_parameter:
> db.query('SELECT :x AS x, :more AS more', { x: 1, more: { y: 2, z: 3 }.to_json })
> # => [{ x: 1, more: '{"y":2,"z":3}' }]

The original behavior can still be achieved by slightly changing how parameters are supplied.

I don't mind breaking the behaviour for nested hashes.

Thinking about it some more, I think it would be beneficial if we came up with more use cases. The JSON one is to me not so interesting, as it can be done very easily at the callsite (see my previous comment).
I think a more interesting use case is where you use a custom object to supply parameters, for example an ORM instance:
foo_instance = Foo.new(x: 1, y: 2, z: 3)
db.query('insert into foo values (:x, :y, :z)', foo_instance)

To make this possible we can do one of the following:

Keep your approach:

db.on_unhandled_parameter { |v| v.is_a?(Foo) ? foo.values : (raise "Invalid parameter") }

Automatically call #to_h on the object:

class Foo
  def to_h
    @values
  end
end

The first approach is more flexible. The second approach is simpler and relies on a well-known standard Ruby API that should already exist on container objects. There's pros and cons for each approach. But maybe before deciding which approach is better for us we should come up with more use cases. What do you think?

My main use case are Date and Time objects as shown in my PR description. Currently I have many places were data is generated and I don't want format the dates and times as strings in all those places. The requirement to convert them into a different data type (TEXT, INTEGER or REAL) seems like an implementation detail that should be hidden from the caller. So, my choices are to either add an intermediate layer that does the transformation or to transform the values when the parameters are bound. I prefer the latter.
Calling to_h on objects that implement it seems like a good default.

Calling to_h on objects that implement it seems like a good default.

I'm working on code to do that. Will push momentarily.

I've also added tests for nested hashes and structs, which at the moment fail, as they expect a ParameterError to be raised.

Thanks for your feedback and your code. I'll have a closer look tomorrow.

I think the main problem here is that if you pass a hash as a parameter, it can be interpreted as either an object that needs to be transformed in order to be used as a positional parameter, or as a set of named parameters:
hash = { foo: 1, bar: 2 }
db.query('select ?', hash) # hash should be converted using unhandled_parameter_proc
db.query('select :foo, :bar', hash) # hash treated as bunch of named parameters

In order to remove this ambiguity, we can do a simple heuristic where we scan the sql for ?, which means that parameters are treated as positional. Otherwise they are treated as named. Then again, this introduces a certain complexity and may lead to subtle bugs for users of the library that will be hard to understand.
Here's an idea that might solve the problems we're encountering with this PR:
Add a way to transform all parameters
Instead of transforming just the parameters Extralite doesn't recognize, provide an API to transform all of them:
db.parameter_transform do |v|
  case v
  when Time
    v.to_i
  when Hash
    v.to_json
  else
    v
  end
end

This proc is then fed whatever is passed to Database#query:
db.query_single_value('select ?', Time.now) #=><PHONE_NUMBER>
db.query_single_value('select ?', foo: 1) #=> '{ "foo": 1 }'
db.query_single_value('select ?', 'foo') #=> 'foo'

When defined, the result of the parameter_transform proc is bound normally as is done now, including support for hashes for expressing named parameters. Note that in the example above you can't use named parameters, since the given hash is always transformed to JSON:
db.query_single_value('select :foo', foo: 1) #=> '{ "foo": 1 }'

But the following is possible:
db.parameter_transform do |v|
  case v
  when Time
    v.to_i
  else
    v # if a hash is returned it is interpreted as a set of named parameters
  end
end

db.query_single_value('select ?', Time.now) #=><PHONE_NUMBER>
db.query_single_value('select :foo', foo: 1) #=> 1

Some possible solutions to mixing together named parameters and transforming hashes to JSON:

Explicitly use hash.to_json when providing it as a parameter.
Somehow tag the hash, then transform only tagged hashes using #parameter_transform.
Subclass hash and transform that using #parameter_transform.

I know this is not ideal either, but it seems to me a much simpler solution that has a more consistent behaviour. I'll try to put together a separate PR for this idea.

I'm closing this. It's not worth the trouble and complexity. I'm probably going to implement it in a lightweight DB layer for my usecase. The less complex alternative in https://github.com/digital-fabric/extralite/pull/45 adds a performance penaltiy to every parameter binding which is even worse for performance.