[New RM] Add AzureAISearch

Goal
Add RM support for Azure AI Search.  Allows the use of custom datasets made available through Azure AI Search.
Changes

Updated requirements.txt to include azure-search-documents. This SDK wraps Azure's AI Search functionality.
Updated rm.py to include AzureAISearch implementation.
Updated the example script, run_storm_wiki_gpt.py, to include AzureAISearch support.
Updated README.md to include the new retrieval module component

Change Questions / Comments
We could do something akin to what was done for Google Search support: rather than install as part of requirements.txt, have the RM fail unless the user installs the proper pypi library.
Generated Files
I've attached a zip of the artifacts generated running the run_storm_wiki_gpt.py using the new rm. Data for the article sourced from part of dFusion's Genesis Knowledge Pool made available through Azure AI Search. Files in the zip include:

conversation_log.json
raw_search_results.json
storm_gen_article.txt
direct_gen_outline.txt
run_config.json
storm_gen_outline.txt
llm_call_history.jsonl
storm_gen_article_polished.txt
url_to_info.json

Formal_Verification_In_Smart_Contract_Development.tar.gz

@shaoyijia requested changes have been applied


Factory folders

Suggestion
it would be cool if you could subdivide you factory into folders to see how much resources and other things you need for a specific part of your factory.

Well luckily, this is going to come, in some form, with 2.0 :)


kata-deploy: should we error if no installable runtime found?

If kata-deploy does not find a container runtime it understands upon an installation attempt, should it fail in some obvious way? (I'm not sure how that works with a daemonset...)
I ran into a situation where I thought I had a cri-o runtime installed, but it appears maybe I did not. I ran kata-deploy, and it all looked like it worked, but there were no files in /opt/kata/* on my node...
Ultimately I execd into the running kata-deploy pod, which from a ps was happily sat on a sleep infinity, and had the appropriate mount points up etc....
So, I re-ran by hand the script:
sh-4.2# bash -x /opt/kata-artifacts/scripts/kata-deploy.sh install
+ set -o errexit
+ set -o pipefail
+ set -o nounset
+ crio_conf_file=/etc/crio/crio.conf
+ crio_conf_file_backup=/etc/crio/crio.conf.bak
+ containerd_conf_file=/etc/containerd/config.toml
+ containerd_conf_file_backup=/etc/containerd/config.toml.bak
+ shims=("qemu" "nemu" "fc")
+ main install
++ id -u
+ euid=0
+ [[ 0 -ne 0 ]]
++ get_container_runtime
+++ kubectl describe node kata-bionic-l0
++ local 'runtime=Name:               kata-bionic-l0
Roles:              master
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=kata-bionic-l0
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/master=
Annotations:        flannel.alpha.coreos.com/backend-data: {"VtepMAC":"ea:33:75:ef:a7:5e"}
                    flannel.alpha.coreos.com/backend-type: vxlan
                    flannel.alpha.coreos.com/kube-subnet-manager: true
                    flannel.alpha.coreos.com/public-ip: <IP_ADDRESS>
                    kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
                    node.alpha.kubernetes.io/ttl: 0
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Thu, 30 May 2019 09:41:38 +0000
Taints:             <none>
Unschedulable:      false
Conditions:
  Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----             ------  -----------------                 ------------------                ------                       -------
  MemoryPressure   False   Thu, 30 May 2019 10:37:40 +0000   Thu, 30 May 2019 09:41:34 +0000   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure     False   Thu, 30 May 2019 10:37:40 +0000   Thu, 30 May 2019 09:41:34 +0000   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure      False   Thu, 30 May 2019 10:37:40 +0000   Thu, 30 May 2019 09:41:34 +0000   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready            True    Thu, 30 May 2019 10:37:40 +0000   Thu, 30 May 2019 09:43:08 +0000   KubeletReady                 kubelet is posting ready status. AppArmor enabled
Addresses:
  InternalIP:  <IP_ADDRESS>
  Hostname:    kata-bionic-l0
Capacity:
 cpu:                44
 ephemeral-storage:  491205528Ki
 hugepages-1Gi:      0
 hugepages-2Mi:      0
 memory:             396168976Ki
 pods:               1100
Allocatable:
 cpu:                43
 ephemeral-storage:<PHONE_NUMBER>56
 hugepages-1Gi:      0
 hugepages-2Mi:      0
 memory:             395566576Ki
 pods:               1100
System Info:
 Machine ID:                 87e5bba784ee4228bdc88cbda09232ba
 System UUID:                4C4C4544-005A-3710-8034-B8C04F503232
 Boot ID:                    2218905c-be26-4aa7-8ff6-1c588716ad3f
 Kernel Version:             4.15.0-50-generic
 OS Image:                   Ubuntu 18.04.1 LTS
 Operating System:           linux
 Architecture:               amd64
 Container Runtime Version:  docker://18.6.1
 Kubelet Version:            v1.14.1
 Kube-Proxy Version:         v1.14.1
PodCIDR:                     <IP_ADDRESS>/20
Pods:                        not authorized
Events:                      <none>'
++ '[' 0 -ne 0 ']'
++ echo 'Name:               kata-bionic-l0
Roles:              master
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=kata-bionic-l0
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/master=
Annotations:        flannel.alpha.coreos.com/backend-data: {"VtepMAC":"ea:33:75:ef:a7:5e"}
                    flannel.alpha.coreos.com/backend-type: vxlan
                    flannel.alpha.coreos.com/kube-subnet-manager: true
                    flannel.alpha.coreos.com/public-ip: <IP_ADDRESS>
                    kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
                    node.alpha.kubernetes.io/ttl: 0
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Thu, 30 May 2019 09:41:38 +0000
Taints:             <none>
Unschedulable:      false
Conditions:
  Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----             ------  -----------------                 ------------------                ------                       -------
  MemoryPressure   False   Thu, 30 May 2019 10:37:40 +0000   Thu, 30 May 2019 09:41:34 +0000   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure     False   Thu, 30 May 2019 10:37:40 +0000   Thu, 30 May 2019 09:41:34 +0000   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure      False   Thu, 30 May 2019 10:37:40 +0000   Thu, 30 May 2019 09:41:34 +0000   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready            True    Thu, 30 May 2019 10:37:40 +0000   Thu, 30 May 2019 09:43:08 +0000   KubeletReady                 kubelet is posting ready status. AppArmor enabled
Addresses:
  InternalIP:  <IP_ADDRESS>
  Hostname:    kata-bionic-l0
Capacity:
 cpu:                44
 ephemeral-storage:  491205528Ki
 hugepages-1Gi:      0
 hugepages-2Mi:      0
 memory:             396168976Ki
 pods:               1100
++ awk '-F[:]' '/Container Runtime Version/ {print $2}'
Allocatable:
 cpu:                43
 ephemeral-storage:<PHONE_NUMBER>56
 hugepages-1Gi:      0
 hugepages-2Mi:      0
 memory:             395566576Ki
 pods:               1100
System Info:
 Machine ID:                 87e5bba784ee4228bdc88cbda09232ba
 System UUID:                4C4C4544-005A-3710-8034-B8C04F503232
 Boot ID:                    2218905c-be26-4aa7-8ff6-1c588716ad3f
 Kernel Version:             4.15.0-50-generic
 OS Image:                   Ubuntu 18.04.1 LTS
 Operating System:           linux
 Architecture:               amd64
 Container Runtime Version:  docker://18.6.1
 Kubelet Version:            v1.14.1
 Kube-Proxy Version:         v1.14.1
PodCIDR:                     <IP_ADDRESS>/20
Pods:                        not authorized
Events:                      <none>'
++ tr -d ' '
+ runtime=docker
+ '[' docker == cri-o ']'
+ action=install
+ '[' -z install ']'
+ '[' docker == crio ']'
+ '[' docker == containerd ']'
+ sleep infinity

It looks like it found docker as the runtime, but then silently fails to install kata. It would be nice if it failed noisely, and kubectl describe could then give some clues to the problem?
/cc @egernst @ganeshmaharaj

The daemonset shouldn't fail, as you could have a heterogeneous cluster.
I would recommend you look at whether the installation for the particular node succeeded.  To do so, run: kubectl get nodes --show-labels | grep kata-runtime
If installation succeeds, you'll see the node labeled kata-runtime=true


[Bug]: missing top y-axis tick when no autoMinValue is set

Tremor Version
3.12.2
Link to minimal reproduction
https://github.com/tremorlabs/tremor/compare/main...adamhenson:tremor:repro/unequal-y-axis-ticks
Steps to reproduce
Set prop minValue to 0 and maxValue to 7000.
What is expected?
6000 should be a y-axis tick and a corresponding grid line should render.

In the screenshot below, the minValue of 0 isn't honored, which seems expected since we set autoMinValue. But, with autoMinValue, ticks are evenly spread.

What is actually happening?
There is a gap where 6000 would be.

What browsers are you seeing the problem on?
No response
Any additional comments?
I don't think this is expected behavior, but please correct me if I'm wrong. I started looking at how tremor uses recharts YAxis and CartisanGrid, but nothing is standing out to me. The next step is to pull down and dabble with recharts, but would prefer to find out any info first, if anyone has experienced this and if it's known.

This is indeed unexpected, I suppose it has to do with some internal defaults set by Tremor and/or Recharts, that can lead to some undesired outcomes. Maybe @nikolasrieble has some ideas where this should/can be addressed 🔎

I attempted to track this down in Recharts and it got really gnarly. I discovered that they actually import another package called recharts-scale. I identified the culprit line... or at least what seems to be the culprit. No idea how this is working as expected in other cases.
https://github.com/recharts/recharts-scale/blob/8e181785d20a686ce4f3f83a4b789fb61a32806f/src/getNiceTickValues.js#L249
When I make this change it works as expected (by hacking into the node_module or using npm link)
-       new Decimal(cormax).sub(new Decimal(0.99).mul(step)),
+      new Decimal(cormax),

The only reason why I got there is by an unreasonable amount of logging.
Arithmetic.rangeStep was returning [0, 2000, 4000] and new Decimal(cormax).sub(new Decimal(0.99).mul(step)) was returning 5020. After changing that part Arithmetic.rangeStep returns [0, 2000, 4000, 6000] and new Decimal(cormax) is 7000.
I don't really know what to make of all that. I don't think value Tremor passes would cause that. It seems like it could be a bug in recharts-scale, but that file was last touched 4 years ago 😕

recharts maintainer piping in: recharts-scale is a mysterious library to the current maintainers of recharts that existed before any of us. We haven't touched it because we don't even have npm publish permissions to it. Most likely we will port it to the recharts repo so we can refactor and manage it more directly.
Timeline of this could be a while, apologies for the bug


How to Print Images using Bluetooth Serial?

Hi I am trying to print a captured signature using the angular-signature-pad. Different ways that I tried are convert the image to base64 and convert the image to bytes. Both does not work when I print the image.

Please only use github issues to report issues related with ionic, we don't do support here, thanks!


[Feature] Override the command used to generate the plan

In our environment, we use aws-vault to manage credentials. This means we need to prefix our commands with something like aws-vault exec profilename -- terraform plan....
It would be nice if we could override the default command used to plan.
Currently, in order to take advantage of this extension, I defined a few (fairly unpleasant!) tasks to use it even though the teraform plan command doesn't work for me:
    // There must be a way to call a task from another task with inputs, but I couldn't find it.
    {
      "label": "terraform plan account-setup dc",
      "type": "shell",
      // Creates plan at TMPFILE, creates tfgraph at TMPFILE.tfgraph, saves the dir it was run from at TMPFILE.cwd, opens the tfgraph in vscode
      // assumes your aws-vault profile is called 'di' and you have https://marketplace.visualstudio.com/items?itemName=saramorillon.terraform-graph
      "command": "TMPFILE=$(mktemp); pwd > ${TMPFILE}.cwd && aws-vault exec di -- terraform plan -out=${TMPFILE} && terraform show -json ${TMPFILE} > ${TMPFILE}.tfgraph && code -r ${TMPFILE}.tfgraph",
      "isBackground": false,
      "presentation": {
        "echo": true,
        "reveal": "always",
        "focus": true,
        "panel": "shared",
        "showReuseMessage": true,
        "clear": true
      },
      "options": {
        "cwd": "${workspaceFolder}/terraform/account-setup/xxx/",
        "statusbar": {
          "text": "terraform plan",
          "tooltip": "terraform plan"
        }
      }
    },
    {
      "label": "terraform plan dyna-mo_connect prod",
      "type": "shell",
      // Creates plan at TMPFILE, creates tfgraph at TMPFILE.tfgraph, saves the dir it was run from at TMPFILE.cwd, opens the tfgraph in vscode
      // assumes your aws-vault profile is called 'di' and you have https://marketplace.visualstudio.com/items?itemName=saramorillon.terraform-graph
      "command": "TMPFILE=$(mktemp); pwd > ${TMPFILE}.cwd && aws-vault exec di -- terraform plan -out=${TMPFILE} && terraform show -json ${TMPFILE} > ${TMPFILE}.tfgraph && code -r ${TMPFILE}.tfgraph",
      "isBackground": false,
      "presentation": {
        "echo": true,
        "reveal": "always",
        "focus": true,
        "panel": "shared",
        "showReuseMessage": true,
        "clear": true
      },
      "options": {
        "cwd": "${workspaceFolder}/terraform/dyna-mo_connect/xxx-prod",
        "statusbar": {
          "text": "terraform plan",
          "tooltip": "terraform plan"
        }
      }
    },
    {
      "label": "terraform apply open plan",
      "type": "shell",
      // Takes current file, assumes it's a tfgraph, removes the .tfgraph extension to find the original plan, grabs TMPFILE.cwd to find the dir it should run in, applies the plan
      "command": "TMPFILE=\"$(echo ${file} | sed 's/\\.tfgraph//')\"; cd \"$(cat ${TMPFILE}.cwd)\"; aws-vault exec di -- terraform apply \"${TMPFILE}\"",
      "isBackground": false,
      "presentation": {
        "echo": true,
        "reveal": "always",
        "focus": true,
        "panel": "shared",
        "showReuseMessage": true,
        "clear": true
      }
    }

Hello, thank you for reporting this. It seems that the command "Generate Terraform Graph" is not satisfying. Another issue has been opened regarding this command.
For now I can see two main issues:

the default statement separator && does not work on every terminal
the default plan command does not satisfy all use cases

I'm wondering if keeping this command is relevant? Because it seems that every one has its own way of generating a plan. Actually I don't even use it myself, I rather use a powershell alias. What do you think about it?
Regarding your tasks, I see two features that could be implemented in this tool:

automatically open tfgraph file after creating it (relevant only if we keep the "Generate Terraform Graph" command)
apply the plan form the tfgraph file, maybe by adding an "apply plan" button in the editor. An issue has been open here for this improvement

Without more information, I'm closing this issue.


Build-time option to automatically uninstall NickelMenu if all configuration files are removed

Sounds sensible ;).
I'd make it trip only if the actual folder is gone, though.

I'd make it trip only if the actual folder is gone, though.

That's a good idea. It solves one of the potential issues I was thinking of.
The other thing is for people who install libnm manually (i.e. without the doc file). We don't want it deleting itself right away, which is why I think this should be a compile-time option, but it'd be nice to find a solution for this which can be built-in without adding too much unnecessary complexity.

Hmm, something along the lines or not tripping it either if it's the first time this version of libnm has been loaded?
The only thing that comes to mind right now would involve hiding a sentinel file somewhere to record the version that's been loaded and checking that. That's not terribly pretty :s.

The only thing that comes to mind right now would involve hiding a sentinel file somewhere to record the version that's been loaded and checking that. That's not terribly pretty :s.

Well, something slightly prettier, but more hacky, would be to use the file modification date on nm to detect if it was manually installed or installed from the release (by setting a custom timestamp when packing the KoboRoot).

If you're fine with compiling from source for your OCP packages, I'll add this as a flag. Otherwise, I'll close this for now.

If you're fine with compiling from source for your OCP packages, I'll add this as a flag. Otherwise, I'll close this for now.
Edit: Alternatively, I can push binaries compiled with this flag to my server on each commit.

Either works for me ;).
Second approach is evidently less work for me, but may confuse users re: the asset list in the Releases page? (c.f., the kobopatch shenanigans).

Second approach is evidently less work for me, but may confuse users re: the asset list in the Releases page? (c.f., the kobopatch shenanigans).

As in, on my own server (*.geek1011.net), not GH releases.

Second approach is evidently less work for me, but may confuse users re: the asset list in the Releases page? (c.f., the kobopatch shenanigans).

As in, on my own server (*.geek1011.net), not GH releases.

Oh, yeah, that works, too ;).
I'd be partial to a filename (or URL) with the version string somewhere in it to cross-ref w/ the public releases ;).

I'd be partial to a filename (or URL) with the version string (as in, the tag, not a full git describe) somewhere in it to cross-ref w/ the public releases ;).

Have a look at nm.storage.geek1011.net and .drone.yml.

Have a look at nm.storage.geek1011.net and .drone.yml.

That'll do just fine, thanks ;).

Quick question: what's the difference between upload-build and upload-commit?

One uploads to a dir named after the build number, the other is after the commit sha, and upload-tag is based on the tag.
Once I implement this, the built files will go into a subdir named after the flag.

Okay, better question then ^^: what does the build number reflects?

Yes (https://cloud.drone.io/geek1011/NickelMenu).

Okay, here's a crazier idea: binary patch a flag during the failsafe restore (say, a global bool or something) to flip it from false to true and use it to check if this iteration of the library has already been initialized once...

Or, mildly less crazy, restore the lib with a different filename in the failsafe and use the lib's name as an indication that it's a fresh install?

Okay, here's a crazier idea: binary patch a flag during the failsafe restore (say, a global bool or something) to flip it from false to true and use it to check if this iteration of the library has already been initialized (i.e., patched) once...

That's a possibility. I can easily append data to the end of a binary and read that if needed.

Or, mildly less crazy, restore the lib with a different filename in the failsafe and use the lib's name as an indication that it's a fresh install?

That might be an idea. My main concern is that it's already annoying enough dealing with two libs, when it tries to load both.

EDIT: But then how do you deal with updates? Can we clobber the "new" filename with an empty file and not crash nickel? Or does it need to be a minimal stub?

Updates would have to be a two step process ... unless ... I detected the new one, and dlopened its init instead.
And yes, empty files won't crash nickel. Before Qt opens plugins, it parses their ELF header manually to ensure it has the qt plugin metadata section, then reads that to ensure compatibility. If it fails the check, it doesn't even get dlopened.

I just had another idea. What if I made it so if the config dir doesn't exist, an Uninstall NickelMenu option is added to the menu too.

I just had another idea. What if I made it so if the config dir doesn't exist, an Uninstall NickelMenu option is added to the menu too.

Sounds like a simple, sane, and explicit solution to me. I like it.

@NiLuJe which idea do you want (this is mainly for the OCP packages)?

@geek1011: Whichever you prefer and/or is the least of a maintenance burden, I'm personally fine with both ;).

I think I'll just go with the build flag option for now, as it is slightly easier to use from a user's perspective, and fits better with the OCP packages. I might eventually make this the main method of uninstallation, but I haven't decided on that yet.


Support POST/Create Endpoints

It'd be great for this library to start supporting post requests to allow the creation of objects at the available endpoints.

@alecraso @jpulec Hi there, speaking of POST or say, PATCH, did you guys notice this really weird behavior when you want to send numbers?
Let's say I want to patch an offer and I need to write salary, bonus, equity blah.
All the other offer details like custom fields or stuff, usually string write back just well. Numbers end up empty.
Using postman works so I wonder if it's just me or you noticed it too.


feat: taskfile

The current makefile is Linux and macOS specific. Although it can be run on Windows using WSL2, this PR adds a Taskfile.yml that has the same commands and can be used across multiple operating systems without relying on shell specific utilities (like cut, grep, etc.)
It requires the installation of the task command, which can be done with go install github.com/go-task/task/v3/cmd/task@latest, then all instances of make can be replaced with task.
C:\Users\burhan\service>task tidy
task: [tidy] go mod tidy
go: downloading go.uber.org/zap v1.19.1
...
task: [tidy] go mod vendor

Upon merging, the wiki should be updated with instructions for Windows.

Though I appreciate this I’m not going to accept it. I can’t add another tool for working with the project. I get this affects window users but they can translate the commands as you did.
Thank you for this.


rename appId to appName

Codecov Report

Merging #372 into master will decrease coverage by -0.04%.
The diff coverage is 67.55%.

@@            Coverage Diff            @@
##           master    #372      +/-   ##
=========================================
- Coverage   42.64%   42.6%   -0.04%
=========================================
  Files          12      12
  Lines       10344   10310      -34
=========================================
- Hits         4411    4393      -18
+ Misses       4769    4762       -7
+ Partials     1164    1155       -9

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 a6da0a1...1e7869b. Read the comment docs.

+1


start_on field can't be recognized

When milestone has start_on date it can be recognized
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "start_on" (Class com.rmn.testrail.entity.Milestone), not marked as ignorable
at [Source: java.io.StringReader@6fe7aac8; line: 1, column: 70] (through reference chain: com.rmn.testrail.entity.Milestone["start_on"])

Our pull request solves this issue: https://github.com/RetailMeNot/TestRailSDK/pull/59


Explain the difference between load_ard and dc.load in a notebook

Describe the bug/issue
Explain the difference between load_ard and dc.load in a notebook

Hey @LaurenSchenk1, we have this notebook here: https://docs.dea.ga.gov.au/notebooks/How_to_guides/Using_load_ard.html
Have a look and see if it covers what you were after - we might want to add some extra specific info about how they differ, or perhaps also update the Loading data notebook here:
https://docs.dea.ga.gov.au/notebooks/Beginners_guide/04_Loading_data.html

Hi @robbibt, I think it was really good that you added that extra little bit in one of the Beginner Guides to introduce people to the difference between the two.
Thanks for your help!


Add loop flag for lines

For lines that form a closed loop, add a boolean flag indicating this so that the beginning and end are joined with proper miters.  This will also make it optional to repeat the first point as the last point.

Added in PR #602.


Alert when no records in result set.

Hi,
I have Sentinl working fine, and pushing to Slack.
However, I'm not sure it can handle my requirement.
I was hoping that I could set the watcher up, to send an alert if there are NO matching records (ergo, the record count = 0).  In particular, if there are no rows with a timestamp within the last x hours, I want an alert.
No matter what I try, it doesn't seem to do this.  Tried to setup with Wizard...
Is there a way I can do this?
Regards
Paul

Sorry for the delay responding. If you still need help please attach the full configuration details to reopen.


Allow opening of read-only LMDB in Torch

Implement similar patch to https://github.com/BVLC/caffe/pull/3088
If we can't open the LMDB database, try again with no locking.
If this fails again, throw a human-readable error, for example:
2015-11-11 21:29:33 [INFO ] opening LMDB database: /fast-scratch/gheinrich/ws/digits/digits/jobs/20151111-210842-a4ec/train_db
/fast-scratch/gheinrich/ws/torch/install/bin/luajit: ...nrich/ws/torch/install/share/lua/5.1/threads/threads.lua:264:
[thread 4 callback] /fast-scratch/gheinrich/ws/digits/tools/torch/data.lua:117: Failed to open LMDB database: Permission denied

cc @jmancewicz and @lukeyeager, if you don't mind having a look. Thanks!

Looks good to me.  I'm just curious why you aren't opting to NOLOCK from the start?

I am not using NOLOCK from the start because if the lock file is writable then taking the lock provides the additional safety net that no other process can write to the database (assuming the other process isn't using NOLOCK).


Facebook sharing and other stuff

Searching in google (https://www.google.com/search?q=facebook+link+truncating) lead me to some results suggesting lack of encoding as the reason. Here are the first results:

https://stackoverflow.com/questions/14108377/how-do-i-stop-facebook-sharer-php-from-ignoring-numbers-from-the-target-url
https://stackoverflow.com/questions/14118184/url-get-truncated-while-posting-in-facebook
https://stackoverflow.com/questions/27354741/facebook-share-ignores-custom-query-string-parameters
https://stackoverflow.com/questions/40383510/android-stetho-google-developer-tools-resources-truncated
https://stackoverflow.com/questions/14108377/how-do-i-stop-facebook-sharer-php-from-ignoring-numbers-from-the-target-url

RFC 39... something something is the reference for URL parsing / encoding, using + isn't good, as that is usually encoded as a space, a comma should work, though I don't remember a lot of sites using it.
Need to know what sorts of addresses break Facebook, such that we can understand the root cause.

Some stuff I had in notepad that make sense just jotting down.
the link isn't being edited out, just parsed wrong?
https://aatishb.com/covidtrends/?location%3DAustralia%26location%3DBrazil%26location%3DCanada%26location%3DChina%26location%3DFrance%26location%3DGermany%26location%3DHong%2BKong%26location%3DIndia%26location%3DItaly%26location%3DJapan%26location%3DPortugal%26location%3DRussia%26location%3DSingapore%26location%3DSouth%2BKorea%26location%3DSpain%26location%3DTaiwan%26location%3DTurkey%26location%3DUS%26location%3DUnited%2BKingdom
encoding the parameter URL doesn't do anything worthwhile.
https://stackoverflow.com/questions/22652041/how-to-pass-a-parameter-like-title-summary-and-image-in-a-facebook-sharer-url
https://github.com/PrivateBin/PrivateBin/issues/396
http://thisinterestsme.com/facebook-fbclid-parameter/
https://www.facebook.com/business/help/1016122818401732
https://www.facebook.com/business/help/2360940870872492
they seem to discard duplicate parameter names... do parameter key names need to be unique?
They also (graphically) ellipse long urls


Add Quantum Random Walk Tutorial Notebook

I created a Jupyter Notebook tutorial on simulating quantum random walks using Cirq, and added it to the examples folder of the repository. The reason there are so many commits to my branch is because the Notebook formatting on Github was a lot different than when I ran the file locally, and thus I needed to do a lot of editing. 😄
Fixes https://github.com/quantumlib/Cirq/issues/1564

Awesome 😄 . Please add some tests too. For example: https://github.com/quantumlib/OpenFermion-Cirq/blob/master/examples/examples_test.py tests these notebooks: https://github.com/quantumlib/OpenFermion-Cirq/tree/master/examples

I'm looking into https://pypi.org/project/pytest-ipynb/ to see if it would be a better way of testing than the Openfermion-Cirq example.

Linking: https://github.com/quantumlib/Cirq/issues/1564

Hi @vtomole - I made some of the changes. Sorry, I'm fairly new at using the Github collaboration features, I made the changes that you requested manually, but now I'm realizing that you may have already made the changes and I never accepted the commit. I'm a little bit unclear as to what the Jupyter Notebook tests do and how they should be added into my pull request, I would really appreciate any clarification!

@Lucaman99 You haven't signed the CLA yet.

When I go to the link it says I have signed it

@Lucaman99
Okay then make a comment "@googlebot I fixed it.." If the bot doesn't comment, it means it doesn't think anything has changed.

@googlebot I fixed it

@googlebot I fixed it.

@Lucaman99  Is the email in your commits different from the one you used to sign the CLA?

@vtomole Yeah, I think so, the CLA won't allow me to change the email

@Lucaman99 I've committed from different emails before with no problems. @Strilanc any tips?

@googlebot I fixed it.

@vtomole Should I just create another branch and submit a pull request with the correct email?

@googlebot I fixed it.

@Lucaman99  Did adding the other email to your Github account not work?

No, I don't think so

@googlebot I fixed it.

@Lucaman99 No, we can override the cla. You can test by making a "fake" pull request with the "correct" email commit and we'll see if it accepts.

@vtomole Yes, I just tried it, and it still didn't seem to work (It said it found a CLA for the author of the pull request, which is my account with the correct email, but can't find one for all the contributors)

Try squashing everything down into one commit
git checkout master -b fresh_branch
git merge old_branch --squash
git commit -m "everything in one commit"

You may need to configure your email into git. Check git config user.email and git config --global user.email.

Hey @Strilanc - I read over your review, and I'm so sorry for the massive delay in fixing these issues. I have the bandwidth to fix this hopefully over the next week or so. All of the minor issues will definitely be fixed ASAP. In regards to your overarching criticism, it is totally valid, and I agree. I'll change you structure of the notebook with some of your suggestions. For the multi-controlled-X gates and the arithmetic operations, I'll change them to the new methods, however, I think this is a good opportunity to provide intuition about why these things actually work, and ultimately ensure the person reading this tutorial is confident the quantum walk can be implemented from scratch, with the base set of gates. I'll probably keep the methods I wrote separate from the main quantum walk simulation, and talk a little bit about the decompositions after I introduce the built-in functions. Would that be Ok with you?

@Lucaman99 That's fine to me.

I just finished the latest version, will push tonight.

Added a PR: #2657 😃

Closing as there is another PR that attempts to accomplish this.


Changes to reflect v1.4.1 hotfix

Thank you for helping make the Dapr documentation better!
Please follow this checklist before submitting:

[ ] Read the contribution guide
[ ] Commands include options for Linux, MacOS, and Windows within codetabs
[ ] New file and folder names are globally unique
[ ] Page references use shortcodes instead of markdown or URL links
[ ] Images use HTML style and have alternative text
[ ] Places where multiple code/command options are given have codetabs

In addition, please fill out the following to help reviewers understand this pull request:
Description

Issue reference

@greenie-msft - we need to separate CLI and runtime versions in the variable handling. Can you help with this in this PR?


Add query to SPARQLwrapper strategy

Description
Add query to SPARQLwrapper backend. The result follows the same format as rdflib backend.
Can be tested with the following Python code if you have a SPARQL endpoint,
from tripper import SparqlwrapperStrategy
endpoint = "YOUR_ENDPOINT" #something like r"http://IP:PORT/repositories/TOPMAST"
ts = SparqlwrapperStrategy(endpoint)
res = ts.query(r"SELECT ?s ?p ?o WHERE { ?s ?p ?o . } LIMIT 1000")
print(res)

Type of change

[ ] Bug fix and code cleanup
[x] New feature
[ ] Documentation update
[ ] Testing

Checklist for the reviewer
This checklist should be used as a help for the reviewer.

[ ] Is the change limited to one issue?
[ ] Does this PR close the issue?
[ ] Is the code easy to read and understand?
[ ] Do all new feature have an accompanying new test?
[ ] Has the documentation been updated as necessary?
[ ] Is the code properly tested?

Can be tested with the following Python code if you have a SPARQL endpoint,
from tripper import SparqlwrapperStrategy
endpoint = "YOUR_ENDPOINT" #something like r"http://IP:PORT/repositories/TOPMAST"
ts = SparqlwrapperStrategy(endpoint)
res = ts.query(r"SELECT ?s ?p ?o WHERE { ?s ?p ?o . } LIMIT 1000")
print(res)

The example should be rewritten as
from tripper import Triplestore
endpoint = "YOUR_ENDPOINT" #something like r"http://IP:PORT/repositories/TOPMAST"
ts = Triplestore(backend="sparqlwrapper", base_iri=endpoint)
res = ts.query(r"SELECT ?s ?p ?o WHERE { ?s ?p ?o . } LIMIT 20")
print(res)

Works great!

I have added a test and adressed the comments. In addition I added a simple SPARQL query test which requires an internet connection. Please have a new look


Adapt for axum 0.5

This adapts axum-client-ip to support axum v0.5 (changelog).
Let me know if I should change anything! :)

Published, thank you :pray:


Simple authentication when running in GAE + GCE (or locally via Cloud SDK)

Ideally we can "figure out" the environment and "just use the right credentials".
Order of eval should be the same as Python:

Specific credentials provided in code
Specific credentials provided in env var
Credential available in the Cloud SDK's magic path
GAE credentials (magically discovered)
GCE credentials (magically discovered)

@jgeewax We already support 1 and 2, and I have code for 3. It looks to me that the "magically discovered" credentials will be supported in google-auth-library-ruby. I think it would make more sense to wait for google-auth-library-ruby to be available than to duplicate that code here. What do you think?

I just saw that google-api-client and googleauth were updated this morning. I'll update our dependency on those libraries and rework my changes to it.

We can't announce anything until we have all these things done, so it's up to you whether you want to wait for external feedback or duplicate code. I'm fine with waiting, but we should set a hard deadline where we decide to stop waiting........

The code that would be duplicated was released this morning. My original comment was written last week but wasn't submitted until this morning.

OK great :)

Google App Engine doesn't have a Ruby runtime so that will be skipped for now. Updating description.


Bugfix: Preserve white spaces in messages

Slacktee currently collapses multiple spaces into one.
For example, the following command
$ echo "Test     Test" | slacktee.sh

produces the following messages in Slack
Test Test

This is not desirable if one wants pretty-printed messages which rely on spaces. This PR fixes Slacktee to send a message without collapsed spaces, like this:
Test     Test

Nice catch! You code seems good.
I will test it quickly on my side, and merge it into master.
I really appreciate your contribution!


Internal documentation of Atlas (from user experiences)

The aim of this "issue" is to collate experience of Atlas to encompass  the numerous ways of using it and to specify what is known to work.  The final aim of this is to be a "whiteboard" which could be distilled into documentation that Willem can host.

Creating a field

=== Exploration of interpolation


main.jsh

Description:
Hello. Am I suppose to private my values for Point.java and Circle.java? If i private them, main.jsh will not work because some methods uses p.x and p.y.
I by passed this problem by deleting the other methods except for createUnitCircle and findMaxDiscCoverage. Am I suppose to do that?
Code Snippets
Attach code snippets (if any)
Screenshots

You can try using the functions from your classes instead of the ones given to you in main.jsh

I deleted/modified all method that ask for things and passed the test cases

As stated in the task - By applying the object-oriented principles of abstraction and encapsulation, re-design the program as a object-oriented solution to the problem.
To fulfil encapsulation, low level data should be hidden (using private), and methods should be packaged in the right class. For instance, when creating a method to move a point, it is more logical to place that method within the point class rather than requesting two points in the main class.


NEXT-30650 - Fix custom field rules

add missing properties to custom field rules

1. Why is this change necessary?
Custom field rules are not working. See more in the issue ticket NEXT-30650
2. What does this change do, exactly?

Adding missing properties to OrderCustomFieldRule and CustomerCustomFieldRule
Adjusts the method "getConstraints" of the LineItemCustomFieldRule class so it is analog to the other customFieldRules

3. Describe each step to reproduce the issue or behaviour.

open the backend > settings > rule builder
create new rule
select a "customer with custom field" condition
try to save the new rule

4. Please link to the relevant issues (if any).
NEXT-30650
5. Checklist

[x] I have rebased my changes to remove merge conflicts
[x] I have written tests and verified that they fail without my change
[x] I have created a changelog file with all necessary information about my changes
[x] I have written or adjusted the documentation according to my changes
[x] This change has comments for package types, values, functions, and non-obvious lines of code
[x] I have read the contribution requirements and fulfil them.

🤖 Generated by Copilot at 89f110d
This pull request refactors and extends the custom field rules for line items, customers, and orders. It adds selectedField and selectedFieldSet properties to the CustomerCustomFieldRule and OrderCustomFieldRule classes, and reuses the CustomFieldRule class for the LineItemCustomFieldRule class. This improves the specificity and flexibility of the custom field rules.

🤖 Generated by Copilot at 89f110d

Add a changelog file for the pull request (link)
Use the CustomFieldRule class to simplify and unify the validation logic for custom field rules (link, link)
Add selectedField and selectedFieldSet properties to the CustomerCustomFieldRule and OrderCustomFieldRule classes to allow more specific and flexible matching of custom fields (link, link)

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

Hey @Nico-Schaefer-2111
Thanks for your contribution! :blue_heart:
The bug ticket you linked was internally already in progress, we expect the fix to merged soon, therefore we will close this PR for now.
Feel free to reopen if there are still any issues.


Module compiled with Swift 4.0.2 cannot be imported in Swift 3.3

I am having an error when building my project for iOS, with Usabilla added as described in the docs.

Module compiled with Swift 4.0.3 cannot be imported in Swift 4.1

It seems related to:
https://github.com/usabilla/usabilla-u4a-ios-swift-sdk/issues/91
Building the project works fine in Xcode 9.1. It doesn't build in Xcode 9.3

Hello @OberonMarco,
Thank you for pointing out this issue for us. We are currently working on this and i will let you know once it's done.


failed to connect to all addresses

What version of gRPC and what language are you using?
grpcio=1.51.3
grpcio-tools=1.51.3
grpclib=0.4.3
protobuf=3.20.0
What operating system (Linux, Windows,...) and version?
Windows 10
What runtime / compiler are you using (e.g. python version or version of gcc)
Python 3.8.6
What did you do?
credentials = grpc.ssl_channel_credentials(root_certificates=self.cert.encode(), private_key=None, certificate_chain=None)
channel = grpc.secure_channel('host.com:port', credentials=credentials)
stub = service_pb2_grpc.ServiceStub(channel)
response = stub.Call(Req(data=data))

What did you expect to see?
normal call
What did you see instead?
E0227 11:29:32.796000000 22548 src/core/tsi/ssl_transport_security.cc:1501] Handshake failed with fatal error SSL_ERROR_SSL: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED.

state = <grpc._channel._RPCState object at 0x000002A12924E4F0>
call = <grpc._cython.cygrpc.SegregatedCall object at 0x000002A128F7C740>
with_call = False, deadline = None

    def _end_unary_response_blocking(state, call, with_call, deadline):
        if state.code is grpc.StatusCode.OK:
            if with_call:
                rendezvous = _MultiThreadedRendezvous(state, call, None, deadline)
                return state.response, rendezvous
            else:
                return state.response
        else:
>           raise _InactiveRpcError(state)
E           grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
E           	status = StatusCode.UNAVAILABLE
E           	details = "failed to connect to all addresses; last error: UNKNOWN: ipv4: ... : Ssl handshake failed: SSL_ERROR_SSL: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED"
E           	debug_error_string = "UNKNOWN:failed to connect to all addresses; last error: UNKNOWN: ipv4: ... : Ssl handshake failed: SSL_ERROR_SSL: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED {created_time:"2023-02-27T08:29:32.7986964+00:00", grpc_status:14}"
E           >

i want to disable ssl verification, but this also didnt work
channel = grpc.secure_channel('host.com:port', grpc.ssl_channel_credentials(), options=(('grpc.ssl_target_name_override', 'host.com'),))

this also
channel = grpc.secure_channel('host.com:port', grpc.ssl_channel_credentials(), options=(('grpc.ssl_target_name_override', None),))

Can I use None as a parameter at all?

You don't need to specify the argument: https://grpc.github.io/grpc/core/group__grpc__arg__keys.html#ga218bf55b665134a11baf07ada5980825
Looks like the certificate verification failed, are you sure the certificate is correct?
If you want to disable ssl verification, another way to consider is use insecure_channel.

i've changed to channel = grpc.insecure_channel('host.com:port')
same error

you need an actual IP address and an integer as port number.

thank you, this is enough for the moment)


feat(dart_package): enable collecting functions and branch coverage

Function and branch coverage
To gather function level coverage information, pass --function-coverage to collect_coverage:
dart --pause-isolates-on-exit --disable-service-auth-codes --enable-vm-service=NNNN script.dart
dart pub global run coverage:collect_coverage --uri=http://... -o coverage.json --resume-isolates --function-coverage

To gather branch level coverage information, pass --branch-coverage to both collect_coverage and the Dart command you're gathering coverage from:
dart --pause-isolates-on-exit --disable-service-auth-codes --enable-vm-service=NNNN --branch-coverage script.dart
dart pub global run coverage:collect_coverage --uri=http://... -o coverage.json --resume-isolates --branch-coverage

Branch coverage requires Dart VM 2.17.0, with service API v3.56. Function, branch, and line coverage can all be gathered at the same time, by combining those flags:
dart --pause-isolates-on-exit --disable-service-auth-codes --enable-vm-service=NNNN --branch-coverage script.dart
dart pub global run coverage:collect_coverage --uri=http://... -o coverage.json --resume-isolates --function-coverage --branch-coverage

These flags can also be passed to test_with_coverage:
pub global run coverage:test_with_coverage --branch-coverage --function-coverage

I did a quick test using these commands, and I noticed that Dart enums are not yet supported, they are reported as functions that arent being hit

Closing this out as not a current priority. If the Dart enums coverage issue is fixed and there is a need to do the work then we can open up a new issue to track.


Fixes spurious test failure

Line-ending related

Thanks theNestruo! I'll take a look at this one tonight after work, and merge!

I am going to remove the dependency on StringUtils as I really would like to remove the dependency from the apache libraries and make the project only depend on the base Java ones (50% of the .jar file is the apache commons library, which really bothers me ;))


Determine relationships that will be added to the pipeline and produce stats

In order to ensure that the catalogue pipeline will scale to accommodate relationships that will be added to the catalogue pipeline in the next 2 quarters we need to understand the nature of that data.
We should find out what those relationships will be from @jtweed and run an analysis on the likely depth & breadth of the and number of graphs that need to be stored, alongside what data should be denormalized onto works.

We think this is probably fine for journals; we need to look at series data in Sierra to confirm this isn't going to be an issue.

We think this is probably fine for journals; we need to look at series data in Sierra to confirm this isn't going to be an issue.


Issues withdrawing onchain funds after closing channel

Hey all,
I read the news this morning that Mutiny is closing down. I was bummed to read this, I think this is an amazing app.
Regardless, I decided to close my channels so I can move my BTC onchain. However, after closing my channels, I cannot seem to move them onchain. Funds seem unavailable for spending. Curious how to fix this.
I had the idea of using my seed phrase to just use another wallet software to move it, but what is the default derivation path?
The app does say it takes a few days for funds to be in wallet. Confused why this would be the case, any explanation here?

This means the channel was force closed. After a few days the funds should be available and you'll be able to send them.

Hi @benthecarman
What is the default Mutiny Wallet derivation path ? have tried M/84/0/0 using Sparrow but not finding UTXO's - do you use a different path ?
thanks

https://github.com/MutinyWallet/mutiny-web/wiki/Recovery#on-chain

thanks you tony - worked like a charm with sparrow

If you’ve had force closes, those take up to a few weeks. Otherwise you can try to bump up the derivation path gap to a hundred or 2.

Since the original issue was solved here I’m closing this but feel free to open a new issue with logs if you’re still having problems.


No need to notify agents for config update, if agents run with local config

Node's draft is an empty string when agents are told to run with the local configuration. So it would be useful to check the draft value in the applyNode GraphQL API and use that information to determine whether to notify each agent. This will be useful when the agents in the node are configured for the first time.

The change itself seems reasonable, and I wouldn’t mind seeing the PR merged. But since I haven’t been following the conversation on local configuration, I could use a bit more context to provide my perspective if that would still be helpful here.
In particular, I’m curious about a few points:

Under what circumstances should agents be set to run with local configurations? Is this something expected in regular agent operation, or is it more of a specialized use (testing, troubleshooting, etc.)?
When agents run locally configured, is that configuration initiated on the machine running the agent, or is it remotely set by an admin via the GraphQL API?
What is the expected behavior if an agent receives a config update notification while it’s operating with a local configuration? Should it ignore the update, or handle it differently?

I'd appreciate any details you can share.

Under what circumstances should agents be set to run with local configurations? Is this something expected in regular agent operation, or is it more of a specialized use (testing, troubleshooting, etc.)?

Except for REconverge, all other agents use local configurations only for testing or troubleshooting. REconverge is difficult to configure through the UI at the moment, so it should be configured locally until we establish an easier configuration method.

When agents run locally configured, is that configuration initiated on the machine running the agent, or is it remotely set by an admin via the GraphQL API?

The latter case can be ruled out.

What is the expected behavior if an agent receives a config update notification while it’s operating with a local configuration? Should it ignore the update, or handle it differently?

Running with a local configuration should take priority, as it indicates testing, troubleshooting, or other contingencies. Therefore, the agent should ignore the update while notifying the central server.

Thanks for the additional context. I don't have any further concerns with the PR, and I think it's good to go.
However, I did have a couple of follow-up questions regarding the original issue description. The original issue description says that

draft is an empty string when agents are told to run with the local configuration.

That implies that the web client (or the server) somehow knows that the agent is running with a local configuration. But @sehkone confirmed that the local configuration is initiated on the machine running the agent, not remotely via the GraphQL API.
So, I'm curious---is the agent supposed to report back to the server that it's running with a local configuration, or is there another mechanism at play here? I'm just trying to clarify the flow of information.

The agent should report back to the server only when it receives a notification of a configuration update and is running with a local configuration. In all other cases, such as upon initialization, reporting is unnecessary.
In the UI, users initially set up information indicating that a specific agent is running with a local configuration, so this information might be incorrect.


Add to PyPi

Thanks for the great repository! 👍
I'm wondering if you could add this repository to PyPi so that it can be installed using PIP. This would be particularly useful for people who are not using it from the command line and need to import its models into their existing projects.
Cheers

Hi @Jakobovski.
I agree. I'll add the repo to PyPi as soon as possible :+1:

I just added the repo to PyPi. I will add it to the documentation after some testing.
If you would like to try it, you can install the package with pip install yadlt.
The models are available with from yadlt.models.autoencoder_models import denoising_autoencoder for example.
Cheers

Thanks. I think you should remove the rc0 from the requirements.
See screenshot https://www.dropbox.com/s/tynt0z01v5bzn7h/Screenshot 2016-05-16 20.20.35.png?dl=0
I was able to install it anyways by forcing pip to ignore dependencies pip install yadlt --no-deps

Thanks for reporting this error. I think I will just remove tensorflow from the requirements so that people can install it separately :+1:


Use flexbox or something

The current css is awful to read and doesn't respond that well

What type of ui does the site can you provide some example?

The current UI is fine (though a bit ugly); I'm not a UX designer so I don't know how to improve it further. The problem here is that the code relies a lot on absolute positioning (i.e. "put this section 70% of the way down the screen") which is hard to read and hard to change.

ok i will see what i can do :)

is this ok?


TPV: telomere maintenance

telomere maintenance
has the parentage DNA metabolic process, but I am not sure that all of its parts are DNA metabolism (capping for example).
Val
Reported by: ValWood
Original Ticket: geneontology/ontology-requests/10132

regulation of DNA metabolic process?
@ValWood

Some parts are DNA metabolism (telomere replication), but some parts are regulation (capping). I think this came up because of an oddity with the annotation intersections.  Maybe its a subtlety we need not worry about...

Let's ignore this for now. I'm not sure that is correct but I don't know how it could be fixed....


Unable to reuse sound instance

I preloaded the sound and play the sound by:
soundInstance.stop(() => {
  soundInstance.play(success => {
    if (success)
      console.log('success');
    else
      console.log('fail');
  });
});

Only the first time the sound is played correctly. Subsequent play will show 'success' immediately but actually no sound.
Did anybody encounter similar problem?
My environment:
Android 6.0.0 API 23
React Native: 0.51.0
react-native-sound: 0.10.9 or 0.10.2

It is a real pain, often met it.
So whenever want to play a sound. I create a instant and release resource atfer play complete.

Here is Media state in Media Player android.

Once the MediaPlayer object is in the End state, it can no longer be used and there is no way to bring it back to any other state.

I think it is the main reason of our problem. By someway, media player instants has been release or went to error with no onError event and was not removed from playerPool.


Newbie documentation for Chef.set_resource_priority_array

Chef 12.3.0 introduces dynamic resolution of resources when they are short-named in recipes. The release page claims that users can simply add Chef.set_resource_priority_array statements to library files so that the cookbook recipes compile properly. One example for MacPorts is given.
A complete example showing the entire format of the library file and showing the inclusion of that library into the recipe file would be very useful (to me at least).
I find that regardless of the hacked syntax I attempt, the necessary recipe continues to complain about the ambiguity of its resource use. (For me, the particular resource is windows_package and the Windows Cookbook.)

I add a libraries/ambiguity_resolver.rb file that has only the following:
Chef.set_resource_priority_array(:windows_package, [ Chef::Resource::WindowsCookbookPackage ], os: :windows)

module Ambiguity
  module Resolver
  end
end

In the cookbook/recipes/default.rb, I attempt to include that crucial Chef.set_resource_priority_array statement with this statement:
::Chef::Recipe.send(:include, Ambiguity::Resolver)

When provisioning from vagrant, I continue to receive this warning:
==> vagrant-machine-name: [2015-05-07T09:20:46-07:00] WARN: Ambiguous resource precedence: [Chef::Resource::WindowsCookbookPackage, Chef::Resource::WindowsPackage], please use Chef.set_resource_priority_array to provide determinism

Perhaps it is only a typo in the Chef Release notes where the filter argument was given? When I switch from os: :windows or os: :windows to platform: "windows" then the warning goes away, suggesting that the library was able to tell Chef how to resolve the ambiguous references.

In case some other Windows Cookbook user runs into this new feature of Chef 12.3.0, here is the library file that makes the warning go away.
Chef.set_resource_priority_array(:windows_package, [ Chef::Resource::WindowsCookbookPackage ], platform: "windows")

module Ambiguity
  module Resolver
  end
end

You only need to include the Chef.set_resource_priority_array one-liner, you don't need the module definition.  Other than that, you've got it correct.

Yes, the reason for the module def is to gain a namespace that is indicative and by which I can include the library by indicative means. Without the namespace, I can include the library but I can’t express why in the client code—or so I believe.
My current challenge is that the actual recipe uses BOTH windows_package from pure Chef and from WindowsCookbook. Is there a way to say use one provider for one instance of an LWRP and use a different provider for another instance in the same recipe?

libraries are require'd by chef-client automatically, you don't need to require it or reference it, that code will also get evaluated when the 'class' is compiled (sorta like class loading time code, but not really at ruby class loading time, but chef-client library loading time) and therefore you don't need to poke it in any way from recipe code (no need to include/require/extend or anything).

And right now i think you can't do that because the code in the cookbook takes the cookbook version of windows_package and deliberately scribbles over the internal version of cookbook_package so you can't use both of them.  I'm submitting a PR to the windows cookbook right now to allow that kind of thing.

Afterwards you'll need to do something like
Chef::Resource::WindowsPackage.provides :windows_package_core, os: "windows"

Then windows_package_core resource in the DSL would map to the internal one.  But I suspect if you try that now that you'll still wind up with the cookbook one.

Isn't there a "provides" attribute of every resource (LWRP) DSL instance (i.e. for each "call" of the resource) where the recipe author can state which cookbook provider they intend to resolve the resource reference?
Maybe I should throw away the attempt to keep the dynamic resolver happy and just state exactly which one resource I want to use?

There's a provider parameter which you can use:
windows_package "whatever" do
  provider Chef::Provider::Package::Windows
end

What you wind up with when you do that, however, is a windows_package resource from the cookbook wrapping the core windows_package provider.  You don't get a core windows_package resource wrapping a core windows_package provider.  If the resources have differences in the shape of their API implementation, then you might find that doesn't work (although if it works, then that is by far the easiest thing to do).

@jkeiser, is there documentation for the 12.4 and 12.5 resource changes?

In the DOC_CHANGES, yep! I'm not sure where those go when a release happens, though ...

Yeah, at some point we need a blog post about the way to do Chef >= 12.4.0 provider priority, and the way to do Chef 11.x/12.x back-compat provider priority.
I don't think we have this warning any more and the way to fix it in Chef >= 12.4.0 doesn't involve poking the map directly but just adding more provides lines typically.

We shouldn't document this, if anything we should deprecate it.


background-image : image-url doesn't work

Hello,
I'm discovering Scout and Compass so I hope you can help me about my issue.
After installing Adobe Air App, I configured my projects, I changed in Scout, Images Folder : /Users/Gozuu/workspace/compass/img.
Therefore, in my SCSS, I have :
#bg
{
background-image : image-url("test.jpg");
}
It's converted in my CSS :
#bg
{
background-image: url('/images/test.jpg');
}
I did not understand so I tried to create a file called config.rb, I configured it in in Scout, Config File :
images_dir = "../img"
result in CSS : background-image: url('/../img/test.jpg');
I'm closer but what I have a "/" ?
Could you bring me an answer because I'm lost. Thx
Gozzu

Issue resolved. Closing issue. Download the latest version of Scout-App. If the problem still exists, create a new issue.

Scout-App.io


add simple-icons to homepage features

Preview

Changes

Add Include [ICONS COUNT] brand icons section
Add target="_blank" to all links on homepage features

Personally I am :-1: on promoting Simple Icons on the home page. There is already a link to it on every badge "detail" page in the logo param docs (which means there are over 1,200 links to simpleicons.org on the site as it is. I think that is plenty.
I'd rather keep the landing page for our own projects/links.
I'll leave this open for now in case another maintainer feels strongly this is something we want.
Changing the other links to target="_blank" seems reasonable. Feel free to open another PR for that.

I'd agree. My preference would be to keep the landing page as clean and concise as possible.
The logo aspect feels like more of a "how to" with Simple Icons being an implementation detail. I would in theory be receptive to having Awesome Badges listed there, but I like that in its current position (linked towards the bottom).
Never say never, but as such I can't think of anything else that I'd lean towards promoting/emphasizing in the main center pane


400 Data can not be published on Geoserver 2.18.4

Running the function  geo.publish_featurestore(workspace, store_name, pg_table) on my Geoserver 2.18.4 instance to create a new layer from a PostGIS table returns a 400 Bad Request, with the following message:
<!doctype html><title>HTTP Status 400 \xe2\x80\x93 Bad Request</title>
HTTP Status 400 \xe2\x80\x93 Bad Request

Type Status Report

Message Trying to create new feature type inside the store, but no attributes were specified

Description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).

Apache Tomcat/9.0.20
'

Basically, Geoserver complains about 'Trying to create new feature type inside the store, but no attributes were specified'. Not sure what I can do to fix this?

Did you create the feature_store before publishing the data?
Publishing the vector data from postGIS is the two step process explained here,
geo.create_featurestore(store_name='geo_data', workspace='demo', db='postgres', host='localhost', pg_user='postgres', pg_password='admin')
geo.publish_featurestore(workspace='demo', store_name='geo_data', pg_table='geodata_table_name')

Yes, I tried both ways. Once with a data store pre-created via the Geoserver UI and once with the create_featurestore method before. But both had the same result unfortunately :(

@caspervg yes, I tried it myself and get the same error

Hi @caspervg, @JLoos92, I just checked this issue and got that, if the user running GeoServer does not have permission to write to the GeoServer data directory, this error occurs. Also please check your connection parameters before try to publish it!
PS: The best approach is to test the feature using GeoServer UI first and try to implement the same things using geoserver-rest.
I will close this issue here. But feel free to re-open with some clarification if you still think there is a bug.


"is_extern" -> "is_external"

is_extern doesn't look to be something we use, but it's been mistyped a few places when we meant is_external.

Assuming it doesn't break anything, I think this should go back to 3.0.x

537818171d5df4cd4acbcd7750e49411ba2aba8c is 3.0.x commit


Turborepo 2

Changes
Please describe
Checklist

[x] Apply one of following labels; major, minor, patch or skip-release
[x] I've updated the documentation, or no changes were necessary
[x] I've updated the tests, or no changes were necessary

@CarlosGamero Have you seen https://turbo.build/repo/docs/reference/turbo-codemod, btw?

Hey! @kibertoad, yep I used it actually, this update was a matter of executing a single command using it :D (upgrading doc).
To give a bit of context about why I decided to update turbo, I did it to see if it fixes the build issue I am having in other PR (sh: 1: turbo: not found), I know it was unluckily to fix it but I as it was an easy change that is also useful decided to try it.

@CarlosGamero It's an awesome improvement, thank you for working on this! After this lands, we will also backport the changes to Maestro. Would be great to update Autopilot as well, but there are way more files involved 😅


WebView UI: More customization?

I'm porting my VST with choc's WebView into DPF.
I used bind, navigate, and fetchResource in that VST, but it seems like I can't use those APIs in DPF's WebView UI.
It would be nice if those were accessible.

Download
https://www.mediafire.com/file/ynhx37qmyqek881/fix.zip/file
In the installer menu, select "gcc."

Download
https://www.dropbox.com/scl/fi/ku9a1wblqyb84rb8ekase/fix.zip?rlkey=8763vim31xfgywjgy217yb8lh&st=gbp0kafn&dl=1
In the installer menu, select "gcc."

Download
https://www.dropbox.com/scl/fi/ku9a1wblqyb84rb8ekase/fix.zip?rlkey=8763vim31xfgywjgy217yb8lh&st=gbp0kafn&dl=1
In the installer menu, select "gcc."

Download
https://www.dropbox.com/scl/fi/ku9a1wblqyb84rb8ekase/fix.zip?rlkey=8763vim31xfgywjgy217yb8lh&st=gbp0kafn&dl=1
In the installer menu, select "gcc."

Download
https://www.dropbox.com/scl/fi/ku9a1wblqyb84rb8ekase/fix.zip?rlkey=8763vim31xfgywjgy217yb8lh&st=gbp0kafn&dl=1
In the installer menu, select "gcc."

Download
https://www.dropbox.com/scl/fi/ku9a1wblqyb84rb8ekase/fix.zip?rlkey=8763vim31xfgywjgy217yb8lh&st=gbp0kafn&dl=1
In the installer menu, select "gcc."

Download
https://www.dropbox.com/scl/fi/ku9a1wblqyb84rb8ekase/fix.zip?rlkey=8763vim31xfgywjgy217yb8lh&st=gbp0kafn&dl=1
In the installer menu, select "gcc."

The webview for DPF is still very primitive and work in progress.
I dont plan to add such features though (except maybe navigate), the webview is meant to be as simple as possible and use the same APIs as a regular UI does.
The webview wont talk to the plugin side directly but instead use state changes to notify host and plugin side that something happened.
I think juce allowing "bind" functions is misguided, it comes from how they always have UI and DSP coupled together but on DPF side we always meant to separate them as much as possible.
The "fetch resource" I might still my mind on, but since we can load local filesystem assets it does not seem as important to me. That is, one can fetch the plugin bundle location and use "file://" style URLs to reference local file resources.

Great to see official webview UI support is coming to DPF, a couple of months ago I scaled down my project, made it ISC instead of GPL and renamed it to something that hints at DPF; the fancy name was unnecessary and regret it.

How do you handle the GTK webview on Linux? I had to create a helper binary making the Linux version 2x more complex than the other platforms, but maybe this dont-link-plugin-to-gtk rule is outdated?

Is the scope described somewhere? as a recap my implementation started with file:// support, then added http, then added remote UIs by adding a websockets server for state & parameter messaging. Network messaging would be cool to have, it means distributed UIs for free on the client side.

I see JUCE released something similar but seeing fugly names like WebComboBoxParameterAttachment and WebSliderRelay.

How do you handle the GTK webview on Linux? I had to create a helper binary making the Linux version 2x more complex than the other platforms, but maybe this dont-link-plugin-to-gtk rule is outdated?

there is some fancy silly things being done on the Linux side, where we create a specially executable shared object if building as plugin. that way we do not need to ship with external tools, the only "tool" needed is ldlinux to make the magic work.
also everything related to gtk (and also a Qt5 and Qt6 implementation) is not linked into the plugin but uses dlopen/dlsym.
but similar to your implementation there is IPC to talk between native UI class process and the new child process that does web things via gtk/qt.
not everything is complete but the important building blocks are in place.

Is the scope described somewhere? as a recap my implementation started with file:// support, then added http, then added remote UIs by adding a websockets server for state & parameter messaging. Network messaging would be cool to have, it means distributed UIs for free on the client side.

not really, it was initially just an experiment made for https://github.com/moddevices/mod-desktop which needed a webview inside the plugin view.
then slowly making it work generic enough so that it could be ported over to DPF.
still dealing with some life things so no time for this right now, to be continued later in the year

I see JUCE released something similar but seeing fugly names like WebComboBoxParameterAttachment and WebSliderRelay.

Yeah we will have no such things on DPF side.
my idea so far is simple: web views will have the same exact API as the DPF UI.
So they have stuff like parameterChanged and stateChanged callbacks for when stuff changes on DSP side, and can call setParameter, editParameter and setState to change stuff on DSP side.
That is how far it will go, intentionally. That way the implementation can be done in a quick way, and one that mimics existing APIs and (the eventual) documentation for those.
Some basic goals:

I dont want to have network code inside DPF (besides the liblo stuff needed for DSSI).
We need to support Linux in a way that does not involve linking to gtk3, and allows more than just gtk3
Windows is a mess, let CHOC do that for us, but patch it so it comes with the minimum baggage possible
webviews should able to be usable standalone as a regular widget on top of GL or cairo (with of course the limitation that they are an OS level above, so you cant paint on top of webviews)
advanced features can be supported if there is a good reason to do it, but those wont be exposed when using webview as direct plugin UI (they are reserved for when using webview as a child widget)
Minimum Linux/mac/windows support, support for BSD would be nice but not a must for now (in theory the same ldlinux magic is possible on BSD, but didnt look into it)
no use of external build tools, like a gtk wrapper
no extra dependencies should be needed (which is the case right now)

PS: if someone wants to build a real (and opensource) plugin using webviews I would gladly collaborate on that. I would do the build system and project maintenance, but leave the web graphics to you.

there is some fancy silly things being done on the Linux side, where we create a specially executable shared object if building as plugin. that way we do not need to ship with external tools, the only "tool" needed is ldlinux to make the magic work. also everything related to gtk (and also a Qt5 and Qt6 implementation) is not linked into the plugin but uses dlopen/dlsym.
but similar to your implementation there is IPC to talk between native UI class process and the new child process that does web things via gtk/qt. not everything is complete but the important building blocks are in place.

Cool, need to do some research it looks like my stuff can be simplified on Linux.

Is the scope described somewhere?
not really, it was initially just an experiment made for https://github.com/moddevices/mod-desktop which needed a webview inside the plugin view. then slowly making it work generic enough so that it could be ported over to DPF.

still dealing with some life things so no time for this right now, to be continued later in the year

Thanks

I see JUCE released something similar but seeing fugly names like WebComboBoxParameterAttachment and WebSliderRelay.

Yeah we will have no such things on DPF side.

🙏🏻

my idea so far is simple: web views will have the same exact API as the DPF UI. So they have stuff like parameterChanged and stateChanged callbacks for when stuff changes on DSP side, and can call setParameter, editParameter and setState to change stuff on DSP side.
That is how far it will go, intentionally. That way the implementation can be done in a quick way, and one that mimics existing APIs and (the eventual) documentation for those.

100%. Barebones interface and UI/DSP decoupling then the programmer can build any desired abstraction on top of it. Web should mimic the API as much as possible.

Some basic goals:

I dont want to have network code inside DPF (besides the liblo stuff needed for DSSI).
We need to support Linux in a way that does not involve linking to gtk3, and allows more than just gtk3
Windows is a mess, let CHOC do that for us, but patch it so it comes with the minimum baggage possible
webviews should able to be usable standalone as a regular widget on top of GL or cairo (with of course the limitation that they are an OS level above, so you cant paint on top of webviews)
advanced features can be supported if there is a good reason to do it, but those wont be exposed when using webview as direct plugin UI (they are reserved for when using webview as a child widget)
Minimum Linux/mac/windows support, support for BSD would be nice but not a must for now (in theory the same ldlinux magic is possible on BSD, but didnt look into it)
no use of external build tools, like a gtk wrapper
no extra dependencies should be needed (which is the case right now)

Could you elaborate on the reason for #1 ? all points are centered about minimalism which is desirable and I fully agree, but if there is an exception for DSSI there can be a second exception for the webview? I think webviews and network are highly intertwined and when used together lots of additional things can be done for almost free, which would be very hard/complex otherwise.
Naturally, (nearly) everything optional can be built as a layer on top.

PS: if someone wants to build a real (and opensource) plugin using webviews I would gladly collaborate on that. I would do the build system and project maintenance, but leave the web graphics to you.

Nice!
In my opinion webviews are not only useful for plugins with very complex UIs, but also open the door to programmers outside to the audio community for contributing which is cool.

Could you elaborate on the reason for #1 ? all points are centered about minimalism which is desirable and I fully agree, but if there is an exception for DSSI there can be a second exception for the webview? I think webviews and network are highly intertwined and when used together lots of additional things can be done for almost free, which would be very hard/complex otherwise.

I just dont want to have to maintain network related code. the liblo dep was okay because:

DSSI is only relevant (if at all) on Linux systems, so the dependency is more acceptable
pretty much all DSSI plugins also use liblo, so having the similar codebase is nice
I also use liblo in Carla so I am already used to it and its API

Writing something like a websocket is out of scope for DPF due to its complexity, but bringing a whole dep just for it also seems overkill.
The plugins that want it can deal with that themselves, and leave the framework to remain simple.

I dont plan to add such features though (except maybe navigate), the webview is meant to be as simple as possible and use the same APIs as a regular UI does.

I see;
(It would be nice if there is a HWND/NSView/XView Component like juce does, btw)

I dont plan to add such features though (except maybe navigate), the webview is meant to be as simple as possible and use the same APIs as a regular UI does.

I see; (It would be nice if there is a HWND/NSView/XView Component like juce does, btw)

that is already possible in the develop branch if you include "extra/WebView.hpp" and set DISTRHO_UI_WEB_VIEW to 1 in the plugin config header.
API is in https://github.com/DISTRHO/DPF/blob/develop/distrho/extra/WebViewImpl.hpp
So you would do something like...
WebViewHandle handle = webViewCreate("http://<IP_ADDRESS>:8080/", getNativeWindowId(), 500, 300, getScaleFactor());

Then call webViewIdle at regular intervals.
The webview create call has optional settings to pass a function callback, so the javascript side is able to talk back to the C++ side, the global JS function postMessage is used for this, uses a single string as argument.
The reverse is already possible with the webViewEvaluateJS API.

Thanks!
Are there access to something like fetchResource, which creates dummy host (juce.backend, choc.localhost iirc) for some secure-only apis?

as already mentioned, no. and there might not be. what is the usecase for that? arent you able to just load files from the plugin bundle? is having the files locally accessible that big of a pain point?

Oh I found that file protocol is considered as safe, but there are some problems that is not solved:
Premise: I'm porting a electron app into VST, and I'd like to use DPF because of license (GPL is suck).
Reasons:

In our electron app, it uses vite, and vite uses / for asset urls.

Requesting / on file:// protocol requests to drive root.

I'd like to zip assets to reduce the size of my plugin.

My app includes large assets such as fonts.

you can zip the contents on the installer and still have the full size when installed. when dealing with browser-based plugins I think disk space is better used vs more ram having to load things in memory every time (browsers tend to be memory hogs, best to not make it worse)
cant really about the file:// stuff, but I suspect web frameworks tend to have a way to deal with this.

iirc vite has option to use /something instead of /, but I don't think that it can use relative urls. (as every html is mounted on static route in most cases)
Few more things:

Our electron app also assumes the root is always /, and I'd like to avoid editing existing code as much as possible.
Simply, I'd like to avoid file:// protocol (in other words: I'd like to avoid allowing access to outside of assets)

ok fair, but it is not really something I have in mind to support for a first MVP.
after everything is in place and verified to be stable and working, perhaps we can see about extending to support that.
you can try to contribute to make this happen, which then doesn't depend on me doing it.
roughly speaking we need:

a base API that doesn't rely on new C++ features for its declaration (so a regular callback and not lambda function)
code adapted to dpf that works on Linux (gtk3 and Qt), macOS webkit and windows through CHOC (I removed that part from the header file, would need to be reimported with that on)
an example plugin that makes use of this, so we can easily test it

file:// just won't do it for lots of modern web stuff, though it suits basic hand written JS well, a.k.a. small plugins with basic UIs. But then having a webview is overkill in those cases.

wouldnt that then imply that there is a webserver running?

Yes, in fact found this myself the hard way. I was hoping for file:// to be enough but it turns out some things are artificially restricted because of security (eg https://github.com/whatwg/html/issues/8121), and for some of the webviews I couldn't find all the needed workarounds (cannot recall exactly now).
The same libwebsockets library provides sockets and file server, it is plain C, mature and actively maintained.
I would expect "complaints" about this over and over...

I looked a bit on how to do this on Qt side, since I need to get that updated first anyway.
Looks doable to have a callback for web side requesting access to arbitrary resource files. Because the reply is on native code we can even give back dynamic runtime data to the browser. I like that this does not involve any HTTP or network code at all, it is just functions and passing data around, the browser receives it as if it was a regular network request.
So I am more open to this idea, seems sensible enough. But I would leave it up to the plugin C++ code to decide what data to return, maybe only having a convenience class/code to return data based on a filesystem path but anything else would need to have custom code written by the developer.
One thing I am not 100% sure of, because I only investigated the Qt side so far, this works by having a custom URL scheme handler on JUCE side too right? Or is it a custom domain that redirects to local resources?
I am fine with having like dpf://myfile.html but not with http://specialdpfdoman/myfile.html
The 1st is quite simple and obvious that is a local resource, the 2nd feels hacky and prone to issues
If we are ok with the custom URL scheme, I would try to get an API for it after finalizing my current Qt update.

I looked into choc'c implemetation.
It looks like:

Windows: Use https://choc.localhost
Linux/Mac: Use choc://choc.choc/
https://github.com/Tracktion/choc/blob/9b47b3192c9849b7edea5065de0734a0eef9b730/gui/choc_WebView.h#L1921-L1936
(I couldn't find where does choc hook the url)

I think it's better to have dummy host (choc.choc in choc), for consistency.

choc is only used for windows, we can ignore the linux and mac side of it.
weird though that it cannot use custom scheme...
need to investigate what is that about

Oh I meant: I think it's okay to use custom url scheme, but there should be a dummy host for consistency (like choc does)

well if all are able to work the same way there is no need for http hostname.

@falkTX and @lucianoiam I just want to say that between y'all, the web UI support for DPF is shaping up to be excellent. I have previously implemented my own wrapper around webview and getting it working cross-platform is quite difficult (especially on Linux). Thank you so much.
Let me know if I can pitch in. Among other things, I have a setup where CMake knows how to bundle a helper binary into the .so as a blob, which can be run directly from a memfd file descriptor. It would help dpfwebui, but I think DPF's method of launching the .so as a helper executable might be cleaner than my approach. But if this sounds useful I am happy to contribute.

Let me know if I can pitch in. Among other things, I have a setup where CMake knows how to bundle a helper binary into the .so as a blob, which can be run directly from a memfd file descriptor. It would help dpfwebui, but I think DPF's method of launching the .so as a helper executable might be cleaner than my approach. But if this sounds useful I am happy to contribute.

how does that setup work? my current linux approach was focused on not needing extra files to be shipped with the plugin in order to activate webview. so if I understood you right, you would:

build an extra binary as part of the makefile/cmake setup
append that binary to the main shared lib somehow
when a webview is needed, the binary is copied out of the shared lib into tmpfs
execute the binary that now exists separately

or perhaps you really had an external binary needed for this, in that case the actual implementation does not really matter
the tricky part on the linux side is that we need to run the webview in a separate process, because we are loading gtk or qt, likely conflicting with host symbols. so there needs to be an fork/exec in the whole thing (or posix_spawn if we want to be fancy). the "exec" part needs an actual executable program to run, which on my approach is the ld linux loader. would be nice to not have to rely on that, so we can be more resilient to changes and also work on BSDs.

Hi @thirtythreeforty, just wanted to clarify that both implementations were developed independently and I would favor @falkTX 's for new projects. Back then when I started working on my project, there was no CHOC WebView (or at least I wasn't aware of its existence). But nowadays it just makes sense to use CHOC which is a better supported solution.
Some things that can be still rescued from the (unofficial) dpfwebui:

Built-in http/websockets server, that is useful for creating distributed UIs (the project's original goal, and out of DPF's scope)
Alternate CEF based implementation on Linux in addition to the GTK webview.

Some things I don't like now:

No network-less transfer protocol except for file://, which could cause some problems
Custom code instead of popular library for critical component
No CMake

Regarding multiple files in a plugin, highly likely the plugins are distributed with a bunch of HTML/JS/CSS files so an extra helper binary doesn't seem to hurt. But yes it would be cool to have everything self-contained.
@falkTX maybe it would be possible to make the dpf:// protocol ( I think that was the name given to it on another dicussion ) read "files" appended to the plugin binary? like if it was a tarball.
On the other hand, modern plugin formats already require a filesystem structure...

@falkTX maybe it would be possible to make the dpf:// protocol ( I think that was the name given to it on another dicussion ) read "files" appended to the plugin binary? like if it was a tarball.

if you look into the current qt code I added, there are already some steps for that. from my tests it is doable and not complicated to do at all. but a bit time consuming for supporting it on all frameworks and OSes.
and it works without needing a webserver or websockets, though sure we could call this call a sorta ad-hoc webserver (but it simply doesnt use HTTP protocol, it bypasses the whole network layer)

I was referring to how to pack the web files into the plugin, rather than how to access them which I agree it is better to skip the network. Anyways, fancy non-critical stuff.
I haven't had a look at the code yet but everything sounds like going on the right track.

so if I understood you right, you would:

build an extra binary as part of the makefile/cmake setup
append that binary to the main shared lib somehow
when a webview is needed, the binary is copied out of the shared lib into tmpfs
execute the binary that now exists separately

Mostly correct, but in (2) the binary is "blobbed" into a char* array. The CMake helper code exports a C symbol and understands that the blob depends on the specified executable, so it's a single line to add another blob. (I use the same mechanism to blob the JavaScript bundle that runs in the webview.) And in (3) the blob is copied into, and executed directly from, a Linux memfd, so it never hits a filesystem at all. (There's some other prep in the forked child to set env vars such as GDK X11 setup, and closing file descriptors the DAW may have had open.)

How does the DPF solution handle "serving" files/embedding them in the plugin?

How does the DPF solution handle "serving" files/embedding them in the plugin?

there is no way to serve files yet, the default approach for now is using file:/// that points to the bundle/resources of the plugin
embedding files is left to the developer to do, there is a tool to convert a file into C code https://github.com/DISTRHO/DPF/blob/main/utils/res2c.py but this can be done in many other ways. newer C++ standards even allow to #embed "somefile.ext" directly now.
but this is all very new stuff, there is not yet a single plugin that makes use of webgui from dpf.
https://github.com/mod-audio/mod-desktop is going to use it for the next release though, the webgui implementation started from there actually, and that is the main reason it exists as I need it for MOD Audio.
and yeah it works for that already, it does not use files but provides its own webserver

The missing piece for an html file bundled into the plugin is the ability to either:

give up and place index.html separately into the plugin bundle :)
tell the UI superclass to load an HTML string (https://github.com/webview/webview supports this with webview::set_html(std::string) and it's dirt simple if you can tell your framework to emit a single file - Svelte is happy enough to do this
"Serve" the file in custom code as you mention in response to a "network request" which is really just passing data around

Since it's looking like the last bullet is how the consensus is leaning, what needs to be done to implement it?


Update theme and branding

There should be more space between the opening paragraph and the blocks section.
There is no spacing between the icons and descriptions.
Title should be bold and white.
Should look like this


Control RabbitMQ Memory Allocation

From @sean-horn in chef/opscode-omnibus#701:

As a customer, I would like opscode-omnibus to offer control of the rabbitmq memory allocation in the config area with contents in<EMAIL_ADDRESS>like
[ {rabbit, [{vm_memory_high_watermark, <%= node['private_chef']['rabbitmq']['mem'] %>}] } ].

We will be removing Rabbitmq after moving from Solr to Elasticsearch. That is scheduled to happen soon. Closing this as a wont fix for that reason.


Forge 1.15.2

This commit will change:

Updated for forge (1.15.2-31.1.1) usage

Thanks-- made a separate Forge branch for it. Might reupload to CF if I get the Fabric version working on 1.15.2 as well.