we should drain the receive buffer on write error even if auto-read is off (probably)

When receiving a write error, we run this code
https://github.com/apple/swift-nio/blob/5011c409bb462edb5427c9def58b03cd18bdc251/Sources/NIO/BaseSocketChannel.swift#L443-L454
which is draining the read buffer but only if auto-read is enabled. That's probably not right and we should be draining the read buffer. auto-read off can never mean 'no channelRead events are ever delivered' anyway because of the channel pipeline. So auto-read should be more a hint to the channel rather than a guarantee (which it isn't anyway).

(see also #594)


Aborting connection in the middle of creating a connection doesn't work

When calling freerdp_abort_connect it sets the abortEvent event, but there is a possible flow in the freerdp_connect function where it calls freerdp_reconnect which resets the abortEvent event.
This means that if I call freerdp_abort_connect before the freerdp_reconnect function is being called inside freerdp_connect - then the connection will not be aborted.

@eronnen is this a theoretical analysis or did you run into that situation?
freerdp_reconnect  is only called on FREERDP_ERROR_CONNECT_TRANSPORT_FAILED (which happens if the network/ssl layer has some issue, connection loss, timeout, ...)

Yes i have ran it and the connection was initiated after calling freerdp_abort_connect, although Im not sure why freerdp_reconnect was called, maybe because Im ignoring the crtificate or just bad connection


fix api/core#Expando with api/core/#Expando

Just add backslash to the right link.

Hi @lo5, I just add backslash. Please check it to merge.

Hi @lo5, I just add backslash. Please check it to merge.

@sergiomora03 Thanks for the PR. The bug is caused by #445 and affects the entire docs website, so the local fix in this PR does not address the general case.


Internal test PR for PythonDefaultIsToSkipDependencyInstallationEnabled

Internal test PR for PythonDefaultIsToSkipDependencyInstallationEnabled, never meant to be merged.

all LGTM, closing this PR


PG slow to connect

Database connection is slow to connect, giving latency of ~1 second roundtrip to refresh UI in the second browser window after setNodeState job completes from a change in the first browser window.

I am testing https://github.com/motherduckdb/duckdb-async because Supabase does not support PG h3 extensions like https://github.com/isaacbrodsky/h3-duckdb


Update include in README example

I'm pretty sure the include from the example in your README is incorrect. It has #include "fast_float/parse_number.h", when it should be #include "fast_float/fast_float.h". In your benchmarking code you have the second include
https://github.com/lemire/simple_fastfloat_benchmark/blob/a91ca26fa8b991593eb1c601d3232b6dfed72ff8/benchmarks/benchmark.cpp#L4
and also fast_float.h is not included by any other file and is where the from_chars is declared.
Patch for this fix is below. Thanks so much for the library, it's really useful!
diff --git a/README.md b/README.md
index 13239a5..24c307b 100644
--- a/README.md
+++ b/README.md
@@ -44,7 +44,7 @@ It will parse infinity and nan values.
 Example:

 ``` C++
-#include "fast_float/parse_number.h"
+#include "fast_float/fast_float.h"
 #include <iostream>

 int main() {

Will fix soon.

Fixing via https://github.com/lemire/fast_float/pull/11

Fixed. Thanks for the report.


[Draft] Add quickstart guide for IBM Cloud

A quickstart guide for IBM Cloud and Kubernetes.
Some parts of the text is coped from the GKE guide.
The related PR is pending: https://github.com/IBM-Cloud/kube-samples/pull/248

@adrianrobotka could you take a look at the pending questions? Thanks!

@adrianrobotka ping


[BUG] Config reload leaks goroutines

Is there an existing issue for this?

[X] I have searched the existing issues

Current Behavior
When the /reload endpoint is hit, a new goroutine for scraping is kicked off. The goroutine running the old scrape from the old configuration does not stop, resulting in multiple scrapes and scrapes running on undesired config.
Expected Behavior
When the /reload endpoint is hit, the old goroutine is signalled to stop.
Steps To Reproduce

With any config, run with --scrape-interval 10
In a separate terminal, run for i in seq 1 10; do curl -X POST localhost:5000/reload; sleep 1; done
Look at the logs in the first terminal to see that there are many goroutines running scrapes.

Anything else?
Happy to work on a patch to upstream if fixing is desired.

Wow that would be awesome! - Would be happy to merge it!
Sorry for the long delay was doing vacation!


Add content css class

Fixes

Related to https://github.com/creativecommons/project_creativecommons.org/issues/189 by @brylie
Description
Add the content CSS class to this themes single.php
Checklist

[x] My pull request has a descriptive title (not a vague title like Update index.md).
[x] My pull request targets the default branch of the repository (main or master).
[x] My commit messages follow best practices.
[x] My code follows the established code style of the repository.
[ ] I added or updated tests for the changes I made (if applicable).
[ ] I added or updated documentation (if applicable).
[x] I tried running the project locally and verified that there are no
visible errors.

Developer Certificate of Origin

For the purposes of this DCO, "license" is equivalent to "license or public domain dedication," and "open source license" is equivalent to "open content license or public domain dedication."

Developer Certificate of Origin
Developer Certificate of Origin
Version 1.1

Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
1 Letterman Drive
Suite D4700
San Francisco, CA, 94129

Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.

Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
    have the right to submit it under the open source license
    indicated in the file; or

(b) The contribution is based upon previous work that, to the best
    of my knowledge, is covered under an appropriate open source
    license and I have the right under that license to submit that
    work with modifications, whether created in whole or in part
    by me, under the same open source license (unless I am
    permitted to submit under a different license), as indicated
    in the file; or

(c) The contribution was provided directly to me by some other
    person who certified (a), (b) or (c) and I have not modified
    it.

(d) I understand and agree that this project and the contribution
    are public and that a record of the contribution (including all
    personal information I submit with it, including my sign-off) is
    maintained indefinitely and may be redistributed consistent with
    this project or the open source license(s) involved.

@brylie This is the PR for the final task for https://github.com/creativecommons/project_creativecommons.org/issues/189


Fixed dependencies and configuration for latest cabot

Updated dependencies and configuration to support latest cabot, please merge

@0rc oh my, real apologies for missing this PR completely. I fixed a bug with RuboCop in master. Please rebase and we'll merge it. :)

Closed due to inactivity


Error when requesting to play yt video

from docker logs ... probably missing dependency in docker container
Caused by: java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: /tmp/lava-jni-natives/1671038922955/libconnector.so: Error loading shared library libstdc++.so.6: No such file or directory (needed by /tmp/lava                                                  -jni-natives/1671038922955/libconnector.so)
        at com.sedmelluq.lava.common.natives.NativeLibraryLoader.loadWithFailureCheck(NativeLibraryLoader.java:88)
        at com.sedmelluq.lava.common.natives.NativeLibraryLoader.load(NativeLibraryLoader.java:69)
        at com.sedmelluq.discord.lavaplayer.natives.ConnectorNativeLibLoader.loadConnectorLibrary(ConnectorNativeLibLoader.java:21)
        at com.sedmelluq.discord.lavaplayer.natives.opus.OpusDecoderLibrary.getInstance(OpusDecoderLibrary.java:13)
        at com.sedmelluq.discord.lavaplayer.natives.opus.OpusDecoder.<init>(OpusDecoder.java:20)
        at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.initialiseDecoder(OpusPacketRouter.java:193)
        at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.checkDecoderNecessity(OpusPacketRouter.java:177)
        at com.sedmelluq.discord.lavaplayer.container.common.OpusPacketRouter.process(OpusPacketRouter.java:93)
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaOpusTrackConsumer.consume(MatroskaOpusTrackConsumer.java:46)
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.processFrameInBlock(MatroskaStreamingFile.java:371)
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.parseClusterSimpleBlock(MatroskaStreamingFile.java:335)
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.parseNextCluster(MatroskaStreamingFile.java:320)
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaStreamingFile.provideFrames(MatroskaStreamingFile.java:296)
        at com.sedmelluq.discord.lavaplayer.container.matroska.MatroskaAudioTrack.lambda$process$0(MatroskaAudioTrack.java:39)
        at com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor.executeProcessingLoop(LocalAudioTrackExecutor.java:275)
        ... 10 common frames omitted

Hello!
As rehmedy commented on this other issue it is related to the image used in the Dockerfile. The workaround he pointed out is to replace the openjdk:17-alpine image to openjdk:17. You can change it in the Dockerfile and then build the image again or you can use his fork to get it done quickly.
I am also working on my custom fork where I fixed this issue, updated the documentation and also added some extra features like playing spotify tracks and some extra commands. You can check it out here.
I am planning on making a pull request once I am done with my feature ideas, so if the owner of this repo accepts it these features will be here on the main repo as well.

Hello! As rehmedy commented on this other issue it is related to the image used in the Dockerfile. The workaround he pointed out is to replace the openjdk:17-alpine image to openjdk:17. You can change it in the Dockerfile and then build the image again or you can use his fork to get it done quickly.
I am also working on my custom fork where I fixed this issue, updated the documentation and also added some extra features like playing spotify tracks and some extra commands. You can check it out here.
I am planning on making a pull request once I am done with my feature ideas, so if the owner of this repo accepts it these features will be here on the main repo as well.

Hey 👋,
I'm glad you found a workaround for this issue.
I just don't have enough time to maintain this project at the moment, so if you want to merge your features into the main repo I will definitely accept it.
Thanks!


Fixes #12341: Release date should only be set to current time if draft or tag created

We should only change the created_unix of a release when the tag is made or if it is a draft. Currently it changes it whenever any edit is done to the release.

Will make backport to 1.12

Need to make fmt.

@silverwind Looks like @techknowlogick did it for me. Was going to do that this morning. Noticed the stray commas when looking at why my tests were failing.
So @techknowlogick, I fixed the tests. Waiting for build.

@silverwind  I make fmt all the time, especially in my company's fork of Gitea, yet I still get unformatted code in my commits. I can't win! LOL

@richmahn the results of go fmt can differ between different versions of go - if you're not running the same version of go as drone you may find that this is a problem.
I've never had to run make fmt explicitly what editor are you using?

@zeripath What do you mean by running it explicitly?  I use GoLand, even though I want to use VSCode but never successfully got it to build and run tests.

I believe both GoLand and VSCode can automatically format saved files (or however they are configured to watch).

@jolheiser Hmm, ok, will have to look into how to configure it. I have done that in VSCode for Javascript before.

I prevere a make fmt befor commiting, so code is not flowing around while typing

... I make fmt all the time, especially in my company's fork of Gitea, yet I still get unformatted code in my commits. I can't win! LOL

don't know how this can happen, do you use the IDE to do git stuff?

🚀


JAMES-3754 Implement RFC-2971 IMAP4 ID extension

End of day PR
-> Avoids disclosing server information to the client as it may be seen as a vulnerability
-> Logs client information for later audit
Enhancements (not done here): support configuration for the server response: disclose server info, version, configurable support URL.

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.1.2:check (check-style) on project protocols-imap: You have 3 Checkstyle violations.

Can't find those violations in the tailed log without taking it out fully sorry :)


[Docs]: Broken link in README.md

Documentation Issue

[ ] IDL or ENVI Hover-help Docs Bug or Missing Routine
[ ] Typo
[X] Documentation Bug or Broken Link
[ ] Feedback on Existing Topic
[ ] Request for New Topic

Description
The link to CONTRIBUTING.md contained in the top-level README.md doesn't seem to be rendered correctly by GitHub on the project home page.  Link goes to https://github.com/interactive-data-language/CONTRIBUTING.md instead of https://github.com/interactive-data-language/vscode-idl/blob/main/CONTRIBUTING.md
Other links render correctly.  Issue perhaps due to this one being contained in a blockquote?
Additional Context
No response

Sorry for the delay getting back to this, have had a couple of busy weeks of meetings!
Where exactly do you see this? Looking at GitHub and on the posting in the VSCode marketplace I don't see anything weird going on?
Maybe a screenshot of which link is broken?

Yeah, I can't seem to reproduce it now either.  Maybe the site was just being flaky that day...

Well thanks for checking again! Happy to fix it if it comes up again.


gRPC usage info is not right

Describe the bug
After installing gRPC via ./vcpkg install grpc, it prints the usage info:
The package grpc:x64-osx provides CMake targets:

    find_package(gRPC CONFIG REQUIRED)
    # Note: 7 target(s) were omitted.
    target_link_libraries(main PRIVATE gRPC::gpr gRPC::grpc gRPC::grpc++ gRPC::grpc++_alts)

    find_package(modules CONFIG REQUIRED)
    target_link_libraries(main PRIVATE c-ares::cares)

The version of grpc is 1.29.1. When using it in project like this:
target_link_libraries(main PRIVATE gRPC::gpr gRPC::grpc gRPC::grpc++ gRPC::grpc++_alts)

Cmake reports the target gRPC::grpc++_alts can not be found. But removing gRPC::grpc++_alts works.
Environment

OS: MacOS 10.15.5
Compiler: Clang 8.0.1

To Reproduce
Steps to reproduce the behavior:

./vcpkg install grpc

Port usage information is not correct.
Expected behavior
Grpc port usage information after installation should be correct.
Possible Solution
Maybe a usage file can be added to the port of grpc.

Hi @li-wu
Thanks for posting this issue.
The target gRPC::grpc++_alts is required by the projects that depends on grpc++_alts.
If your project doesn't need it, you can remove it. But we cannot remove it from the usage of grpc.
Factually, when we use the ports that has many targets can be linked, we can only choose some of those that we need to link.
So the usage provided is right.

@NancyLi1013 Thank you for the detail information.


Move models

Move the models to pylxd.models - This way, we separate what our data model is from what our API is

+1


Custom derives and procedural attribute macros don't show errors

When we expand custom #[derive]s and attribute macros, we seem to ignore their errors.
Interestingly, if you do this:
serde::Deserialize!(struct S {
    #[serde(asd)]
    fld: u8,
});

...then the error shows up only if the invocation is inside a function body, not when it's in item position. (of course, the fact that you can call a custom derive like that is itself a bug)

Fixed by https://github.com/rust-analyzer/rust-analyzer/pull/10339


Swap out file paths

Since the server may load the file mentioned in the logs, the fact that the test client doesn't actually update it causes inconsistencies with the server.

Fixed in bd554ce2292b667f7870e9643a1107a81063a596


Create a  Pull request template.

Description
With some basic checks.
For example: tested ?
query is working ?
...
We can always extend it.

hello, i'd like to be assigned this issue. please label is hacktoberfest should you choose to assign, thanks

Fixed by #424


Formalize funders

looking at
            dict_fund = {"funderName": contr_el.name}
            if contr_el.identifier:
                dict_fund["funderIdentifier"] = contr_el.identifier

of #6 we nohow regulate yet specification of funders.
I remember zenodo having some way although a "fragile" one... we have in datalad's .zenodo.json:
    "grants": [
        {
            "id": "10.13039/100000001::1429999"
        }
    ],

where 10.13039/100000001 corresponds to NSF (sending a PR to list more! ;)) although I don't think DOI service knows about that... seems to boil to https://www.openaire.eu/claim-publication which is EU specific and not yet "generalized". I wonder if there is some "dictionary" of funders or alike to make those identifiers "linkable"

more info on zenodo's grants:
https://developers.zenodo.org/#representation  somewhere has:
List of OpenAIRE-supported grants, which have funded the research for this deposition. Each array element is an object with the attributes:

id: grant ID.

Example: [{'id':'283595'}] (European Commission grants only)
or funder DOI-prefixed: [{'id': '10.13039/501100000780::283595'}] (All grants, recommended)
Accepted funder DOI prefixes:
Australian Research Council: 10.13039/501100000923
Austrian Science Fund: 10.13039/501100002428
European Commission: 10.13039/501100000780
European Environment Agency: 10.13039/501100000806
Academy of Finland: 10.13039/501100002341
Hrvatska Zaklada za Znanost: 10.13039/501100004488
Fundação para a Ciência e a Tecnologia: 10.13039/501100001871
Ministarstvo Prosvete, Nauke i Tehnološkog Razvoja: 10.13039/501100004564
Ministarstvo Znanosti, Obrazovanja i Sporta: 10.13039/501100006588
National Health and Medical Research Council: 10.13039/501100000925
National Institutes of Health: 10.13039/100000002
National Science Foundation: 10.13039/100000001
Nederlandse Organisatie voor Wetenschappelijk Onderzoek: 10.13039/501100003246
Research Councils: 10.13039/501100000690
Schweizerischer Nationalfonds zur Förderung der wissenschaftlichen Forschung: 10.13039/501100001711
Science Foundation Ireland: 10.13039/501100001602
Wellcome Trust: 10.13039/100004440

we have contributors who are funders/sponsors

I have got that. In #6 you even allow for funder to be also some other type of contributor (yet to see that to be pragmatically useful or a sign of a data entry mistake). The main point for this issue: we do not standardize reference to funding agencies beyond may be name (e.g. NIH or NSF).

we do through use of ror for identifier. but it is optional (e.g., https://ror.org/04t0s7x83). this is also where we would need to provide search functionality via the meditor to fill in these fields.

oh nice, thanks! Let's consider resolved!


For node 10.0 release: Integrate ledger & o-network

Description
Please include a meaningful description of the PR and link the relevant issues
this PR might resolve.
Also note that:

New code should be properly tested (even if it does not add new features).
The fix for a regression should include a test that reproduces said regression.

For the record, I know you'll be working on this first thing Monday. But Monday is a holiday for me.
So please feel free to dismiss my "Changes requested" review once the concerns described in my comments have been addressed. cc @dnadales @crocodile-dentist


Add new plan flow

first time:

day of period:

choose cycle plan:

Hebrew translation of some of the action buttons.


Are there plans to be able to scale all the nodes on a cluster?

When scaling the individual nodes the scale options don't update the size of the vms from the initial creation. I am hesitant to scale up nodes not knowing if the newly created nodes will use the original node size and not the new one.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: d75c3a8d-1187-bea1-a7d4-7ebba71c1790
Version Independent ID: 75b0c352-762e-16ae-5cc6-d807ffc1dc3f
Content: az aks
Content Source: latest/docs-ref-autogen/aks.yml
Service: unspecified
GitHub Login: @rloutlaw
Microsoft Alias: routlaw

@akakira changing the parameters of individual nodes / VMs isn't supported by AKS yet. At the very least, the next time you do az aks scale to add new nodes, they will be created with the VM size that was specified when the cluster was first created.

@tjprescott this issue can be closed.

See also #7927.


Incorrect styling

Please verify the version of auro-accordion you have installed
No response
Please describe the bug

Go to https://auro.alaskaair.com/components/auro/accordion/api
Look at accordion with chevron

Reproducing the error on the docsite
None
Expected behavior

Accordion should not have an outline around it (grey outline is applied right now)
Accordion should have a chevron on the right

Current

Expected

What browsers are you seeing the problem on?
No response
Additional context
Link to blueprint

Exit criteria
No response

@leeejune please I've fixed the issue with the chevron not hiding but I am confused about the border color - that is only applied to accordion groups which I understood to be the intended design.

@leeejune I've fixed the issue with the chevron being hidden but I am confused about the border color - that is only applied to accordion groups which I understood to be the intended design.

Nope, the border is only meant to go on the bottom. You can see more detailed specs in the blueprint as well.


server: check for expected files

When the configuration is loaded, check that expected files are present
early. This can prevent getting into a partial state later.
Now the output would like this if pause was missing:
[vbatts@valse] {master *} ~/src/github.com/kubernetes-incubator/cri-o$ sudo ./ocid --runtime $(which runc) --debug --seccomp-profile $(readlink -f ./tmp/etc/ocid/seccomp.json) --config $(readlink -f ./tmp/etc/ocid/ocid.conf)  --containerdir $(readlink -f ./tmp/containers/ ) --conmon $(readlink -f ./conmon/conmon)
"/usr/libexec/ocid/pause" does not exist

NAME:
   ocid - ocid server

USAGE:
   ocid [global options] command [command options] [arguments...]

VERSION:
   0.0.1

COMMANDS:
     config   generate ocid configuration files
     help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --apparmor-profile value  default apparmor profile name (default: "ocid-default")
   --config value            path to configuration file (default: "/etc/ocid/ocid.conf")
   --conmon value            path to the conmon executable
   --containerdir value      ocid container dir
   --debug                   enable debug output for logging
   --listen value            path to ocid socket
   --log value               set the log file path where internal debug information is written
   --log-format value        set the format used by logs ('text' (default), or 'json') (default: "text")
   --pause value             path to the pause executable
   --root value              ocid root dir
   --runtime value           OCI runtime path
   --sandboxdir value        ocid pod sandbox dir
   --seccomp-profile value   default seccomp profile path
   --selinux                 enable selinux support
   --help, -h                show help
   --version, -v             print the version

FATA[0000] "/usr/libexec/ocid/pause" does not exist

Signed-off-by: Vincent Batts<EMAIL_ADDRESS>

Looks good, I'll run tests locally to make sure because the sandbox dir is mkdir'ed on server startup and in tests we first create the config and then start the server and this could end up failing (I guess).

i see

pushed an update. The tests take a while to start. :-\
On Tue, Dec 13, 2016 at 5:16 AM Antonio Murdaca<EMAIL_ADDRESS>wrote:

@runcom commented on this pull request.
In server/config.go
https://github.com/kubernetes-incubator/cri-o/pull/263#pullrequestreview-12644350
:

@@ -152,3 +154,23 @@ func (c *Config) ToFile(path string) error {

return ioutil.WriteFile(path, w.Bytes(), 0644)
}
+
+// Check resolves that all paths and files are available as expected
+func (c *Config) Check() error {
+

for _, file := range []string{

c.RootConfig.Root,

c.RootConfig.SandboxDir,

c.RootConfig.ContainerDir,

c.RuntimeConfig.Runtime,

c.RuntimeConfig.Conmon,

c.RuntimeConfig.SeccompProfile,

c.ImageConfig.Pause,

} {

if _, err := os.Stat(file); err != nil && os.IsNotExist(err) {

	return fmt.Errorf("%q does not exist", file)

tests are failing in Travis also
https://travis-ci.org/kubernetes-incubator/cri-o/jobs/183374758#L2137
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/kubernetes-incubator/cri-o/pull/263#pullrequestreview-12644350,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAEF6cTWHc2AWb-8ut0sEw8TWaK7dzfsks5rHnBbgaJpZM4LLAPO
.

@vbatts tests still fail at https://travis-ci.org/kubernetes-incubator/cri-o/jobs/183702742#L2138 (due to  https://github.com/kubernetes-incubator/cri-o/pull/263#discussion_r92136214 I guess)

i removed the base Root directory from the check, because I saw it would be
made later in an os.MkdirAll(...)
Perhaps the same is needed for the sandboxes directory.
On Thu, Dec 15, 2016 at 4:47 AM Antonio Murdaca<EMAIL_ADDRESS>wrote:

@vbatts https://github.com/vbatts tests still fail at
https://travis-ci.org/kubernetes-incubator/cri-o/jobs/183702742#L2138
(due to #263 (comment)
https://github.com/kubernetes-incubator/cri-o/pull/263#discussion_r92136214
I guess)
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/kubernetes-incubator/cri-o/pull/263#issuecomment-267285106,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAEF6ZrrQMK_OA3JP5gC-f-MB6_Wqu1mks5rIQzAgaJpZM4LLAPO
.


Support alpha =  and/or bg =  as shortcut for adjustcolor(col, )?

Should we support setting bg = <numeric> in [0, 1] as a shortcut for bg = adjustcolor(col, <numeric>) (as discussed in https://github.com/grantmcdermott/tinyplot/pull/122)?
This would be handy when we want to use pch = 21:25 with some border col and then automatically use a semi-transparent version of the same color as the bg fill. But maybe this is too specialized and esoteric to implement a special shortcut.
Application example:
p <- hcl.colors(120, rev = TRUE)[11:110]
tinyplot(lat ~ long | depth, data = quakes, pch = 21, cex = 3, lwd = 2, col = p, bg = adjustcolor(p, 0.1))

The idea would be to abbreviate the last argument to just bg = 0.1.

Related to this, I wonder if we should support an alpha = <[0,1]>  argument for easy transparency of colours?
On a recent project, I find myself doing variants of  plt(many_points, col = adjustcolor("black", 0.1). It would be nicer to just write plt(many_points, alpha = 0.1). I'm not sure if this could be easily integrated with your fill = [0,1] idea, or whether they should exist as separate arguments. Probably the latter.

I think that this will be nifty for some - and not confusing for those who don't need it. So it sounds like a useful addition to me.
... and I agree that it should be a separate argument.

FWIW, this now works in the cran branch.
library(tinyplot)

tinyplot(lat ~ long | depth, data = quakes, cex = 3, pch = 21, bg = 0.2)

Similarly, for the alpha argument (which affects both the main col and fill, if applicable):
tinyplot(lat ~ long | depth, data = quakes, cex = 3, pch = 19, alpha = 0.2)

Created on 2024-06-17 with reprex v2.1.0


Add support for content-filter

Can you please add support for this?: https://beta.openai.com/docs/models/content-filter

Yeah I tried that, but it gives an error saying that you can't have both an engine and a model at the same time (even though the engine isn't provided). I think you're building the url path using "/engines/$engine/completions" which may be causing the conflict.

Oh ok, I got the conflict right now. Are you need this feature immediately? I need to redesign my plans according to your answer.  🙂

Well, I'm currently building a new tool in my app, and I want the new tool to go live by next week. I believe the content filter must be implemented before I submit it to openai. So I can safely wait a few days before I need to hook this piece in...  It would be awesome if you can make the mods soonish... Not trying to rush you tho! 🙏

Hey Jason, I investigate the issue, the content filter and completions seem to use the same URL but it's not. So I'm gonna implement to new URl structure I can done the feature about 1 week. FYI.

Hi, have you had the chance to make some updates?

This is late, but here is a quick hack (you need to modify the source files) to get the content-filter working.
In the Url class (Url.php file), create a new method that returns the content-filter API URI (which is simply https://api.openai.com/v1/completions).
/**
 * @return string
 */
public static function contentFilterURL(): string
{
    return self::OPEN_AI_URL . "/completions";
}

Then, in the OpenAi class (OpenAi.php file), modify the completion method to become as follows:
/**
 * @param $opts
 * @param $cf
 * @return bool|string
 */
public function complete($opts, $cf = false)
{
    $engine = $opts['engine'] ?? $this->engine;
    $url = $cf ? Url::contentFilterURL() : Url::completionURL($engine);
    unset($opts['engine']);

    return $this->sendRequest($url, 'POST', $opts);
}

Usage:
$open_ai = new OpenAi('YOUR OPENAI API KEY');
$content= "This is just a sample sentence for testing.";

$filter = $open_ai->complete([
    'model' => 'content-filter-alpha',
    'prompt' => "<|endoftext|>{$content}\n--\nLabel:é,
    'temperature' => 0,
    'max_tokens' => 1,
    'top_p' => 0,
    'logprobs' => 10
], true);

$response = json_decode($filter, true);
$output = $response['choices'][0]['text']; // returns "0", "1", or "2"

Of course, this is just a hack and is not production-ready.

Here's the Unsafe calculation function they offer in python translated into php if anyone wants it: (let me know if there's a mistake!)
https://beta.openai.com/docs/models/content-filter
`function openAiContentFilterUnsafe($response) {
$output_label = $response['choices'][0]['text']; // returns "0", "1", or "2"

$toxic_threshold = -0.355;

if ($output_label == "2") {
    # If the model returns "2", return its confidence in 2 or other output-labels
    $logprobs = $response["choices"][0]["logprobs"]["top_logprobs"][0];

    # If the model is not sufficiently confident in "2",
    # choose the most probable of "0" or "1"
    # Guaranteed to have a confidence for 2 since this was the selected token.
    if ($logprobs["2"] < $toxic_threshold) {
        $logprob_0 = $logprobs["0"] ?? false;
        $logprob_1 = $logprobs["1"] ?? false;

        # If both "0" and "1" have probabilities, set the output label
        # to whichever is most probable
        if (!empty($logprob_0) && !empty($logprob_1)) {
            if ($logprob_0 >= $logprob_1) {
                $output_label = "0";
            } else {
                $output_label = "1";
            }
        # If only one of them is found, set output label to that one
        } else if ( !empty($logprob_0) ) {
            $output_label = "0";
        } else if ( !empty($logprob_1) ) {
            $output_label = "1";
        }
        # If neither "0" or "1" are available, stick with "2"
        # by leaving output_label unchanged.
    }
}

# if the most probable token is none of "0", "1", or "2"
# this should be set as unsafe
if (!in_array($output_label,["0", "1", "2"])) {
    $output_label = "2";
}

return $output_label;

}`


How to scrape the interactive map?

Hi, thanks for this awesome toolkit. I used your library to scrape an interactive map data. But I encounter a problem of getting insufficient data.
I want to scrape every county's vaccine demographic information show in this page: https://www.dhs.wisconsin.gov/covid-19/vaccine-data.htm#day
I used the following code to get the sheet.
from tableauscraper import TableauScraper as TS
url = 'https://bi.wisconsin.gov/t/DHS/views/VaccinesAdministeredtoWIResidents/VaccinatedWisconsin-County'
ts = TS()
ts.loads(url)
dashboard = ts.getDashboard()
state = 'Wisconsin'
for t in dashboard.worksheets:
    #show worksheet name
    print(f"WORKSHEET NAME : {t.name}")
    #show dataframe for this worksheet
    # print(t.data)
    t.data.to_csv('TMP/'+state + '_' + t.name.replace('/', '_') + '.csv')

It returned a sheet named : Wisconsin_Race vax_unvax county.csv. However, this sheet only contains the total state level information. How could I get each county's information by your package?
Thanks.

@floydluo Hello, on the tableau dashboard, I didn't find race per county, only for the state. Maybe, it's just not there in the worksheet

Hi, it's me again.
If run the above code, the race worksheet only returns the state level race data. However, if we open the link in chrome and click the county in the map, the dashboard will be updated to that county's race vaccine information. I have tried to simulated the POST method to send tableau's /select URL to get the data. Then I got a list of values without keys. So I tried to map the values to keys based on indexes, which was not hundred percent accurate.
Here is another state problem by running your code, for the state South Carolina:

from tableauscraper import TableauScraper as TS

url = "https://public.tableau.com/views/NCDHHS_COVID-19_Dashboard_Vaccinations/Summary"

ts = TS()
ts.loads(url)
dashboard = ts.getDashboard()

#show dropdown input name
inputNames = dashboard.getDropdownInputs()
print(inputNames)

#show dropdown values for a given input name
values = dashboard.getDropdownValues("County-Map")
print(values)

dashboard = dashboard.setDropdown("County-Map", "Alamance County")

Then it report the error:
['County-Map', 'Param.Metrics Map']
['North Carolina', 'Alamance County', 'Alexander County', 'Alleghany County', 'Anson County', 'Ashe County', 'Avery County', 'Beaufort County', 'Bertie County', 'Bladen County', 'Brunswick County', 'Buncombe County', 'Burke County', 'Cabarrus County', 'Caldwell County', 'Camden County', 'Carteret County', 'Caswell County', 'Catawba County', 'Chatham County', 'Cherokee County', 'Chowan County', 'Clay County', 'Cleveland County', 'Columbus County', 'Craven County', 'Cumberland County', 'Currituck County', 'Dare County', 'Davidson County', 'Davie County', 'Duplin County', 'Durham County', 'Edgecombe County', 'Forsyth County', 'Franklin County', 'Gaston County', 'Gates County', 'Graham County', 'Granville County', 'Greene County', 'Guilford County', 'Halifax County', 'Harnett County', 'Haywood County', 'Henderson County', 'Hertford County', 'Hoke County', 'Hyde County', 'Iredell County', 'Jackson County', 'Johnston County', 'Jones County', 'Lee County', 'Lenoir County', 'Lincoln County', 'Macon County', 'Madison County', 'Martin County', 'Mcdowell County', 'Mecklenburg County', 'Mitchell County', 'Montgomery County', 'Moore County', 'Nash County', 'New Hanover County', 'Northampton County', 'Onslow County', 'Orange County', 'Pamlico County', 'Pasquotank County', 'Pender County', 'Perquimans County', 'Person County', 'Pitt County', 'Polk County', 'Randolph County', 'Richmond County', 'Robeson County', 'Rockingham County', 'Rowan County', 'Rutherford County', 'Sampson County', 'Scotland County', 'Stanly County', 'Stokes County', 'Surry County', 'Swain County', 'Transylvania County', 'Tyrrell County', 'Union County', 'Vance County', 'Wake County', 'Warren County', 'Washington County', 'Watauga County', 'Wayne County', 'Wilkes County', 'Wilson County', 'Yadkin County', 'Yancey County']
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-87-2e4d4aabf8bf> in <module>
     17 print(values)
     18
---> 19 dashboard = dashboard.setDropdown("County-Map", "Alamance County")

~/opt/miniconda3/envs/ox/lib/python3.9/site-packages/tableauscraper/TableauDashboard.py in setDropdown(self, inputName, value)
    113             self._scraper, parameterNames[0], value
    114         )
--> 115         return tableauscraper.dashboard.getWorksheetsCmdResponse(self._scraper, r)

~/opt/miniconda3/envs/ox/lib/python3.9/site-packages/tableauscraper/dashboard.py in getWorksheetsCmdResponse(TS, data)
     91     output = []
     92     for selectedZone in zonesWithWorksheet:
---> 93         frameData = utils.getWorksheetCmdResponse(selectedZone, dataFull)
     94
     95         if frameData is None:

~/opt/miniconda3/envs/ox/lib/python3.9/site-packages/tableauscraper/utils.py in getWorksheetCmdResponse(selectedZone, dataFull)
    252                 ]
    253             if len(index["aliasIndices"]) > 0:
--> 254                 frameData[f'{index["fieldCaption"]}-alias'] = [
    255                     onDataValue(it, t, cstring) for it in index["aliasIndices"]
    256                 ]

~/opt/miniconda3/envs/ox/lib/python3.9/site-packages/tableauscraper/utils.py in <listcomp>(.0)
    253             if len(index["aliasIndices"]) > 0:
    254                 frameData[f'{index["fieldCaption"]}-alias'] = [
--> 255                     onDataValue(it, t, cstring) for it in index["aliasIndices"]
    256                 ]
    257

~/opt/miniconda3/envs/ox/lib/python3.9/site-packages/tableauscraper/utils.py in onDataValue(it, value, cstring)
    157
    158 def onDataValue(it, value, cstring):
--> 159     return value[it] if (it >= 0) else cstring[abs(it) - 1]
    160
    161

IndexError: list index out of range

It seems that the code cannot match values with keys. Do you have some suggestions?
Thank you,
Junjie

@floydluo There is a bug in the library
For the 1st case you can use the following to get the race data for a specific county in the Map worksheet
from tableauscraper import TableauScraper as TS

url = "https://bi.wisconsin.gov/t/DHS/views/VaccinesAdministeredtoWIResidents/VaccinatedWisconsin-County"
ts = TS()
ts.loads(url)

dashboard = ts.getWorksheet("Map").select("County", "Waukesha County")
print(dashboard.getWorksheet("Race vax/unvax county").data)

Note that the following will return same error as above, I have to investigate this :
from tableauscraper import TableauScraper as TS

url = "https://bi.wisconsin.gov/t/DHS/views/VaccinesAdministeredtoWIResidents/VaccinatedWisconsin-County"

ts = TS()
ts.loads(url)
dashboard = ts.getDashboard()
for t in dashboard.worksheets:
    print(f"WORKSHEET NAME : {t.name}")

# show selectable columns
columns = ts.getWorksheet("Map").getSelectableColumns()
print(columns)

# show values by column name
values = ts.getWorksheet("Map").getValues("County")
print(values)

# select that value
dashboard = ts.getWorksheet("Map").select("County", "Waukesha County")
print(dashboard.getWorksheet("Race vax/unvax county").data)

The 2nd case error may be related to the former one, but I have to check

@floydluo  I've narrowed down the problem. The data dictionary that is retrieved from the dashboard looks like :
{
   "0": {
       "cstring": [....],
       .....
   }
}

But when we perform the select request, sometimes it returns the whole data + the additional one:
{
   "0": {
       "cstring": [....],
       .....
   },
  "1": {
       "cstring": [....],
       .....
   }
}

And sometimes it only returns the missing data:
{
  "1": {
       "cstring": [....],
       .....
   }
}

As the indexing is extending all the objects in the data dictionary, there is an index error.
I would need to record the data between requests. I need to perform more tests to see if it has impact when performing multiple select requests in the same session

@floydluo  This is fix in v0.0.8
1st usecase: https://replit.com/@bertrandmartel/TableauCovidWisconsin
from tableauscraper import TableauScraper as TS

url = "https://bi.wisconsin.gov/t/DHS/views/VaccinesAdministeredtoWIResidents/VaccinatedWisconsin-County"

ts = TS()
ts.loads(url)

worksheet = ts.getWorksheet("Map")

dashboard = worksheet.select("County", "Waukesha County")
print(dashboard.getWorksheet("Race vax/unvax county").data)

dashboard = worksheet.select("County", "Forest County")
print(dashboard.getWorksheet("Race vax/unvax county").data)

2nd usecase: https://replit.com/@bertrandmartel/TableauCovidNCDHHS
from tableauscraper import TableauScraper as TS

url = "https://public.tableau.com/views/NCDHHS_COVID-19_Dashboard_Vaccinations/Summary"

ts = TS()
ts.loads(url)
dashboard = ts.getDashboard()

countyDashboard = dashboard.setDropdown("County-Map", "Alamance County")
print(countyDashboard.getWorksheet("Total Card Summary").data)

metricDashboard = dashboard.setDropdown(
    "Param.Metrics Map",
    "People Fully Vaccinated"
)
print(metricDashboard.getWorksheet("Total Card Summary").data)

@bertrandmartel That's great! Thank you so much. I will look your source code to further understand it.

@floydluo Hello I've just fixed an issue regarding the same data recording issue. You may want to upgrade to v0.0.9 if needed

@bertrandmartel Hello, thanks for your great work. It works well for Wisconsin. The selection function is perfect to deal with this state.
However, when I turn to the South Carolina, I find the selection function doesn't work. It will return the same df when selecting different counties.
For example
from tableauscraper import TableauScraper as TS

url = 'https://public.tableau.com/views/COVIDVaccineDashboard/RECIPIENTVIEW'
ts = TS()
ts.loads(url)
county1 = 'Greenville'
dashboard = ts.getWorksheet("Vaccine Map By SC residents PEOPLE").select('Recipient County for maps', county1)
df1 = dashboard.getWorksheet('Final Age xSex x Race REC').data

url = 'https://public.tableau.com/views/COVIDVaccineDashboard/RECIPIENTVIEW'
ts = TS()
ts.loads(url)
county2 = 'Horry'
dashboard = ts.getWorksheet("Vaccine Map By SC residents PEOPLE").select('Recipient County for maps', county2)
df2 = dashboard.getWorksheet('Final Age xSex x Race REC').data

Here df1 and df2 are exactly the same.
Besides, there is also a problem in dealing with Ohio data (I have scraped Ohio by simulating tableau's API with my dirty codes, just to share this problem with you).
Ohio needs to first Select the county and then Drop set the value Race. However, the drop method didn't work here.
You can try the following code:
from tableauscraper import TableauScraper as TS

url = "https://public.tableau.com/views/VaccineAdministrationMetricsDashboard/PublicCountyDash"
ts = TS()
ts.loads(url)

dashboard = ts.getWorksheet("New Map").select("county", 'Wyandot')

dashboard = dashboard.setDropdown('Key Metrics', "Race")

df = dashboard.getWorksheetname('New Demographics').data

Here df is still the Age table.
Thanks!

Hello, for the 1st case, is the chart you are working with is the one titled Rate of Vaccine Recipients by County per 10,000 Residents ?

Hi, @bertrandmartel, the chart I am interested in is this one, which contains the race information.

In the code, the associated worksheet is  Final Age xSex x Race REC.
All sheets are as follows:

['Doses Admin KPI number',
 'Interpretation',
 'DOSES SC RES',
 'Gauge Partial',
 'Final Age xSex x Race REC',
 'Custom Axis REC',
 'Ethnicity Pie REC',
 "Average Age Table REC'D",
 'People for 1.1',
 'Vaccine Map By SC residents PEOPLE',
 'Vaccine Map By SC residents PEOPLE (3)',
 'County Table People Sc Residents',
 'People for 1.1 Filter',
 'title 1.1',
 '1/2 Doses FOR 1.1 (2)',
 '1/2 Doses FOR 1.1 (3)',
 '% of Phase 1A',
 'Gauge 1 Text box',
 'Gauge Compllete',
 'Gauge 2 Text Box',
 'People Completed for 1.1',
 'Census link',
 '% of Doses Admin SC to SC residents']

Oh I see, so this is not when you click on a county on the map that it changes the data. But when using the dropdown. In fact, I called it setDropDown but it's actually a /set-parameter-value API call
In this case it calls /categorical-filter-by-index which is not implemented

OK, got it. And it is also hard to simulate the /categorical-filter-by-index in python. I tried but failed. Instead, I can try the zip code selection, which can be clicked in the map. I will try later and report the results to you.
Thanks for your great work.

For Ohio, the problem is just that the select doesn't return back the dropdown list values (fieldCaption with isAutoSelect). This is not really a bug, you can use a distinct variable for each dashboard:
from tableauscraper import TableauScraper as TS

url = "https://public.tableau.com/views/VaccineAdministrationMetricsDashboard/PublicCountyDash"
ts = TS()
ts.loads(url)
dashboard = ts.getDashboard()

countryDashboard = ts.getWorksheet("New Map").select("county", 'Wyandot')

raceDashboard = dashboard.setDropdown('Key Metrics', "Race")

df = raceDashboard.getWorksheet('New Demographics').data
print(df)

Note that I use dashboard.setDropdown and not countryDashboard.setDropdown.
I'm not sure if I could record the presModel between each call, this would be hard to code/maintain. For now, using separate dashboard object is sufficient I think
The code above is supposed to work but it doesn't, there is a bug with the index of tuple which is easy to fix
This is first time I've noticed a paneIndices and columnIndices of length 2:
{
'fn': '[system:visual].[tuple_id]',
'fnDisagg': '',
'formatStrings': [],
'isAutoSelect': False,
'paneIndices': [0, 1],
'columnIndices': [0, 0]
}

This means that this feature targets both index (0,0) and index (1,0) but in the original code I take only first index (0,0) which is not correct in this case. This is annoying because it means that for a single field you could have multiple set of values. I will see if that's easy to drop the bad index and choose the correct one

Ok the Ohio issue is fixed, I will try to deal with /categorical-filter-by-index

I've investigated for the category filter, the filter value are located in the info JSON (not data), a custom parsing is needed. The values are indexed from 0 (those are not like the select values that are indexed using a dynamic list of tupleIds).
This should be easy to implement. Tomorrow (sunday), I will release a new version with all the fix

Hi, @bertrandmartel, the code can handle Ohio now. For the South Carolina, I have tried to select the Zipcode instead of the County, but it also returns the same results. Maybe we have to turn to category filter. I appreciate your quick response to the issue and I do learn a lot from your project. Cheers!
For my own experience of simulating category filter, I can't compose the request properly and only get bad response with one short line. Look forward to your methods.

@floydluo I've made a release which implements the filter API (v0.1.0). This release also renamed a bunch of methods in order to keep things more close to the underlying Tableau API.

getDashboard renamed to getWorkbook
getDropDownInputs and getDropdownValues replaces by getParameters()
setDropDown() replaced by setParameter
getValues and getSelectableColumns replaced by getSelectableItems()

Additional method are: getFilters() and setFilter on the worksheet class

Ohio https://replit.com/@bertrandmartel/TableauCovidOhio

from tableauscraper import TableauScraper as TS

url = "https://public.tableau.com/views/VaccineAdministrationMetricsDashboard/PublicCountyDash"
ts = TS()
ts.loads(url)
wb = ts.getWorkbook()
ws = ts.getWorksheet("New Map")

counties = [
    t["values"] for t in ws.getSelectableItems()
    if t["column"] == "county"
][0]
print(counties)

wb.setParameter('Key Metrics', "Race")

for county in counties:
    print(county)
    wb = ws.select("county", county)
    demograhics = wb.getWorksheet('New Demographics')
    print(demograhics.data)

South Carolina https://replit.com/@bertrandmartel/TableauCovidSouthCarolina

from tableauscraper import TableauScraper as TS
import pandas as pd
url = 'https://public.tableau.com/views/COVIDVaccineDashboard/RECIPIENTVIEW'
ts = TS()
ts.loads(url)

ws = ts.getWorksheet("Vaccine Map By SC residents PEOPLE")
print(ws.data)

# show filter columns and values
filters = ws.getFilters()
print(filters)

# get all counties values
counties = [
    t["values"]
    for t in filters
    if t["column"] == "[Recipient County for maps]"
][0]

for county in counties:
    print(county)
    wb = ws.setFilter('[Recipient County for maps]', county)
    countyWs = wb.getWorksheet("Final Age xSex x Race REC")
    print(countyWs.data)

Wisconsin (same) https://replit.com/@bertrandmartel/TableauCovidWisconsin

from tableauscraper import TableauScraper as TS

url = "https://bi.wisconsin.gov/t/DHS/views/VaccinesAdministeredtoWIResidents/VaccinatedWisconsin-County"

ts = TS()
ts.loads(url)

worksheet = ts.getWorksheet("Map")

dashboard = worksheet.select("County", "Waukesha County")
print(dashboard.getWorksheet("Race vax/unvax county").data)

dashboard = worksheet.select("County", "Forest County")
print(dashboard.getWorksheet("Race vax/unvax county").data)

North Carolina (update setParameter) https://replit.com/@bertrandmartel/TableauCovidNCDHHS

from tableauscraper import TableauScraper as TS

url = "https://public.tableau.com/views/NCDHHS_COVID-19_Dashboard_Vaccinations/Summary"

ts = TS()
ts.loads(url)
dashboard = ts.getWorkbook()

countyDashboard = dashboard.setParameter("County-Map", "Alamance County")
print(countyDashboard.getWorksheet("Total Card Summary").data)

metricDashboard = dashboard.setParameter(
    "Param.Metrics Map",
    "People Fully Vaccinated"
)
print(metricDashboard.getWorksheet("Total Card Summary").data)

Great work! I will follow it up. Thank you.

@floydluo you're welcome. For what it worth, I've found this NYC Tableau vaccine tracker and I've setup a repo scraping the data every day with Github Actions : https://github.com/bertrandmartel/covid19-nyc-vaccine-tracker
I've implemented the goToSheet api command for this usecase, in case you need it later, the usage is here

Hi, @bertrandmartel, great work!
Here I just want to make clear about the conceptions used in Tableau and Tableau Scraper. What the relationships among Dashboard, Workbook, Worksheet? When we initialized a ts, what does it refer to as? What is the difference between SetParameter and SelectValue? Does Workbook SelectValue and Worksheet SetParameter?
Thanks!

@floydluo  Hello,
dashboard is the same as workbook. ts is just TableauScraper object that is used to extract the initial data. SetParameter calls set-parameter-value API here and SelectValue calls select API here
The setParameter doesn't depends on the worksheet, see the payload, it just sets parameterName/parameterValue
The worksheet depends on the worksheet, see the payload

@bertrandmartel  Hi, sorry to bother again. But the code for South Caroline is dead again. It seems only one county is in the [Recipient County for maps] now.

@floydluo  I see, I've identified the problem. It seems the quickFilterDisplay is irrelevant and I should detect filtersJson instead which is another complex objects with schema fields and tuples fields

@floydluo this is fixed in v1.0.3, the column name is a bit different :
https://replit.com/@bertrandmartel/TableauCovidSouthCarolina
from tableauscraper import TableauScraper as TS

url = 'https://public.tableau.com/views/COVIDVaccineDashboard/RECIPIENTVIEW'
ts = TS()
ts.loads(url)

ws = ts.getWorksheet("Vaccine Map By SC residents PEOPLE")
print(ws.data)

# show filter columns and values
filters = ws.getFilters()
print(filters)

# get all counties values
counties = next(iter([
    t["values"]
    for t in filters
    if t["column"] == "Recipient County for maps"
]))
print(counties)

for county in counties:
    print(county)
    wb = ws.setFilter('Recipient County for maps', county)
    countyWs = wb.getWorksheet("Final Age xSex x Race REC")
    print(countyWs.data)

Got it! Thanks. It works perfectly.


doc: improved cookbook example

True, works fine without. I originally used url_for('/echo'), which will not automatically detect the websocket route.

does the example fail without the changes?

Closing this pull request since there's no explanation for the changes.

Indeed, the changes lack an explanation, so I'll try to give one:
If you are new to websockets (as I am), one frequent approach is to take an example (such as the one from the cookbook) and modify it. However, this particular example easily leads (at least in my case) to confusion, because this:
    <script>
      var ws = new WebSocket('<%= url_for('echo')->to_abs %>');

      // Incoming messages
      ws.onmessage = function(event) {
        document.body.innerHTML += event.data + '<br/>';
      };

      // Outgoing messages
      ws.send('Started websocket!');
      window.setInterval(function () { ws.send('Hello Mojo!') }, 1000);
    </script>

does NOT work anymore. My idea was to make beginner's life easier and clarify that the onopen event needs to be used. I fully agree that the ->scheme('ws') stuff is not necessary, but using the onopen method might save a lot of hassle. I hope this explanation is sufficient.

@jwbargsten That would have been a very reasonable explanation, i've already changed that part a few hours ago for more consistency with our other WebSocket examples though (which already use onopen). https://github.com/kraih/mojo/commit/4d0563399ce932c122adfabb8030185f81cb349a


Item edition, step 4: description

Description
Item edition as shown in https://france-ioi.github.io/algorea-designs/03.Activities_Edit_05.Edit-chapter-content and http://dev.algorea.org/branch/design/.
Details

Create a content tab (not with routing, just the content directly)
Add the description field.
Save it on save. If empty (after trim), send "null" to the backend.

duplicate of #125


is there any 'easy' way to get a list of all projects with at least 1 public token?

i am thinking it would be great to automatically generate a table from projinfo (for public projects) that had fields like:

dataset name
species
xyz resolution
xyz pixels
image modality
data type

@kunallillaney @randalburns @alexbaden @willgray how hard is that to make?

It's easy-ish.  First you call:
http://openconnecto.me/ocp/ca/public_tokens/
returns a JSON list of public tokens.
Then you call:
http://openconnecto.me/ocp/ca/takemura13/info/
on each token -- takemura13 in this case.

yah, but the public tokens are weird.  there are like 10 for nick weiler's
data, and then none for other data, like the nematodes or drosophila data,
even though they are public.
so, i want all public 'dataset' tokens, where nick's data counts as 1
dataset.
On Mon, May 18, 2015 at 5:30 PM, Randal Burns<EMAIL_ADDRESS>wrote:

It's easy-ish. First you call:
http://openconnecto.me/ocp/ca/public_tokens/
returns a JSON list of public tokens.
Then you call:
http://openconnecto.me/ocp/ca/takemura13/info/
on each token -- takemura13 in this case.
—
Reply to this email directly or view it on GitHub
https://github.com/openconnectome/open-connectome/issues/41#issuecomment-103218163
.

--
the glass is all full:  half water, half air.
openconnecto.me, jovo.me, office hours
https://www.google.com/calendar/embed?src=e2ktu4lrgul8anp8hclrcminp8%40group.calendar.google.com&ctz=America/New_York

Agreed, and the annotations for takemura are not public.
Kunal, can you please audit the public data sets when you return
to make sure they reflect what’s on the Website.
randal

On May 19, 2015, at 1:00 AM, joshua vogelstein<EMAIL_ADDRESS>wrote:
yah, but the public tokens are weird. there are like 10 for nick weiler's
data, and then none for other data, like the nematodes or drosophila data,
even though they are public.
so, i want all public 'dataset' tokens, where nick's data counts as 1
dataset.
On Mon, May 18, 2015 at 5:30 PM, Randal Burns<EMAIL_ADDRESS>wrote:

It's easy-ish. First you call:
http://openconnecto.me/ocp/ca/public_tokens/
returns a JSON list of public tokens.
Then you call:
http://openconnecto.me/ocp/ca/takemura13/info/
on each token -- takemura13 in this case.
—
Reply to this email directly or view it on GitHub
https://github.com/openconnectome/open-connectome/issues/41#issuecomment-103218163
.

--
the glass is all full: half water, half air.
openconnecto.me, jovo.me, office hours
https://www.google.com/calendar/embed?src=e2ktu4lrgul8anp8hclrcminp8%40group.calendar.google.com&ctz=America/New_York
—
Reply to this email directly or view it on GitHub https://github.com/openconnectome/open-connectome/issues/41#issuecomment-103337845.

@jovo Can you please look at the datamap we have and let me know which ones are public? I don't want to make the private ones public as well.

@kunallillaney is this one up to date:
is this one up to date: http://w.ocp.me/private:datamap

@jovo yes that I know of. It does not have tokens for the data recently ingested on the new branch which is private anyways and not accessible from the main servers. Send me an email with all the tokens and I will update them to be public.

@kunallillaney do you want (1) project names, (2) datasets, and/or (3) tokens that are public.
i guess because individual tokens can be public/private, i should give you all the tokens?
@willgray can you confirm these?

all kasthuri tokens are public (except rhoana)
all kharris15
freeman14
bock11
all mitra tokens
flyemanno
takemura13
all the nick weiler ones (eg, Ex14R58)
cardona ones (not the cc ones)

I want token names which should be public. Datasets is too general since we have datasets with tokens which are not public.

kharris should remain private until accepted, no?
Alex
On Mon, May 25, 2015 at 18:34 Kunal L<EMAIL_ADDRESS>wrote:

I want token names which should be public. Datasets is too general since
we have datasets with tokens which are not public.
—
Reply to this email directly or view it on GitHub
https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105327998
.

i haven't heard a definitive answer from bobby either.  My belief is the
fly stuff is public, but I didn't negotiate those.
Kasthuri data (all res), bock11 data, and Nick's tokens are public and
should remain so.
Best,
Will
On Mon, May 25, 2015 at 6:36 PM, Alex Baden<EMAIL_ADDRESS>wrote:

kharris should remain private until accepted, no?
Alex
On Mon, May 25, 2015 at 18:34 Kunal L<EMAIL_ADDRESS>wrote:

I want token names which should be public. Datasets is too general since
we have datasets with tokens which are not public.
—
Reply to this email directly or view it on GitHub
<
https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105327998

.

—
Reply to this email directly or view it on GitHub
https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105328709
.

i guess i'm confused what "public" means?
eg, for bobby's data, catmaid uses various annotation tokens, so in a
certain sense, they must be public?
you are right, kharris is all private still.
On Mon, May 25, 2015 at 6:39 PM, William Gray<EMAIL_ADDRESS>wrote:

i haven't heard a definitive answer from bobby either. My belief is the
fly stuff is public, but I didn't negotiate those.
Kasthuri data (all res), bock11 data, and Nick's tokens are public and
should remain so.
Best,
Will
On Mon, May 25, 2015 at 6:36 PM, Alex Baden<EMAIL_ADDRESS>wrote:

kharris should remain private until accepted, no?
Alex
On Mon, May 25, 2015 at 18:34 Kunal L<EMAIL_ADDRESS>wrote:

I want token names which should be public. Datasets is too general
since
we have datasets with tokens which are not public.
—
Reply to this email directly or view it on GitHub
<

https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105327998

.

—
Reply to this email directly or view it on GitHub
<
https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105328709
.

—
Reply to this email directly or view it on GitHub
https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105328886
.

--
the glass is all full:  half water, half air.
openconnecto.me, jovo.me, office hours
https://www.google.com/calendar/embed?src=e2ktu4lrgul8anp8hclrcminp8%40group.calendar.google.com&ctz=America/New_York

we made catmaid projects for bobby, but there was sensitivity until
publication.  so in some sense hiding in plain sight, but no one actually
knows how/what to do to access what's there.  If we're gonna advertise it
as a ref example we should ask (again)
Best,
Will
On Mon, May 25, 2015 at 6:48 PM, joshua vogelstein<EMAIL_ADDRESS>
wrote:

i guess i'm confused what "public" means?
eg, for bobby's data, catmaid uses various annotation tokens, so in a
certain sense, they must be public?
you are right, kharris is all private still.
On Mon, May 25, 2015 at 6:39 PM, William Gray<EMAIL_ADDRESS>wrote:

i haven't heard a definitive answer from bobby either. My belief is the
fly stuff is public, but I didn't negotiate those.
Kasthuri data (all res), bock11 data, and Nick's tokens are public and
should remain so.
Best,
Will
On Mon, May 25, 2015 at 6:36 PM, Alex Baden<EMAIL_ADDRESS>wrote:

kharris should remain private until accepted, no?
Alex
On Mon, May 25, 2015 at 18:34 Kunal L<EMAIL_ADDRESS>wrote:

I want token names which should be public. Datasets is too general
since
we have datasets with tokens which are not public.
—
Reply to this email directly or view it on GitHub
<

https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105327998

.

—
Reply to this email directly or view it on GitHub
<

https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105328709

.

—
Reply to this email directly or view it on GitHub
<
https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105328886
.

--
the glass is all full: half water, half air.
openconnecto.me, jovo.me, office hours
<
https://www.google.com/calendar/embed?src=e2ktu4lrgul8anp8hclrcminp8%40group.calendar.google.com&ctz=America/New_York

—
Reply to this email directly or view it on GitHub
https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105329869
.

@willgray - can you give kunal the real list then, i fucked it up :)
On Mon, May 25, 2015 at 6:52 PM, William Gray<EMAIL_ADDRESS>wrote:

we made catmaid projects for bobby, but there was sensitivity until
publication. so in some sense hiding in plain sight, but no one actually
knows how/what to do to access what's there. If we're gonna advertise it
as a ref example we should ask (again)
Best,
Will
On Mon, May 25, 2015 at 6:48 PM, joshua vogelstein <
<EMAIL_ADDRESS>
wrote:

i guess i'm confused what "public" means?
eg, for bobby's data, catmaid uses various annotation tokens, so in a
certain sense, they must be public?
you are right, kharris is all private still.
On Mon, May 25, 2015 at 6:39 PM, William Gray<EMAIL_ADDRESS>wrote:

i haven't heard a definitive answer from bobby either. My belief is the
fly stuff is public, but I didn't negotiate those.
Kasthuri data (all res), bock11 data, and Nick's tokens are public and
should remain so.
Best,
Will
On Mon, May 25, 2015 at 6:36 PM, Alex Baden<EMAIL_ADDRESS>wrote:

kharris should remain private until accepted, no?
Alex
On Mon, May 25, 2015 at 18:34 Kunal L<EMAIL_ADDRESS>wrote:

I want token names which should be public. Datasets is too general
since
we have datasets with tokens which are not public.
—
Reply to this email directly or view it on GitHub
<

https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105327998

.

—
Reply to this email directly or view it on GitHub
<

https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105328709

.

—
Reply to this email directly or view it on GitHub
<

https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105328886

.

--
the glass is all full: half water, half air.
openconnecto.me, jovo.me, office hours
<

https://www.google.com/calendar/embed?src=e2ktu4lrgul8anp8hclrcminp8%40group.calendar.google.com&ctz=America/New_York

—
Reply to this email directly or view it on GitHub
<
https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105329869
.

—
Reply to this email directly or view it on GitHub
https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105330036
.

--
the glass is all full:  half water, half air.
openconnecto.me, jovo.me, office hours
https://www.google.com/calendar/embed?src=e2ktu4lrgul8anp8hclrcminp8%40group.calendar.google.com&ctz=America/New_York

Public tokens show up in the list public API call.
Catmaid projects can be public or private regardless of the token status.
ocpviz will probably inherit from the token, unclear what that will mean.
Alex
On Mon, May 25, 2015 at 18:56 joshua vogelstein<EMAIL_ADDRESS>wrote:

@willgray - can you give kunal the real list then, i fucked it up :)
On Mon, May 25, 2015 at 6:52 PM, William Gray<EMAIL_ADDRESS>wrote:

we made catmaid projects for bobby, but there was sensitivity until
publication. so in some sense hiding in plain sight, but no one actually
knows how/what to do to access what's there. If we're gonna advertise it
as a ref example we should ask (again)
Best,
Will
On Mon, May 25, 2015 at 6:48 PM, joshua vogelstein <
<EMAIL_ADDRESS>
wrote:

i guess i'm confused what "public" means?
eg, for bobby's data, catmaid uses various annotation tokens, so in a
certain sense, they must be public?
you are right, kharris is all private still.
On Mon, May 25, 2015 at 6:39 PM, William Gray <
<EMAIL_ADDRESS>wrote:

i haven't heard a definitive answer from bobby either. My belief is
the
fly stuff is public, but I didn't negotiate those.
Kasthuri data (all res), bock11 data, and Nick's tokens are public
and
should remain so.
Best,
Will
On Mon, May 25, 2015 at 6:36 PM, Alex Baden <
<EMAIL_ADDRESS>wrote:

kharris should remain private until accepted, no?
Alex
On Mon, May 25, 2015 at 18:34 Kunal L<EMAIL_ADDRESS>wrote:

I want token names which should be public. Datasets is too
general
since
we have datasets with tokens which are not public.
—
Reply to this email directly or view it on GitHub
<

https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105327998

.

—
Reply to this email directly or view it on GitHub
<

https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105328709

.

—
Reply to this email directly or view it on GitHub
<

https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105328886

.

--
the glass is all full: half water, half air.
openconnecto.me, jovo.me, office hours
<

https://www.google.com/calendar/embed?src=e2ktu4lrgul8anp8hclrcminp8%40group.calendar.google.com&ctz=America/New_York

—
Reply to this email directly or view it on GitHub
<

https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105329869

.

—
Reply to this email directly or view it on GitHub
<
https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105330036
.

--
the glass is all full: half water, half air.
openconnecto.me, jovo.me, office hours
<
https://www.google.com/calendar/embed?src=e2ktu4lrgul8anp8hclrcminp8%40group.calendar.google.com&ctz=America/New_York

—
Reply to this email directly or view it on GitHub
https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105331812
.

Can we shelve this for now until we have a list?

will - can u give kunal the final list?
On Tuesday, May 26, 2015, Kunal L<EMAIL_ADDRESS>wrote:

Can we shelve this for now until we have a list?
—
Reply to this email directly or view it on GitHub
https://github.com/openconnectome/open-connectome/issues/41#issuecomment-105675035
.

--
the glass is all full:  half water, half air.
openconnecto.me, jovo.me, office hours
https://www.google.com/calendar/embed?src=e2ktu4lrgul8anp8hclrcminp8%40group.calendar.google.com&ctz=America/New_York

any status update on this?

will is on vaca.
he'll get back next week.
i think everything that is in catmaid in public is open, and nothing else.
On Tue, Jun 2, 2015 at 9:41 PM, Kunal L<EMAIL_ADDRESS>wrote:

any status update on this?
—
Reply to this email directly or view it on GitHub
https://github.com/openconnectome/open-connectome/issues/41#issuecomment-108155591
.

--
the glass is all full:  half water, half air.
openconnecto.me, jovo.me, office hours
https://www.google.com/calendar/embed?src=e2ktu4lrgul8anp8hclrcminp8%40group.calendar.google.com&ctz=America/New_York

@kunallillaney - how can i make tokens public in the console?  I'm ready.
Or do you want to do it?

@willgray this is done. Let me know if you have any issues.

This is indeed done.  Interface worked great.  All Kasthuri tokens are
public.  http://dsp061.pha.jhu.edu/ocp/ca/public_tokens/
On Tue, Aug 11, 2015 at 1:51 PM Kunal Lillaney<EMAIL_ADDRESS>wrote:

@willgray https://github.com/willgray this is done. Let me know if you
have any issues.
—
Reply to this email directly or view it on GitHub
https://github.com/openconnectome/open-connectome/issues/41#issuecomment-129990332
.


Don't require rubocop/rspec/language/node_pattern

The node_pattern file has been removed from rubocop-rspec, and we should no longer require it.
Also, the RSpec/FilePath has been split and RSpec/SpecFilePathFormat can be configured to work instead.
Fixes #41.

Before submitting the PR make sure the following are checked:

[x] Feature branch is up-to-date with master (if not - rebase it).
[x] Squashed related commits together.
[ ] Added tests.
[ ] Updated documentation.
[ ] Added an entry to the CHANGELOG.md if the new code introduces user-observable changes.
[x] The build (bundle exec rake) passes (be sure to run this locally, since it may produce updated documentation that you will need to commit).

rubocop-rspec v3.0.0 has been released, so I updated this PR accordingly. @ydah please merge at will.

@ydah Is this PR ok to merge?

@bquorning Let's wait until this issue is resolved.Maybe a patch release will be needed, we know.
https://github.com/rubocop/rubocop-rspec/issues/1916#issuecomment-2160544092

Just saw the rubocop-rspec 3.0 release, and attempting an update. Running with these versions:
  * rubocop (1.64.1)
  * rubocop-ast (1.31.3)
  * rubocop-capybara (2.21.0)
  * rubocop-performance (1.21.0)
  * rubocop-rails (2.25.0)
  * rubocop-rspec (3.0.0)
  * rubocop-rspec_rails (2.29.0)

And pulling them in via:
require:
  - rubocop-rails
  - rubocop-rspec
  - rubocop-rspec_rails
  - rubocop-performance
  - rubocop-capybara

I see error output like:
cannot load such file -- rubocop/rspec/language/node_pattern
/Users/mjankowski/.asdf/installs/ruby/3.3.2/lib/ruby/3.3.0/bundled_gems.rb:74:in `require'
/Users/mjankowski/.asdf/installs/ruby/3.3.2/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require'
/Users/mjankowski/.asdf/installs/ruby/3.3.2/lib/ruby/gems/3.3.0/gems/rubocop-rspec_rails-2.29.0/lib/rubocop-rspec_rails.rb:8:in `<top (required)>'
/Users/mjankowski/.asdf/installs/ruby/3.3.2/lib/ruby/3.3.0/bundled_gems.rb:74:in `require'
/Users/mjankowski/.asdf/installs/ruby/3.3.2/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require'
/Users/mjankowski/.asdf/installs/ruby/3.3.2/lib/ruby/gems/3.3.0/gems/rubocop-1.64.1/lib/rubocop/feature_loader.rb:35:in `load'
/Users/mjankowski/.asdf/installs/ruby/3.3.2/lib/ruby/gems/3.3.0/gems/rubocop-1.64.1/lib/rubocop/feature_loader.rb:21:in `load'
/Users/mjankowski/.asdf/installs/ruby/3.3.2/lib/ruby/gems/3.3.0/gems/rubocop-1.64.1/lib/rubocop/config_loader_resolver.rb:14:in `block (2 levels) in resolve_requires'
/Users/mjankowski/.asdf/installs/ruby/3.3.2/lib/ruby/gems/3.3.0/gems/rubocop-1.64.1/lib/rubocop/config_loader_resolver.rb:13:in `each'
/Users/mjankowski/.asdf/installs/ruby/3.3.2/lib/ruby/gems/3.3.0/gems/rubocop-1.64.1/lib/rubocop/config_loader_resolver.rb:13:in `block in resolve_requires'

I assume this is because the latest released rubocop-rspec_rails (2.29.0 for me locally) is referencing this file which has been removed from rubocop-rspec ... and the solution is probably just wait on this PR to merge and a new release of rubocop-rspec_rails to go out?

Done, now with the dependency changed to
spec.add_runtime_dependency 'rubocop-rspec', '~> 3', '>= 3.0.1'

@rubocop/rubocop-rspec Can we merge this PR too?

@ydah Are you planning to release today?


Calculate number of dependent downstream services

Calculate metrics showing the number of services this service is calling.
For instance A calls B and C. Then the result should be 2.

I think this could be derived also from standard metrics system based on the labels for outbound metric.


Sail : migrate fresh take more than 10 minutes

Sail Version: v1.13.5
Laravel Version: v8.83.2
PHP Version: v8.1
OS: Ubuntu 18.04
Processor: Intel I5
Memory: 24gb

Description:
Hello,
I am using sail with ubuntu (bionic) on local and the project i work on it has grow up
Now it takes 12 minutes to make a migrate:fresh, the endpoint for rest api is very slow, and make it almost unusable
i don't know what causing this issue, i had cached prefix on volumes but no change
Steps To Reproduce:

start sail
and run : sail art migrate:fresh --seed

example of returns in console :
Dropped all tables successfully.
Migration table created successfully.
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (1,042.65ms)
Migrating: 2018_08_08_100000_create_telescope_entries_table
Migrated:  2018_08_08_100000_create_telescope_entries_table (6,390.49ms)
....

Look at 6,390.49ms to create telescope entries table, is it normal?
i post on laracast forum to see if someone already have this issue, someone tell me to had opcache!
I try to add  but i don't know how to integrate it properly!
my docker-compose.yml :
version: '3'
services:
    laravel.test:
        build:
            context: ./docker/8.1
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: sail-8.1/app
        ports:
            - '${APP_PORT:-80}:80'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
        volumes:
            - '.:/var/www/html'
        networks:
            - sail
        depends_on:
            - mysql
            - redis
            - selenium
    mysql:
        image: 'mysql:8.0'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        volumes:
            - 'sailmysql:/var/lib/mysql:cached'
        networks:
            - sail
        healthcheck:
          test: ["CMD", "mysqladmin", "ping"]
    redis:
        image: 'redis:alpine'
        ports:
            - '${FORWARD_REDIS_PORT:-6379}:6379'
        volumes:
            - 'sailredis:/data:cached'
        networks:
            - sail
        healthcheck:
          test: ["CMD", "redis-cli", "ping"]
    selenium:
       image: 'selenium/standalone-chrome'
       volumes:
            - '/dev/shm:/dev/shm'
       networks:
           - sail
    mailhog:
        image: 'mailhog/mailhog:latest'
        ports:
            - '${FORWARD_MAILHOG_PORT:-1025}:1025'
            - '${FORWARD_MAILHOG_DASHBOARD_PORT:-8025}:8025'
        networks:
            - sail
    elasticsearch:
         image: docker.elastic.co/elasticsearch/elasticsearch:7.5.2
         environment:
             - discovery.type=single-node
         ports:
             - 9200:9200
             - 9300:9300
         volumes:
             - sailelasticsearch:/usr/share/elasticsearch/data:cached
         networks:
             - sail
networks:
    sail:
        driver: bridge
volumes:
    sailmysql:
        driver: local
    sailredis:
        driver: local
    sailelasticsearch:
        driver: local

my Dockerfile
FROM ubuntu:21.10

LABEL maintainer="Taylor Otwell"

ARG WWWGROUP
ARG NODE_VERSION=16

WORKDIR /var/www/html

ENV DEBIAN_FRONTEND noninteractive
ENV TZ=UTC

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# try opcache integration not sure is the good way
# raise error docker-php-ext-install: not found
# RUN docker-php-ext-install opcache

RUN apt-get clean && apt-get update \
    && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 \
    && mkdir -p ~/.gnupg \
    && chmod 600 ~/.gnupg \
    && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \
    && apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E5267A6C \
    && apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C300EE8C \
    && echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu impish main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
    && apt-get update \
    && apt-get install -y php8.1-cli php8.1-dev \
       php8.1-pgsql php8.1-sqlite3 php8.1-gd \
       php8.1-curl \
       php8.1-imap php8.1-mysql php8.1-mbstring \
       php8.1-xml php8.1-zip php8.1-bcmath php8.1-soap \
       php8.1-intl php8.1-readline \
       php8.1-ldap \
       php8.1-msgpack php8.1-igbinary php8.1-redis php8.1-swoole \
       php8.1-memcached php8.1-pcov php8.1-xdebug \
    && php -r "readfile('https://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \
    && curl -sL https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \
    && apt-get install -y nodejs \
    && npm install -g npm \
    && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
    && echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
    && apt-get update \
    && apt-get install -y yarn \
    && apt-get install -y mysql-client \
    && apt-get install -y postgresql-client \
    && apt-get -y autoremove \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.1

RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail

# try opcache integration not sure is the good way
# raise error docker-php-ext-install: not found too
# RUN docker-php-ext-install opcache
# COPY docker/opcache.ini /etc/php/8.1/conf.d/opcache.ini

COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/8.1/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container

EXPOSE 8000

ENTRYPOINT ["start-container"]

The project version is on bitbucket private repo we work for DMV company (Veterinary hospitals of Canada)
so difficult to share it but as you can see it's happens at the start of migration so...
Is someone can explain me what's happen? Maybe i am doing something wrong, i am little bit lost :/
Thank you

I doubt this is an issue with Sail but rather an issue for your computer specifically. For me, artisan fresh runs smoothly. Please try a support channel:

Laracasts Forums
Laravel.io Forums
StackOverflow
Discord
Larachat
IRC

Hi driesvints,
thank you for making me paranoid, i pass the week to scan entirely my computer disks, memories, motherboard and connectives but the issue is not on my computer, my computer is clean!
If you have a big migration mysql 8 slow down without some configuration
For those who have this issue just add a config file in docker/8.1 call mysql.cnf and update docker-compose to copy the file in mysql config directory
the fix config :
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv = NULL
innodb_io_capacity = 2000
innodb_read_io_threads = 64
innodb_thread_concurrency = 64
innodb_write_io_threads = 64

mysql
....
  volumes:
            - 'sailmysql:/var/lib/mysql'
            - './docker/8.1/mysql.cnf:/etc/mysql/my.cnf'

the migration time goes from 12' to 1'45
it's not related to sail but maybe you can advertise user that the issue exists with big migration


Widen Spring configuration selection field in UI

Description
This PR widens Spring config selection field in UI in order to see the ones with long names or buried in nested packages.
How to test
Automated tests
Manual tests
See the screenshot:

@sofurihafe Please add labels to all your PRs:
comp-spring, ctg-enhancement
and comp-ui if applicable


Filter and show specific columns

I was just wondering if it's possible to show different set of columns based on which filter is selected ?
So for example when showing "active" items we show creation time and for "disabled" items, we show last updated time ?
I think it could be pretty useful if possible. I have one table with 20 possible columns and it feels a bit messy at the moment.

You should be able to do this by altering the index items depending on the active filters. I'd suggest you ask this type of question on our Spectrum community as this is exactly the type of use case many of them have been able to help with, and this is not a bug but rather a lack of fleshed out documentation. Do not hesitate to check the source code to understand the options you might not be thinking of because you are not seeing them in the docs.


pkg/achx: test PPD entry creation

Codecov Report

Merging #510 into master will increase coverage by 0.39%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #510      +/-   ##
==========================================
+ Coverage   54.49%   54.88%   +0.39%
==========================================
  Files          96       96
  Lines        3551     3551
==========================================
+ Hits         1935     1949      +14
+ Misses       1267     1254      -13
+ Partials      349      348       -1

Impacted Files
Coverage Δ

pkg/database/mysql.go
58.69% <0.00%> (-2.18%)
:arrow_down:

pkg/achx/ppd.go
74.68% <0.00%> (+20.25%)
:arrow_up:

Continue to review full report at Codecov.

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


fix: delete the refresh in the update:executing: as it "rollbacks"

… the said update

LGTM!
We just need to fix the build. Seems that some changes in travis are breaking the RDBMS installation step :(

The problem is with the installation script, running it with docker should solve the problem.
I understand the change require to add docker to .travis.yml
services:
  - docker

then on the script start the corresponding pg version
docker run -d -p <IP_ADDRESS>:5432:5432 -e POSTGRES_PASSWORD=password posgres:9.4


Maybe maxOS notification is invalid

Maybe maxOS notification is invalid

please update 🍉 your version

please update 🍉 your version

This is a bad answer, the version on pypi is older.   I will have my env and  method next time.


Some feedbacks, and problems about disabling HUD features, and alignments

Hi guys! First of all, really a great work!
I am using the free version, and I tried it out on some official Matchmaking live matches.
I have couple of feedbacks/problems:

I have disabled the custom radar in the HUD settings, but it's still shown. I know I can hide it with CTRL+B, but it would be nice if I don't enable, it wouldn't even shown up.
I have also disabled (and not used) the custom killfeed, but the "x planted the bomb" / "y defused the bomb" messages are still shown, and interferes with the native game killfeed. Maybe this is also a problem with the custom killfeed as well? How could I disable these custom messages?

Can't hide only the extra boxes (left and right display boxes), because if I hide them, it also hides the utility level boxes and other stats boxes (loss bonus, team money, equipment value), but I want them.
If you don't setup a Match, "Best of 0" will be shown under the timer. It would be nice, to hide that row, if there is no Match setup. Or a no Match would be atomically a BO1, but there are also some unnecessary design changes even with BO1, which is not needed; black bar under map, 1-1 win indicator under teamname.

The win panel is sometimes overlapping with the native killfeed. Maybe this also a problem with the custom killfeed?

The radar (and the custom killfeed) is misaligned with the rest of the HUD elements:

And also dead players on the custom map doesn't look like X's, as seen in other screenshots from boltobserv. And overlapping with live players.

and 2) are happening because toggle menu in the Manager are not for HUD settings - they are for creating the correct config line that is needed to be executed in the CS:GO. 2) can be removed from the HUD by removing from the src/HUD/Killfeed/Killfeed.tsx lines:
       GSI.on("bombPlant", player => {          this.addBombEvent(player, 'plant');      })      GSI.on("bombDefuse", player => {          this.addBombEvent(player, 'defuse');      })
We are thinking about this, but you can do it right now if you now enough about panel.json API, for now it is not a priority.
Fixed in the 1.6.0 release
This will be tackled soon
Fixed in the 1.6.0 release
That's true - we will be redesigning radar soon

I can't find the Killfeed.tsx file, can you tell me where that file is?


Run id not returned on console

The DVT execution does not provide a response code with the run_id on command line execution, the user needs to go into bigquery and search the execution results to find the appropriate run_id. This becomes more cumbersome when multiple executions of DVT is done at same time.

Duplicate of issue #686 .
Fix provided by PR #708


[pointer_interceptor] + [Flutter Web] doesn't work in release mode

Steps to reproduce
1.dependencies:
flutter_inappwebview: 6.0.0
pointer_interceptor: 0.10.1

2.just write a page with flutter_inappwebview init, and present a dialog with a button or several buttons. I have tried to wrap the buttons and the super container by pointer_interceptor.
Expected results
I expect the buttons wrapped by PointerInterceptor on the dialog can recognize well in both debug mode and release mode.
Actual results
It works well in debug mode, but the touches go through the buttons in release mode, and the buttons do not react.
Code sample
[pointer_interceptor] code
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';

class VDCancelConfirmAlert extends StatelessWidget {
  static Future<void> show(
    BuildContext context, {
    required String title,
    String? content,
    required VoidCallback onTapConfirm,
  }) {
    return showCupertinoDialog(
      context: context,
      builder: (context2) {
        return VDCancelConfirmAlert._(
          title: title,
          content: content,
          onTapConfirm: onTapConfirm,
        );
      },
    );
  }

  final String title;
  final String? content;
  final VoidCallback onTapConfirm;

  const VDCancelConfirmAlert._({
    required this.title,
    required this.onTapConfirm,
    required this.content,
  });

  double get _hPadding => 30;

  @override
  Widget build(BuildContext context) {
    final screenWidth = MediaQuery.of(context).size.width;
    return PointerInterceptor(
      intercepting: true,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Container(
            margin: EdgeInsets.symmetric(horizontal: screenWidth * 0.1),
            decoration: BoxDecoration(
              color: const Color(0xffe6e6e6),
              borderRadius: BorderRadius.circular(15),
            ),
            child: Column(
              children: [
                const SizedBox(height: 30),
                Padding(
                  padding: EdgeInsets.symmetric(horizontal: _hPadding),
                  child: Text(
                    (title.isNotEmpty && content?.isNotEmpty == true) ? title : 'Warning',
                    textAlign: TextAlign.center,
                    style: const TextStyle(
                      fontSize: 17,
                      color: Color(0xff333333),
                      fontWeight: FontWeight.w500,
                    ),
                  ),
                ),
                const SizedBox(height: 30),
                Padding(
                  padding: EdgeInsets.symmetric(horizontal: _hPadding),
                  child: Text(
                    (title.isNotEmpty && content?.isNotEmpty == true) ? content! : title,
                    textAlign: TextAlign.center,
                    style: const TextStyle(
                      fontSize: 16,
                      color: Color(0xff333333),
                    ),
                  ),
                ),
                const SizedBox(height: 40),
                Container(
                  height: 1,
                  color: const Color(0xffd8d8d8),
                ),
                SizedBox(
                  height: 40,
                  child: Row(
                    children: [
                      Expanded(
                        child: _button('Cancel', onTap: () => Navigator.of(context).pop()),
                      ),
                      Container(
                        width: 1,
                        color: const Color(0xffd8d8d8),
                      ),
                      Expanded(
                        child: _button(
                          'Confirm',
                          onTap: () {
                            Navigator.of(context).pop();
                            onTapConfirm();
                          },
                          textColor: const Color(0xff333333),
                        ),
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }

  Widget _button(String title, {Color? textColor, required VoidCallback onTap}) {
    return GestureDetector(
      onTap: onTap,
      // padding: EdgeInsets.zero,
      child: Container(
        alignment: Alignment.center,
        color: Colors.transparent,
        child: Text(
          title,
          textAlign: TextAlign.center,
          style: TextStyle(
            fontSize: 17,
            fontWeight: FontWeight.w500,
            color: textColor ?? const Color(0xff146fdc),
          ),
        ),
      ),
    );
  }
}

2.I just present the dialog in a page which has a web view(flutter_inappwebview) when needed.
Screenshots or Video

Screenshots / Video demonstration
[Upload media here]

Logs
Logs
[Paste your logs here]

Flutter Doctor output
Doctor output
[✓] Flutter (Channel stable, 3.19.3, on macOS 14.4 23E214 darwin-arm64, locale zh-Hans-CN)
    • Flutter version 3.19.3 on channel stable at /Users/mike/FlutterSDK/3.19.3
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision ba39319843 (3 weeks ago), 2024-03-07 15:22:21 -0600
    • Engine revision 2e4ba9c6fb
    • Dart version 3.3.1
    • DevTools version 2.31.1
    • Pub download mirror https://pub.flutter-io.cn
    • Flutter download mirror https://storage.flutter-io.cn

Hi @guolingege
Your example is a production sample code that contains undefined components. For us to further investigate this issue, please provide a completed and minimal reproducible code sample that doesn’t include 3rd party plugins or complex production code. Thank you!

Hi @guolingege Your example is a production sample code that contains undefined components. For us to further investigate this issue, please provide a completed and minimal reproducible code sample that doesn’t include 3rd party plugins or complex production code. Thank you!

OK, I have edited it already.

I see you are using flutter_inappwebview which is a 3rd party package to reproduce the issue. But it's not used in your sample code. You can try using webview_flutter_web instead.
I checked this with pointer_interceptor example which uses pure html.Element for web underlying, but couldn't see the issue.

I see you are using flutter_inappwebview which is a 3rd party package to reproduce the issue. But it's not used in your sample code. You can try using webview_flutter_web instead.
I checked this with pointer_interceptor example which uses pure html.Element for web underlying, but couldn't see the issue.

OK, let me try. I will reply soon.


[Question] What is the behavior when a connection has been established and certificate valid period runs out?

Could you please suggest what is the behavior when a connection has been established and certificate valid period runs out?
It will throw an exception or continue to send messages?
(C# SDK for example)

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 5f24fc8e-ffad-b23c-794f-f85c2fe6b835
Version Independent ID: 03adcbd0-f165-0bc5-1490-2591c6af6665
Content: Quickstart - Enroll X.509 device to Azure Device Provisioning Service using C#
Content Source: articles/iot-dps/quick-enroll-device-x509-csharp.md
Service: iot-dps
GitHub Login: @wesmc7777
Microsoft Alias: wesmc

@Marusyk Thank you for the feedback. We are actively investigating and will get back to you soon.

Hello @Marusyk , see here how Exception handling is done with C# SDK: https://github.com/Azure/azure-iot-sdk-csharp/blob/master/iothub/device/devdoc/architecture.md#exception-handling
Please start a new thread discussion in Microsoft Q&A as this stands out of the scope of this doc and we want to be sure we leverage the experts community to advise in your project :). You can use the tag azure-iot-hub or azure-iot-dps.
Thank you much for your time!
We will now proceed to close this thread. If there are further questions regarding this matter, please tag me in your reply. We will gladly continue the discussion and we will reopen the issue.


[in_app_purchase_android] Migrate to PlayBillingLibrary 4.0.

PBL 4.0 is released https://developer.android.com/google/play/billing/release-notes. We should migrate the in_app_purchase_android to 4.0 as early as possible.

Mark as P4 because it is not required by Google Play yet. When it is required (usually in one or two years), it should be P2.

@cyanglaz
I filed the same issue https://github.com/flutter/flutter/issues/88664 a while (which I just closed now), as this migration for new API and changing to existing ones.

When should be expect the implementation ?

@TahaTesser Sorry I didn't see the other one before filing this issue. We should close this one as there were more discussion over there. We can adjust the priority accordingly.
Closing in favor of https://github.com/flutter/flutter/issues/88664


Lobby breaks at a certain ratio of server name length to resolution

Description

By "break" I mean the lobby will obscure critical parts of the UI like the "join" button. It's different at different resolutions.
Reproduction

Start a server at a decently long, but reasonable name
Resize the window until the join button is obscured

Screenshots

(yeah i know this is nyano i have not touched the lobby code at all though)
Additional context

another player just reported an issue, and they were fullscreened


Swift Package Manager support

Is your feature request related to a problem? Please describe.
It looks like some initial support for Swift Package Manager was added with a Package.swift, but this hasn't been updated in 3 years. Actually trying to import frames-ios as a SPM dependency results in many errors, and also appears to import Alamofire that doesn't appear to be being used anymore:

Describe the solution you'd like
SPM is arguably the primary mechanism of managing third party dependencies nowadays, as its built directly into Xcode. It would be good to tidy up Package.swift and declare this as a supported installation method.

Thanks @sebskuse for raising this. We will surely look into this and bring in a fix soon. Meanwhile we have other dependency managers like cocoa-pods and Carthage supported. Please have a look at them if that fits into your integration.

Thanks @sebskuse for raising this. We will surely look into this and bring in a fix soon. Meanwhile we have other dependency managers like cocoa-pods and Carthage supported. Please have a look at them if that fits into your integration.

@deepesh-vasthimal-cko Thanks for the reply. We're actually using Carthage currently, but it's becoming clear that the path forward is SPM.

@deepesh-vasthimal-cko Thanks for the reply. We're actually using Carthage currently, but it's becoming clear that the path forward is SPM.


IDE plugin for setting View strategies

Hello everyone!
About year ago I created plugin for moxy strategies
https://github.com/Maksim-Novikov/moxy-strategy-plugin
https://plugins.jetbrains.com/plugin/13679-moxy-strategy
And now I finally have some time, to develop   it.
What do you will be better:

Just add link to it in Readmy
Add folder into this project

Awesome work @Maksim-Novikov!
It needs to be tested thoroughly, there recently were some changes in strategy resolution: https://github.com/moxy-community/Moxy/issues/70
And there is also an ongoing issue with multi module projects: https://github.com/moxy-community/Moxy/issues/101
The plugin needs to be consistent with moxy compiler behavior to avoid false warnings.
I think we'll start with a link in Readme, and see how the plugin works)
Also, maybe you'd like to consider consider using short aliases for strategies, like @AddToEndSingle.

@alaershov  I added plugin to readme
https://github.com/moxy-community/Moxy/pulls
Also added alias strategies to plugin

Good job, thanks!


⚠ Bofrost.be has degraded performance

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

HTTP code: 200
Response time: 1367 ms

Resolved: Bofrost.be performance has improved in dc471c2 after 6 minutes.