Building wheels for Windows

I have been looking a bit into the option to use vcpkg to get the GDAL binaries necessary for wheel building, and then combined with cibuildwheel for the wheel building automation.
Vcpkg is a "cross-platform C/C++ package manager" (using installation from source not providing binaries), and provides a recipe or "port" for GDAL: https://vcpkg.info/port/gdal (which allows you to install GDAL from source on windows with a basic vcpkg install gdal).
In Apache Arrow, we are also using it for building the wheels (and pyarrow also has a notoriously complex wheel, similar to requiring GDAL), and so in principle we could also use it for the other platforms (linux, mac) as well, and not just for windows (I just started with windows, since for the other platforms we could in principle start with mimicking fiona's wheel building infrastructure).
I suppose there are also other options for building wheels on Windows, by getting the binaries from elsewhere (eg https://www.gisinternals.com/, https://github.com/gisinternals/buildsystem/tree/refactor). But I also don't have any idea how easy that would be compared to vcpkg (which has the potential to give us a somewhat consistent build setup for all platforms).

Yesterday, I finally had some first success while trying out this workflow on a local windows machine. See my branch at https://github.com/jorisvandenbossche/pyogrio/tree/cibuildwheel-windows.
I managed to create a wheel, that seems to work, with the following steps:

Install vcpkg (basically cloning their repo, see https://vcpkg.io/en/getting-started.html)
Run vcpkg install gdal[core]:x64-windows to install the minimal gdal build

In addition to the basic Visual Studio Build Tools that I already had installed here, I needed to enable "Visual C++ ATL" in my install  as well (to fix a "Cannot open include file: 'atlbase.h': No such file or directory" error while building gdal)

Add some cibuildwheel configuration to pyproject.toml for building wheels on windows: see https://github.com/jorisvandenbossche/pyogrio/blob/2cb3362ce4e0ad1377223aed122ef9262c6c88c2/pyproject.toml#L10-L24 (setting up the environment variables, specifying the wheel repair command)
In a clean python env, install pip install cibuildwheel
Run cibuildwheel --platform windows
Celebrate! :)

With this, I created a single wheel for Python 3.9:
pyogrio-0.3.0+18.gefdca6d.dirty-cp39-cp39-win_amd64.zip
I needed to rename it to allow it to upload to this issue, so for testing it, you can download it, rename it and install it with pip:
rename "pyogrio-0.3.0+18.gefdca6d.dirty-cp39-cp39-win_amd64.zip" "pyogrio-0.3.0+18.gefdca6d.dirty-cp39-cp39-win_amd64.whl"
pip install pyogrio-0.3.0+18.gefdca6d.dirty-cp39-cp39-win_amd64.whl

From a quick test (installing it in a clean env), this seems to work, I was able to read a zipped shapefile! (a cautious :tada:)
For someone with a Windows machine, please test this wheel

Next steps
What I did locally, as described above, should in principle all be doable in CI using github actions as well. So the next step is trying to do that:

Ensure vcpkg is available/installed in github actions (it might be that is already available for windows hosts)
Install gdal

A potential challenge here is that building it with vcpkg install gdal[core] takes quite a long time (even with the [core]), with the risk of timing out. So we will also certainly need to cache the built results, but for that of course need an initial successful build.
It seems that it is building both a release and debug build with vcpkg install. I didn't directly find a way to only get the release build (which should speed things up), xref https://github.com/microsoft/vcpkg/issues/10683.
The issue seems to indicate that it is possible to set the build type to "release" when using cmake to build your package and its (vcpkg) dependencies. In this area, it might be an interesting option to explore switching from setuptools to scikit-build (which uses cmake) to build the C extensions of pyogrio itself.

Set up the correct environment variables to find GDAL
Run cibuildwheel in github actions (example from shapely: https://github.com/shapely/shapely/blob/main/.github/workflows/release.yml)

Help here would be very much appreciated!

Yay! It works flawlessly on my machine in a fresh conda env with geopandas-base (no other GDAL installed). Thanks a lot for looking into this! Having Windows wheels for IO would significantly ease the installation pain for many users.

A potential challenge here is that building it with vcpkg install gdal[core] takes quite a long time (even with the [core]), with the risk of timing out

How long does it take? The GHA docs say that

Each job in a workflow can run for up to 6 hours of execution time

It should not take longer that that. I think that we need to manually set higher timeout in the workflow but I guess we'll fit in 6 hours.

Yeah, 6 hours should be enough :) (on my machine, it took more than an hour)

One thing I realized is that the current wheel is missing is the "gdal data" and "proj data" (the Fiona wheel contains this in the fiona package, in addition to Fiona.libs folder with binaries).
I find it strange that this doesn't give an error, though, when reading a file (since that already accesses a CRS).

I don't know if the gdal / proj data are used to encode / decode CRS from the underyling driver to CRS WKT.

I was assuming that it would need that, at least for eg OSRExportToWkt (since not every file format stores it as WKT, and this function interacts with PROJ). But we also only use OSRExportToWkt if there is no authority/code combo. So maybe the quick tests we did didn't run into that.

Doing a first attempt to put this in a github actions workflow -> https://github.com/geopandas/pyogrio/pull/49 (and it only took less than an hour to build gdal core! and it gets cached after the first time).
On my fork, I already got up to running the tests, and I see several ERROR 1: PROJ: proj_identify: Cannot find proj.db logs. So I think this is an indication that we will need to add some "data path" handling to pyogrio for wheels .. (in the line of what fiona is doing at https://github.com/Toblerity/Fiona/blob/9c8fe736d4381526905c6976c399a33d10e3ecbf/fiona/_env.pyx#L269-L449)

If people want to test the latest version of the wheels, you can download the archive with wheels from https://github.com/geopandas/pyogrio/suites/5620607087/artifacts/183019252.
Unpack that, and then pip install path/to/unpacked/archive/pyogrio-....whl using the exact wheel name matching your python version.

This has been completed for 0.4.0

@jorisvandenbossche The link to the archive with wheels is not working. Could you tell me the right link? I'm looking for the gdal 3.5.3 wheel for windows. Thank you.

If people want to test the latest version of the wheels, you can download the archive with wheels from https://github.com/geopandas/pyogrio/suites/5620607087/artifacts/183019252. Unpack that, and then pip install path/to/unpacked/archive/pyogrio-....whl using the exact wheel name matching your python version.

@RitaAguiarAdsk We haven't yet released wheels with 3.5.x to pypi; sorry about that.
I just triggered a fresh build of the release workflow, which regenerated Windows wheels here: https://github.com/geopandas/pyogrio/actions/runs/3576011156


Pylance client: couldn't create connection to server error

I'm reopening this as a new issue since the earlier one was closed without being resolved.
Environment data

Language Server version: v2023.6.10
OS and version: Linux Mint 21.1 Cinnamon. Kernel: 5.15.0-72-generic
Python version: Python 3.9.0  via PyEnv.

Repro Steps
Install PyLance in VS Code 1.78.2. Restart the computer and open VS Code. When the IDE opens, the error is shown as visible in the screenshot below.
Expected behavior
No error should be shown.
Actual behavior

Logs
I didn't see any log. If you'd like me to provide a log, please mention how I can find it. I did however, find some output:
2023-06-11 00:12:37.958 [info] [Info  - 00:12:37] (21519) Pylance language server 2023.6.10 (pyright 7784093a) starting
2023-06-11 00:12:37.959 [info] [Info  - 00:12:37] (21519) Server root directory: /home/nav/.vscode/extensions/ms-python.vscode-pylance-2023.6.10/dist
2023-06-11 00:12:37.959 [info] [Info  - 00:12:37] (21518) Pylance language server 2023.6.10 (pyright 7784093a) starting
2023-06-11 00:12:37.959 [info] [Info  - 00:12:37] (21519) Starting service instance "myprog"
2023-06-11 00:12:37.959 [info] [Info  - 00:12:37] (21518) Server root directory: /home/nav/.vscode/extensions/ms-python.vscode-pylance-2023.6.10/dist
2023-06-11 00:12:37.964 [info] [Info  - 00:12:37] (21518) Starting service instance "myprog"
2023-06-11 00:12:37.967 [info] [Error - 00:12:37] Server initialization failed.
2023-06-11 00:12:37.967 [info] Error: command 'pyright.createtypestub' already exists
	at e.ExtHostCommands.registerCommand (/usr/share/code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:98:123788)
	at Object.registerCommand (/usr/share/code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:116:23226)
	at t.ExecuteCommandFeature.register (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2106221)
	at t.ExecuteCommandFeature.initialize (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2105800)
	at S.initializeFeatures (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2057711)
	at S.doInitialize (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2045260)
	at async S.start (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2042275)
	at async h.start (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:37203)
2023-06-11 00:12:37.967 [info] [Error - 00:12:37] Pylance client: couldn't create connection to server.
2023-06-11 00:12:37.967 [info] Error: command 'pyright.createtypestub' already exists
	at e.ExtHostCommands.registerCommand (/usr/share/code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:98:123788)
	at Object.registerCommand (/usr/share/code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:116:23226)
	at t.ExecuteCommandFeature.register (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2106221)
	at t.ExecuteCommandFeature.initialize (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2105800)
	at S.initializeFeatures (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2057711)
	at S.doInitialize (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2045260)
	at async S.start (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2042275)
	at async h.start (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:37203)
2023-06-11 00:12:37.967 [info] [Error - 00:12:37] Sending notification textDocument/didOpen failed.
2023-06-11 00:12:37.967 [info] Error: command 'pyright.createtypestub' already exists
	at e.ExtHostCommands.registerCommand (/usr/share/code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:98:123788)
	at Object.registerCommand (/usr/share/code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:116:23226)
	at t.ExecuteCommandFeature.register (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2106221)
	at t.ExecuteCommandFeature.initialize (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2105800)
	at S.initializeFeatures (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2057711)
	at S.doInitialize (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2045260)
	at async S.start (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2042275)
	at async h.start (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:37203)
2023-06-11 00:12:37.969 [info] [Error - 00:12:37] Sending document notification textDocument/didOpen failed
2023-06-11 00:12:37.969 [info] Error: command 'pyright.createtypestub' already exists
	at e.ExtHostCommands.registerCommand (/usr/share/code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:98:123788)
	at Object.registerCommand (/usr/share/code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:116:23226)
	at t.ExecuteCommandFeature.register (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2106221)
	at t.ExecuteCommandFeature.initialize (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2105800)
	at S.initializeFeatures (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2057711)
	at S.doInitialize (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2045260)
	at async S.start (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:2042275)
	at async h.start (/home/nav/.vscode/extensions/ms-python.python-2023.8.0/out/client/extension.js:2:37203)
2023-06-11 00:12:37.980 [info] [Info  - 00:12:37] (21519) Setting pythonPath for service "myprog": "/home/nav/.pyenv/versions/3.9.0/bin/python"
2023-06-11 00:12:38.003 [info] [Info  - 00:12:38] (21519) Assuming Python version 3.9
2023-06-11 00:12:38.080 [info] [Info  - 00:12:38] (21519) Found 20 source files
2023-06-11 00:12:38.339 [info] [Info  - 00:12:38] (21519) Background analysis(1) root directory: /home/nav/.vscode/extensions/ms-python.vscode-pylance-2023.6.10/dist
2023-06-11 00:12:38.339 [info] [Info  - 00:12:38] (21519) Background analysis(1) started
2023-06-11 00:12:38.370 [info] [Info  - 00:12:38] (21519) Indexer background runner(2) root directory: /home/nav/.vscode/extensions/ms-python.vscode-pylance-2023.6.10/dist (index)
2023-06-11 00:12:38.370 [info] [Info  - 00:12:38] (21519) Indexing(2) started
2023-06-11 00:12:38.832 [info] [Info  - 00:12:38] (21519) scanned(2) 102 files over 1 exec env
2023-06-11 00:12:40.728 [info] [Info  - 00:12:40] (21519) indexed(2) 65 files over 1 exec env
2023-06-11 00:12:40.738 [info] [Info  - 00:12:40] (21519) Indexing finished(2).

I just encountered this as well, switched to the pre-release versions of the ms python and pylance extensions and that appears to have resolved it . . . knock on wood.

I have associated two computers with my account (A: Intel CPU (macOS), B: Apple M2), and I have enabled automatic synchronization. I experience this issue on computer A, but not on computer B. (Previously, I had one account associated with two Intel CPU machines (macOS), and I did not encounter any issues.)

did you have the pryight extension installed as well?

I did not have any pryight extension installed. As navels suggested, switching to the pre-release version solved it. Anyway, I now have VS code 1.80.1 and pylance v2023.7.30, and didn't encounter any issue.


Update Vite guide example link

not sure if this is the correct example to link to, but from the list of apps this one seems to be the correct one :)

thank you


[WIP] basic shell

we need to remove the makefile header

Everything is okay for me.
Maybe we should discuss about global var and singletons implementations... ?

Yes we should!
See you tomorrow


Bump sigs.k8s.io/controller-runtime from 0.14.6 to 0.15.0

Bumps sigs.k8s.io/controller-runtime from 0.14.6 to 0.15.0.

@vladimirvivien need an LGTM again.. There was one more test that needed cleanup


fix capitalization of 'Docker' in example commands

This PR fixes the capitalization of "Docker" in example commands where it should be docker not Docker

my fault for trusting find & replace !!


Fix configuration sample

@danroth27 for 1.0.0 show this be based on master or dev branch?

@troydai  master


Text block error

Problem description
Text blocks are not parsed properly when they contain quotes.
"""
"foo"
""";

Expected parse tree output (optional)
(program [0, 0] - [3, 0]
  (expression_statement [0, 0] - [2, 4]
    (text_block [0, 0] - [2, 3])))

Actual parse tree output (optional)
(program [0, 0] - [3, 0]
  (ERROR [0, 0] - [2, 4]
    (string_literal [0, 0] - [0, 2])
    (ERROR [0, 2] - [0, 3])
    (string_literal [1, 0] - [1, 5])
    (string_literal [2, 0] - [2, 2])
    (ERROR [2, 2] - [2, 4])))

Text blocks are not parsed properly even when they don't contain quotes:
public interface I {
  String s =
      """
          l1
          l2""";
}

Tree:
program [0, 0] - [6, 0]
  ERROR [0, 0] - [5, 1]
    modifiers [0, 0] - [0, 6]
    identifier [0, 17] - [0, 18]
    type_identifier [1, 2] - [1, 8]
    variable_declarator [1, 9] - [4, 14]
      name: identifier [1, 9] - [1, 10]
      ERROR [2, 6] - [4, 12]
        string_literal [2, 6] - [2, 8]
        ERROR [2, 8] - [2, 9]
        type_identifier [3, 10] - [3, 12]
        identifier [4, 10] - [4, 12]
      value: string_literal [4, 12] - [4, 14]
    ERROR [4, 14] - [4, 16]

Seems fixed now


Use buckets to distribute dSeeds and planted bonus alongside harvest

Feature
Deferred Seeds  (dSeeds) are Seeds held by the escrow contract which are triggered by the Go Live event.
Each user can have between 0-N locks and there may be locks held by non-Seeds users as well. Each lock has an amount of dSeeds and a beneficiary. We will only consider locks with the "golive" event trigger - we ignore all other locks, they are not by definition dSeeds.
Currently once the golive event is triggered by the DHO - the dao.hypha contract - all dSeeds would be paid out to their beneficiaries.
What we want to do instead is to pay them out with the harvest over time.
Spec
Some of this spec is a sample implementation - use as a guideline as to what it's supposed to do, but if there's something missing, or there's a better implementation, feel free to do that.
Harvest changes
while dSeeds > 0, 50% of the harvest is paid out to dSeeds, the rest is paid out as usual.
escrow changes
ACTION golive
migrates all golive locks to dseeds bucket contract
iterates over all locks with deferred transactions
On each lock
calls migratelock(user, quantity) on bucket contract
transfers quantity of seeds to bucket contract
deletes lock
dSeeds contract (or table inside an existing contract like escrow or harvest)
ACTION migratelock(user, quantity)
called from escrow
consolidates holdings of users, e.g. each user ends up with a single number of Seeds to be paid out to them
calculates the total number of Seeds remaining to be paid out (sum), stores it in a sizes table
ACTION payout(asset quantity)
pays out a total of quantity
iterates over all table entries, calculating the % of total outstanding for each user, e.g. perc = user_seeds / total_seeds_to_be_paid_out. Total seeds to be paid out is the sum of all user table entries.
calculate amount to be paid out: amount = min(user_seeds, perc * quantity)
subtract amount: user_seeds = user_seeds - amount
transfer amount in Seeds -> user
uses deferred action to iterate over all users
at the last user, updates the total: new total = old total - quantity, so total needing to be paid out is decreased.
Planted Bonus
The same apples for planted bonus.
This should be a separate ticket. But the idea is that we have a 30% planted bonus which should be paid out to people who planted in the exact same way. @Rieki7 not sure this planted bonus could be mixed in with the dSeeds (just added to the dSeeds balances). That's probably the easiest way then we only have to call the migrate lock action from the harvest contract, going over planted scores. Or even just from the dSeeds bucket contract, accessing planted scores at a certain date.

Just to confirm if I understood:
Currently in the escrow contract, if you want to create a lock for a certain beneficiary, you have to transfer the Seeds to the escrow contract so you become a sponsor and then you can create a lock, holding those Seeds so they can be claimed by the beneficiary.
The idea, is that locks that are triggered by go live doesn't use the sponsor's balance, instead once the go-live event is triggered, these locks' amounts will be summed up so the beneficiary has a bucket in the dSeeds contract like a promissory note that will be paid out through the harvest.
Depending on the percentage of total amount to be paid out in the dSeeds contract a user has, it is the amount of the harvest the user will receive on their buckets.
Whenever the user want's, she can withdraw her accumulated amount of Seeds.
Is that correct?
I also have another question:

When you say 50% of the harvest, does it mean the 50% of the whole harvest? so for example, there are 4 mayor buckets: orgs, users, regions and dho, then this means while dSeeds > 0, the 50% of the harvest will be designated to those 4 buckets and the other 50% is for paying the dSeeds

Just to confirm if I understood:
Currently in the escrow contract, if you want to create a lock for a certain beneficiary, you have to transfer the Seeds to the escrow contract so you become a sponsor and then you can create a lock, holding those Seeds so they can be claimed by the beneficiary.
The idea, is that locks that are triggered by go live doesn't use the sponsor's balance, instead once the go-live event is triggered, these locks' amounts will be summed up so the beneficiary has a bucket in the dSeeds contract like a promissory note that will be paid out through the harvest.

I would suggest to actually transfer the Seeds to the bucket holding contract which is a different kind of specialized escrow contract that actually pays out with the harvest.
This way we keep the escrow contract clean.

Depending on the percentage of total amount to be paid out in the dSeeds contract a user has, it is the amount of the harvest the user will receive on their buckets.

I don't think users should have buckets, just the one bucket of paying out Seeds according to percentage distributions.

Whenever the user want's, she can withdraw her accumulated amount of Seeds.

I think the Seeds can just be sent to the user, rather than keeping a balance of how much they're entitled to withdraw?
That's 2 different ways to do it.
Let's say the new contract is called he.seeds for harvest escrow .seeds
In my proposed solution, on golive, all go live locks Seeds are transferred to he.seeds
all go live balances are entered into he.seeds so we know who is entitled to how much
Then there's a harvest function call that has only the value of total seeds to be distributed according to the harvest
So let's say the total to-be-minted seeds for a harvest would be 1000 seeds
Then we only mint 500 and distribute according to the normal buckets, and we call the he.seeds with the value 500, so it will go and distribute 500 of the seeds it is already holding, to the beneficiaries, according to their % of the total.
So that's what I was proposing
In your wording, it sounds more like in escrow.seeds the balances are accumulated so each user has only 1 lock, then same thing we figure out the total and can calculate each user's % of the total, and unlock a certain amount - the amount unlocked would be stored in a separate balance table I suppose?
Not sure which approach is better, mine seemed straightforward to me, but maybe there's something I'm missing.

Is that correct?
I also have another question:

When you say 50% of the harvest, does it mean the 50% of the whole harvest? so for example, there are 4 mayor buckets: orgs, users, regions and dho, then this means while dSeeds > 0, the 50% of the harvest will be designated to those 4 buckets and the other 50% is for paying the dSeeds

Exactly.
We would figure out the number to mint, but then only mint 50% and let the contract pay out the other 50% - move them from locked to unlocked in some fashion, see above

Hello @n13, then can you confirm this: the dSeeds contract is all about paying out the Seeds held by the escrow contract at the same time the harvest is distributed, so the dSeeds will be paid out hourly right?, because this is the frequency the harvest is distributed.

Hello, I have another question:

Using your example above, let's say the harvest would be 1000 seeds, then 500 seeds will be paid out normally, but those 500 seeds are for the four buckets? so will they be for orgs, users, regions and dho?, so it means that meanwhile dSeeds > 0 the orgs, users, regions and dho will receive 50% less harvest?, unless some account had a percentage in the he.seeds contract because then that account will receive more seeds equivalent to min(user_seeds, perc * quantity), quantity = 500 in this example

Yes, exactly. The idea is that initially the harvest is used to pay out dSeeds in a non-invasive manner - with the harvest.
So everyone else will be getting less!

I am confirming this with Rieki...

Ok had an idea we actually just need 2 actions, ontransfer(from, to, amount, memo) and payout(asset amount)
Then we can use ontransfer for any incoming transfer, doesn't matter, it makes it all so simple
pool.seeds contract
ontransfer() - triggered by incoming SEEDS transfer, memo contains beneficiary Seeds (or Telos) account

parses memo to find beneficiary
adds to balance of beneficiary in balances table
adds amount to total amount - sizes table for example "total"

payout() - as before takes total and runs through balances table to figure out payouts
So pool.seeds only has these 2 methods
On escrow goLive, for each lock, we call transfer with the beneficiary in the memo, adds it to the pool
That's it!
Then when we get more goLove escrow Seeds, we also transfer them on to the pool the same way, so new bonuses that are paid out are simply added to the pool.
This was very complex in my mind but like that it's actually simple, I think


[BOW-XXX] Retry processing failed media

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

Comparison is base (df08896) 15.38% compared to head (f73c428) 15.38%.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #159   +/-   ##
=======================================
  Coverage   15.38%   15.38%
=======================================
  Files           5        5
  Lines        1001     1001
  Branches        2        2
=======================================
  Hits          154      154
  Misses        847      847

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


Kitty's background_opacity not working as expected

Please, read the bug report here:
https://github.com/kovidgoyal/kitty/issues/6815

Most likely you have blur enabled with brightness/contrast settings set high.
or #3787

I have blur disabled.
Also, you did not achieve to reproduce the bug, my bad for not explaining it:
Steps to reproduce:

Disable Hyprland's transparency and blur for kitty.
Use the attached wallpaper. Reason: not every wallpaper triggers a big contrast change, it depends on the colors. The colors of the girl in the attached wallpaper triggers a big contrast change.
Set kitty's background_opacity to 0.1 . Reason: if you set a lower value, you can not perceive the contrast change.

Worth noting is that Alacritty does not trigger this bug. Kitty's developer is confident that this is not kitty's doing, so something is up here.

what if you disable decoration:blur:vibrancy? (set to 0)

Same thing.

What, there is another step I did not mention to reproduce it:
4. Choose a light kitty theme. For example this one:
kitty +kitten themes GitHub Light

Wait a minute. With dark themes there is no problem at all. The problem is only reproducible with kitty light themes.

I have tried with sway and Plasma wayland and the same problem arises. This is on kitty for sure.
Thanks.


Update README.md

Adding example when Proffer needs to generate/cleanup thumbnails from tables used by plugins.

Thanks for the contribution, but it seems that there are conflicts. Perhaps try updating your branch from the upstream develop.

Ok... I will review. Thanks


Need svg icons used in share tray panel on calling screen

Feature Request
We need a couple of icons that are needed for share tray in the calling screen -

Problem description
The corresponding icons in the teams app are
icons-call-control-present.html
icons-powerpoint-color.html
Proposed solution
We need to port these icons to stardust
MVP

These are now in the build


Piskel art erased after being saved?

)
I've used piskel to make multiple sprites, but when i logged in two of my sprites wouldnt let me edit them (still won't) . only 2 out of the 20 or so i have, it shows the sprite with all my other ones, i click view sprite and its still there, then i click edit sprite and its blank.
(this template is intended for bug reports, erase it when requesting features/enhancements)
Steps to reproduce the bug

go to piskelapp.com
select a tool
...

Environment details

operating system: Windows 10
browser (or offline application version): browser

Sprite details

number of frames: 1 each
sprite resolution: 64x64 and 128x128
session duration: none

Feel free to include a screenshot of the bug, a .piskel file of the sprite or anything else that can help us investigate.

@juliandescottes thank you very much, so happy you were able to save them!


Fix: github action running twice for a PR

Issue
Link to the ticket: Github action should run once (currently running twice) on a PR - Issue#202
Solution Implemented

Removed the push condition from .github/workflows/test.yml file.
It now runs the GitHub action only once instead of running it twice on a PR.

Screenshot of the problem

Screenshot after fixing the problem

This PR closes the issue: https://github.com/Real-Dev-Squad/website-dashboard/issues/202


[FEATURE REQUEST] Customize the Generated Payload

**Is your feature request related to a problem?  No
Can't it be tackled using specification extensions?
No
Describe the solution you'd like
To allow a "example:" tag inside of the definition of the properties. The value associated to the "example" tag is the one that will be rendered in the "automatically generated  payload" for those properties that do not have a "default" value. Notice that you can decide that there is no default value for a schema but however, you want to provide a complete example of such schema to the reader of the documentation. This is where the "example" (or any other better name) could help.
Describe alternatives you've considered
Read documentation and no alternatives foreseen.
Additional context
N/A

Hi @jmalcaraz. I transferred this issue to the generator package since it's a tooling feature request. The spec already allows you to add examples on every field. If I recall correctly, the Markdown template already has this feature. Do you need it in the HTML documentation?

Thanks for the quick anwser. Apologize I have found the functionality right now. I has been a mistake form my side. "example:" is already supported. Thanks a lot! Great work you are doing!

Thank you! You may want to join the Slack channel for quick questions and answers: https://join.slack.com/t/asyncapi/shared_invite/enQtNDY3MzI0NjU5OTQyLWU4ZGU2MTg1MDIyZDFjMTI2YjkxYTdlMzc1NjgzYTAxZDM1YTg1NDhhMTE2NDliMjlhZjYxNzk0ZTE5ZGU1ZTg.


Rebrand to "App Store Connect" from "iTunes Connect"

It took me a minute to find this step due to the name. This step could be more discoverable if it was to use the same terms as Apple - namely, they rebranded iTunes Connect to App Store Connect. This would be especially helpful for newer folks unfamiliar with the former name.

Hi @hkellaway!
Thank you for raising this thread despite our awfully long delay in addressing it.
This is true, the reason we have not done this so far is that we've felt this could be just as confusing to older folks, only familiar with the former name and could cause some people difficulty locating the step.
That said we're looking into making this in the near future, in a way that's as clear as possible to everyone.

gotcha - thanks for elaborating

Simple to solve: Deploy to AppStore/iTunes Connect 😄


WIP: Retrieve bound images when staging new image

This is just a PoC using quadlet/systemd to pull "lifecycle" bound images.
I have a bootc image pushed to quay.io/ckyrouac/bootc-lldb-bound:latest for testing. Any custom bootc image with quadlet image files located in /etc/containers/systemd/bootc should work.
Steps for testing:

Build a container image with these changes and start a VM: https://github.com/containers/bootc/blob/main/HACKING.md#creating-your-edit-compile-debug-cycle
sudo bootc switch quay.io/ckyrouac/bootc-lldb-bound:latest
Validate the quay.io/ckyrouac/bootc-lldb image was pulled via sudo podman images
Validate the new image is staged via sudo bootc status

How do we deal with the following scenario?
The new image ships with a new authfile and the .image files reference both, authfiles on the old image and the new image.

The new image ships with a new authfile and the .image files reference both, authfiles on the old image and the new image.

To be clear this is a specific instance of the general question of what happens between overlap/conflict between options in the old and new .image file right? e.g. they could also conflict on CertDir or even the arbitrary PodmanArgs.
Or actually the most obvious conflict: what happens when the .image file references an image by digest (a valid thing to do!), and the digests are different? We must handle this scenario.
One approach would be to change quadlet to support generating unique names for the units (a simple approach is to hash the input, i.e. we end up with 2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae-image.service and not foo-image.service; ugly but viable here).
But in general let's remember here - the goal is that the image is present. And it must already be present for the current root (barring some explicit admin action to prune)!
Perhaps the simplest thing here is to add a prefix bootc-pending- to the generated unit names?

The new image ships with a new authfile and the .image files reference both, authfiles on the old image and the new image.

Ah, if I understand this right, there is a scenario where a new bootc image has a new bound .image file that references a AuthFile, e.g. AuthFile=%E/registry/newauth.json. We can't parse the AuthFile location due to the systemd specifier and it doesn't exist on the existing root.
So I think that leaves two options

run all of this in the new root, i.e. chroot new-image -> quadlet -> systemd -> podman pull
create a new "bootc-image" spec file that we can reliably parse against the new root to locate the Authfile, CertDir, etc. but still run podman pull from the existing root

Option 1 would ideally be implemented after https://github.com/containers/bootc/issues/640 is in place. There is also a possibility of a conflict between podman and the storage format, e.g. podman 6 for some reason changes the storage format of /var/lib/containers making it incompatible with the existing root without some migration. Pretty unlikely and rare though, and the migration would need to happen eventually anyways.
Option 2 could still result in a failed pull if the "bootc-image" spec changes in the new image.
I lean towards option 1. I'm not sure of all the implications of running in the new image's root though.

Started playing around with trying to run systemd in a chroot or a container, I don't think that will be possible without a bunch of hacks (unless I'm missing some hidden systemd features). I'll start working on reading a separate spec file.

I would lean towards erroring out if we detect any specifiers (scanning for any %X that's not %% I think would be right).
Taking %E as an example...these are currently always going to be system images, so it will always resolve to /etc.
I could imagine someone doing something with %w or %W (os version/variant related) but...eh.
If we do that, then

Started playing around with trying to run systemd in a chroot or a container, I don't think that will be possible without a bunch of hacks (unless I'm missing some hidden systemd features).

That's actually the default when we just run a base bootc image today, right? It's what you get when you podman run quay.io/centos-bootc/centos-bootc:stream9. There's a bit of internal homework that we should do though to set things up in the same way as ostree-prepare-root does in the initramfs (e.g. use composefs).
In theory we could switch to by default mounting each deployment in that way? Some cost/benefit there for sure. Today for example the previous deployment roots are just plain hardlinked dirtrees in the legacy ostree model.

Although...it would be reasonable to want to add a new image and a pull secret for that image as a single step, so we likely should default to resolving any specified filesystem paths relative to the target root. This doesn't actually require us to run the target code in a container image though; we could resolve the paths and prepend the deployment root (or, change the logic so we open file descriptors for them, and pass them via the /proc/self/fd/N magic link).

That's actually the default when we just run a base bootc image today, right? It's what you get when you podman run quay.io/centos-bootc/centos-bootc:stream9. There's a bit of internal homework that we should do though to set things up in the same way as ostree-prepare-root does in the initramfs (e.g. use composefs).

Ah, I was trying to use systemctl in a simple chroot but maybe running systemd directly in a container might work. Something like,
podman run quay.io/centos-bootc/centos-bootc:stream9 /usr/lib/systemd/systemd --unit=bootc-bound-images.target

I would lean towards erroring out if we detect any specifiers (scanning for any %X that's not %% I think would be right).

That seems reasonable to me. I'm not sure how common it is to use the specifiers and it should be a relatively easy thing for a user to replace in the image.

Unless anyone objects, I'll continue with running in the existing root, restricting the use of specifiers, and expanding file paths to the new root. This should be the simplest/quickest thing to implement. If users complain about the lack of specifiers then we can add support for them by doing the container implementation.

I do not want to derail the direction but I see a lot of corner cases being discussed which may cause pain in the future.
I think that we won't run into those issues by introducing a new file /etc/bootc/pinned_images.conf with a simple syntax and something a user is able to comprehend.
I believe we need two fields:

Image: the image to pull
Authfile: optional authfile.  If the authfile exists on the new image, it'll take precedence over the one of the host.

I find this much simpler to document, implement and maintain.  I am not married to the idea but want to to motivate to reconsider.

@ckyrouac WDYT?

I'll start working on using a separate image spec file. I'll try to make sure the spec is easy to adapt to new fields in the future.

Thanks for the thorough review! It's very helpful to get to know rust style/idioms. I pushed all the suggested style related changes and will start on some unit tests now. For integration tests, I was planning to try to write some with the new tmt/nushell framework, if that makes sense?

For integration tests, I was planning to try to write some with the new tmt/nushell framework, if that makes sense?

I think so yep! Though so far one tangential thing is those tests tend not to pull much from the network, but I think we can just bite that bullet.

Hmm cargo-deny is giving:
 error[rejected]: failed to satisfy license requirements
  ┌─ tiny-keccak 2.0.2 (registry+https://github.com/rust-lang/crates.io-index):4:12
  │
4 │ license = "CC0-1.0"
  │            ^^^^^^^
  │            │
  │            license expression retrieved via Cargo.toml `license`
  │            rejected: not explicitly allowed
  │
  = CC0-1.0 - Creative Commons Zero v1.0 Universal:
  =   - FSF Free/Libre
  = tiny-keccak v2.0.2
    └── const-random-macro v0.1.16
        └── const-random v0.1.18
            └── dlv-list v0.5.2
                └── ordered-multimap v0.7.3
                    └── rust-ini v0.21.0
                        └── bootc-lib v0.1.13
                            └── bootc v0.1.9

There's a few new dependency crates here. I think we can allowlist CC-1.0, but I need to check. Hmm wait..like why is dlv-list pulling in a "compile time random number generator"? (digs) Oh I see, it's this code which we don't even run because it's only for no-std environments. Blah. There's definitely some days where the Rust dependency chains feel too fine grained...

I think we can allowlist CC-1.0, but I need to check.

Unfortunately...this one appears to be marginal. See https://docs.fedoraproject.org/en-US/legal/allowed-licenses/
Honestly, it's pretty annoying that someone hyper-optimized the ini parser to the point of having a specialized linked-list data structure that ends up transitively pulling in a custom implementation of Keccak (sha-3 family) for a use case we don't need.
I can understand e.g. hyper-optimizing JSON parsing because yeah, sometimes you end up with gigabytes of JSON in the real world. But INI files? I don't think so.
Looking around there's also tini tini/) - the code looks good to me. Spot checking the maintenance status too by looking at PRs I see e.g. this PR by a fellow RHT employee. Let's switch to this crate?

bleh, thanks for digging into that. I'll switch to tini.

alright - added more unit tests and more cleanup. I think we can get this in so people can start some initial testing with it. I'll continue working on the install path and integration tests separately.
One significant change I made is to error out if an AuthFile field is found in the .image spec. The presence of an AuthFile most likely means the image requires it to be pulled, so we won't be able to pull the image until we add support for it. We could also just ignore the AuthFile, print a warning, and continue trying to pull the image.

Ah hmm a few currently gating clippy lints:

Run cargo clippy -- -D clippy::correctness -D clippy::suspicious
   Compiling bootc-lib v0.1.13 (/__w/bootc/bootc/lib)
    Checking libtest-mimic v0.7.3
    Checking xtask v0.1.0 (/__w/bootc/bootc/xtask)
    Checking tests-integration v0.1.0 (/__w/bootc/bootc/tests-integration)
warning: constants have by default a `'static` lifetime
  --> lib/src/boundimage.rs:15:25
   |
15 | const BOUND_IMAGE_DIR: &'static str = "usr/lib/bootc-experimental/bound-images.d";
   |                        -^^^^^^^---- help: consider removing `'static`: `&str`
   |
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_static_lifetimes
   = note: `#[warn(clippy::redundant_static_lifetimes)]` on by default

warning: this boolean expression can be simplified
   --> lib/src/boundimage.rs:100:8
    |
100 |     if !auth_file.is_none() {
    |        ^^^^^^^^^^^^^^^^^^^^ help: try: `auth_file.is_some()`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool
    = note: `#[warn(clippy::nonminimal_bool)]` on by default

error: you are implementing `Ord` explicitly but have derived `PartialOrd`
   --> lib/src/boundimage.rs:152:1
    |
152 | / impl Ord for BoundImage {
153 | |     fn cmp(&self, other: &Self) -> std::cmp::Ordering {
154 | |         self.image.cmp(&other.image)
155 | |     }
156 | | }
    | |_^
    |
note: `PartialOrd` implemented here
   --> lib/src/boundimage.rs:134:25
    |
134 | #[derive(PartialEq, Eq, PartialOrd)]
    |                         ^^^^^^^^^^
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_ord_xor_partial_ord
    = note: `-D clippy::derive-ord-xor-partial-ord` implied by `-D clippy::correctness`
    = help: to override `-D clippy::correctness` add `#[allow(clippy::derive_ord_xor_partial_ord)]`
    = note: this error originates in the derive macro `PartialOrd` (in Nightly builds, run with -Z macro-backtrace for more info)

warning: `bootc-lib` (lib) generated 2 warnings
error: could not compile `bootc-lib` (lib) due to 1 previous error; 2 warnings emitted
Error: Process completed with exit code 101.

I pushed fixes for those.


Upgrade to core 1.2.0

Fixes #3793.

👍

👍

👍

We are investigating what looks like a Core sorting bug on Android right now, so you might want to hold merging this until we have verified it either way.

Added a changelog entry for the sort order change. IMO from our perspective it's a bug fix as it brings us closer to the platform's sort order, and as we've never specified anything about our sort order it's only a breaking change in the sense that every functional change ever is.

I am a bit puzzled how you can say that. You are replacing one broken implementation with another? I assume you had the same functionality as described here: https://realm.io/docs/java/latest/#sorting-and-querying-on-string. At least users had time to work around that.
Changing that to something else that doesn't work might make sense, but right now the ramifications are not clear. Danish is a small language but what if e.g French or German is suddenly broken as well. As a minimum this should at least be a major version bump.

That section of the docs is either nonsense or incorrect, depending on how you interpret it. We only support sorting Latin Extended 2 in the sense that it produces a consistent result, but that's true of the entire unicode range. We certainly don't produce "correct" results when sorting them and never have, as that's impossible with a locale-insensitive sort.

Any news on this merge? It seems like the conversation died down.

Core is going to switch back to the old sort order so we might as well just wait for that.

👍


Adopt API changes in call hierarchy

See https://github.com/microsoft/vscode/issues/85533

@kjeremy @dbaeumer Time to close since #614 has been merged?

SGTM though I haven't had time to write the LSP docs so if you want to take that on...

SGTM though I haven't had time to write the LSP docs so if you want to take that on...

@kjeremy Looks like @dbaeumer has aslready added it in https://github.com/microsoft/language-server-protocol/commit/e73586714908822dec381f9ff719620a6094d379.

Yes, I wrote the doc :-).


How to add PostCSS ?

Seems like css-modules-require-hook has a use config that allows to pass a array of postcss plugins, but this doesnt seem to work here.
Any ideas?

Thank you. Could you send me an error message or something so I can track down the problem? Because use is accepting an array of functions or modules exporting a functions see use option resolver

Oh im sorry i fixed it with
"append": [ 	"postcss-cssnext" ],
use was working but somehow messed up css modules (im using it with next.js), but append works like a charm!

So is it ok now? 🙂  Can I close this issue? append and use basically have the same code.

yes please! and sorry!


Mailkit upgrade

Since upgrading to mailkit, we've been having a few issues.
Specifically, it looked like the client (i.e. Orchard, where Mailkit is) didn't wait for the smtp server to acknowledge reception of message data. Often, we would get this error on our SMTP servers:
Client socket is disconnected! Disconnect exception encountered: False, IsDisconnected: True, This message will be rejected.
[...]
This issue is caused by the sending server not waiting for the DATA OK command

We tried to upgrade the version of the NuGet package, but there were several issues with its dependencies (https://github.com/jstedfast/MailKit/issues/1462, https://github.com/jstedfast/MimeKit/issues/872, https://github.com/dotnet/sdk/issues/31147) so we were only able to advance it to 3.4.2.
We then changed the code a bit, to explicitly disconnect from the STMP server and dispose of the smtpclient after sending each email. This seems to have improved things.
We couldn't replicate the error 100% of the time, but so far in our tests with this code it hasn't occurred yet.

The thing the compile check is failing on is not something I changed in this PR, I think?

Try to rerun the build, or maybe check if there is a floating version somehow that would fail without any change.

if it still doesn't build, I'll "recreate" the PR on step at a time.

System.Net.Http is unfortunately a well-known troublemaker, although the relevant threads I found about it all state that it should stop causing problems with .NET 4.8 (or even 4.7.2). I've seen the same/similar errors before (some combination of Upgrade, Orchard.Workflows and Orchard.Email were involved), but managed to find a stable (at least it looked stable at the time) configuration.
It looks like that MimeKit (or one of its dependencies) causes a conflict again, maybe it requires a more recent version of System.Net.Http, but we restrict it to <IP_ADDRESS>.
I'm working on this too, but in the meanwhile, if you isolate any specific change/version that causes the warning (error), please let me know.

I managed to get view compilation pass by upgrading Microsoft.CodeDom.Providers.DotNetCompilerPlatform to the latest version (4.1.0) on top of this PR (we're currently using 2.0.1, which is more than 5 years old).
I'm not 100% sure why, but version 2.0.1 actually ships with the .NET 4.6-version of System.Net.Http.dll. If I remove that package (and the associated configuration) from Orchard.Workflows, then Razor compilation passes fine.
Also tested the upgrade to 4.1.0 on current 1.10.x and dev. I'll submit a PR targeting 1.10.x for that soon.

Please merge the latest 1.10.x to fix the build error.


relationship query not generating proper query

When I query across two different databases, an invalid query is being created. It is querying the first DB properly and then the query to the second DB is incorrect.
array (size=1)
  0 =>
    array (size=3)
      'query' => string 'model2.find({"$and":[{"model2.deleted_at":null},{"model2.key":{"$in":["key1","key2","key3","key4"]}}]},[])' (length=170)
      'bindings' =>
        array (size=0)
          empty
      'time' => float 0.05

class Model1 extends Eloquent {
protected $connection = 'db1';

public function children() {
return $this->hasMany('Model2', 'key', 'key');
}
}

class Model2 extends Moloquent {
protected $connection = 'db2';

public function parent() {
return $this->belongsTo('Model', 'key', 'key');
}
}

If I try to run the query manually I get no results. However, if I remove the collection declarations within the $and portion of the query and run it, it works correctly.
Any ideas?

Any ideas on this one @jenssegers?

Please add additional details. I can not reproduce this behavior. What version of Laravel are you using?

4.2


Add ASCII coloring to search results

Bold the entire matched word
Add color to the matched words

Added in " Colorize output #58 "


Help wanted: call for collaborators

@vsouza @lfarah @miguelarauj1o @naeemshaikh90 @victorgama
Looks like we are falling behind again on addressing pull requests/issues, let's add more collaborators
Please leave a nomination if you can think of anyone
I vote for @arasu01

Sorry guys, but I'm very busy these days.
I'll need a couple of months to train for my programming interview.
I can't suggest anyone right now, but we could call @ReadmeCritic.
What do you guys think?

Hey @dkhamsing, I just came back from a 3 month consulting job. I will have waaay more time now to go back and contribute to AwesomeiOS

Hey folks!
Lately I've been really busy working on a project, which left me with no time to go through PRs here. Anyhow, I believe I'll be back in a couple weeks.
PS: Welcome back, @lfarah! 😄

I believe that we're doing an amazing job. All of us have a lot of things to do outside here.  But we always reached goal the main objective here, doing the best curated Awesome-iOS list.
New contributors will always welcome, but I always think in people that have contributed with this list before. So we can search people by contributions and invite them.
I'm not worried about this for now. We have only 4 pull requests open, and some of these we're waiting for modifications.
I believe we can remove on modify the danger alert for redirections, a lot of pull requests have to wait to be integrated because of another link redirection error.
What u think guys?

I agree with @vsouza.
I'd also like to propose we close stale PRs after some inactivity time, say, 5 days.
(Who opened the closed PR can reopen whenever they want.)
Oh, I will also be iterating our open issues in the next few days.

Agree with @vsouza and @victorgama .

I will update the danger warnings to have a note explaining what has to be done, i.e. Redirects will be fixed by someone else

Should we reopen this

Reopening

Hm maybe it will be better to create a new issue so it sits at the top :)


4.0, Color Picker, bottom of triangles not draggable

Godot version
v4.0.beta5.official [89a33d2]
System information
Windows 10 22H2, OpenGL3, Geforce GTX 550 Ti
Issue description
On the Color Picker popup, the triangles under the color bars, look like handles that can be dragged.
But nothing happens when dragging on the bottom half of the triangles.

These seem to be the areas where dragging, does (green border) or doesn't (red border) move the triangles.

Steps to reproduce

open the project: issue, color picker, bottom of triangle not draggable.zip
select the ColorRect node, either from the top left Scene panel or on the 2d viewport
in the right side Inspector panel, click on the Color property button, to open the ColorPicker
try dragging the bottom of the triangle, below the slider: R

Expected
The triangle should move with the mouse.
Observed
Nothing happens.
Cause
The draggable area includes the color bar, and about four pixels below it,
this means that only the top half of the triangle can be dragged.
A possible solution
The draggable area should be extended down, to the bottom of the triangle.
Minimal reproduction project
issue, color picker, bottom of triangle not draggable.zip

I'm currently working on a fix for this issue.


Cannot upgrade from WinMerge <IP_ADDRESS> to WinMerge 2.16.22

Brief description of your issue
winget upgrade WinMerge.WinMerge cannot be done anymore at this point:

Steps to reproduce
Launch winget upgrade  WinMerge.WinMerge from an elevated PowerShell prompt.
Expected behavior
WinMerge should get upgraded to version <IP_ADDRESS>.
Or at least winget should fail without user interaction but with a clear error message.
Actual behavior
The command-line winget experience is blocked by an interactive dialog.
Environment
Windows Package Manager v1.3.2091
Copyright (c) Microsoft Corporation. All rights reserved.

Windows: Windows.Desktop v10.0.22000.856
System Architecture: X64
Package: Microsoft.DesktopAppInstaller v1.18.2091.0

Logs: %LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\DiagOutputDir

Links
---------------------------------------------------------------------------
Privacy Statement   https://aka.ms/winget-privacy
License Agreement   https://aka.ms/winget-license
Third Party Notices https://aka.ms/winget-3rdPartyNotice
Homepage            https://aka.ms/winget
Windows Store Terms https://www.microsoft.com/en-us/storedocs/terms-of-sale

Edit the title to "Cannot upgrade from WinMerge <IP_ADDRESS> to WinMerge <IP_ADDRESS>"
You mention <IP_ADDRESS> twice in your title, which make confusion.

Edit the title to "Cannot upgrade from WinMerge <IP_ADDRESS> to WinMerge <IP_ADDRESS>"
You mention <IP_ADDRESS> twice in your title, which make confusion.

Oops, copy/paste glitch...
Fixed.

This looks like it's related to how the installer behaves. I'm wondering if there might be arguments that could be passed to the installer during upgrade that would suppress the dialog or at least return an error that could be mapped to one of the expected return codes.


Get server side file name

Im wondering how to get the server's side filename on the success callback in order to push the result into an array. The problem is that i only can use "file" which is the selected file and not the renamed file i should get from the server.
if (files && files.length) {
for (var i = 0; i < files.length; i++) {
var file = files[i];
$upload.upload({
url: '/api/users/profile/' + username,
fields: data,
file: file
}).progress(function (evt) {
var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
console.log('progress: ' + progressPercentage + '% ' +
evt.config.file.name);
}).success(function (data, status, headers, config) {
console.log(data.files);
console.log('file ' + config.file.name + ' uploaded. Response: ' +
JSON.stringify(data));
if(files.length > 0){
for (f in files){
$scope.user.profile.pictures.push(files[f]);
}
}else{
$scope.user.profile.pictures.push(file); //Need to use server's file name
}
}

If it's just the name, send the name back in your response and get it from data in the response
.success(function (data, status, headers, config) {
    console.log(data.fileNames);
}

If you need to show the file that is on the server then you need to download it first to the browser and then show it.

So i guess the best idea is to reload the div instead of pushing the file into the array in case i need to show the file from the server


Missing types for Html5QrcodeScanner

Currently Html5QrcodeScanner have any type, anyway we can have Typescript type for that?

As far as I know there is no typings for the original library: if you know there are some, please let me know so that I will update this library properly.

You are correct, I think still you can define .d.ts in your lib is not it?

It would be unreliable because if the original library somehow changes, I would need to manually update the types.
I will check whether there is something that can be done to automatically generate types from a specific library, although that probably should be done by the original package first intead.

Update: it looks like the original library is written in typescript: https://github.com/mebjas/html5-qrcode/blob/master/src/html5-qrcode.ts
I will investigate this, perhaps the library has been rewritten and hence can be directly wired in and provide the typings.
This topic will be updated while I investigate stuff.


Convenience: add command to fixup current changes into patch on top

Many times I just forget something small, or a test fails in my integration hook, and I just want to add some change to my latest commit. Would be nice to have a command to rebase the current changes straight into the latest patch, instead of having to commit and go through the interactive rebase.

It could also be nice to allow an optional index that would fixup the currently staged files into the index.

What about git commit --amend?

@Alizter we have gps a which is convenience for git commit --amend.

@drewdeponte Sorry I didn't mean if there is something like that in gps, I thought I understood the issue as wanting what git commit --amend does.

Yeah, I generally do the gps a when in this scenario. Sometimes I end of up in cases where I have another patch like this scenario is leading to. In that case I do as it says and I gps rebase to do an interactive rebase and squash/fixup the patch.
I think having a convenience method specifically to fixup a patch into the top most patch is pretty low on my priority list.
@ctsstc maybe you have some workflow differences where this scenario is happening regularly for you? I would love to get a better understanding of how you are regularly getting into these scenarios as I generally don't. I am generally using gps a or I am using gps rebase with an edit mark and then doing a gps a to add stuff to a patch in the middle of the stack.

Also the editor you use for rebasing can make a lot of difference. I use emacs with magit which makes rebasing quite a pleasant experience. This is my only use for emacs.

I think my scenario where I need to fixup a patch that isn't on the top of the stack is when I haven't yet integrated a patch and I later find I need to refactor something like the interface in the older patch, so I end up needing to fixup against that patch. I guess I can do an interactive rebase and edit the patch, but most of the times I end up making a "fixup commit" and running the interactive rebase fixing up the patch that way.

I also sometimes run into the scenario @ctsstc mentioned. Sometimes I see I need to make an update to a patch in the middle of my stack so I start with a rebase to edit that patch. Sometimes however, I either not think of it until after I made the code changes, or I have other changes that are unrelated but not committed yet.
Usually in that scenario I make a "fix" commit and then rebase it into place, but a convenience to throw that change into a patch index would be very useful to me.
I think the way to do so would have to be automating the process of:

committing the staged changes
rebase the commit into place with autostash
maybe fail if we get conflicts? not sure.

Happy to tackle this if we're into the idea

Git itself has the git commit --fixup command. The current development version of gps supports the gps sha command so that you can use it in composition with other commands, like git commit --fixup.
Anyways, the idea is that you can use Git aliases or shell aliases to codify the combinations that you use in your workflow. This is because maintaining everyones (very different workflows & edge cases, seems like a loosing battle).
See #266 for details and discussion around this and other examples.


Datastore queries for IN and NE

Is there a timeline for when datastore will include IN and Not Equals filters? Or if it will be supported?

// @pcostell
Also, what is the ideal venue for questions like these?

You can redirect these to the google-cloud-datastore github project.

This issue was moved to GoogleCloudPlatform/google-cloud-datastore#127

@stephenplusplus Just want to weigh in and said I'm another user blocked by lack of support for IN, OR and NE. I'm working on a connector for the loopback framework, while also using in a project. Looking at the google-cloud-datastore project, it seems to be specific to Java and Python. Is the Node version dependent any of them? If yes, then I understand.
Thanks


Wallee Fingerprint Script in Magento 2.4.7 Checkout

We have updated the Wallee payment to the latest version, 2.1.14.

On the website, there is only one block left that does not load an additional script correctly. Therefore, Magento complains about:

The method of adding the script
The remote script that Wallee tries to upload.

As a result, Magento blocks the "fingerprint" script.
https://fingerprint.com/
They add this script aggressively, almost like a hacker would. We can't fix it because the process is embedded in a script downloaded from the Wallee server.

The payment works, but the "fingerprint" script doesn't collect information about the current customer.

Hello,
Thank you for your message.
I have involved our experts and we are working on a solution. I will get back to you with an update as soon as possible.
Thank you for your patience and understanding for the longer processing time.
Sincerely,
Dominik

Hello,
In order to analyse your request we would need more informations.
Could you please expand on what settings you are using in our plugin and provide us with a detailed instruction on how to reproduce the error? Could you also please provide us with the URL/which script is blocking?
Thank you in advance for your response.
Sincerely,
Dominik

Hello @Dominik-Niziol
To repeat the problem: Magento needs to be updated to the latest version: 2.4.7-p1
The update introduced new CSP security features.
CSP must be enabled on the site.
https://developer.adobe.com/commerce/php/development/security/content-security-policies/
Blocked script:
https://gmtech.mfgroup.ch/fingerprint/cdn?session=15c3f134-1459-4fdb-9979-cb223581a322&merchant=2000
Best regards

Dear @mischi99
We have added a new option in the configuration to disable the fingerprint setting. If you are still having issues you can disable it with the following steps in Magento Stores -> Sales -> wallee Payment -> Checkout
Best regards


Add 4 new python answer codes

namely-
-Triangle Quest 2
-Loops
-Mod Divmod
-Integers come in all sizes

Please add the entire question on top as a comment.


Fix fxml warnings

Codecov Report

Merging #166 into master will decrease coverage by 0.03%.
The diff coverage is n/a.

@@             Coverage Diff              @@
##             master     #166      +/-   ##
============================================
- Coverage     49.96%   49.92%   -0.04%
  Complexity      573      573
============================================
  Files           125      125
  Lines          2614     2616       +2
  Branches        315      317       +2
============================================
  Hits           1306     1306
- Misses         1199     1201       +2
  Partials        109      109

Impacted Files
Coverage Δ
Complexity Δ

src/main/java/trackitnus/ui/task/TaskCard.java
0.00% <0.00%> (ø)
0.00% <0.00%> (ø%)

.../main/java/trackitnus/ui/task/OverdueTaskCard.java
0.00% <0.00%> (ø)
0.00% <0.00%> (ø%)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update b9e54e8...20f5d06. Read the comment docs.


go/types2, types2: version check (Checker.allowVersion) ignores module version if position information is missing

The code in Checker.allowVersion:
	// If no explicit file version is specified,
	// fileVersion corresponds to the module version.
	var fileVersion goVersion
	if pos := at.Pos(); pos.IsKnown() {
		// We need version.Lang below because file versions
		// can be (unaltered) Config.GoVersion strings that
		// may contain dot-release information.
		fileVersion = asGoVersion(check.versions[base(pos)])
	}
	return !fileVersion.isValid() || fileVersion.cmp(v) >= 0

returns true if pos is not known: fileVersions won't be set and thus is not valid, resulting in a true return value.
This leads to correct behavior if a position is missing because it belongs to an imported object/type: in those cases we don't need to do a version check (== any version is allowed). But it may hide problems due to incorrectly missing position information.
Instead, the code should resort to the module version if no position is provided, and code that is version checking should not do the version checks if the checks are not needed in the first place (for imported types/objects).
This code exists also in 1.22 and it hides issue #66064 (in 1.22) because the missing position information effectively leads to an absent version check (which is what we want).
A more robust approach is to explicitly disable the version check if none is needed, and assert that in all other cases we have a valid position.
cc: @findleyr for visibilty

This was addressed by a) explicit checks to calls to allow/verifyVersion where we know that position information may be missing because of import, b) adjustments to the code of allowVersion, and c) still allowing for unknown positions because parts of the AST may be generated/constructed outside a parser.

This was addressed by a) explicit checks to calls to allow/verifyVersion where we know that position information may be missing because of import, b) adjustments to the code of allowVersion, and c) still allowing for unknown positions because parts of the AST may be generated/constructed outside a parser.

I don't think (c) is correct. Consider an ast.File stitched together from two parts (whether synthesized from scratch or spliced from two calls to the parser), the first part specifying a FileVersion and the second containing syntax that requires a version check. Depending on the pos values, the type checker would fail to associate the two and would use the wrong semantics. I think file version information needs to be propagated top down; see #69477.

@adonovan ACK. It's unfortunate that we need to rely on position information in the first place. Maybe we need a position-independent mechanism to identify which file a node belongs to (I suppose one could search for the node in the AST for each file, but that seems pretty expensive).

@adonovan ACK. It's unfortunate that we need to rely on position information in the first place. Maybe we need a position-independent mechanism to identify which file a node belongs to (I suppose one could search for the node in the AST for each file, but that seems pretty expensive).

I don't think it's technically hard to implement the fix. In essence, we remember the Checker's current file version on the downwards traversal, so that it becomes part of the context saved in each "later" closure. Each later closure (or the later mechanism itself) would re-set the checker's file version before executing the logic.


Start to translate into Indonesian

Trying to be helpful to the community so I start to contribute small

sorry newbie mistake, I closed the PR by accident
still working on the translation


Mount temperature sensor

TMP175 mounted on a prototyping board to allow it to be used on a breadboard.
Power test - ok
i2c test - ok


Please use dark title bar in the settings window when using dark mode

Description of the new feature / enhancement
The title bar looks like this in dark mode now:

I think it would look better if you use dark title bar.
Scenario when this would be used?
When using the dark mode.
Supporting information
No response

/dup #13712


Make _init_selenium logs more verbose.

Added a couple log lines for when you finish downloading and configuring selenium stuff.
I had some trouble using the GUI at first because it hung at "Loading application dependencies". Looking at the code, it seems to be because chromedriver_autoinstaller.install() is downloading stuff. I figured some more verbose logging would make this clearer.
I don't know much Python, but this should be simple enough?

@FiredMercury21 Thanks for the changes, can you please change your target branch from main to develop. Since, I also need to draft a release.
Thank You.


Run hook before response is sent but already processed.

hello.
I'm wondering if it is possible to take action on a get request after its been processed but before the data is returned to the user.
Senario
I have a hook that encrypts all my data in a POST request before its actually processed and stored in the database, but now I need to decrypt that same data when requested by a user from.
I have been working with a very basic or method where I had to decrypting the data from controllers but the method is a little lengthy and hectic and the same all through, Is there a way I could have a function that I call on every GET request before the data is returned to the user but after fetching it from the database?
Thanks in advance

Have actually figured out a way that I could accomplish this without using hooks.
I have modified my model's page to look like this
`/**

Default model settings
(sails.config.models)

Your default, project-wide model settings. Can also be overridden on a
per-model basis by setting a top-level properties in the model definition.

For details about all available model settings, see:
https://sailsjs.com/config/models

For more general background on Sails model settings, and how to configure
them on a project-wide or per-model basis, see:
https://sailsjs.com/docs/concepts/models-and-orm/model-settings
*/

module.exports.models = {
/***************************************************************************

                                                                     *

Whether model methods like .create() and .update() should ignore     *
(and refuse to persist) unrecognized data-- i.e. properties other than   *
those explicitly defined by attributes in the model definition.          *

                                                                     *

To ease future maintenance of your code base, it is usually a good idea  *
to set this to true.                                                   *

                                                                     *

Note that schema: false is not supported by every database.          *

For example, if you are using a SQL database, then relevant models     *

are always effectively schema: true.  And if no schema setting is  *

provided whatsoever, the behavior is left up to the database adapter.  *

                                                                   *

For more info, see:                                                    *

https://sailsjs.com/docs/concepts/orm/model-settings#?schema           *

                                                                     *

***************************************************************************/
// schema: true,
/***************************************************************************

                                                                     *

How and whether Sails will attempt to automatically rebuild the          *
tables/collections/etc. in your schema.                                  *

                                                                     *

Note that, when running in a production environment, this will be      *

automatically set to migrate: 'safe', no matter what you configure   *

here.  This is a failsafe to prevent Sails from accidentally running   *

auto-migrations on your production database.                           *

                                                                   *

For more info, see:                                                    *

https://sailsjs.com/docs/concepts/orm/model-settings#?migrate          *

                                                                     *

***************************************************************************/
// migrate: 'alter',
/***************************************************************************

                                                                     *

Base attributes that are included in all of your models by default.      *
By convention, this is your primary key attribute (id), as well as two *
other timestamp attributes for tracking when records were last created   *
or updated.                                                              *

                                                                     *

For more info, see:                                                    *

https://sailsjs.com/docs/concepts/orm/model-settings#?attributes       *

                                                                     *

***************************************************************************/
attributes: {
createdAt: { type: 'number', autoCreatedAt: true, },
updatedAt: { type: 'number', autoUpdatedAt: true, },
id: { type: 'number', autoIncrement: true, },
//--------------------------------------------------------------------------
//  /\   Using MongoDB?
//  ||   Replace id above with this instead:
//
//     // id: { type: 'string', columnName: '_id' },     //
//
// Plus, don't forget to configure MongoDB as your default datastore:
// https://sailsjs.com/docs/tutorials/using-mongo-db
//--------------------------------------------------------------------------
},
customToJSON: function () {
var keys = Object.keys(this);
keys.forEach(element => {
this['process'] = 'encryption can happen here.';
});
return _.omit(this, ['password', 'id']);

},
beforeCreate:function(valuesToSet, proceed){
/**
* Function to eliminate the fields specified in the {fieldsToEliminate} array
* and create a new array of fields to be encrypted.
*
* The reason for elimincating these particular fields is because they are defined with a particular
* datatype and incase we encrypt them, we will have an error, but still I think its good to have this
* function since we might need to eliminate some fields when encrypting our data.
*/
cleanUp=(arr)=> {
var newArray = [];
const fieldsToEliminate = ['updatedAt', 'id', 'createdAt'];
  arr.forEach(element => {
    if (!fieldsToEliminate.includes(element)) {
      newArray.unshift(element);
    }
  });

  return newArray;
}

var keys = cleanUp(Object.keys(valuesToSet));
keys.forEach(element => {
valuesToSet[element] = null;
});
return proceed()

},
/******************************************************************************

                                                                        *

The set of DEKs (data encryption keys) for at-rest encryption.              *
i.e. when encrypting/decrypting data for attributes with encrypt: true.   *

                                                                        *

The default DEK is used for all new encryptions, but multiple DEKs      *

can be configured to allow for key rotation.  In production, be sure to   *

manage these keys like you would any other sensitive credential.          *

                                                                        *

For more info, see:                                                       *

https://sailsjs.com/docs/concepts/orm/model-settings#?dataEncryptionKeys  *

                                                                        *

******************************************************************************/
dataEncryptionKeys: {
default: 'UYVCo+v+/Mf5dtLAhroe858zCcg8Dj1h18sclIThZg0='
},
/***************************************************************************

                                                                     *

Whether or not implicit records for associations should be cleaned up    *
automatically using the built-in polyfill.  This is especially useful    *
during development with sails-disk.                                      *

                                                                     *

Depending on which databases you're using, you may want to disable this  *
polyfill in your production environment.                                 *

                                                                     *

(For production configuration, see config/env/production.js.)          *

                                                                     *

***************************************************************************/
cascadeOnDestroy: true
};
`
This works but then creates an issue when querying with a post request.

Hey @edmondsylar, I'm not sure I understand your use case, why are you encrypting data before your app runs its other business logic?

@edmondsylar if I'm understanding you right, it's technically possible to do this in a hook

@eashaw Currently I don't know of any other way I can pull it off, haven't used the framework for too long but the essence is to have all the data in my database encrypted just as an extra layer of security for my app data,
If there is a way that I can have this implemented differently, please it would surely be a pleasure if you helped

@rachaelshaw Yes, My first attempt was in a hook and i was modifying the data from the request as it comes in but I failed to decrypt the data before I could send it back to the user that's why I decided to add them to the default model definition.
Again am not sure if this is the best way I can do this but am open to suggestions.

Ni @edmondsylar, can you tell me more about your use case, you might not want at rest encryption.

@eashaw I simply want to have all the data in my database to be encrypted, which I have achieved using  beforeCreate callback function on the main model configuration file.
So currently  I want to know if there is a way I can execute a function when the data is being fetched, I have tried embedding my logic in the customToJSON function but its not executed, don't know why, tho when I try the same in a different sails App it works, I don't know why it doesn't apply in my main application.

Hello @edmondsylar, I'm not sure what kind of app you’re working on, and what the security requirements might be, but I would strongly encourage you to take a step back and reconsider whether encryption-at-rest for all of your project’s data is actually needed; this type of approach comes with a lot of overhead and extra complexity that just isn’t necessary for the majority of apps (In case you haven’t gone through these yet: it may help to take a look at the security and deployment docs.)

@eashaw I hadn't surely gone through the security docs for sailsjs but am going to take some time off and check them,
The encryption-at-rest is really required for the kind of application am working on, though I have come to find that this kind of methodology might not be very popular because am really not getting much information about it.
but again to answer your question, yes, the data encryption is super relevant for me in this application.

@edmondsylar How do you intend to query on an encrypted primary key?

My primary keys which in this case are auto increments are actually not encrypted but just in case I was to encrypt them, It still would work since even my query is made with encrypted data, I have a function that encrypts all data that comes in from get requests.
The only issue is that I managed to achieve this using a policy which I surely don't think is a very smart move but its the only one I could get to work, And now I have a problem that I can't call more than one policy one a specific set of routes,
Example
'*' : ['policy-one', 'policy-two', ...]
I don't know if this is possible but if so, please help out with a fix

Hi @edmondsylar, you should be able to link multiple policies on an action. If you're seeing issues with the documented usage would you mind creating a minimal repo reproducing the issue you are seeing with multiple policies?

Looking into this ASAP and reverting,
Am going to go through my use case and see if am doing it right because I have the same exact implementation that the document suggests.


Include spring-cloud-aws-test in BOM for Spring Cloud AWS 3.X

Type: Feature
Is your feature request related to a problem? Please describe.
As part of Spring Cloud AWS 2.4.X, the "new" spring-cloud-aws-test lib was part of the BOM. As of 3.0.0.RC1, it's missing, and when including the library, one has to explicitly add the version.
Was this a deliberate decision or maybe forgotten to copy?
Describe the solution you'd like
Include spring-cloud-aws-test in spring-cloud-aws-dependencies
Describe alternatives you've considered
As a workaround when upgrading to 3.X, I'm manually including the version like
<dependency>
  <groupId>io.awspring.cloud</groupId>
  <artifactId>spring-cloud-aws-test</artifactId>
  <version>3.0.0-RC1</version>
  <scope>test</scope>
</dependency>

Additional context
I'm happy to provide a PR if it was forgotten by accident 👍🏻

@rieckpil sorry, i'll do it now as I am preparing RC2 release


Add support for Brazilian Portuguese

pt-BR should be accepted

Hi Martim,
thanks again for the feedback. You can decide which language tag to allow, see the project wiki here in the section how to add a variant or a script.
In your case:
from IIIFpres import iiifpapi3,BCP47lang
iiifpapi3.LANGUAGES = ["pt-BR"]
# all the rest of your script

I decided to encourage the usage of only the subtag for encourage following the W3C GOLDEN RULE, furthermore is not easy to check the validity of complex subtags and variants, requiring specialized packages. I prefer the user to choose and trust the package that prefers.


Win10-2004: OneDrive doesn't unistall properly

OneDrive make a backup and is disappearing in the Taskbar, but after reboot, OneDrive is still on the System.

Not for me, OneDrive is deleted from the system fine, and use this Script in combination with Winaero Tweaker, and system is debloated completly! you even can see the difference in system fluidity!

This happens to me if I run the script immediately after the initial installation finishes - OneDrive is still installing itself after the OS install and running this script during that does uninstall it, but OneDrive for some reason, decides to attempt another install.
I can only assume that it does not set some registry key that marks it as installed once the install finishes so Windows installs it again.
I prevent this by waiting just a little bit for OneDrive to finish installing before I run this script to debloat.

@Suphax
That's a good point. Thank you.
I will try this the nect time i make a fresh Win 10 install.


docs(guide): The CLI moved into a separate package: webpack-cli

Executing webpack is now possible with webpack-cli instead of just webpack. Added that to npm installation step as well as the final execution instruction. A little unsure about how to add mention to the --mode flag.

@jeremenichelli maybe this should be re-targeted at next if you're going to merge soon?
Always displaying the latest version number in the badge in the sidebar has definitely caused some confusion (e.g. #1854). We should start tagging the repo and versioning the package.json with the currently documented version using something like standard-version. This would allow us to easily identify where documentation for each version lies.
cc @jeremenichelli @montogeek @TheDutchCoder

Hi @KumarBhot thanks for your contribution!
We're actually in the process of updating the docs for v4 and this particular change was already merged into the next branch: https://github.com/webpack/webpack.js.org/commit/650f69efa3240018272270932f3d734009d05307
We're also planning on making versioned docs.


Incomplete Vertical Grid Lines in Bar Chart

Description
The vertical grid lines in the Bar Chart component do not extend to the bottom of the chart area, resulting in an incomplete grid visualization.
Steps to Reproduce

Render a BarChart component with a set of data points.
Observe the vertical grid lines.

Expected Behavior
The vertical grid lines should extend across the entire height of the chart area, reaching the bottom edge.
Actual Behavior
The vertical grid lines stop short and do not reach the bottom of the chart area.
Code
<BarChart
    yAxisThickness={0}
    xAxisThickness={0}
    data={DATA1}
    frontColor={'#e19b9980'}
    barWidth={45}
    rulesType={"solid"}
    stepHeight={50}
    barBorderWidth={2}
    barBorderColor={"#e19b99"}
    showVerticalLines={true}
    verticalLinesSpacing={75}
    rotateLabel={true}
/>

Screenshots

Environment

Library Version: ^1.4.9
Expo Version: ~50.0.6
React Native Version: 0.73.4
Platform: Web
React Native Web Version: ~0.19.6

Additional Context
Also it looks like that if I rotate label then it is getting cropped, I did not set any height of the bar or container.

Hi @skfaisal93 👋
I am unable to reproduce this bug. Can you please check once again in the latest version of the library?
The current latest version is 1.4.19.

@Abhinandan-Kushwaha Same Issue with me.

"gifted-charts-core": "^0.1.30",
"react-native-gifted-charts": "^1.4.29",
"react": "18.2.0",
"react-dom": "18.2.0",
"expo": "^49.0.21",

code:
                 const  data={[
                        {
                          value: 15,
                          label: 'Jan',
                          frontColor: '#d51717',
                          barBorderColor: '#808080',
                          barWidth: 20,
                          barBorderRadius: 4,
                          barBorderWidth: 1,
                          spacing: 20,
                        },
                        {
                          value: 40,
                          label: 'Feb',
                          frontColor: '#79d517',
                          barBorderColor: '#ff0000',
                          barWidth: 20,
                          barBorderRadius: 4,
                          barBorderWidth: 1,
                          spacing: 20,
                        },
                        {
                          value: 10,
                          label: 'Mar',
                          frontColor: '#d55617',
                          barBorderColor: '#5800e6',
                          barWidth: 20,
                          barBorderRadius: 4,
                          barBorderWidth: 1,
                          spacing: 20,
                        },
                      ]}
              <BarChart
                  data={data}
                 width={Dimensions.get('window').width - 120}
                height={300}
                dashGap={0}
                 showVerticalLines={true}/>

@bhavesh-trentium
For me your code produces the below output, the grid lines are rendered properly-

@Abhinandan-Kushwaha Can you check above i have package version and you have version is same?

Yes @bhavesh-trentium I tested on the same versions which you have. Did you run it on Android or iOS or web?

For web, use the react-gifted-charts library.

@Abhinandan-Kushwaha I used this: react-gifted-charts library. But Fetching Some Issues Check this one: https://github.com/Abhinandan-Kushwaha/react-gifted-charts/issues/4#issuecomment-2312029465

Hi @bhavesh-trentium
react-gifted-charts does not work in React-Native projects. It works in ReactJS projects only.
I will make the fix for issues you are facing on web using react-native-gifted-charts.

@Abhinandan-Kushwaha Okay, thanks. You fix that and let me know.


Fdl/removes nsnull values

On this PR: 10413, we use NSNull for values inside the dictionary. Some tests were broken because of that.

The fix is staged for the next 10.3.0 release, due out next release.
In the meantime, this PR can be manually applied to workaround.


Sockets: decouple cluster workers from connections and other modules

Attaching entire processes to connections is kind of a bad idea.

...it is? Why?

Because it's information the connection doesn't need to know in order to function. It also makes a Go rewrite of the module a lot more complicated since the other modules wouldn't be able to know more about workers than their IDs and maybe PIDs outside of doing something weird like making mocks of them on the Node side of things. This may or may not help with memory, I have no good way to check though.

Because it's information the connection doesn't need to know in order to function.

As far as I can tell, your code replaces a process pointer with a process ID. This slows down your process communication for no discernable benefit.
The reason I've historically replaced other pointers with IDs is because I don't trust the GC. Processes never expire so the GC is irrelevant.

It also makes a Go rewrite of the module a lot more complicated since the other modules wouldn't be able to know more about workers than their IDs and maybe PIDs outside of doing something weird like making mocks of them on the Node side of things.

...I don't understand what you're trying to say here, but I believe you're wrong. You can replace "process" with "process wrapper" if the API is different; all we use in practice is process.send and maybe process.disconnect afaik.

This may or may not help with memory, I have no good way to check though.

Mostly sure it doesn't.

...I don't understand what you're trying to say here, but I believe you're wrong. You can replace "process" with "process wrapper" if the API is different; all we use in practice is process.send and maybe process.disconnect afaik.
it was badly worded. What I meant was there wouldn't be a worker object available at all to the connection since that would be handled in Go. Giving what would be the equivalent of a worker an ID to send over to Node through IPC is fairly simple to do, but the alternative to this would be doing something like giving the connections objects with a similar API to workers that would handle communicating with the Go process, which doesn't really need to be done

Mostly sure it doesn't.
I wasn't sure whether it would or not, but I can see if I can work out a way to properly check

When I make enough connections to get my IP banned, the original code leaks the socket objects. This doesn't, but instead it's leaking users and connections... I'll see if I can make it so neither do.

it was badly worded. What I meant was there wouldn't be a worker object available at all to the connection since that would be handled in Go. Giving what would be the equivalent of a worker an ID to send over to Node through IPC is fairly simple to do, but the alternative to this would be doing something like giving the connections objects with a similar API to workers that would handle communicating with the Go process, which doesn't really need to be done

Yes, that is what I'm advocating. Make a wrapper object with the same API as currently.
I think you don't understand how multiprocess code works?
You have a parent process and a child process. The parent process is written in Node, your child process will be written in Go. But the parent process still has a child process object, corresponding to the Go process. That object can be wrapped if its API is different from the cluster API.

I wasn't sure whether it would or not, but I can see if I can work out a way to properly check

You are making a grand total of approximately three long-lasting objects. It really doesn't matter at all.

When I make enough connections to get my IP banned, the original code leaks the socket objects. This doesn't, but instead it's leaking users and connections... I'll see if I can make it so neither do.

There are zero socket objects in the main process, only Connection objects which abstract them. The child processes have socket objects but I don't see how they would be leaked.

Yes, that is what I'm advocating. Make a wrapper object with the same API as currently.

I think you don't understand how multiprocess code works?

You have a parent process and a child process. The parent process is written in Node, your child process will be written in Go. But the parent process still has a child process object, corresponding to the Go process. That object can be wrapped if its API is different from the cluster API.

But I do. Of course the child process would need to be wrapped, but I don't think following cluster's API would work unless it cached which connections belong to which "workers" when they're created or if a wrapper were to be constructed for each "worker" in the child process. I think that would make the wrapper more complex than it really needs to be just for the sake of making it act like a worker

There are zero socket objects in the main process, only Connection objects which abstract them. The child processes have socket objects but I don't see how they would be leaked.

My bad, they were TCP streams from the cluster, not sockets.  Of course the child process would need to be wrapped, but I don't think following cluster's API would work unless it cached which connections belong to which "workers" when they're created or if a wrapper were to be constructed for each "worker" in the child process. I think that would make the wrapper more complex than it really needs to be just for the sake of making it act like a worker

Actually, reading this again: The API is completely fine in its current state. The API as it currently stands is:
Sockets.socketSend(this.worker, this.socketid, data);
So the system for sending to workers is already abstracted out and can be easily changed if for whatever reason the communication system is different.
That said, I still don't think you understand how sockets work, because what you're saying right now is mostly nonsense. Connection already caches which connection belongs to which worker.

My bad, they were TCP streams from the cluster, not sockets. It was a dumb assumption

Yes, you have four TCP streams, one per process, created when PS starts and then never created/destroyed, so I don't see how they could possibly leak.