Update to latest version of Backstage

Resolve #29

@antoniobergas could we see about merging this and publishing a new version? We'd like to update to the latest version of Backstage and this is preventing us from doing so.

Hi @arhill05 , I agree to update to the latest version but I don't have permissions to merge PRs.
Maybe @hevans-dglcom can give you a hand?

@hevans-dglcom any chance you could take a look at this and publish a new version of this package? This is blocking my teams from upgrading to newer versions and we may have to stop using this package :(

Hi @arhill05 , I would say we are pending to hear from the maintainers about this https://github.com/Parfuemerie-Douglas/scaffolder-backend-module-azure-pipelines/issues/30
After a decision on it, will probably need to re-update again and also change some breaking changes from the plugins

https://github.com/Parfuemerie-Douglas/scaffolder-backend-module-azure-pipelines/issues/30#issuecomment-1762015990

@hevans-dglcom @antoniobergas  do we have any update on this as createAzurePipelineAction now fails with latest version upgrade of  "@backstage/integration": "^1.6.2"

@antoniobergas  This is sad :( Can you suggest some for azure devops scaffolder pipeline create and run?

AFAIK there's no other azdops public plugin 🥲 for the scaffolder.


Fix Bug Preventing Reupload

Compare the content of a re-uploded solution only with the user's latest uploaded solution of that specific exercise.

Looks good!


Removed the python dependency and used Awk, Simply strip down size.

Better late than never?  Thanks @rbuckland, I made some minor tweaks here https://github.com/mesoscloud/zookeeper/pull/6


DeepFace.Stream not working

Hi,
Im getting the following error while trying to run the stream function:

Kindly guide me through it.
Many Thanks in Adv :)

It seems that one one your images in Johhny folder causes that trouble. There are 3 items in that folder. Could you share them with me?

btw, which version of deepface you are running? This might be fixed in 0.0.55.

Oah yeas. It seems you are using a legacy version of deepface. Please update it to 0.0.55.


install service create an empty folder

file with line in
/install_redis_service.bat:81
md %REDIS_INSTALL_PATH%
Is it necessary to create an empty folder, or want to check file permissions?

Hello,

The installation script is executed after privilege escalation.
The installation path has been determined during installation.
The installation test has been done by specifying a path that does not exist. The script can be created normally and installed successfully.

It is recommended that you report any problems encountered during the actual installation process.


support <IP_ADDRESS>

Pretty sure that this is all that is needed.  Maybe saved you a bit of work.

Already updated. Thanks!

Thanks!


Events view should be sorted by its ID, rather by block

Added direct link to example

closed by https://github.com/rootscan/rootscan-io/pull/42


MIX_TARGET=x86_64 Graph doesn't show

x86_64 board is Qemu.
nerves_livebook v0.11.0
$ git clone https://github.com/nerves-livebook/nerves_livebook.git
$ cd nerves_livebook
$ export MIX_TARGET=x86_64
$ mix deps.get
$ mix firmware.image
start script
"C:\Program Files\qemu\qemu-system-x86_64.exe" -drive file="nerves_livebook.img",if=virtio,format=raw -m 4098 -net nic,model=virtio -net user,hostfwd=tcp::10022-:22,hostfwd=tcp::80-:80 -serial stdio

doesn't work module

Kino.Mermaid
Kino.Download
kino.Tree
kino.DataTable
socket
explorer
maplibre
vegalite

Interesting. Thank you for the report. This isn't a configuration I test, but I'll take a look on my next pass.


React-DND trigger mouse events after state changes

I am building a simple script to let someone sort a list of items using Drag & Drop. The items successfully sort, but after the drag operation has ended, it triggers the onMouseEnter events of the item that took its original place.

Here's some simple code to replicate: https://codesandbox.io/s/m33o3x610p
Is this a bug in React-DnD? Does React-DND trigger mouse events after state changes?
Browser: chrome
Additional context
I am able to bypass it by conditionally delaying the onMouseEnter event, but this is obviously poor practice.

bump :)

I am running into the same issue as well!

Had anyone solved this? I am running into the same issue.


Rename staging environment to canary.

Requirement:
Issue #11 confirms that the environment named staging in the repo is actually using the canary pattern, and should be named as such.
Implementation:
Mostly just a find and replace on the word staging vs canary. However I did ensure that the first instance of the word canary is a link to Martin Fowler's Canary Release article, and removed the statement claiming that staging (canary) and production environments are isolated.
Resolves #11

Thanks for this and sorry for the delay in reviewing and merging. Will try to get to it tomorrow.

Happy new year @viglesiasce! Just wanted to give you a friendly reminder about this PR.
Thanks!

I havent forgotten about this @Chekote!! Just havent had time to loop back around. It's looking like I'll have a chance soon though.

Thanks again @Chekote!!


USBX host hid mouse cause memory fault when using Logitech PRO X SUPERLIGHT mouse

Here is part of the Logitech PRO X SUPERLIGHT report descriptor:

Note the Vendor-Defined 1 Usage Page has Report Count(5) and INPUT abs Ary data. But USBX alloc only ONE item for that. That makes memory out of bounds and thus lead to memory fault occur.
When deal with the report descriptors, USBX treat that as one item becase it don't have a Usage Maximum.
USBX use Usage Maximum to calc the ary item count, I don't know whether this is normative. Why not use Report Size and Report Count?

Thanks for the feedback, we will check that.

Simulated with the HID descriptor, enumeration seems good, can you give more details on how to reproduce the issue?

There is indeed no problem with the enumeration process here. The problem will occur in the message parsing the interrupt endpoint.I will send the message of the interrupt endpoint later.

The client buffer addr is 0x41c06e50 and its size is 0xA8, so its range is [0x41c06e50, 0x41C06EF8]. But when decompress, usbx try to write 0x41c06f00 which is a memory out of bounds.
Here is the log:
_ux_host_class_hid_transfer_request_completed 204 alloc client buffer addr(0x41c06e50) size(0xA8)
_ux_host_class_hid_report_decompress raw data: 00 00 00 00 00 00 00 00 01 93 40 00 00
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x90001) to 0x41c06e50, filed value(0x0) to 0x41c06e54
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x90002) to 0x41c06e58, filed value(0x0) to 0x41c06e5c
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x90003) to 0x41c06e60, filed value(0x0) to 0x41c06e64
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x90004) to 0x41c06e68, filed value(0x0) to 0x41c06e6c
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x90005) to 0x41c06e70, filed value(0x0) to 0x41c06e74
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x90006) to 0x41c06e78, filed value(0x0) to 0x41c06e7c
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x90007) to 0x41c06e80, filed value(0x0) to 0x41c06e84
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x90008) to 0x41c06e88, filed value(0x0) to 0x41c06e8c
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x90009) to 0x41c06e90, filed value(0x0) to 0x41c06e94
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x9000a) to 0x41c06e98, filed value(0x0) to 0x41c06e9c
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x9000b) to 0x41c06ea0, filed value(0x0) to 0x41c06ea4
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x9000c) to 0x41c06ea8, filed value(0x0) to 0x41c06eac
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x9000d) to 0x41c06eb0, filed value(0x0) to 0x41c06eb4
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x9000e) to 0x41c06eb8, filed value(0x0) to 0x41c06ebc
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x9000f) to 0x41c06ec0, filed value(0x0) to 0x41c06ec4
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x90010) to 0x41c06ec8, filed value(0x0) to 0x41c06ecc
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x10030) to 0x41c06ed0, filed value(0x0) to 0x41c06ed4
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x10031) to 0x41c06ed8, filed value(0x0) to 0x41c06edc
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0x10038) to 0x41c06ee0, filed value(0x0) to 0x41c06ee4
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0xc0238) to 0x41c06ee8, filed value(0x0) to 0x41c06eec
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0xff000001) to 0x41c06ef0, filed value(0x1) to 0x41c06ef4
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0xff000093) to 0x41c06ef8, filed value(0x93) to 0x41c06efc
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0xff000040) to 0x41c06f00, filed value(0x40) to 0x41c06f04
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0xff000000) to 0x41c06f08, filed value(0x0) to 0x41c06f0c
_ux_host_class_hid_field_decompress 148 decompress hid data, write field usage(0xff000000) to 0x41c06f10, filed value(0x0) to 0x41c06f14

Thanks for the logs. Please try to change code here:
https://github.com/azure-rtos/usbx/blob/7c928b43db68b72970b3effd5a2582eb5a6869c7/common/usbx_host_classes/src/ux_host_class_hid_report_add.c#L199, the number of items to decompress is not related to item type.
    /* Get the number of fields for this report.  */
    hid_field_count =  hid_parser -> ux_host_class_hid_parser_global.ux_host_class_hid_global_item_report_count;

This works. Thank you.

Fix already in latest code. Can close.


Replace calls to cudaDeviceSynchronize with calls to only synchronize the default CUDA stream

Overview
The CUDA Programming Guide states that calling cudaDeviceSynchronize has the following synchronization behavior: "cudaDeviceSynchronize() waits until all preceding commands in all streams of all host threads have completed."
(source: https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#explicit-synchronization). The RealSense SDK uses cudaDeviceSynchronize in the alignment filter and color conversion functions. This can cause those functions to wait for CUDA code running on other streams to complete. This issue will arise if the user is running CUDA code in separate CUDA streams in their application.
A solution to the problem is to replace calls to cudaDeviceSynchronize with cudaStreamSynchronize(0), where 0 stands for the default CUDA stream. This will change the SDK behavior to only wait for the default stream to synchronize, rather than all streams executing CUDA code. Please let me know if there is a different approach the project would like to take, and I can help contribute.
Related issues
I initially opened and discussed this change on #12680. This PR would resolve that issue.

Hi @m-mead , thank you for your contribution.
We will investigate the issue and verify your proposed change.
It may take some time so please be patient :)

Hi @Nir-Az, sounds good -- thank you! 👍


[INTEL_HPU] add support of scatter and scatter_

Enable scatter and scatter_ on intel_hpu
Add a corresponding test

add @LeoZhao-Intel @yanfeich @zongwave to review
add @xiaoguoguo626807 to review


arrays

i have added in arrays section please check

done with inheitance

Kindly create an issue for the same and get it assigned to yourself then use the pr template given in the  readme.md file then try for a pr

updates @Dliz05


KServe Storage Initializer to update the Isvc with some status

/kind feature
Describe the solution you'd like
I would like for the KServe Storage Initializer to update the Isvc with some status/result/outcome of the initialization operation.
For example,

to reflect the checksum of the downloaded S3 model files when storageUri is s3://m/p
or when I define my Custom Storage Initializer (CSI) I'm looking for a standard K8s field which would allow me to store the result of the custom download operation in the Isvc status--without parsing log of the init container
we would like to annotate in the status of the Isvc, the actual URI stored in Kubeflow Model Registry when using the KF's MR CSI, as exemplified from this workflow.

Anything else you would like to add:
In all 3 examples, and additional one, as the Storage Initializer has finished the download() I would like for a Isvc status to reflect some meaningful data/metadata/etc as the CSI has served its purposes, like the checksum, the "resolved resource" reference, etc.
cc @terrytangyuan @danielezonca @lampajr

+1 this would be very useful to have

Thank you for the update @andyi2it and I left a small comment (link), curious to hear as well from the others!


Use version file for DecouplerShroud

I've added a version file to my mod. The "$vref" line will get the ksp version from that file, correct? And does this affect the current release, or just new ones?

Yes indeed, $vref does it. You can see exactly what the new metadata will look like if you click on the pull request checks and scroll down:
https://ci.ksp-ckan.org/job/NetKAN/7412/console
Version 0.4.4 would be updated automatically once this is committed, and any future releases would also be affected. Is that OK?

Thanks for the info, everything looks good!


fix(sync): fetch status until connection is established or failed to establish

This will make sure that the function is not returning while still in "connecting" state (1) but only when connection suceeded (2) or failed (3).
Needed this to work on my macbook.

@edbeeching can this be merged?

LGTM, thanks.


Debian buster: tcam-gigetool install to /usr/local misses python site packages

I am running a up to date Debian Buster machine and installed the tiscamera project. The installed tcam-gigetool however failed to start and quits with the following error message.
Traceback (most recent call last):
  File "/usr/local/bin/tcam-gigetool", line 34, in <module>
    from .version import TCAM_VERSION, TCAM_GIGETOOL_VERSION, TCAM_GIGETOOL_GIT_REVISION
ModuleNotFoundError: No module named '__main__.version'; '__main__' is not a package

I traced the install information and found out, that the python packages were installed in the wrong directory. I found them in /usr/local/usr/lib/python3/dist-packages/tcamgigetool which is wrong. A symlink from the correct path /usr/lib/python3/dist-packages semi-solved the issue.
The root of the issue was found in the CMakeLists.txt of tcam-gigetool. There is a python call, which tries to find the correct dist-packages path. However it fails when using a custom CMAKE_PREFIX_PATH. I fixed it in the PR https://github.com/TheImagingSource/tiscamera/pull/275
However python still refused to find the required modules. By adding the module name to the import also fixed this problem. The fix for this is also in the PR.
CMake configuration call.
cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_TOOLS=ON -D BUILD_ARAVIS=ON -S $HOME/Workspace/tiscamera -B $HOME/Workspace/tiscamera/build

CMake build call
cmake --build $HOME/Workspace/tiscamera/build --config Release

CMake install call
cmake --build $HOME/Workspace/tiscamera/build --config Release --target install

Hello
Please use the camera-ip-conf tool. The tcam-gigetool is not complete, as it seems.
I am sorry for that.
Stefah

Ah I see there is an alternative. I am pretty sure that I have always used the tcam-* programs for our TIS cameras. Maybe I am wrong about that. However camera-ip-conf also seems to meet my requirements. Thank you very much.

Closed, as the connected PullRequest was merged.


Add additional functionality to Color API

Additional functionality includes:

RGB array or list
RGBA array or list
HSL array or list
HSLA array or list
'name' now includes all 147 CSS colors

Hound doesn't one particular line that is only 7 characters "too long." I believe this line is OK as-is.

LGTM! If you don't want change that. Tell me I will just merge this.

Ready to be merged. Thanks!


Report generation error

If a report is generated using any type of reference power curve other than all measured the following error occurs:

I believe that this error is because self.allmeasuredpowercurve hasn't been updated to self.powercurve in several places yet. (self.powercurve selects the available power curve from self.specified, self.innermeasured, self.ouitermeasured and self.allmeasured.)


Chapter 12 Threshold updates

based on the https://github.com/microsoft/azure-container-apps/issues/1100 outcome

not now...


bootstrap csctl-plugin-openstack repo

this contains boilerplate for working with this repository.

Can this PR be merged or do we want to add something here?

Can this PR be merged or do we want to add something here?

@michal-gubricky From my side, this looks good, if something breaks, I can fix it in subsequent PRs for sure.
I'll squash the commits and then we can proceed with merge.


Scripts for processing STF translation files

This is a set of scripts for processing an STF (Salesforce Translation File) exported from an org that has the NPSP managed package installed.
The translations exported from that org will have namespaced "keys" to indicate which metadata each translation belongs to.  Additionally, translations for both the npsp namespace as well as metadata belonging to underlying packages will be included in this export.
These scripts are intended to:

Extract the translations from the exported STF file containing namespaced keys for all packages,
Filter out any keys that correspond to metadata that we know we never want to translate,
For the remaining keys, identify the namespace to which the translated metadata belongs,
Rewrite the key to be compatible with unmanaged code belonging to that namespace,
Write the translations, with rewritten keys, out to separate files based on the org where each file is to be imported.

@jlantz Can you look this over and give me any feedback about any possible issues with the code, and any other feedback?
I realize the organization of these scripts is probably somewhat unusual, so if you have better ideas on how to organize it, let me know.  Pipelining these together like this just made sense to me.  Also, I avoided using modules like argparse or logger to keep things "simple", but I'm not sure if it really ended up being any simpler.  Any feedback you have about how I could better go about this task would be appreciated!

Verified using supplied STF file. Could be refactored into a single file for ease of use, so I created a work item in AA.


Horizontal ScrollView Sensitivity?

Is this a bug report?
No
Have you read the Contributing Guidelines?
Yes
One of the things I am having a hard time finding documentation for is the ScrollView.. particularly in a horizontal mode. I am trying to implement a Instagram like navigation.. where the app is smart enough to know if you are say... scrolling up and down or horizontally scrolling the view
The issue I have found, is the ScrollView will move on diagnal drags... whereas some of that could just be from user error as they intended to pull downwards but the DX was not 0, triggering the horizontal scroll view
Does anyone have a solution to this? Or a way to override the scrollview's sensitivity to only respond when the other direction, (dy or dx) isn't a large value? Did this make sense? Has anyone implimented something like this or know how to do this? I have had a hard time figuring out in the documentation how to pull something like this off
I also think this would be a good prop... some sort of way to edit the sensitivity if there is movement in the opposite direction

hjk

I also faced that problem, does anyone have solution for this?

+1


Using ShiftNet

Hello and thanks for your work!
In the paper you mentioned the you used ShiftNer for the second stage, do you have the implementetion of this?
Where it’s taking place, inside the PromptMR training loop or it’s separated training that starts only on the final results of PromptMR?
Thanks

Hello and thanks for your work! In the paper you mentioned the you used ShiftNer for the second stage, do you have the implementetion of this? Where it’s taking place, inside the PromptMR training loop or it’s separated training that starts only on the final results of PromptMR? Thanks

It's separate training. We opted not to release that part of the code because the performance boost to the PromptMR results from separated training was minimal, and the process was time-consuming.

Thanks for your answer.
I want to reproduce this flow as final project in my Medical Image Processing course at university, so just to be sure, after I finish to train PromptMR and saved all final reconstructed images, I need to start new training of ShiftNet with on the train data of PromptMR?

Thanks for your answer. I want to reproduce this flow as final project in my Medical Image Processing course at university, so just to be sure, after I finish to train PromptMR and saved all final reconstructed images, I need to start new training of ShiftNet with on the train data of PromptMR?

yes!

Thanks!
And you train ShiftNet on the image space or k-space?

Thanks! And you train ShiftNet on the image space or k-space?

Image space. We saved the reconstructed images of the training set generated by PromptMR and then used them as input for ShiftNet during the second stage of training.


⚠ Bofrost.es has degraded performance

In 58f6008, Bofrost.es (https://www.bofrost.es) experienced degraded performance:

HTTP code: 200
Response time: 2005 ms

Resolved: Bofrost.es performance has improved in 0a2aeaf after 15 minutes.


Added Kubernetes ConfigMap storage backend to README

Resolves #211

Does it make sense that Kubernetes ConfigMap is a generic REST Layer storage handler? Maybe I am wrong, but It's not so clear to me and I am going to try to argue.
I think that a Storage Handled should allow to store any kind of schema (of course, considering exceptions and characteristics of each storage backend), and in the case of ConfigMap the schema is defined by ConfigMap itself. In the case of this handled is defined on "configmap.ConfigMapSchema".
I think this is a great example about how to connect REST Layer to a backend that has it's own Schema, but I don't see it as a generic Storage Handler in the same category than the rest of elements on the list. Maybe a section different section "use cases" or similar can be created to link that kind of thinks.
Opinions?

Probably the third-party storage back-ends that has limitations can get their own section? E.g the SQL back-end also have limitations in which fields you can query from what I can see, I.e. not sub-schemas.


High memory footprint

👋  thank you for all your hard work.
It looks like gilda has a pretty high memory footprint about ~1.5G, most of that comes from the load_terms_file. The grounding_terms.tsv file is about ~200M, compressed ~30M. For context the models via load_gilda_models take up about 256M of memory.
The gilda.get_grounder().entries dict is close to 1.5G in memory, with 1.6 million keys, and Term objects as values all preloaded into memory. Term object could be improved to be memory efficient e.g. dataclass with slots defined + more efficient types. All this unfortunately makes it problematic to use in a multi-process environment (e.g. pyspark), the startup is also slow since we need to create all term entries even if most of them might never be used.
Fortunately this is a solved problem, if I may suggest, maybe the grounding_terms should be distributed as some kind of binary format/index, this could be any kind of (constant) KV store built for read heavy ops even builtin dbm or shelve, but also specialised leveldb, sparkey, sqlite3 etc.
This way:

we wouldn't need to load all terms at the startup

saves on startup time
also saves memory

we can still do caching/lru_cache on lookup with some reasonable limit (configurable?)
it could also be configurable if grounding_terms should be shared memory loaded

this way the memory will be lazily used as needed and shared across many processes if present

What do you think?

Hi @ravwojdyla, thank you for the comment and suggestions! Before going into pros and cons, I wanted to ask, what approach do you use for memory profiling so I can also compare options using the same metric?

👋 @bgyori you can use memray for example.

Hi @ravwojdyla, I started experimenting with different options and weighing advantages and disadvantages. However, I would generally recommend that if memory usage and startup time is an issue, that you run Gilda as a (local) web service that each of your parallel processes can communicate with. This is how we run Gilda in some applications (e.g., parallel dialogue sessions) where we don't want each individual process to maintain its own instance. Is this not a viable option in your case?

Is this not a viable option in your case?

@bgyori thanks for the update. In our context we run gilda inference as part of Spark task, setting up a web server as part of Spark is certainly feasible, but far from straightforward (handling the ops + remote comms). Especially if you compare it to using it like a library or other model inference use-cases. I could image that anyone using gilda from a parallel processing framework will run into this issue. Does that make sense?

I see, let me try to press on this a bit more though. In principle, your nodes could communicate with the public web service running at http://grounding.indra.bio through HTTP requests instead of using Python library calls. What I'm suggesting is just that you could have a running web service instance of Gilda on some arbitrary local infrastructure (possibly independent of Spark), the only thing being required is that your Spark processes be able to send requests to it through a URL. This can also be done via Docker to avoid having to have a local Python environment configured (https://github.com/indralab/gilda#run-web-service-with-docker).

@bgyori sure all that is in theory feasible but I hope it's clear this it's significantly more complicated setup than using gilda as a pure py library? Re having our own Gilda server introduces state which requires babysitting. Doing HTTP requests (over the Internet) introduces latency, failure recovery and (arguable small) cost. OOC is this issue/use-case not something you intend to support out of the box?

Thinking about the future, it's reasonable to expect grounding terms to grow in size as more resources and entity types are supported. I can imagine tagging support for genomic features like SNPs would greatly increase the memory footprint. So this would be an argument for enabling an on-disk backend for the grounding terms as a solution here.
Some of the tools @ravwojdyla mentioned have similar APIs to a python dict, right? Such that support shouldn't be too burdensome.

HI @ravwojdyla, I am in fact looking into the issue, not dismissing it, but want to make sure I highlight the option of having a single Gilda service running that multiple other processes can communicate with. I still think there might be a misunderstanding with respect to this since I don't think "this it's significantly more complicated setup than using gilda as a pure py library". For instance, wherever your process is calling
matches = gilda.ground('melanome')

you could instead call
matches = requests.post(gilda_url, 'melanoma')

to get the exact same result - in the first case represented as Python objects, in the second, as JSON.

I still think there might be a misunderstanding with respect to this since I don't think "this it's significantly more complicated setup than using gilda as a pure py library".

@bgyori thank you for double checking, I appreciate that. No misunderstanding, all make sense, a "simple" requests.post introduces a array of potential issues tho:

Doing HTTP requests (over the Internet) introduces latency, failure recovery and (arguable small) cost.

To be fair, this is definitely a viable solution for manual or handful of requests. In some cases we run grounding on millions of terms, in which case we need to worry about latency/failures etc. Does that make sense?

Some of the tools @ravwojdyla mentioned have similar APIs to a python dict, right?

@dhimmel correct, apart from sqlite3 all of them will have dict-like API. Also good point about future growth and use cases.

I started first with dbm and shelve. These two are very similar with the main difference being that dbm is limited to string values whereas shelve can represent any complex type as value. Therefore, shelve seems to be the right fit for our case given that the grounding dictionary's values are lists of Term objects.
I first made a gilda.shelve resource file as follows:
from gilda.api import grounder
gr = grounder.get_grounder() # This loads the default grounding terms from the TSV
with shelve.open('gilda.shelve') as db:
    for norm_text, terms in gr.entries.items():
        db[norm_text] = terms

Resource file size
The resulting gilda.shelve file is 737 MB, which is much larger than the current default grounding_terms.tsv resource file (221 MB uncompressed, 34 MB compressed).
Startup time
Startup time with shelve (i.e., doing shelve.open('gilda.shelve', 'r')) is around 7s compared to 14s with the approach we use for loading the TSV resource file fully into memory as a dict of lists of Terms.
Memory usage
Using memray for profiling, loading a Grounder instance without doing any further operations with shelve uses 966 MB vs 2.6 GB with the original approach (not sure why I am seeing 2.6GB vs the 1.5GB mentioned above). Though the memory usage difference gets smaller after using the Grounder on ~86k benchmark strings, there is still a difference of 1.2 GB at the end of the benchmark.
Performance
On a benchmark set of ~86k strings, the old grounder is about 38% faster than the one using shelve (~18k vs ~13k groundings per second).
Overall, what we see is that with shelve we have faster startup and lower memory usage, but a larger resource file, and slower performance. @ravwojdyla, @dhimmel looking at the quantitative comparison, what do you think about this "tradeoff profile"?

Thanks @bgyori for this nice profiling. I could see the 737 MB file size to be problematic in transit. What does this compress to? And how long does it take to convert grounding_terms.tsv to a shelve? Perhaps you only would need to distribute grounding_terms.tsv.gz and the shelve could be generated upon first use.
I wonder if the writeback=False argument when reading the shelve would help with the memory bloat:
shelve.open('gilda.shelve', flag='r', writeback=False)

Curious as to whether @ravwojdyla thinks shelve is the right solution given these results.

@bgyori thanks for a nice writeup and looking into dbm and shelve!

Using memray for profiling, loading a Grounder instance without doing any further operations with shelve uses 966 MB vs 2.6 GB with the original approach

This seems a bit fishy, I wonder where does the extra memory come from 🤔  I tried running similar experiment here's the memray command:
python -m memray run --live test_gilda.py

And you can see the
test_gilda.py is:
import shelve
db = shelve.open('gilda.shelve', flag="r")

import time
time.sleep(100000)

this is on Debian box, Python 3.9.7.  And result in ~370MB, original approach still around 1.5GB.

vs

Overall, what we see is that with shelve we have faster startup and lower memory usage, but a larger resource file, and slower performance.

The file size is definitely larger than I would expect. Tho it compresses pretty well to ~56MB.

python -m memray run --live test_gilda.py

test_gilda.py is:
import shelve
db = shelve.open('gilda.shelve', flag="r")

import time
time.sleep(100000)

This for me produces 737 MB for Max heap size seen.

The file size is definitely larger than I would expect. Tho it compresses pretty well to ~56MB.

I tried gzipping it and I actually get 129 MB. Also, I would probably have to try to see how reading from a gzipped shelve during runtime changes the benchmarks.

@bgyori now thinking about it, maybe we can actually build our own terms using an index that best fits our use case and pass that into Grounder(terms=<OUR_DICT_LIKE_TERMS_DB>).

This for me produces 737 MB for Max heap size seen.

I tried gzipping it and I actually get 129 MB. Also, I would probably have to try to see how reading from a gzipped shelve during runtime changes the benchmarks.

@bgyori oh maybe this is different gilda version, we are still on 0.6.1, you are probably using latest.

Oh okay, mine says dbm.gnu so somehow we ended up with different backends. Still, unless I'm missing something, you cannot really read directly from a gzipped shelve file right?
Also, a remark on startup times: I measured this in the context of overall Gilda startup which also has to load disambiguation models, and the 7s mostly accounts for that part, independent of the main grounding terms.

you cannot really read directly from a gzipped shelve file right

Correct. The shelve cannot be compressed while reading or writing it. I was suggesting compressing it at the location where you distribute it, such that the user doesn't have to download such a large file. But it would be decompressed locally before use.

we can actually build our own terms using an index that best fits our use case

Some discussion of creating subsets of the grounding terms at https://github.com/indralab/gilda/issues/63. There's a namespaces option for gilda.ground now, but perhaps a namespace option when loading the term set would make it so we're only loading a small portion of the terms into memory. @bgyori how easy would it be to apply namespaces to a Grounder to only load a subset of the grounding terms?

Next up is sqlite3. I constructed the db as follows:
import sqlite3
import tqdm

db = 'gilda.db'
conn = sqlite3.connect(db)
cur = conn.cursor()
q = """CREATE TABLE terms (
           norm_text text not null primary key,
           terms text
       )"""
cur.execute(q)

for norm_text, terms in tqdm.tqdm(gr.entries.items()):
    q = """INSERT INTO terms (norm_text, terms) VALUES (?, ?)"""
    cur.execute(q, (norm_text, json.dumps([t.to_json() for t in terms])))

q = """CREATE INDEX norm_index ON terms (norm_text);"""
cur.execute(q)

I implemented a wrapper to make it fit in seamlessly as the Grounder class' entries attribute (at least as far as simple grounding goes):
class SqliteEntities:
    def __init__(self, db):
        self.db = db
        self.conn = sqlite3.connect(self.db)

    def get(self, key, default=None):
        res = self.conn.execute("SELECT terms FROM terms WHERE norm_text=?", (key,))
        result = res.fetchone()
        if not result:
            return default
        return [Term(**j) for j in json.loads(result[0])]

Resource file size
The resulting gilda.db file is 646 MB, again much larger than the original tsv(.gz).
Startup time
Again this is around 7 seconds but since connecting to the sqlite DB is instantaneous, this is all for other initialization steps when instantiating a Grounder (notably loading disambiguation models). The same applies to the shelve evaluation above.
Memory usage
Loading the grounder uses 966 MB (exactly the same as with shelve), and after grounding 86k strings, it still uses about 1.6 GB less RAM than the original and about 425 MB less than shelve.
Performance
Using sqlite is slower, though not by much, compared to shelve and the original approach. It can still ground around 11k strings / s which makes the original 64% faster.
So overall, in this case we still have a much larger resource file but otherwise we get better memory usage and slower performance compared to shelve. One advantage of sqlite is that it is better portable than shelve. A disadvantage is that further wrapper methods e.g., values() would have to be implemented to make the sqlite backend behave like a dict to support all the ways in which the Grounder uses its entries.

The portability of sqlite is nice. Could be used by other languages like R or Julia in the future. I could see terms becoming its own table rather than a serialized JSON field. Would open the door to more advanced SQL queries on the dataset.

Loading the grounder uses 966 MB (exactly the same as with shelve)

Surprised this is so high. Are there other things besides grounding terms that could take up a lot of memory?

Surprised this is so high. Are there other things besides grounding terms that could take up a lot of memory?
Note entirely sure, my guess is the disambiguation models that are loaded. I'm just looking at overall memory usage of getting/using a Grounder instance, not just using the DB backend in isolation.

my guess is the disambiguation models that are loaded

Looks like they all get loaded at once and stored in Grounder.gilda_disambiguators:
https://github.com/indralab/gilda/blob/6255ec004e3c135c5cf01afcffe292e125d4de96/gilda/grounder.py#L584-L589
This actually seems like a low hanging fruit for memory and startup optimization. Could use a shelve instead of pickle containing all models. And then just load the disambiguator in a lazy way.

@bgyori thanks for sqlite3 stats, cool to see them.

Using sqlite is slower, though not by much, compared to shelve and the original approach. It can still ground around 11k strings / s which makes the original 64% faster.

And earlier:

On a benchmark set of ~86k strings, the old grounder is about 38% faster than the one using shelve (~18k vs ~13k groundings per second).

There's discrepancy between these two comments. Are you sure you meant 64% faster in sqlite case?
Regarding the original list

dbm or shelve, but leveldb, sparkey, sqlite3 etc.

leveldb and sparkey are not really an option for gilda's internal index since they require extra sys dependencies. A user (like me), might still be able to mint an index using those and https://github.com/indralab/gilda/issues/95#issuecomment-1148057496. All that said I would add one more option for benchmark: lmdb, I like that it has shared memory mapping built-in (sparkey index is loaded in a similar way). Which would work nicely with in a multi-process setup because a single memory region (with the DB memory mapped) can be used across many processes (without extra cost of memory per process, which is really the original problem for us). One caveat right now tho is that lmdb by default supports keys up to 511 bytes, there are 3k keys (in the grounding terms, out of 1.6M) longer than that, so we would need to handle that. At least in my test, the db file ends up:
> du -sh gilda.lmdb/data.mdb*
718M    gilda.lmdb/data.mdb
79M     gilda.lmdb/data.mdb.gz

Here's some code to create the db:
import lmdb
import json
from gilda.api import grounder

gr = grounder.get_grounder() # This loads the default grounding terms from the TSV
long_keys = 0

env = lmdb.open("gilda.lmdb", map_size=int(10.147e+9))
with env.begin(write=True) as txn:
    for norm_text, terms in gr.entries.items():
        # NOTE: not handling these right now
        if len(norm_text) > 500:
            long_keys = long_keys + 1
            continue
        txn.put(norm_text.encode(), json.dumps([t.to_json() for t in terms]).encode())

Btw regarding performance hit by switching from pre-process in-memory representation, at least in our multiprocess setup it's acceptable because due to current memory footprint (~1.5GB/process) we are forced to reduce the number of processes by ~50%. So say we have a VM with 16 CPUs, and run parallel gilda grounding using Spark, in theory we should be able to use 16 process, but we are forced to reduce that to 8, which is already 50% perf hit (with 50% smaller memory footprint). If we can use something that is memory efficient/mapped, with say ~40% perf hit (I'm assuming cold cache) 16 * 0.6 = 9.6 is still better for worst case, and ~90% smaller memory footprint. And this should get better with warm cache (perf-wise).

The rough performance numbers I gave seem consistent to me: 18k/13k=1.38 (original/shelve groundings per second) and 18k/11k=1.64 (original/sqlite groundings per second), though perhaps this is not the best way to report these percentages.
Since we started this thread I tried to more carefully decompose where memory usage comes from when using Gilda as a whole (not parts of it in isolation).

The main grounding entries data structure, currently represented as a dict of normalized text as keys and lists of Terms as values in memory. This takes around 1.5GB of RAM. Currently, I would be most comfortable with supporting sqlite as an optional back-end to effective eliminate this component of memory usage while taking some hit in performance.
The Gilda disambiguation models (ones built using and distributed with Gilda) use around 250MB of RAM when loaded into memory. The easiest solution here would be to implement lazy loading. This would mean that if context is not passed to grounding, these models would never be loaded, and even if context is used for grounding, only those models would be loaded that are actually necessary.
The Adeft disambiguation models (that are built and distributed by a separate package) are currently also loaded when the Grounder is first instantiated and use around 540MB of RAM. Again we can turn this into lazy loading where if context is not used for grounding, these would never be loaded into memory.

Having said this, @ravwojdyla, it might be useful for this discussion if you described a bit what you are trying to ground. Is it a restricted set of entities like human genes? Or can the strings you are grounding be small molecules, diseases, etc.? If you are dealing with a restricted set, you can easily create your own custom grounder instance that can potentially be orders of magnitude smaller than what you need for the general default setting that Gilda supports.

The rough performance numbers I gave seem consistent to me: 18k/13k=1.38 (original/shelve groundings per second) and 18k/11k=1.64 (original/sqlite groundings per second), though perhaps this is not the best way to report these percentages.

Ah, I see, my bad I misunderstood the interpretation of those.

Currently, I would be most comfortable with supporting sqlite as an optional back-end to effectively eliminate this component of memory usage while taking some hit in performance.

I'm curious if there's any chance to give lmdb a quick try in your benchmark please? I'm very curious to see the performance hit there. Also asking because it would be optimal for our multi-process use case but could also be a reasonable solution for lazy loaded single process setup.

Having said this, @ravwojdyla, it might be useful for this discussion if you described a bit what you are trying to ground. Is it a restricted set of entities like human genes? Or can the strings you are grounding be small molecules, diseases, etc.?

I think we are currently mostly interested in human genes, proteins and diseases. Is there anything I'm missing @dhimmel?

@bgyori sounds great, thank you so much!

Unfortunately I don't think I can commit to investigating further options at this time.

Out of curiosity, if we create a PR with lmdb or similar backend using #97 as a blueprint, would you be interesting in merging that or should we keep that in-house?

The sqlite solution does the job with standard built-in libraries so I think this will be fine for now, but of course all the code I provided should help you make further adaptations for highly specialized settings. Various benchmark scripts can be found at: https://github.com/indralab/gilda/tree/master/benchmarks that you can adapt to your purposes as needed.

Various benchmark scripts can be found at: https://github.com/indralab/gilda/tree/master/benchmarks that you can adapt to your purposes as needed.

@bgyori thanks, and which benchmark did you use for this issue and performance stats above? All benchmarks in that directory seem at least a month old.

I didn't implement my tests as new benchmark scripts. I just ran memray manually to check usage, and ran the existing BioID benchmark to assess performance.

👋 Hi @bgyori,
I am one of the authors of memray. We are collecting success stories here. If you have a minute, do you mind leaving a short message on how memray help with this issue? Knowing how we managed to help will help us track trends and target areas for improvement, prioritize new features and development and identify potential bugs or areas of confusion.
Thanks a lot for your consideration and for helping us improve the profiler :)

Thanks @pablogsal, I wrote a message!


Always display Y-Axis even when the series is deselected

Hi there, please consider this Codepen example: https://codepen.io/D0ct0rBish0p/pen/XOwdxW
I have assigned the Y Axis for Series 1 and Series 2 both to Series 1, and I always want to display only a single Y Axis for either series. So I've set the second Y Axis to "show: false" which produces the required result.
However, as soon as I disable Series 1 by clicking on it in the Legend, it hides the left Y Axis and no Axis is displayed anymore on the left side. Is it possible to have an option, for example "alwayShow: true" or something to this effect ?
I hope my example is clear, please let me know if I need to provide additional details.

Good point, it looks weird to have a series visible with no y-axis because it is associated with a hidden y-axis.

I will check if the series which is visible has an associated y-axis. If it is, I will avoid hiding it.
I will provide a property "alwaysShow" as suggested by you.

I will try the 1st one before providing the new option.

Thank you for the quick response ! I'm really loving Apexcharts so far and am working on implementing it into my reporting dashboards as replacement for morris charts. Really awesome work.
Looking forward to have this feature implemented.

I have provided a new property yaxis.showAlways: true as the 1st option I mentioned above didn't really work well. Will release a minor version soon.


Remove Node 12 from the CI workflows

Since Node 12 is EOL, we need to remove them from the workflow actions.
And we need to do a new release for the same
@JuanVqz What do you think about the kind of release required for this? major, minor or patch?

This is such a great question, I think it requires a mayor release.
Do you agree?

I still thinking about the topic, we don't have any functionality that requires removing Node 12 yet I think we can still support it until that changes.

:tada: This issue has been resolved in version 4.4.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


[QUESTION] 2D alignment

I've been using TEASER to align two 2D point clouds.  The results with my datasets are not as expected after running through the demos and seeing how robust TEASER is to noise and outliers.
In the figure below you'll see four point clouds.  The blue is the source point cloud, the red is the target point cloud, yellow is the target after TEASER alignment, and the purple is target alignment using a ground truth reference system.  Ideally the purple and yellow point clouds would align closely.
I've tried both rotation solvers: GNC_TLS and FGR.  I've tried changing the solver params, e.g., noise_bound, cbar2, etc. with little success.
Is this a matter of tuning TEASER for my dataset or is there something fundamentally about my dataset that causes TEASER to fail?  Also, is there a way to configure TEASER to only do a 2D alignment?  i.e., (to only estimate two translation parameters and one rotation parameter).  The benefits would be compute speed and robustness.

The solver params are as follows:
#define NOISE_BOUND 0.05

teaser::RobustRegistrationSolver::Params params;
params.noise_bound = NOISE_BOUND;
params.cbar2 = 1;
params.estimate_scaling = false;
params.rotation_max_iterations = 100;
params.rotation_gnc_factor = 1.4;
params.rotation_estimation_algorithm =
    teaser::RobustRegistrationSolver::ROTATION_ESTIMATION_ALGORITHM::GNC_TLS;
params.rotation_cost_threshold = 0.005;

The output is as follows:
Read 15076 total vertices
Read 1076 total vertices
Starting TEASER solver
Starting scale solver.
Scale estimation complete.
Max core number: 3
Num vertices: 15077
*** [pmc heuristic: thread 11]   current max clique = 2,  time = 0.000105858 sec
[pmc heuristic]  mc = 2
Created adjacency matrix in 0.0313511 seconds
[pmc: initial k-core pruning]  before pruning: |V| = 15076, |E| = 1587
[pmc: initial k-core pruning]  after pruning:  |V| = 1521, |E| = 191
[pmc]  initial pruning took 0.000163078 sec
[pmc: sorting neighbors]  |E| = 382, |E_sorted| = 382
|V| = 113
-----------------------------------------------------------------------
Max Clique of scale estimation inliers:
Using chain graph for GNC rotation.
Starting rotation solver.
GNC rotation estimation noise bound:0.1
GNC rotation estimation noise bound squared:0.01
GNC-TLS solver terminated due to cost convergence.
Cost diff: 0.00140892
Iterations: 2
Rotation estimation complete.
Starting translation solver.
Translation estimation complete.
=====================================
          TEASER++ Results
=====================================
Estimated rotation:
 0.276848 -0.960914         0
-0.960914 -0.276848        -0
        0        -0        -1

Estimated translation:
    -2.85733
     29.4295
3.47666e-310
Time taken (s): 3.51892

Did you pass in the correspondences, or the points?
Currently TEASER++ does not support pure 2D transformation unfortunately.

@jingnanshi Thanks for your reply.  I passed in the points.  But now I understand that I need to also pass in correspondences.  I'm building PCL so that I can run the correspondence estimator (teaser::FPFHEstimation).  I'm not sure how well this will work on my relatively sparse point cloud.
In the "TEASER: Fast and Certifiable Point Cloud Registration" in section XI-C there's some discussion about Simultaneous Pose and Correspondences (SPC).  It says that all possible correspondences are generated.  Is this implemented in the codebase?
Do you know of another algorithm that is likely to be robust with the example point clouds that I show?

Regarding SPC: yes, and it simply requires you to generate the correspondences yourself. The columns with the same index in src and dst are the corresponding pair of points. So for SPC, you just need to generate for point i, N-1 possible correspondences. And you concatenate all these points together to be an Eigen matrix.
Regarding algorithms: you can always try different ICP algorithms as they don't require correspondences.

Hello TEASER++ team,
I've been exploring TEASER++ for point cloud registration and am impressed with its robustness, especially as noted in the paper "TEASER: Fast and Certifiable Point Cloud Registration". The paper mentions that TEASER++ can efficiently solve problems without correspondences, hypothesizing all-to-all correspondences, and often outperforms ICP in such scenarios.
I'm considering using TEASER++ for aligning 2D trajectories. Specifically, I have a 2D vehicle trajectory (src_vdr) and a 2D map of possible vehicle paths (target_roadmap). For both trajectories, the z-axis is set to zero. [input only 2d points]

My questions are:

Is TEASER++ suitable for aligning such 2D trajectories, especially considering its ability to work without established correspondences?
Can TEASER++ be a more accurate alternative to ICP for this kind of 2D point cloud (or trajectory) alignment?
Are there any specific settings or considerations I should be aware of when using TEASER++ for 2D data?

Any insights or recommendations would be greatly appreciated.
Thank you!


question

How can I turn this off?  I need the new screen to occupy the bottom first and then the middle of the screen, but when I start pulling up, the crop of this panel stretches up

Yes, it is. The surfaceView background color looks clear.

Yes, it is. The surfaceView background color looks clear.

I didn't understand the answer.  I need it so that when I raise the modal window, it does not come off the bottom edge, and does not cover the entire screen so that you can move the map on the home screen

Please the Maps example app. In the app, it behaviors as you expected.

The library are able to cover the bottom of the screen. For example, the surface background color is red and the panel cover the bottom of the scree with the red color.
let appearance = SurfaceAppearance()
appearance.backgroundColor = .red
fpc.surfaceView.appearance = appearance


add stdev,argmin,argmax & set op types

Few aggregation types were missing, this PR adds them:

argmin
argmax
set
variance
countif
distinctif

Can you check axiom-go again? Looks like this is also missing variance, distinctIf and countIf.

Can you check axiom-go again? Looks like this is also missing variance, distinctIf and countIf.
updated


Problem: Inventory Scripts no longer able to be parsed

Issue
I use python scripts to generate inventory, and that has worked great in Semaphore by pointing to an inventory type of file.  In at least the latest release, maybe earlier but I never noticed because I hadn't upgraded recently, my inventory files are no longer able to be parsed.  My inventory script checks a database, and I'm seeing errors like:
Failed to parse /tmp/semaphore/repository_3_93/inventory/skyhawk2_inventory.py with script
plugin:
Inventory script (/tmp/semaphore/repository_3_93/inventory/skyhawk2_inventory.py) had an execution error:
Traceback (most recent call last):
File "/tmp/semaphore/repository_3_93/inventory/skyhawk2_inventory.py", line 3, in <module> import psycopg2 ModuleNotFoundError: No module named 'psycopg2'

In the past I used an ansible playbook to install required python modules on the docker container itself, and that task still works but it seems like it is not installing to the right place any more?  I've also tried placing the requirements.txt file in /etc/semaphore/requirements.txt.  I've also tried using the venv python binary to install it directly, such as /opt/semaphore/apps/ansible/9.4.0/venv/bin/pip3 install -r /etc/semaphore/requirements.txt
Is there a new way to install python modules so that inventory scripts can work?  Am I missing something?
Impact
Ansible (task execution), Docker
Installation method
Docker
Database
Postgres
Browser
Firefox
Semaphore Version
v2.10.32-f33944e-1729509451
Ansible Version
No response
Logs & errors

No /tmp/semaphore/repository_3_75/playbooks/legacy_automation/collections/requirements.yml file found. Skip galaxy install process.

No /tmp/semaphore/repository_3_75/playbooks/legacy_automation/requirements.yml file found. Skip galaxy install process.

No /tmp/semaphore/repository_3_75/playbooks/legacy_automation/roles/requirements.yml file found. Skip galaxy install process.

No /tmp/semaphore/repository_3_75/playbooks/legacy_automation/requirements.yml file found. Skip galaxy install process.

ansible-playbook [core 2.16.12]

  config file = /tmp/semaphore/repository_3_75/ansible.cfg

  configured module search path = ['/tmp/semaphore/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']

[DEPRECATION WARNING]: [defaults]collections_paths option, does not fit var

  ansible python module location = /opt/semaphore/apps/ansible/9.4.0/venv/lib/python3.11/site-packages/ansible

  ansible collection location = /tmp/semaphore/repository_3_75/collections:/tmp/semaphore/collections:/etc/ansible/collections

  executable location = /opt/semaphore/apps/ansible/9.4.0/venv/bin/ansible-playbook

naming standard, use the singular form collections_path instead. This feature

will be removed from ansible-core in version 2.19. Deprecation warnings can be

disabled by setting deprecation_warnings=False in ansible.cfg.

  python version = 3.11.10 (main, Sep 11 2024, 09:58:40) [GCC 13.2.1 20231014] (/opt/semaphore/apps/ansible/9.4.0/venv/bin/python3)

  jinja version = 3.1.4

  libyaml = True

Using /tmp/semaphore/repository_3_75/ansible.cfg as config file

setting up inventory plugins

Loading collection ansible.builtin from

host_list declined parsing /tmp/semaphore/repository_3_75/inventory/legacy/dynamic_db_inventory.py as it did not pass its verify_file() method

auto declined parsing /tmp/semaphore/repository_3_75/inventory/legacy/dynamic_db_inventory.py as it did not pass its verify_file() method

yaml declined parsing /tmp/semaphore/repository_3_75/inventory/legacy/dynamic_db_inventory.py as it did not pass its verify_file() method

toml declined parsing /tmp/semaphore/repository_3_75/inventory/legacy/dynamic_db_inventory.py as it did not pass its verify_file() method

[WARNING]:  * Failed to parse

/tmp/semaphore/repository_3_75/inventory/legacy/dynamic_db_inventory.py with

  File "/opt/semaphore/apps/ansible/9.4.0/venv/lib/python3.11/site-packages/ansible/inventory/manager.py", line 293, in parse_source

    plugin.parse(self._inventory, self._loader, source, cache=cache)

  File "/opt/semaphore/apps/ansible/9.4.0/venv/lib/python3.11/site-packages/ansible/plugins/inventory/script.py", line 152, in parse

script plugin: Inventory script

(/tmp/semaphore/repository_3_75/inventory/legacy/dynamic_db_inventory.py) had

    raise AnsibleParserError(to_native(e))

  File "/opt/semaphore/apps/ansible/9.4.0/venv/lib/python3.11/site-packages/ansible/inventory/manager.py", line 293, in parse_source

    plugin.parse(self._inventory, self._loader, source, cache=cache)

  File "/opt/semaphore/apps/ansible/9.4.0/venv/lib/python3.11/site-packages/ansible/plugins/inventory/ini.py", line 138, in parse

    raise AnsibleParserError(e)

an execution error: Traceback (most recent call last):   File

"/tmp/semaphore/repository_3_75/inventory/legacy/dynamic_db_inventory.py", line

3, in <module>     import psycopg2 ModuleNotFoundError: No module named

'psycopg2'

[WARNING]:  * Failed to parse

/tmp/semaphore/repository_3_75/inventory/legacy/dynamic_db_inventory.py with

ini plugin:

/tmp/semaphore/repository_3_75/inventory/legacy/dynamic_db_inventory.py:3:

Expected key=value host variable assignment, got: psycopg2

[WARNING]: Unable to parse

/tmp/semaphore/repository_3_75/inventory/legacy/dynamic_db_inventory.py as an

inventory source

[WARNING]: No inventory was parsed, only implicit localhost is available

[WARNING]: provided hosts list is empty, only localhost is available. Note that

the implicit localhost does not match 'all'

Loading callback plugin default of type stdout, v2.0 from /opt/semaphore/apps/ansible/9.4.0/venv/lib/python3.11/site-packages/ansible/plugins/callback/default.py

Skipping callback 'default', as we already have a stdout callback.

Skipping callback 'minimal', as we already have a stdout callback.

Skipping callback 'oneline', as we already have a stdout callback.

Manual installation - system information
No response
Configuration
No response
Additional information
No response

This is probably a duplicate of #2464 which removed all ENV vars from the Semaphore runner.

@Omicron7  thanks for that, yeah I think you are right.  Reverting to v2.10.31-2a8f7cf-1729425177 and my original workflow works, which was installing requirements via an Ansible task


Serveless Dreidel #day1

Please provide the following information for your submission:
What is your name? Mofope Ojosh
Where is your GitHub Repo? https://github.com/mofopeojosh/serverless-dreidel
What Challenge is this for? 1
(Optional) Anything else we should know? Javascript | Lagos, Nigeria

THANK YOU FOR YOUR #25DaysOfServerless SUBMISSION
We checked out your repository.
We're thrilled to say your solution is now listed in our Hall of Fame
Thank you for your contributions!
This issue is now resolved! 🎉


[PATCH] Fixed bug where typing the user name quickly would crash the app.

closes #237
Cause:
When calling an API, the endpoint verifies that the user trying to access the endpoint has the appropriate role. The role is fetched by the auth0 API. When typing quickly the name of the user, this generated a lot of request to the auth0 API. This caused the app to crash since auth0 blocked the requests.
Fix:
Instead of calling the auth0 API each time to get the role of the user, save the role in the JWT token. This fixed the issue.
Screenshot:

Good fix! However, change the prefix of the PR to PATCH.

Done


Inquiry if horizontal scroller-ish is available?

Hi I am new to beaupy and have some queries.
Does beaupy allow some way where someone can select in a horizontal bar, like volume where you grab the dot and move around. So i want to basically let someone choose a number(including decimal till 2 places) between 0 to 14(pH) and i was hoping instead of letting someone type it, maybe scroll horizontally.
Is there any other alternative beaupy offers?
Also can you refer some docs/example which prevents the output from disappearing. Like i want things to be printed below each other.
Thanks!

Hi @AnirudhG07, this type of UI element is currently not supported, nor do I think it is within the scope of beaupy.
I can image it being implemented on top of select functionality in questo (beaupy's  underlying framework), but it is not supported out of the box and questo is poorly documented at the moment, so it would be an effortful endeavor. I also can't think of any alternative library that would implement this sort of slider element in terminal.
As for your second question - persistent output is currently not supported, but I think it should be easy enough to implement, I'll look into it in very near future.

Thanks for the answer.
It would be great if you could give an option to switch on/off the persistence. That would really helpful since sometimes people would like to see what they chose, especially in scientific community where you just confirm the inputs chosen are correct or not. I am forced to use inquirer because of that, though some of my tools use beaupy cause i like the dissapearing part.

There is now the option to keep CLI elements displayed after their context has ended. It's controlled by Config.transient option. It defaults to True, setting it to False will ensure it the elements remain visible. It's published to PyPI as beaupy==3.9.0

damn, that was fast. respects and thanks!!! i ll look into it for sure!


build safe convenience wrapper for git_remote_ls

Documentation for git_remote_ls shows that for it to work, a connection must be established to a remote first. When a subsequent connection is made, retrieved remote heads are destroyed and replaced with a new set.
This manual template locks the remote during execution of 3 actions (git_remote_connect, git_remote_ls, git_remote_disconnect) and copies all the data retrieved from git_remote_ls into memory for nodegit consumption.
The other contributing factor for using a manual template here is git_remote_ls has the only triple pointer use case in libgit2, so writing additional handlers for one case is overkill, especially when considering the volatility of the memory being retrieved. Complications that will exist if there is ever a good reason to build triple pointer handling into our generation system will be handling the bounds of the retrieved double pointer, as there will probably be a corresponding size argument.

is there a way to use this but for a specific branch?

Can sb please tell me how to use this? I can´t find it in the documentation
Just want to get a list of all remote branches from remote without fetching anything like "git ls-remote<EMAIL_ADDRESS>

@Mklueh Looking at the unit test helps :)   Looks like a function on the response:
return this.repository.getRemote("origin")
      .then(function(remote) {
        return remote.referenceList();
})


Yii MongoDB ''auth fails""

Yii mongodb auth fails
I can't connection to mongodb from yii2
When i want use gii with mongo i have exception

In nginx error.log
2016/07/08 15:12:11 [error] 24438#0: *37 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Class 'MongoDB\Driver\Manager' not found in /home/alexey/www/vendor/yiisoft/yii2-mongodb/Connection.php on line 355" while reading response header from upstream, client: <IP_ADDRESS>, server: localhost, request: "GET /gii1/default/view?id=mongoDbModel HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "localhost", referrer: "http://localhost/gii1"

In web.php
'mongodb' => [
            'class' => '\yii\mongodb\Connection',
            'dsn' => 'mongodb://localhost:27017/admin'
        ],

Additional info

Q
A

Yii version
2.0.8

Yii MongoDB version
2.1

MongoDB server version
3.2

PHP version
5.5.9

Operating system
Ubuntu 14.04

Are you able to connect your database from other client?

I can connect with db  from MongoChef, when i add 'defaultDatabaseName' i have next exception

I can connect with db from MongoChef

Without username and password?

No, i have remote mongodb on my server, and i connecting mongodb://root:mypass@mysite:27017/admin

Then why your dsn does not contain it?

I am closing this as incorrect usage.


Support setting min/max values for series analysis plots in constants_pdef.py

The current scales generated for the series analysis plots are based on min/max values for a given statistic.  This can lead to misleading representations.  The user should have an option to define the scales for their data in the constants_pdef.py parameter/config file.

Now that constants_pdef.py is no longer employed, allow users to do this in the appropriate MET+ config file, use case config file, example config file, or custom config file.

constants_pdef.py is no longer used.  Instead, allow user to set min/max values in the appropriate METplus config file (e.g. in a use case, this would be the config file in the parm/use_cases/examples directory)


[5.5] Always use Str:: class.

Always use Str:: class.

Man, you really don't like these helper methods 😉


Star Trek Armada: in game bik video not rendered correctly

OS: Windows 11
Armada-fix: 2023/10/03 (use Dd7to9)
dxwrapper.dll 1.1.6900.22
Can be observed in Federation mission 3, or any other mission that played bik video.

Normal:

The normal screenshot was using 2023/04 fix (use DDrawCompat)
dxwrapper.dll 1.0.6615.21

That is the same thing that happens in #241 and #94.  It is a known issue with a number of Direct3D games when using dd7to9.  You could try disabling high DPI and seeing if that helps.  It has helped in some cases.

High DPI was already disabled here. (Never enabled it before)
Any other option in dxwrapper that could help this?

I don't think there are any settings in dxwrapper that can fix this right now.  It seems like the issue is that the game keeps writing to the same surface on top of itself causing it to be washed out.  I believe I need to clear the surface before letting the game write to the surface again.  I am just not quite sure what is the trigger to know when to clear the surface.  I plan to look into this later.

This issue should be fixed in the latest build.  You can download it here:  dxwrapper.zip

Confirmed this is fixed in above build. Thank you!!


After a five successful execution I get the input as output

I am iterating over a set of files which are delivering the input for a semantic function. This works fine for the first five iterations, but from this point on I get as result of the semantic function the provided input.
This is my code:
import semantic_kernel as sk
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion

from Plugins.OrchestratorPlugin.OrchestratorPlugin import Orchestrator

async def main(folder_name : str):
    kernel = sk.Kernel()

    deployment, api_key, endpoint = sk.azure_openai_settings_from_dot_env()
    kernel.add_chat_service("chat_completion", AzureChatCompletion(deployment, endpoint, api_key))

    plugins_directory = "./Plugins"

    invoice_extractor_plugin = kernel.import_semantic_skill_from_directory(
        plugins_directory,
        "InvoiceExtractorPlugin",
    )

    # iterate over txt files in folder and extract fields and store the result in the same folder with the same name but fields_ as prefix

    for file in os.listdir(folder_name):
        if file.endswith(".txt"):
            with open(folder_name + "/" + file, "r", encoding="utf-8") as f:
                text = f.read()
            variables = sk.ContextVariables()
            variables["input"] = text
            print(f"Start: {file}")
            result =  (await kernel.run_async(
                invoice_extractor_plugin["ExtractFields"],
                input_vars=variables,
            )).result.strip()

            with open(folder_name + "/fields_" + file, "w", encoding="utf-8") as f:
                f.write(result)

            print(f"Done: {file}")

if __name__ == "__main__":
    import asyncio
    asyncio.run(main(folder_name="C:/Users/user/development/temp"))```

Nevermind, it is a quota issue plus suboptimal error handling in Azure.

@eickeBuecking Can you explain how you fixed this? I'm getting the same issue the output is the same as input. The code "finishes" in a second. I suspect GPT was not invoked successfully.

In my case the API was invoked and replied with a error message with regards to the exceeded quota. But I only found out doing direct curls against the API, because the error message got lost somewhere. I assume the OpenAI-SDK is the culprit, because I saw the same behavior - returning the input document instead of an error - when directy using openai sdk, without semantic-kernel as a middleware in between.
I solved by providing a higher contingent to the respective model.


Ledger Nano X - Unable to add collateral

I cannot seem to add collateral to interact with smart contracts.  The UI says connect ledger to do this but the button to Confirm remains greyed out despite the ledger being connected and the ADA app being open.  Other than this, the legder integration is awesome!

I have the same problem with the same wallet!

Did you manage to solve the issue?

Nope, U?

Not at all. I wanted to try to reinstall and unistall. Maybe adding the
collateral when the Nami wallet is empty will do.
I'm not sure but without that funciont it's not really useful.
Regards,
On Mon, Apr 25, 2022, 12:45 hammertime71 @.***> wrote:

Nope, U?
—
Reply to this email directly, view it on GitHub
https://github.com/Berry-Pool/nami-wallet/issues/529#issuecomment-1108074150,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AFVAPVHDTPBZ2TWAWELJUXTVGYPP7ANCNFSM5TZ5FYGA
.
You are receiving this because you commented.Message ID:
@.***>

What I do at the moment is have a transactional wallet and the ledger.  The ledger is my Hodl wallet and when I need to do anything I send funds to the other wallet in Nami.  This is super easy and super quick.  You literally just choose the other wallet from the dropdown.  It is a decent workaround in the meantime.  The normal wallet interacts with the smart contracts but you still have your main holdings safe and secure with the ledger private key.

Hi,
I agree it's ok but then if you need to stake a considerable amount, for
example I have meld tokens from the ispo, then you need to rely on the nami
wallet seed. Which is fine but still ledger is totally bypassed.
Regards,
On Mon, Apr 25, 2022, 12:55 hammertime71 @.***> wrote:

What I do at the moment is have a transactional wallet and the ledger. The
ledger is my Hodl wallet and when I need to do anything I send funds to the
other wallet in Nami. This is super easy and super quick. You literally
just choose the other wallet from the dropdown. It is a decent workaround
in the meantime. The normal wallet interacts with the smart contracts but
you still have your main holdings safe and secure with the ledger private
key.
—
Reply to this email directly, view it on GitHub
https://github.com/Berry-Pool/nami-wallet/issues/529#issuecomment-1108077500,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AFVAPVDQAW2WKBGL5IJ33Z3VGYQVBANCNFSM5TZ5FYGA
.
  My smart contract interactions are purely for buying NFT's at the moment so they are in and out.  I hope someone looks at this thread and sorts it out.

Now that ledger released version 4.0.0 of their Cardano app it should be technically possible to support smart contracts and collateral. Two things have to happen: users have to upgrade their Cardano app using ledger live / NAMI has to implement the feature


Requesting update to latest DDoc commit

Summary
The latest Discord Documentation commit includes auto-moderation but more importantly drops the $ for the IDENTIFY properties object (https://github.com/discord/discord-api-docs/commit/6755c355caaf2e1c321dc7de17e1e257d9aa2db5). Updating the payloads for D#+'s (de)serialization tests would be highly beneficial for us.
Thank you for your time and dedication to this repo. It truly does help us a lot.
Link to documentation
https://github.com/discord/discord-api-docs/blob/6755c355caaf2e1c321dc7de17e1e257d9aa2db5/docs/topics/Gateway.md#identifying
Checklist

[X] I have searched the open issues for duplicates.
[X] I checked if the payload is already in the repository.

Sure, I will try to merge #8 this night. However, I don't have any example payload for the IDENTIFY event, I might add it when I have time, thanks!


Add support for custom containerd temp location

Signed-off-by: Justin Terry (VM<EMAIL_ADDRESS>

@crosbymichael - FYI verified that extraction does use this properly when setting --temp either via config or invocation flags.

Codecov Report

Merging #2703 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master    #2703   +/-   ##
=======================================
  Coverage   43.59%   43.59%
=======================================
  Files         101      101
  Lines       10722    10722
=======================================
  Hits         4674     4674
  Misses       5314     5314
  Partials      734      734

Flag
Coverage Δ

#linux
47.28% <ø> (ø)
:arrow_up:

#windows
40.72% <ø> (ø)
:arrow_up:

Impacted Files
Coverage Δ

services/server/config.go
0% <ø> (ø)
:arrow_up:

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 15f19d7...bfb387a. Read the comment docs.


Fix old client creation

fix get feature from registry
Make the old client work with new schema

Also seems test is failed? Can you fix those? https://github.com/linkedin/feathr/runs/7518222803?check_suite_focus=true


Setting priority high will have no effect on the downloading order of the images

I was under the impression that the priority will give precedence to the high priority images when in fact when I display 5 images on the screen and give to one of them high priority and low priority to all the rest, I don't see that the high priority one is downloading first, it looks random.
Maybe the priority is broken?

@Rotemy could you figure this out?

@sanjaypojo We just gave up and wrote our own implementation for caching :(

@Rotemy thanks for your note! Our use case doesn't need advanced prioritization, but reading through the Glide documentation, it looks like priority is handed off to Glide which decides what to do. Glide gives no guarantees about the order, but tries to perform some kind of group level optimization that it thinks is best. So maybe it's working, but that's just how glide implemented it?

hmm, maybe. Our main issue is that we didn't know how to control the number of downloads at the same time. So we wanted to first make sure we only download 3 images at the same time + have a queue with prioritization. It's working great for us but required us to invest a couple of days.


SwooleSocket报错

Stack trace:
#0 vendor/longlang/phpkafka/src/Client/SwooleClient.php(130): longlang\phpkafka\Socket\SwooleSocket->recv()
#1 {main}
thrown in vendor/longlang/phpkafka/src/Socket/SwooleSocket.php on line 132
[mutex.cc : 2338] RAW: Check w->waitp->cond == nullptr failed: Mutex::Fer while waiting on Condition
PHP Fatal error:  Uncaught longlang\phpkafka\Exception\SocketException: Could not recv data from stream,  [0] in vendor/longlang/phpkafka/src/Socket/SwooleSocket.php:132

Kafka 环境是

自建

Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

swoole
Swoole => enabled
Author => Swoole Team<EMAIL_ADDRESS>Version => 4.6.4
Built => Mar 22 2021 11:44:09
coroutine => enabled with boost asm context
epoll => enabled
eventfd => enabled
signalfd => enabled
cpu_affinity => enabled
spinlock => enabled
rwlock => enabled
openssl => OpenSSL 1.0.2k-fips  26 Jan 2017
pcre => enabled
zlib => 1.2.7
mutex_timedlock => enabled
pthread_barrier => enabled
futex => enabled
async_redis => enabled
Directive => Local Value => Master Value
swoole.enable_coroutine => On => On
swoole.enable_library => On => On
swoole.enable_preemptive_scheduler => Off => Off
swoole.display_errors => On => On
swoole.use_shortname => Off => Off
swoole.unixsock_buffer_size => 8388608 => 8388608
# PHP 7.4.12 (cli) (built: Dec 30 2020 11:56:19) ( NTS DEBUG )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

请按照模版提问，并提供可复现代码


[RESOLVED] Interface eth0(): High error rate (>2 for 5m)

Problem started at 09:00:34 on 2023.05.09
Problem name: Interface eth0(): High error rate (>2 for 5m)
Host: S100-Primario
Severity: Warning
Operational data: errors in: 0, errors out: 0
Original problem ID: 20435
Event details in Zabbix: http://<IP_ADDRESS>/tr_events.php?triggerid=23483&eventid=20435

Problem has been resolved in 2m 55s at 09:03:29 on 2023.05.09
Problem name: Interface eth0(): High error rate (>2 for 5m)
Host: S100-Primario
Severity: Warning
Original problem ID: 20435


Loading from grid

To support "Loading from grid" the „Working Mode“, Register 13895 (3647H) must be changed from backup_mode (2) to time_mode (1) while some other register (start and end time and loading power) can be set to fixed values either via modbus or via "ampere.home" App local connection or "eSolar O&M" App loacal connection.

I tested this on my site and it's working. @dboeni, you can contact me via<EMAIL_ADDRESS>for further informations
H2-3~6K-S2 single phase communication protocol -2022.12.02-EN_schreibbare_Register.pdf
Ampere.Storage.Pro is SAJ-H2 with a new label.

I will include it in one of the next versions


Handle pre-release channels

Is your feature request related to a problem? Please describe.
I can't properly create the beta versions of my project.
Describe the solution you'd like
Manage pre-release depending on the current branch and a list of the pre-release branches in a config file.
Describe alternatives you've considered
Instead of getting the pre-release channel (for example beta) with the config and the current branch, the user could give the channel in the version sub-command.
Additional context
Here is how semantic-release handle it: https://github.com/semantic-release/semantic-release/blob/cd6136d67ee83b262a34dd7a230e1e3ae4799ed0/docs/usage/workflow-configuration.md#pre-release-branches
The advantage of this tool over semantic-release (in my opinion) is that you just calculate the next version and change-log file when semantic-release goes to far.

so what you want is to enchance the .versionrc version file to include:
branches:
  - master
      name: beta
      prerelease: true
  - alpha-branch
      name: alpha
      prerelease: true

which then adds to the version 1.0.0-beta.1 or 1.0.0-beta.2 .. or  1.0.0-alpha.1 .. depending on the branch convco version is ran.
When the pre-release is set to false it would then ignore this and just set the version to 1.0.0?
Another option would just to add the property prerelease: <name> in the .versionrc file. As this could be changed easily in the branch. E.g. in master this could be prerelease: beta and in alpha-branch this could be pre-release: alpha.
or would it be better to provide convco version --prerelease beta which would imply convco version --bump --prerelease beta  and let it up to the ci script/pipeline to set the right version e.g. based on a label of the pull request or in any other way?
What do you think is the most convenient way?

Both would be nice and do the job, but the most permissive (and maybe the simplest) would be to provide the prerelease param to the cli: convco version --prerelease beta to get the latest beta prerelease of the current branch and convco version --bump --prerelease beta to get the next beta prerelease.


Add correct footer links

The footer links need to go to the right place:
Privacy https://wellcome.ac.uk/about-us/terms-use
Cookies https://wellcome.ac.uk/about-us/terms-use
Press https://wellcomecollection.org/press/press-releases

The TripAdvisor logo doesn't lend itself to being scaled down very well. Does it count as 'social'?

@davidpmccormick Yeah, I see your point. I think we would still want to include it in the social bit of the footer, but it also inconveniently present us with the odd 7 accounts.
We'll keep it closed for now and leave as is until I have more info from the social media folks about which accounts they're intending to maintain.


Fix exception dependencies

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

3 of 3 (100.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage decreased (-0.02%) to 95.667%

Totals

Change from base Build<PHONE_NUMBER>:
-0.02%

Covered Lines:
4061

Relevant Lines:
4074

💛  - Coveralls

:tada: This PR is included in version 6.102.6 :tada:
The release is available on:

v6.102.6
GitHub release

Your semantic-release bot :package::rocket:

:tada: This PR is included in version 7.0.0-beta.4 :tada:
The release is available on:

v7.0.0-beta.4
GitHub release

Your semantic-release bot :package::rocket:


Show pictures whose urls are node properties

I want to show pictures related to persons in my database. These pictures are stored on my website and a typical url would be https://tapitta.be/wp-content/uploads/I3mark_1.jpg
This url is a property (i.url) of the pictures node i:Pictures:
 MATCH (p:Producer)-[r:HAS_NAME_VARIANT]->(n:Name) WHERE n.NameID = $neodash_name_nameid OPTIONAL MATCH (p)-[r2:HAS_PICTURES]->(i:Pictures {type: "mark"}) RETURN i.url
Would it be possible to show these pictures, either in a markdown report, an iFrame or in any other way?
Thanks.

Hi gcthys, we use react markdown and as such the image url needs to be wrapped in the format . When this is done, react markdown will identify the desired image format and display the image in your markdown. To achieve this, we can modify our cypher query. In your case it would look something like:
'MATCH (p:Producer)-[r:HAS_NAME_VARIANT]->(n:Name)
WHERE n.NameID = $neodash_name_nameid
OPTIONAL MATCH (p)-[r2:HAS_PICTURES]->(i:Pictures {type: "mark"})
RETURN '![Image](' + i.url + ')' AS imageUrl'
This might give you unwanted text on your markdown on top of your image if you feed the query directly into the markdown. To avoid this you can set the link as a global parameter (i.e. $neodash_image_link = '', and feed $neodash_image_link into the markdown cypher editor.
I hope this helps. If you have any more issues, please let us know.

Hi @jacobbleakley-neo4j ,
thanks for your suggestion.
I follow you upto your point about the unwanted text on the markdown (which I dont want indeed).
Can you tell me how to set all the links resulting from the query (we're talking about 100s and growing) as global parameters? As far as I understand, global parameters can only be set manually in the general settings, or did I miss something (as often happens :-).

Global parameters can be set manually in the db, but also using report actions or parameter select. In your case I'd recommend looking into implementing report actions on a chart or table, i.e. create a table with one column of urls and one column of corresponding names, set up 'on-click cell  containing url, set $neodash_parameterName to url. Then when you click on the cell of the link corresponding to the name you want to see, the image will appear in your markdown (providing the parameter name is specified in the markdown cypher editor) .
If you look into report actions, hopefully this will make sense. Please let us know if you require any more guidance or clarification.

Hi @jacobbleakley-neo4j ,
That works perfectly!
(I use report actions quite extensively but I never made the connection with parameters in markdown - as I wrote: I missed something again! :-)
Thanks!
btw, you wouldn't have an equally magival solution to https://github.com/neo4j-labs/neodash/issues/549, would you?


Staging cannot reload the current scene

A scene loaded by the staging system cannot currently ask for itself to be reloaded (e.g. to reset itself). It's also a bit of a pain emitting the scene-control signals by string name. Instead XRToolsSceneBase should have methods for:

exit()
load(p_scene_path)
reset()

Resolved and demonstrated in godot-xr-template project.


Provide workshop poster

Request to provide a printable workshop poster to put up in organizations.

@eglerean where do you keep the one you designed for Aalto?
Maybe we could make a generalized version of it available for download on the workshop page?

Available here: https://github.com/coderefinery/coderefinery-artwork/tree/main/events/2024-09-cr


Small build issue in embedded JUCE

As reported here:
https://aur.archlinux.org/packages/ysfx-git#comment-872572
/home/harv/.cache/yay/ysfx-git/src/ysfx-build/_deps/juce-src/modules/juce_gui_basics/windows/juce_ComponentPeer.h:504:18: error: ‘exchange’ is not a member of ‘std’

most likely this file lacks #include <utility>

This is update to juce 7.0.0 in 543bc11.
IIRC this fixes the problem.

it does ! thanks !


Use Angle Brackets Instead of Quotes for Include Files

In a situation where I want to provide a custom pb.h outside the nanopb project source, compiling reverts to the local pb.h because of the use of double quotes.
#include "pb.h"

should read
#include <pb.h>

Hmm, why would you want to do that?
In general it doesn't sound like a good idea, because the pb.h definitions are closely tied with the source code, and getting out of sync could cause all kinds of weird bugs.

I want to keep the original source untouched so I can see what changes I've made. Any time I update from one version of nanopb to a newer one I expect to update my custom pb.h but this allows me to know what changes I have made to customize it. I'm not using Git submodules to import the code into my project. It's just extracting the source directly, hence the desire not to touch the original source code.

Why do you want to modify pb.h? If you just want to alter some defines, you can do that in compiler settings, or using the syshdr mechanism.

That's my workaround, yes, but the header does claim I can modify that file directly. :)
There's no sense in negotiating the change if you're against it. I likely won't convince you and it's not a broken feature or anything. Call it "my preference" and maybe I'm in the minority so feel free to close this issue.

Sorry if this sounds harsh, I'm just trying to get to the bottom of the real issue :)
It's true that you won't convince me to make including pb.h from outside the source tree easier. But if the issue is indeed difficulty in modifying the settings, it might be solvable by some other means.
The "you can edit this pb.h" comment was added because people were editing the generated .pb.h files instead, and a #define there that's not included in rest of the code caused all kinds of hard-to-debug issues being reported. Not ideal, but best I've figured so far.

No worries, I understand your point of view. Thanks for the lively discussion.

Hi!
I'm a little bit confused:
the generated file uses already an #include <pb.h>
e.g.
~/tmp/github/nanopb/generator/protoc --nanopb_out=. rfm.proto

generates the file rfm.pb.h:
/* Automatically generated nanopb header */
/* Generated by nanopb-0.4.2-dev */

#ifndef PB_RFM_RFM_PB_H_INCLUDED
#define PB_RFM_RFM_PB_H_INCLUDED
#include <pb.h>

#if PB_PROTO_HEADER_VERSION != 40
#error Regenerate this file with the current version of nanopb generator.
#endif
...

Because of this the folder containing these generated files must be in the compilers' search path which would not be necessary if quotes were used (and which should be the correct behavior in my point of view).
If I haven't missed a pull request, then I don't understand the generated code ...
Best regards,
Michael.

@mibcat The generated files use #include <pb.h> because in general, they are not in the same directory as nanopb source. On the other hand, nanopb source files such as pb_encode.c use #include "pb.h", because they are in the same directory as nanopb source.

Thanks for your feedback !
I'm using Eclipse CDT managed build and my project structure looks like:
src
├── main.cpp
├── protobuf
│   ├── pb_common.c
│   ├── pb_common.h
│   ├── pb_decode.c
│   ├── pb_decode.h
│   ├── pb_encode.c
│   ├── pb_encode.h
│   ├── pb.h
│   ├── README.md
│   ├── rfm.pb.c
│   ├── rfm.pb.h
│   └── rfm.proto

The generated protobuf  header rfm.pb.h is included in main.cpp by:
#include <protobuf/rfm.pb.h>

With the original generated code (using angle brackets) the project build fails because protobuf is not added explicitly to the compilers' search path - only 3 additional paths -I (shortened with ...):
Building file: ../src/protobuf/rfm.pb.c
Invoking: Cross GCC Compiler
arm-linux-gnueabihf-gcc
-std=c11 -DRH_PLATFORM=RH_PLATFORM_RASPI_PIGPIOD
-I"/hom ... aspi/src"
-I"/hom ... aspi/cross_compile/arm-linux-gnueabihf-output/include"
-I"/hom ... aspi/src/RadioHead"
-O0 -g3 -Wall -Wextra -c -fmessage-length=0 -MMD -MP -MF"src/protobuf/rfm.pb.d" -MT"src/protobuf/rfm.pb.o" -o "src/protobuf/rfm.pb.o" "../src/protobuf/rfm.pb.c"
In file included from ../src/protobuf/rfm.pb.c:4:0:
../src/protobuf/rfm.pb.h:6:16: fatal error: pb.h: No such file or directory
src/protobuf/subdir.mk:27: recipe for target 'src/protobuf/rfm.pb.o' failed
 #include <pb.h>
                ^
compilation terminated.
make: *** [src/protobuf/rfm.pb.o] Error 1
"make all" terminated with exit code 2. Build might be incomplete.

If changing the include to quotes #include <pb.h> the path protobuf must not be added to the compilers' search path to get a successful build:
Building file: ../src/protobuf/rfm.pb.c
Invoking: Cross GCC Compiler
arm-linux-gnueabihf-gcc
-std=c11 -DRH_PLATFORM=RH_PLATFORM_RASPI_PIGPIOD
-I"/hom ... aspi/src"
-I"/hom ... aspi/cross_compile/arm-linux-gnueabihf-output/include"
-I"/hom ... aspi/src/RadioHead"
-O0 -g3 -Wall -Wextra -c -fmessage-length=0 -MMD -MP -MF"src/protobuf/rfm.pb.d" -MT"src/protobuf/rfm.pb.o" -o "src/protobuf/rfm.pb.o" "../src/protobuf/rfm.pb.c"

Building file: ../src/main.cpp
Invoking: Cross G++ Compiler
arm-linux-gnueabihf-g++
-std=c++1y -DRH_PLATFORM=RH_PLATFORM_RASPI_PIGPIOD
-I"/hom ... aspi/src"
-I"/hom ... aspi/cross_compile/arm-linux-gnueabihf-output/include"
-I"/hom ... aspi/src/RadioHead"
-O0 -g3 -Wall -Wextra -c -fmessage-length=0 -MMD -MP -MF"src/main.d" -MT"src/main.o" -o "src/main.o" "../src/main.cpp"
Finished building: ../src/protobuf/rfm.pb.c

How could this behavior be explained ??

Sounds like normal behavior for cpp.
If you want to have quotes in the generated files, use the --library-include-format option:
python generator/nanopb_generator.py --library-include-format='#include "%s"' foobar.proto

Thanks - didn't know this option. This is exactly what I need :smiley: