Changelog for UE recent update?

Hello,
I just noticed an update to the Project Acoustics plugin for Unreal Engine. It seems it was posted yesterday. Is there a changelog for that somewhere? Thanks!

We did recently push out a patch release. We don't currently have a place where we publish release notes publicly. We need to figure that out. I'll post our internal release notes here for now.
## 3.0 Patch - June 2022
* Few critical bug fixes for the 3.0 release
* UNREAL
    * Added clamp to prevent reverb from clipping in Marketplace plugin
    * Changed pre-bake default save directory to be in the Project/Plugins directory
    * Fix for ACE file drag and drop
    * Fix for AcousticsSpace transforms
* TRITON
    * Temporary fix for Android crash in Triton runtime

Were you referring to the Unreal/Wwise plugin, or the Unreal Audio marketplace plugin?


Allows GitLab SSH URLs on pack actions

Previously only GitHub based URL could be used for downloading and installing packs. This PR allows GitLab SSH URLs.

 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.

@nmaludy Thanks for the advice.
I`ve updated the changelog and the documentation.

I'm going to make this a blocker for v3.4 to ensure that it makes it in. I'll be working on fixing the end-to-end tests and rerunning them today.

I'm going to make this a blocker for v3.4 to ensure that it makes it in. I'll be working on fixing the end-to-end tests and rerunning them today.


Waveform trace color adjustment applies to all traces

Joulescope model
JS220
UI version
other
What OS are you seeing the problem on?
Windows 11
What happened?
I am running UI Version 1.1.10.
When i want to change the trace color of one of the waveform channels, it applies to all of the traces.

Then when i click on waveform.trace1, and change the color to red, it applies to all of the waveforms:

UI:

Color settings panel:

Also, the colors in the settings panel for waveform.trace2, waveform.trace3 and waveform.trace4 are not reflected in the UI.
What was expected?
I expect the naming to be the same. Trace0 - Trace3. When i change the color of waveform.trace1 i expect it to change the color of only this waveform in the plot.
Additionally i expect there to be a setting for all of the channels (i, v, p, r, 0, 1, 2, 3, T)
I expect it to only change the color of trace 1 (Which is actually trace 0 as referred to in the settings and buttons in the UI. The settings says trace1 - trace4, and the UI shows 0-3 which is confusing).
How to reproduce?

Start the application on Windows 11.
Do a measurement with multiple channels activated.
Settings are as shown below:

Stop the measurement
Right-click on one of the channels, and go to settings -> Colors tab.

Extra information
No response

Hi @StrandmonYellow and thank you for the detailed issue writeup!  Let me first explain how things work today, and then see what makes sense given how you expect things to work.
The Joulescope UI Waveform widget displays multiple quantities (i, v, p, r, 0, 1, 2, 3, T).  We call each of these a plot within the Waveform widget.  Today, the Joulescope UI supports multiple simultaneous Joulescopes.  The Joulescope produces a waveform for each plot.  We call this a Trace.  When you change the color for trace1, you are changing the color for each trace in each plot for that source Joulescope.  You don't see this since you only have a single Joulescope connected, but it looks like this:

JS220-002122 is selected as active, and displayed on top in trace1 color, which is yellow by default.   JS220-002557 is displayed in trace2 color, which is cyan by default.  When you change trace1 color, it changes the trace color for that Joulescope on all plots as you already observed, like this:

In other words trace1, trace2, trace3, and trace4 are linked to connected Joulescopes, not the general-purpose input quantities 0, 1, 2, 3 that are plotted in the Waveform widget.
It sounds like you want to change colors for a single plot.  As you can see, this would only work if a single Joulescope is connected.  The UI would need to ignore this setting if multiple Joulescopes are connected.  I can see why this would be desirable so that you can more easily find the signal of interest at a quick glance.
The next challenge is figuring out how to make this work.  Many of our plot-specific configurations do not show up in settings.  You adjust them by right-clicking on the plot.  We could add a Color item to the right-click menu.  It would have two options: Trace and Clear.  If you select Trace, it will bring up the color selector widget and adjust the trace color.  If you select Clear it will revert to defaults.  The UI would not display the Color item when multiple Joulescopes are connected and ignore any configured overrides.
What do you think?

Hi mliberty1,
This makes sense. Thankyou for the detailed explanation. I did search for something about this in the manual for the application, but could not find what I was looking for. I was not aware that the UI could be used with more than 1 joulescope simultaneously.
As you said indeed, I would like this functionality because it make an obvious distinction between different plots within a waveform widget.
Your suggestion sounds perfect! Do you need anything else from my side?


lib: Add CM4 IO-Board support to testbot

Change-type: patch
Signed-off-by: Alexandru Costache<EMAIL_ADDRESS>

@balena-ci I self-certify!

Thanks @vipulgupta2048 !


Add release notes for v20.1.13

Resolves #8933.

This change is

Online preview: http://cockroach-docs-review.s3-website-us-east-1.amazonaws.com/2fee9b5ae675e13f89bd967a79b7791d11caf2fe/
Edited pages:

releases/v20.1.13.md

Online preview: http://cockroach-docs-review.s3-website-us-east-1.amazonaws.com/954be9c19016f2682216475527f90638c434e3cc/
Edited pages:

releases/v20.1.13.md

@ajwerner Following up, here's updated draft text on the other items we discussed, excerpted from this PR. Ryan is reviewing on the Docs Team side, but please let me know if you want to change anything. Thanks again.

Fixed a bug where high-latency global clusters could sometimes fall behind in resolving timestamps for changefeeds. [#60926][#60926]

In the DB Console's Advanced Debugging section, manually enqueueing a range to the garbage collection (GC) queue now properly respects the SkipShouldQueue option. This ensures that you can force the GC of a specific range. [#60746][#60746]

LGTM

@ajwerner & @taroface: Thanks for the super quick review.

Online preview: http://cockroach-docs-review.s3-website-us-east-1.amazonaws.com/89585b85ca7e522f9834a88bb4cf428d83036a00/
Edited pages:

releases/v20.1.13.md

@taroface

I went with "Advanced debugging" because that's the title once you get to the page, although the nav has it as "Advanced debug". It's a UI quirk that makes it hard to document, but the true page title seems better to use than the nav, so I'll lean toward keeping it as-is unless you feel strongly that it's worth changing it.
I also used "SkipShouldQueue" without backticks to match the UI. Again, a UI quirk: the label in the UI should've been changed to prose, but it's code-like. Wasn't sure which way to go on the code formatting. I agree that it at least looks wrong not to have it. I've now added it.
Good call on the Admin UI term. Thanks for that context. Edited to say:
- In the Advanced Debugging section of the Admin UI (DB Console),...

Online preview: http://cockroach-docs-review.s3-website-us-east-1.amazonaws.com/09f1592598177d4f9eab7c293e5004bd0e4dbcf6/
Edited pages:

releases/v20.1.13.md

Online preview: http://cockroach-docs-review.s3-website-us-east-1.amazonaws.com/38e725da85317b39f69e631ad32b6b85d6d259a5/
Edited pages:

releases/v20.1.13.md

Online preview: http://cockroach-docs-review.s3-website-us-east-1.amazonaws.com/38e725da85317b39f69e631ad32b6b85d6d259a5/
Edited pages:

releases/v20.1.13.md


test: add latest/earliest available attestation nonce keys tests

Overview

Closes https://github.com/celestiaorg/celestia-app/issues/1908
Checklist

[ ] New and updated code has appropriate documentation
[ ] New and updated code has new and/or updated testing
[ ] Required CI checks are passing
[ ] Visual proof for any user facing features like CLI or documentation updates
[ ] Linked issues closed with keywords

Codecov Report

Merging #1963 (b0f6de9) into main (c8f5c33) will increase coverage by 0.13%.
The diff coverage is 0.00%.

:exclamation: Current head b0f6de9 differs from pull request most recent head af75270. Consider uploading reports for the commit af75270 to get more accurate results

@@            Coverage Diff             @@
##             main    #1963      +/-   ##
==========================================
+ Coverage   21.25%   21.39%   +0.13%
==========================================
  Files         121      121
  Lines       13679    13679
==========================================
+ Hits         2907     2926      +19
+ Misses      10484    10465      -19
  Partials      288      288

Impacted Files
Coverage Δ

x/qgb/genesis.go
0.00% <0.00%> (ø)

... and 2 files with indirect coverage changes


SPIKE: Figure out next steps on doc site build

We need to figure out what to do about our docs site. We are currently using Gatsby v3, which is no longer supported and 2 versions behind.
Some considerations:

How do we keep our dependencies up to date and avoid staying so far behind?
How do we make our docs site compatible with our upcoming Carbon Charts work?
What is the level of effort for each of the options below, and which makes the most sense considering our future work?

Options:

Upgrade to v4
Upgrade to v5
Move away from Gatsby and replace with NextJS

(from conversation with Ryan)
What are the pain points / why should we consider moving away from Gatsby?

Pain points:

Does not play well with storybook
Has underlying dependencies that have not been updated in a while
GraphQL is sitting on Gatsby, so this may be the biggest challenge about moving away from it

Suggestions:

NextJS would be a great alternative to consider
Timebox investigating the upgrade

Based on my investigation, I propose that we upgrade to Gatsby v5 as the next step. This allows us to address current compatibility and dependency concerns without taking on a large migration effort in the short term.
Once Gatsby v5 reaches its end of life, we can then transition to Next.js to future-proof our documentation platform and benefit from its flexibility and compatibility with our tech stack.
its worth noting the current trajectory of Gatsby according to https://stateofjs.com/en-US/

Sounds like a good plan!

@moathabuhamad-cengage Just wondering, do we need to move to React 18 to move to NextJS?

yes we generally do to avoid running in problems, from NextJs docs:

Next.js suggests using, at a minimum<EMAIL_ADDRESS>and<EMAIL_ADDRESS>Older versions of react and react-dom do work with Next.js, however, they do not enable all of Next.js' features.


Vote and exclusion of new validators hosted by another organisation: what does it require?

Hello,
I just deployed my Kubernetes cluster in Azure, via the ARM template (quorum-kubernetes/azure)/arm/).
Now I'd like to simulate the vote and the exclusion of new validators hosted by another organisation.
Here is what I think to do so:
Since the "script" (quorum-kubernetes/azure)/scripts/) enables CNI to connect external nodes to my existing cluster, I guess I should create another cluster (the one who hosts the external node), peer both clusters together and make nodes and pods communicate across the clusters.
Is my reasoning correct ?
If the answear is positive:
How should I configure the external node, in order to make nodes and pods communicate across VNets?
Should pods (bootnodes and validators) of the two clusters share the same IDENTITY_CLIENTID and KEYVAULT_NAME ?

Hello @0x3N3JVhPUV
That is correct, you'd peer the VNets like so https://besu.hyperledger.org/en/latest/private-networks/tutorials/kubernetes/?h=vnet#multi-cluster. Alternatively, if you are using k8s v1.24 or higher you can skip the peering and use a loadbalancer with a fixed ip to connect all peers to the external node.
Everything on one cluster is completely seperate to everything on the other cluster (identity, keyvault, RBAC's etc) - the only thing that you are doing is peering them to join the network so to speak.
Once that is setup, you need to point the external node to the bootnodes or peers of the main cluster and open up 30303 for the nodes to connect. If you are using static-nodes or the like you need to edit these by hand to add in the external node.

Thank you @joshuafernandes,
So, should I just run the helm commands for bootnodes and validators in my second cluster? Or should run all helm commands included the genesis?
In the first cluster I setup 4 validators in the genesis and 4 validators are already running on it. Is that mean that I should add one more validator in the genesis in order to have an external validator?
Regards,

Hi @0x3N3JVhPUV
So slightly more involved. Basically on a new cluster if the genesis etc is rerun you will get a different network - all nodes on the same network need the same genesis file. So what you'd do is let say you start with the original cluster (cluster A) and the external one on (cluster_B)
I believe you have cluster_A already sorted, so:

If you are peering the Vnets instead, do that after you spin up the cluster_B  and leave the enode as is in the steps later down (ie you don't need a load balancer here as you've peered the Vnet so connectivity between clusters is established). Also ignore the step re network security group rules as that will be set at the VNet level when you peer

Thank you @joshuafernandes for your prompt answer!
Yes I'm peering the Vnets.
I spined up the cluster_B, I create its namespace but couldn't find the static-nodes.json in the "quorum-kubernetes" repository.
I could only find it on the Azure portale, here:

Now, when I'm trying to copy/past it (with the Azure portale) from cluster_A to cluster_B, I have the following message:

Same thing with the genesis...
So I guess I should copy/past them (genesis and the static-nodes.json) on the repository (quorum-kubernetes).
I can easly imagine where to past the genesis but where am I supposed to past the static-nodes.json, since it will be used to run the chart, to create my new node?
And how am I going to run it with the helm chart?
I also notice that the genesis on cluster_A ( in the Azure portale) is different that the one (on chart/besu-genesis/value.yaml) I'm using to deploy it.
Here is an example:

Why such a difference?
Regards,
Regards,

Thank you @joshuafernandes for your prompt answer!
Yes, I'm peering the Vnets.
Thus, I spun up the cluster_B, I created its namespace, but couldn't find the static-nodes.json in the quorum-kubernetes" repository.
So, in Azure portale, I tried to copy/past the content of the besu-peers file (in Home/Ressource_groupe/cluster_A/configuration) from cluster_A to cluster_B, but I got the following error message:

Same thing with the genesis...
Note: the besu-peers data = the content of static-nodes.json.
Therefore, I copy the content of the besu-peers file (in Home/Ressource_groupe/cluster_A/configuration) and pasted it in charts/besu-node/values.yaml in my quorum-kubernetes repository.
Here is a screenshot where I changed the path of the static-nodes by the content of besu-peers.

The reason why I did it, it's because I couldn't find , the static-nodes in the the quorum-kubernetes repository.
Then I ran the chart to create my new node on cluster_B with the same repository with which I deployed cluster_B, excepeted the fact that I change the static-nodes option in charts/besu-node/values.yaml.
To do so, I ran all the helm commands and created just one validator that I named validator-5.
I dont no yet if I'm doing good because both bootnodes and validator_5 are pending because of a FailedScheduling, but I'd like to know if I have the good approach yet.
Regards,

Hi @0x3N3JVhPUV the peer lists are created via the genesis chart, and then are updated on the fly when new nodes enter/leave the cluster. The configmaps may be called besu-peers/goquorum-peers and inside them is the content of the static-nodes.json that gets mounted.
Essentially in cluster_B you need to manually copy and paste everything that the genesis chart would have created, ie genesis file, static-nodes (or peers for besu) and keep the names the same. Have a look at the genesis chart templates and the pre-install hooks  in the besu-node chart so you can see what's happening there. p2p.staticNodes expects a file path not a list of nodes so that will not work.
Rather than this approach, I'd suggest using the playground examples where there is less automation and things are more static so you can see the individual pieces and what's going on. Note that you only need one of bootnodes or static-nodes.json; you can have both but it isn't required - the playground examples uses bootnodes and permissions. Use the playground examples to get what you want working cross cluster and the move to using the charts. What you are attempting to do is reasonably involved, and you will likely need to customise things to get it working for your setup so doing the playground examples first will help you understand what the moving pieces are.

Hi @joshuafernandes,
Thank you for your answer!
I finally could copy/past the genesis and the static-nodes from cluster_A to clusterB.
The reason why I was getting an error 500 was that ressourceVision should not be set on objects to be created.
So, I removed it from both files ( genesis and the static-nodes) before pasting them on cluster_B.
Then, I ran the chart to create my new node on cluster_B and add the node's enode to the static-nodes.json on cluster_A.
However, when comparing the before and the after of the creation of my external node, the number of peers remain the same....
Here is the command I'm using to get the number of peers:
curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":53}' http://xxxxxxxxx/rpc
What did I miss?
That said, I forgot to mention that, I want in my simulation cluster_A to be permissioned.
So, I guess, I should enable the nodes allowlist.
right?
If "yes", what else should I do in this scenario?
Can you, please, tell me what are the steps to follow with a permissioned cluster_A?
Last, I noticed that the genesis.json generated by my chart/besu-genesis/values.yaml contains hardcoded test accounts:
      "alloc": {
        "fe3b557e8fb62b89f4916b721be55ceb828dbd73": {
          "balance": "90000000000000000000000",
          "comment": "test account from quorum-dev-quickstart -- please remove me before entering production"
        },
        "f17f52151EbEF6C7334FAD080c5704D77216b732": {
          "balance": "90000000000000000000000",
          "comment": "test account from quorum-dev-quickstart -- please remove me before entering production"
        },
        "627306090abaB3A6e1400e9345bC60c78a8BEf57": {
          "balance": "90000000000000000000000",
          "comment": "test account from quorum-dev-quickstart -- please remove me before entering production"
        },

Why am I getting those test accounts, since I didn't add them in my chart/besu-genesis/values.yaml?
Here is a screenshot of my genesis:

Regards,

Hi @0x3N3JVhPUV I'd strongly suggest you look at the playground setup and start afresh. Once you undestand how all that works ie (genesis, accounts, permissions, static-nodes & cross cluster) then move to the helm charts. You've got quite a few issues and attempting to add functionality while fixing them all at once isn't ideal. Going through things one at a time is a better approach to understanding how this works,
In the playground setup, you control everything to the last detail and you can see what happens. In the prod setup we use the QGT to create the genesis artifacts, and there is an option to turn the test accounts off. They're on by default because most users run them and then don't have any accounts setup ie they therefore cannot make any txns.
Re the peer counts you can check what peers are missing with https://besu.hyperledger.org/en/latest/public-networks/reference/api/#admin_peers and check logs would be the best place to see what happened.
Have you tried permissioning with something like the dev quickstart or equivalent locally? https://besu.hyperledger.org/en/latest/private-networks/concepts/permissioning/ Of the two types local permissioning is easier and we have a tutorial here https://besu.hyperledger.org/en/latest/private-networks/tutorials/permissioning/. Once you have this working locally, its pretty much the same setup on k8s

Hi @joshuafernandes,
Thank you for your clear and prompt answer!
I'll definitaly look at the playground.
Yes, I already tried this tutorial ( https://besu.hyperledger.org/en/latest/private-networks/tutorials/permissioning/).
I'll try it again and I'll be back with feedbacks.
Regards,

:+1:

Hi @joshuafernandes,
I didn't finish yet look at the playground, but I have a question regarding my previous issue.
In chart/besu-genesis/values.yaml, shouldn't I need, as part of my authorized network configuration, a file path to authorize access to the specified nodes?
If the answer positive; what's the path and why is it empty?
If the answer is negative; how am I supposed to whitliste specified nodes without it?
Regards,

Hi @0x3N3JVhPUV,
I'd suggest starting with the tutorials here https://besu.hyperledger.org/en/latest/private-networks/tutorials/permissioning/ and pick the method of permissions you want to use ( local permissions is the preferred choice and then move to contracts if required).
If you need a setup that works already use the Quorum Dev Quickstart which has examples of static nodes and local permissions.
The genesis file on a private chain (&chart here) has nothing to do with permissions - it merely sets out the first block for the network; who the validators are and any beneficiary accounts.
I'd strongly suggest going through the tutorials first, move to the quorum dev quickstart and then the k8s playground piece. These are concepts not really related to this repo so I'd also recommend posting in the official discord channels https://discord.com/channels/905194001349627914/938504958909747250 and https://discord.com/channels/697535391594446898/743193040197386451
I really wouldn't suggest attempting to learn permissioning in a k8s environment for the first time, as there are a lot of moving pieces
Regards

Hi @joshuafernandes,
Thank you for your answer.
You are completely right about the fact that The genesis file on a private chain has nothing to do with permissions. I just pasted the wrong path. I'd past this one chart/besu-genesis/values.yaml. Sorry about that.
That said, I'll definitaly go through the tutorials and the quorum dev quickstart before the k8s playground piece.
Regards,

Hi @joshuafernandes,
From my understanding of this turorial, I need private network PERM (permissioning) methods, such as perm_addNodesToAllowlist, for local permissioning.
In the "quorum-kubernetes" k8s environment, It seems that I have to do two things ( in chart/besu-node/values.yaml), in order to be able to use those methods:

Setting permissions.node.enable to true.
Adding the right value to the permissions.filepath (which is empty by default).

If I skip the first step, I'm getting the following ouptut:
$ curl -X POST --data '{"jsonrpc":"2.0","method":"perm_getNodesAllowlist","params":[], "id":1}' http://xx.xx.xxx.xxx/rpc
{
  "jsonrpc" : "2.0",
  "id" : 1,
  "error" : {
    "code" : -32000,
    "message" : "Node allowlist has not been enabled"
  }
}

And If I just do the first step, pods are crashing because of the empty value of permissions.filepath:
besu-genesis-init-2snh7                                           0/1     Completed          0               21h
besu-node-bootnode-1-0                                            0/1     CrashLoopBackOff   6 (4m32s ago)   10m
besu-node-bootnode-2-0                                            0/1     CrashLoopBackOff   6 (4m21s ago)   10m
besu-node-member-1-0                                              1/2     CrashLoopBackOff   6 (112s ago)    7m44s
besu-node-rpc-1-pre-install-hook-h2nnh                            0/1     Completed          0               11m
besu-node-validator-1-0                                           0/1     CrashLoopBackOff   6 (4m9s ago)    10m
besu-node-validator-2-0                                           0/1     CrashLoopBackOff   6 (4m3s ago)    9m44s
besu-node-validator-3-0                                           0/1     CrashLoopBackOff   6 (3m25s ago)   9m21s
besu-node-validator-4-0                                           0/1     CrashLoopBackOff   6 (2m15s ago)   8m15s

my-prompt:~/besu-prod2/helm$ kubectl logs besu-node-validator-2-0 --namespace quorum
Defaulted container "validator-2-besu" out of: validator-2-besu, volume-permission-besu (init)
Setting logging level to ERROR
Unable to read permissioning TOML config file :  Configuration file does not exist:

To display full help:
besu [COMMAND] --help

Thus, in this context, is it correct to think that getting the missing value of permissions.filepath seems to be the solution to be able to use the PERM (permissioning) methods ?
If the answer is positivie, can you shed some light on how to do it, because after many tries and even based on pertinent tutorial, I could not get the right value for permissions.filepath.
Or is there something that I missed in my understanding of how permissioning locally works (in the "quorum-kubernetes" k8s environment) ?


Fix a complex case where uiSchema loses previous values

In non trivial cases of using eg a schema with dependencies,
the extractUiSchema function could reset ui properties previously
set by the recursive call.
Signed-off-by: Eric Bottard<EMAIL_ADDRESS>Hey, I just made a Pull Request!

:heavy_check_mark: Checklist

[x] A changeset describing the change and affected packages. (more info)
[ ] Added or updated documentation
[x] Tests for new functionality and regression tests for bug fixes
[ ] Screenshots attached (for UI changes)
[x] All your commits have a Signed-off-by line in the message. (more info)

My pleasure. Thanks for reviewing + merging.


[synapse] LRO for Spark Batch/Sessions/Statements

This is a first stab at writing LROs for Synapse. I used existing code as a guide given people's limited availability this month, so it could be wrong or stale in places compared to guidelines. Please review strictly once this goes off draft (or before, if you'd be so kind).
I am uncertain if copying the operations from generated code to make them internal (so I can call them) is best, or if there is a better pattern.
I intentionally did not comment the methods I created to make them easier to note against the copied generator code
Converted both the sample that executes and two tests that don't run (yet) to LRO. I plan on extending the test suite soon.
I missed one test in my last PR that fails in Live mode, so shutting that up as I go

FYI @Tianyun-G who helpfully found these.

Tests pass locally for me in Live mode on Windows.

Looking at this more, I think I can skip some of the generated code once I collapse the async/sync variants as suggested, doing some refactoring.

Question: Is there a better way than this to wait for an operation in sync contexts? I'm using it in a number of tests:
            SparkStatementOperation getStatementOperation = client.StartGetSparkStatement(sessionCreated.Id, statementCreated.Id);
            while (!getStatementOperation.HasCompleted)
            {
                System.Threading.Thread.Sleep(2000);
                getStatementOperation.UpdateStatus();
            }
            SparkStatement statement = getStatementOperation.Value;

All tests pass locally on Windows Live. Uploading new recordings shortly.

Going to rebase and PR.

Going to rebase and PR.


Update index.html

@aayushsaini1  try this year and make sure you follow and star the repo Happy hacking


[DAT-8952] Fixes antivirus updates failing to download

This job writes to /tmp/ by default the only writeable location in Lambda
If AWS fails to provision a new instance for repeated runs can fill /tmp/
as it's not cleared between runs if the instance is re-used
This commit clears /tmp/ after a run. It also updates the Dockerfile with
several dependencies as the base image has changed since our last
rebuild.
Tested in production becaue things were broke.

 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.


my_final_ project

updating to the correct branch!

I don't know how to do it.

Hi! So, I was able to create the pull request myself (which is what this thread is) to the branch that is updated properly. I am going to submit a pull request to your repository soon. I will leave the comments here after I do that!

Thank you.  I can't find the file in Jupiter notebook now.  I think we moved to the project_spring_2020 right? from ls, I only see project_spring_2020 right.
On Thursday, May 7, 2020, 09:45:00 PM EDT, emily yaklich<EMAIL_ADDRESS>wrote:
Hi! So, I was able to create the pull request myself (which is what this thread is) to the branch that is updated properly. I am going to submit a pull request to your repository soon. I will leave the comments here after I do that!
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

Hi,
I have just submitted a pull request to your niezu:master branch of your project_spring_2020 repository. In order to see this and merge the pull request with your branch, go to your niezu/project_spring_2020 repository (make sure that you are on the master branch - you have another branch named patch-1 which does not contain the updated scripts) and click on the pull requests tab and then you can choose to merge pull request which will integrate my updates into your repository.
A little bit about the update suggestions that are included in the pull request:

I have created a setup.py file (part of packaging your code) which you can fill out the information in this script like your name, email, short description, the name of the package etc. I have already added the URL to your repository in this file.
In the tests directory of your repository I added an example test in the sample_test.py file that will test the 'test_convert_c_to_f' function from your script. You can add tests for your other functions to this same file as well. You can run your tests by using

pytest sample_test.py

in the terminal.

I moved your my_final_project.ipynb notebook into the project_spring_2020/ directory in order to organize the repository.

I think that covers most of the updates that I am suggesting. Another thing I would suggest is to make sure that the my_final_project.ipynb does not have any errors in the code itself. It might help to tidy up the notebook a bit so it only contains the definitions of specific functions that you use within the script.
Let me know if you have any questions!

and, yes, on your local computer your my_final_project.ipynb notebook is located in the project_spring_2020/ directory!

Hi Thank you so much.  I really appreciate your help. I haven't look it yet, but I will do it soon.  I have another questions.1, How can save something I put in the read me?
2.  I found there are typo on the project.  How can I change it? the last formula should be /18, but it was -32.
Thank you.
On Thursday, May 7, 2020, 11:21:26 PM EDT, emily yaklich<EMAIL_ADDRESS>wrote:
Hi,
I have just submitted a pull request to your niezu:master branch of your project_spring_2020 repository. In order to see this and merge the pull request with your branch, go to your niezu/project_spring_2020 repository (make sure that you are on the master branch - you have another branch named patch-1 which does not contain the updated scripts) and click on the pull requests tab and then you can choose to merge pull request which will integrate my updates into your repository.
A little bit about the update suggestions that are included in the pull request:

I have created a setup.py file (part of packaging your code) which you can fill out the information in this script like your name, email, short description, the name of the package etc. I have already added the URL to your repository in this file.
In the tests directory of your repository I added an example test in the sample_test.py file that will test the 'test_convert_c_to_f' function from your script. You can add tests for your other functions to this same file as well. You can run your tests by using
pytest sample_test.py

in the terminal.

I moved your my_final_project.ipynb notebook into the project_spring_2020/ directory in order to organize the repository.

I think that covers most of the updates that I am suggesting. Another thing I would suggest is to make sure that the my_final_project.ipynb does not have any errors in the code itself. It might help to tidy up the notebook a bit so it only contains the definitions of specific functions that you use within the script.
Let me know if you have any questions!
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

Did you edit your README.md file from github or from your local computer?
To fix the errors in your my_final_project.ipynb notebook you can open the notebook on your local computer in Jupyter Lab, make the edits and save them. You can then add and commit your changes using git and push them to your remote repository on github (this is using the git add --all, git commit and git push commands in your terminal.

Hi, I know  how to save the changes now.
Nie
On Thursday, May 7, 2020, 11:21:26 PM EDT, emily yaklich<EMAIL_ADDRESS>wrote:
Hi,
I have just submitted a pull request to your niezu:master branch of your project_spring_2020 repository. In order to see this and merge the pull request with your branch, go to your niezu/project_spring_2020 repository (make sure that you are on the master branch - you have another branch named patch-1 which does not contain the updated scripts) and click on the pull requests tab and then you can choose to merge pull request which will integrate my updates into your repository.
A little bit about the update suggestions that are included in the pull request:

I have created a setup.py file (part of packaging your code) which you can fill out the information in this script like your name, email, short description, the name of the package etc. I have already added the URL to your repository in this file.
In the tests directory of your repository I added an example test in the sample_test.py file that will test the 'test_convert_c_to_f' function from your script. You can add tests for your other functions to this same file as well. You can run your tests by using
pytest sample_test.py

in the terminal.

I moved your my_final_project.ipynb notebook into the project_spring_2020/ directory in order to organize the repository.

I think that covers most of the updates that I am suggesting. Another thing I would suggest is to make sure that the my_final_project.ipynb does not have any errors in the code itself. It might help to tidy up the notebook a bit so it only contains the definitions of specific functions that you use within the script.
Let me know if you have any questions!
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

I changed on GitHub and  edit the file and clicked commit changes.  Is it ok?
I received email from GitHub asked me to change the repository name, at that timeI hasn't received your e-mail.  I changed to Pathon-2020.  I don't know what will happen.  I look at it tomorrow.  Thank you for the help.
Nie
On Thursday, May 7, 2020, 11:47:02 PM EDT, emily yaklich<EMAIL_ADDRESS>wrote:
Did you edit your README.md file from github or from your local computer?
To fix the errors in your my_final_project.ipynb notebook you can open the notebook on your local computer in Jupyter Lab, make the edits and save them. You can then add and commit your changes using git and push them to your remote repository on github (this is using the git add --all, git commit and git push commands in your terminal.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

Hi Emily,  I changer the project in my computer Jupiter lab.  In terminal , I typed git add --all (return), it doesn't work and I typed git add --all, git commit( return) It still doesn't work. It says that 'no git repository.
Nie
On Thursday, May 7, 2020, 11:47:02 PM EDT, emily yaklich<EMAIL_ADDRESS>wrote:

Did you edit your README.md file from github or from your local computer?
To fix the errors in your my_final_project.ipynb notebook you can open the notebook on your local computer in Jupyter Lab, make the edits and save them. You can then add and commit your changes using git and push them to your remote repository on github (this is using the git add --all, git commit and git push commands in your terminal.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

Make sure that you are in your project_spring_2020/ directory on your computer. In your terminal you can try typing:
cd project_spring_2020

Then the git add --all, git commit and git push commands should work.

Ok, I will try, Thank you.
Nie

On May 8, 2020, at 12:27 PM, emily yaklich<EMAIL_ADDRESS>wrote:
Make sure that you are in your project_spring_2020/ directory on your computer. In your terminal you can try typing:
cd project_spring_2020
Then the git add --all, git commit, and git push commands should work.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub https://github.com/biof309/project_spring_2020/pull/31#issuecomment-625897670, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALJLHOT3ZTLTOUXPO23T5RTRQQXF5ANCNFSM4M3YU3OQ.

Hi ,
I did, after type the git commit ( return), It ask me enter the commit message for your changes.  I typed git push,  git push committed files.  I don’t know if it works.
Thank you.

On May 8, 2020, at 12:27 PM, emily yaklich<EMAIL_ADDRESS>wrote:
Make sure that you are in your project_spring_2020/ directory on your computer. In your terminal you can try typing:
cd project_spring_2020
Then the git add --all, git commit, and git push commands should work.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub https://github.com/biof309/project_spring_2020/pull/31#issuecomment-625897670, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALJLHOT3ZTLTOUXPO23T5RTRQQXF5ANCNFSM4M3YU3OQ.

Looks like it didn't go through because I checked the project in local computer.  The readme file should use the one I changed in my computerist is README 005082020.
Nie
On Friday, May 8, 2020, 12:27:13 PM EDT, emily yaklich<EMAIL_ADDRESS>wrote:
Make sure that you are in your project_spring_2020/ directory on your computer. In your terminal you can try typing:
cd project_spring_2020
Then the git add --all, git commit, and git push commands should work.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

Hi Emily,
I am sorry to disturb you again.  I understand that the class is finished.  I followed your instruction and got the following result, and I don't know where is my final project file.  Could you help me with it?  Thank you very much.
(base) NCI-02181266-ML:project_spring_2020 niezu$ git add --all
(base) NCI-02181266-ML:project_spring_2020 niezu$ git commit
hint: Waiting for your editor to close the file...
E325: ATTENTION
Found a swap file by the name "~/project_spring_2020/.git/.COMMIT_EDITMSG.swp"
owned by: niezu   dated: Fri May  8 12:44:33 2020
file name: ~niezu/project_spring_2020/.git/COMMIT_EDITMSG
modified: YES
user name: niezu   host name: NCI-02181266-ML
process ID: 13222
While opening file "/Users/niezu/project_spring_2020/.git/COMMIT_EDITMSG"
dated: Fri May  8 18:21:22 2020
NEWER than swap file!
(1) Another program may be editing the same file.  If this is the case,
be careful not to end up with two different instances of the same
file when making changes.  Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r /Users/niezu/project_spring_2
020/.git/COMMIT_EDITMSG"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file "/Users/niezu/project_spring_2
020/.git/.COMMIT_EDITMSG.swp"
to avoid this message.
Swap file "~/project_spring_2020/.git/.COMMIT_EDITMSG.swp" already exists!
 In your terminal you can try typing:
cd project_spring_2020
Then the git add --all, git commit, and git push commands should work.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

Hello,
Could you try running the following in your project_spring_2020 folder?
git rm .git/.COMMIT_EDITMSG.swp
Then try running git commit again.
-Paul

Hi Paul,
Thank you for the help,
I tried and I got the message as following:
E325: ATTENTION
Found a swap file by the name "~/project_spring_2020/.git/.COMMIT_EDITMSG.swp"
owned by: niezu   dated: Fri May  8 12:44:33 2020
file name: ~niezu/project_spring_2020/.git/COMMIT_EDITMSG
modified: YES
user name: niezu   host name: NCI-02181266-ML
process ID: 13222
While opening file "/Users/niezu/project_spring_2020/.git/COMMIT_EDITMSG"
dated: Wed May 13 00:10:57 2020
NEWER than swap file!
(1) Another program may be editing the same file.  If this is the case,
be careful not to end up with two different instances of the same
file when making changes.  Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r /Users/niezu/project_spring_2
020/.git/COMMIT_EDITMSG"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file "/Users/niezu/project_spring_2
020/.git/.COMMIT_EDITMSG.swp"
to avoid this message.
Swap file "~/project_spring_2020/.git/.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:

On May 11, 2020, at 3:07 AM, Suhwan Paul Lee<EMAIL_ADDRESS>wrote:
Hello,
Could you try running the following in your project_spring_2020 folder?
git rm .git/.COMMIT_EDITMSG.swp
Then try running git commit again.
-Paul
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub https://github.com/biof309/project_spring_2020/pull/31#issuecomment-626513854, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALJLHOVWXEOASLXFXPQDFBDRQ6P2XANCNFSM4M3YU3OQ.


Make GUI help link URL creation conditional

Most plugins have a help link on their title panel which is added via JMeterPluginsUtils.addHelpLinkToPanel.
However, this assumes that the help page is hosted on JMeter-Plugins.org and the URL is generated to point there, which does not work for external plugins.
In order for external plugins to still use the help link feature when subclassing common GUI classes (e.g. AbstractGraphPanelVisualizer etc) the help link should not be modified if it already is an (external) URL.

There has to be unit test covering this change.

@undera Do you really need those static checks fixed? This is tough when taking inherited or legacy code and needing to make minor changes (and may actually put off contributors). This PR actually increases the JMeterPluginsUtils coverage (by 0.95%) but it was low to begin with which I don't have time to fix unfortunately.

The reason I'm asking to cover changes is because I want to avoid simple things like NPEs to leak into codebase. My practice shows that simple coverage gives a lot of control for basic quality.
I hope contributors understand why I'm asking for it, it is only because we care of quality for our users.
This might be one more reason why you would like to have next plugin as your own repo - you don't have to have any unit tests there. But for base infra classes I want to ensure that next change won't break previous.

Thanks for contributing this change!

Totally agree with the coverage requirement. It's just frustrating when checks fail because coverage of a class was already low before a small change that has unit tests.
Happy to contribute, and I wish I had more time to add more tests.


In memory model transfer between neuron and coreneuron

Merging first draft from Michael to transfer neuron model to coreneuron with DMA

I think we should run valgrind to make sure all memory is getting freed in embedded mode.

With respect to valgrind, that is an excellent idea. Note that the ability to make multiple calls to
pc.nrncore_run(string) has not been thought through yet.

@nrnhines : with last two commits I have fixed memory leaks with valgrind. I am not sure about removing event from queue:
==53751== 96 bytes in 2 blocks are definitely lost in loss record 79 of 118
==53751==    at 0x100099616: malloc (in /usr/local/Cellar/valgrind/3.13.0/lib/valgrind/vgpreload_memcheck-amd64-darwin.so)
==53751==    by 0x10135BE0D: operator new(unsigned long) (in /usr/lib/libc++abi.dylib)
==53751==    by 0x1000F668B: coreneuron::TQueue<(coreneuron::container)1>::insert(double, void*) (tqueue.ipp:243)
==53751==    by 0x1000F5294: coreneuron::NetCvode::event(double, coreneuron::DiscreteEvent*, coreneuron::NrnThread*) (netcvode.cpp:251)
==53751==    by 0x100101331: coreneuron::NetParEvent::send(double, coreneuron::NetCvode*, coreneuron::NrnThread*) (netpar.cpp:132)
==53751==    by 0x100101BEF: coreneuron::nrn_spike_exchange_init() (netpar.cpp:306)
==53751==    by 0x10011C69E: coreneuron::checkpoint_initialize() (nrn_checkpoint.cpp:860)
==53751==    by 0x1000D3F7A: solve_core (main1.cpp:396)
==53751==    by 0x100001F81: main (coreneuron.cpp:33)

Obviously this is not related to this branch though.


Feature Request: Implement derive_var_relative_flag

Feature Idea
The derive_var_relative_flag() function should have the same arguments as filter_relative() and additionally a new_var argument. The function should flag the observations which would we returned by filter_relative().
Relevant Input
No response
Relevant Output
No response
Reproducible Example/Pseudo Code
Flag observations up to first PD for each patient:
response %>%
  derive_var_relative_flag(
    by_vars = vars(USUBJID),
    order = vars(AVISITN),
    new_var = ANL02FL,
    condition = AVALC == "PD",
    mode = "first",
    selection = "before",
    inclusive = TRUE
  )

@bundfussr how would we use this to achieve ANL02FL as both up to/incl PD & on/after randomization date? As there's no filter argument I guess we could add the ADT>=RANDDT anywhere here?

@rossfarrugia , if you want to exclude observations before randomization from flagging, you can use restrict_derivation().


[fabrikate4k] Add boolean Fabricator

Hi everyone,
I was stumbling upon this when trying to create a supposely simple data class. There is a Fabricator instance for every primitive type exception boolean in the library. Is it intentional that there is none for boolean? Adding something like
class BooleanFabricator(private val random: Random = Random) : Fabricator<Boolean> {
    override fun invoke() = random.nextBoolean()
}

should be easy enough. Therefore I wonder is this was intentionally omitted.
Cheers,
Ronny

Nope - total oversight. /facepalm :)

No problem ^^
While you're at it you might wanna add a ByteFabricator, too. There is only one for ByteArray.


Unify sudo behavior for installing Xcode and runtimes

This PR removes the old sudo implementation, and uses the same behavior used by runtimes .

@StevenSorial I hope this PR can be merged soon 🤞🏼

@MattKiazyk Is this pr a no-go? I was hoping it could be merged, so follow it with other PRs.

Thank you for your response and sorry for my late reply. I will present some arguments why I think that might not be the right decision but feel free to skip them if it's not open for discussion.
Consistency with runtimes
#230 was accepted with this sudo implementation, so this PR just make it consistent across the whole app. It was not a security/stability concern for the runtimes command, so I don’t see why it will be for the other commands.
Not a real concern

DECISIONS.md

Run xcodes with sudo: xcodes doesn’t need elevated privileges the entire time, and means simple programmer mistakes can have bad consequences

It doesn’t allow some accidental code that needs higher permission from actually getting it and It’s being a nice player in open source.

While this concern is legitimate, I think it’s exaggerated. Many of the command line tools we use sometimes require sudo, and we don’t think much about it because they most probably have a good reason why they needed it, and because the community already tried and trusts the developers.
Also, In this PR and in #230, sudo is not always required, and only requested when the user entered a command that will require it, e.g,  for runtimes, sudo is not required when only downloading an image or when installing >=iOS 16 image.
Personally, as a user, I would be more concerned if a program is handling my password manually instead of the shell/system
Hacky (IMO)

It’s being a nice player in open source

Maybe I don’t look into many CLI tools code, but I personally have never seen this solution. Moreover, I see it as a maintainability burden.
I also had some problems with it while implementing #230 where it sometimes asked for the password while I already had privilege + It doesn’t work when using touchid for sudo.
@MattKiazyk @rogerluan What do you think? I hope that I'm not arguing too much 😅


Default sort order for posts needs to consider status 'scheduled'

The orderDefaultOptions() for posts model return a sort order which needs to be updated in regards of the new scheduling feature (#6861). Status quo the order is

status: 'ASC',
published_at: 'DESC',
updated_at: 'DESC',
id: 'DESC'.

This worked out well so far, because we want to have posts with status 'draft' before posts with status 'published' and the usual alphabetical, ascending order (d before p) works fine.
Now, as we expanded the posts to also have a status 'scheduled', these posts would always be last in order, if we'd remain the regular order.
For usability reasons, 'scheduled' posts should be listed first. Then 'draft' and finally 'published'.

I suggest to return a custom sorting function (if needed), which returns the order like this:
1. status: 1. scheduled, 2. draft, 3. published
2. published_at: 'DESC',
3. updated_at: 'DESC',
4. id: 'DESC'
The comparison between a 'draft' and 'published' can stay the same, as the alphabetical order is valid here. Anytime a 'scheduled' post is compared with a different status, it should get the higher priority in the order. published_at, updated_at and id will remain unaffected.

Reason, why we have to do this:

The API endpoint is paginated so we need the server to return the posts in the right order by default or have some way to instruct the server to return posts in the order that we want.

^ thanks @kevinansfield

I don’t think the server should implement a custom sort logic for this problem. Just imagine we add a sort filter to ember in the future, so the user can decide how to show the posts. Then you need additional sort logic anyway (you don't want to request the server to get a new order)
That’s why here is my suggestion:
We can change status to DESC in the server, then scheduled posts are always on top, drafts are on the bottom.
When receiving the result, switch draft and published posts by finding out the indices: (this code example is just an example and is not a full solution)
var result = [{status: 'scheduled'}, {status: 'scheduled'}, {status: 'published'}, {status: 'draft'}, {status: 'draft'}];
var draftIndex, publishedIndex;

result.forEach(function(model, index) {
	if (model.status === 'draft' && !draftIndex) { draftIndex = index };
	if (model.status === 'published' && !publishedIndex) { publishedIndex = index };
    });

result = result.slice(0, publishedIndex-1).concat(result.slice(draftIndex, result.length)).concat(result.slice(publishedIndex, draftIndex));

This logic could be a default sort module in ember.

We already implemented the custom sort order in ember, but it seems to be the same on both sides, as I can read from the comments:
https://github.com/TryGhost/Ghost-Admin/blob/master/app/controllers/posts.js#L6
But maybe I'm wrong?
@kevinansfield @ErisDS

The API endpoint is paginated so we need the server to return the posts in the right order by default or have some way to instruct the server to return posts in the order that we want.

I just updated the issue description with this information.

I assume you have a variable in ember where all your posts are stored, so you can still order in ember, not based on the api result, based on an update of the list. (if you later have performance problems, you could reusing DOM elements)

I assume you have a variable in ember where all your posts are stored

The API is paginated so we will almost always have a partial store of posts on the client-side. If there's no way to control the order of data the server is giving us we would need to download every post in the database in order to sort it correctly.
For the client the API is the "database" and the same principles that would apply to interacting with a database directly on the server apply to the client interacting with the API.
Server-side you wouldn't pull everything out of the database into a variable because the ordering isn't what you want, you'd instruct the database to return the data in the order that you want so that you can use LIMIT and fetch the data in pages. The same needs to be possible with the API - right now we have a default order, in the future we might have custom ordering but the API will still need to support that custom ordering.

The ideal solution would be a way to provide arbitrary ordering instructions to the API via query params however that potentially opens us up to abuse and denial of service attacks which I imagine is why the existing order parameter is limited.
Until such time as the ordering is more flexible I think we need to have the API order match the client-side ordering.
In SQL the ORDER statement would be:
ORDER BY
    CASE WHEN status = 'scheduled' THEN 1
         WHEN status = 'draft' THEN 2
         ELSE 3 END ASC,
    published_at DESC,
    updated_at DESC,
    id DESC

However, I'm not sure how this would interact with other API options, for example if the filter parameter is used and the status field is not returned is that reflected in the database query (potentially breaking the order statement) or is the filtering done after the query but before generating the returned JSON?

The server side orderDefaultOptions() sets up the correct order for our API "default". It creates the correct order for returning all posts, and still returns published posts in chronological order, newest first, for when you're only looking at public data.
The rules, e.g. that public posts should be returned in order of published_at with the newest first, and the rules set out in this issue where scheduled posts should be first are the business logic of our particular models, and so they make sense as being the defaults for the API to return. It makes very little sense to have a default that no one is actually using.
The API can return posts in different orders if you specify an order parameter but this is currently limited. In order to implement this, we're going to need to use SQL case statements (as @kevinansfield has just added in his comment) - this is more complex than anything that the order parameter can currently convey, which is another reason for making it the default.
It may be that this adds overhead such that it makes sense to split between a "public default" and a "private default", but we'd need to test for performance issues to measure whether that's really worth resolving.

@kevinansfield I'm not sure about whether using fields to not include status in the result would cause a problem - if it does, that would be considered a bug. It's not insurmountable as we can manually add on extra fields to fetch and exclude them again from the result set.

@ErisDS Because of all this (thanks for summarize), i've suggested a ember client solution for the first version of scheduling.

IMO the API is our first concern. We deliberately build our API to "dogfood" and by finding and fixing problems with the API upfront we ensure that everyone else can also build meaningful clients. That is, if we have to workaround a problem with the API, then so does anyone else building a client.
In this case, I also don't think there is a workable client-side fix for this, as explained by @kevinansfield, in order to get the right order the ember client would always need to load all the posts.
This may result in the UI loading slowly, jumping around, or other misbehaviour, as we have seen in the past when the client & server orders don't match.

My 2 cents about the description:

For usability reasons, 'scheduled' posts should be listed first.
Then 'draft' and finally 'published'.

I don't think this is good from a usability perspective: I'd rather see posts move down in a list from "draft" (top) to "scheduled" to "published" (bottom).
Think about it: If the UI showed scheduled first, the post starts in the middle of the list (assuming other posts are already scheduled), then moves up to scheduled, then all the way down to scheduled based on time.
I imagine this to be very confusing to users.

I will care about the ordering on the server side asap.


[Codegen] Add pass to further tile large linalg ops

In certain cases/configurations we can end up with excessively large static linalg.generic ops that will then vectorize and emit code with huge vector sizes. This at a minimum will yield terrible code, and can even crash/hang LLVM when trying to compile such an enormous function.
The implementation here only looks at parallel dims and linalg ops. Large reductions and other vectorizable ops will likely need handling as well, but "vectorizability" isn't really queryable today.
The pass has an options for a maximum vector size to tile to, but the logic here could potentially use some future improvement (e.g. maybe expose a target vector size too to use when we choose to tile).
Also note that in many cases where we hit this is likely to generate poor code because we can often end up with large local/stack allocations, but by the time we get to this point there isn't much else we can do. Better to ask for an allocation than 10k lines of unrolled IR.

Drive by: I don't really like the "solution" that I'm going to suggest, but at least it should make user experience better. There is an option in GenericVectorization that allows you to not vectorize a linalg op when the total elements are greater than the threshold. The performance would be bad for sure, but it does not create huge vectors.
https://github.com/iree-org/iree/blob/c651ba9257315af96e75a371537f3cf8ab080cb0/compiler/src/iree/compiler/Codegen/Common/Passes.td#L336-L338

Hmmm that sounds like it's probably worth enabling as well. This pass should in theory also give us better vectorization of dynamic cases so I'm going to keep it for now. The example that this fixes is already encoded as a pipeline test anyway so we won't regress on the part that matters if we want to change it in the future.


Bits11

And here some moar bugs for 1.1! :tada:

Should this be merged pre or post 1.0.10 merge in ?

It's the same.


build: Use new FT structure

Deploys the RSTUF using Worker image from source code

Uses two different deployment:

Local Services with RabbitMQ as broker (message queue)
Local Service with Redis as broker (message queue)

Uses the RSTF Umbrella run-ft scripts

DAS
Signed

Enables developers to run FT locally

@MVrachev,
Here is the FT running from my fork.
https://github.com/kairoaraujo/repository-service-tuf-worker/actions/runs/6322622627/job/17168583592
It requires first the umbrella PR merged.
Once the umbrella PR is merged, we can approve this PR and see the FT.


Remove service_name and SPLUNK_SERVICE_NAME config options

Description
Removing explicit config options for service name as suggested by the GDI spec.
Type of change
Please delete options that are not relevant.

[ ] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[x] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[x] This change requires a documentation update

How Has This Been Tested?

[x] Tested manually
[x] Added automated tests

Checklist:

[x] Changelogs have been updated
[x] Unit tests have been added/updated
[x] Documentation has been updated

Is it not in conflict with https://github.com/signalfx/gdi-specification/issues/78#issuecomment-832966242 ? Maybe it will be better to wait a while?

Not really. This is actually confirming to GDI spec as the spec says service.name should be set via OTEL_RESOURCE_ATTRIBUTES.


Require lowercase translations

Hi! I've converted translations to lowercase and added a test that will fail if there's a translation containing uppercase characters.
#150

Awesome, thank you very much!
merged


Images won't download

Hey. i'm getting this error while fetching infos from discogs.
ERROR:discogstagger.taggerutils:Unable to download image '', skipping. Error: Unsupported URL  ().

hey @fwolfers , please pass along the release id you're attempting to tag.

@fwolfers , thanks for reporting this. I have a fix locally for this and will be checking it in this week,

Addressed in commit https://github.com/jesseward/discogstagger/commit/7cd13695d818fbc2b9f4cd2bee9de8e5442acff0


[Feature]Addition of context field for chatgpt  for users

Is your feature request related to a problem? Please describe.**
As project chit chat creating chatbot and leveraging chatgpt's potential
It's crucial we use it to full extent
When user will be able to set context for chatgpt it will perform outstandingly
For ex-

I am developing web app for medical assistance than I would give chatgpt context imagine yourself as an expert in providing medical assistance
I am developing webapp for law enforcement than context would be different
in case of business queries it would be different hence context setting by user important
would cater wide variety of users

Describe the solution you'd like

Would be using prompt template
Would edit logic in backend accordingly

@apurvjha123 please look into idea if u like it I would start working in it


fix(server): Drain requests on drop.

If a client sent an illegal request (like a GET request with a message
body), or if there was a legal request with a body but the Handler
didn't read all of it, the remaining bytes would be left in the stream.
The next request to come from the same client would error, as the server
would confuse the remaining bytes, and think the request was malformed.
Fixes #197
Fixes #309

@reem fixed the draining logic. I just use copy to a NullWriter.
Switching to new io will just require changing NullWriter to Sink. The EOF logic is handled inside copy, so nothing to screw up.

Looks great.

Actually, this is a horrible idea security-wise, I think. I may start reading a request body, see it's super long, and quit. I do not expect hyper to silently read the other 40 GB of that request.

Oh dang, good catch. I'll look at nodejs for inspiration.
On Sat, Feb 14, 2015, 3:12 PM Jonathan Reem<EMAIL_ADDRESS>wrote:

Actually, this is a horrible idea security-wise, I think. I may start
reading a request body, see it's super long, and quit. I do not expect
hyper to silently read the other 40 GB of that request.
—
Reply to this email directly or view it on GitHub
https://github.com/hyperium/hyper/pull/310#issuecomment-74396165.


fix: forge fmt respects project's foundry.toml

Analogous to https://github.com/juanfranblanco/vscode-solidity/pull/363 (h/t @shekhirin), this PR ensures the formatter respects the fmt settings in the foundry.toml file

Codecov Report

:exclamation: No coverage uploaded for pull request base (development@a4efdc5). Click here to learn what that means.
The diff coverage is n/a.

@@              Coverage Diff               @@
##             development     #316   +/-   ##
==============================================
  Coverage               ?   57.08%
==============================================
  Files                  ?      173
  Lines                  ?     4316
  Branches               ?      707
==============================================
  Hits                   ?     2464
  Misses                 ?     1619
  Partials               ?      233

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

Thanks @mds1, that is great. We will get it reviewed in the next few days.

Huh looks like some CI tests failed for yarn run test:protocol, but they do pass when locally

@mds1 don't worry about that, macOS CI sometimes fails to download and install foundry and then some tests fail. This change is not breaking any tests


Roadmap 1.0.0

The next version of Boabab will, to be able to move forward, introduce some breaking changes. As such, this version shall be the 1.0.0 one to respect semver principles.
Here is a list of things that will probably change so that we can discuss them before they are actually implemented.
Note: any development related to this 1.0.0 version will take place on a dedicated branch of the repository.
Reference shifting
Reference shifting will become Baobab's default while the option should disappear altogether. This is necessary to ensure that easy "immutabley" comparisons are possible.
Related to #86.
Dropping typology
Version 1.0.0 will remove its dependency to the typology library. Instead, the library will give access to a validation hook that anyone will be able to customize at will rather than being imposed a way to do so by Baobab. This should also make the library lighter (~4/5 ko AFAIK).
Validate option proposition
var tree = new Baobab(data, {
  validate: function(path, currentState, proposedState) {

    // Perform validation and return false if invalid
    return false;
  }
})

It should be decided what a failed validation should trigger (an event, preventing a part of the transaction, the whole transaction etc.).
Related to #56.
History at cursor level
History at tree level will disappear. Rather, for perf and legibility reasons, history methods will now belong to cursors. You'll still be able to record the whole's state history through the root cursor obviously.
cursor.startRecording(maxRecords);
cursor.stopRecording();

cursor.hasHistory();
cursor.getHistory();

// Undo last step
cursor.undo();

// Undo n steps
cursor.undo(3);

// Same for redo
cursor.redo();

Related to #36 and #23.
Dropping some options

clone: will disappear because it is not very useful and makes the library's code more complex and fat for no good reason.
cloningFunction: will disappear too for obvious reasons.
maxHistory: will disappear for the reasons stated above.
typology: useless if typology dependencies is removed.

Related to #98.
React mixin
The react mixin will be simplified to reflect cursor's data directly on the components' state.
var Component = React.createClass({
  mixins: [tree.mixin],

  // Single 'cursors' key, no more 'cursor' or 'cursors' etc.
  // Must be an object so values can be mapped to the component's state
  cursors: {

    // Either a path
    name: ['items', 0, 'name'],

    // Or a cursor
    surname: tree.select('items', 0, 'surname'),

    // Or a function so the cursor can be created dynamically with props, for instance
    points: function() {
      return this.props.givenCursor;
    }
  },

  // Accessing the cursors' values
  render: function() {
    return (

{this.state.name} + ' ' + {this.state.surname}

{this.state.points} + ' points!'

    );
  },

  // Accessing the cursors
  handleClick: function() {

    // This is not necessarily a good idea to let your components handle the state updates by
    // themselves but you could do it if needed.
    this.cursors.name.edit('John');

    // You can also access the tree
    this.tree.get();
  }
});

// Should be possible to pass a single function to the `cursors` key and returning an object as a
// handy polymorphism.
var Component = React.createClass({
  mixins: [tree.mixin],
  cursors: function() {
    return {
      name: ['items', 0, 'name'],
      surname: tree.select('items', 0, 'surname'),
      points: this.propos.givenCursor
    };
  }
});

Alternatively, we should explore the ways to provide for a mixin that would not rely on a tree instance.
Related to #110 and #134
Dynamic cursor reference paths
As proposed by @RJ in #128, dynamic cursor paths using themselves other cursor might be included in 1.0.0.
var tree = new Baobab({
  items: [
    'one',
    'two'
    'three'
  ],
  currentItem: 2
});

// Will resolve to the 'three' node
var cursor = tree.select('items', {$cursor: ['currentItem']});

Facets proposal
Sometimes, you need to look at a specific view of your state and, what is more complex, listen to changes concerning this particular view. To achieve this particular point, I propose here to be able to create facets for your tree.
Facets would work exactly like React components except that they would listen the tree and return data rather than visual components. Also, you could listen to those facets and get their value exactly the same way as with the cursors.
Example
var tree = new Baobab(

  // Data
  {
    projects: [
      {
        id: 1,
        name: 'Tezcatlipoca',
        user: 'John'
      },
      {
        id: 2,
        name: 'Huitzilopochtli',
        user: 'John'
      },
      {
        id: 3,
        name: 'Tlaloc',
        user: 'Jack'
      }
    ],
    currentProjectId: 1
  },

  // Options
  {
    facets: {

      // Filtered projects
      filteredProjects: {
        cursors: {
          projects: ['projects']
        },
        get: function(data) {
          return data.projects.filter(function(p) {
            return p.user === 'John';
          });
        }
      },

      // Current project's data
      currentProject: {
        cursors: {
          id: ['currentProjectId'],
          projects: ['projects']
        },
        get: function(data) {
          return _.first(data.projects, {id: data.id});
        }
      }
    }
  }
);

This would be useful in cases you need to use this view in more than one part of your application. Else, doing the data filtering would rather belong to your components.

this all looks great 👍
I'll give the 1.0.0 branch a try asap

There is no such branch for the time being :). I haven't started coding it yet.

Looking good :+1:  I just want to mention this issue, as this is an API changing version: https://github.com/Yomguithereal/baobab/issues/128#issuecomment-83851289

This stuff looks great. We're starting to use Baobab at my work and we're loving it. These changes are totally in line with our collective reasoning about useful features. "Facets" in particular are something we've been thinking about. Having a "view" layer (akin to databases) on top of state is sweet.

Awesome ideas, looking forward to trying them out

These changes are totally in line with our collective reasoning about useful features.
And with mine too, if that matters :)

@ivan-kleshnin, what do you think should be done in this regard? At the beginning, the update syntax was only meant to be private and used by the library internally for convenience but was exposed so that other could profit from it.

@Yomguithereal I worked with MongoDB alot and used to dislike it's query syntax with time. They constantly add new operators and still you always find yourself lacking one... I think Facebook proposal about that update was rather thoughtless because that... just doesn't fit with everything else.  Why?
As an "anti-bonus" this update forced you to have strange edit for real update. Maybe naive but I would remove it entirely.

Also for now Baobab is not really datatype agnostic. Let's inspect different model representation formats. Many people tend to believe that models should be represented as Array while Object is actually more comfortable. Offsets are over-imperative.
let Baobab = require("baobab");

let State= Baobab({
  robots: {
    listModels: [{id: "99"}],
    objModels: {"99": {id: "99"}},
  },
});

console.log("State/robots/listModels/0:", State.get("robots", "listModels", 0));
console.log("State/robots/objModels/99:", State.get("robots", "objModels", "99"));

console.log("State/robots/listModels/0:", State.get("robots", "listModels", {id: "99"}));
console.log("State/robots/objModels/{id: '99'}:", State.get("robots", "objModels", {id: "99"}));

State/robots/listModels/0: Object {id: "99"} // found
State/robots/objModels/99: Object {id: "99"} // found
State/robots/listModels/0: Object {id: "99"} // found
State/robots/objModels/{id: '99'}: undefined // not found

Development started under the v1 branch.

The v1 is nearly complete concerning its core API. History, facets etc remain to be done but else than that, the library is usable. I'll soon rewrite the v1 documentation and start experimenting on react integration on a new baobab-react repository.

Hi @Yomguithereal,
A couple of things I wanted to bring up:

I think it might be valuable to cache the facet "getter". So when the getter is triggered multiple times without any cursor change it does not do the calculation every time. Just a thought :-) Been playing around with it and really like the idea!

We have been playing around with a different idea at our offices. The idea is to be able to listen to "missing path" cursors. This is the scenario:

var tree = new Baobab({
  users: {}
});

tree.select('users').on('missing', function (path) {

  // Create a temp value
  tree.select(path).edit({
   $isLoading: true
  });

  // Do something to make the path valid, for example
  // requesting data from the backend
  var request = ajax.get(path);

  request.done(function (response) {
    tree.select(path).edit(response);
  }).catch(function (error) {
    tree.select(path).edit({
      $error: error
    });
  });
});

var user123 = tree.select('users', '123');
user123.get(); // {$isLoading: true}
// later
user123.get(); // {foo: 'bar'}

The reason this came up is because it is very typical that data from the server references IDs which you need to collect. By registering these "missing" listeners you are able to evaluate values that the UI wants and can make sure that they do get a value, and an eventual value if you want.
Does this makes sense? :-)

Hi @christianalfoni,

This is indeed what I had in mind ;-).

We were asking this same question with @jacomyal, lately. The thing which might get tricky here is to be able to define what means a path is "missing". undefined value? Non-existent path etc. But this would clearly be a nice thing to cover indeed. Moreover, sometimes you want this missing event to be "lazy", so your UI loads the data only if this is actually needed.

@Yomguithereal

Awesome! :-)

Yeah, that is a very good point :-) In my opinion I would suggest it to be a missing "key". So not path !== undefined, but lastPathValue in leadingPathValue, converts to, '123' in 'users'. So an undefined value would still be a valid value, it is the existence of the key I think you are after.

Hm, did not quite understand the "lazy" thingy. You got time for a small example? :-)

The missing key seems to be rather rational but I often initialize my tree with a full object containing every "possible" key and setting the ones that will change later to something like undefined or null. I do that to be able to visualize easily what could be my tree fully "loaded". In this case, the missing event would not work and this is sad.
Concerning the lazy part: imagine a UI with several routes. Those routes might need different data contained in different places of the tree. I don't want to load the data I don't need for the current displayed route. The missing event would have to be triggered on the first get at the given path and returning an empty value for instance, to be lazy. But maybe this is what you initially meant.

Ah, yeah, that is a very good point! Hm hm, have to let this one sink in ;-)
Aha, I see. Actually I was considering that the event would trigger when registering the cursor. So you could have as much undefined and get you want, but it is when you are interested in "changes" to the value you get that functionality.
Typically a React component:
var MyComponent = React.createClass({
  mixin: [state.mixin],
  cursors: function () {
    user: ['users', this.props.userId]
  },
  render: function () {
    return
{this.state.user.name}

  }
});

As soon as the cursor is registered you kinda say: "Okay, I am definitely interested in this value, but give it when you are good and ready, optionally give me a temp value back immediately".. hope I am understanding you correctly with the lazyness :-)

You know, I started thinking.... I often do ;-)
What about just listening for new cursors added? That way you could yourself evaluate what cursors to act upon:
var tree = new Baobab({
  users: {}
});

tree.select('users').on('cursor', function (path) {

  if (tree.path.length === 2 && tree.get(path) === undefined) {
    // Do some logic to resolve a value
  }

});

This way it is more clear that the event will trigger when a cursor is registered. It also gives a lot more flexibility as it lets you evaluate the path, evaluate what value to act upon, or lack there of.
Hm hm, what do you think @Yomguithereal?

It could be useful if you had cursor.clearHistory(); in addition to the planned methods. There may be cases when you may want to invalidate whole undo stack and it doesn't seem like a tough one to add.

Indeed. You can currently achieve the same effect by doing
cursor.stopRecording();
cursor.startRecording();

but cursor.clearHistory() is clearly more straightforward and enable one to stopRecording while keeping the records.

Proposition of react integration here.

I've just released Baobab v1.0.0-rc1 on npm.
You can now install v1 through:
npm install<EMAIL_ADDRESS># or
npm install baobab@beta

Documentation is available on the related branch here.
Is there any brave early adopters willing to switch to v1 so we can advance further :) ?

Version 1.0.0 is now released. I will therefore, ere you noble assembly, close this issue.


Review and update typography guidance in response to new font scale

What
Update our typography guidance in response to the new font scale work done as part of https://github.com/alphagov/govuk-design-system/issues/2289.
Why
So that our guidance accurately reflects what we ship and so that teams understand how the new typography scale works.
Who needs to work on this
Interaction designers, content designers, support from devs
Done when

[ ] Restructure typography guidance navigation
[ ] Work out how to communicate the typography scale
[ ] Update the content of the typography page(s)

Kick off, 2 Aug
We had a kick off meeting about how to go about this work, because it's a bit bigger than most of the other ones in this epic. We're probably going to make this its own epic, within #2289.
Here's what we discussed.
What’s in scope

Change factually incorrect content (e.g. 19px down to 16px)
Show and explain the font scale (currently we only show this in the Frontend docs)
Review and improve content on the page as a whole
Restructure the navigation of things relating to typography, using ideas from the content audit work in early 2023
Double check consistency with heading sizes on GOV.UK, and try to clarify any confusing differences

What’s out of scope

Restructuring navigation outside of typography
Anything included in existing content guidance (such as Writing for GOV.UK)

Risks
Risks to users:

people might not be able to find stuff if we move it around
if we create new pages, will people expect them to behave like components?
people expect consistency with govuk publisher, confuse people
how does work if the feature’s behind a feature flag at first?

Risks to delivery:

summer holidays, content folk leaving at same time
content ppl having other work going on
content scope creep – going into more detail about use cases
may conflict with work done during v5

Next steps and timelines
At this point, we think the typography work generally is likely to be finished late this year / early next. After v5, in v5.x, the first version will be behind a feature flag. The guidance needs to be ready for then.
Next steps and roles agreed in the meeting:

Turn this into an epic and create the cards for the various tasks within it - Chris
We'll start with prototyping ideas for the navigation – Chris and Charlotte will work on that together
Then we'll work out how to show the type scale – all to discuss, designers to prototype if needed
Then we'll cover overall content of the page(s) – Calvin to lead, others to support, Claire to review

Our typography documentation came up again during https://github.com/alphagov/govuk-frontend/issues/3837.
It emerged that anecdotally, users don't understand that govuk-font isn't just a way to set the font-size and line-height relative to the scale value you're setting. The specific ways it's misunderstood:

Users don't fully understand the typography scale and the different font sizes by breakpoint
Users don't realise that govuk-font and by extension govuk-typography-responsive is automatically creating media queries
Users don't realise that govuk-font also calls govuk-typography-common, leading to unnecessary repeated CSS when it's called twice

This comment includes some examples of where this has happened.
A hypothesis on how to solve this would be to simply expose this dynamic in the documentation. Our spacing guidance has a great breakdown of the spacing scale, how responsive is different from static and the difference between govuk-responsive-[padding/margin] and govuk-spacing. Something similar explaining govuk-font and when you use govuk-typography-responsive (although there's a keenness to change this mixin's name) would help a lot.


Implement mutable wrappers around Value

For example, implement the C API for Array on a mutable array wrapper that lets you e.g. call unshift directly.

blocked on GH-46

This ticket has been repurposed from being about implementing wrappers around mrb_funcall_argv to encompass wrapping all mrb_vtypes with one Rust struct per Ruby type to accommodate implementing Clone, see GH-3.


Refactor auth config checks within tests

Ref #3652 #3393

Warnings

:warning:

:books: Remember to ensure any changes to config.private in services/wheelmap/wheelmap.tester.js are reflected in the server secrets documentation

:warning:

:books: Remember to ensure any changes to config.private in services/symfony/symfony-test-helpers.js are reflected in the server secrets documentation

:warning:

:books: Remember to ensure any changes to config.private in services/suggest.integration.js are reflected in the server secrets documentation

Messages

:book:
:sparkles: Thanks for your contribution to Shields, @paulmelnikow!

  Generated by :no_entry_sign: dangerJS against 9c857357c0c9083ace32990999e3115a1e5d6738


Transition of speaker image(#1913)

First steps for issues #1913
Changes: Smooth transition now occurs from speaker's image to its sole activity.
(I want to close the previous PR of this issue ! I had messed up the commits completely that time, inconvenience is regretted!)

@iamareebjamal Please review!

I think I have squashed them @m-murad

No you haven't

But in the command line it showed it has been squashed! 😅

I think I have done the squashing now!  @m-murad

Yes you have.


Smoke test flake: VSCode Smoke Tests (Electron) Launch verifies that application launches when user data directory has non-ascii characters

This test failed 3 times in the last 30 days:

https://monacotools.visualstudio.com/Monaco/_build/results?buildId=145504&view=results
Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/__w/1/s/test/smoke/out/main.js)
    at listOnTimeout (internal/timers.js:557:17)
    at processTimers (internal/timers.js:500:7)

Looks like it was reported flaky earlier in the year: https://github.com/microsoft/vscode/issues/119816

@bpasero assigning to you. The issue @Tyriar mentioned was about localization.

I wonder if we can convert this test into a integration test.

Same answer as https://github.com/microsoft/vscode/issues/138614#issuecomment-988954352


Finalize desktop and transition

Finalize desktop and transition
Task completed

add all the transitions with scale
use proper media query to make it mobile responsive

Hi @micheaol Thank you for the review. I resolved the issue.

@Gedewon ,
Kindly re-submit for re-review on your dashboard.


refactor💥: Complete restructure of library

What type of pull request is this?

[ ] Non-breaking code change
[x] Breaking code change
[ ] Documentation change/addition

Description

This PR completely restrucutres the library into a layout that makes more sense, and was agreed to by the contributors.
This PR also moves some methods and objects between classes and redoes the imports to help prevent circular imports during typing.
Changes

Restrucutre library into this format

  ├───api
  │   ├───events
  │   │   └───processors
  │   ├───gateway
  │   └───http
  │       └───http_requests
  ├───client
  │   ├───mixins
  │   └───utils
  ├───ext
  │   ├───debug_scale
  │   └───tasks
  └───models
      ├───discord
      └───snek
          └───annotations

Move member chunk processing into guild object
Remove sentinel.py and move its contents into const.py

Checklist

[x] I've formatted my code with Black
[x] I've ensured my code works on Python 3.10.x
[x] I've tested my code

The new docs structure -> https://dis-snek--175.org.readthedocs.build/
Reviews appreciated

I misclicked, haha.

Anyways, since my tablet is struggling to view every single file: is it possible to move the Models section above the Ext one in the docs? I just think that'll make more sense.
Otherwise, the docs look great!

is it possible to move the Models section above the Ext one in the docs? I just think that'll make more sense.
without specifying the entire pages structure, i dont believe i can, unless i slap numbers before each folder

If you're not opposed to using a plugin, I believe the awesome-pages plugin can do it.

Good find, added and done

Looking through the docs, I have a few smaller points:

I feel like the events GuildEvent /  BaseEvent should be removed from the docs, since they are solely inherited and cannot be used directly
Links in the guides are broken now

Also, whats the status on having automatic links to models (f.e. When a method returns Guild, you should be able to click on that to get to the definition)
LGTM otherwise

I feel like the events GuildEvent /  BaseEvent should be removed from the docs, since they are solely inherited and cannot be used directly

It's actually harder not to show them, plus they ought to be documented for people making their own events.

Links in the guides are broken now

Which ones? I thought I had updated them

Also, whats the status on having automatic links to models (f.e. When a method returns Guild, you should be able to click on that to get to the definition)

Not something I can add, still waiting for mkdocstrings to add that functionality

Not something I can add, still waiting for mkdocstrings to add that functionality
Such links cannot be automatically generated now but you can make them using full-import-path links in docstrings

Which ones? I thought I had updated them

The last one on this page for example. Probly did not happen because of the refactor, but I just now noticed :D

Such links cannot be automatically generated now but you can make them using full-import-path links in docstrings
See #lib-discussion

The last one on this page

Just checked. This PR didn't break that, I'll fix it in this regardless

👍

This PR should be ready for a full review
may god have mercy on your soul

Because its a massive PR, and I really don't expect a line by line review
Your checklist to review would be,

look through guild.py to make sure you're happy with the new Imports which I've used to prevent circular imports (there are other files I've changed with this method, but let's reduce workload)
Check the docs, make sure you're happy
Make sure you can run a bot off of this


Add runStmt for executing IO statements and binding new names

Hello Daniel, thanks for maintaining hint!
My project HyperHaskell is built on the hint library. In order to be as useful as the command line GHCi, I need the ability to bind names and execute statements in the IO monad, e.g. the ability to interpret things like
x <- return 42
print x

For this reason, I have implemented a wrapper around the runStmt function from the GHC API, and would like to see it included in the hint library, hence this pull request.

No worries.

I'm not sure that I understand the purpose of this addition. Could you not accomplish the same with the existing API?

No, I don't think so. The thing is that IO actions that are executed with runStmt can bind new variables in the interpreter. In other words, I can run runStmt "x <- return 42" at one point in my program, and then runStmt "print x" at a later point. The name x is not a name in my program code, it is a name bound in the interpreter context. This seems necessary to me if my program is a GHCi replacement and I want users to be able to define new names and bind values to them.

Could you not accomplish the same with the existing API?

Close, but not quite. If the host program knows the type of the variables which get bound by those statements, it's possible to construct an environment on the host program's side, and to pass this environment to every subsequent expression and statement as follows.
{-# LANGUAGE GADTs, ScopedTypeVariables #-}

import Control.Monad.IO.Class
import Control.Monad.Trans.Class
import Control.Monad.Trans.State (StateT)
import Data.Map (Map)
import Data.Typeable
import Language.Haskell.Interpreter
import Test.DocTest
import Text.Printf
import qualified Control.Monad.Trans.State as State
import qualified Data.Map as Map

-- a variant of 'as' for constructing function types
asFunction :: a         -- ^ value is ignored, used to specify the type
           -> b         -- ^ value is ignored, used to specify the type
           -> (a -> b)  -- ^ output is bottom, should only be used to specify a type
asFunction = undefined

data SomeTypeable where
  SomeTypeable :: Typeable a => a -> SomeTypeable

type Binding = (String, SomeTypeable)
type Env = Map String SomeTypeable
type M = InterpreterT (StateT Env IO)

interpretInEnv :: forall a. Typeable a
               => String
               -> a  -- ^ value is ignored, used to specify the type
               -> [Binding]
               -> M a
interpretInEnv expr _ [] = interpret expr (as :: a)
interpretInEnv expr _ ((var, SomeTypeable value) : bindings) = do
  let expr' = printf "(\\%s -> %s)" var expr
  f <- interpretInEnv expr' (asFunction value (as :: a)) bindings
  return (f value)

runIOStmt :: String -> M ()
runIOStmt stmt = do
  env <- lift State.get
  ioAction <- interpretInEnv stmt (as :: IO ()) (Map.toList env)
  liftIO ioAction

runBindStmt :: forall a. Typeable a
            => String
            -> String
            -> a  -- ^ value is ignored, used to specify the type
            -> M ()
runBindStmt var expr _ = do
  env <- lift State.get
  ioAction <- interpretInEnv expr (as :: IO a) (Map.toList env)
  value <- liftIO ioAction
  lift $ State.modify' $ Map.insert var $ SomeTypeable value

-- |
-- >>> testStmts
-- 42
-- Right ()
testStmts :: IO (Either InterpreterError ())
testStmts = flip State.evalStateT Map.empty
          $ runInterpreter
          $ do
  setImports ["Prelude"]
  runBindStmt "x" "return 42" (as :: Int)
  runIOStmt "print x"

But if the statements are arbitrary strings typed by the user, the host program can't know what type they have, and so the variables can't be transferred from the interpreted program to the host program. As a result, the host program can't put those values back into scope when evaluating the next expression.
With runStmt, the values are kept on the interpreted side and they automatically remain in scope for the subsequent statements and expressions of this runInterpreter block. I think it's a good feature to add.
If it was only up to me, however, I would expose the feature in a slightly more structured way. runStmt doesn't seem to be the same as typing commands in ghci; :set commands aren't supported, for example, and neither is the newer x = 5 abbreviation for let x = 5. The four formats which seem to be supported are x <- ioAction, let x = expr, and expressions and IO actions whose type has a Show instance. So I would prefer to hide the String-based encoding from the user, and to provide more precisely-typed operations instead:
defineVar :: MonadInterpreter m
          => String -- ^ var name
          -> String -- ^ expression
          -> m ()
bindVar :: MonadInterpreter m
        => String -- ^ var name
        -> String -- ^ IO expression
        -> m ()

I wouldn't provide anything special for expressions and IO actions whose type has a Show instance, it's easy enough to implement those today using the normal interpret operation.

defineVar and bindVar

Strictly speaking, runStmt also makes it possible to bind multiple variables at once via pattern matching. For example,
runStmt "(x, y) <- return (1,2)"

will bind values to both x and y.
If only defineVar and bindVar are available, one would have to introduce an additional variable, and express the code above as
bindVar "fresh" "return (1,2)"
defineVar "x" "fst fresh"
defineVar "y" "snd fresh"

Note that we have to pay attention that the intermediate variable fresh does not shadow any existing variable binding. For this reason, I would suggest to also add a utility function
freshVar :: MonadInterpreter m => m String

that generates a new unique variable name within a single interpreter session. (Of course, the library user could implement this him/herself, but in this case, I think it is justified to have it as part of the library, because dealing with variables and shadowing is something that interpreter libraries should do.)

+1 for freshVar!
The use case in which a pattern is used to bind multiple variables at once looks tricky to implement in terms of bindVar, because you'll have to parse a pattern for an unknown type. bindVar and defineVar should probably accept patterns, with variable being the pattern which will probably be used the most often. Given this expected usage, I don't think bindPattern and  definePattern would be great names. Maybe just bind and define?

Any decision on this?
I'm happy to draw up another pull request that implements define, bind and freshVar if desired.
(I have added proper support for GHC 8.2, where the old runStmt function has been replaced by execStmt.)

Thanks for fixing the GHC 8.2 support.
@gelisam seems to understand this well, so I'll let him decide. He's a collaborator, so he can press the "rebase and merge" button if he wishes, or request changes.

He's a collaborator, so he can press the "rebase and merge" button if he wishes

I can? I have noticed that you're a lot more conservative than I am when it comes to merging patches, so you might regret this :)
Rebased and merged!

I'm simply conservative because I don't know as much Haskell/GHC as others and because I default to not extending the API :)
Thanks for your help!


Remove classifications that seem to have some kind of default values only

There's a small bunch of classifications that have values around 0,0 for location and 10, 1, 10 for size and angle and such, apparently filled with some defaults. We should remove them.
Also discussed in #13

fixed by dc6eba040519670c9c66e9ff3918c5b3a529dfd9


Topic/granular symbols

Opening this just to track our work, and to display Travis build.
Also, this way commit comments are actually displayed somewhere.

Current coverage is 89.47%

Merging #1 into master will decrease coverage by -10.53% as of f874117

@@            master      #1   diff @@
======================================
  Files            2       2
  Stmts           15      19     +4
  Branches         1       1
  Methods
======================================
+ Hit             15      17     +2
  Partial          0       0
- Missed           0       2     +2

Review entire Coverage Diff as of f874117

Powered by Codecov. Updated on successful CI builds.

@robinsdm This should be ready to go into master.