Additional implicit resolutions for LT and LTEq

This pull request modifies implicits for LT and LTEq so that the following cases are covered without the need for any additional knowledge about N (other than N <: Nat):

_0 <= N
N <= N
N < Succ[N]
N <= Succ[N]

See the added test cases.

I also wanted to have transitivity, i.e.
implicit def transitivity[A <: Nat, B <: Nat, C <: Nat](implicit
    lteq1: A <= B,
    lteq2: B <= C) =
  new <=[A, C] {}

but that could cause the type inference to diverge. Would having a compose method be a good idea?
trait LTEq[A <: Nat, B <: Nat] {
  def compose[C <: Nat](lteq: B <= C) = new <=[A, C] {}
}

Great stuff! :-)
Wrapping the types of the implicit arguments of transitivity in Lazy will probably prevent divergence. Do you want to give that a try before I merge?

No luck with Lazy so far. It's likely that I'm doing something wrong. I isolated the problem, to be sure nothing is interfering. Here is what I'm struggling with:
Version 1
import shapeless.Lazy

trait Rel[A, B]

object Rel {
  implicit def transitivity[A, B, C](implicit
      r1: Lazy[Rel[A, B]],
      r2: Lazy[Rel[B, C]]): Rel[A, C] =
    new Rel[A, C] {}

  def transitivityTest[A, B, C](implicit r1: Rel[A, B], r2: Rel[B, C]): Unit = {
    implicitly[Rel[A, C]]
  }
}

This causes the compilation to go into an infinite loop (no error reported, it just does not terminate).
Version 2
The only difference here is the transitivityTest method moved to a separate module.
import shapeless.Lazy

trait Rel[A, B]

object Rel {
  implicit def transitivity[A, B, C](implicit
      r1: Lazy[Rel[A, B]],
      r2: Lazy[Rel[B, C]]): Rel[A, C] =
    new Rel[A, C] {}
}

object TransitivityTest {
  def transitivityTest[A, B, C](implicit r1: Rel[A, B], r2: Rel[B, C]): Unit = {
    implicitly[Rel[A, C]]
  }
}

This results in
could not find implicit value for parameter e: Rel[A,C]
    implicitly[Rel[A, C]]
              ^

If I add import Rel._ to TransitivityTest, I get an infinite loop again.

There's something not quite right with those two examples ... neither of them mention LTEq (or have an inductive base case of some other sort).

Not mentioning LTEq is on purpose, to make it clear that the examples are self-contained and that the implicit resolution does not interfere with anything else in LTEq. Think of Rel in the examples as LTEq, or any other transitive relation.
One would need a base case to make Rel any useful, but the code above (most importantly the transitivityTest method) should still compile, right? I wanted to keep the examples minimal.

Well, the use of Lazy has the effect of suppressing the divergence checker, so your version 1 will chase its tail indefinitely, as you've observed. You really do need a base case of some sort there.

Inside the transitivityTest method, don't the arguments r1: Rel[A, B] and r2: Rel[B, C] serve as a base case?

No, I think that transitivity is just going to loop on its first implicit argument.
BTW, I'm happy to merge without transitivity if you're happy with the rest.

Yeah, I might try to work out transitivity at some later point. Thanks.

Interestingly enough, if I omit Lazy from my constrained examples, they compile:
trait Rel[A, B]

object Rel {
  implicit def transitivity[A, B, C](implicit
      r1: /* not Lazy */ Rel[A, B],
      r2: /* not Lazy */ Rel[B, C]): Rel[A, C] =
    new Rel[A, C] {}

  def transitivityTest[A, B, C](implicit r1: Rel[A, B], r2: Rel[B, C]): Unit = {
    implicitly[Rel[A, C]]
  }
}

Yeah, I might try to work out transitivity at some later point. Thanks.

By which I meant that I'm happy if you merge this PR and I might try to work out transitivity in the future as a separate PR.

Sorry it's taken me so long to get back to this ... I've been preoccupied with family issues.

With a couple of negative tests this LGTM ... thanks! :-)

No worries, I hope everything is OK. I added some negative tests.

Perfect ... many thanks. Merging.


it must be possible to add custom params to presignURL

for example ContentType is included in the signature computation:
<?xml version="1.0" encoding="UTF-8"?>
<Error>SignatureDoesNotMatch<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><AWSAccessKeyId>AKIARXE2QZFCSXL7IA4R</AWSAccessKeyId><StringToSign>PUT

application/json
1622618896
/h3d4b1d4ea6d84b0229bce7cf6806b0bb3470489ab8205a13f75cfe518fa7/live/data-embed-unit-tests/data-embed-no-helix.json</StringToSign><SignatureProvided>01F7yGPBahNDioaR5A/AIfWn6Q0=<

suggest to include blob params like this:
class AWSStorage extends Storage {
  static async presignURL(bucket, path, blobParams = {}, method = 'GET', expires = 60) {
    if (!AWS) {
      // eslint-disable-next-line global-require, import/no-extraneous-dependencies
      AWS = require('aws-sdk');

      AWS.config.update({
        region: process.env.AWS_REGION || 'us-east-1',
        logger: console,
      });
    }

    const s3 = new AWS.S3();

    const operation = method === 'PUT' ? 'putObject' : 'getObject';
    const params = {
      Bucket: bucket,
      Key: path.startsWith('/') ? path.substring(1) : path,
      Expires: expires,
      ...blobParams,
    };

    return s3.getSignedUrl(operation, params);
  }
}

@trieloff it seems that the presigned urls are somewhat limited when we want to add custom metadata.
problem problem is, that the metadata need to be included in the signing step (key + value), but the value can later not be changed :-(
e.g. when we want to store the source location in a x-amz-meta-x-source-location metadata, we would need to know the source location value before hand. i.e. the pre-signer already needs to resolve it.
I think for source location is is ok.

e.g. when we want to store the source location in a x-amz-meta-x-source-location metadata, we would need to know the source location value before hand. i.e. the pre-signer already needs to resolve it.
I think for source location is is ok, but maybe for others it isn't.

Yes, e.g. for x-amz-meta-last-modified which the caller can't know beforehand


Update tutorial-enable-sspr-writeback.md

Previous note regarding on-premises password policies were misleading and incorrect.
For passwords to be changed immediately, ???password writeback ???must be set to 0. However, if users adhere to the on-premises policies, and the Minimum password age is set to a value greater than zero, password writeback still works after the on-premises policies are evaluated.
PWB still works immediately if minimum password age is set to a value greater than Zero. but its limited by this restriction.
If customers needs to allow users to change password more than one time per day, than the minimum password age at on-premises password policy needs to be set to ZERO.

#sign-off


Keyboard nav in dropdown menus broken in 6.4 RC

Attempting to use keyboard nav in the dropdown menus in the visual test /dropdown-menu/left-aligned-dropdown-menu-inside-top-bar-right.html is missing the first item, appears to be unable to find it.
Possibly related, we currently have 3 failing javascript tests associated with dropdown menus.
@Owlbertz can you take a look? Thanks

@kball, the issue is caused by the fact that the first link has no href-attribute and thus is not focus-able. We would either need to force a href="#" or to go with using tabindex  I guess.

OK... we can prob enforce/require the href... can you see if the failing dropdown menu JS tests are related?

Well as far as I can see the tests use a template that has a href present for each link, so it is probably another issue.

The tests should be fine now. Does the initial issue still exist / occur?

The visual test still has the anchor without href or tabindex. Should we use href="#" like in the docs or add tabindex="0"?
In the real world there is no anchor in a nav without a href or tabindex.

Closing as we did not receive any further feedback and the initial issue should be resolved.


Start of GDAL config settings doc

Closes https://github.com/developmentseed/titiler/issues/240
I'd love help for: GDAL_CACHEMAX, GDAL_DATA, PROJ_LIB.

🥳 thanks so much @kylebarron, this is really cool 🙏

Maybe we need a short paragraph explaining the high level strategy for making titiler fast, which is minimizing number of HTTP GET range requests.  And these GDAL environment variables can be tuned to your use case to do that.

One AWS specific gotcha I've run into in the past is related to how GDAL looks up aws creds.  If they aren't stored in (1) the environment or (2) ~/.aws/credentials, GDAL will check the EC2 instance profile (if applicable) which can be quite slow - adds up to ~1 second of latency per network call.

I bet it's also worth mentioningCPL_CURL_VERBOSE + CPL_DEBUG as a good debug tool (also tilebench).


display-parent-updates should support allowMajorUpdates, allowMinorUpdates and related parameters

Since #966 (2.16.0) most display-*-updates and update-* goals consistently support a set of common parameters to narrow the scope of used dependencies (allowMajorUpdates, allowMinorUpdates, allowIncrementalUpdates, ...) However, display-parent-updates does not.
If you agree I'm happy to contribute a PR to make sure display-parent-updates accepts the same parameters as update-parent.

PR are always welcome 😄
Please pay attention that we have:

versions:update-parent
versions:display-parent-updates
versions:parent-updates-report

Agree available options should be similar.

Hi @slawekjaranowski , please have a look at #1017
From the *-report goals, none is currently supporting the allMajor/Minor parameter.


blog imports

PR for importing blogs
The imported Blogs

OpenEBS StorageClasses For ZFS-LocalPV (https://openebs.io/blog/openebs-storageclasses-for-zfs-localpv/)
Handling node down/cluster scaling on ZFS LocalPV backed workloads (https://openebs.io/blog/handling-node-down-cluster-scaling-on-zfs-localpv-backed-workloads/)
Recover from Volume Multi Attach Error in On-Prem Kubernetes Clusters (https://openebs.io/blog/recover-from-volume-multi-attach-error-in-on-prem-kubernetes-clusters/)
Resize Kubernetes StatefulSets without impact (https://openebs.io/blog/resize-k8s-statefulset-without-impact/)
Handling node down/cluster scaling on LocalPV backed workloads (https://openebs.io/blog/handling-node-down-cluster-scaling-on-local-pv-backed-workloads/)
OpenEBS-Velero backup/restore of stateful applications (https://openebs.io/blog/openebs-velero-backup-restore-of-stateful-applications/)
Kubernetes StatefulSet on ppc64le using OpenEBS LocalPV provisioner (https://openebs.io/blog/kubernetes-statefulset-on-ppc64le-using-openebs-localpv-provisioner/)
Data Migration Within Kubernetes Clusters (https://openebs.io/blog/data-migration-within-kubernetes/)
Restricting cStor pool usage within a specified threshold value (https://openebs.io/blog/restricting-cstor-pool-usage-within-a-specified-threshold-value/)
Resizing the ZFS-LocalPV Volumes (https://openebs.io/blog/resizing-the-zfs-localpv-volumes/)
Getting started with K3s in vSphere and OpenEBS cStor (https://openebs.io/blog/getting-started-with-k3s-in-vsphere-and-openebs-cstor/)
Snapshot and Clone for ZFS LocalPV (https://openebs.io/blog/snapshot-and-clone-for-zfs-localpv/)
Setup Continuous Integration for Helm chart (https://openebs.io/blog/setup-continuous-integration-for-helm-chart/)
Monitoring ZFS-LocalPV Volumes (https://openebs.io/blog/monitoring-zfs-localpv-volumes/)
Uniquely identifying disks in OpenEBS on VMWare platform (https://openebs.io/blog/uniquely-identifying-disks-in-openebs-on-vmware-platform/)
Creating manual BlockDevice (https://openebs.io/blog/creating-manual-blockdevice/)
OpenEBS Node Device Management (NDM) — Troubleshooting tips (https://openebs.io/blog/openebs-node-device-management-ndm-e2-80-8a--e2-80-8atroubleshooting-tips/)
cStor Pool Operations via CSPC in OpenEBS (https://openebs.io/blog/cstor-pool-operations-via-cspc-in-openebs/)
OpenEBS Dynamic Volume Provisioning on ZFS (https://openebs.io/blog/openebs-dynamic-volume-provisioning-on-zfs/)
Cloud Native Chaos Engineering — Enhancing Kubernetes Application Resiliency (https://openebs.io/blog/cloud-native-chaos-engineering-e2-80-8a--e2-80-8aenhancing-kubernetes-application-resiliency/)
ECK & OpenEBS — Data Ops Streamlines Deployment (https://openebs.io/blog/eck-openebs-e2-80-8a--e2-80-8adata-ops-streamlines-deployment/)
The Myth of THE database (https://openebs.io/blog/the-myth-of-the-database/)
Using Chaos Engineering to harden applications that use NuoDB, OpenEBS (https://openebs.io/blog/using-chaos-engineering-to-harden-applications-that-use-nuodb-openebs/)
OpenEBS community releases v1.1, maintaining a faster release cadence. (https://openebs.io/blog/openebs-community-releases-v1-1-maintaining-a-faster-release-cadence/)
OpenEBS Project Update and whats coming in v1.0 (https://openebs.io/blog/openebs-project-update-and-whats-coming-in-v1-0/)
Configuring OpenEBS to run with Security-Enhanced Linux (https://openebs.io/blog/configuring-openebs-to-run-with-security-enhanced-linux/)
How to Easily Build a CI Dashboard (https://openebs.io/blog/build-a-ci-dashboard/)
Deploying OpenEBS on SUSE CaaS platform (https://openebs.io/blog/deploying-openebs-on-suse-caas-platform/)
High Availability For Jira Using OpenEBS (https://openebs.io/blog/high-availability-for-jira-using-openebs/)
A Primer on OpenEBS Continuous Integration (https://openebs.io/blog/a-primer-on-openebs-continuous-integration/)

@rakeshPRaghu does all the images are been optimized because I see many images which bigger sizes. I think there is still some room to get optimize if already done.


Add fullscreen/unfullscreen mode to FoodChain Activity

FoodChain activity should now enter fullscreen/unfullscreen mode, as said in #598

@AndreaGon send PR in dev branch.

@prakashujjwal1010 Oh yeah, I keep forgetting this. Thanks! :)


Ez copy data selections

Fixes #723
Note: does not deal with select all across pages yet
Behavior:
Select and choose copy data
-if direct hard conflicts, asks user if they'd like to delete the existing and override with the selected
-if soft conflicts, asks user if they'd like to link the selected entities to the existing
Particularly looking for ways to improve:
-ExportDataModal: I use a lot of state and there may be better ways to write pieces of the code
-Warning/Alert messaging to user

Note: this implementation is good enough for now, we will revisit it later when our desired update semantics are better understood.

Sorry to be adding comments late, but I noticed a few things:

When I select entities to copy and click "Copy", the popup modal gives a dropdown list of workspaces to copy the data to. This dropdown includes the current workspace. Shouldn't we only include workspaces aside from the current workspace?
If a user tries to copy duplicate data I get the message "The following entries already exist in the selected workspace. Please select CANCEL to go back or COPY to override the existing entities." While that message is in the modal, I can change the workspace destination. But that doesn't clear the message. When I click "COPY" I don't know whether I am copying data to the first workspace I selected, or the one I changed to.
Added suggestions inline for wording

If a user tries to copy duplicate data I get the message "The following entries already exist in the selected workspace. Please select CANCEL to go back or COPY to override the existing entities." While that message is in the modal, I can change the workspace destination. But that doesn't clear the message. When I click "COPY" I don't know whether I am copying data to the first workspace I selected, or the one I changed to.

So the logic around here is pretty delicate (and something we definitely want to improve on in the future) and wouldn't handle selecting a new workspace while you've already started down one of the conflict paths. For now, the solution I'm implementing is just removing the workspace selector drop-down menu after the first "Copy" click.

Added suggestions inline for wording

Added these in, thanks! They're a lot clearer now :)


Make dojo administration make sense

Do we remember what this was about? Does the new properly-dockerized paradigm solve this? I'm going to assume yes.


Updates to release metric based on feedback

Fixed visualization link, added mention of filtering out bots, and inserted 'Question:' before the question. These were requested in Issue #42
Signed-off-by: Dawn M. Foster<EMAIL_ADDRESS>

Great!


How do I make the equivalent of "SELECT username FROM usertable WHERE userID == 1"?

I have been trying and trying again, and can't seem to understand how to do this.
I keep trying the following:
Building Complex Queries
Queries have a number of chainable functions that can be used (with expressions) to add and modify a number of clauses to the underlying statement.
let query = users.select(email)           // SELECT "email" FROM "users"
.filter(name != nil)     // WHERE "name" IS NOT NULL
.order(email.desc, name) // ORDER BY "email" DESC, "name"
.limit(5, offset: 1)     // LIMIT 5 OFFSET 1
but can't seem to get it to get the value out of the "query"
Any help would be appreciated.

Hi @sdlcheng, I was in the same situation and as a "SQL" person I was more used to the "old school sql syntax" so I decide to move to GRDB.swift.
The GRDB is a toolkit for SQLite, and it allows you to use the native SQLite syntax or use the "old school sql syntax" let's say in that way.
Their repository is pretty good maintained, so if you're like me, it's a good choice to go with them!
This is the link: GRDB.swift
Hope it help you!

Hi @saormart
Will try it out later! Thanks though! 👍

please use stackoverflow for general questions


Fix security vulnerability report for the two AIX openjdk systems at OSUOSL

OSUOSL system administrators have received a security vulnerability report about our two AIX openjdk systems hosted at OSUOSL.
Details available privately upon request.
This issue covers resolving the vulnerabilities and reporting the actions taken back to OSUOSL.

Changes have been made to address the problem.  Now waiting for confirmation from OSUOSL admins that the fix is good.

@tellison are we okay to close this now?

OSUOSL are happy again, so closing


update title to make SCM package more findable

fixes: https://github.com/pulumi/registry/issues/4902

This is not a durable change, and will be blown away the next time that scm publishes a new update. I think the durable fix will be to write an update to .DisplayName in the scm package.

I'm going to close this out, since this is the wrong place to make this kind of change. If we want to make this change, it needs to be in the provider repo.


Fixed Issue#88 : Add "Book a Table" Button in Hero Section with Table Reservation Form.

I have added the feature, Please have a look. In this when you click the button it redirects you to a new page where you can book a table. There are 2 input boxes one for time and other for number of seats. For generating random number I have used math.random.
Contributed By Avansh2006...

I have added the main website's theme to this, please check #93 . #93 it is the updated PR.


Upgrade to latest Spin SDK

As we continue to showcase this application at conferences as a demo, it would be nice to update Finicky Whiskers to use the latest Spin SDK as it is currently it is on Spin v0.4. Would be great to get this in for Wasm I/O in case people we talk to go to look at the code but priority on this seems low. Adding this issue to track the work, I'll probably take a stab at it on a Friday.

SDK's have now been updated to v1.4.1


switch internal only error to a throw/catch

There's no need for a full on error object here. Ruby has throw/catch to handle this and it help distinguish errors that might reach the end user from what is otherwise an internal signal.

Also, throw/catch is faster than fail/rescue.

I'm not opposed to this, but can we show that it's faster with a benchmark?

Run with Ruby 2.2.3:
require 'benchmark/ips'

Benchmark.ips do |x|
  x.report('Catch/Throw') do
    catch(:benchmarking) do
      throw(:benchmarking)
    end
  end

  x.report('Fail/Rescue') do
    begin
      fail StandardError
    rescue StandardError
      # do nothing
    end
  end

  x.compare!
end

Calculating -------------------------------------
         Catch/Throw    73.753k i/100ms
         Fail/Rescue    33.262k i/100ms
-------------------------------------------------
         Catch/Throw      1.990M (± 8.6%) i/s -      9.883M
         Fail/Rescue    518.015k (± 6.6%) i/s -      2.594M

Comparison:
         Catch/Throw:  1990106.8 i/s
         Fail/Rescue:   518015.2 i/s - 3.84x slower

:shipit:

Thanks for the review.


Use Git.php for better security

Related to #61, this appears to be the best solution for secure git access via php, that would eliminate the need for expect / pexpect as dependencies. Personally, I'm more comfortable allowing proc_open compared with exec / shell_exec. I'm not terribly experienced with php but might take a stab at it as well :smile:
Cheers
https://github.com/kbjr/Git.php

Thanks for the note. I'll take a look.

I'm closing this since Codiad itself is unmaintained and has at least  4 (!) open issues for vulnerabilities, including two potential RCE, which no one has appeared to even followed up on. If those will never get patched in Codiad itself, there's no point in worrying about the security of this plugin.


Proposed Solution for Uncallable Genotype in Call object

A genotype is defined as a list of ints: https://github.com/ga4gh/schemas/blob/master/src/main/resources/avro/variants.avdl#L132-L146. Though, sometimes a call doesn't have a genotype. It would be nice to get consensus on how people are representing the genotype: ./.
Our group has proposed: [-1,-1] only to comply with the current type.
What have others done? And if a consensus is made, this should be added to the documentation.

Looks like this issue has been discussed before but never made it to the schema documentation.
https://github.com/ga4gh/server/issues/14
The discussion also thought using -1 for uncalled genotypes was a good approach.

Picked up here https://github.com/ga4gh/schemas/issues/727


Generate forward-compatible Java client

Update OpenAPI and use it to generate a client that uses the single request
object style.  Other Java clients (HadoopFS, Spark metadata) show how to use
this.
Old client kept as clients/java-legacy/.  1.0 will deprecate it, and it will
be deleted then or afterwards.
Closes #6424.

Actually doing this on #6656.


Require NoDevice with Ebs or VirtualName for BlockDeviceMappings

Issue #, if available:
Fix #534
Description of changes:

BlockDeviceMappings need at least one of NoDevice, Ebs, or VirtualName

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Codecov Report

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

@@            Coverage Diff            @@
##             master     #677   +/-   ##
=========================================
  Coverage          ?   85.13%
=========================================
  Files             ?      116
  Lines             ?     6685
  Branches          ?     1583
=========================================
  Hits              ?     5691
  Misses            ?      626
  Partials          ?      368

Continue to review full report at Codecov.

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


Crashes upon loading the EDIT file

I am using pes 2021 with virtuared v6, any time I load the edit file the exe crashes without any warning.

Hi Zain, please try the latest version of the Editor, I believe it will resolve your issue.  If it does persist, please open a new issue to let me know.


minor improvement: hides the navigation arrow to the next/previous build when it is currently at the last/first build.

this arrow would not shown when it's at the first build and can't show any previous builds.
Same for the next button on the last build.

@mbehzad Awesome man - thanks! Been meaning to do that for a while!


Update metadata and patch database for support urls

Updates Engineblock-metadata and adds dbpatch to prevent dbpatches getting out of sync between 5.x-dev and develop.
See: #231

Seems good to me!

:+1:


Request: Support for non-Git VCS repos

Right now, the only two options of how to distribute a jpm package is either via a Git repo or via a tarball. Though the latter is flexible enough to accommodate pretty much all use cases not covered by Git alone, it would still be nice if dependencies could refer to other VCSes as well – notably, Mercurial and Fossil.
For context, Go, which also has some infra to support VCSes in its build tooling, supports Git, Hg, Fossil, but also Bazaar and Subversion. That said, given the overwhelming dominance of Git over other VCSes in practice, I'm not sure whether this is worthwhile, so this can also be declared out of scope.

For some related past discussion that touches on this a bit: https://github.com/janet-lang/janet/issues/631


Primer name normalization

A process should be added that will validate the user-provided primer BED and notify the user if an unnormalized primer BED will not be respliceable.

This is mostly solved in recent updates to validate_primer_bed.py, though more normalizations may be warranted in the future.

This is mostly solved in recent updates to validate_primer_bed.py, though more normalizations may be warranted in the future.


Enhanced Export Functionality for Local OpenAPI Files

I want the ability to specify a local YAML file in the downloadUrl, located at /static/openapi.yaml on my system. Currently, I lack this capability, so I'm using a workaround. I simply mention the path in the description section of openapi.yaml, and everything works. However, I would prefer to use the standard mechanism with an attractive 'export' button.
Download openapi.yaml
Is your feature request related to a problem?
No.
Describe the solution you'd like
I seek a straightforward and standardized way to link to a local YAML file directly through the downloadUrl parameter. This method should enable users to download the file by clicking an 'export' button, enhancing user experience and maintaining a neat interface.
Describe alternatives you've considered
As a temporary solution, I manually include the file path in the API documentation's description section, allowing users to access and download the file. However, this approach lacks the polish and ease of use that a dedicated export button would offer.
Additional context
This feature request arises from the need for a more integrated and user-friendly method to share local YAML files with API consumers.

Hi @hjhrwerv2423, we currently provide a helper HTML component specifically for this. You can demo it here: https://docusaurus-openapi.tryingpan.dev/petstore/swagger-petstore-yaml
You can enable it by specifying a downloadUrl like in this example: https://github.com/PaloAltoNetworks/docusaurus-openapi-docs/blob/main/demo/docusaurus.config.js#L239. However, it has to be a URL, i.e. references to local files in the filesystem is not supported.


testing out this new gh action

Description
Please provide a brief description of the changes introduced in this pull request.
What problem does it solve? What is the context of this change?
How to Test
Please describe how you have tested these changes. Have you run the code against an example application?
What steps did you take to ensure that the changes are working correctly?
Related Issues
Please include any related issues or pull requests in this section, using the format Closes #<issue number> or Fixes #<issue number> if applicable.

Codecov Report

:exclamation: No coverage uploaded for pull request base (main@e3be898). Click here to learn what that means.
Patch has no changes to coverable lines.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
Additional details and impacted files
@@           Coverage Diff           @@
##             main       #4   +/-   ##
=======================================
  Coverage        ?   96.87%
=======================================
  Files           ?      200
  Lines           ?    39181
  Branches        ?       24
=======================================
  Hits            ?    37956
  Misses          ?     1225
  Partials        ?        0

Flag
Coverage Δ

esm-unit-tests-14.x
47.80% <ø> (?)

esm-unit-tests-16.x
92.11% <ø> (?)

esm-unit-tests-18.x
92.11% <ø> (?)

integration-tests-14.x
78.97% <ø> (?)

integration-tests-16.x
79.07% <ø> (?)

integration-tests-18.x
79.08% <ø> (?)

unit-tests-14.x
91.41% <ø> (?)

unit-tests-16.x
91.46% <ø> (?)

unit-tests-18.x
91.44% <ø> (?)

versioned-tests-14.x
75.70% <ø> (?)

versioned-tests-16.x
77.02% <ø> (?)

versioned-tests-18.x
77.02% <ø> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


hpx::lcos::queue exhibits strange behavior

I am trying to use hpx::lcos::queue to distribute values between asynchronous jobs. During compilation I got errors like this:
hpx/hpx/runtime/actions/component_action.hpp:65:18: error: rvalue reference to type 'particle<[...]>' cannot bind to lvalue of type 'particle<[...]>'
                (std::forward<Ts>(vs)...);

with a help of my mentor we compiled attached fix to these problems.
Sadly hpx::lcos::queue still does not seem to be doing what I want it. Usage is as follows:
#include <hpx/include/lcos.hpp>
#include <hpx/include/parallel_algorithm.hpp>
#include <boost/function.hpp>

template<typename Intermediate, typename Reduction>
struct reduce_helper : boost::function1<void, hpx::future<Intermediate>> {
private:
    boost::function2<Reduction, Reduction, Intermediate> m_reduce;
    mutable hpx::lcos::queue<Reduction> m_queue;

    friend class hpx::serialization::access;

    // When the class Archive corresponds to an output archive, the
    // & operator is defined similar to <<.  Likewise, when the class Archive
    // is a type of input archive the & operator is defined similar to >>.
    template<class Archive>
    void serialize(Archive &ar, const unsigned int version) {
        ar &m_reduce;
        ar &m_queue;
    }

public:

    reduce_helper(boost::function2<Reduction, Reduction, Intermediate> reduce,
                  hpx::lcos::queue<Reduction> queue) : m_reduce(reduce), m_queue(queue) {

    }

    void operator()(hpx::future<Intermediate> next) const {
        Intermediate nextValue = next.get();
        Reduction val = m_reduce(m_queue.get_value_sync(), nextValue);
        m_queue.set_value(val);
    }

};

boost::function1<Reduction, InputData> m_initial;
boost::function2<Reduction, Reduction, Intermediate> m_reduce;
std::vector<hpx::future<Intermediate>> futures = std::vector<hpx::future<Intermediate>>();

// populate futures with futures, assign m_initial and m_reduce with appropriate functors ;-)

hpx::lcos::queue<Reduction> queue = hpx::lcos::queue<Reduction>();
Reduction initial = m_initial(hpx::util::get<1>(left));
queue.set_value(initial);

hpx::lcos::wait_each(reduce_helper<Intermediate, Reduction>(m_reduce, queue), futures);

output_future.get();
output.set_value_sync(hpx::util::get<0>(left), queue.get_value_sync());

@TheConstructor please look at the fixing_queue branch, all has been fixed there. I also added an example

It's also in the PR #1627

@TheConstructor  Can we close this now in light of #1627 working for you?


Add custom callback to window destroy function

It would be useful to disable every coroutine etc. in script when window is being closed

If your coroutine has loop then you can add this to you loop
coroutine.resume(coroutine.create(function()
  while task.wait() do
     if Fluent.Unloaded then break end
     -- Your Code Here
  end
end))


The error message for not specifying --fs-license-file is unintuitive

I forgot to add --fs-license-file to a recent run of QSIRecon and ran into:
  File "/opt/conda/envs/qsiprep/lib/python3.10/multiprocessing/process.py", line 314, in _bootstrap
    self.run()
  File "/opt/conda/envs/qsiprep/lib/python3.10/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/qsirecon/cli/workflow.py", line 121, in build_workflow
    if not Path(config.execution.fs_license_file).exists():
  File "/opt/conda/envs/qsiprep/lib/python3.10/pathlib.py", line 960, in __new__
    self = cls._from_parts(args)
  File "/opt/conda/envs/qsiprep/lib/python3.10/pathlib.py", line 594, in _from_parts
    drv, root, parts = self._parse_args(args)
  File "/opt/conda/envs/qsiprep/lib/python3.10/pathlib.py", line 578, in _parse_args
    a = os.fspath(a)
TypeError: expected str, bytes or os.PathLike object, not NoneType

We currently have the type set to Path. We should probably set it to IsFile (i.e., an existing file):
https://github.com/PennLINC/qsirecon/blob/0b53f5338e635e307d3b21d1f91b9e6ea7328eb6/qsirecon/cli/parser.py#L320-L326
When a user doesn't provide it at all, we can do what XCP-D used to do (see here):
    if opts.fs_license_file is not None:
        opts.fs_license_file = opts.fs_license_file.resolve()
        if opts.fs_license_file.is_file():
            os.environ["FS_LICENSE"] = str(opts.fs_license_file)

        else:
            error_messages.append(f"Freesurfer license DNE: {opts.fs_license_file}.")
    else:
        fs_license_file = os.environ.get("FS_LICENSE", "/opt/freesurfer/license.txt")
        if not Path(fs_license_file).is_file():
            error_messages.append(
                "A valid FreeSurfer license file is required. "
                "Set the FS_LICENSE environment variable or use the '--fs-license-file' flag."
            )

        os.environ["FS_LICENSE"] = str(fs_license_file)


Run Kivy app on RPi3 & RPi4 (with the same binaries)

Hi!
I've already posted this issue here, but its been 4 months and no one commented, so I decided to post here to see if I'm lucky :smiley:
Me and my colleagues are developing a Kivy application to play some media files.
We already have the application running on some RPis 3 B+, but it would be nice to support the "new" RPi 4 too.
However we are struggling with some "details"...
The base image we are using is the Buster Lite (without desktop env & without X11).
Running the RPi 3 binary (generated with pyinstaller) on RPi 4 results in error, since the EGL is no longer supported on RPi 4.
When I install SDL2 from sources (as recommended on documentation) I can run the app on the development RPi 4 & on the production RPi 3.
However, when I try to execute that same executable on a "clean" image on RPi 4, the app now crashes during startup because it couldn't load the OpenGL / GLES.
Since then I've created a binary in RPi4, and I can run it in a clean image on RPi 4, with libegl-mesa0 and libglvnd-dev installed through apt.
Our main goal now is to build a single binary to be distributed in a single deb package (targeting both RPi4 and RPi 3).
Can help us, please?
Any suggestions are very welcome :slightly_smiling_face:

A question like this is best asked on Discord https://discord.gg/y8QPS3tu


Use of object.assign() in chapter 8

I can see why it doesn't matter in this particular example, but using object.assign() directly does actually have the side-effect of changing the existing value of the stream, while returning the same mutated object rather than a new one.
The stream isn't strictly a "stream" anymore - it's now a "stream-looking" way of performing continuous operations on mutable state, which is a bit confusing and likely could lead to bugs in more complex scenarios? 🤔
Likely the appropriate function would be something like:
function(model, value) {
  return Object.assign({}, model, value);
}

Which is side-effect free.
I understand it doesn't lead to problems in this particular case, but you are trying to teach people functional programming patterns, where typically functions are kept pure and free of side-effects?
I'm by no means an expert, it just occurred to me that some people might not understand that using object.assign() in this way, with FRP patterns, in general, isn't really safe?

Excellent points!
You are correct, we are mutating the object, and we have set up a controlled way of re-rendering the view on the same object, using streams to control when the re-rendering occurs.
Later on, when using a stream of functions for updates, the nesting function is:
var nestUpdate = function(update, prop) {
  return function(func) { // this is the nested update. take the incoming func, and
    update(function(model) { // call the original update, and
      model[prop] = func(model[prop]); // call func on the nested model
      return model;
    });
  };
};

Again, we are mutating model and returning it.
The Meiosis pattern works well both with mutation and immutable objects. Because we have set up a clear, unidirectional reactive loop, mutation is unlikely to cause bugs. I did not want to prescribe immutability because it is not required for the pattern to work well.
Object.assign is used to gradually explain the concept of a stream of updates, working our way up to using a stream of functions for updating the model. Once reached, utilities such as Ramda and Lodash-FP can help with producing new objects instead of mutating existing ones. I have sections on these libraries in the Wiki. But again, I don't want to imply that immutability is a requirement.
As you said, there are some functional programming patterns that rely on immutable objects. Indeed I am trying to teach some FP concepts because they are useful with Meiosis, but there's nothing wrong with using mutation.
Thank you for your feedback, I appreciate it!


TransportHandler.ProcessMessageAsync overwrites Authorization provided by a custom RequestHandler

Describe the bug
When using ResourceTokens that may expire, I have a custom RequestHandler that will pull an updated token and write it to the RequestMessage.Headers. The TransportHandler.ProcessMessageAsync does not check for an existing  header before overwriting it with the expired value.
        internal Task<DocumentServiceResponse> ProcessMessageAsync(
            RequestMessage request,
            CancellationToken cancellationToken)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            DocumentServiceRequest serviceRequest = request.ToDocumentServiceRequest();

-            //TODO: extrace auth into a separate handler
-            string authorization = ((IAuthorizationTokenProvider)this.client.DocumentClient).GetUserAuthorizationToken(
-                serviceRequest.ResourceAddress,
-                PathsHelper.GetResourcePath(request.ResourceType),
-                request.Method.ToString(),
-                serviceRequest.Headers,
-                AuthorizationTokenType.PrimaryMasterKey,
-                payload: out _);
-
-            serviceRequest.Headers[HttpConstants.HttpHeaders.Authorization] = authorization;
+            if (string.IsNullOrEmpty(serviceRequest.Headers[HttpConstants.HttpHeaders.Authorization]))
+            {
+                //TODO: extrace auth into a separate handler
+                string authorization = ((IAuthorizationTokenProvider)this.client.DocumentClient).GetUserAuthorizationToken(
+                    serviceRequest.ResourceAddress,
+                    PathsHelper.GetResourcePath(request.ResourceType),
+                    request.Method.ToString(),
+                    serviceRequest.Headers,
+                    AuthorizationTokenType.PrimaryMasterKey,
+                    payload: out _);
+
+                serviceRequest.Headers[HttpConstants.HttpHeaders.Authorization] = authorization;
+            }

            IStoreModel storeProxy = this.client.DocumentClient.GetStoreProxy(serviceRequest);
            if (request.OperationType == OperationType.Upsert)
            {
                return this.ProcessUpsertAsync(storeProxy, serviceRequest, cancellationToken);
            }
            else
            {
                return storeProxy.ProcessMessageAsync(serviceRequest, cancellationToken);
            }
        }

Environment summary
SDK Version: Source
OS Version (e.g. Windows, Linux, MacOSX)
Additional context
Add any other context about the problem here (for example, complete stack traces or logs).

If the authorization token supplied to the client is expired you need to create a new client. There currently isn't any way to rotate keys once a client is created. The authorization token is used in a few other places for updating caches. By not updating the token everywhere it will cause the SDK to eventually fail in unexpected ways.

That make the use of a token broken particularly inefficient...

I agree that it's not very efficient. There should be an API to rotate the key on the client.
@kirankumarkolli any suggetions?

Its a different scenario then multi-tenant scenario discussed in #651. Later might be a possible work-around for this scenario.
But ideally IMO what this scenario requires is a first class support to "Swap credentials" at client level. Any changes deep in the stack are non-trivial to test and validate across.
@ealsur V4 should definitely have this capability. Thoughts on in-corporating it in V3?

@ausfeldt will implementing a swap credentials be easier once the work is done for the auth fix you are working on?
I don't see any reason to not support it in v3. It's not a breaking change.

I think it should be both v3 and v4.


Paths are not relative after build.

Describe the feature
We are using unstorage with the filesystem driver. In our config we specify
storage: {
  '.data:cache': {
    driver: 'fs',
    base: './.data/cache',
  }
}

After our project is built the base path is absolute and points to the to the folder system that the project was built on. Instead of being relative to the nitro instance as one would expect. The folder paths are completely different on our production server and gitlab runner. One possible solution to this would be to use environment variables in our config to specify the absolute path but this feels a bit off. Thoughts? Solutions?
We are building in one environment and transferring the files so a relative path would make a lot more sense for us.
Additional information

[ ] Would you be willing to help implement this feature?

Thanks for but report i will check it. BTW data is mounted by default and I expect it to be relative have you tried it?


Possibility to change the font of a label

you should call taint() as changing font could change the label's dimensions.


Real time on webcam?

Is the model capable of running real time on a webcam?

Yes, we have even tested it on Nvidia AGX Xavier and it is able to run above 30 FPS.

Great! Is that code available for use?

Hello, can you publicly use this model for real-time testing code?


[Doc] Color customization support

Features added in #196 not documented in

[x] Readme
[x] man pages

Closing since it's fixed in #198


fix #31 on Windows

the packaging problem exists on windows too.
and notice I simplified package.json scripts, now windows build call npm run build instead of npm run build-win32.
and I found that there is some stdio problems under windows. I can't fix that.

closing this since long time inactive


Update Kube README with an Enhancements/TODO section

Update travis tag to point to correct location
Remove the (work in progress) tag

@DanLavine I assume we can close this given the kube work is moved in its own repo ?

Late reply, was away last week. Can totally close this issue.


Organise cProfile output as a sortable, more organised table.

It's currently just text dumped into a code block. Would be nice if this could be organised as a HTML table and possibly change the sorting etc (i.e. only sorted by cumulative atm)

I think the changes in https://github.com/jazzband/silk/pull/200 should fix this, can it be closed now?

@danielbradburn Yes It can.


task 1 html with img

@bodiiiick hey-hey) please check my comments and specify the font properties of the text


AttributeError: 'TopTurn' object has no attribute 'estimate_dcr'

Describe the bug
Example code is not working.
To Reproduce
I'm runing the following code:
from planar_magnetics.inductors import Cffc
from planar_magnetics.utils import weight_to_thickness

# create an inductor using the CFFC technique
inductor = Cffc(inner_radius=4.9, outer_radius=9, number_turns=5, voltage=500)

# estimate the dc resistance of this inductor
# using the CFFC structure, a 5 turn inductor requires 6 layers
# assume we are using 1.5 oz on top/botton and 2oz on interior layers
thicknesses = [
    weight_to_thickness(1.5),
    weight_to_thickness(2),
    weight_to_thickness(2),
    weight_to_thickness(2),
    weight_to_thickness(2),
    weight_to_thickness(1.5),
]

dcr = inductor.estimate_dcr(thicknesses)
print(f"Estimated DCR of this inductor is {dcr*1e3} mOhms")

Result:
python .\cffc1.py
Traceback (most recent call last):
  File "C:\Python\planar\cffc1.py", line 19, in <module>
    dcr = inductor.estimate_dcr(thicknesses)
  File "C:\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\planar_magnetics\inductors\cffc.py", line 199, in estimate_dcr
    return self.winding.estimate_dcr(thicknesses, rho)
  File "C:\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\planar_magnetics\inductors\cffc.py", line 119, in estimate_dcr
    resistance += turn.estimate_dcr(thickness, rho)
AttributeError: 'TopTurn' object has no attribute 'estimate_dcr'

Desktop (please complete the following information):

OS: Windows 11
Python Version 3.10
Package planar-magnetics version 0.1.6

Fixed with PR #17


Fix/undefined href bug

Reference Issues/PRs
What does this implement/fix? Explain your changes.
Any other comments?
We retrieve the services data from two separate lists in services.data file. The WhatsApp bug occurred because its title was not identical in services_url (which contains template links) and Services (which contains base service information). As a result, the href link was undefined because it referenced a service whose title did not exist in services_url.
To prevent similar issues, I updated all service titles in both lists to the names we want to display on our website.

@F-Shahali Thanks for your efforts, I've checked the dev instance and the bug has been resolved.
But the solution here is to use Enum instead of relying on compatible strings. Since we are relying on the title in both services_url and Services variables, we have unnecessary coupling, and one of the main consequences of coupling is error propagation, which is the case we had here.
It is better to merge these two different (but the same in the meaning) strings into a single cohesive enum.
also, the naming conventions used are not only incompatible with the TS style but also have self-contradiction (for example Services vs services_url (vs what should be really used for constant variable according to the TS standard)). Take a look at: https://ts.dev/style.
The mentioned notes are suggestions for now and at this moment we are considering progress over the in-detail quality check, we will soon have some cycles of code refactoring and also static code analyzer integrations (similar to pymilo).
good to take a look at: https://github.com/andredesousa/typescript-best-practices https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html

Many thanks for your suggestions.
I didn’t feel good about this type of implementation either, and unfortunately didn't come up with the Enum solution.
Ok, I'll move forward and leave these issues for future refactoring.

@F-Shahali Thanks for your efforts, I've checked the dev instance and the bug has been resolved.
But the solution here is to use Enum instead of relying on compatible strings. Since we are relying on the title in both services_url and Services variables, we have unnecessary coupling, and one of the main consequences of coupling is error propagation, which is the case we had here.
It is better to merge these two different (but the same in the meaning) strings into a single cohesive enum.
also, the naming conventions used are not only incompatible with the TS style but also have self-contradiction (for example Services vs services_url (vs what should be really used for constant variable according to the TS standard)). Take a look at: https://ts.dev/style.
The mentioned notes are suggestions for now and at this moment we are considering progress over the in-detail quality check, we will soon have some cycles of code refactoring and also static code analyzer integrations (similar to pymilo).
good to take a look at: https://github.com/andredesousa/typescript-best-practices https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html

Many thanks for your suggestions. I didn’t feel good about this type of implementation either, and unfortunately didn't come up with the Enum solution. Ok, I'll move forward and leave these issues for future refactoring.

No worries, I will explain an Enum based solution.
You go ahead with other tasks.
Cheers.


SHCV-59  Not Done status is creating valid status

Before if valid record wasn't there due to no status=='complete' it wasn't showing error.
Barcode from
https://thecommonsproject.atlassian.net/jira/software/c/projects/SHCV/boards/37?modal=detail&selectedIssue=SHCV-59
should produce 205 error.

tested it out and looks good. One note is that the error code is coming up as 250 not 205.


Process poo#0/boo#0/bsc#0 ticket labels

Include #0 ticket references in the report, so not hiding from
reviewers, while fooling ttm.
See https://github.com/okurz/openqa_review/issues/77 and
poo#35758.
Example output:
**Date:** 2018-05-11 - 16:10
**Build:** 609.1 (reference 609.1)

---

**Arch:** x86_64
**Status: Green**

**Existing Product bugs:**

* [fake](http://gershwin.arch.suse.de/tests/366 "Failed modules: logpackages") -> [boo#0](https://bugzilla.opensuse.org/show_bug.cgi?id=0) (NOTE: boo#0/bsc#0/poo#0 label used, please review. Consider creating progress ticket for the investigation)
---

Nice and easy, now write a test please :)

Tests added


feat: filter by tag value

https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md#can-i-create-a-pull-request-for-uptime-kuma
Tick the checkbox if you understand [x]:

[X] I have read and understand the pull request rules.

Description
This feat allows filtering by tag values. Mostly finished on the backend but needs some cosmetic fixes.
This is an early version of the implementation.
Fixes #3641
Type of change

User interface (UI)
New feature (non-breaking change which adds functionality)

Checklist

[X] My code follows the style guidelines of this project
[X] I ran ESLint and other linters for modified files
[ ] I have performed a self-review of my own code and tested it
[X] I have commented my code, particularly in hard-to-understand areas
(including JSDoc for methods)
[X] My changes generate no new warnings
[ ] My code needed automated testing. I have added them (this is optional task)

Screenshots (if any)

No need to commit package-lock if there are no package changes.

@Saimo Is keeping this PR a draft intentional?
Also note that this PR includes lots of (I think) unintentional changes which make reviewing difficult => please revert those.
From a UI perspective, I don't think the circles look like they fit into our current desin language => please refactor this to look more like a part of our UI to be able to merge this.


Milestone please?

Shall we commit to a release? Maybe launch at the Brussels event? Or Milano?

Ping @guywiz


Cancel running workflows before starting new ones

This PR cancels running workflows on the same push/pull branch.
This saves CPU cycles and prevents test build up when developing rapidly.
Fixes #12

Only "installs from release" test failing, which is expected.
Will cut new release after #11


Every time I hover the date cell, the whole cell is re-rendered.

https://github.com/Hacker0x01/react-datepicker/assets/143997391/29d6e63e-8c15-49de-a100-e10c6cbe2f7b
In my opinion, re-rendering should not occur at the point of hover the date cell.
I think the larger the monthsShown prop is, the more performance issues will arise for the behavior as below. (The more date cells I draw)
The expected action is as follows.
https://github.com/Hacker0x01/react-datepicker/assets/143997391/fe40e259-f5a1-42e0-8db6-f75bc625c2d9
Re-rendering does not occur every time I hover the date cell, but only when the actual date is selected.
React.memo() has not fixed this phenomenon.

I have a same problem with rendering just by mouseover, is there a solution?


Home page, marketing, privacy policy, terms of service pages

I would suggest using one Docusaurus instance for both the docs #72 and the home page. Docusaurus supports statically rendering out react pages and that's we need.


Update alpine Docker tag to v3.18.4

This PR contains the following updates:

Package
Type
Update
Change

alpine
stage
minor
3.8.5 -> 3.18.4

Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.

[ ] If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot.

Renovate Ignore Notification
Because you closed this PR without merging, Renovate will ignore this update (3.18.4). You will get a PR once a newer version is released. To ignore this dependency forever, add it to the ignoreDeps array of your Renovate config.
If you accidentally closed this PR, or if you changed your mind: rename this PR to get a fresh replacement PR.


Improve age/ondisk

RELEASE_NOTES=n/a
Signed-off-by: Dominik Schulz<EMAIL_ADDRESS>

Codecov Report

Merging #1442 into master will decrease coverage by 0.02%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##           master    #1442      +/-   ##
==========================================
- Coverage   64.28%   64.25%   -0.02%
==========================================
  Files         203      203
  Lines       11603    11607       +4
==========================================
  Hits         7458     7458
- Misses       3334     3338       +4
  Partials      811      811

Impacted Files
Coverage Δ

internal/store/leaf/write.go
33.33% <100.00%> (ø)

internal/action/show.go
46.09% <0.00%> (-1.49%)
:arrow_down:

Continue to review full report at Codecov.

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


Hell-Copter rendering issues (black screen behind hud)

I'm trying to get this game to work. Unfortunately it doesn't support NT-based systems and compatibility modes of newer Windows versions haven't helped me. Didn't have any success with Wine on Linux either (fails to start).
I tried with VirtualBox 7.0 and VMWare Workstation 17.5 on Windows 98 SE, each with SoftGPU installed. Host system is Windows 10 with a Geforce 760 GPU.
The menu works as expected, but in game there is a black screen behind the hud, so all 3-dimensional content is not rendering.
DxDiag tests are working for me without issues.
Let me know if you need further information, or if you have any other idea how to get this game working.

In the newest release (v0.6.2024.40) the Hell-Copter should work!

Unfortunately it's not fixed yet. Here's a screenshot from the game. The mouse cursor issue occurs when in the pause menu.

I downloaded the newest iso file and installed it over the older version on a VMWare VM with Win98. The reported GPU driver version is 4.10.2222.0 according to Sys.Info and 4.2024.0.88 (VMWSMINI:DRV) according to device manager. Since this doesn't match the version from your release I assume I'm looking at versions from another component and it's probably not so helpful...
The GPU is reported as VMWare SVGA-II PCI Adapter, but the manufacturer is named as VirtualBox. I assume they share some code there?

4.2024.0.88 is right - most important is last number, that is number of commits - so it match to driver last release (v1.2024.0.88). First number must by 4, because this indicate Windows 9x driver and not Win 3.x driver. There is also internal API version check, so you don't worry about component mismatch, if it occurs it'll be reported.
Also don't pay attention to manufacturer name, project started as VirtualBox driver, so there is “VirtualBox” as manufacturer and I still not changed it to something relevant.
But back to your problem – I think that game is rendering thru Wine not by native driver (render is pure software using Direct Draw) – exe needs by blacklisted by registry key like this:
REGEDIT4

[HKEY_LOCAL_MACHINE\Software\DDSwitcher]
"HCopter.exe"="system"

This key should be already in your registry so check if game exe is named HCopter.exe  (in some games this is different in different versions). If not, add to registry key matching to your exe name. You can also try globally switch all applications to native renderer by set:
HKEY_LOCAL_MACHINE\Software\DDSwitcher\global to system (default is wine)
On this setup is no hardware 3D available but this is much compatible.

I got it to work with that, thanks a lot!
I'm a bit confused though because it was already set to system. I switched it around one or two times before I noticed an effect.


code cleanup: remove all vis types except for 'workspace', and remove unused components

See App.tsx

Will also solve #3


Closes: #1

Updated validations.py python script.
Fixed the behavior of validate_user function in validations.py.
Fixes #<issue_number_goes_here>

It's a good idea to open an issue first for discussion.

[ ] Tests pass
[ ] Appropriate changes to README are included in PR

CLA email and email used on server are two different emails. Everything is okay


Add Datepicker to Filter

Hey,
is there an easy way to get a date picker filter for datetime fields?
I'm having issues to modify the filter inputs, so I added an input as a custom column label but now I cant filter the computed rows. I modified the source-list but the changes are not reflected in the rendered list (so maybe an update function for the table would be fine for a workaround).
Best regards
Christian
Update: I now included daterangepicker and called it on the inputfield using jquery, the rangepicker opens and the input field is filled properly when I select a daterange. But unfortunately the filter function is not called. Is there a way to call the filter function for the field manually?
Update2: Added following jquery to my methods:
$('.applyBtn').on("click", function() {
  setTimeout(function(){
    $('input[placeholder="Filter Datum"]')[0].dispatchEvent(new Event('input', { 'bubbles': true }));
  }, 10);
});

Its ugly, but it works. Would love to see a official datepicker implementation!

@frommie this is strange, because any change in the source list should be reflected in the generated table as the table is watching for row data changes. I'll look into this.

@frommie v1.20.0 allows you to specify filterValue on the columns to change the filter value for a column. You can edit this value on the fly and the table will update to reflect the change. This should work for your usecase.

Is it possible to add date picker to filers place under column label?

Hello,
Nice plugin thank you. I am using vue 2.5 and as evoked by @wwwork , I would like to know how to implement a datepicker to filter results instead of input text.
Thank you for your answers!


More flexible templates

PR relates to both #308  and #351
New Functionality
This PR allows Avalon to work with arbitrary hierarchies in the system. This is currently used in 2 places.
Filling work path when launching an app and in 'workfiles' app and getting the path of published representation during loading.
Implementation
Getting representation path
Instead of hardcoding what keys we allow to be used in the template and also which template has to be used for publishing (as it is currently), store all the information we need directly on the representation. Proposed solution uses three possibilities to get the path which we try in sequence until one is successful.

Get representation['data']['path'] directly. We assume this is pre-filled full path to the file. If the folder exists on the disk, we use this
get representation['data']['template'] and format it with representation['context']. During this process we make sure that root` from the context get's replaced with registered root in avalon to keep it dynamic.
fallback to current way if none of the above was successful.

example of what representation can look like in the db then
id: 5c41dcd19e4ee0671c7e594a
name: "exr"
parent : 5c41dcd19e4ee0671c7e5949
type : "representation"
dependencies : Array
context : Object
    subset: "render_writeDefault"
    family: "write"
    hierarchy: "sequences\sq01"
    version: v003
    project:
        code: "mln"
        name: "super_project"
    task: "compositing"
    asset: "sh010"
    representation: "exr"
    root: "C:\projects\_AVALON"
    padding: #####
data: Object
    path: "C:\projects\_AVALON\milan_testing\sequences\sq01\sh010\publish\render\compositing\render_writeDefault\v003\mln_sh010_compositing_v003_render_writeDefault.#####.exr"
    template : "{root}/{project[name]}/{hierarchy}/{asset}/publish/{family}/{task}/{subset}/{version}/{project[code]}_{asset}_{task}_{version}_{family}_{subset}.{padding}.{representation}

Formatting work path
The issue here was allowing any hierarchy to be filled into the path without putting too many restriction at what keys (sequence, shot, episode etc) can be used. The solution is introducing concept of AVALON_HIERARCHY which get's constructed on the fly from new parents data on the given asset.
asset['data']['parents'] is expected to be a correctly ordered list of all the hierarchical parents of the asset. This list get's parsed and joined with os.path.sep ending up as a simple string that can be used in the template as {hierarchy} key.
We've used this in production for a while now, but it needs to be tested for backwards compatibility of course. As far as we can tell, nothing should break on previous projects, but better safe than sorry.
We found this feature crucial as different studios can have some seriously different preferences on what their folder structure looks like :). The implementation itself of course is up for discussion. The priority of individual ways of getting the path from representation for example. I find storing the absolute path in data useful as it might later allow extra checks to happen.

Just a note, not a direct comment on your code of implementation.
More dynamic paths I think would be warmly welcomed when it doesn't complicate things too much - since it allows for more customization for a specific studio. We just need to ensure that the template we give and allow isn't something that would easily break and introduces issues for simple pipelines or newcomers. (E.g. just storing the full path in a multiple OS pipeline will tend to introduce issues.)

(E.g. just storing the full path in a multiple OS pipeline will tend to introduce issues.)

very true. it's bothering me too. we should probably make the stored full path as that last resort if all else fails.

Hey guys, should we merge this?

Now I believe we can. I've changed the order of resolution based on the comments and it is now.

Get template from representation['data']['template'] and data from
representation['context']. Then format template with the data.
Get template from project['config'] and format it with default data set
Get representation['data']['path'] and use it directly

If any is successful, the following won't be tried. 1 is the new way of getting all needed from representation, 2. is exactly the same as before and 3. is fallback to a full path potentially stored on the representation.
I've also added this into the docstring. We're quite happy with this and have it deployed in multiple places now.

Hi Mkolar,
i having this error
Running action: maya2018
Traceback (most recent call last):
  File "K:\test\avalon-setup\git\launcher\launcher\control.py", line 418, in trigger_action
    popen = action.process(api.Session.copy())
  File "K:\test\avalon-setup\git\core\avalon\pipeline.py", line 405, in process
    environment = self.environ(session)
  File "K:\test\avalon-setup\git\core\avalon\pipeline.py", line 316, in environ
    workdir = _format_work_template(template, session)
  File "K\test\avalon-setup\git\core\avalon\pipeline.py", line 935, in _format_work_template
    "hierarchy": session['AVALON_HIERARCHY'],
KeyError: 'AVALON_HIERARCHY'
avalon.py: Finishing up..

Hi Mkolar,
i having this error
Running action: maya2018
Traceback (most recent call last):
  File "K:\test\avalon-setup\git\launcher\launcher\control.py", line 418, in trigger_action
    popen = action.process(api.Session.copy())
  File "K:\test\avalon-setup\git\core\avalon\pipeline.py", line 405, in process
    environment = self.environ(session)
  File "K:\test\avalon-setup\git\core\avalon\pipeline.py", line 316, in environ
    workdir = _format_work_template(template, session)
  File "K\test\avalon-setup\git\core\avalon\pipeline.py", line 935, in _format_work_template
    "hierarchy": session['AVALON_HIERARCHY'],
KeyError: 'AVALON_HIERARCHY'
avalon.py: Finishing up..

@mkolar should we also use:
"hierarchy": session.get('AVALON_HIERARCHY', ''),

in _format_work_template for case when hierarchy is empty?

@mkolar should we also use:
"hierarchy": session.get('AVALON_HIERARCHY', ''),
in _format_work_template for case when hierarchy is empty?

yes this should be fixed. we didn't catch it before

Mentioning #417 here, as this is one of those features that are important but difficult to test. For a test to pass in each permutation of this functionality, we need:

No project template, no representation template and no representation path, returning None, and what to do with that; this is up to tools currently to visualise to the user.
No project template, no representation template, but a representation path, and how that should work cross-platform.
No project template, but representation template. Pretty straight forward
Finally, a project template, the prior default and current fallback.

In each case, we need both a database entry per pair, but also existing paths on the file-system, as these won't return anything unless the path actually exists; unsure of whether that's actually the responsibility of this function, but am not sure how else to "automatically" cycle through the options (or whether this is actually better suited for handling by tools that can visualise this).

I made a mistake on this one, the paths returned currently are the directories, not filenames! :O
Original
https://github.com/pypeclub/avalon-core/blob/da55d0f4f601e613a03e05ee3db33eaece19ec0f/avalon/pipeline.py#L1214
Refactored
https://github.com/getavalon/core/blob/9b89842047fec06d221f178191004544d5660837/avalon/pipeline.py#L1227-L1229
Fixing this now.


[1.16.x] KOGITO-6574 DMN nativeimage NoSuchMethodException: .init()

1.16.x backport of https://github.com/kiegroup/kogito-runtimes/pull/1895

How to replicate CI configuration locally?

Build Chain tool does "simple" maven build(s), the builds are just Maven commands, but because the repositories relates and depends on each other and any change in API or class method could affect several of those repositories there is a need to use build-chain tool to handle cross repository builds and be sure that we always use latest version of the code for each repository.
build-chain tool is a build tool which can be used on command line locally or in Github Actions workflow(s), in case you need to change multiple repositories and send multiple dependent pull requests related with a change you can easily reproduce the same build by executing it on Github hosted environment or locally in your development environment. See local execution details to get more information about it.

How to retest this PR or trigger a specific build:

Run all builds
Please add comment: Jenkins retest this

Run (or rerun) specific test(s)
Please add comment: Jenkins (re)run [kogito-runtimes|optaplanner|kogito-apps|kogito-examples|optaplanner-quickstarts|optaweb-employee-rostering|optaweb-vehicle-routing] tests

Quarkus LTS checks
Please add comment: Jenkins run LTS

Run (or rerun) LTS specific test(s)
Please add comment: Jenkins (re)run [kogito-runtimes|optaplanner|kogito-apps|kogito-examples|optaplanner-quickstarts|optaweb-employee-rostering|optaweb-vehicle-routing] LTS

Native checks
Please add comment: Jenkins run native

Run (or rerun) native specific test(s)
Please add comment: Jenkins (re)run [kogito-runtimes|optaplanner|kogito-apps|kogito-examples|optaplanner-quickstarts|optaweb-employee-rostering|optaweb-vehicle-routing] native

Full Kogito testing (with cloud images and operator BDD testing)
Please add comment: Jenkins run BDD
This check should be used only if a big change is done as it takes time to run, need resources and one full BDD tests check can be done at a time ...

The (build) kogito-examples check has failed. Please check the logs.

[docker-java-stream-1024916721] ERROR com.github.dockerjava.api.async.ResultCallbackTemplate - Error during callback
com.github.dockerjava.api.exception.NotFoundException: Status 404: {"message":"pull access denied for kogito/outbox/quarkus, repository does not exist or may require 'docker login': denied: requested access to the resource is denied"}
	at org.testcontainers.shaded.com.github.dockerjava.core.DefaultInvocationBuilder.execute(DefaultInvocationBuilder.java:241)
	at org.testcontainers.shaded.com.github.dockerjava.core.DefaultInvocationBuilder.lambda$executeAndStream$1(DefaultInvocationBuilder.java:269)
	at java.base/java.lang.Thread.run(Thread.java:829)

in testSendProcessEvents – org.kie.kogito.examples.OutboxIT
of (build) kogito-examples — Build finished. 333 tests run, 0 skipped, 1 failed.
unrelated.
Also, GHA is green:
Kogito Examples Build / Maven Build (ubuntu-latest, 11, 3.8.1) (pull_request) Successful in 91m
merging.

thx @tarilabs


This notebook showcases on deploying local LLM agents using the Langchain tools on Intel® Core™ Ultra Processors. The aim is to deploy an Travel Agent on the iGPU (integrated GPU) of the AIPC. For this, Llamacpp GPU backend is setup and the agent created using the local LLM model. The agent makes use of langchain toolkits and tools for travel related queries.
Provides a user friendly notebook 📗and a user friendly streamlit app where end users can ask travel related questions which uses Langchain agents and utilizes maximum GPU utilization.

@BBBela, I don't have access to merge the PR. Could you please merge it?


Unable to add fullykiosk instances to homeassistant

I've been using the fullykiosk integration (via HACS) on homeassistant for a few months now to control two tablets. A few days ago both tablets were marked unreachable in homeassistant. I assumed this was a result of my router changing the IP address of the tablets at some point. I couldn't figure out how to change the IP address for existing entities, so I tried to remove them, uninstall/reinstall fullkykiosk and try to add the tablets again. Now the tablets aren't getting added as fullykiosk instances. On the configuration page I enter this:
IP/Host: http://192.168.0.XXX
Port: 2323
Password: xxxx
It spins for a while and ultimately responds with: " Failed to connect, please try again ".
Looking through the logs, I found this:
Traceback (most recent call last):
File "/config/custom_components/fullykiosk/config_flow.py", line 80, in async_step_user
info = await validate_input(self.hass, user_input)
File "/config/custom_components/fullykiosk/config_flow.py", line 50, in validate_input
deviceInfo = await fully.getDeviceInfo()
File "/usr/local/lib/python3.9/site-packages/fullykiosk/init.py", line 29, in getDeviceInfo
result = await self.sendCommand("deviceInfo")
File "/usr/local/lib/python3.9/site-packages/fullykiosk/init.py", line 21, in sendCommand
data = await self._rh.get(
File "/usr/local/lib/python3.9/site-packages/fullykiosk/init.py", line 129, in get
data = await response.json(content_type="text/html")
File "/usr/local/lib/python3.9/site-packages/aiohttp/client_reqrep.py", line 1097, in json
raise ContentTypeError(
aiohttp.client_exceptions.ContentTypeError: 0, message='Attempt to decode JSON with unexpected mimetype: application/json', url=URL('http://192.168.0.XXX:2323/?cmd=deviceInfo&password=xxxx&type=json')
If I put http://192.168.0.XXX:2323/?cmd=deviceInfo&password=xxxx&type=json into a browser, it loads a json page just fine. Not really sure what to do here. I have uninstalled/reinstalled fullykiosk in HA multiple times, rebooted the RPi between installs as well. Not sure what to do next. Any help would be appreciated. Thanks!
PS: If it helps, I'm using Nabu Casa, but all of the configuration is being done locally while I'm on the same network as HA/the tablets.

What version of Fully Kiosk Browser is running on the tablet?

One is running 1.44-play other is running 1.42.5-fire.

Same problem here
Logger: custom_components.fullykiosk.config_flow
Source: custom_components/fullykiosk/config_flow.py:50
Integration: Fully Kiosk Browser (documentation, issues)
First occurred: 11:01:10 (7 occurrences)
Last logged: 18:16:37
Unexpected exception
Traceback (most recent call last):   File "/config/custom_components/fullykiosk/config_flow.py", line 80, in async_step_user     info = await validate_input(self.hass, user_input)   File "/config/custom_components/fullykiosk/config_flow.py", line 50, in validate_input     deviceInfo = await fully.getDeviceInfo()   File "/usr/local/lib/python3.9/site-packages/fullykiosk/__init__.py", line 29, in getDeviceInfo     result = await self.sendCommand("deviceInfo")   File "/usr/local/lib/python3.9/site-packages/fullykiosk/__init__.py", line 21, in sendCommand     data = await self._rh.get(   File "/usr/local/lib/python3.9/site-packages/fullykiosk/__init__.py", line 129, in get     data = await response.json(content_type="text/html")   File "/usr/local/lib/python3.9/site-packages/aiohttp/client_reqrep.py", line 1097, in json     raise ContentTypeError( aiohttp.client_exceptions.ContentTypeError: 0, message='Attempt to decode JSON with unexpected mimetype: application/json', url=URL('http://xxxxxxxx:2323/?cmd=deviceInfo&password=xxxxxxxx&type=json')
I think it is since I updated Fully and the android webview
Fully: 1.44-play
webview: 94.0.4606.61
fully integration via hacs: 0.1.4
homeassistant: 2021-9.5

Deleted all webview updates, no improvement

Yeah I had not updated the webview or fully (or the fullykiosk integration) before it stopped working. I think something changed in homeassistant that is causing the issue. My install of fully can be remote controlled using the web interface, so it's definitely not fully that is broken.

Which version of homeassistant are you using?

core-2021.9.7, but I've had the issue for a few days (weeks?) now. The media player functionality stopped working a while ago and I only just got to debugging it. Can't remember exactly how long ago it was.

`Logger: custom_components.fullykiosk.config_flow
Source: custom_components/fullykiosk/config_flow.py:50
Integration: Fully Kiosk Browser (documentation, issues)
First occurred: 19:54:29 (2 occurrences)
Last logged: 19:58:50
Unexpected exception
Traceback (most recent call last):
File "/config/custom_components/fullykiosk/config_flow.py", line 80, in async_step_user
info = await validate_input(self.hass, user_input)
File "/config/custom_components/fullykiosk/config_flow.py", line 50, in validate_input
deviceInfo = await fully.getDeviceInfo()
File "/usr/local/lib/python3.9/site-packages/fullykiosk/init.py", line 29, in getDeviceInfo
result = await self.sendCommand("deviceInfo")
File "/usr/local/lib/python3.9/site-packages/fullykiosk/init.py", line 21, in sendCommand
data = await self._rh.get(
File "/usr/local/lib/python3.9/site-packages/fullykiosk/init.py", line 129, in get
data = await response.json(content_type="text/html")
File "/usr/local/lib/python3.9/site-packages/aiohttp/client_reqrep.py", line 1097, in json
raise ContentTypeError(
aiohttp.client_exceptions.ContentTypeError: 0, message='Attempt to decode JSON with unexpected mimetype: application/json', url=URL('http://<IP_ADDRESS>:2323/?cmd=deviceInfo&password=qwe070As&type=json')`
HA - core-2021.9.7

I get the same error:
Traceback (most recent call last):
  File "/config/custom_components/fullykiosk/config_flow.py", line 80, in async_step_user
    info = await validate_input(self.hass, user_input)
  File "/config/custom_components/fullykiosk/config_flow.py", line 50, in validate_input
    deviceInfo = await fully.getDeviceInfo()
  File "/usr/local/lib/python3.9/site-packages/fullykiosk/__init__.py", line 29, in getDeviceInfo
    result = await self.sendCommand("deviceInfo")
  File "/usr/local/lib/python3.9/site-packages/fullykiosk/__init__.py", line 21, in sendCommand
    data = await self._rh.get(
  File "/usr/local/lib/python3.9/site-packages/fullykiosk/__init__.py", line 129, in get
    data = await response.json(content_type="text/html")
  File "/usr/local/lib/python3.9/site-packages/aiohttp/client_reqrep.py", line 1097, in json
    raise ContentTypeError(
aiohttp.client_exceptions.ContentTypeError: 0, message='Attempt to decode JSON with unexpected mimetype: application/json', url=URL('http://192.168.17x.xxx:2323/?cmd=deviceInfo&password=xxxxx&type=json')

That mime-type I get with curl as well:
curl -v "http://192.168.175.xxx:2323/?cmd=deviceInfo&password=xxx&type=json"
*   Trying 192.168.175.xxx...
* TCP_NODELAY set
* Connected to 192.168.175.xxx (192.168.175.xxx) port 2323 (#0)
> GET /?cmd=deviceInfo&password=xxx&type=json HTTP/1.1
> Host: 192.168.175.xxx:2323
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: application/json
< Date: Sun, 3 Oct 2021 19:42:18 GMT
< Connection: keep-alive
< Content-Length: 2286
<
{"deviceName":"Galaxy Tab A7","packageName":"de.ozerov.fully","batteryLevel":100,...}* Connection #0 to host 192.168.175.xxx left intact

So it seams that this code is raising the error:
File "/usr/local/lib/python3.9/site-packages/fullykiosk/__init__.py", line 129, in get
    data = await response.json(content_type="text/html")

Definitely this is a problem introduced with Fully Kiosk Browser version 1.44. Downgraded back to version 1.43.8 and all my FKB tablet sensors (RAM, Storage, Screen, App, Wifi statuses, etc etc) in Home Assistant show to be functioning again.

@github-infohost-org Can you output the result of the curl command above with version 1.43.8? Insert the right IP address and your passport, execute it and post the result (but remove at least the password :-)…

How Foai downgrade? I think downgrade via Playstore is not possible?

curl command output with 1.43
`*   Trying xx...

TCP_NODELAY set
Connected to xx(xx.xx) port 2323 (#0)

GET /?cmd=deviceInfo&password=xxx&type=json HTTP/1.1
Host: xx.xx:2323
User-Agent: curl/7.55.1
Accept: /

< HTTP/1.1 200 OK
< Content-Type: text/html
< Date: Mon, 4 Oct 2021 06:19:02 GMT
< Connection: keep-alive
< Content-Length: 1605
<
{"deviceName":"Galaxy Tab A7","packageName":"de.ozerov.fully","batteryLevel":94,"isPlugged":false,"SSID":"","Mac":"xx","ip4":"xx","ip6":"xx","hostname4":"unknown","hostname6":"unknown","wifiSignalLevel":7,"isMobileDataEnabled":false,"screenOrientation":90,"screenBrightness":204,"screenLocked":false,"screenOn":true,"batteryTemperature":29,"plugged":false,"keyguardLocked":false,"locale":"de_DE","serial":"unknown","build":"RP1A.200720.012.T500XXU3BUH3","androidVersion":"11","webviewUA":"Mozilla/5.0 (Linux; Android 11; SM-T500 Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/94.0.4606.61 Safari/537.36","motionDetectorStatus":0,"isDeviceAdmin":true,"isDeviceOwner":false,"internalStorageFreeSpace":14271598592,"internalStorageTotalSpace":23485968384,"ramUsedMemory":2121875456,"ramFreeMemory":712876032,"ramTotalMemory":2834751488,"appUsedMemory":10502616,"appFreeMemory":190823976,"appTotalMemory":201326592,"displayHeightPixels":1200,"displayWidthPixels":2000,"isMenuOpen":false,"topFragmentTag":"","isInDaydream":false,"isRooted":false,"isLicensed":true,"isInScreensaver":false,"kioskLocked":false,"isInForcedSleep":false,"maintenanceMode":false,"kioskMode":false,"startUrl":"http://<IP_ADDRESS>:8123","currentTabIndex":0,"deviceID":"886efb84-9127e89e","appVersionCode":960,"appVersionName":"1.43.6","androidSdk":30,"deviceModel":"SM-T500","deviceManufacturer":"samsung","foregroundApp":"de.ozerov.fully","currentPage":"http://xx:8123/lovelace-yaml/0","lastAppStart":"04.10.21 08:15:59"}* Connection #0 to host xx left intact`

I also have the same problem running home assistant 2021.9.7, integration version 0.1.4 and fullykiosk app 1.44-play.
If you need any log/info please let me know.

@Bascht74, curl command output with 1.43.8:
curl -v "http://xx:2323/?cmd=deviceInfo&password=xx&type=json"

Trying xx...
TCP_NODELAY set
Connected to xx port 2323 (#0)

GET /?cmd=deviceInfo&password=xx&type=json HTTP/1.1
Host: xx:2323
User-Agent: curl/7.55.1
Accept: /

< HTTP/1.1 200 OK
< Content-Type: text/html
< Date: Mon, 4 Oct 2021 10:41:14 GMT
< Connection: keep-alive
< Content-Length: 1640
<
{"deviceName":"M30","packageName":"de.ozerov.fully","batteryLevel":81,"isPlugged":true,"SSID":""xx"","BSSID":"2c:fd:a1:a2:77:dc","Mac":"00:00:86:92:70:39","ip4":"xx","ip6":"xx","hostname4":"unknown","hostname6":"unknown","wifiSignalLevel":9,"isMobileDataEnabled":false,"screenOrientation":90,"screenBrightness":159,"screenLocked":false,"screenOn":true,"batteryTemperature":25,"plugged":true,"keyguardLocked":false,"locale":"en_US","serial":"unknown","build":"V1.02_20191203","androidVersion":"8.0.0","webviewUA":"Mozilla/5.0 (Linux; Android 8.0.0; KX20 Build/O00623; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/94.0.4606.61 Safari/537.36","motionDetectorStatus":0,"isDeviceAdmin":true,"isDeviceOwner":false,"internalStorageFreeSpace":114863652864,"internalStorageTotalSpace":118942498816,"ramUsedMemory":2077769728,"ramFreeMemory":1816203264,"ramTotalMemory":3893972992,"appUsedMemory":5899096,"appFreeMemory":396754088,"appTotalMemory":402653184,"scopedStorage":false,"displayHeightPixels":1600,"displayWidthPixels":2560,"isMenuOpen":false,"topFragmentTag":"","isInDaydream":false,"isRooted":false,"isLicensed":true,"isInScreensaver":true,"kioskLocked":false,"isInForcedSleep":false,"maintenanceMode":false,"kioskMode":false,"startUrl":"http://xx:8123","currentTabIndex":0,"deviceID":"24874a42-8004258c","appVersionCode":90980,"appVersionName":"1.43.8","androidSdk":26,"deviceModel":"KX20","deviceManufacturer":"Teclast","foregroundApp":"de.ozerov.fully","currentPage":"http://xx:8123/lovelace/0","lastAppStart":"10/4/21 4:10:18 AM","sensorInfo":[]}* Connection #0 to host xx left intact

Looks like they changed the Content-Type encoding from text/html to application/json.
Currently the library is looking for text/html Content-Type. I don't recall if it failed to decode in the past if we didn't specify that Content-Type.
File "/usr/local/lib/python3.9/site-packages/fullykiosk/__init__.py", line 129, in get
    data = await response.json(content_type="text/html")

If someone has some time and wants to test, try modifying that line in that file to just data = await response.json() - I expect that will work for FKB 1.44, but I'm curious if it will still work for 1.43 or older.

I am on a hass install on a raspberry pi, but can't seem to find the file either. There's no /usr/local/lib/python3.9 . Does anyone know where I can find the fullykiosk library?

Depends on how you have HA installed and what version of python you're running (venv or no venv/docker/etc)

Just running Hass on a raspberry pi (no docker).
I tried looking up the device properties via browser on 1.44-play vs 1.42.5-fire and I see the differences in the output that fully is returning. Assuming that the error in the issue was caused by the changes in fully v1.44, is there any information I can provide to help debug why I can't add the fire tablet (v1.42.5) either? The symptoms are the same - try to add the device with the information, it spins for a bit and then times out with "Failed to connect, please try again".

@cgarwood:
Mod does not appear to work on 1.43,
From HA docker terminal:
2021-10-04 11:30:22 ERROR (MainThread) [custom_components.fullykiosk.coordinator] Error requesting x.x.x.x deviceInfo data: 0, messa
ge='Attempt to decode JSON with unexpected mimetype: text/html', url=URL('http://x.x.x.x:2323/?cmd=deviceInfo&password=xx&t
ype=json')
/usr/local/lib/python3.9/site-packages/fullykiosk # ls -al
total 32
drwxr-xr-x    3 root     root          4096 Oct  4 11:09 .
drwxr-xr-x    1 root     root          4096 Oct  4 11:21 ..
-rw-r--r--    1 root     root          4086 Oct  4 11:09 init.py
-rw-r--r--    1 root     root          4110 Sep 25 12:37 init.py.bak
drwxr-xr-x    2 root     root          4096 Oct  4 11:21 pycache
-rw-r--r--    1 root     root           347 Sep 25 12:37 exceptions.py
/usr/local/lib/python3.9/site-packages/fullykiosk # cat init.py
import aiohttp
import json
import logging
from .exceptions import FullyKioskError
_LOGGER = logging.getLogger(name)
RESPONSE_STATUS = "status"
RESPONSE_STATUSTEXT = "statustext"
RESPONSE_ERRORSTATUS = "Error"
class FullyKiosk:
def init(self, session, host, port, password):
self._rh = _RequestsHandler(session, host, port)
self._password = password
self._deviceInfo = None
async def sendCommand(self, cmd, **kwargs):
    data = await self._rh.get(
        cmd=cmd, password=self._password, type="json", **kwargs
    )
    if RESPONSE_STATUS in data and data[RESPONSE_STATUS] == RESPONSE_ERRORSTATUS:
        raise FullyKioskError(RESPONSE_ERRORSTATUS, data[RESPONSE_STATUSTEXT])
    return data

async def getDeviceInfo(self):
    result = await self.sendCommand("deviceInfo")
    self._deviceInfo = result
    return self._deviceInfo

@property
def deviceInfo(self):
    return self._deviceInfo

async def startScreensaver(self):
    await self.sendCommand("startScreensaver")

async def stopScreensaver(self):
    await self.sendCommand("stopScreensaver")

async def screenOn(self):
    await self.sendCommand("screenOn")

async def screenOff(self):
    await self.sendCommand("screenOff")

async def setScreenBrightness(self, brightness):
    await self.sendCommand(
        "setStringSetting", key="screenBrightness", value=brightness
    )

async def setAudioVolume(self, volume, stream=None):
    await self.sendCommand("setAudioVolume", level=volume, stream=stream)

async def restartApp(self):
    await self.sendCommand("restartApp")

async def loadStartUrl(self):
    await self.sendCommand("loadStartUrl")

async def loadUrl(self, url):
    await self.sendCommand("loadUrl", url=url)

async def playSound(self, url, stream=None):
    await self.sendCommand("playSound", url=url, stream=stream)

async def stopSound(self):
    await self.sendCommand("stopSound")

async def toForeground(self):
    await self.sendCommand("toForeground")

async def startApplication(self, application):
    await self.sendCommand("startApplication", package=application)

async def setConfigurationString(self, setting, stringValue):
    await self.sendCommand("setStringSetting", key=setting, value=stringValue)

async def setConfigurationBool(self, setting, boolValue):
    await self.sendCommand("setBooleanSetting", key=setting, value=boolValue)

async def enableLockedMode(self):
    await self.sendCommand("enableLockedMode")

async def disableLockedMode(self):
    await self.sendCommand("disableLockedMode")

async def lockKiosk(self):
    await self.sendCommand("lockKiosk")

async def unlockKiosk(self):
    await self.sendCommand("unlockKiosk")

async def rebootDevice(self):
    await self.sendCommand("rebootDevice")

class _RequestsHandler:
"""Internal class to create FullyKiosk requests"""
def __init__(self, session: aiohttp.ClientSession, host, port):
    self.headers = {"Accept": "application/json"}

    self.session = session
    self.host = host
    self.port = port

async def get(self, **kwargs):
    url = f"http://{self.host}:{self.port}"
    params = []

    for key, value in kwargs.items():
        if value is not None:
            params.append((key, str(value)))

    _LOGGER.debug("Sending request to: %s", url)
    _LOGGER.debug("Parameters: %s", params)
    async with self.session.get(
        url, headers=self.headers, params=params
    ) as response:
        if response.status != 200:
            _LOGGER.warning(
                "Invalid response from Fully Kiosk Browser API: %s", response.status
            )
            raise FullyKioskError(response.status, await response.text())

        data = await response.json()
        _LOGGER.debug(json.dumps(data))
        return data

/usr/local/lib/python3.9/site-packages/fullykiosk #
Will try shortly to upgrade FKB on tablet to 1.44 and see if it starts working...

@cgarwood:
Mod works on 1.44!

User-Agent: curl/7.55.1
Accept: /

< HTTP/1.1 200 OK
< Content-Type: application/json
< Date: Mon, 4 Oct 2021 17:24:00 GMT
< Connection: keep-alive
< Content-Length: 1669
<
{"deviceName":"M30","packageName":"de.ozerov.fully","batteryLevel":7,"isPlugged":true,"SSID":""xx"","BSSID":"2c:fd:a1:a2:77:dc","Mac":"00:00:86:92:70:39","ip4":"xx","ip6":"xx","hostname4":"xx","hostname6":"xx%wlan0","wifiSignalLevel":9,"isMobileDataEnabled":false,"screenOrientation":90,"screenBrightness":159,"screenLocked":false,"screenOn":true,"batteryTemperature":25,"plugged":true,"keyguardLocked":false,"locale":"en_US","serial":"unknown","build":"V1.02_20191203","androidVersion":"8.0.0","webviewUA":"Mozilla/5.0 (Linux; Android 8.0.0; KX20 Build/O00623; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/94.0.4606.61 Safari/537.36","motionDetectorStatus":0,"isDeviceAdmin":true,"isDeviceOwner":false,"internalStorageFreeSpace":114867417088,"internalStorageTotalSpace":118942498816,"ramUsedMemory":2078658560,"ramFreeMemory":1815314432,"ramTotalMemory":3893972992,"appUsedMemory":4903000,"appFreeMemory":397750184,"appTotalMemory":402653184,"scopedStorage":false,"displayHeightPixels":1600,"displayWidthPixels":2560,"isMenuOpen":false,"topFragmentTag":"","isInDaydream":false,"isRooted":false,"isLicensed":true,"isInScreensaver":true,"kioskLocked":false,"isInForcedSleep":false,"maintenanceMode":false,"kioskMode":false,"startUrl":"http://xx:8123","currentTabIndex":0,"deviceID":"24874a42-8004258c","appVersionCode":90987,"appVersionName":"1.44","androidSdk":26,"deviceModel":"KX20","deviceManufacturer":"Teclast","foregroundApp":"de.ozerov.fully","currentPage":"http://xx:8123/lovelace/0","lastAppStart":"10/4/21 12:20:13 PM","sensorInfo":[]}* Connection #0 to host xx left intact

@cgarwood Hi,
could you use try / Except to execute await response.json() and if that fails, use await response.json(content_type="text/html")

Fix implemented in the python lib, waiting on pypi to process it and will get an update for the component out

New component released published, should be available in HACS shortly or I think you can force HACS to do a re-scan

@cgarwood Thanks for the quick update!
Just adding this here in case someone else has the same issue that I did. The latest integration still didn't fix my issue. I was seeing errors trying to reconnect to the tablets. I ended up reverting to a backup of HA where I had not yet deleted the fullykiosk integration. In the logs I found the two IPs that HA was trying to talk to, and gave those as permanent IPs for the two tablets. This brought everything back online. Reinstalling all of the latest HA core and supervisor updates has not yet broken anything, so I can only speculate that there is some 'persistent' storage of mac addresses/IP addresses of the fully kiosk tablets that not even an uninstall/reinstall of the fully kiosk integration seems to get rid of. This prevents me from adding 'the same mac address (or some other identifier)' to fullykiosk, even though the integration is empty after a clean install. The main feature request I would make is for there to be a way to change the IP address of the fullykiosk instance after everything has been set up. Everything works now, so I'm happy as a clam. Thanks!


Create generic extractor for geospatial data from *_metadata.json files

Description
All datasets on the gantry come with a file named *_metadata.json. THis includes geospatial information that needs to be

converted to bounding boxes
converted to standard [0,0] at sw corner coordinate system
converted to geographic coordinate system (lat, lon)

See related code / algorithms

some is in computing-pipeline/scripts/hyperspectral/CalculationWorks.py
@caicai89- is also working on this in #109, terraref/reference-data#33

Use geostream API so that it can be plotted within Clowder

@caicai89- is this a duplicate of #101?

Yes, this is a duplicate. I will close as discussion is taking place there.

Right, the issue here is overlap with part of the #101


make options building lazy

[fixes #19] when enabling nested add-ons, we changed the ordering. This broke several add-ons, and will require a larger refactor to sort out.
Ultimately, I believe this fix is more aligned with the future refactoring. We likely need to do addon registry work and config in two passes.

setupRegistries
on-build fetch options

Sorry for the extra pain, we hope to nail the config story soon.

@stefanpenner Thank you! Looks good. Mind squashing?
This should fix #16, #17, #19

Mind squashing?

sorta, the commits are 2 entirely different things

the fix
cleanup as I read

1 sec, verifying this is a mega massive app. Will report back shortly

I see. Thought it was cleaning up the first commit. Fine as-as.

@gdub22 we should be good!


feat: Run task when double clicking tasks

fix #1124
previously: double click task will open the corresponding build file
current: double click task will run this task

Interesting. looks a promising way to mimic double click handler.
But I see in the utils, you cached the date in a shared variable for all tree items, which might cause problem.
E.g. If you quickly click two items in 500ms (interval you set), it's wrongly treated as double click.

Interesting. looks a promising way to mimic double click handler.
But I see in the utils, you cached the date in a shared variable for all tree items, which might cause problem. E.g. If you quickly click two items in 500ms (interval you set), it's wrongly treated as double click.

you're right, in this way we should find a way to record the tree item as well.

a treeItem has a unique id. consider use that?

a treeItem has a unique id. consider use that?

yes, but that's something like internal identifier and if we didn't specify it before, we will get undefined when accessing that id. Why not directly assert equal of two tree items? Actually, they are the same object if we just click an item twice.

it's fine.


Fields have an invisible "never make it undefined" state

🔎 Search Terms
undefined forever
⏯ Playground Link
https://www.typescriptlang.org/play/?#code/C4TwDgpgBAqgdgZwseATCAzAlnCqAqA9gPIBGANlgG5aFwA8+AfFALxQDeUA2gApQ4oAawghCGKPgC6AWgD8ALkl8pUAD5QArnHTZcqANxQAvlABQoSFADKyNJhx5GLdlz4C4w0eMlSl+FXUtHQd9E3NLaHwACwgAdWiAQ2A2GzsQvSd4JBQMxwISCmpaBi5ExSgARhMmJjMgA
💻 Code
type UnsetUndefinedToOblivion<T> = { [P in keyof T]-?: T[P] | undefined; }
type SetUndefined<T> = { [P in keyof T]: T[P] | undefined }
type TheWhat = SetUndefined<UnsetUndefinedToOblivion<{ a?: 1 }>>

🙁 Actual behavior
type TheWhat = {
    a: 1;
}

🙂 Expected behavior
type TheWhat = {
    a: 1 | undefined;
}

Additional information about the issue
Temporary fix:
type UnsetTheUnset<T> = { [P in keyof T & {}]: T[P] }
type TheWhat = SetUndefined<UnsetTheUnset<UnsetUndefinedToOblivion<{ a?: 1 }>>>

Duplicate of #31025

@jcalz This is a different issue. Here it's not only removed, it's impossible to even set it afterwards.

Ah, yeah, I see. It's probably still related to #31025, since removing undefined is happening at the end of the type manipulation, but you're showing a case where "the end" is much much later than makes any sense.
To be painstakingly explicit about this, you can perform your two steps with an intermediate named type and it still happens:
type AOne = UnsetUndefinedToOblivion<{a?: 1}>
//   ^? type AOne = { a: 1 } // okay

type TheWhat = SetUndefined<AOne>
//   ^? type TheWhat = { a: 1 } // 🙃

Playground

removing undefined is happening at the end of the type manipulation

Honestly I would never expect that. Thanks for explaining!

It's probably still related to https://github.com/microsoft/TypeScript/issues/31025

It's definitely related, because if undefined was never removed along with optionality, it wouldn't be removed at incorrect time :)

Note that we want undefined to be removed along with optionality, but we want it removed from the input type's property, not from the output type's property.  That is, the expectation looks like {[K in keyof T]-?: F<T[K]>} should behave like {[K in keyof T]-?: F<Exclude<T[K], undefined>>} and not like {[K in keyof T]-?: Exclude<F<T[K]>, undefined>} (which is #31025). Unfortunately this behavior has existed for so long that I doubt they can really fix it because I imagine lots of real world code actually depends on it.
But what's going on here is that even {[K in keyof T]-?: Exclude<F<T[K]>, undefined>} doesn't capture the extent of the weirdness. It really looks like the output of the mapped type is decorated with a permanent "no undefined" marker that operates through later type manipulations. Maybe they an at least fix this, since it's so weird.

I believe this is just a display issue as this works alright:
type UnsetUndefinedToOblivion<T> = { [P in keyof T]-?: T[P] | undefined };
type SetUndefined<T> = { [P in keyof T]: T[P] | undefined };
type TheWhat = SetUndefined<UnsetUndefinedToOblivion<{ a?: 1 }>>;

const theWhat: TheWhat = {
  a: undefined, // ok
};

It's likely a duplicate of https://github.com/microsoft/TypeScript/issues/59948 and likely is being fixed by https://github.com/microsoft/TypeScript/pull/59957

Okay, okay this has nothing to do with #31025 then. Sorry! I'll hide my comments (including this one, soon) to cut down on noise.