Quickstart page no longer working?

I have tried using the code on quckstart page and it no longer seems to work:

Both Create an enterprise and Create a policy fail with the following error:
"Caller is not authorized to manage project."

Create a policy fails even if the associated account has an Enterprise and has permissions to manage the project and Enterprise associated with it.

Hi Charles,
I just tried and it works fine for me.

Caller is not authorized to manage project.

This error means that the account used to authenticate the request (when running credentials = flow.run_console()) doesn't have permission for the project selected above (cloud_project_id = '').
You can visit the IAM page in the Cloud Console to configure permissions. Check that the account has "Owner", "Editor" or "Android Management User" role and that the project ID in the URL matches the one used in the quickstart page.
Hope this helps,
Fred

Thanks for responding. My account has all of those permissions (and more at this point). I have created multiple accounts now and multiple enterprises and keep running into the same problem.
The only thing that makes sense at this point is that somehow I have the wrong enterprise ID. Is there a way to get the correct enterprise ID for a google cloud account you are the owner/editor/administrator of? The values found in the menu are the wrong format (the api seems to want an alphanumeric value of a certain length?) and the page I found here appears to give me an ID of the correct format when logged in to the associated account, but the permissions are always denied:
https://play.google.com/work/adminsettings

If you've lost the enterprise ID you can get it from https://play.google.com/work/adminsettings indeed. There is no other way to get it.
But if you create a new enterprise from the quickstart guide you shouldn't need to do that since the enterprise ID is returned when creating the enterprise.

I have the same problem. However, the project and the internal app belongs to the user within the organisation. The enterprise ID is correct (taken from Google Play organisation information). I've granted the organisation user Android Management User, Editor, Owner, Organisation Administrator roles, but still get the same "Caller is not authorized to manage project." error.
Any ideas?


Env visualization & sbt-microsites plugin

Continued the work of @juanpedromoreno in #91 and used latest sbt-microsites for building the site.
It also includes a new fetch-debug package for debugging fetch errors and executions.

Current coverage is 76.66% (diff: 100%)

Merging #93 into master will increase coverage by 0.31%

@@             master        #93   diff @@
==========================================
  Files            10         10
  Lines           241        240     -1
  Methods         239        238     -1
  Messages          0          0
  Branches          2          2
==========================================
  Hits            184        184
+ Misses           57         56     -1
  Partials          0          0

Powered by Codecov. Last update b5b45ca...74afd84


unclear "expr: unexpected // in func" error on Rule page.

error:
conf: Test Config:51:4: at <warn = max($bad_all)...>: expr: unexpected // in func

alerting config:
alert requests_by_country {
    template = generic
    $rbc = "groupByNode(stats.web*.request_by_country.*,1,'sum')"
    $duration = "10m" // probably should be per-country with lookup table
    $period = "7d"
    $lookback = 4
    $rbc_hist = graphiteBand($rbc, $duration, $period, "country",$lookback)
    $rbc_now = graphite($rbc, $duration, "country")
    $rbc_hist_med = median($rbc_hist)
    $rbc_hist_dev= dev($rbc_hist)
    $rbc_now_med = median($rbc_now)
    $bad = ($rbc_hist_med - $rbc_now_med) > $rbc_hist_dev*4
    $bad_all = t($bad, "")
    warn = max($bad_all) > 0
}

turns out it's due to the // on line 4. but the point remains: this error is unclear and from the looks like it, in correct (what does Config:51:4 mean? line 51 col 4 ?) also why does it reference max($bad_all)

Yes, this error message could be improved. Config:51:4 means line 51, col 4 of the file "Config". This is more useful when it reports the line number from your production bosun config file, not so useful from the web interface where it appends a bunch of stuff and so the line numbers don't match up with the web interface.
The error about max is due to how variables are handled.  A hard problem to solve.

Replacing with new issue


Consider not snapping non-sprite and/or small points to pixel grid

When looking at the test data from #478, I noticed some unusual visual behavior when rendering dense point data (in that case output by Tippencanoe), especially when the dots have a relatively small radius.
When new tile data loads or stops panning, the dots appear to crawl or "bleed" a bit. Upon further investigation, this looks like the result of the pixel snapping behavior we apply to improve the legibility of sprites and text labels. If the points are as small as 1px, they can actually disappear and reappear depending on if they are too small to see when un-snapped to the pixel grid.
This behavior is currently blanket-applied to all points-based styles. We should consider not applying it in some cases, potentially:

Non-sprite points (they aren't sampling from a texture so aligning with the pixel grid isn't necessarily relevant)
Points with a small size (snapping to pixel grid may be more distracting than helpful)

+1

On Jan 11, 2017, at 10:07 AM, Brett Camper<EMAIL_ADDRESS>wrote:
When looking at the test data from #478, I noticed some unusual visual behavior when rendering dense point data (in that case output by Tippencanoe), especially when the dots have a relatively small radius.
When new tile data loads or stops panning, the dots appear to crawl or "bleed" a bit. Upon further investigation, this looks like the result of the pixel snapping behavior we apply to improve the legibility of sprites and text labels. If the points are as small as 1px, they can actually disappear and reappear depending on if they are too small to see when un-snapped to the pixel grid.
This behavior is currently blanket-applied to all points-based styles. We should consider not applying it in some cases, potentially:
Non-sprite points (they aren't sampling from a texture so aligning with the pixel grid isn't necessarily relevant)
Points with a small size (snapping to pixel grid may be more distracting than helpful)
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.

Also text smaller than a certain size, 11 or 10pt?

On Jan 11, 2017, at 07:11, Peter Richardson<EMAIL_ADDRESS>wrote:
+1

On Jan 11, 2017, at 10:07 AM, Brett Camper<EMAIL_ADDRESS>wrote:
When looking at the test data from #478, I noticed some unusual visual behavior when rendering dense point data (in that case output by Tippencanoe), especially when the dots have a relatively small radius.
When new tile data loads or stops panning, the dots appear to crawl or "bleed" a bit. Upon further investigation, this looks like the result of the pixel snapping behavior we apply to improve the legibility of sprites and text labels. If the points are as small as 1px, they can actually disappear and reappear depending on if they are too small to see when un-snapped to the pixel grid.
This behavior is currently blanket-applied to all points-based styles. We should consider not applying it in some cases, potentially:
Non-sprite points (they aren't sampling from a texture so aligning with the pixel grid isn't necessarily relevant)
Points with a small size (snapping to pixel grid may be more distracting than helpful)
―
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.

―
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.

While it's true that the smaller the text, the more any snapping will cause it to crawl, prooprtionally, I think it would be even more important to snap small text than large text, as it's sampling from a texture (as in the exceptions noted above) – and the smaller the text, the more any grid mismatch will blur the rendered text, proportionally.

Another use case:
Road shield sprites and their text attachments aren't consistently snapped.

On Jan 11, 2017, at 08:34, Peter Richardson<EMAIL_ADDRESS>wrote:
While it's true that the smaller the text, the more any snapping will cause it to crawl, prooprtionally, I think it would be even more important to snap small text than large text, as it's sampling from a texture (as in the exceptions noted above) – and the smaller the text, the more any grid mismatch will blur the rendered text, proportionally.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.

Shields + text correlation is a separate issue, need to think on it more but not explicitly related to the issue described here.
I agree with @meetar, based on the most recent posted results on #475, I believe the differences cited there are 80% a styling issue, 20% a rendering issue (at least vis a vis Tangram vs. Mapnik results). While I certainly agree that text (small fonts and angled) can be improved, I don't think it's through not snapping them to the grid.

Included in commit https://github.com/tangrams/tangram/commit/1f2552d787879a91ffde11639aa93261ff5315d0 in PR #508

Released in v0.12.0


Consider renaming scout/index/import

I initially was confused by scout/index/import, as it wasn't clear if I was importing into Craft (which I realize you wouldn't ever do…), or into Algolia.
At any rate, if not renaming, perhaps just clarifying in the task command desc (adding to Algolia or from Craft or something)

I've updated the descriptions, but since it's such a small change I'm not yet tagging a release for it.


Make the "Deploy to OpenShift" command more discoverable

Today, only people who know the "Deploy to OpenShift"  command exist will be able to use it. We need to figure out a way to make it more obvious

How can I hide the icon though?

How can I hide the icon though?

Currently it isn't possible to hide this. The icon should only show up in a Java source file when a Quarkus project is detected. I noticed we don't check whether vscode-openshift is installed but the icon does prompt to handle that if clicked.
@fbricon , is it worth having a setting just to disable the icon ?
The only other options I can think of are :

The icon should only appear if the openshift connector is already installed. Currently we don't check that because clicking the icon triggers a prompt asking whether installation should happen
Add a 3rd option (in addition to Yes, No) called Never, which never prompts again to install the connector, and additionally ensures the icon doesn't show up again for the given instance.


Optional_deps

The README.md file now includes additional installation instructions for different dependencies using pip. Users can now choose to install LangFlow with only the core package, with local models, or with all dependencies by using the respective pip install commands. This provides users with more flexibility and options when installing LangFlow.
The pyproject.toml now has extras for dependencies that have build requirements or have torch as a requirement.
This would give the option to not install certain packages and reduce substantially the size of Docker images, for example.

🚀

Look's good, because the native pip install, we got more then 5gb in disk space, and 10 minutes to install everything, and I have nvme :D


Official Linux binary hang with "FUTEX_WAIT_PRIVATE"

Description of the problem or steps to reproduce
Binary for Linux sometimes get frozen when edit some pretty long files like kernel's .config. Strace shows that it's hanging with FUTEX_WAIT_PRIVATE:

> pgrep micro
251
> doas strace -p 251
strace: Process 251 attached
futex(0x10b8008, FUTEX_WAIT_PRIVATE, 0, NULL

Specifications
Version: 2.0.6
Commit hash: 60846f5
Compiled on June 24, 2020

What OS is this on?

uname -a
Linux AXE 5.4.56 #2 SMP PREEMPT Fri, 07 Aug 2020 11:30:24 +0000 x86_64 Intel(R) Core(TM) i5-7300U CPU @ 2.60GHz GenuineIntel GNU/Linux


check out rclone

http://rclone.org/

i like that it has lots of storage options for synch

I've got an open ticket on the COS JIRA to check out a bunch of projects like this.  I'm especially interested in how they map providers' non-filesystem-compliant semantics to actual filesystems.  I'm curious to know what you find out, and likewise I'll let you know what we discover.  Here's the list that I'm currently maintaining.  It's a mix of links to the original projects and HackerNews discussions about said projects:
https://github.com/prasmussen/gdrive
https://news.ycombinator.com/item?id=12784952
https://github.com/odeke-em/drive
http://www.cloudberrylab.com/
http://rclone.org/
https://github.com/google/skicka
https://cloudrail.com/enterprise-cloud-storage-interface/
https://news.ycombinator.com/item?id=12921389

lmk if helpful for me to do features, auth, stakeholder or license review/comparison


[WIP] Doc site TOC redesign

Description

https://jira.mesosphere.com/browse/DOCS-1827

redirects https://github.com/dcos/dcos-website/pull/1223

Urgency

[ ] Blocker
[ ] High
[ ] Medium

Requirements

Test all commands and procedures.
Build content locally and test for formatting/links.
Add redirects to dcos-website/redirect-files.
Change all affected versions (e.g. 1.7, 1.8, and 1.9).
See the contribution guidelines.

Preliminary comments:

Upgrading looks lonely all by itself. Maybe change Installing to Installing and Upgrading and put Upgrade in that directory? If I understand right, the upgrade and installation processes have a lot of similarities.

I'd put API Reference underneath Development -- I'd expect to find reference material all the way at the bottom.

Do we want Overview > Architecture moved to top level?

I'd rather not have API Reference under Development. Operators need the API too.

I didn't mean in the Development directory. I meant under it in the TOC.

I agree Upgrading looks lonely. It might make sense to have a top level page that talks about "Supported upgrade paths" and then sub-pages for each path:

1.7 -> 1.8
1.8 -> 1.9
1.9.x -> 1.9.x+1

Personally, I don't like the top level Development category in the TOC. It's ambiguous whether it's development of DC/OS itself or development FOR DC/OS, as in developing packages/services/jobs.
The point of the top level TOC is to avoid users having to make decisions about why type of user they are when all they care about is a specific action they want to perform.
Example use cases (based on questions I've heard on mailing list and slack):

What does the DC/OS API look like? (search/browse for "api")
How do I use the DC/OS API look like? (search/browse for "api" or "api usage")
How do I get logs from services using the API? (search/browse for "logging api" or "service logs")
How do I create a Universe package? (search/browse for "universe package" or "service package")
How do I contribute to DC/OS? (search/browse for "contribute" or "development" or "source code")
How do I extend DC/OS? (search/browse for "plugins" or "modules" or "extending dc/os")
How do I add a service health check? (search/browse for "health check" or "service health check")
How do I make the Services GUI show a link to my service? (search/browse for "service link")
How do I make my service route through Admin Router? (search/browse for "admin router" or "service proxy" or "service link")

Granted, slack/mailing list questions are usually only for this that are currently hard to discover, excluding questions users can already easily find themselves.
Anyway, my point is that everyone who uses DC/OS considers themselves a developer. Having a "development" section doesn't narrow down anything. And if it's "DC/OS Development" or "Service Development", then API is not a subset of that.

Administering Clusters makes me think there's going to be an Administering Services section...

I feel Service Discovery and Load Balancing should just be ``Networking` and should include a bunch of networking security topics like:

Zones & DMZ
HTTPS, SSL, TLS

SSL Termination with HAProxy
SSL Termination with AWS ELB (TODO)
SSL Termination with Marathon-LB

Virtual Networking
Load Balancing and VIPs
DNS

Should Identity and Access Management just be Security? That's the page title... OTOH, "security" is wider than just IAM...

Top level Jobs makes me think there would be a top level Services. But I know we avoided Services because it was ambiguous with the "Mesosphere Services" and "developing services". Should it instead be Operating Services and Operating Jobs?

@karlkfi @sascala

re [lonely upgrade and API reference|https://github.com/dcos/dcos-docs/pull/1020#issuecomment-293974626], i like the change to Installing and Upgrading DC/OS
re [architecture to top-level|https://github.com/dcos/dcos-docs/pull/1020#issuecomment-293975559, what's the reasoning behind making architecture more prominent? i think it fits well logically where it is.
re [upgrade fixup|https://github.com/dcos/dcos-docs/pull/1020#issuecomment-293976191], i have filed this JIRA to track this work: https://jira.mesosphere.com/browse/DOCS-1831.
re [top level Development category|https://github.com/dcos/dcos-docs/pull/1020#issuecomment-293979706], agreed - how about Developing Services?
re [jobs and services|https://github.com/dcos/dcos-docs/pull/1020#issuecomment-294022898], the services topic is currently Deploying Services and Pods and i think this makes more sense than Operating... how about Deploying Jobs?
re [ID and Access to Security|https://github.com/dcos/dcos-docs/pull/1020#issuecomment-294022627] - agreed.
re [networking section|https://github.com/dcos/dcos-docs/pull/1020#issuecomment-294006652], this does make sense. i have revised with this design.

re architecture to top-level: I've had complaints that some of the content under architecture is deeper than "overview", but I don't feel super strongly about it. It needs another iteration, I guess, but not now.

Current:

Release Notes
Overview
Installing and Upgrading
Metrics
Administering Clusters
Security
Monitoring, Logging, and Debugging
Deploying Jobs
Deploying Services and Pods
Networking
Storage
Tutorials
Developing Services
API Reference
Support

It feels like Metrics is in the wrong place. It should be near logging.
Do we need "Pods" called out in the TOC? The ontology is that "services" are either "apps" or "pods". I would prefer the top level page just be Deploying Services
I would probably put Deploying Jobs after/below Deploying Services, which I think is more commonly used first.
Tutorials is most similar to the Deploying Services and Deploying Jobs. It seems liek those should be closer in ordering.
The first few sub-pages in Administering Clusters feel like they're not exclusive to 'administration". I would probably recommend moving GUI and CLI to the top level.
Finding a Public Agent IP (under Administering Clusters) seems like something non-admins might want to do, but I can't really think of a good place to put it.
Accessing the Cluster definitely sounds like something non-admins would want to do. But SSHing into Nodes seems distinctly admin-y. Accessing the Cluster also sounds like it overlaps 100% with Cluster Access (under API Reference). And Access by Proxy and VPN (under Accessing the Cluster) starts with "When developing services on DC/OS" and " Do not use DC/OS Tunnel in production.". So maybe Access by Proxy and VPN should go under Developing Services, SSHing into Nodes should go directly under Administering Clusters, and Accessing the Cluster, with it's one sentence, should just be deleted.
The GUI page feels like it should be multiple pages, organized the same way the GUI is hierarchically.
GUI and CLI seem almost too short... maybe GUI Reference and CLI Reference or Command Line Interface (CLI) and Graphical User Interface (GUI)? If they're "references", they might look better near the API Reference.

Suggested TOC:

Release Notes
Overview
Installing and Upgrading
Deploying Jobs
Deploying Services and Pods
Tutorials
Administering Clusters
Networking
Security
Storage
Metrics
Monitoring, Logging, and Debugging
GUI Reference
CLI Reference
API Reference
Developing Services
Support

Another option, that kind sorts from admin to user to reference:
Suggested TOC:

Release Notes
Overview
Installing and Upgrading
Administering Clusters
Networking
Security
Storage
Metrics
Monitoring, Logging, and Debugging
Deploying Jobs
Deploying Services and Pods
Tutorials
GUI Reference
CLI Reference
API Reference
Developing Services
Support

@karlkfi thanks for all the feedback:

It feels like Metrics is in the wrong place. It should be near logging.

agreed, moved metrics

Do we need "Pods" called out in the TOC? The ontology is that "services" are either "apps" or "pods". I would prefer the top level page just be Deploying Services

agreed, moved pods

I would probably put Deploying Jobs after/below Deploying Services, which I think is more commonly used first.

agreed, moved jobs

Tutorials is most similar to the Deploying Services and Deploying Jobs. It seems liek those should be closer in ordering.

agreed, moved tutorials

The first few sub-pages in Administering Clusters feel like they're not exclusive to 'administration". I would probably recommend moving GUI and CLI to the top level.

agreed, moved CLI and GUI to top-level headings

Finding a Public Agent IP (under Administering Clusters) seems like something non-admins might want to do, but I can't really think of a good place to put it.

let's leave as-is for now. most users find things from the search bar anyway (in our docs users tests).

Accessing the Cluster definitely sounds like something non-admins would want to do. But SSHing into Nodes seems distinctly admin-y. Accessing the Cluster also sounds like it overlaps 100% with Cluster Access (under API Reference). And Access by Proxy and VPN (under Accessing the Cluster) starts with "When developing services on DC/OS" and " Do not use DC/OS Tunnel in production.". So maybe Access by Proxy and VPN should go under Developing Services, SSHing into Nodes should go directly under Administering Clusters, and Accessing the Cluster, with it's one sentence, should just be deleted.

good point. i have rearranged TOC accordingly.

The GUI page feels like it should be multiple pages, organized the same way the GUI is hierarchically.

i have filed this JIRA to fixup: https://jira.mesosphere.com/browse/DOCS-1833

GUI and CLI seem almost too short... maybe GUI Reference and CLI Reference or Command Line Interface (CLI) and Graphical User Interface (GUI)? If they're "references", they might look better near the API Reference.

implemented as discussed.

@karlkfi here's how my local build appears now

Should we get a 2nd (or 12th) opinion? Maybe tweet out a pic of the TOC or ask on the user mailing list?

@karlkfi we've already gotten positive user feedback on this design, and plenty of negative on the old. i think we should definitely promote it once it is live - and get feedback/iterate that way. i'd rather not involve too many cooks in the kitchen at this point.

SGTM


how to validate lime explanation on images

Is there any way to validate lime explanation on images? and is there any way to quantify this explanation,if possible.

I don't know what you mean by 'validate'. You can certainly create perturbed instances, get predictions, and verify that the explanation indeed is faithful to what the model is doing (or you can look at explanation.score to get a summary). Whether the explanation is useful or not is another story - it depends on how you are using it, whether the perturbation function we are using makes sense for the application (masking superpixels with grey), etc.


Slightly shorten some worker-thread code

Please refer to the individual commit messages for additional details.

/botio test

Looks good; thank you!


🐛 Bug Report: Incremental Ingestion returning cursor in wrong type

📜 Description
This bug concerns Incremental Ingestion plugin. If the type of cursor that you return  in next method is object, the parameter cursor comes back as string sometimes for the subsequent iterations. This seems to happen only when you use in-memory sqlite database.
👍 Expected behavior
Type of cursor that is given as a parameter for next should always be the same type as what you return in the first iteration, i.e. the type you define initially.
👎 Actual Behavior with Screenshots
cursor parameter comes back as string sometimes when it was returned as object in the previous iteration. This behavior is inconsistent and how exactly it happens seems to depend on the burst length. The screenshot shows the behavior when burst length is set to be 10 seconds.

👟 Reproduction steps
Follow the steps in this doc, and make the type of cursor object, the same as in the doc.
https://github.com/backstage/backstage/tree/master/plugins/catalog-backend-module-incremental-ingestion#installation
📃 Provide the context for the Bug.
We want to implement Incremental Ingestion plugin to improve our database performance. We'd like to follow the pattern in the documentation and keep the cursor as object.
🖥 Your Environment
OS:   Darwin 22.5.0 - darwin/arm64
node: v16.14.2
yarn: 1.22.15
cli:  0.22.6 (installed)
backstage:  1.13.2

👀 Have you spent some time to check if this bug has been raised before?

[X] I checked and didn't find similar issue

🏢 Have you read the Code of Conduct?

[X] I have read the Code of Conduct

Are you willing to submit PR?
Yes I am willing to submit a PR!

@dekoding Are you around to have a look at this one?
I see that it uses a JSON type column in the database.
It reads the rows as-is from knex and pass them through without any further action.
I wonder if it's the case that SQLite actually doesn't natively support JSON columns well, or alternatively that Knex handles them poorly with that driver, such that it returns a JSON serialized string of the data, rather than the actual data, only on SQLite.

I found this as well. From my logging, it looks like when a burst is complete, the next burst starts with the cursor as a string. Using SQLite if relevant.

Wanted to make sure you'd seen this one too @taras

@Rugvip thank you for pinging me.
@jaeeunl are you using Postgres or SQLlite?

Yeah a coercion would be needed. We do that in a few places already, like where for some reason counts sometimes come out as strings or time columns are communicated differently...

This bites us too. I think something like typeof lastMark.cursor === "string" ? JSON.parse(lastMark.cursor) : lastMark.cursor; works, WDYT?
Btw I think we should fix the MarkRecord type here too since it's not only a string:
https://github.com/backstage/backstage/blob/b8374d5d93b6edbff5290f85e5107ec09b3728ce/plugins/catalog-backend-module-incremental-ingestion/src/database/tables.ts#L88-L94

Hey, sorry for not responding to this earlier, everyone. Life found a way... to block me at every turn.
Anyway, I went looking through my records, and I don't think we ever tested this with the in-memory sqlite DB. I tested it with Postgres, and couldn't reproduce the problem, so I'm sure that this is specific to sqlite.
If it's coming back as a string instead of the correct type, you should verify that the string is in fact the expected cursor, just stringified. If that's consistent, then coercing it into an object should be easy. If not... Bug report to knex or sqlite, maybe? It would depend on which one is at fault.
@namco1992 The MarkRecord type for cursors could potentially be replaced with unknown. When it comes out of the database - well, a Postgres database, anyway - it comes out as a string that just needs to be parsed into the appropriate object. If that's not the case with sqlite, what format does it come out as?


feat: add support for q:base

LGTM but, I had a good next proposal for multiple bases in a single app. IE, multiple qwik apps. Like the idea of
base:entry#symbol
I could even propose to make it:
:entry#symbol
for the default base


q

Expected behavior
Actual behavior
Information about the Issue
Steps to reproduce the behavior

(HTTP code 401) unexpected - {"message":"Get https://registry-1.docker.io/v2/datarhei/restreamer/manifests/latest: unauthorized: incorrect username or password"}

(HTTP code 401) unexpected - {"message":"Get https://registry-1.docker.io/v2/datarhei/restreamer/manifests/latest: unauthorized: incorrect username or password"}

Login with the same credentials you would use at cloud.docker.com, and instead of using email to login to kitematic, use your username instead.

As @philipyoo mentioned, pulling images via email address isn't working as expected.
Please try to login using your Docker ID (hub username) instead of your email. This should fix the issue.


old zafira env var naming detected

take a look to https://github.com/zebrunner/reporting-ui/blob/8853ffb3b1797c766eff2efa1afdba3a3cef01e3/Dockerfile#L7
and here:
https://github.com/zebrunner/reporting-ui/blob/8853ffb3b1797c766eff2efa1afdba3a3cef01e3/Dockerfile#L35

@danymill i'll rename those variables (and i believe i can take care of UI code where those are used as well). Will contact you just in case.

@nsidorevich @danymill what do you think about having single env var? do we use both of them in front code?

also list of files where zafira-ws is detected: https://github.com/zebrunner/reporting-ui/search?q=zafira-ws&unscoped_q=zafira-ws

@vdelendik Targeted for Zebrunner 1.4

Released as part of 1.4


Fix openssl return code in crypto_pkcs7_signed_hash_verify

Since crypto_strerror is called on the return code of
crypto_pkcs7_signed_hash_verify, we need to make sure that
an openssl error code is returned.
To get a return code, the openssl function ERR_get_error is called.
I am considering making this call in the rest of the file. The only concern
is that it is not uncommon for these openssl functions to decide to NOT set
an error code before returning NULL or 0 or whatever generic fail they return.
In fact it seems only a select few actually add a error code to the error stack
before returning. I am curious to hear more thoughts on this.
We should probably decide if we want to return the openssl/gnutls/mbedtls
error codes in all the functions, or just this specific one. It seems possible/easy
with gnutls and mbedtls but openssl likes to return 1 on success and return pointers
to data instead of return values. Let me know

Okay closing this to open a new pull request with greater scope.


highlight on add support

Scroll into view when shift+arrow keying
Half working hihglight on add

Can't wait for this!

Might be a couple weeks on this one.

Superseded by https://github.com/glideapps/glide-data-grid/pull/103


[Feature Request] Use command palette for prompts

Context

[X] This issue is not a bug report. (please use a different template for reporting a bug)
[ ] This issue is not a duplicate of an existing issue. (please use the search to find existing issues)

Description
I've seen this in some VSCode extensions, so I'm guessing it shouldn't be that hard (?): I'd like a way to open the command palette to query for arguments.
The action "Go to line/column" kinda does this: It inserts a colon so that you can enter a line and press enter.

I'm not sure what the interface should be, but I imagine something like this (implicit):
editor.addAction({
    id: "setLanguage",
    label: "Set Language",
    run: (editor: monaco.editor.ICodeEditor, arg: string) => {
        monaco.editor.setModelLanguage(editor.getModel()!, language!);
    }
});

Or explicit:
editor.addAction({
    id: "setLanguage",
    label: "Set Language",
    run: (editor: monaco.editor.ICodeEditor) => {
        let language = await editor.prompt("Enter Language ID");
        monaco.editor.setModelLanguage(editor.getModel()!, language);
    }
});

Monaco Editor Playground Link
No response
Monaco Editor Playground Code
No response

Ah, I guess this is a duplicate of #627.


Django 1.11 issue

It's error with Django 1.11
mw_instance = middleware(handler)
TypeError: object() takes no parameters

See #16

Replace the middleware.py source code with this, fixes the problem.
from django.utils.functional import SimpleLazyObject
from .utils import get_user_agent

class UserAgentMiddleware(object):

    def __init__(self, get_response=None):
        if get_response is not None:
            self.get_response = get_response

    def __call__(self, request):
        self.process_request(request)
        return self.get_response(request)

    def process_request(self, request):
        request.user_agent = SimpleLazyObject(lambda: get_user_agent(request))

The middleware is located in:
site-packages/django_user_agents/

Hi,
This is not updated on pip.

Version 0.3.2 is now on PyPI. Sorry for the delay.


A Go client

We need a decent Go client, maybe with a name mesg-go would be brilliant. :) Any plans on this? I can propose a developer friendly package API within next week.

We already have a go client for the application part that can be found in the github.com/mesg-foundation/core/api/client package
and you can find one use case in this application https://github.com/mesg-foundation/application-devcon-update-on-slack/
It's really basic and definitely need to make it better but this could be a nice base.
I would personally prefer to have it as a package in the core (like that we can keep it in sync with the development of the core) but definitely we can have a library that uses this package and that will have its own readme with documentation etc... that would be more user friendly

Oh okay, I haven't notice that. Thanks!

here is an experimental client with a high level api: https://github.com/ilgooz/mesg-go

Initializer
I find it a bit confusing to have the New and the GetApplication or GetService, I understand that the New doesn't use the singleton but maybe in this case we shouldn't export this function or otherwise use the singleton in the new. I think the idea is to have only one function to call either New or Get... but both is a bit confusing
Service API
The tasks always have to return the outputKey and the data associated to this output so why not having a task handler that need to return a string and a interface{} or map[string]interface{} like that the task just output the results and don't have to explicitly call the req.Reply.
Continuing on the same idea, why not delegating the req.Get to the executeTask and like that we can have the task handler with only the inputs needed for this task.
Like that tasks don't need to know anything about the API, not even the executionID
Application API
I'm not really a big fan of the API for the Application. I kind of like the api of the mesg-js lib.
I would love to have this simplicity on the go lib too with something like
whenEvent(&Event{serviceID: 'XXX', eventType: 'YYY'})
  .Execute(&Task{
    serviceID: 'XXX',
    taskType: 'YYY',
    inputs: func (data map[string]interface{}) map[string]interface {
      ...
    }
})

I know it's less "go style" but it's closest to the future workflow file and I feel it's really accessible.
These are just ideas and definitely open to discussion on all this would love to have the pro and con for all this :)

Initializer
Totally right. I removed the GetX APIs. I think it's a good idea using New with their options for customization.
Service API

I'm not sure about removing TaskRequest.Get. We have a mesg.yml file where we can pre-define data types so users already know what data types passed between a service and an application. Thus, providing a native support for decoding those data to go structs is something that we need to provide. Otherwise there will be lots of type asserting from interface{} or map[string]interface{} that developers needs to deal with. TaskRequest is like an http.Request or gin.Context. And req.Get is like Request.ParseForm. It shouldn't be looking too inconvenient to use for Go community.
Since our tasks always have to return a response with a key it looks like it can be convenient to have a return type for our task handlers as you mentioned. The following is what seems most idiomatic way of responding with an outputKey to me:

type TaskResponse interface{} // will be defined in service package

func sendHandler(req *TaskRequest) TaskResponse {
	var data emailRequest
	if err := req.Get(&data); err != nil {
		return emailResponse{
			Error: &emailErrorResponse{"Unexpected input data type"},
		}
	}

	return emailResponse{
		Success: &emailSuccessResponse{"202", "Accepted"},
	}
}

type emailRequest struct {
	Email          string `json:"email"`
	SendgridAPIKey string `json:"sendgridAPIKey"`
}

type emailResponse struct {
        // Output keys holds a pointer for their output data structs
        // Only one outputKey with it's data will be sent as a response by
        // using a pointer and `omitempty` tag.
	Success *emailSuccessResponse `json:"success,omitempty"`
	Error   *emailErrorResponse   `json:"error,omitempty"`
}

type emailSuccessResponse struct {
	Code    string `json:"code"`
	Message string `json:"message"`
}

type emailErrorResponse struct {
	Message string `json:"message"`
}

Application API
I'm a big fan of incoming Workflow API(pipelining data from events or tasks to multiple tasks). For now we don't a have decent way of providing a complete workflow API in Go. - I don't know situation with conf file yet. -
The only drawback I can see with mesg-js style event based task executions is we cannot execute tasks based on such conditions calculated by the data we gather from event output. I may execute one or many tasks depending on the data I received from an event but that syntax require me to always run a task without a cond. I think either we need to provide a more flexible API or stick with the current one like below:
// Package main is an application that uses functionalities from following services:
// https://github.com/mesg-foundation/service-webhook
// https://github.com/mesg-foundation/service-discord-invitation
package main

import (
	"fmt"
	"log"

	"github.com/ilgooz/mesg-go/application"
)

var webhookServiceID = "v1_4bbafb91f94cd437dc21b5770e986d09"
var discordInvServiceID = "v1_5cd4c617ef5334cfddfb28171de53a9e"
var sendgridKey = "SG.XXX"
var email =<EMAIL_ADDRESS>
func main() {
	app, err := application.New()
	if err != nil {
		log.Fatal(err)
	}

	events, err := app.WhenEvent(webhookServiceID).Event("request").Listen()
	if err != nil {
		log.Fatal(err)
	}

	for range events {
		req := sendgridRequest{
			Email:          email,
			SendgridAPIKey: sendgridKey,
		}
		var res sendgridResponse
		err = app.Execute(discordInvServiceID, "send", req, &res)

		fmt.Println(err, res)
		// outputs:
		// <nil> {{202 Accepted} {}}
	}
}

type sendgridRequest struct {
	Email          string `json:"email"`
	SendgridAPIKey string `json:"sendgridAPIKey"`
}

type sendgridResponse struct {
	Success *struct {
		Code    int    `json:"code"`
		Message string `json:"message"`
	} `json:"success"`

	Error *struct {
		Message string `json:"message"`
	} `json:"error"`
}

After a long discussion, we propose this API for application:
Application API
package main

import (
	"fmt"

	mesg "mesg-fondation/go-application"
)

func main() {
	// WhenEvent returns a type that implements Filter, Map and Execute
	observable1 := mesg.WhenEvent(&mesg.EventCondition{
		ServiceID: "SERVICE_ID_1",
		Key:       "EVENT_KEY",
		// WILL BE IMPLEMENTED LATER
		// Data: map[string]interface{}{
		// 	"KEY_1": 42,
		// 	"KEY_2": "3433",
		// },
	})
	// Filter returns a type that implements Filter, Map and Execute
	observable2 := observable1.Filter(func(event *mesg.Event) bool {
		var eventData serviceID1EventData
		fmt.Println(event.Key)
		event.Data(&eventData)
		return eventData.Name == "hello"
	})
	// Map returns a type that implements Execute
	observable3 := observable2.Map(func(event *mesg.Event) interface{} {
		var eventData serviceID1EventData
		fmt.Println(event.Key)
		event.Data(&eventData)
		return &serviceID2TaskInputs{
			Method:  "POST",
			Code:    eventData.Code,
			Message: eventData.Message,
		}
	})
	// Only the execution function actually do the listening and connect to Core
	// Execute returns the event listener's stream, a chan of task's execution and a chan of error
	eventStream, executions, errs := observable3.Execute(&mesg.Task{
		ServiceID: "SERVICE_ID_2",
		Key:       "TASK_KEY",
	})
	defer eventStream.Stop()
	for {
		switch {
		case execution <- executions:
		case err <- errs:
		}
	}
}

type serviceID1EventData struct {
	Name    string `json:"name"`
	Code    int    `json:"code"`
	Message string `json:"message"`
}

type serviceID2TaskInputs struct {
	Method  string `json:"method"`
	Code    int    `json:"code"`
	Message string `json:"message"`
}

With chaining:
package main

import (
	"fmt"

	mesg "mesg-fondation/go-application"
)

func filterEvent(event *mesg.Event) bool {
	var eventData serviceID1EventData
	fmt.Println(event.Key)
	event.Data(&eventData)
	return eventData.Name == "hello"
}

func mapEvent(event *mesg.Event) interface{} {
	var eventData serviceID1EventData
	fmt.Println(event.Key)
	event.Data(&eventData)
	return &serviceID2TaskInputs{
		Method:  "POST",
		Code:    eventData.Code,
		Message: eventData.Message,
	}
}

func main() {
	mesg.WhenEvent(&mesg.EventCondition{
		ServiceID: "SERVICE_ID_1",
		Key:       "EVENT_KEY",
	})
	.Filter(filterEvent)
	.Map(mapEvent)
	.Execute(&mesg.Task{
		ServiceID: "SERVICE_ID_2",
		Key:       "TASK_KEY",
	})
}

type serviceID1EventData struct {
	Name    string `json:"name"`
	Code    int    `json:"code"`
	Message string `json:"message"`
}

type serviceID2TaskInputs struct {
	Method  string `json:"method"`
	Code    int    `json:"code"`
	Message string `json:"message"`
}

@ilgooz Nice jobs 👍
We agree to host the package in 2 repos: "mesg-foundation/go-application" and "mesg-foundation/go-service". This way, the version and issues will be managed separately.
We will do the same for the "mesg-js" libs.

Closing this issue. Let's continue the conversation on https://github.com/mesg-foundation/go-service and https://github.com/mesg-foundation/go-application


recipes-demos: Update ti-apps-launcher

commit bbaf10b43adec68015a7308a5068f86c7ba2cf01 (HEAD -> scarthgap-next)
Author: Chirag Shilwant<EMAIL_ADDRESS>Date:   Wed Jul 3 11:06:48 2024 +0530
recipes-demos: ti-apps-launcher: Add support for beagleplay

With [1], ti-apps-launcher now supports beagleplay with a seperate config.
Hence, add support for it in ti-apps-launcher recipe.

[1]: https://github.com/TexasInstruments/ti-apps-launcher/commit/5897053ddceadbe4d91d2bd6b58d758c12520c9a

Signed-off-by: Chirag Shilwant<EMAIL_ADDRESS>
commit 0f0bd69cabc106830d61f1d1e5b9866a1728a987
Author: Chirag Shilwant<EMAIL_ADDRESS>Date:   Wed Jul 3 10:58:35 2024 +0530
recipes-demos: ti-apps-launcher: Bump up SRCREV

This SRCREV update,

- Enables the support for beagleplay in ti-apps-launcher [1]

- Modifies the launch command for Seva Store & Chromium Browser [2]

[1]: https://github.com/TexasInstruments/ti-apps-launcher/commit/5897053ddceadbe4d91d2bd6b58d758c12520c9a

[2]: https://github.com/TexasInstruments/ti-apps-launcher/commit/928dafa50a3f68242e7bae4331ae0f58da4a5e80

Signed-off-by: Chirag Shilwant<EMAIL_ADDRESS>

Applied with 29de2996f5059089cf8f67e806ec9bc08026115e & b58ca690f047e2ef8d8c4ab7a2d49fe9ffa08294


Typescript repo dependency updates

Updates local dependency name and does some smaller adjustments

LGTM.
Are these packages published to npm yet?

Yes, they're up! 🎉
https://www.npmjs.com/package/@acolorbright/eslint-config-acb-base

Wondering if it still makes sense to have acb in the package name now that we have the @acolorbright scope
Was wondering the same thing - @heldinz @iksi what do you think?

Wondering if it still makes sense to have acb in the package name now that we have the @acolorbright scope

LOL yes I didn't even notice that!


Current master branch fails with token_id key not found

It seems when installing from master and running through the example, there is an issue with some 2nd+ level dependency that may have been updated, resulting in the basic auth workfow (eg the one in the readme) no longer working.

After having a deeper look into this, it seems that some OIDC providers (e.g. Azure AD) will just not return an id_token when using the client_credentials flow. This is by design, as that flow is not meant to authenticate an "user", thus doesn't need an id_token.
However, in these cases, there should still be an access_token available on the payload, which seems to be accepted by Seldon Deploy. Therefore, it would be good to fallback to access_token when using the client_credentials flow and the id_token is missing on the payload.


Missing CNN_features_KoNViD-1k/1_resnet-50_res5c.npy

By running the command:

CUDA_VISIBLE_DEVICES=0 python VSFA.py --database=KoNViD-1k --exp_id=0

A error is thrown that the file or directory "CNN_features_KoNViD-1k/1_resnet-50_res5c.npy" is missing (FileNotFoundError)
Can you please add this file or provide a link to download it.
Thanks in advance.
Here the terminal log
$ CUDA_VISIBLE_DEVICES=0 python VSFA.py --database=KoNViD-1k --exp_id=0 EXP ID: 0 KoNViD-1k VSFA Traceback (most recent call last):   File "VSFA.py", line 161, in <module>     train_dataset = VQADataset(features_dir, train_index, max_len, scale=scale)   File "VSFA.py", line 30, in __init__     features = np.load(features_dir + str(index[i]) + '_resnet-50_res5c.npy')   File "/<SOME_PATH>/numpy/lib/npyio.py", line 428, in load     fid = open(os_fspath(file), "rb") FileNotFoundError: [Errno 2] No such file or directory: 'CNN_features_KoNViD-1k/1_resnet-50_res5c.npy'

@


Adding a CSS class to identify the Changes panel button

This will allow plugin authors to style the changes panel button.

cherrypicked


Open VSX Listing: Signing the Publisher Agreement

Thank you for being part of the Open VSX community by adding your extensions to the Open VSX Registry. Please note that the service was recently transferred to the Eclipse Foundation and urgent action on your part is needed so we can continue to list your extensions. To ensure uninterrupted service, please sign the Eclipse Publisher Agreement on or before January 8, 2021. If not signed by that date, your extensions will be delisted and will no longer appear on the site nor be available via the API. If you sign at a later date, your extensions will then be re-activated. The signing process is explained in the Wiki (steps 1 and 2).
Please also note that all extensions MUST have a license in order to be listed.
More details are in these recent blog posts:
https://blogs.eclipse.org/post/brian-king/open-vsx-registry-under-new-management
https://blogs.eclipse.org/post/brian-king/new-era-open-vsx-registry
Today, there’s growing momentum around open source tools and technologies that support Visual Studio (VS) Code extensions. Leading global organizations are adopting these tools and technologies. This momentum has spurred demand for a marketplace without restrictions and limitations. Thanks for joining us on this journey as we continue to build the Open VSX community. We look forward to continued innovation from you in 2021!

Hello @spoenemann !
Thank you for your alert. I just created my Eclipse account and it seems to be good :)

I will wait until January 9 and then I will close the issue.

Hello @spoenemann !
Thank you for your alert. I just created my Eclipse account and it seems to be good :)

I will wait until January 9 and then I will close the issue.

Great! No need to wait though, all necessary steps are done.

Great! No need to wait though, all necessary steps are done.

Thanks 🙌

Thanks 🙌

Hi @Tchoupinax! I noticed another problem that needs to be addressed so the extension can remain available on open-vsx.org: The license file is currently named LICENCE.md, but it should be LICENSE.md. Because of this, the extension is currently detected as "unlicensed", which violates the new terms set by the Eclipse Foundation.
Could you rename the file and then publish a new version of the extension?
Thank you!

Hi @Tchoupinax! I noticed another problem that needs to be addressed so the extension can remain available on open-vsx.org: The license file is currently named LICENCE.md, but it should be LICENSE.md. Because of this, the extension is currently detected as "unlicensed", which violates the new terms set by the Eclipse Foundation.
Could you rename the file and then publish a new version of the extension?
Thank you!

Hey !
The version 1.0.6 is published for 3 days and should solve the issue. Please notice me if there is another issue.
https://open-vsx.org/extension/Tchoupinax/tilt
Thank you for you message :)

Hey !
The version 1.0.6 is published for 3 days and should solve the issue. Please notice me if there is another issue.
https://open-vsx.org/extension/Tchoupinax/tilt
Thank you for you message :)


Added in fake data faker for organization,

modified manage.py
also made the default role when you sign up Organization (because we have no Educator role and Admins don't sign up through the register flow, they get added by previous admins)

Thank you!


XLA doesn't do the DCE as autocluster

Issue type
Bug
Have you reproduced the bug with TensorFlow Nightly?
Yes
Source
source
TensorFlow version
2.15.0-dev20230914
Custom code
Yes
OS platform and distribution
No response
Mobile device
No response
Python version
No response
Bazel version
No response
GCC/compiler version
No response
CUDA/cuDNN version
No response
GPU model and memory
No response
Current behavior?
XLA doesn't do the DCE as autocluster. In the example below, the second line sliced2 = tf.slice(x1, [0, 1, 0, 0], [-1, -1, 4, -1]) is dead code, which is deleted when enabling autocluster. However, the XLA compiled model will still execute this line.
It is expected to delete this line since it is dead code.
Standalone code to reproduce the issue
import tensorflow as tf
import os

"""
Autocluster
"""

os.environ['TF_XLA_FLAGS'] = '--tf_xla_auto_jit=2 --tf_xla_cpu_global_jit'

class Model(tf.keras.Model):

  def __init__(self):
    super(Model, self).__init__()

  @tf.function
  def call(self, x1):
    sliced1 = tf.slice(x1, [0, 0, 1, 0], [-1, -1, 1, -1])
    sliced2 = tf.slice(x1, [0, 1, 0, 0], [-1, -1, 4, -1])
    return sliced1

# Initializing the model
x1_shape = (1, 3, 3, 2)
m = Model()

# Inputs to the model
x1 = tf.range(18)
x1 = tf.reshape(x1, x1_shape)

# Call model
output_tensor = m(x1)

"""
XLA
"""
os.environ['TF_XLA_FLAGS'] = ''

class Model(tf.keras.Model):

  def __init__(self):
    super(Model, self).__init__()

  @tf.function(jit_compile=True)
  def call(self, x1):
    sliced1 = tf.slice(x1, [0, 0, 1, 0], [-1, -1, 1, -1])
    sliced2 = tf.slice(x1, [0, 1, 0, 0], [-1, -1, 4, -1])
    return sliced1

# Initializing the model
x1_shape = (1, 3, 3, 2)
m = Model()

# Inputs to the model
x1 = tf.range(18)
x1 = tf.reshape(x1, x1_shape)

# Call model
output_tensor = m(x1)

"""
InvalidArgumentError: Exception encountered when calling layer 'model_5' (type Model).

Expected size[2] in [0, 3], but got 4
"""

Relevant log output
No response

@SuryanarayanaY I was able to replicate the issue reported here. Thank you!

@YangChenyuan ,
I can able to replicate the behaviour with jit_compile=True passed to tf.function. With jit_compile=False its working fine. It seems issue with XLA and will triage accordingly.
Thank you!


Not Usable from within WSL 2 Environment

Describe the bug
Any attempt to start AAD device code authentication fails with,
1. Caused by java.lang.UnsupportedOperationException
   The BROWSE action is not supported on the current platform!

To Reproduce
Steps to reproduce the behavior:
 ConnectionStringBuilder csb = ConnectionStringBuilder.createWithDeviceCodeCredentials(
    "<cluster_uri>"
);

And try to run this sample: https://github.com/Azure/azure-kusto-java/blob/master/samples/src/main/java/Query.java
Expected behavior
Should be able to recover from a browser not found error in a non-GUI env.
Desktop (please complete the following information):

OS: Windows 10 / WSL 2
Version WSL 2

Additional context
More info here: https://bugs.launchpad.net/ubuntu/+source/openjdk-8/+bug/1574879
Basically it boils down to GNOME dependencies not present in a WSL env since WSL is non-GUI.

It seems setting the property java.awt.headless to "true" can be a temporary workaround.
References: http://developer.classpath.org/doc/java/awt/Desktop-source.html and http://developer.classpath.org/doc/java/awt/GraphicsEnvironment-source.html

Also, to build the project under Java 14, I had to add this snippet to data/pom.xml for maven-javadoc-plugin.
<configuration>
    <source>8</source>
</configuration>

Reference: https://bugs.openjdk.java.net/browse/JDK-8212233

And the 15 seconds timeout in AadAuthenticationHelper.java is way too short for a human to copy the device code from the console, open a browser tab to https://microsoft.com/devicelogin and complete two-factor auth (if enabled). A timeout of 30 seconds worked better for me.

well it does work on my pc without WSL .
15 seconds is enough if you open the url in advance - then its just a copy paste and maybe 1 other space (or mouse) click - but i agree we can increase to 20.
what do u suggest for us to do for the java 14 ?

btw you can instead do the device authentication on your side and pass the builder the token.

Hi @ohadbitt,
Yeah, I think it should work on vanilla Windows. The issue is, WSL environment is (incorrectly) detected as a desktop environment and the code tries to launch the browser. Arguably, this is a good to have step and not necessary. The library can just print the code to the console and let the user figure out how to open the browser. But in this case I found 15 seconds is too short, given I used my work account and had to do a two-step auth every time.
Regarding Java 14, I made a general comment about what I needed to do to compile this project on my system. Feel free to ignore the comment about Java 14.

so im closing the issue - and we will increase time to 20 seconds.. although as i said u can open the web url in advance ...

I am not sure I understand. The main issue is still not addressed. Are you saying that the device code flow will not be supported under WSL environment? Or are you saying we should ourselves set the property java.awt.headless to true?


minor update based on peer review

I would appreciate if  you could let me know when the merge happens


feat(gridsom): Render a badge if keywords include meltano_sdk

For example, on this plugin:

https://meltano-hub-gridsome.netlify.app/extractors/tap-aws-cost-explorer

Either a badge, or just some text with a checkbox as exists on the legacy hub:

Resolved in #318
One follow-on tracked in:

#817


The ClojureStorm clojure compiler doesn't work when Ring Gzip middleware is required

This an odd one I had to track down, but when requiring [ring.middleware.gzip], it won't let me use your Clojure compiler for some reason. It crashes silently with no error, even if we're just running with clj. ]
This is with the latest of ClojureStorm and amalloy/ring-gzip-middleware {:mvn/version "0.1.4"}

Narrowed further, it seems to be something funky going on in gzip.clj where they are doing a defmethod
; exactly the same as do-copy for [InputStream OutputStream], but
; flushes the output on every chunk; this allows gzipped content to start
; flowing to clients ASAP (a reasonable change to ring IMO)
(defmethod @#'io/do-copy [(class (piped-gzipped-input-stream*)) OutputStream]
  [^InputStream input ^OutputStream output opts]
  (let [buffer (make-array Byte/TYPE (or (:buffer-size opts) 1024))]
    (loop []
      (let [size (.read input buffer)]
        (when (pos? size)
          (do (.write output buffer 0 size)
              (.flush output)
              (recur)))))))

Oh nice catch and thanks for narrowing that down @crimsonhawk47.
The tracing system was only expecting symbols after the defmethod keyword, I didn't know you can write a defmethod like that.
In any case it is fixed now in :

[com.github.jpmonettas/clojure "1.12.0-alpha4_2"]
[com.github.jpmonettas/clojure "1.11.1-8"]

Thanks again!


[BUG] Refresh Issues

With the ECR is open in the browser, the lock / unlock toolbar function does not cause the impact matrix toolbar to refresh. The add item icons stays active/inactive based on how it is when the ECR is opened.
If the ECR is locked from the grid view then opened, the impact matrix toolbar is correct. Same for unlock.

Can you confirm which version of Aras Innovator you're using?

11 SP 15
<EMAIL_ADDRESS>Scott Gehmlich
Senior PLM Consultant
9‑3030 Sunridge Way NE, Calgary, Alberta, T1Y 7K4
O
+1(403)517-5800,293tel:+1(403)517-5800,293
M
1(403)703-5961tel:1(403)703-5961
scott.gehmlich<EMAIL_ADDRESS>|
Manage email from ushttps://solution.javelin-tech.com/subscribe
|
Unsubscribehttps://solution.javelin-tech.com/unsubscriber
www.javelin-tech.comhttps://www.javelin-tech.com/
[Facebook]https://solution.javelin-tech.com/facebook
[LinkedIn]https://solution.javelin-tech.com/linkedin
[Twitter]https://solution.javelin-tech.com/twitter
[YouTube]https://solution.javelin-tech.com/youtube
[Instagram]https://solution.javelin-tech.com/instagram
CONFIDENTIALITY NOTICE: This email and any attachment(s) associated with this email is intended for the person or persons to whom it is addressed and may contain information that is privileged, confidential and subject to protection from disclosure under applicable law. If the reader of this message is not the intended recipient, delete this message and notify the sender of the error immediately and make no copy. Any dissemination, distribution or copying of this message is strictly prohibited.
From: Eli J. Donahue<EMAIL_ADDRESS>Sent: August 21, 2019 12:49 PM
To: ArasLabs/ecr-impact-matrix<EMAIL_ADDRESS>Cc: Scott Gehmlich<EMAIL_ADDRESS>Author<EMAIL_ADDRESS>Subject: Re: [ArasLabs/ecr-impact-matrix] [BUG] Refresh Issues (#2)
Can you confirm which version of Aras Innovator you're using?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://github.com/ArasLabs/ecr-impact-matrix/issues/2?email_source=notifications&email_token=AM3BYXRTMB5M4ID3KCYDLBDQFWEYPA5CNFSM4IKDSWNKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD42YAAY#issuecomment-523599875, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AM3BYXQ2NU3PL3WDIQKMOR3QFWEYPANCNFSM4IKDSWNA.


Update layouts

Updated template layouts:

navbar layouts
footer layouts
rest password page layout
navbar options displayed differently based on user login status and current page

also fixed path error for base.html in rest password page


python310Packages.pycoolmasternet-async: 0.1.3 -> 0.1.6

Diff: https://github.com/OnFreund/pycoolmasternet-async/compare/v0.1.3...v0.1.6
Description of changes

Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[ ] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 209999 run on x86_64-linux 1

3 packages built:

home-assistant-component-tests.coolmaster
python310Packages.pycoolmasternet-async
python39Packages.pycoolmasternet-async


Error when reading a .bz2 file with dask 0.7.5

Read plain CSV works.
Read bz2 compressed version fails, assume the pandas read_csv capability is not fully supported.
Note I also tested with dtype definition, same error.
partial strack trace
df = dd.read_csv(..., dtype={'my-column': float})
Pandas has given us the following error when trying to parse the file:

  "utf-8"

==
Traceback
File "lib\dask\async.py", line 263, in execute_task
result = _execute_task(task, data)
File "lib\dask\async.py", line 245, in _execute_task
return func(*args2)
File "lib\dask\dataframe\io.py", line 69, in _read_csv
raise ValueError(msg)

Looks like you have an encoding issue. A few things to try:

We just released dask 0.7.6. Try upgrading, and see if that fixes your problem.
Try passing in the encoding directly to the read_csv call (encoding='utf-8'). The default is your system encoding, which might not be "utf-8".

Will do, however I'm seeing other odd behavior after I 'load' the data.
df.head() runs 'for a very long time' never returns a value, 6 million rows
4 columns.
On Fri, Jan 8, 2016 at 10:05 AM, Jim Crist<EMAIL_ADDRESS>wrote:

Looks like you have an encoding issue. A few things to try:

We just released dask 0.7.6. Try upgrading, and see if that fixes
your problem.
Try passing in the encoding directly to the read_csv call (
encoding='utf-8'). The default is your system encoding, which might
not be "utf-8".

—
Reply to this email directly or view it on GitHub
https://github.com/blaze/dask/issues/909#issuecomment-170026237.

Yeah, that's probably due to how we're parsing the files. I'm unable to reproduce using a bz2, non ascii encoded csv that I quickly made. If you can create a small, reproducible test case (if your data isn't sharable, a small bz2 file of fake data that exhibits the same problem would also work) for us that would greatly help in debugging this.
The file encoding might also not be 'utf-8' - pandas is just throwing a ValueError('utf-8'), which is less than informative. If you're comfortable mucking in source code, we could modify the line where dask swallows the traceback, which would help in debugging.

I can share a sample if i can get your email address.
On Fri, Jan 8, 2016 at 10:19 AM, Jim Crist<EMAIL_ADDRESS>wrote:

Yeah, that's probably due to how we're parsing the files. I'm unable to
reproduce using a bz2, non ascii encoded csv that I quickly made. If you
can create a small, reproducible test case (if your data isn't sharable, a
small bz2 file of fake data that exhibits the same problem would also work)
for us that would greatly help in debugging this.
The file encoding might also not be 'utf-8' - pandas is just throwing a
ValueError('utf-8'), which is less than informative. If you're
comfortable mucking in source code, we could modify the line where dask
swallows the traceback, which would help in debugging.
—
Reply to this email directly or view it on GitHub
https://github.com/blaze/dask/issues/909#issuecomment-170029392.

Note: I'm using Python 3.5.1.
On Fri, Jan 8, 2016 at 10:19 AM, Jim Crist<EMAIL_ADDRESS>wrote:

Yeah, that's probably due to how we're parsing the files. I'm unable to
reproduce using a bz2, non ascii encoded csv that I quickly made. If you
can create a small, reproducible test case (if your data isn't sharable, a
small bz2 file of fake data that exhibits the same problem would also work)
for us that would greatly help in debugging this.
The file encoding might also not be 'utf-8' - pandas is just throwing a
ValueError('utf-8'), which is less than informative. If you're
comfortable mucking in source code, we could modify the line where dask
swallows the traceback, which would help in debugging.
—
Reply to this email directly or view it on GitHub
https://github.com/blaze/dask/issues/909#issuecomment-170029392.

I can share a sample if i can get your email address.
jcrist at continuum dot io

Note that there is also a pretty serious performance flaw with dask.dataframe.read_csv and compressed files.  If you have the space it's worthwhile to unzip ahead of time (also because bz2 decompression is very very slow, and something you only want to do once.)

Understand, I am testing, bz2 is a hit, compressed file system files on
windows seem optimal.
On Fri, Jan 8, 2016 at 10:36 AM, Matthew Rocklin<EMAIL_ADDRESS>wrote:

Note that there is also a pretty serious performance flaw
https://github.com/blaze/dask/issues/901 with dask.dataframe.read_csv
and compressed files. If you have the space it's worthwhile to unzip ahead
of time (also because bz2 decompression is very very slow, and something
you only want to do once.)
—
Reply to this email directly or view it on GitHub
https://github.com/blaze/dask/issues/909#issuecomment-170033450.

@apiszcz , thanks for the bug report. We weren't properly determining the compression based off the file extension. This should be fixed by #910.

Ah, I didn't notice that.  Question though, does this deviate with Pandas behavior?

No, compression='infer' by default in pandas read_csv as well. This was never tested, as all tests specified compression directly.

Ah, that might be new

Looks like it was added in 0.16.1: http://pandas.pydata.org/pandas-docs/version/0.17.0/whatsnew.html#whatsnew-0161-api.

ack, infer is recent, i'm using 17.1
Jim if you have time and get normal behavior when you do df.head() I'd
appreciate knowing that.
On Fri, Jan 8, 2016 at 12:08 PM, Jim Crist<EMAIL_ADDRESS>wrote:

Looks like it was added in 0.16.1:
http://pandas.pydata.org/pandas-docs/version/0.17.0/whatsnew.html#whatsnew-0161-api
.
—
Reply to this email directly or view it on GitHub
https://github.com/blaze/dask/issues/909#issuecomment-170058871.

Yep, works fine for me. Only argument to read_csv was the bz2 filename.


IMAP sync problem

Are there any related issues?
https://github.com/nylas/nylas-mail/issues/2729
https://github.com/nylas/nylas-mail/issues/3329
What operating system are you using?
Linux Mint 17.3
What version of Nylas Mail are you using?
2.0.32
--
Bug?
Do you have any third-party plugins installed? If so, which ones?
No
Is the issue related to a specific email provider (Gmail, Exchange, etc.)?
IMAP
Emails does not sync, i can send emails, check mails opening, but don't see any emails, all labels are empty. Debug console showing next:

Same issue with Yandex.com and Nylas Mail on Solus x64. Folders are detected by Nylas Mail during synchronization (which lasted days), and in the end they all showed up empty.
For what it's worth, I was still using the deprecated Nylas N1 client a few days ago, and Yandex.com was still correctly synced.
It might be related: an other email account on openmailbox.org, IMAP, does sync correctly with Nylas Mail (new emails inbox), but I cannot send any message using this address. As a comparison, Gmail works.


Show description on feature detail page

The data is already exposed via the metadata call.
This change actually uses it and prints it at the top.
Fixes: #284

Examples:


The bot randomly stops playing when using Docker

:bug: Describe the Bug

I have started running this bot on Docker and I found that sometimes it just stops playing completely. This time it happened again and simply said the bot has excited with code 0. As if the bot finished doing what it needed to do. It did not restart itself which it should on Docker

:pencil2: Steps to Reproduce

Run bot on Docker
Wait a while
Playback stops and does not restart

:confused: Expected Behavior

A 24/7 bot that restarts when crashes

:scroll: Log
'dicord-music-bot-24-7 excited with code 0'

:camera: Screenshots

Paste a screenshot of the bug (if applicable).

:question: Other Information

Node Version: Version of the node runtime.

I am using the docker-compose file you showed me, and then starting it with docker-compose up -d.

Can you try running docker-compose logs bot and send the output here of the logs from around the time that the bot crashed?

This time, it did not crash. It did however start playing up and as a result the playback stopped. Here are a few weird behaviors I am noticing:

It is playing 'Presence updated to: ❙ ❙ Goslow - Returning Home' which is not apart of my listed song. I do not believe it actually plays anything. After this 'Goslow' song is resumed due to people joining, it will crash after about 3 - 4 pause and resumes
I see a few stream expiring errors.

I did notice that there is no option to carry on playing even when the voice channel is empty. When I ran the bot through VSCode, this is what fixed all the issues. How do I do this when running it on Docker?

Here is the log up until the first crash:
bot_1  | (10:23:36 AM) - [INFO] -  User Kerim_77_XD has left 🎧᲼24/7 lofi radio (LL).
bot_1  | (10:23:36 AM) - [INFO] -  Music has been paused because nobody is in my channel.
bot_1  | (10:23:36 AM) - [INFO] -  Presence updated to: ❙ ❙ LlamaLoops - Pokémon & Chill  ~ lofi mix extended version (2 hour loop)
bot_1  | (11:48:16 PM) - [INFO] -  User Meaookung145 has joined 🎧᲼24/7 lofi radio (LL).
bot_1  | (11:48:16 PM) - [INFO] -  Stream has expired, skipping...
bot_1  | (11:48:18 PM) - [INFO] -  User Meaookung145 has left 🎧᲼24/7 lofi radio (LL).
bot_1  | (11:48:19 PM) - [INFO] -  User Meaookung145 has joined 🎧᲼24/7 lofi radio (LL).
bot_1  | (11:48:19 PM) - [INFO] -  Playing (LOCAL): Goslow - Returning Home for 1 user(s) in 🎧᲼24/7 lofi radio (LL).
bot_1  | (11:48:19 PM) - [INFO] -  Presence updated to: ► Goslow - Returning Home
bot_1  | (11:48:22 PM) - [INFO] -  User Meaookung145 has left 🎧᲼24/7 lofi radio (LL).
bot_1  | (11:48:22 PM) - [INFO] -  Music has been paused because nobody is in my channel.
bot_1  | (11:48:22 PM) - [INFO] -  Presence updated to: ❙ ❙ Goslow - Returning Home
bot_1  | (11:48:23 PM) - [INFO] -  User Meaookung145 has joined 🎧᲼24/7 lofi radio (LL).
bot_1  | (11:48:23 PM) - [INFO] -  Music has been resumed.
bot_1  | (11:48:23 PM) - [INFO] -  Presence updated to: ► Goslow - Returning Home
bot_1  | (11:48:27 PM) - [INFO] -  User Meaookung145 has left 🎧᲼24/7 lofi radio (LL).
bot_1  | (11:48:27 PM) - [INFO] -  Music has been paused because nobody is in my channel.
bot_1  | (11:48:27 PM) - [INFO] -  Presence updated to: ❙ ❙ Goslow - Returning Home
bot_1  | (11:48:28 PM) - [INFO] -  User Meaookung145 has joined 🎧᲼24/7 lofi radio (LL).
bot_1  | (11:48:28 PM) - [INFO] -  Music has been resumed.
bot_1  | (11:48:28 PM) - [INFO] -  Presence updated to: ► Goslow - Returning Home
bot_1  | (11:48:30 PM) - [INFO] -  User Meaookung145 has left 🎧᲼24/7 lofi radio (LL).
bot_1  | (11:48:30 PM) - [INFO] -  Music has been paused because nobody is in my channel.
bot_1  | (11:48:30 PM) - [INFO] -  Presence updated to: ❙ ❙ Goslow - Returning Home
bot_1  | (11:48:37 PM) - [INFO] -  User Meaookung145 has joined 🎧᲼24/7 lofi radio (LL).
bot_1  | (11:48:37 PM) - [INFO] -  Music has been resumed.
bot_1  | (11:48:37 PM) - [INFO] -  Presence updated to: ► Goslow - Returning Home
bot_1  | (11:48:44 PM) - [INFO] -  User Meaookung145 has left 🎧᲼24/7 lofi radio (LL).
bot_1  | (11:48:44 PM) - [INFO] -  Music has been paused because nobody is in my channel.
bot_1  | (11:48:44 PM) - [INFO] -  Presence updated to: ❙ ❙ Goslow - Returning Home
bot_1  | (12:44:18 AM) - [INFO] -  User LlamaLoops has joined 🎧᲼24/7 lofi radio (LL).
bot_1  | (12:44:18 AM) - [INFO] -  Music has been resumed.
bot_1  | (12:44:18 AM) - [INFO] -  Presence updated to: ► Goslow - Returning Home
bot_1  |
bot_1  | ><EMAIL_ADDRESS>start /opt/app
bot_1  | > node ./src/app.js

The stream expire warning shows up when the bot resumes playback after it has been paused for like longer than an hour or two, so it skips to the next song.
You can enable the playback even when the channel is empty by adding the environment variable:
DISCORD_PAUSE_ON_EMPTY=false

Wonderful, thank you for that. I have made the relevant changes and started the bot up again.
I will keep an eye on it for the next few days and report back here to see if it has fixed the error!

Here is the log up until the first crash:

Very weird, I would expect an error to show up. It kinda seems like the container got restarted manually.
In any case, I do not remember if you were the person who told me about the PAUSE_ON_EMPTY setting, because if you disable the whole pause functionality almost all random crashing is gone.

Yeah I was the one who posted about disabling the PAUSE_ON_EMPTY setting as it fixed all the issues I was having with playback as it would struggle to resume at times.
Bandwidth is not much of a problem thankfully, I run on unlimited which makes server hosting a lot easier.

Yeah, just as a reminder, you can configure the bot through environment variables inside your docker-compose.yml file, you can check what variable corresponds to what JSON config key here.

So it is happening again. It seems to start randomy playing this Goslow song which then ha no sound
(1:47:20 PM) - [INFO] -  Playing (LOCAL): Goslow - Returning Home for 0 user(s) in 🎧᲼24/7 lofi radio (LL).

(1:47:20 PM) - [INFO] -  Presence updated to: ► Goslow - Returning Home

(4:05:00 PM) - [INFO] -  Playing (LOCAL): LlamaLoops - best anime openings but it's lofi remix extended edition (2 hours) for 0 user(s) in 🎧᲼24/7 lofi radio (LL).

(4:05:00 PM) - [INFO] -  Presence updated to: ► LlamaLoops - best anime openings but it's lofi remix extended edition (2 hours)

(6:44:05 PM) - [INFO] -  Playing (LOCAL): LlamaLoops - best anime openings but it's lofi remix part 3 extended edition (2 hours) for 0 user(s) in 🎧᲼24/7 lofi radio (LL).

(6:44:05 PM) - [INFO] -  Presence updated to: ► LlamaLoops - best anime openings but it's lofi remix part 3 extended edition (2 hours)

(9:04:31 PM) - [INFO] -  Playing (LOCAL): LlamaLoops - Pokémon & Chill  ~ lofi mix extended version (2 hour loop) for 0 user(s) in 🎧᲼24/7 lofi radio (LL).

(9:04:31 PM) - [INFO] -  Presence updated to: ► LlamaLoops - Pokémon & Chill  ~ lofi mix extended version (2 hour loop)

(11:27:04 PM) - [INFO] -  Playing (LOCAL): c0bra - A Sleeping Computer for 0 user(s) in 🎧᲼24/7 lofi radio (LL).

(11:27:04 PM) - [INFO] -  Presence updated to: ► c0bra - A Sleeping Computer

(1:34:48 AM) - [INFO] -  Playing (LOCAL): LlamaLoops - Legend of Zelda lofi mix 🕹 extended edition (2 hour loop) for 0 user(s) in 🎧᲼24/7 lofi radio (LL).

(1:34:48 AM) - [INFO] -  Presence updated to: ► LlamaLoops - Legend of Zelda lofi mix 🕹 extended edition (2 hour loop)

(2:21:43 AM) - [INFO] -  User LlamaLoops has joined 🎧᲼24/7 lofi radio (LL).

(2:21:57 AM) - [INFO] -  User LlamaLoops has left 🎧᲼24/7 lofi radio (LL).

After this line appears, it stops playing music:
(1:47:20 PM) - [INFO] -  Playing (LOCAL): Goslow - Returning Home for 0 user(s) in 🎧᲼24/7 lofi radio (LL
I have no clue where that song is coming from, but if I can remove it then I believe the issue will be fixed. I will confirm this by doing !skip to see if skipping it fixes the bot.

I am trying all available file types to see if it might be something to do with that. Will update if it crashes again.

@moonstar-x that seems to be the issue. I tried another file format (mp3) and it did the same. Instead, with the mp3 files it now just says presence updated to with no song.

It doesn't say "Presence updated to: Local song"?

When I switch my files from .OPUS to .MP3, it does. The logs I posted before were before I changed the file format. Now that I have .mp3 files, it simply says Presence updated to: or Presence updated to: Local Song.

Do you mean that just by changing the extension from .opus to .mp3 the name worked?

I did not just change the file extension. I redownloaded all the songs in .mp3 format. Previously, when I was using .OPUS format, the bot would stop playing once it updated its presence to Presence updated to: ► Goslow - Returning Home, however now that I have redownloaded the songs as .mp3, the bot stops playing once the presence is updated to Presence updated to: Local Song and/or Presence updated to:.

So I came to the conclusion that the bot is attempting to play songs that are not there, hence its stopped playback

Hmmm...
It rather seems interesting that the presence gets changed to Presence updated to:  because it would mean that metadata reader does find an entry for the song title but it must be empty most likely.
Though, I've seen some filesystems that create hidden files for certain files, so if you have a file a.mp3 you may have a hidden ._.a.mp3 or something similar.
 I have a feeling that there may be some hidden *.opus or *.mp3 inside that the bot may be trying to read.

I tried everything and I am still not able to see any hidden files. I turne don the show hidden files option, run commands on PowerShell and CMD that show all files including hidden and it just lists all songs I have added.

It seems to happen on song 10/12. I will keep a eye on it to triple check this.

For some reason, all it says now is Presence updated to: ► Local Song for every single song and still stops playing after a while.

I do get this on start up:
This bot is designed to work only on one server at a time. If you're seeing this message, it means your bot is in more than a server. Currently, the bot is in 2 servers. Please, remove it from the rest.
However, it is definitely not on any other server as I only own this one.

Are you really sure your bot is in only one server? If you're getting that message it surely means that it is indeed in 2 servers.
Although it shouldn't be too much of a problem since the bot only connects to the channel you tell it to connect (which means obviously one server only) but I'm actually not 100% if just the fact of being in multiple servers is enough to break the player. Though I know that the skip command could be triggered from another server and make the song skip in the one where the bot is playing.
However, I can't really explain why the presence would get updated to something empty when there is no way that the PlayerPresenceManager returned something empty like that unless the player had some sort of unexpected state.
If it's not something related to the files being corrupt or having broken metadata, it could be that the second server is breaking the player.
Try remaking your bot in the developer portal or, if you're comfortable with code, leaving all the servers your bot is in and then re-inviting it.
client.on('ready', () => {
  Promise.all(client.guilds.cache.map((guild) => guild.leave())).then(() => console.log('Finished leaving'));
});

Thank you for that all. I am going to get the bot to leave all the servers before I try anything else. From there on, if that does not work, I shall remake it in the developer portal.
In terms of the code, where should I put that?

You can put that anywhere inside src/app.js, just run it once and then remove it.

After running the code, getting the bot to leave all servers, and inviting it back the issue still persists. The error message did go away though.

Even after getting it to leave the server, every single song just shows:
Presence Updated to: Local Song
I think this has to do with metadata or something along that line because it now can not find information about the song and as always attempts to play a song that is not there hence the silence.

That's weird. I'm convinced that you must have an audio file that may be hidden, if not in the local-music folder maybe in the local-intermissions folder.
As for the metadata thing, I think it's better that it says 'Local song' and not an empty string because at least the metadata parser worked but didn't find anything.
I cannot reproduce your issue either. I do not get any moment when the bot plays silence or when the metadata doesn't work with opus files.

Alright so I kicked the bot, invited it back, started the project from scratch, only had one song that worked and started it. Turns out the metadata issue was due to the songs completely loosing their information. So I fixed that.
Now, the bot will play perfectly for a day or so (playing through terminal now instead of docker), and then just play nothing at all. The presence shows the song with the right tags and information, but in the server it is dead silent.

I'm aware of that particular issue. Normally the stream expire thing should deal with it but I know it is not perfect.
I think this can be fixed with the update to djs13 but I'm afraid I haven't found the time to work on this. :/

I wonder if there is a way to have the program self restart before the time that it would normally expire, for now.

 Music randomly stops.

Hi there, sorry for the long hiatus, I'm trying to make some time during my week for these things.
After some thought it seems that this is a duplicate of #56 so I'm closing this issue.


Expose ability to change longPoll and shortPoll values

I have a node server where I need to configure the shortPoll on the fly.  https://github.com/UniversalDevicesInc-PG3/udi-poly-Airthings-Consumer/issues/13

@BenoitMercier or @bpaauwe would it be possible to add this?

Actually, I like this idea a lot.
With kind regards,

Michel Kohanim
         CEO

(p)<PHONE_NUMBER>
http://www.universal-devices.comhttp://www.universal-devices.com/

From: Jimbo.Automates @.>
Sent: Saturday, May 25, 2024 9:45:39 AM
To: UniversalDevicesInc/udi_python_interface @.>
Cc: Subscribed @.***>
Subject: Re: [UniversalDevicesInc/udi_python_interface] Expose ability to change longPoll and shortPoll values (Issue #26)
@BenoitMercierhttps://github.com/BenoitMercier or @bpaauwehttps://github.com/bpaauwe would it be possible to add this?
—
Reply to this email directly, view it on GitHubhttps://github.com/UniversalDevicesInc/udi_python_interface/issues/26#issuecomment-2131358426, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ADMVJPNPOTCBXISNLNOZ5OTZEC53HAVCNFSM6AAAAAAS3HMGTSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMZRGM2TQNBSGY.
You are receiving this because you are subscribed to this thread.Message ID: @.***>

Seems like this is more of a PG3 issue than an interface issue.  PG3 stores the values for short/long poll in it's database and uses those values to configure timers that send messages to the plug-in when those timers trigger.
These values for each plug-in are currently user configurable.
Allowing the plug-in to modify these values at runtime will create a conflict between what the user sets and what the plug-in sets.    This could lead to user confusion.  I.E.  I set the short poll to 60 seconds, why are things only updating every 120 seconds?
Also, are the plug-in changes only temporary or are they allowed to update the configuration database?
The short/long poll timers are a convenience for plug-ins and plug-ins are not required to use them if they don't meet the requirements of the plug-in.
For the Airthings issue referenced above, it seems like a better solution would be to not use short poll at all and have the plug-in calculate the required poll interval based on the number of sensors being polled and do that polling implementation internally.  Making the user guess at a value and then having the plug-in override it anyway seems like a less optimal user experience.

I could invent my own polling interval and set it internally to the maximum allowed based on the number of sensors, but I'd prefer to just use the existing short poll mechanism and allow the plugin to automatically set the value, or use a value determined by the user if they prefer a longer period.   If I used my own, then it would still be restricted to only be triggered when the short poll is called, or I'd have to start a new thread and handle it internally which seems wrong.  Why not let the plugin change the short poll and have it reflected in the database.

Thinking about it some more, maybe a better solution would be to create a third type of poll interval.    Leave short poll and long poll as is but add a third interval that is set by the plug-in.  That way PG3 would still be doing the timers.  By default, the new timer would be disabled and only enabled if the plug-in configures it.
This allows the existing API to be used.  Since PG3 sends a POLL message with a flag to indicate weather it's the short or long interval, so that there's another flag value; shortpoll, longpoll, programedpoll or something like that.
We could also give the plug-in author the choice to expose the short/long poll configuration such that those could be disabled if the plug-in doesn't need them.

Why not let the plugin change the short poll and have it reflected in the database.

because you're overriding something that is supposed to be user configured.  That seems wrong to me.
short/long poll have had a specific behavior/meaning for years now.   I think it would be better to add to the API than change existing API.

What my proposal doesn't allow for is the ability for the user to override the plug-in's programmable interval.  But you could do that with a custom parameter.  That way it would be obvious to the user that they are overriding whatever the plug-in wanted to do with a specific value.

Why not let the plugin change the short poll and have it reflected in the database.

because you're overriding something that is supposed to be user configured. That seems wrong to me.

something that "can" be user configured, but rarely is, and the default values are supplied by the plugin.

short/long poll have had a specific behavior/meaning for years now. I think it would be better to add to the API than change existing API

What is the "specific behavior/meaning" .it pretty much means something different in each plugin depending on their needs.  The documentation just says "The POLL event is published periodically based on the shortPoll and longPoll configuration settings. " Allowing a plugin to optionally override poll values doesn't seem like that big of a change.
Why add something new, like programedpoll, which will break current behavior since some plugins likely use "if short_poll: do shortpoll; else do longpoll", which obviously is not the best but know it exists.

I have always wanted to update the poll interval in my own plugins, but I understand what Bob is suggesting and it makes sense: it may cause confusion for the user and add to support tickets. Maybe a third plugin-defined polling interval is not bad. If it’s 0, then no polling. Otherwise, poll.
With kind regards,

Michel Kohanim
CEO
(p)<PHONE_NUMBER>
http://www.universal-devices.comhttp://www.universal-devices.com/

From: Jimbo.Automates @.>
Sent: Sunday, May 26, 2024 12:26 PM
To: UniversalDevicesInc/udi_python_interface @.>
Cc: Michel Kohanim @.>; Comment @.>
Subject: Re: [UniversalDevicesInc/udi_python_interface] Expose ability to change longPoll and shortPoll values (Issue #26)
Why not let the plugin change the short poll and have it reflected in the database.
because you're overriding something that is supposed to be user configured. That seems wrong to me.
something that "can" be user configured, but rarely is, and the default values are supplied by the plugin.
short/long poll have had a specific behavior/meaning for years now. I think it would be better to add to the API than change existing API
What is the "specific behavior/meaning" .it pretty much means something different in each plugin depending on their needs. The documentation just says "The POLL event is published periodically based on the shortPoll and longPoll configuration settings. " Allowing a plugin to optionally override poll values doesn't seem like that big of a change.
Why add something new, like programedpoll, which will break current behavior since some plugins likely use "if short_poll: do shortpoll; else do longpoll", which obviously is not the best but know it exists.
—
Reply to this email directly, view it on GitHubhttps://github.com/UniversalDevicesInc/udi_python_interface/issues/26#issuecomment-2132371519, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ADMVJPKDCPFJH6WNQAUURBLZEIZOBAVCNFSM6AAAAAAS3HMGTSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMZSGM3TCNJRHE.
You are receiving this because you commented.Message ID<EMAIL_ADDRESS>

What is the "specific behavior/meaning" .it pretty much means something different in each plugin depending on their needs. The documentation just says "The POLL event is published periodically based on the shortPoll and longPoll configuration settings. " Allowing a plugin to optionally override poll values doesn't seem like that big of a change.

What I meant was that polling intervals are typically used to control how often something is queried for status updates and that the user has the ability to define those intervals.   You're correct in that for many users, they just don't care what the interval is and having the plug-in automatically adjust it would probably go unnoticed.    But I have faith that there are some who would set a poll value and then complain when it wasn't updating at that interval.

Why add something new, like programedpoll, which will break current behavior since some plugins likely use "if short_poll: do shortpoll; else do longpoll", which obviously is not the best but know it exists.

That was my first thought too, but it really should be implemented such that you only get a programmed poll event if your plug-in has configured a programmed poll interval.  Existing plug-ins wouldn't be configuring one, so they'd never get the event.
I think the same should be done for both short and long poll so that plug-in authors can decide if they need those or not.  If the plug-in only needs one poll interval, the other shouldn't even show up on the configuration page.  If a plug-in doesn't need any polling, no polling configuration should be present.
The biggest problem with allowing plug-ins to override the poll intervals is that you now have two ways to set the intervals and there's no clear way for the user to know how this works.   One plug-in may take the user entered value as the value to use and only override it if the user hasn't set a value.  Another plug-in may use the user's entered value as just a guideline and adjust it as necessary.     Maybe one plug-in treats the user setting as a maximum interval and another treats it as the minimum interval.
With a programmed poll interval controlled by the plug-in, you then have the ability to define how that works using custom parameters.  You can have custom parameters for minimum interval and maximum interval that the user configures while the plug-in is then free to set the interval anywhere between the two as needed.   To me, this is then far less confusing than re-purposing the existing short/long poll values

My intent was to have a driver which defined Auto Set Short Poll True|False so it would be clear to the user.
I agree having a new polling and allow plugins to specifically define if they want long, short or programed would be best, but that's a big change and I was proposing what I thought was a simple change that had a better chance of actually being implemented since my original request was ignored for 18 months. :)

If a plugin needs to run something on schedule at a rate that is determined by the plugin, then why do we need to have that exposed to the user?
In my opinion, that logic should be in the plugin itself. PG3 does not add much value to this.
To make things easy, look at this module. You can schedule a task, and modify a schedule on the fly as needed:
https://pypi.org/project/schedule/

@BenoitMercier as I said, I can create my own thread and handle it, but polling functionality already exists in PG3 so why should I have to start a new thread to handle it, which I will if this doesn't happen.

@UniversalDevicesInc/jimbo, Because polling from PG3 does not work the way you need it. It is meant to be user configurable.
It does not make sense to me to have the plugin tell PG3 to send a new type of poll message to the plugin, when there are simpler solutions like scheduler.

Wow, thanks for the consideration.  Yes simpler for you, not if others need it. nevermind.

I can see the benefit of having a standardized way to handle rate-limited polling.   All the weather service plug-ins have this issue too and I've not come up with a good way to handle it.   The weather services complicate this a bit more because the actual limit is based on the subscription plan that the user has subscribed to, not a fixed value.   But if the user could enter the rate limit into the plug-in and have the plug-in then program the poll interval to not exceed that limit seems useful and more intuitive than making the user calculate the interval based on the rate limits.
@jimboca I didn't mean to imply that you hadn't thought through how allowing the plug-in to change the poll interval would work for your plug-in.  My concern is that not everyone will put the same effort into it and we'll end up with different behaviors from various plug-ins for something that's currently consistent.
Adding something like "programmed poll" isn't really any more work than modifying PG3 to allow plug-in's to change the existing poll intervals.  Both require a new PG3 API.   Adding "programmed poll" does mean adding a database field and another timer, both of which are fairly easy.   Extending this to allow plug-in authors to disable existing polls is really a different feature (and should probably be a different request).

Why can't there be another poll type (short, long, plugin)?

I would assume that it's just the plugin. Something like @ in unix.
With kind regards,

Michel Kohanim
         CEO

(p)<PHONE_NUMBER>
http://www.universal-devices.comhttp://www.universal-devices.com/

From: BenoitMercier @.>
Sent: Monday, May 27, 2024 6:07:43 PM
To: UniversalDevicesInc/udi_python_interface @.>
Cc: Michel Kohanim @.>; Comment @.>
Subject: Re: [UniversalDevicesInc/udi_python_interface] Expose ability to change longPoll and shortPoll values (Issue #26)
Do we need to have the user determine and enter rate limits into a new type of poll?
Or do we need the plugin to determine the schedule?
—
Reply to this email directly, view it on GitHubhttps://github.com/UniversalDevicesInc/udi_python_interface/issues/26#issuecomment-2134190478, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ADMVJPKAICV6TY7Q4SBXCFDZEPKF7AVCNFSM6AAAAAAS3HMGTSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMZUGE4TANBXHA.
You are receiving this because you commented.Message ID: @.***>

Plugin only. If the plugin wants to allow the user override then it can be another driver. Which I will do in airthings.