saving or retrieving list is not working properly , can u show any example that covers all features

.Object java.util.List.get(int)' on a null object reference
when reading list
.Object java.util.List.get(int)' on a null object reference
   List<User> users=Paper.book().read("contacts5");
    Log.d("username",users.get(0).getUserdetails().getUsername());

even when i try to write as
List users= Paper.bookOn(Environment.getExternalStorageDirectory().getPath()).write("contacts5",user);
found io.paperdb.book required java.util.list ,, even i tried to create two uses and added them in list and added list int write parameter , but also states the same
when i used Book user=write function it works fine but not with list .

ok its fine , think we need to first initialise when writing the list ,,
but not necessary when reading ,,List users= new ArrayList<>


Added Intelligence notifications feed.

I added the ability to pull the intelligence hunting notification feed.

ya we got it in, I will push to PyPi soon.  Thanks for the contribution 👍

Anytime!  👍


json-analysis-export

OldCantus has a json-analysis-export tool/API that we may want to implement.

looking at the source code, it seems to accept as arguments either a node ID or a source.
tried accessing https://cantus.uwaterloo.ca/json-analysis-export/002622 (with the cantus ID of a chant), https://cantus.uwaterloo.ca/json-analysis-export/250245 (with the ID of a chant), and https://cantus.uwaterloo.ca/json-analysis-export/ (without any suffix), and all turn up blank pages.
tried accessing https://cantus.uwaterloo.ca/json-analysis-export/123591 (with the ID of a source), and it turns up a blank page. Sources, I believe, don't have Cantus IDs

In an email, Debra Lacoste commented that "IT MIGHT HAVE SOMETHING TO DO WITH THIS: http://cantusindex.org/analyse ... THE ANALYSIS TOOL ON CANTUS INDEX IS FOR FEASTS"

It works if you include ?src= before the source ID--that matches the link for "update in the Cantus Analysis Tool"

I don't really know how (or why) it would work for a  single chant ID, but if it did it would probably be as a node rather than a Cantus ID, since the analysis tool compares chants and feasts across sources.

closing this for the time being - we can re-open it if/when someone complains.


ProcBots should post directly into a flowdock channel message to push items into Front

Currently we push things into the Inbox in r/devops. We need to actually use a message in a channel to get things into Front and redirected.
Need to thing of a suitable channel.

I'm starting to feel more and more that it's the procbots that should be
managing front...
--
Alexandros Marinos
Founder & CEO, Resin.io
+1<PHONE_NUMBER>
@alexandrosm
On Tue, Feb 28, 2017 at 12:49 AM, Heds Simons<EMAIL_ADDRESS>wrote:

Currently we push things into the Inbox in r/devops. We need to actually
use a message in a channel to get things into Front and redirected.
Need to thing of a suitable channel.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/resin-io-modules/resin-procbots/issues/55, or mute
the thread
https://github.com/notifications/unsubscribe-auth/ABLUCOw3qcwt_OpFAQ0JF9d0KNSyoO06ks5rg9-FgaJpZM4MOHnL
.


What's the output value in transaction of MultiToken?

query($txid: Hash32Hex!) {
  transactions(where: { hash: { _eq: $txid } }) {
    hash
    inputs {
      sourceTxHash
      sourceTxIndex
    }
    outputs {
      address
      value
      tokens {
        assetId
        assetName
        policyId
        quantity
      }
    }
  }
}

If a tx of MultiToken,what is value of output? is zero ?

Output.value is the ada value of the output. Technically the model moving forward has ada being transacted as tokens, however ada is a special case since it must be included in every UTxO, but we also have backwards compatibility to deal with.


After Moving Worksite to New Incident, Stay on Current Incident

Describe the problem
During two simultaneous incidents, it is common for worksites to be placed on the wrong map. Often you'll go to the map, and move over a dozen or more worksites to the correct incident at a time. However, each time the system will load the target incident, rather than staying on the current incident. This makes you have to manually re-load the original incident to move over the next case.
Describe the solution
After moving a worksite to a new incident, do not load the new incident. Stay on the existing incident.
Additional context and instructions
This is the screen I'm talking about:

Works great. Thank you.


bad underscores in imported data

tl;dr There is a significant amount (but perhaps not huge) amount of existing data that will continue to exhibit the original bad-underscore behavior until someone fixes the markdown. This CSV lists many examples. (The CSV is all instances of _{{ in OCW.) https://docs.google.com/spreadsheets/d/1YR9TjoknAM_lP5zVfI6Wv25ynQ0Q6cij8TqxOoU0tDk/edit?usp=sharing
Details
Setting aside whether or not authors should be specifying italics..., they need to be asterisks not underscores in order for some things to display. To expand on what @gumaerc said above, here are some examples:

Some notes:

3 does not seem realistic, but 4 is, as we've seen

this sort of content can come out of ocw-to-hugo. It may never have interacted with studio

Delightfully: Github-flavored markdowns DOES interpret 4 as italics: ant _bear_{{< sup 2 >}}_ cat --> "ant bear{{< sup 2 >}} cat" because GFM doesn't replace the shortcode with alphanumeric characters.
This is really useful to us: It means that although the published content looks wrong, if you open it in studio and edit+save, it will be fixed.
Caveat: Won't work if the underscore has been escaped, which will be true if the content was edited Prior to Wassaf's PR. But that is only the case for one page, which someone can fix in the admin panel.

Here is an exhaustive list of all pages that have _{{ in their markdown: https://docs.google.com/spreadsheets/d/1YR9TjoknAM_lP5zVfI6Wv25ynQ0Q6cij8TqxOoU0tDk/edit?usp=sharing
Originally posted by @ChristopherChudzicki in https://github.com/mitodl/ocw-hugo-themes/issues/501#issuecomment-1078007759

@pdpinch I didn't actually test this, but I suspect that "open in studio, edit, save" won't work if the italicizing underscores have been escaped. Those two pages have escaped italicizing underscores, so I think we need to remove the escapes in admin panel, then save. Or just change to asterisks in admin panel, too.

The three pages with needs_admin_fix set to TRUE are all in 16.90. I would fix these myself, but we should probably re-import 16.90 first, after https://github.com/mitodl/ocw-to-hugo/issues/493 is deployed.

@pdpinch Are you re-importing all of it?
If there are any courses that are being entirely re-imported, it might be worth changing ocw-to-hugo to use * instead of _ for italicizing. It's a simple Turndown config (emDelimiter).

@pdpinch Are you re-importing all of it?
If so / if there are any courses that are being entirely re-imported, it might be worth changing ocw-to-hugo to use * instead of _ for italicizing. It's a simple Turndown config (emDelimiter).

Already done https://github.com/mitodl/ocw-studio/pull/1147 in this PR

@ChristopherChudzicki do you think we can close this?

@pdpinch I do not think it is resolved, but it is better (520 instances before; now 233).  I added a new sheet with the updated info: https://docs.google.com/spreadsheets/d/1YR9TjoknAM_lP5zVfI6Wv25ynQ0Q6cij8TqxOoU0tDk/edit?usp=sharing
I had forgotten about this issue, but according to my previous comment we should be able to fix these by opening them in studio and saving them without edits (since studio normalizes underscore-italics to asterisk italics).

@pdpinch I've updated the sheet, which also has the query.
Again, the resolution is "replace  _ with * for italics", which can be done by opening the page in Studio, saving, and re-publishing. I retested a few on RC, and the results look good.

Since this is self-healing, I'll ask the OCW team if they want to do it.


[SuperEditor][iOS] Tapping delete consecutively on a ListItemNode won't delete the line

Environment
SuperEditor: main
Flutter: master
Reproduced with the /example

Steps

Place the caret at the end of a ListItemNode
Tap delete on the SoftwareKeyboard consecutively till the bullet is removed (Note how it changed from ListItemNode to ParagraphNode)
Tap delete again

Expected behaviour: The node is removed and the caret is placed on the latest node before the removed node.
Current behaviour: Nothing happens
Note: If you change the selection to another node and come back the bug is no longer present

Closing as is resolved by #974


[Question] Prevent "enter" key input to select password from being sent to window in background.

Is there an easy fix to make sure my key input to select a password doesn't also trigger a login attempt at the webpage that I had active before opening the password manager?

This shouldn't happen, inputs sent to the password selection window will not be forwarded to any other windows. If you can elaborate on how this issue happens, I'll see if I can manage to reproduce it.


Update premake script to allow building on Linux

Also added a .gitignore to skip the binaries and makefiles

I found that the marian-bielcik branch makes the same modification to this premake file.
https://github.com/marian-bielcik/imgui/blob/master/premake5.lua

I've made a PR (cubedtear/imgui#1) to convert spaces into tabs and to add symols and optimalization depending on configuration, the same cherno did in his video when he converted to a static library.
Current status: waiting on @cubedtear to merge into this PR
NOTE: This PR is into the master branch; I'll create another PR to merge into the docking branch, the one we're actualy using in Hazel at this point.


Combo option

Added the medusa Combo option for more defined scanning.
Beside user/password lists, medusa also supports the Combo option (-C).
This pull requests implements also the possiblity to provide the option
Man page from medusa
 -C [FILE]
              File containing combo entries. Combo files are colon separated and in the following format: host:user:password. If any of the three fields are left empty, the respective information should be provided either as a single global value or as a list in a file.

              The following combinations are possible in the combo file: 1.) foo:bar:fud 2.) foo:bar: 3.) foo:: 4.) :bar:fud 5.) :bar: 6.) ::fud 7.) foo::fud

              Medusa also supports using PwDump files as a combo file. The format of these files should be user:id:lm:ntlm:::. We look for ':::' at the end of the first line to determine if the file contains PwDump output.

Sorry for the delay - i rebased the current master and could be merged.
This PR supports the Combo option from medusa, which allows to enter specific user/password combination and even user/password/host combination.
Motivation:

native medusa support / no custom code, only wrapper.
servers needs to be checked for default configuration or custom wordlists.
If both lists are big each new entry (even if its only a new product with default credentials), will create uncessary load for both permutations (new user + all pws; all users + new pw)
To reduce the number of unwanted and almost always failed login requests the combo mode should be supported :)

could you do a pull request on the "testing-1.6.9" branch and i'll make sure to push this through to the 1.6.9 release

Thanks for the rapid response. I changed the branch
Best regards


Error

Hi,
thanks a lot for the add-on, but unfortunately it doesn't work in my case. Please see below the error I get aft rendering:

The compositing node is also muted but even when I unmute it, it doesn't work.

@dapa5900 Thanks for posting the error message. I'll do my best to figure out what is happening here. That error is unfortunately just a snippet of a longer one. Could you send the full log?

On Windows, in Blender, you can go to Window > Toggle Error Console
On Mac, start a Terminal window, then run cd /Applications/Blender.app/Contents/MacOS && ./Blender and you'll see the log in the terminal window once the error happens

AI Render Error:  Something went wrong trying to create this image. Full error: Traceback (most recent call last):
File "/var/lang/lib/python3.9/runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/var/lang/lib/python3.9/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/var/task/stability_sdk/client.py", line 446, in
args.init_image = Image.open(args.init_image)
File "/var/task/PIL/Image.py", line 3147, in open
raise UnidentifiedImageError(
PIL.UnidentifiedImageError: cannot identify image file '/tmp/input-image-1666112094.251164.png'

@Rxrehy Ok, great, that helps a lot. I think this is related to a couple of the other bug reports. Hopefully I can get this fixed asap!

Yup, first I had that temp folder issue so after fixing that, I got this error.

@Rxrehy Ah, ok, that's helpful info, too. I think it's related. I'm pretty sure it's just not getting permission from the operating system to create files. I'm working on it now...

@Rxrehy @dapa5900 Could you try testing this update (attached)? Remove the existing add-on and install this one. Crossing my fingers... I think this should work.
AI-Render-v0-2-7.zip

@benrugg  Yeah, it's working now. Thanks a lot! :-)

@dapa5900 Great, thank you for testing it for me!

Fixed in the latest release. Get it from Blender Market, Gumroad or the releases page
Or update in Blender under 'Preferences' > 'Add-ons' > 'AI Render' > 'Updates'
Fixed in a8d18a059e24442f95104e080c71c6ed2d106ae1 and 2db43b2a93a10a3034db9eb6d7e725dfab4db4f3


FileError {code: 5, message: "ENCODING_ERR"}

Bug Report
Cannot write date and time on the file
Problem
var n = "data_"+new Date().toLocaleDateString()+"_"+new Date().toLocaleTimeString()+".csv" it works perfect but gives error on Ionic when you write a file
What is expected to happen?
To write the file
What does actually happen?
FileError {code: 5, message: "ENCODING_ERR"}
Information
var fileName = "data_"+new Date().toLocaleDateString()+"_"+new Date().toLocaleTimeString()+".csv"

this.file.writeFile(`${this.file.externalRootDirectory}/Download`, fileName, csv, {
  replace: true
}).then((res) => {
  console.log(res)
}).catch((error) => {
  console.log(error)
});

Command or Code

Environment, Platform, Device
Ionic 5, Angular 10
Version information

Checklist

[ X] I searched for existing GitHub issues
[X ] I updated all Cordova tooling to most recent version
[ X] I included all the necessary information above

@manel00 did you find a solution to this?

I had the same issue here,
I try to change <preference name="android-targetSdkVersion" value="30" /> to 29 and is working, but I know in google play store target will be 30 start from 1st Dec
I also tried adding preserveLegacyExternalStorage=true in the config.xml but not working also.
I refer from :
https://stackoverflow.com/questions/63364476/requestlegacyexternalstorage-is-not-working-in-android-11-api-30

any solution?

We can't address ionic/angular issues here.
I'd recommend avoid using special characters in file names or file paths however, which those APIs may return depending on the local phone locale.
If the issue persists in a pure cordova app or is reproducible in a minimal reproduction app feel free to create a new issue accordingly.


Multiple micro-ROS Publishers and multiple micro-ROS subscribers are not working properly with UDP(WIFI) Transport.

Hardware description: ESP32
RTOS: FreeRTOS
Installation type: micro_ros_setup
Version - micro-ROS running on ROS2 Foxy

Hello @pablogs9 ,
I tested the behaviour of UDP (WIFI) transport by creating 1 micro-ROS publisher (producing 1 topic:  /publisher1) on one ESP32 and 20 micro-ROS subscribers on another ESP32 all are subscribing to the same TOPIC (/publisher1) .
The micro-ROS agent has created 20 micro-ROS subscribers but around 15 micro-ROS subscribers are working.
The same code is referred for creating the publisher
https://github.com/micro-ROS/freertos_apps/blob/iron/apps/int32_publisher/app.c
The same code is referred for creating the subscribers
https://github.com/micro-ROS/freertos_apps/blob/iron/apps/int32_subscriber/app.c
Is there any way so that all the subscribers can work?
Kindly give your guidance.
Thank you so much!!

Hi @SiddharthZokarkar ,
You probably want to remove the usleep(100000); on the subscriber side or reduce its sleep time, as the executor will need to dispatch all the received messages.
You can also increase the RMW_UXRCE_MAX_HISTORY parameter, so you can store all the received messages before they are processed. More details here: Link.
Another option is to use best effort communication. Some messages may be dropped, but the latency will improve.

Closing due to inactivity, reopen if needed


Sensecap install

How can we install Sensecap on devices? Could you help?

Sorry, I don't think this question is related to this repo. I suggest you to contact SenseCap manufacturer for this.


Add locks to R-Car PFC driver

To prevent the R-Car PFC driver from functioning incorrectly, it is necessary to add locks. For instance, if a thread happens to call the pfc_rcar_write function and then goes to sleep between two writes, the value in PMMR can be overwritten by another thread:
	sys_write32(~val, PFC_REG_BASE + PFC_RCAR_PMMR);
	sys_write32(val, PFC_REG_BASE + offs);

To address this issue and similar situations within the driver, proper protection should be implemented.
Furthermore, there can be an issue when attempting to modify the PFC state on multi-core systems.

Note: perhaps it would be even better to add locks to the common PFC drivers API, although it may require making numerous changes to other PFC drivers.


Changes in bot AI don't take place immediately

When I change certain things about bot AI, like difficulty or that yb_whose_your_daddy thing, they don't have any effect until first I kick the bots (yb_quota 0) and add them again. I know this isn't much of an issue but if changes take place immediately it will be better.

yb_difficulty takes place only after kick-add action.
yb_whose_your_daddy - applied instantly.
Not a bug.


unicode?

How about a generator that includes "all" unicode, symbols, punctuations, tabs, line-breaks, slashes, the works?

Yes, it is a good idea. I will take it into account for the next versions of Faker.
Thank you


Appstudio update test-component-pac-fthl

Pipelines as Code configuration proposal

Pipelines as Code CI/test-component-pac-fthl-on-pull-request has successfully validated your commit.

StatusDurationName

✅ Succeeded
7 seconds
appstudio-init

✅ Succeeded
17 seconds
clone-repository

✅ Succeeded
7 seconds
appstudio-configure-build

✅ Succeeded
33 seconds
build-container

✅ Succeeded
7 seconds
show-summary

Pipelines as Code CI/test-component-pac-fthl-on-pull-request has successfully validated your commit.

StatusDurationName

✅ Succeeded
8 seconds
appstudio-init

✅ Succeeded
17 seconds
clone-repository

✅ Succeeded
7 seconds
appstudio-configure-build

✅ Succeeded
30 seconds
build-container

✅ Succeeded
7 seconds
show-summary


test: fix COMPOSER_PATH may be false

Description
Supersedes  #8314
COMPOSER_PATH may be false.
PHP Fatal error:  Uncaught TypeError: is_file(): Argument #1 ($filename) must be of type string, bool given in /home/runner/work/CodeIgniter4/CodeIgniter4/system/Autoloader/Autoloader.php:126

https://github.com/codeigniter4/CodeIgniter4/actions/runs/7148219475/job/19469003051
Checklist:

[x] Securely signed commits
[ ] Component(s) with PHPDoc blocks, only if necessary or adds value
[ ] Unit testing, with >80% coverage
[ ] User guide updated
[x] Conforms to style guide

This PR will fix GitHub Action check fails in 4.5.


🌱  Remove the extra ClusterRoleBinding from example 2

Summary
Example scenario 2 had a poorly motivated extra ClusterRoleBinding. I tested without it, and had no problem. I think it is not needed anymore. This PR removes it.
Preview at https://mikespreitzer.github.io/kcp-edge-mc/doc-cleanup-example-2/direct/example-scenarios/#scenario-2-out-of-tree-workload
Related issue(s)
Fixes #2658
Fixes #2659
Fixes #2660

/cc @pdettori
/cc @KPRoche

/approve


How to setup json converter

Hi,
I tried to setup json converter
akka-persistence-jdbc {

  jdbc-connection {
    journal-converter  = "akka.persistence.jdbc.serialization.journal.JsonJournalConverter"
    snapshot-converter = "akka.persistence.jdbc.serialization.journal.JsonJournalConverter"
  }

  slick {
    driver = "slick.driver.PostgresDriver"
    db {
      host = "docker"
      port = "5432"
      name = "name"

      url = "jdbc:postgresql://"${akka-persistence-jdbc.slick.db.host}":"${akka-persistence-jdbc.slick.db.port}"/"${akka-persistence-jdbc.slick.db.name}
      user = "name"
      password = "pass"
      driver = "org.postgresql.Driver"
      keepAliveConnection = on
      numThreads = 1
      queueSize = 1000
    }
  }
}

I also tried to move to root, no changed.
however it's being serialized to bytes still. Where should I put the configuration?
thanks.

You should register the serializer in the path 'akka.actor.serializers' and then bind the class to the serializer by registering the FQCN to the name of the serializer in the path 'akka.actor.serialization-bindings'. Note however that, while the output of the serializer is JSON, the output of the serializer is a byte array and will be stored in the database as a byte-array. Please take a look at the configuration of the demo project that serializes domain objects using Google's Protocol Buffer.

thanks


clang_getCString returns garbage in lwjgl-llvm module

Environment

LWJGL version: 3.2.2
LWJGL build #: 10
Java version: OpenJDK 64-Bit Server VM v11.0.4+11-post-Debian-1bpo91 by Debian
Platform: Linux x86_64
Module: llvm

Description
The static method clang_getCString in ClangIndex in the llvm module returns garbage characters. I think that may because native clang_getCString expects a CXString struct passed as value, but lwjgl passes a Pointer/long address?? I'm not sure about that and I'm new to lwjgl.
I have attached a minimum test case illustrating the problem.
CXStringTest.java.txt
Note that the test case also shows you can properly get the String by getting the address of the first member of the CXString struct:
CXString cxstr = CXString.callocStack(stack);
//...
// VVVV--- This works
String cstr = memUTF8Safe(memGetAddress(cxstr.address()));

Thank you @jolby!
The Clang API is heavily used in the Template Extraction tool in LWJGL, but I never tested it on Linux. On Windows, >64bit structs are passed by pointer, so the bindings worked there correctly by accident.


Add smart meter meta properties

see https://trello.com/c/0H5mzn8o

I force pushed to fix merge conflict

I am not sure about my latest commit (991b440
I indended to make sure that this line is in the code, which I deem the crucial code to ensure that garbage data from Landis+Gyr E360 models does not het interpreted and uploaded.
https://github.com/energietransitie/twomes-p1-reader-firmware/blob/991b440fe0f3a664b56b6074e44515eaa91cc6da/src/P1Config.c#L175

I am not sure about my latest commit (991b440
I indended to make sure that this line is in the code, which I deem the crucial code to ensure that garbage data from Landis+Gyr E360 models does not het interpreted and uploaded.
https://github.com/energietransitie/twomes-p1-reader-firmware/blob/991b440fe0f3a664b56b6074e44515eaa91cc6da/src/P1Config.c#L175

This does indeed seem like it would fix the fact that data is uploaded even when reading from the p1 port failed somehow. So I assume that was in response to the comments I made in PR #29, and we can drop that PR now, because merging this one has the relevant changes. Do you agree @henriterhofte ?


Entry 1-1 removed HumanitarianScopeVocabulary CodeList, which has been used.

In the HumanitarianScopeVocabulary codelist, the entry 1-1 UN OCHA FTS was removed. But it has been used in AidStream with around 4 activities published to the IATI Registry. How can this be tackled?

Sachit, can you also paste the list of activities title with link to their XML file here? thanks.

Yeah true, it was removed here:
https://github.com/IATI/IATI-Codelists-NonEmbedded/commit/5d5eebb8
But this seems like a question for @dalepotter… Shouldn’t this code have been marked as withdrawn rather than removed?

Here’s the discussion about the removal:
https://discuss.iatistandard.org/t/resolved-remove-entry-1-1-from-humanitarian-scope-vocabulary/674
So while removing the code seems to go against the practice described on the standard website, I wonder if it might be better to just encourage Cordaid to update these 4 activities.
It looks like the relevant codes using vocab 2-1 are:

HAFG16 (Afghanistan 2016)
HSSD16 (Republic of South Sudan 2016)
HUKR1615 (Ukraine 2016)

We were just thinking the same thing about it. Thank you @andylolz for the PR and this. :)


Implementation of Trie Data Structure

🚀 Feature
Implement Trie Data structure.
Have you read the Contributing Guidelines on Pull Requests?
Yes
Motivation
Tries can be efficiently used for some problems in contests.
Pitch
(Please explain why this feature should be implemented and how it would be used.)

I would like to do it in C++

I would like to implement trie  in java

I would like to work in Python .

I would like to do this in python

We are logging the scores for the Contributor's Hack 2020. If you have one or more than one PR merged during the program, make sure to fill this form

All the assignees should comment on #1278 for any query related to this issue.


Expose Vega expression parsing in Python library

Thank you for the great library @jonmmease. Have you considered / what do you think about exposing the Vega expression parsing in the Python library so a user can validate, manipulate, or otherwise inspect a Vega expression without having to go through  transformed_data (and getting a fairly generic Python ValueError).
I'm a little, ahem, rusty, but could be persuaded to help if this is something you'd like to support and you have guidance on a preferred implementation approach. Thanks again!

Thanks for the kind words @boydgreenfield. I'm definitely open to exposing more of VegaFusion's functionality through the Python API.
That said, for the use case of inspecting / evaluating Vega expressions, I would lean toward building this into vl-convert rather than VegaFusion.  vl-convert bundles the Deno JavaScript runtime into a Python package for the primary purpose of static image export.  With this setup, we already have the ability to call Vega functions from Python (through Rust), and we could add additional entry points for passing in individual expressions rather than full Vega specifications. The advantage of this approach over using VegaFusion is that it would support the entire Vega expression language, whereas VegaFusion only supports a subset at this point. This assumes that compatibility is more important than performance of course.
Also see https://github.com/vega/altair/issues/3365 for some more discussion.
If you're interested in this approach, I'll transfer this issue to the vl-convert repo. Then the next step would be to design the vl-convert API for working with expressions.  So if you have specific examples of what you'd like to be able to do (or even better API ideas) that would be helpful!

Apologies for the slow reply @jonmmease. Yes happy to discuss this in the context of vl-convert and I'll give some thought to API design and comment once the issue is moved there.
For context, I'm working on a proof-of-concept around "natural language for data viz" (https://minard.ai) and it'd be nice to be able to parse arbitrary Vega-Expressions in addition to evaluating transforms as is supported in vegafusion. In this case, we're experimenting with LLM-generated expressions (e.g., calculations and filters) and want to be able to parse -> validate -> retry with feedback as needed. But, I think the same functionality would be useful for arbitrary user-written Vega as well Expressions (which we may do at some point too).


Enforce superclasses of base rounds to always define required attributes

Is your feature request related to a problem? Please describe.
Some base rounds require a number of base attributes to be defined by the superclasses. For example, none_type on CollectSameUntilThresholdRound.
If the superclass fails to initialize these attributes, the business logic will proceed without a warning. However, if during the execution variable is required to launch an event, it will crash the application when accessing that attribute.
Describe the solution you'd like
In summary, the application should throw a warning or exception when these required attributes are not initialized. This applies to several other base round classes.
Describe alternatives you've considered
Additional context

The solution in #2276 does not align with the intended one for this issue.
The agent crashes after it has started running, and only if the problematic round is entered.
Instead, we wanted to achieve a solution in which the check happens before the FSM cycle starts.


Capfile: cannot load such file -- capistrano/symfony

Trying to use this deployer for the first time,  a bit unsure if I've done something incorrect or if the docs are out of date
neil@neil-ubuntu:~/development/blah$ cap -v
Capistrano Version: 3.4.0 (Rake Version: 10.4.2)

bundle show
 bundle show
Gems included by the bundle:
  * bundler (1.13.7)
  * capistrano (3.4.0)
  * capistrano-composer (0.0.6)
  * capistrano-file-permissions (1.0.0)
  * capistrano-symfony (1.0.0.rc1)
  * i18n (0.7.0)
  * net-scp (1.2.1)
  * net-ssh (3.0.2)
  * rake (10.4.2)
  * sshkit (1.8.1)

cap deploy
(Backtrace restricted to imported tasks)
cap aborted!
Don't know how to build task 'deploy:updated'
/home/neil/development/blah/Capfile:2:in `<top (required)>'
LoadError: cannot load such file -- capistrano/symfony
/home/neil/development/blah/Capfile:2:in `<top (required)>'
(See full trace by running task with --trace)

Any ideas?

Fixed by updating the Capfile to
# Capfile
require 'capistrano/setup'
require 'capistrano/deploy'

require 'capistrano/symfony'

Shouldn't it be documented? Lost plenty of time because of that.


Import api-client 6.3.3

There was an issue with requests to the api from iter methods changing
the http protocol from http to https. The update on the apiclient fixes
it.

Coverage remained the same at 89.07% when pulling f5b2ead1e86e5fc65daa202591da9aad4737fe16 on import-updated-api-client into 3bd23ba9200d639b21f31f708868125b1111ed9c on master.

👍


main in package.js is pointing at a nonexisting file

The folder lib is generated after you clone repository, install dependencies and run: 'npm run build', this will create the folder lib that contains index.js.

Hey, I'm not using this lib anymore, but it should just work with npm install with no further setup as other libs do. Also you should not submit duplicated files to the repo, right now you have the same files in build and lib.

Oh ok, thanks for the tips. I will fix this problem. This is my first package to npm, thanks.


Update dependencies

Coverage remained the same at 89.885% when pulling 3d80051fb1ab367aae3fb7f369e34b6630f99c0d on rel_branch into fe1c8b4a229484629f5be6ec0895d422e6b1fb53 on master.


fix: retrieve publickey resources by labels

Description
This PR fixes a bug in Liqoctl where PublicKey resources were retrieved by name instead of labels.

/test

/merge


docs: Add manifest output information for referencing package output.

Documentation for how the Github action works with manifest output and instructions for accessing package specific outputs.
Fixes #429

@Zoramite thank you for the contribution.


T & C Updation for data being collected

While allowing the wallet to access Google Drive, Google gives a message to users to check what data Hexa is collecting. We need an answer to this to update our T & C.

What data are we collecting?
What happens when someone un-checks the tick above

-Verified this issue on Dev app v1.7.0 (286)


[SPARK-45553][3.5][PS] Correct warning messages

What changes were proposed in this pull request?
This followups for https://github.com/apache/spark/pull/43426.
Why are the changes needed?
To remove incorrect context from the warning message.
Does this PR introduce any user-facing change?
No.
How was this patch tested?
The existing CI should pass
Was this patch authored or co-authored using generative AI tooling?
No.

cc @HyukjinKwon @ueshin

Merged to branch-3.5.


fu2::function_view created from empty fu2::function is not itself empty

@Naios
Instantiating an fu2::function_view from an empty fu2::function does not produce an empty fu2::function_view. I didn't look into it too deeply but my initial impression is that it's due to the constructor for arbitrary callables function(T&& callable) getting called instead of function(function<RightConfig, property_t> const& right) as I would expect, so the erasure_t is constructed to wrap the fu2::function as a whole instead of unpacking it.

Commit Hash
e3695b4b4fa3c672e25c6462d7900f8d2417a417
Steps to Reproduce
// empty_function_view_test.cpp
#include <catch2/catch.hpp>
#include <function2/function2.hpp>

#include <optional>
#include <string>

TEST_CASE("Function2 function -> function_view", "[function2]")
{
    fu2::function<std::optional<size_t>(const std::string&)> f = [](const std::string &str) -> std::optional<size_t> {
        if (str.size() > 0) { return str.size(); }
        else { return std::nullopt; }
    };
    REQUIRE_FALSE(f.empty()); // pass
    fu2::function_view<std::optional<size_t>(const std::string&)> fv = f;
    REQUIRE_FALSE(fv.empty()); // pass

    fu2::function<std::optional<size_t>(const std::string&)> emptyf{};
    REQUIRE(emptyf.empty()); // pass
    fu2::function_view<std::optional<size_t>(const std::string&)> emptyfv = emptyf;
    REQUIRE(emptyfv.empty()); // fail
}

Your Environment

OS: Mac OS Mojave, Gentoo Linux
Compiler and version: appleclang-10.0.1, gcc-8.3

Thanks for your bug report. From my point of view this should be the right behaviour since one couldn't distinguish anymore between whether a function_view was empty constructed or through a function which is itself empty.
function_view is designed to work without knowing anything about the function, hence it works the the same way when being passed a fu2::function or std::function (or similar implementations).
Changing it in a way you suggest would heavily violate that principle.
What do you think about it?

I think it's reasonable to expect that the members of the module (function, unique_function, and function_view) would have smarter interop with each other, that is to say, to be aware of each others' existence as callable object wrappers and to handle this case as I had expected. When I initialize a function with a function (std or fu2), if the first one is empty, the second one is as well. This is reasonable. It works just like any other smart pointer or container. For example, if I had a function (originally implemented with std::function or perhaps as a template) like this:
bool evaluate(expr_args args, function<bool(expr_args &&) const> const &predicate)
{
    if (predicate) {
        return predicate(std::move(args));
    else {
        return false;
    }
}

everything still works like it did before. If I pass in a lambda, it works. If I pass in nullptr, it works. If I pass in a function initialized with a lambda, it works. If I pass in a function initialized with nullptr, it works. If I now decide to replace that with function_view (much like how one would replace std::string const & with std::string_view), now my code breaks because function_view is not empty and this will instead crash. I need to either revert to taking in a function (which is sub-optimal when passing in non-function values), or make sure every call site checks that the thing they're passing in is populated. To work this way makes it more inconsistent. To me this behavior is counter-intuitive. To me it's like converting one shared_ptr equal to nullptr to a shared_ptr of a related type and having it result in a shared_ptr with the address of the original value in it.
I could understand if this were going between two types from different libraries, but they're both designed to work with each other, so I'd expect that they would each be aware that they're wrappers. I might even go as far as to say that it should also work with std::function in the same way.

To add, a similar issue occurs between compatible (but different) instances of function, e.g.
TEST_CASE("empty fu2::function -> fu2::function", "[function2]")
{
    fu2::function<std::optional<size_t>(const std::string&)> emptyf{};
    REQUIRE(emptyf.empty()); // pass
    fu2::function<std::optional<size_t>(std::string)> emptyf2 = emptyf;
    REQUIRE(emptyf2.empty()); // fail
}

This is incongruent with std::function, where the null state is transferred:
TEST_CASE("empty std::function -> std::function", "[function2]")
{
    std::function<std::optional<size_t>(const std::string&)> emptystdf{};
    REQUIRE_FALSE(emptystdf); // pass
    std::function<std::optional<size_t>(std::string)> emptystdf2 = emptystdf;
    REQUIRE_FALSE(emptystdf2); // pass
}

Thank you for giving me a better insight about your issue. I now agree with you and plan to implement the suggested improvements in a way that doesn't use a specialization for fu2::function or std::function but will rely on a convertibility to bool such that similar function like classes are taken into account as well. The rule will be that if the callable object is also convertible to bool (implements operator bool()) and returns false then the function or function_view will be empty as well.
This will bring two additional benefits and breaking changes:

If a null plain function pointer is stored into function or function_view and invoked an exception will be thrown (or abort() is called according to your configuration set).
If a callable which implements operator bool() and returns false is copied into function then no copy will be performed saving an eventual heap allocation.

@axalon900  What do you think about this solution?


Debug builds with Ubuntu 22.04 not working

If I try to build migraphx's Debug build with a docker image from Ubuntu 22.04 I get a hang.  There isn't a problem building the default build.  Biggest difference is the Debug build uses g++ and not clang++.
cd /workspace/build/src/targets/cpu && /usr/bin/c++ -DHAS_HALF_V1 -Dmigraphx_cpu_EXPORTS -I/workspace/src/targets/cpu/include -I/workspace/src/include -I/workspace/build/src/include -isystem /workspace/cget/include -std=c++17 -MD -MT src/targets/cpu/CMakeFiles/migraphx_cpu.dir/lowering.cpp.o -MF CMakeFiles/migraphx_cpu.dir/lowering.cpp.o.d -o CMakeFiles/migraphx_cpu.dir/lowering.cpp.o -c /workspace/src/targets/cpu/lowering.cpp

The compile will eventually fail (hours) later with fatal error: Killed signal terminated program cc1plus
I noticed that if I reduce the memory available it fails much faster
docker run --device='/dev/kfd' --device='/dev/dri' -v=pwd:/workspace -w /workspace --group-add video -it -m6g migraphx
I also noticed that if I use clang++ instead of g++ it compiles fine.
I am now attempting to create a reduced file to share for debugging.

We've moved to hitRTC.  Closing for now


Check whether reverse dependencies allow for cleanup of a version

I'm not sure if this is within scope of pkgdev, but here we go: often, when cleaning up old versions, it's easy to miss a < dep in a reverse dependency, and accidentally cleanup a version which is technically still needed.
Is it possible for pkgdev to check for just tree integrity (possibly just e.g. amd64, as we should assume stabilisations and such are done before trying to cleanup)?
This can already be done with specific incantations of pkgcheck scan.

It sounds like you want a redundant version check from pkgcheck that actually works (checks revdeps). There are already open issues for that, e.g. https://github.com/pkgcore/pkgcheck/issues/11 and https://github.com/pkgcore/pkgcheck/issues/241.
Closing this since pkgdev will get support automatically once a revdeps cache exists and related checks are reworked to use it.

Ah, I didn't think of framing it that way. Brilliant, thanks.


allow base-4.10

Builds successfully with base-4.10 and GHC 8.2.  Let me know if you don't have time/energy to put a new release on Hackage and I can take care of it (you might just have to add me to the uploaders group for the package on Hackage).

I (as HackageTrustee) made a revision (what're revisions) for <IP_ADDRESS> as requested in https://github.com/haskell-infra/hackage-trustees/issues/150
diff --git a/static-canvas.cabal b/static-canvas.cabal
index 0240a07..17a8f79 100644
--- a/static-canvas.cabal
+++ b/static-canvas.cabal
@@ -1,5 +1,9 @@
 name:                static-canvas
 version:             <IP_ADDRESS>
+-- relaxed base and free bounds
+-- https://github.com/haskell-infra/hackage-trustees/issues/150
+-- https://github.com/jeffreyrosenbluth/static-canvas/pull/4
+x-revision:          1
 synopsis:            DSL to generate HTML5 Canvas javascript.
 description:
   A simple DSL for writing HTML5 Canvas in haskell and converting it
@@ -28,9 +32,9 @@ library
   other-modules:       Graphics.Static.Types
                        Graphics.Static.Interpreter
                        Graphics.Static.Javascript
-  build-depends:       base >=4.5 && < 4.10,
+  build-depends:       base >=4.5 && < 4.12,
                        mtl >= 2.1 && < 2.3,
-                       free >= 4.9 && < 4.13,
+                       free >= 4.9 && < 5.1,
                        text >=0.11 && < 1.3,
                        double-conversion >= 2.0 && < 2.1
   hs-source-dirs:      src


chore: re-enable lifi swapper

Description

As per https://x.com/lifiprotocol/status/1813519919373590763, re-enables the LiFi swapper.
Restricts LiFi approvals to be "exact amount" only (all other swappers are unaffected)

Effectively reverts https://github.com/shapeshift/web/pull/7380, but also consolidates the feature flag to just be in base.
Pull Request Type

[ ] :bug: Bug fix (Non-breaking Change: Fixes an issue)
[x] :hammer_and_wrench: Chore (Non-breaking Change: Doc updates, pkg upgrades, typos, etc..)
[ ] :nail_care: New Feature (Breaking/Non-breaking Change)

Issue (if applicable)
N/A
Risk

High Risk PRs Require 2 approvals

Small.

What protocols, transaction types or contract interactions might be affected by this PR?

LiFi swapping.
Testing
LiFi swapper should be enabled again, and work as expected.
Engineering
☝
Operations
☝
Screenshots (if applicable)
LiFi swap requiring approval

Other swaps requiring approval

@twblack88 - do we want this back on immediately? Think this is a product call vs an engineering call.
I know there are some routes that are blocked without lifi but would like to raise the question.

Can we control for unlimited approvals?
0x is doing the permit2 thing so maybe that's the best pattern to pull from

We can default to exact amounts rather than unlimited (currently we give users the option, but default to unlimited), but we currently don't have out of the box permit functionality ready to go and would require a product spec and seperate work from this PR. We would also need to confirm that Lifi supports permits for tokens that have the functionality.

cool! sorry for the delay in response, I'm aligned with turn it back on and have only exact amount approvals. Will work on a permit2 spec.

Ok, more work to do to allow only exact-allowance approvals - I'll put this back in draft until we have a path forward on that.

Re-opened, LiFi swap approvals are only able to be completed for the exact trade amount.

confirmed forced exact allowance and successful trade

@kaladinlight - very nice testing ser


Immutable.fromJS: Detect cycles (RangeError: Maximum call stack size exceeded)

When trying to convert circular data structures using Immutable.fromJS, it currently throws RangeError: Maximum call stack size exceeded. Instead of this, could fromJS follow the semantics of JSON.stringify and throw a more meaningful error, similar to TypeError: Converting circular structure to JSON?
Pardon if this is a duplicate, but I searched the existing issues for this and couldn’t find it.
Please let me know if you need any more details and thanks for building Immutable.js :smile:
Repro: https://jsbin.com/kupavixuhe/edit?js,console

:+1:

Any solution ??


While trying to install/update or remove any node, its gives an error and fails`

What are the steps to reproduce?
Click on to install a new node or remove or update an existing node
What happens?
It fails. The the message in logs is as follows
17 verbose Linux 5.10.17-v7+
18 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "remove" "--no-audit" "--no-update-notifier" "--no-fund" "--save" "node-red-contrib-nbrowser"
19 verbose node v10.24.1
20 verbose npm  v6.14.12
21 error Unexpected token ` in JSON at position 73799 while parsing near '...V/1PA9BvXnCNQ�"
21 error     `   },
21 error   $    "parp...'
22 verbose exit [ 1, true ]

What do you expect to happen?
It should not throw this error and atleast tell me which file is having a parsing issue.
Please tell us about your environment:

[x] Node-RED version: 1.3.5
[x] Node.js version: 10.24.1
[x] npm version: 6.14.12
[x] Platform/OS: Rpi Docker image
[x] Browser: firefox

This looks like a npm problem and is going to either be a problem with a file downloaded from the network or a corrupted package.json in the /data directory.
Can you test by running a shell in the container and trying to us npm to install the package on the command line.
You can get a shell in the container by running something like:
docker exec  -it node-red /bin/bash

Where node-red is the name of the container instance (last entry in the docker ps output.
You can also cat the /data/package.json file to check it's content.
Also worth asking, have you mounted a directory from the pi on /data or are you using a named volume?

I did load the /data using the named volume. It seems package-lock.json was corrupted. I deleted this and now its working fine now. Thanks for the help.
Also it seems weird that my docker volume files are not being updated anymore. It seems a little scary to me now.

Please ignore it was probably docker at fault there. Thanks. I think all is good here.


remove per-broker dns names and append wildcards to cluster dns names

Q
A

Bug fix?
yes

New feature?
no

API breaks?
no

Deprecations?
no

Related tickets
n/a

License
Apache 2.0

What's in this PR?
I didn't see a ticket for it, but @baluchicken brought it up on slack. There was an issue with cluster scaling and the DNS names for the broker certificates not including the new kafka nodes.
This PR gets rid of brokerDNSNames and instead adds a wildcard for each of the clusterDNSName formats. A quick test locally worked along with being able to scale the cluster and have a new pod join cleanly. On an existing cluster, it might trigger a rolling upgrade with new certificates, but we should probably verify that.
Checklist

[X] Implementation tested

Huge THX @tinyzimmer


Download option only shows 720p

I set my download preferences to "original definition"
I tried setting it to 1440p or 1080p but same result
When watching a video that is 1080p or better the best quality I can select to download is 720p

I believe this is because of how youtube works nowadays; (DASH). The biggest resolution you can get a "complete" file in is 720p. Anything above that is in two separate tracks, audio and video.

Yes, @LittleVulpix is right. This is not a issue YTC can easily or plausibly solve.
As this is not a YTC issue and has already been reported/suggested earlier, please close this issue report at your earliest convenience.

Thanks for your comment now I know why:)
didn't find anything in search, sorry

@YePpHa: Would it be possible to add this explanation to the official FAQ?


Nikki handlebars

Let's talk about this commit some more. There are some issues I'd like to discuss.


Should KeyboardKit separate types into namespaces?

I'd appreciate feedback and comments on this topic, since this would be a big change.
We can change this gracefully with deprecations to make the transition easier, but it will still cause the last 7.x versions to be bloated with deprecations, unless we make all deprecations in a 8.0 rc and remove them in the 8.0 release.
My problem is that as the library grows, it becomes increasingly hard to organize information and help users find their way. The documentation is bloated with types and it's hard to get an overview.
I have therefore considered splitting the library into namespaces, which would give each folder a namespace type that will then serve as a prefix to all nested types.
For instance, instead of:

AutocompleteProvider
AutocompleteToolbar
StandardAutocompleteProvider

we would get:

Autocomplete.Provider
Autocomplete.StandardProvider
Autocomplete.Toolbar

Since protocols can't be nested, we would still need to have an AutocompleteProvider, but we could then add the following typealias to make sure that everything is nested within the namespace:
public extension Autocomplete {

    typealias Provider = AutocompleteProvider
}

Adding namespaces would make the documentation a LOT cleaner, and increase discoverability, since you can just inspect the namespace to see all types within in.
However, it is a big change, so I'd love to hear your thoughts on this before I roll up my sleeves and get started.

I'm introducing some new namespaces in 7.9, such as the new KeyboardStyle namespace. Hopefully these smaller namespaces will swallow enough types to make the documentation easier to overview without having to use a namespace for each source code folder.


Disable UglifyJS when building for Firefox

From review:

Given your extension is open source anyway, please consider not minifying the extension. This will improve review time.

Fixed in e527aa6cb20f8d0a74486c8f991d79508392e67b


TPU performance increases (60x) when adding a dummy operation

System information

Have I written custom code (as opposed to using a stock example script provided in TensorFlow): yes
OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Google Colab
TensorFlow version (use command below): 2.5.0
device: TPU

Describe the current behavior
A model with 4 (or more) GRU layers and a Dense layer trains 60x faster if a dummy operation is inserted.
With the dummy operation the training time is around 2 minutes and 30 seconds per epoch:

Without the dummy operation the training time is around 2 hours  and 30 mins per epoch:

Describe the expected behavior
The dummy operation should not have a large influence (and not be needed in the first place)
Standalone code to reproduce the issue
https://colab.research.google.com/drive/1lbDTJp1JMWg5niM2Jtq2n2flWnkfLwpu?usp=sharing
Note the # dummy OP line, if this line is commented out the training loop runs ~60x slower.
Other info / logs Include any logs or source code that would be helpful to
diagnose the problem. If including tracebacks, please include the full
traceback. Large logs and files should be attached.

@bliep Could you please take a look on the link , link1 and let us know if it helps ? Thanks!

@bliep Could you please take a look on the link , link1 and let us know if it helps ? Thanks!

I have (previously) read the TPU guide and the performance guide, the issue is more involved. (so, no, the links do not help, sorry)

@bliep Thank you for the response! Could you please try on Colab using the latest version of TensorFlow 2.6.0 by  the command        !pip install tensorflow==2.6.0 and let us know if the issue still persists ? Thanks!

on 2.6.0 an error is thrown:
2.6.0
INFO:tensorflow:Clearing out eager caches
INFO:tensorflow:Clearing out eager caches
INFO:tensorflow:Initializing the TPU system: grpc://<IP_ADDRESS>:8470
INFO:tensorflow:Initializing the TPU system: grpc://<IP_ADDRESS>:8470
INFO:tensorflow:Finished initializing TPU system.
INFO:tensorflow:Finished initializing TPU system.
INFO:tensorflow:Found TPU system:
INFO:tensorflow:Found TPU system:
INFO:tensorflow:*** Num TPU Cores: 8
INFO:tensorflow:*** Num TPU Cores: 8
INFO:tensorflow:*** Num TPU Workers: 1
INFO:tensorflow:*** Num TPU Workers: 1
INFO:tensorflow:*** Num TPU Cores Per Worker: 8
INFO:tensorflow:*** Num TPU Cores Per Worker: 8
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:localhost/replica:0/task:0/device:CPU:0, CPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:localhost/replica:0/task:0/device:CPU:0, CPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:CPU:0, CPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:CPU:0, CPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:0, TPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:0, TPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:1, TPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:1, TPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:2, TPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:2, TPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:3, TPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:3, TPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:4, TPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:4, TPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:5, TPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:5, TPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:6, TPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:6, TPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:7, TPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:7, TPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU_SYSTEM:0, TPU_SYSTEM, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU_SYSTEM:0, TPU_SYSTEM, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 0, 0)
INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 0, 0)
All devices:  [LogicalDevice(name='/job:worker/replica:0/task:0/device:TPU:0', device_type='TPU'), LogicalDevice(name='/job:worker/replica:0/task:0/device:TPU:1', device_type='TPU'), LogicalDevice(name='/job:worker/replica:0/task:0/device:TPU:2', device_type='TPU'), LogicalDevice(name='/job:worker/replica:0/task:0/device:TPU:3', device_type='TPU'), LogicalDevice(name='/job:worker/replica:0/task:0/device:TPU:4', device_type='TPU'), LogicalDevice(name='/job:worker/replica:0/task:0/device:TPU:5', device_type='TPU'), LogicalDevice(name='/job:worker/replica:0/task:0/device:TPU:6', device_type='TPU'), LogicalDevice(name='/job:worker/replica:0/task:0/device:TPU:7', device_type='TPU')]
---------------------------------------------------------------------------
NotFoundError                             Traceback (most recent call last)
<ipython-input-1-76be564800d5> in <module>()
     39 with strategy.scope():
     40
---> 41   model = create_model()
     42   model.summary()
     43   model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss='mse')

30 frames
<ipython-input-1-76be564800d5> in create_model()
     23 def create_model():
     24   x = tf.keras.Input(shape=(n_seq_len, n_bins))
---> 25   g = tf.keras.layers.GRU(n_nodes, return_sequences=True)(x)
     26   g = tf.keras.layers.GRU(n_nodes, return_sequences=True)(g)
     27   g = tf.keras.layers.GRU(n_nodes, return_sequences=True)(g)

/usr/local/lib/python3.7/dist-packages/keras/layers/recurrent.py in __call__(self, inputs, initial_state, constants, **kwargs)
    657
    658     if initial_state is None and constants is None:
--> 659       return super(RNN, self).__call__(inputs, **kwargs)
    660
    661     # If any of `initial_state` or `constants` are specified and are Keras

/usr/local/lib/python3.7/dist-packages/keras/engine/base_layer.py in __call__(self, *args, **kwargs)
    975     if _in_functional_construction_mode(self, inputs, args, kwargs, input_list):
    976       return self._functional_construction_call(inputs, args, kwargs,
--> 977                                                 input_list)
    978
    979     # Maintains info about the `Layer.call` stack.

/usr/local/lib/python3.7/dist-packages/keras/engine/base_layer.py in _functional_construction_call(self, inputs, args, kwargs, input_list)
   1113       # Check input assumptions set after layer building, e.g. input shape.
   1114       outputs = self._keras_tensor_symbolic_call(
-> 1115           inputs, input_masks, args, kwargs)
   1116
   1117       if outputs is None:

/usr/local/lib/python3.7/dist-packages/keras/engine/base_layer.py in _keras_tensor_symbolic_call(self, inputs, input_masks, args, kwargs)
    846       return tf.nest.map_structure(keras_tensor.KerasTensor, output_signature)
    847     else:
--> 848       return self._infer_output_signature(inputs, args, kwargs, input_masks)
    849
    850   def _infer_output_signature(self, inputs, args, kwargs, input_masks):

/usr/local/lib/python3.7/dist-packages/keras/engine/base_layer.py in _infer_output_signature(self, inputs, args, kwargs, input_masks)
    884           # overridden).
    885           # TODO(kaftan): do we maybe_build here, or have we already done it?
--> 886           self._maybe_build(inputs)
    887           inputs = self._maybe_cast_inputs(inputs)
    888           outputs = call_fn(inputs, *args, **kwargs)

/usr/local/lib/python3.7/dist-packages/keras/engine/base_layer.py in _maybe_build(self, inputs)
   2657         # operations.
   2658         with tf_utils.maybe_init_scope(self):
-> 2659           self.build(input_shapes)  # pylint:disable=not-callable
   2660       # We must set also ensure that the layer is marked as built, and the build
   2661       # shape is stored since user defined build functions may not be calling

/usr/local/lib/python3.7/dist-packages/keras/layers/recurrent.py in build(self, input_shape)
    575     if isinstance(self.cell, Layer) and not self.cell.built:
    576       with backend.name_scope(self.cell.name):
--> 577         self.cell.build(step_input_shape)
    578         self.cell.built = True
    579

/usr/local/lib/python3.7/dist-packages/keras/utils/tf_utils.py in wrapper(instance, input_shape)
    257     if input_shape is not None:
    258       input_shape = convert_shapes(input_shape, to_tuples=True)
--> 259     output_shape = fn(instance, input_shape)
    260     # Return shapes from `fn` as TensorShapes.
    261     if output_shape is not None:

/usr/local/lib/python3.7/dist-packages/keras/layers/recurrent.py in build(self, input_shape)
   1796         regularizer=self.kernel_regularizer,
   1797         constraint=self.kernel_constraint,
-> 1798         caching_device=default_caching_device)
   1799     self.recurrent_kernel = self.add_weight(
   1800         shape=(self.units, self.units * 3),

/usr/local/lib/python3.7/dist-packages/keras/engine/base_layer.py in add_weight(self, name, shape, dtype, initializer, regularizer, trainable, constraint, use_resource, synchronization, aggregation, **kwargs)
    661         synchronization=synchronization,
    662         aggregation=aggregation,
--> 663         caching_device=caching_device)
    664     if regularizer is not None:
    665       # TODO(fchollet): in the future, this should be handled at the

/usr/local/lib/python3.7/dist-packages/tensorflow/python/training/tracking/base.py in _add_variable_with_custom_getter(self, name, shape, dtype, initializer, getter, overwrite, **kwargs_for_getter)
    816         dtype=dtype,
    817         initializer=initializer,
--> 818         **kwargs_for_getter)
    819
    820     # If we set an initializer and the variable processed it, tracking will not

/usr/local/lib/python3.7/dist-packages/keras/engine/base_layer_utils.py in make_variable(name, shape, dtype, initializer, trainable, caching_device, validate_shape, constraint, use_resource, collections, synchronization, aggregation, partitioner)
    127       synchronization=synchronization,
    128       aggregation=aggregation,
--> 129       shape=variable_shape if variable_shape else None)
    130
    131

/usr/local/lib/python3.7/dist-packages/tensorflow/python/ops/variables.py in __call__(cls, *args, **kwargs)
    264   def __call__(cls, *args, **kwargs):
    265     if cls is VariableV1:
--> 266       return cls._variable_v1_call(*args, **kwargs)
    267     elif cls is Variable:
    268       return cls._variable_v2_call(*args, **kwargs)

/usr/local/lib/python3.7/dist-packages/tensorflow/python/ops/variables.py in _variable_v1_call(cls, initial_value, trainable, collections, validate_shape, caching_device, name, variable_def, dtype, expected_shape, import_scope, constraint, use_resource, synchronization, aggregation, shape)
    225         synchronization=synchronization,
    226         aggregation=aggregation,
--> 227         shape=shape)
    228
    229   def _variable_v2_call(cls,

/usr/local/lib/python3.7/dist-packages/tensorflow/python/ops/variables.py in getter(**kwargs)
     65
     66   def getter(**kwargs):
---> 67     return captured_getter(captured_previous, **kwargs)
     68
     69   return getter

/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py in creator_with_resource_vars(next_creator, **kwargs)
   2125         checkpoint_restore_uid = None
   2126
-> 2127       created = self._create_variable(next_creator, **kwargs)
   2128
   2129       if checkpoint_restore_uid is not None:

/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/tpu_strategy.py in _create_variable(self, next_creator, **kwargs)
   1167         self._container_strategy(), _real_mirrored_creator,
   1168         distribute_utils.TPU_VARIABLE_CLASS_MAPPING,
-> 1169         distribute_utils.TPU_VARIABLE_POLICY_MAPPING, **kwargs)
   1170
   1171   def _gather_to_implementation(self, value, destinations, axis, options):

/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_utils.py in create_mirrored_variable(strategy, real_mirrored_creator, class_mapping, policy_mapping, **kwargs)
    306   # here.
    307   with tape.stop_recording():
--> 308     value_list = real_mirrored_creator(**kwargs)
    309     # MirroredVariable is recreated during saved_model loading, and its
    310     # component variables (value_list) will have None initializer. We

/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/tpu_strategy.py in _real_mirrored_creator(**kwargs)
   1146             with maybe_init_scope():
   1147               initial_value = initial_value() if callable(
-> 1148                   initial_value) else initial_value
   1149
   1150           if i > 0:

/usr/local/lib/python3.7/dist-packages/keras/initializers/initializers_v2.py in __call__(self, shape, dtype, **kwargs)
    515     else:
    516       limit = math.sqrt(3.0 * scale)
--> 517       return self._random_generator.random_uniform(shape, -limit, limit, dtype)
    518
    519   def get_config(self):

/usr/local/lib/python3.7/dist-packages/keras/initializers/initializers_v2.py in random_uniform(self, shape, minval, maxval, dtype)
    971       op = tf.random.uniform
    972     return op(
--> 973         shape=shape, minval=minval, maxval=maxval, dtype=dtype, seed=self.seed)
    974
    975   def truncated_normal(self, shape, mean, stddev, dtype):

/usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py in wrapper(*args, **kwargs)
    204     """Call target, and fall back on dispatchers if there is a TypeError."""
    205     try:
--> 206       return target(*args, **kwargs)
    207     except (TypeError, ValueError):
    208       # Note: convert_to_eager_tensor currently raises a ValueError, not a

/usr/local/lib/python3.7/dist-packages/tensorflow/python/ops/random_ops.py in random_uniform(shape, minval, maxval, dtype, seed, name)
    300     maxval_is_one = isinstance(maxval, int) and maxval == 1
    301     if not minval_is_zero or not maxval_is_one or dtype.is_integer:
--> 302       minval = ops.convert_to_tensor(minval, dtype=dtype, name="min")
    303       maxval = ops.convert_to_tensor(maxval, dtype=dtype, name="max")
    304     seed1, seed2 = random_seed.get_seed(seed)

/usr/local/lib/python3.7/dist-packages/tensorflow/python/profiler/trace.py in wrapped(*args, **kwargs)
    161         with Trace(trace_name, **trace_kwargs):
    162           return func(*args, **kwargs)
--> 163       return func(*args, **kwargs)
    164
    165     return wrapped

/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/ops.py in convert_to_tensor(value, dtype, name, as_ref, preferred_dtype, dtype_hint, ctx, accepted_result_types)
   1564
   1565     if ret is None:
-> 1566       ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
   1567
   1568     if ret is NotImplemented:

/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/tensor_conversion_registry.py in _default_conversion_function(***failed resolving arguments***)
     50 def _default_conversion_function(value, dtype, name, as_ref):
     51   del as_ref  # Unused.
---> 52   return constant_op.constant(value, dtype, name=name)
     53
     54

/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/constant_op.py in constant(value, dtype, shape, name)
    270   """
    271   return _constant_impl(value, dtype, shape, name, verify_shape=False,
--> 272                         allow_broadcast=True)
    273
    274

/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/constant_op.py in _constant_impl(value, dtype, shape, name, verify_shape, allow_broadcast)
    281       with trace.Trace("tf.constant"):
    282         return _constant_eager_impl(ctx, value, dtype, shape, verify_shape)
--> 283     return _constant_eager_impl(ctx, value, dtype, shape, verify_shape)
    284
    285   g = ops.get_default_graph()

/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/constant_op.py in _constant_eager_impl(ctx, value, dtype, shape, verify_shape)
    306 def _constant_eager_impl(ctx, value, dtype, shape, verify_shape):
    307   """Creates a constant on the current device."""
--> 308   t = convert_to_eager_tensor(value, ctx, dtype)
    309   if shape is None:
    310     return t

/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/constant_op.py in convert_to_eager_tensor(value, ctx, dtype)
    104       dtype = dtypes.as_dtype(dtype).as_datatype_enum
    105   ctx.ensure_initialized()
--> 106   return ops.EagerTensor(value, ctx.device_name, dtype)
    107
    108

NotFoundError: '_EagerConst' is neither a type of a primitive operation nor a name of a function registered in binary running on n-c9063562-w-0. Make sure the operation or function is registered in the binary running in this process.```

@sushreebarsa Using the default Colab TPU environment with TF 2.5, can you reproduce the issue (60x decrease/increase in training speed) with the provided sample code?

@sanatmpa1  Was able to reproduce the issue (60x decrease/increase in training speed) using the default Colab TPU environment with TF 2.5 ,please find the gist here for reference .I also tried the code on colab using latest TF v2.6.0 and got the error as mentioned in above comment, please find the gist here for your reference .Thank you!

The same issue (60x decrease/increase) of training performance also occurs on the (recently introduced) TPU-VM.
The following code is used to demonstrate the issue, uncomment the line with dummy OP to get a 60x training speed increase.
Create a TPU-VM and connect with SSH
gcloud alpha compute tpus tpu-vm create tpu_vm_test \
  --zone=europe-west4-a \
  --accelerator-type=v2-8 \
  --preemptible \
  --version=v2-alpha

gcloud alpha compute tpus tpu-vm ssh tpu_vm_test \
  --zone europe-west4-a

On the TPU-VM run the following with python3:
import os
import tensorflow as tf

print(f'tensorflow version {tf.__version__}')

n_batch = 1024
n_seq_len = 2048
n_bins = 64
n_nodes = 128

def create_dataset():
    ds = tf.data.Dataset.from_tensor_slices([tf.ones((n_batch, n_seq_len, n_bins))])
    def rand_batch(x):
        return tf.random.uniform((1,))*x, tf.random.uniform((1,))*x
    return ds.map(rand_batch).repeat()

def create_model():
  x = tf.keras.Input(shape=(n_seq_len, n_bins))
  g = tf.keras.layers.GRU(n_nodes, return_sequences=True)(x)
  g = tf.keras.layers.GRU(n_nodes, return_sequences=True)(g)
  g = tf.keras.layers.GRU(n_nodes, return_sequences=True)(g)
  g = tf.keras.layers.GRU(n_nodes, return_sequences=True)(g)
  # g = 1 * g # dummy OP
  g = tf.keras.layers.Dense(n_bins, activation='sigmoid')(g)
  return tf.keras.Model(inputs=[x], outputs=[g])

cluster_resolver = tf.distribute.cluster_resolver.TPUClusterResolver(tpu='local')
tf.tpu.experimental.initialize_tpu_system(cluster_resolver)
strategy = tf.distribute.TPUStrategy(cluster_resolver)
print("All devices: ", tf.config.list_logical_devices('TPU'))

with strategy.scope():

  model = create_model()
  model.summary()
  model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss='mse')
  model.fit(
      create_dataset(),
      steps_per_epoch=512,
      epochs=10,
      verbose=1
  )

(note that the TPU-VM uses TF 2.6.0, however the code does not crash like Colab TPU 2.6.0)

Sorry @jvishnuvardhan , I don't work on TF anymore. Reassigning back to you to re-triage. Sorry!

This issue seems to be fixed in TF 2.7.0 :)


Update post and put routes

Resolves #77
Update the post and put methods in base method and all controllers and clients that inherit it.
Clients updated:

[ ] AuthenticatedClient.cs
[ ] IBaseClient.cs

Controllers updated:

[ ] FormsController.cs
[ ] LookupsController.cs
[ ] PacketsController.cs
[ ] ParticipationsController.cs
[ ] VisitsController.cs

Wondering if we are okay with returning nulls or if we want to specify return messages

updated to preview version for checking with the front end application
Updated clients
BaseClient

Post and put methods return type T

authenticatedClient

Return deserialized response in post and put methods

Updated controllers
Forms controller:

methods not implemented

lookups controller:

methods not implemented

packets controller

post task returns "not implemented"
put returns dto after saving to context

participations controller

post and put return a dto after saving to context

visits controller

post and put return dtos

Version updates (to preview 4.3.0-preview.1)

uds.net.dto
uds.net.api
uds.net.mvc

Updated the returns for methods

nulls return the original DTO
successful methods return the updated DTO

preview version updated to preview.2


TP-Link Tapo C120 401 Unauthorized using Tapo Protocol

I have two C120 units on the same Tapo Cloud account and am having authentication issues using the Tapo Protocol tapo:// on only one of them.
My config:
go2rtc:
  streams:
   c120_A_stream1:
      - "rtsp://{username_A}:{password_A}@{ip_A}/stream1"
      - "ffmpeg:c120_A_stream1#audio=opus"
    c120_A_stream2:
      - "rtsp://{username_A}:{password_A}@{ip_A}/stream2"
      - "ffmpeg:c120_A_stream2#audio=opus"
    c120_A_2way: "tapo://admin:{UPPERCASE-MD5}@{ip_A}"

   c120_B_stream1:
      - "rtsp://{username_B}:{password_B}@{ip_B}/stream1"
      - "ffmpeg:c120_B_stream1#audio=opus"
    c120_B_stream2:
      - "rtsp://{username_B}:{password_B}@{ip_B}/stream2"
      - "ffmpeg:c120_B_stream2#audio=opus"
    c120_B_2way: "tapo://admin:{UPPERCASE-MD5}@{ip_B}"

Using the stream link for c120_B_2way results in a viewer with the following errors, while using the stream link for c120_A_2way works just fine: webrtc/offer: streams: 401 Unauthorized and sometimes mse: streams: 401 Unauthorized
Unsure if related, but I'm seeing the following logs:
2023-12-28 22:12:39.766041191  22:12:39.765 ERR github.com/AlexxIT/go2rtc/internal/mjpeg/init.go:166 > error="streams: 401 Unauthorized"

What's weird is that I was originally having this issue with both c120_A_2way and c120_B_2way and found #781 so I attempted to remove and reconnect c120_B_2way. After,c120_A_2way started working again and c120_B_2way still didn't work.
Also before I reconnected c120_B_2way, I attempted to use tapo://{cloud-password}@{IP_A} and changed by password to not have special characters and this didn't resolve anything.
Lastly, the normal RTSP streams for both A and B work just fine and I've double checked that the passwords between c120_A_2way and c120_B_2way are the same as well as the IPs on c120_B_stream1 and c120_B_2way are the same.

Are you sure you using latest go2rtc version?

Yes, I'm on version 1.8.4

For what it's worth I just restarted Frigate and therefore go2rtc and now both cameras are now showing the 401 Unauthorized error

Have you upgrade firmware before this problem?

I have not. c120_A_stream1 is relatively new, has been deployed with 1.1.7, and working for at least a week prior to this issue.  c120_B_stream1 is brand new, also on 1.1.7, and was working for a day or so before this issue.

Well. You can share access to the camera to me. Or just use RTSP proto. You will get same result if you don't need two way audio.

Well. I have same issue with my TC60 camera. You can use MD5 password version
https://github.com/AlexxIT/go2rtc#source-tapo

Well. I have same issue with my TC60 camera. You need to open stream from mobile app once and all will be fixed.

I am suffering same issue with C210. After trying clear test, md5 and sha256 combinations. Thanks in advance.

Well. I have same issue with my TC60 camera. You need to open stream from mobile app once and all will be fixed.

Do you mean just opening it from the Tapo app? If so, I've done this and the issue still persists

I just purchased C520WS. I have the 401 unauthorized error, when using tapo protocol.
The camera's firmware is 1.2.6. I am running go2rtc 1.5.
I did not use go2rtc 1.8.5, because my two-way audio with Amcrest camera was lagging. So, I am using go2rtc 1.5 for the moment.

You need to open stream from the tapo mobile app once.

Thanks very much for your quick response.
Yes. I saw your earlier comments, and did open the tapo app. But still got
the same error.
I tried to login to the camera via its IP address. But I saw no content.
However, it provided some connection info, including SHA-256 fingerprint.
But it is different from that I created using the app password (I didn't
sign up for cloud service), which I think is the cloud password, using the
echo command you provided in your document.
Regards.
Benjamin Chen
On Thu, Feb 29, 2024, 10:05 AM Alex X @.***> wrote:

You need to open stream from the tapo mobile app once.
—
Reply to this email directly, view it on GitHub
https://github.com/AlexxIT/go2rtc/issues/849#issuecomment-1971580697,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AUEOBEL4YERUVQZHG72GHZ3YV5PWFAVCNFSM6AAAAABBF6M4KOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSNZRGU4DANRZG4
.
You are receiving this because you commented.Message ID:
@.***>

Same issues, none of my tapo cameras work with tapo protocol. They work with RSTP though.

@AlexxIT reach out to me in discord if you want and are affected as well, i can provide more details about what is going on and might be able to help find the solution for both of us. I am not affected yet unfortunately.

Same issue here. My C320WS, C200, C100, C220 all started to show the same 401 unauthorised error, after restarting my frigate & go2rtc instance today.  Note, there was no prompt for a firmware update on these cameras in the tapo app. It has to be something OTA though. If there are any logs i can provide you, to help you track this, will be glad to help.

https://github.com/JurajNyiri/HomeAssistant-Tapo-Control/issues/551#issuecomment-2101438957

Same issue for tapo protocol.
WRN [rtsp] error="streams: 401 Unauthorized" stream=garage_camera

Reseting the camera, re-adding it to tapo app and immediately blocking internet access for it, seems to do the trick for now on the latest firmware (1.3.13) for C200. It has to be something server side that gets provisioned as soon as the camera calls home.

@JurajNyiri thanks, maybe later

ArbiterGR

401 unautorized here too though I can't get rtsp streams to work. Do you still have them running?

ArbiterGR

401 unautorized here too though I can't get rtsp streams to work. Do you still have them running?
Yes, RTSP streams are running fine for all my tapo cameras. It sucks though that i'm missing out on 2way microphone :/ Just Make sure you create a local account/password in tapo app -> camera -> advanced settings -> local account for them to work.

ArbiterGR

401 unautorized here too though I can't get rtsp streams to work. Do you still have them running?

Yes, RTSP streams are running fine for all my tapo cameras. It sucks though that i'm missing out on 2way microphone :/ Just Make sure you create a local account/password in tapo app -> camera -> advanced settings -> local account for them to work.

I have those account set and I used to get rtsp before but now I can't. Was using go2rtc's tapo protocol of course and don't know since when they stopped working. Now that tapo is not going to work for a while need to get back to rtsp. Tried all of these combination:
rtsp://ip/stream1
rtsp://user:pass@ip/stream1
rtsp://user:sha256(pass)@ip:554/stream1
rtsp://user:md5(pass)@ip:554/stream1
also tried adding :554 port.

ArbiterGR

401 unautorized here too though I can't get rtsp streams to work. Do you still have them running?

Yes, RTSP streams are running fine for all my tapo cameras. It sucks though that i'm missing out on 2way microphone :/ Just Make sure you create a local account/password in tapo app -> camera -> advanced settings -> local account for them to work.

I have those account set and I used to get rtsp before but now I can't. Was using go2rtc's tapo protocol of course and don't know since when they stopped working. Now that tapo is not going to work for a while need to get back to rtsp. Tried all of these combination:
rtsp://ip/stream1 rtsp://user:pass@ip/stream1 rtsp://user:sha256(pass)@ip:554/stream1 rtsp://user:md5(pass)@ip:554/stream1
also tried adding :554 port.

What works for me is: rtsp://username:password@camera_ip:554/stream1 . Stream 1 for high res stream, Stream 2 for the lower res. username and password in plaintext, Did you trie deleting the local account from the tapo app and recreate it ?

Tapo RTSP user/pass not related to cloud user/pass. They are totally different.

Adding that this issue is being experience on the tc85 running version 1.2.21. Note that the tapo:// protocol worked with the tc85 while on 1.2.18, and I believe 1.2.20 (by memory, could be wrong about the #)? Affects cleartext, md5, and sha256 alike.

Had the same issue with "user/pass wrong" on my C200, but after upgrading the c200 to 1.0.17 Build 240806 it worked.

i'm having the same 401 unauthorized issue with a C110 with firmware 1.3.14.
a new firmware is available (1.4.3) but i wouldn't mess with updating if not strictly needed

Just got a new C110. Updated to 1.4.3, tried connecting to it via the tapo protocol and was getting 401s. After reading over this thread, and some others, I reset my password on my TP Link account, and I've now got a working stream via tapo://admin:[sha256password]@IP.

Just got a new C110. Updated to 1.4.3, tried connecting to it via the tapo protocol and was getting 401s. After reading over this thread, and some others, I reset my password on my TP Link account, and I've now got a working stream via tapo://admin:[sha256password]@IP.

i tried just that:

update to 1.4.3
reboot camera
changed my tapo account password (only letters and numbers, 32 chars)
reboot
opened camera in tapo app
add this config in go2rtc:

tapo://admin:SHA256@IP

where
SHA256 = 37UU946A3B825CE46716D605E787C7BCFD4C69072C3320D3FC85D843187C3975 (not real!!)
IP = 192.168.x.y
7. restart go2rtc container
8. access the go2rtc link to the cam (stream.html?src=tapo_test) and still 403...

Just got a new C110. Updated to 1.4.3, tried connecting to it via the tapo protocol and was getting 401s. After reading over this thread, and some others, I reset my password on my TP Link account, and I've now got a working stream via tapo://admin:[sha256password]@IP.

i tried just that with my C110:

update to 1.4.3
reboot camera
changed my tapo account password (only letters and numbers, 32 chars)
reboot camera
opened camera in tapo app
add this config in go2rtc (demo, not real data!):

streams:
    tapo_test:
        -<EMAIL_ADDRESS>

restart go2rtc container
access the go2rtc link to the cam (stream.html?src=tapo_test) and still 401...

EDIT: i even disabled 2FA to no avail
@nvitaterna is your setup different?

This is exactly what I did, unfortunately. Was hoping it may be useful, but it seems to be random.

The same problem with TP-LINK Tapo C120 with version 1.2.2. Don't you know how to solve this?

@rici44 downgrade the firmware. my v1.1.15 is working fine.

thanks for the info @latel Where didi you downloaded firmware? On this link, there are only these:
firmware/Tapo_C120v1_en_1.0.3_Build_230713_Rel.77621n_up_boot-signed_1691150849176.bin
firmware/Tapo_C120v1_en_1.0.3_Build_230713_Rel.77621n_up_boot-signed_1691150883724.bin
firmware/Tapo_C120v1_en_1.1.1_Build_230821_Rel.71367n_up_boot-signed_1697190749422.bin
firmware/Tapo_C120v1_en_1.1.1_Build_230821_Rel.71367n_up_boot-signed_1697190849015.bin
firmware/Tapo_C120v1_en_1.1.3_Build_230930_Rel.56236n_up_boot-signed_1697190793364.bin
firmware/Tapo_C120v1_en_1.1.3_Build_230930_Rel.56236n_up_boot-signed_1697192563556.bin
firmware/Tapo_C120v1_en_1.1.3_Build_230930_Rel.56236n_up_boot-signed_1697194362284.bin

I thins this one or prior is fine: Tapo_C120v1_en_1.1.3_Build_230930_Rel.56236n_up_boot-signed_1697190793364.bin,
mine is v1.1.15, it's also ok.

I tried thwsw
firmware/Tapo_C120v1_en_1.1.1_Build_230821_Rel.71367n_up_boot-signed_1697190849015.bin
firmware/Tapo_C120v1_en_1.1.3_Build_230930_Rel.56236n_up_boot-signed_1697190793364.bin
But camera led is blinking green and nothing happens after I insert formatted card with correct bin as factory_up_boot.bin
I waited 5 mins but there is only green flashing.
I rebooted it and there is no downgraded firmware.

All 4 of my C120s are running 1.2.2 firmware and working perfectly with go2rtc including two way audio.
If you are having problems:

Block domains n-device-api.tplinkcloud.com and security.iot.i.tplinknbu.com at DNS/Router level
Reset device to factory setting using paperclip
Set up devce as normal, do not connect to Camera Account
admin and then sha256 uppercase for your tapo account

<EMAIL_ADDRESS>

pip3 install pytapo
from pytapo import Tapo

user = "admin" # user you set in Advanced Settings -> Camera Account
password = "XXXXXXXXX" # password for your tapo account
host = "<IP_ADDRESS>" # ip of the camera, example: <IP_ADDRESS>

tapo = Tapo(host, user, password)

print(tapo.getBasicInfo())

can also use this to debug if you want

Block domains n-device-api.tplinkcloud.com and security.iot.i.tplinknbu.com

@mofman thank you for the info. Blocked and configured with tapo://..
TAPO C120 now works with 2-way audio in Home Assistant.

Block domains n-device-api.tplinkcloud.com and security.iot.i.tplinknbu.com

@mofman thank you for the info. Blocked and configured with tapo://.. TAPO C120 now works with 2-way audio in Home Assistant.

is https required for 2-way audio in homeassistant?

HTTPS required for any modern browser for open access to microphone. This is not related to HA or go2rtc or anything else. This only related to the privacy policies of modern browsers.

@AlexxIT
Is there any way to turn off/on microphone on Home Assistant other than Frigate Card?
Or any command in go2rtc to turn off/on the microphone?

@mofman can you provide your Frigate config for the go2rtc and cameras, and any card info for HA for getting 2-way working?  I've tried all I can think of with no success.

@derekcentrico  / @rici44 please keep this issue on point. it's not about frigate configs or anything else than the 401 unauthorized error some users get.

please keep this issue on point

yeap, ok, got it

@rici44 which firmware did you go with in the end?

@derekcentrico v1.2.2

@derekcentrico no, as @mofman wrote here it's just the latest version available from the app

Big update on this thread that might help https://github.com/JurajNyiri/HomeAssistant-Tapo-Control/issues/551


Stricter input validation in umbra-js, other cleanup/ehancements

Changes:

To assist users who integrate with JavaScript instead of TypeScript, we add stricter input validation to methods in umbra-js.
Bump minimum elliptic version to 6.5.4 since older versions had vulnerabilities
Remove unused class getters to clean up KeyPair.ts
We also expand the list of supported ENS domains

One current issue is that on commit I get the below error. I tried to make a change to the tsconfig.json file, but this didn't seem to work, cc @wildmolasses

Hey Matt! You shouldn't need to specify the typeRoots property in the config. See the docs on what typeRoots does. By default node_modules/@types/** should be included. But by providing a typeRoots entry we're saying use types ONLY from node_modules/@types, which means we can't use types from @umbra/contracts or elsewhere. I'm thinking this is how we blew up. But I'm guessing you made the change because some type seemed to be missing! If this is the case, can you give a little detail on what type issues you ran into before you updated the typeRoots property?

So the main issue I was trying to fix was that first error in the screenshot: Invalid type "any" of template literal expression on line 37 of KeyPair.ts. Without the typeRoots property that error was still present, with it those others got added
The types for lines 36-37 are defined in @types/elliptic. Line 36 doesn't have a type (even though it should) and that carries over to line 37


fix build uncorrect status

Fixes https://github.com/knative/build/issues/599
Proposed Changes

check build status before stop it.

Release Note

@mattmoor  PTAL

Hi @zouyee -- sorry it's taken so long to get to this PR 😅
If this bug is still outstanding and reproducible, please add a test case that faiils without your code change to prevent accidentally regressing in some future refactor. A unit test change would also be nice.

Closing this as stale, please reopen if you think this is still something we should do.


SpikeInterface params ar enot properly propagated

Hi @jamesjun
If I run:
sorter_params = {'fParfor': True, 'fGpu': False, 'freq_max': 3000}
sorting = ss.run_ironclust(rec, **sorter_params)

It seems that the fParfor and fGpu are not propagated to the matplab script. Here is a snippet of the output:
===================================================
IronClust Version: 2
===================================================
Removed 0 lock(s).
Running irc2.m (5.9.8)
Created /Users/abuccino/Documents/Codes/spike_sorting/spikeinterface/spikewidgets/tmp_ironclust/tmp/raw_geom.prm
Read /Users/abuccino/Documents/Codes/spike_sorting/spikeinterface/spikewidgets/tmp_ironclust/ironclust_dataset/raw.mda (1/4), took 0.9s (547.5 MB/s, 500.2 MB)
	get_prinvec_: took 0.1s
	Detecting 1/4: 27253 spikes found (4027.1 spikes/s, 73.9 MB/s, took 6.8 s)
	Detecting 2/4: 27334 spikes found (4690.8 spikes/s, 85.9 MB/s, took 5.8 s)
	Detecting 3/4: 27356 spikes found (4649.2 spikes/s, 85.0 MB/s, took 5.9 s)
	Detecting 4/4: 25472 spikes found (4699.4 spikes/s, 86.0 MB/s, took 5.4 s)
Detection took 24.2s and used NaN GiB (fParfor=0, fGpu=1)
Saving a struct to /Users/abuccino/Documents/Codes/spike_sorting/spikeinterface/spikewidgets/tmp_ironclust/tmp/detect_7e30aa58e1e86da80b67533268fbfdf0/detect_irc.mat: took 0.1s.
Clustering
Calculating drift similarity...
	took 0.0s
sort_page_: calculating Rho...
Page 1/1 C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.CC.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C. took 4.3s
calculating Rho took 4.3s
sort_page_: calculating Delta...
Page 1/1 C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C. took 2.4s
calculating Delta took 2.4s
sort_long_: took 6.7s (fGpu=1, fParfor=0)

Can you double check this? I tried to track it down but I couldn't.
Thanks,
Alessio

Note that other params are correctly set. I checked thatfreq_max=3000 is correctly set in matlab

This issue is related to #54


isCircular() cause performance issues

It seems that isCircular() is very expensive method in terms of CPU.
I tested plainToClass() with array of 10K objects (each item has date, string, and array of number fields).
isCircular() consumes 88% of the CPU time (5.8sec).
In addition,  no need to check for circular references in case of deserializing (deserialize() or deserializeArray()), as circular reference can't happen after JSON.parse().
IMO, the solution for this is to expose a "skipCircularCheck" option in ClassTransformOptions, so the user can decide whether to include circular check or no. I  tested such a solution and the result is extremely good.
plainToClass() of 10K objects With circular check:

plainToClass() of 10K objects Without circular check:

Ping... please review my Pull Request. Thanks!

@pleerock can you please review my pull request? Thanks!

@sheiidan thank you for such detailed exploration of this issue and sorry for my quite delayed answer. Im very busy with other libs and this lib is taking less priority and less of my time.
What you are describing is quite serious. Having a flag seems like its fixing this issue - but only for those who know about this issue. So, probably better fix for this issue would be if we figure out why this is happening in isCircular method. From the code it looks simple:
    private isCircular(object: Object, level: number) {
        return !!this.transformedTypes.find(transformed => transformed.object === object && transformed.level < level);
    }

so the question is: how such a small peace of code with simple find operation can bring such huge performance issues?

@pleerock, the problem is that isCircular() is being called too many times during the operation (in my case it's 9 times for each object), so we left with a simple math:
isCircular() takes ~0.08ms to run.
for 10K objects, isCircular() is being called 90K times.
0.08ms * 90000 = 7.2 seconds
This is my model:
export class Person {
    @Type(() => Date)
    public birthDate: Date;
    public name: string;
    @Type(() => Number)
    public grades: number[];
}

And this is my code that creates 10K objects:
        let p: Person = {
            birthDate: new Date(1999, 2, 12),
            name: "Jon Doe",
            grades: [20, 90, 56, 67, 85]
        };
        this.arr = [];
        for (let i = 0; i < 10000; i++) {
            this.arr.push(_.cloneDeep(p));
        }
```TS

The issue is that the find method will iterate through the entire transformedTypes array each time isCircular is called. isCircular is called every time a record is added to the transformed object, and every object that has been previously transformed is included in transformedTypes (as well as nested objects), so the best case performance would be around (n/2)^2. So, for a collection of 10,000 items, the anonymous method called in the find method will be executed 50,000,000 times.
Long story short, transformedTypes should be changed to a dictionary. The skipCircularCheck option seems reasonable, especially since the most common use case for classTransformer is probably for deserializing data, where it is not necessary. If that option is added, I would suggest not bothering to populate transformedTypes (or transformedTypesDictionary/hashtable/whatever). Regardless, the isCircular performance issue should be tackled as well.

I think best if we change transformedTypes to dictionary as @JarvisJ suggested and instead of skipCircularCheck we do enableCircularCheck which will be false by default to prevent such issue for all users. Or maybe even better we simply return circular check at all if it cause such bad performance issues it becomes bottleneck. What do you think?

@pleerock , I updated the pull request to enableCircularCheck option and now circular check is turned off by default. Regarding, changing transformedTypes to dictionary, I'm not sure it will improve performance dramatically (improve it from worse to bad is still bad...), and in addition, transformTypes is now defined as:
private transformedTypes: { level: number, object: Object }[] = [];

and being used in isCircular:
    private isCircular(object: Object, level: number) {
        return !!this.transformedTypes.find(transformed => transformed.object === object && transformed.level < level);
    }

so how do you suggest change it to dictionary?

You should see a dramatic improvement by converting transformedTypes to a Map or WeakMap. If isCircular was being executed 90k times on a collection of 10k items, then this block of code:
transformed.object === object && transformed.level < level
was being executed at least 450,000,000 times. Changing it to a O(1) operation will reduce that number to 90,000 times. So, an operation that was taking 5.8s, could be reduced to a few milliseconds.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
isCircular would need to be modified to something like:
    private isCircular(object: Object, level: number) {         var transformed = this.transformedTypesMap.get(object);         return transformed.level < level;     }
and the code to load the transformedTypes collection would need to change from:
this.transformedTypes.push({ level: level, object: value });
to
this.transformedTypesMap.set(value, { level: level, object: value })
I must admit to not having a ton of experience with these native ES6 objects, nor am I too familiar with this codebase, so the above code may need to be tweaked.

@JarvisJ you're correct, thanks for the advice. I changed the pull request to use Map and it improves the performance.

@pleerock can ypu please review my PR? thanks

Thank you guys very much for your hard work. Released in 0.1.7