python39Packages.pyautogui: init at 0.9.53

Motivation for this change
Packaging of pyautogui for simpler access to the library on utility scripts.
Things done

Built on platform(s)

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

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[x] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
21.11 Release Notes (or backporting 21.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

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

2 packages failed to build:

python38Packages.mouseinfo
python38Packages.pyautogui

21 packages built:

keepkey_agent (python39Packages.keepkey_agent)
ledger_agent (python39Packages.ledger_agent)
onlykey-agent
python38Packages.keepkey_agent
python38Packages.ledger_agent
python38Packages.libagent
python38Packages.pygetwindow
python38Packages.pymsgbox
python38Packages.pyrect
python38Packages.pyscreeze
python38Packages.pytweening
python38Packages.trezor_agent
python39Packages.libagent
python39Packages.mouseinfo
python39Packages.pyautogui
python39Packages.pygetwindow
python39Packages.pymsgbox
python39Packages.pyrect
python39Packages.pyscreeze
python39Packages.pytweening
trezor_agent (python39Packages.trezor_agent)

BTW, looking at the MouseInfo setup.py, I think you will need to patch it to relax its dependencies:
https://github.com/asweigart/mouseinfo/blob/master/setup.py#L37-L44
I think we can change only too:
'Pillow'

Without the Python version check.

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

23 packages built:

keepkey_agent (python39Packages.keepkey_agent)
ledger_agent (python39Packages.ledger_agent)
onlykey-agent
python38Packages.keepkey_agent
python38Packages.ledger_agent
python38Packages.libagent
python38Packages.mouseinfo
python38Packages.pyautogui
python38Packages.pygetwindow
python38Packages.pymsgbox
python38Packages.pyrect
python38Packages.pyscreeze
python38Packages.pytweening
python38Packages.trezor_agent
python39Packages.libagent
python39Packages.mouseinfo
python39Packages.pyautogui
python39Packages.pygetwindow
python39Packages.pymsgbox
python39Packages.pyrect
python39Packages.pyscreeze
python39Packages.pytweening
trezor_agent (python39Packages.trezor_agent)

Going to merge this, any other improvement can go to other PRs.


Cleanup Legacy Files across Sample(s) Repo

The Samples repo has a number of out-of-date files that need to be cleaned up.
The work item is to:

Cleanup the Legacy CLI Tools references (such as this). These files should be deleted, although replacing them with a link to the old CLI Tools repo, would be reasonable.
"Meta" files, such as this should be deleted (or cleaned up).
Examine why the "media" folder is there.
Examine if the "build" folder can be deleted.
Understand why there are 2 "Migration v3 to v4" folders. Strongly consider deleting them in favor of a section in the main readme.md that just says "For migration, go to this older repo". Folder 1 /Migration/MigrationV3V4. Folder 2 /MigrationV3V4
The ("Experimental Samples List" in the readme.md)[https://github.com/microsoft/BotBuilder-Samples/blob/main/experimental/README.md] does not match reality. The links listed in that section all give 404s. The "Resources" section still points to myget.
The readme.md in the Generators section does not include the Python or Java Generators.

In addition to the above:

Cleanup the 35 open PRs, dating back to 2020.
Close out the old Web Chat Project.
Enable the recommended policies.
Cleanup the 2 Dependabot issues.
Assign / Triage the 68 open unassigned issues.
Update main readme to include JAVA Samples, which are now GA.

Can we add "Remove abandoned experimental samples" to this list?


Development

Version 1.3.2

Fix QueueName select in RoutingProfileQueueConfigSummaryList
Remove routing_profile_to_ignore from connect_diff
Explicit with . in jq -s '.' (instead of just jq -s) in connect_copy

Cancelled due to conflicts


Add test_dataloaders to test method

Fix #1393
Before submitting

[ ] Was this discussed/approved via a Github issue? (no need for typos and docs improvements)
[ ] Did you read the contributor guideline, Pull Request section?
[ ] Did you make sure to update the docs?
[ ] Did you write any new necessary tests?
[ ] If you made a notable change (that affects users), did you update the CHANGELOG?

What does this PR do?
Fixes # (issue).
PR review
Anyone in the community is free to review the PR once the tests have passed.
If we didn't discuss your PR in Github issues there's a high chance it will not be merged.
Did you have fun?
Make sure you had fun coding 🙃

Hello @rohitgr7! Thanks for opening this PR.

In the file pytorch_lightning/trainer/trainer.py:

Line 869:5: E124 closing bracket does not match visual indentation

Do see the Hitchhiker's guide to code style

@rohitgr7 may you check the falling tests?


2021.07

@mestaki, this is how the prep page will look like:

... and this is the new workflow page:

What do you think?

Coverage increased (+0.008%) to 91.099% when pulling 94991b87ed80e64f975759ad023bf0930684bd56 on antgonza:2021.07 into fb396ec257ad705b1e0fc10797fcb54e7ca78bff on qiita-spots:dev.

Thank you; now it looks like this:

and this:

Note that I used most of your suggestions but tried to keep the explanation as general as possible by using the target gene example but still mention that there are multiple workflows.


Add get_probes_config() and get_probes_results()

This is not gonna work: I need to add the testers in .travis.yml but I cannot since the package napalm_base does not contain the tests base (even after merge).
Thus either after merge you need to create a new release of napalm_base :-1:
Either in travis specify to clone napalm_base and install the develop version.

I think we can accept this hack: #7. What do you think?

Can you enable the test in travis? You might have to rebase to include the hack.

JunOS implementation for https://github.com/napalm-automation/napalm-base/pull/9. Can be merged anytime (if not conflicts in .travis.yml)

Check fails due to: https://github.com/napalm-automation/napalm-base/pull/15


Increase project input map tree column sizes to show all icons

Previously the add / remove key icons would be shown overlapped
with the deadzone control, which means you couldn't really add a new
key, because clicking on the add icon would trigger editing the
deadzone control.
Increase the minimum width of the tree columns, to make sure that
all icons fit.
Before screenshot:

After screenshot:

Bugsquad edit: fixes #20898

I am wondering if a cleaner fix should include EDSCALE. As it works fine on my computer, it might need an adaptive value and not a fixed one.

Shouldn't that be done somewhere more low-level, so it applies to all controls?

Shouldn't that be done somewhere more low-level, so it applies to all controls?

No, EDSCALE is an editor-only variable. But I'm not sure this is the solution anyway, it needs some investigation I guess.

Thanks for the contribution, but it indeed needs to use EDSCALE to work regardless of the scaling ratio. Superseded by 8f33542ac.


Export buildComponent

Hey,
Thought it would be useful to export the buildComponent function for creating your own TW components; have been using it myself.
Thank you for the library, it's super useful! :)

Sounds good, thanks for the PR! :)


Is it possible to decode the key?

Ok I have a struct that I decode the object into. The object has a firestore generated ID. How can I get that generated ID to store it in my struct?
Thanks

Hi @jimijon a similar issue was discussed in this link, I hope to help you.

After read this link and hours investigation, I think you should set auto generated ID manually.
struct Model: Codable {
    enum CodingKeys: String, CodingKey {
        case name
    }
    var id: String? // for auto generated ID
    let name: String

    init(from: decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        name = try container.decode(String.self, forKey: .name)
    }

    func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(name, forKey: .name)
}

Decode:
var model = FirebaseDecoder().decode(Model.self, from: snapshot.value)
model.id = snapshot.key // set auto generated ID manually

I prefer to define
`protocol FirestoreDecodable: Decodable {
var documentID: String { get }
}
struct MyObject: FirestoreDecodable {
let documentID: String    // for auto generated ID
let name: String
}
`
So on decoding side it looks like:
     let decoder = FirestoreDecoder()         var data = document.data() ?? [:]         data["documentID"] = document.documentID         let object = try decoder.decode(Object.self, from: data)
where Object is FirestoreDecodable
Same can be done for Firebase


feat(commerce): use sub-controllers in recs

This adds the pagination and interactive results controllers to the recs controller.
See: https://github.com/coveo/ui-kit/pull/3842
CAPI-719

Superseded by https://github.com/coveo/ui-kit/pull/3854


Update custom-draw.html

应该改成由吧？如果我语文过关的话。

Checklist

[ ] npm test passes
[ ] tests and/or benchmarks are included
[ ] commit message follows commit guidelines

Description of change

thx for contribution


adding benchmarking

adding benchmarks for comparison
Verifying complexity
attempting to beat baselines for Hom and X

Strong scaling and weak scaling experiments. Exp speedup


Frontend reports “Incorrect email address and/or password” over and over when credentials are correct

I’ve occasionally gotten stuck in a state where frontend reports “Incorrect email address and/or password” even though I know my credentials are correct.
This happens to me most on mobile (Chrome in iOS) but it has happened from my laptop too.
At first I thought it might be related to my password manager but it happened to me as I was trying to type a password from memory.
I have not figured out a reliable way to get out of this state. I usually refresh many times, try incognito, and eventually it seems to let me through.
I tried to reproduce earlier this week and I could not. @matthew-white has mentioned he thinks it could be related to connectivity issues. Yesterday I was on a poor mobile connection, tried to log in to test.getodk.cloud, and got the error. I’m now back on my fast and reliable connection but still can’t log in so there is something persistent about this state.
When I was trying to reproduce, I used several different accounts. This could be something unusual about my usage: I do frequently switch between accounts.

We're having some trouble reproducing. I'm going to go ahead and close for now, but we can reopen if/when we get more information or want to explore further.

With Chrome on iOS, I can consistently get into a similar state by doing the following: logging in as one user, turning off Wi-Fi, logging out, turning on Wi-Fi, attempting to log in as another user. I have just verified this again now.
I can't reproduce with those steps on Firefox on macOS.
Seems right to close for now. It must be a combination of mobile (maybe just Chrome) + multiple users + session timeouts.


[T4A5][F12-A2] Lee Jun Han Bryan

Ready for review

Not sure if the way I used enums is correct here. Still quite confused. Went to google it up but it's quite vague as well. Was contemplating representing the action using a String or Enum or maybe a boolean.


lib: add logic library

After cleaning some CTF code.
More code,  like a parser and generation of common format might come

looks good, +1!


Do the dependencies of our compiler plugins need to be bundled into fat jars?

Check https://docs.scala-lang.org/overviews/plugins/index.html - it seems that at least some of the mentioned plugins are NOT shipped with their dependencies bundled; instead they're just declared as dependencies, as usual for libraries

Ha! I've got a good example: https://mvnrepository.com/artifact/org.scoverage/scalac-scoverage-plugin_2.13.8/2.0.0-RC2
Has dependencies other than scala-library, and is NOT a fat jar:
$ z ~/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scoverage/scalac-scoverage-plugin_2.13.6/2.0.0-RC2/*.jar
META-INF/MANIFEST.MF
scalac-plugin.xml
scoverage/
scoverage/AllCoverageFilter$.class
scoverage/AllCoverageFilter.class
scoverage/CoverageFilter.class
scoverage/Location$.class
scoverage/Location.class
scoverage/RegexCoverageFilter.class
scoverage/ScoverageInstrumentationComponent$$anon$1.class
scoverage/ScoverageInstrumentationComponent$Transformer.class
scoverage/ScoverageInstrumentationComponent.class
scoverage/ScoverageOptions$$anonfun$1.class
scoverage/ScoverageOptions$$anonfun$2.class
scoverage/ScoverageOptions$$anonfun$parseExclusionOption$1.class
scoverage/ScoverageOptions$.class
scoverage/ScoverageOptions.class
scoverage/ScoveragePlugin$.class
scoverage/ScoveragePlugin.class

(where z is zipinfo -1 ... | sort)

https://users.scala-lang.org/t/compiler-plugins-and-dependencies/4765 this thread suggests it might not be doable for 2.13 ... but still, scoverage plugin somehow works 🤯
@MarconZet where did you take the clue on building a fat jar from... was it from that thread?

Has dependencies other than scala-library, and is NOT a fat jar:
$ z ~/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scoverage/scalac-scoverage-plugin_2.13.6/2.0.0-RC2/*.jar
META-INF/MANIFEST.MF
scalac-plugin.xml
scoverage/
scoverage/AllCoverageFilter$.class
scoverage/AllCoverageFilter.class
scoverage/CoverageFilter.class
scoverage/Location$.class
scoverage/Location.class
scoverage/RegexCoverageFilter.class
scoverage/ScoverageInstrumentationComponent$$anon$1.class
scoverage/ScoverageInstrumentationComponent$Transformer.class
scoverage/ScoverageInstrumentationComponent.class
scoverage/ScoverageOptions$$anonfun$1.class
scoverage/ScoverageOptions$$anonfun$2.class
scoverage/ScoverageOptions$$anonfun$parseExclusionOption$1.class
scoverage/ScoverageOptions$.class
scoverage/ScoverageOptions.class
scoverage/ScoveragePlugin$.class
scoverage/ScoveragePlugin.class

But mentioned dependencies are in fact all types / objects defined in the https://github.com/scoverage/scalac-scoverage-plugin repo - so this is not a good example im my opinion. I checked the source code of this plugin, searched for all import statements in "main" directories for all modules, and it showed up that all dependencies it uses are from 3 possible libraries:

java standard library
scala standard library
scalac-scoverage-plugin library itself

I did some research and it looks like for now it might be problematic to not use fat jars. I'm not sure if I get it right, but it looks like without using fat jars we are having java.lang.NoClassDefFoundErrors because dependencies like better-files or spray-json are not available to the scala compiler itself, which invokes our plugin (as a jar file). So, even if client's build (sbt) resolves these dependencies correctly, they are not available for the scala compiler. Correct if if I'm wrong.
Alternatively we can try to replace usages of better-files and spray-json (these are two libraries that we use in "main" directories in ASH) with our custom code that would use just standard scala / java libraries. Then we would not need to publish fat jars. But as we all know - it would also have some downsides like a lot of lines of code and need to create our own logic for these use cases.
@PawelLipski, @MarconZet - what is your opinion on that? Do we want to try get rid of better-files and spray-json (leave it only for tests? ) and stop publishing fat jars?

Do we want to try get rid of better-files and spray-json (leave it only for tests? ) and stop publishing fat jars?

Ofc it'd be good to no longer publish those fat jar but only if there's an easy way to do it (like, some magic sbt setting). But since the benefits are purely from code quality PoV (I can't see any tangible benefits for end users)... then I wouldn't deliberately decrease code quality in other places (better-files => java.io/java.nio, spray => some build-in Scala JSON support?).
Let's put the issue on hold (I'll add a label) till the problem is sorted in sbt itself. I suppose this might only ever happen for Scala 3 (and already not for Scala 2) anyway 😅


Update LAB_AK_02_Lab1_Ex2_Endpoint_DLP.md

the period at the end of the url for purview extension is removed.  It was being copied and pasted causing issues
Module: 00
Lab/Demo: 00
Fixes # .
Changes proposed in this pull request:

Thank you for your many observations this week. I've merged most of the PRs. This one I will modify slightly before processing this request.


Fix import reference

@edirgarcia : Thanks for your contribution! The author, @ShubhaVijayasarathy, has been notified to review your proposed change.

Merging per email from @arob98


RHIROS 1216 filter by group

RHIROS 1216 filter by group:boom:
RHIROS 1216 filter by group https://issues.redhat.com/browse/RHIROS-1216
Why do we need this change? :thought_balloon:
Please include the context of this change here.
Documentation requires update? :memo:

[ ] Yes
[x] No

Security Checklist :lock:
Upon raising this PR please go through RedHatInsights/secure-coding-checklist
:guardsman: Checklist :dart:

[ ] Bugfix
[x] New Feature
[ ] Refactor
[ ] Unittests Added
[ ] DRY code
[ ] Dependency Added

Additional :mega:
Feel free to add any other relevant details such as links, notes, screenshots, here.

Codecov Report
Patch coverage has no change and project coverage change: -0.41% :warning:

Comparison is base (357ca86) 17.76% compared to head (ecdaecf) 17.35%.

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

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #261      +/-   ##
==========================================
- Coverage   17.76%   17.35%   -0.41%
==========================================
  Files          41       41
  Lines         850      870      +20
  Branches      158      160       +2
==========================================
  Hits          151      151
- Misses        648      666      +18
- Partials       51       53       +2

Files Changed
Coverage Δ

src/Components/Reports/DownloadSystemsReport.js
0.00% <ø> (ø)

src/Routes/RosPage/RosPage.js
0.00% <0.00%> (ø)

src/Utilities/api.js
0.00% <0.00%> (ø)

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

Hello @PreetiW I tested the functionality and its working as expected, however when I try to reset filters and if the request is slow for some moment I see "no matching systems found" and then it loads all the systems. I tried to catch that in screencast but was not able too,sometimes its quick and sometimes its not. Its not blocker but if its something we can avoid then that will be good!

Thank you @upadhyeammit for reviewing the PR, I will create a separate card for scenario with slow internet connection.

Thank you for the review @upadhyeammit & @saltgen 🙌🏻 merging the PR!


Bitrise step appdome build 2secure android 1.0.2

What to do if the build fails?
At the moment contributors do not have access to the CI workflow triggered by StepLib PRs. In case of a failed build, we ask for your patience. Maintainers of Bitrise Steplib will sort it out for you or inform you if any further action is needed.
New Pull Request Checklist
Please mark the points which you did / accept.

[ ] I will not move an already shared step version's tag to another commit
[ ] I read the Step Development Guideline
[ ] I have a test for my Step, which can be run with bitrise run test (in the step's repository)
[ ] I did run bitrise run audit-this-step (in the step's repository - note, if you don't have this workflow in your bitrise.yml, you can copy it from the step template.)
[ ] I read and accept the Abandoned Step policy

New Step
Thank you for the new Step share! The CI check might will fail due to our extended validation engine. Nothing to worry about yet, we will get back to you shortly.

Hi @elish266 we appreciate your contribution to the step library. I noticed you have included step definition changes for the iOS step in the PR in addition to the Android changes. Will you please open a separate PR per step?


How to visualize the .obj file?

Hi,
I successfully ran the example.py and got gt.obj and est.obj. But I didn't see where I can visualize them.
After searching I found that I can visualize it use open3d, but when I load the .obj file it throw error:
import copy
import open3d as o3d

print("Testing mesh in open3d ...")
mesh = o3d.io.read_triangle_mesh("est.obj")
print(mesh)

It gives:
Testing mesh in open3d ... Read geometry::TriangleMesh failed: unknown file extension.
Any suggestions? Thanks!

Also, I'm wondering if it is possible to reconstruct smpl model parameters when the human keypoint aren't the same format as the default one.  For example, I'm using a in-house dataset obtained keypoint coordinates from Kinect V2, which output 25 keypoints coordinates in 3D (https://lisajamhoury.medium.com/understanding-kinect-v2-joints-and-coordinate-system-4f4b90b9df16). These 25 keypoints are partially different from the 24 keypoints from SMPLArmature. Could you please give me some insight?

You can use MeshLab to view obj files.
As for a different set of keypoints, you can manually specify the correspondence between these keypoints and mesh vertices, and perform a similar optimization to solve for the parameters that best align these mesh vertices to the detected keypoints. You may also refer to this repo: https://github.com/nghorbani/moshpp

You can use MeshLab to view obj files.
As for a different set of keypoints, you can manually specify the correspondence between these keypoints and mesh vertices, and perform a similar optimization to solve for the parameters that best align these mesh vertices to the detected keypoints. You may also refer to this repo: https://github.com/nghorbani/moshpp

Thanks for the very quick response. Will take a look!

Hi,
When I read your code, I found that in https://github.com/CalciferZh/Minimal-IK/blob/72bfcbb768355fcc6706ca8cbdf50c3da25f9f63/models.py#L82, basically instead of specify the pose_pca, we can just specify the pose_abs. In another word, since my end goal is to get SMPL model parameters and render the human mesh, does that mean I only need to get pose_abs from my own keypoint and use that as the input to mesh.set_params function?
I can understand that the pose_abs, absolute model pose in axis-angle, shape [n_joints, 3]. I assume for each joint it is [xθ, yθ, z*θ]. How about the unit/scale of x, y, z? Is it in meters? Are there any example of the value of the pose_abs matrix?
I think my next step will be writing a function to convert my 25x3 in-house human joint absolute coordinates to the 29x3(for smpl) axis-angle parameters. Do you think that's the correct direction? Thanks a lot!

How about the unit/scale of x, y, z? Are there any example of the value of the pose_abs matrix?

Axis-angle are angles, so the unit is radian. An example can be np.tile(np.array([[np.pi/3, 0, 0]], [n_joints, 3])) (but this is definitely not a valid pose.

Do you think that's the correct direction?

It seems to be right if I understand you correctly.


Just made my first contribution to an open source repository by adding my name to a README file!!!

Related issue

What changes does this PR do?
Screenshots (If any)
Questions

Thank you
On Mon, 24 Jun 2024 at 17:38 Michael @.***> wrote:

@.**** approved this pull request.
—
Reply to this email directly, view it on GitHub
https://github.com/EddieHubCommunity/open-source-practice/pull/3708#pullrequestreview-2136290162,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/A55STWON2VHHPQANZ2DLT7TZJBDO7AVCNFSM6AAAAABJYY2TPGVHI2DSMVQWIX3LMV43YUDVNRWFEZLROVSXG5CSMV3GSZLXHMZDCMZWGI4TAMJWGI
.
You are receiving this because you authored the thread.Message ID:
@.***
.com>


Add new functionality for ComressionAlgorithmController

Give more functionality for pytorch model export to ONNX:

add strip_model() for compression controllers with implementation for FilterPruningController
change export_model() for FilterPruningController and CompositeCompressionAlgorithmController

@alexsu52 I think that strip_model is too specific a name for an entire possible range of changes that may have to be made for a model to be successfully prepared for export. Can we perhaps both switch to one of the following names for the function:
prepare_model_for_export, prepare_for_export, finalize_for_export?
@aleksei-kashapov please rebase your PR branch so that only one commit is added here.

@vshampor is finish_algorithm() a good name for pre-export actions?
if not please indicate the most likable version for you and I will use it

@vshampor is finish_algorithm() a good name for pre-export actions?
if not please indicate the most likable version for you and I will use it

I think it is not the best one because it does not reflect what should happen inside. Let's end up with something like prepare_for_export()

done!

@alexsu52, @vanyalzr could you look at this PR, please?


FR: An API or Method to find or select orphaned sub-collections

Firebase Product: Firestore
Describe the problem:
I couldn't find anywhere a way to select or find orphaned sub-collections, this is possible just manually using the web console.

This is in the works and we will update you as we get closer to releasing this.

Any update  ?

@google-cloud/firestore v0.18.0 and above support traversing the full set of data in a Firestore database via DocumentReference.listCollections() and CollectionReference.listDocuments(). You should be able to get the newest version of this SDK if you update your dependency on firebase-admin.

@schmidt-sebastian  how does this work since we don't have the ref?

@jimmykane I'm not sure what "ref" you are referring to.  Can you elaborate on what you're trying to accomplish?

This is something I'm curious about as well, if we know we have a bunch of orphaned sub collections from older code that was not properly doing deletes, how can we purge that orphan data?  We won't know the ref or path to those orphaned collections as they used to be subcollections of previously deleted documents

With listDocuments() and listCollections() you should be able to traverse and find any document in your Firestore hierarchy. Note that you might have to traverse your project's data from the root if you don't know where your orphaned documents are located.

is there a property we can check on a document to see if it's orphaned?

Since a document can be considered "orphaned" only when one of its parent documents does not exist, a way to do this would be to walk up the document hierarchy (via .parent) and call get() on every DocumentReference. You can then use DocumentSnapshot.exists to check whether there is a backing document in Firestore.

great suggestion, works for me 👍

Given the information provided in the previous comments I fail to understand how to find orphaned documents of a deleted root collection?
Let's say I once had a root collection test with various sub-collections and documents. Let's assume I deleted this collection and did not use recursive delete. How can I still find these documents since Firestore.listCollections() will only return existing collections? Without a CollectionReference to begin with I cannot use listDocuments().

Sorry for mentioning you directly @schmidt-sebastian but could you help me please? 🙏🏼

Hi @svenjacobs, based on the description, I created a "test" root collection with docs and sub-collection.

when a root collection is deleted via console, I believe it recursively deletes all the data under it, so there should be no orphaned data left.
After a root collection with sub-collections is deleted via CLI using "--shallow" option, the Firestore.listCollections() did return me the root collection I just deleted, not only the existing collections. And I am able to see the root collection in the firebase console as well.

Not sure if I missed any steps while reproducing, please let me know if you were not able to get the deleted collections via  Firestore.listCollections().

Thank you @milaGGL, that helps! 👍🏼

Hey! Kinda related to this discussion, I'm trying to find all subcollections by sampling documents from the top level collections and then calling listCollections() on those refs.
The issue is that to sample some documents of the top level collections I have the requirement of only fetching document references, which I believe I can do with listDocuments() - however, I don't see any way of putting limits on this query, whereas this api does seem to make that possible: https://cloud.google.com/firestore/docs/reference/rest/v1/projects.databases.documents/listDocuments am I missing something? @milaGGL @schmidt-sebastian


add reporting permissions to the reindex SNS topic

As per the comment here - this should probably live in an adapter account to avoid direct couplings.
However the reindexer infra (and other catalogue stuff) should probably not live in this account anyway, and it helps me get the reporting lambdas closer to be usable for working on the date stuff.
This is the last time (rule of three) before abstracting anyway.

Closing in favour of #3639


beta version warning and css-loader options

Added beta-version code example warning and using options with css-loader to support css-modules

Read and sign the CLA. This needs to be done only once. PRs that haven't signed it won't be accepted.
Check out the development guide for the API and development guidelines.
Read through the PR diff carefully as sometimes this can reveal issues. The work will be reviewed, but this can save some effort.
Remove these instructions from your PR as they are for your eyes only.

Not in beta anymore. Better skip. Thanks anyhow.


Dockerfile

Can you please make a docker file?

I've created a Dockerfile on my fork https://github.com/JonCooperWorks/SSRF_Vulnerable_Lab. I'm making a PR with this Dockerfile to this repo.

Thank you Jon cooper for your time and efforts :)

Thanks @incredibleindishell and @JonCooperWorks


Vimeo on demand (feature request)

It would be great if it would be possible to use the video on demand service by vimeo (including buying)
Thanks
If i have time i will search a bit but i do not have experience with kodi/paying

I am looking into documenting it if that helps speeding it up

I am looking into documenting it if that helps speeding it up

@yoshimo Yes, if I don't have to reverse the API calls from the App myself, it will help me a lot.

@yoshimo Yes, if I don't have to reverse the API calls from the App myself, it will help me a lot.

https://developer.vimeo.com/api/reference/on-demand i assume, that this would help once we get the token out of the app as it very likely has a purchased scope

https://developer.vimeo.com/api/reference/on-demand i assume, that this would help once we get the token out of the app as it very likely has a purchased scope

:information_source: Login was implemented in #50, so this should now be possible to implement. I currently don't have time for this and I also don't use on-demand on Vimeo, but I'm of course accepting contributions.

Without any purchases, the app got back an empty array. I am sure it is quite similiar to the normal videos.
I'll log the process eventually and post it here.

So we have a request from the app

{
  "app": "com.vimeo.android.videoapp",
  "duration": "955ms",
  "headers": {
    "Authorization": "Bearer XYZ",
    "Cache-Control": "no-cache",
    "User-Agent": "com.vimeo.android.videoapp (Version 3.41.1) Kotlin VimeoNetworking/2.0.0",
    "Accept": "application/vnd.vimeo.*+json; version\u003d3.4.2",
    "Accept-Language": "de",
    "Host": "api.vimeo.com",
    "Connection": "Keep-Alive",
    "Accept-Encoding": "gzip"
  },
  "method": "GET",
  "protocol": "HTTP/1.1",
  "remoteIp": "<IP_ADDRESS>",
  "remotePort": 443,
  "sessionId": "SESSIONID",
  "time": "2021-03-08 21:30:30",
  "url": "https://api.vimeo.com/me/ondemand/library?fields\u003duri%2Cname%2Cdescription%2Ctype%2Clink%2Cpublish.time%2Cpictures.sizes.width%2Cpictures.sizes.link%2Cmetadata.connections.videos%2Cfilm.uri%2Cfilm.name%2Cfilm.description%2Cfilm.created_time%2Cfilm.release_time%2Cfilm.duration%2Cfilm.live%2Cfilm.play.status%2Cfilm.play.progress%2Cfilm.play.drm%2Cfilm.play.dash%2Cfilm.play.hls%2Cfilm.play.progressive.type%2Cfilm.play.progressive.width%2Cfilm.play.progressive.height%2Cfilm.play.progressive.link_expiration_time%2Cfilm.play.progressive.link%2Cfilm.play.progressive.fps%2Cfilm.play.progressive.size%2Cfilm.play.progressive.md5%2Cfilm.play.progressive.log%2Cfilm.width%2Cfilm.height%2Cfilm.link%2Cfilm.pictures.sizes.width%2Cfilm.pictures.sizes.link%2Cfilm.status%2Cfilm.privacy.view%2Cfilm.privacy.comments%2Cfilm.privacy.download%2Cfilm.privacy._bypass_token%2Cfilm.review_link%2Cfilm.review_page.active%2Cfilm.review_page.link%2Cfilm.file_transfer%2Cfilm.spatial%2Cfilm.categories.uri%2Cfilm.metadata.interactions%2Cfilm.metadata.connections.comments%2Cfilm.metadata.connections.likes%2Cfilm.metadata.connections.recommendations%2Cfilm.metadata.connections.publish_to_social%2Cfilm.metadata.connections.available_albums.uri%2Cfilm.metadata.connections.available_albums.total%2Cfilm.metadata.connections.available_channels.uri%2Cfilm.metadata.connections.available_channels.total%2Cfilm.metadata.connections.trailer%2Cfilm.metadata.connections.playback%2Cfilm.metadata.connections.ondemand%2Cfilm.metadata.connections.season%2Cfilm.metadata.connections.live_stats%2Cfilm.stats%2Cfilm.password%2Cfilm.resource_key%2Cfilm.live%2Cfilm.metadata.connections.texttracks%2Cfilm.metadata.connections.users_with_access%2Cfilm.upload.status%2Cfilm.transcode.status%2Cfilm.user.uri%2Cfilm.user.id%2Cfilm.user.resource_key%2Cfilm.user.name%2Cfilm.user.bio%2Cfilm.user.account%2Cfilm.user.location%2Cfilm.user.pictures.sizes.width%2Cfilm.user.pictures.sizes.link%2Cfilm.user.is_staff%2Cfilm.user.is_creator%2Cfilm.user.membership%2Cfilm.user.metadata.connections.likes.uri%2Cfilm.user.metadata.connections.likes.total%2Cfilm.user.metadata.connections.moderated_channels.uri%2Cfilm.user.metadata.connections.moderated_channels.total%2Cfilm.user.metadata.connections.channels.uri%2Cfilm.user.metadata.connections.channels.total%2Cfilm.user.metadata.connections.following.uri%2Cfilm.user.metadata.connections.following.total%2Cfilm.user.metadata.connections.followers.uri%2Cfilm.user.metadata.connections.followers.total%2Cfilm.user.metadata.connections.videos.uri%2Cfilm.user.metadata.connections.videos.total%2Cfilm.user.metadata.connections.watchlater.uri%2Cfilm.user.metadata.connections.watchlater.total%2Cfilm.user.metadata.interactions.follow.added%2Cfilm.user.metadata.interactions.follow.uri%2Cfilm.user.metadata.connections.feed.uri%2Cfilm.user.metadata.connections.albums.total%2Cfilm.user.metadata.connections.connected_apps.uri%2Cfilm.user.metadata.connections.connected_apps.total%2Cfilm.user.metadata.connections.connected_apps.options%2Cfilm.user.metadata.connections.folders_root.uri%2Cfilm.user.metadata.connections.pictures%2Cfilm.user.metadata.connections.notifications%2Cfilm.user.live_quota.status%2Cfilm.user.metadata.interactions.facebook_connected_app%2Cfilm.user.metadata.interactions.youtube_connected_app%2Cfilm.user.metadata.interactions.linkedin_connected_app%2Cfilm.user.metadata.interactions.twitter_connected_app%2Cfilm.user.preferences.videos%2Cfilm.user.upload_quota%2Cfilm.user.emails%2Ctrailer%2Cuser.uri%2Cuser.id%2Cuser.resource_key%2Cuser.name%2Cuser.bio%2Cuser.account%2Cuser.location%2Cuser.pictures.sizes.width%2Cuser.pictures.sizes.link%2Cuser.is_staff%2Cuser.is_creator%2Cuser.membership%2Cuser.metadata.connections.likes.uri%2Cuser.metadata.connections.likes.total%2Cuser.metadata.connections.moderated_channels.uri%2Cuser.metadata.connections.moderated_channels.total%2Cuser.metadata.connections.channels.uri%2Cuser.metadata.connections.channels.total%2Cuser.metadata.connections.following.uri%2Cuser.metadata.connections.following.total%2Cuser.metadata.connections.followers.uri%2Cuser.metadata.connections.followers.total%2Cuser.metadata.connections.videos.uri%2Cuser.metadata.connections.videos.total%2Cuser.metadata.connections.watchlater.uri%2Cuser.metadata.connections.watchlater.total%2Cuser.metadata.interactions.follow.added%2Cuser.metadata.interactions.follow.uri%2Cuser.metadata.connections.feed.uri%2Cuser.metadata.connections.albums.total%2Cuser.metadata.connections.connected_apps.uri%2Cuser.metadata.connections.connected_apps.total%2Cuser.metadata.connections.connected_apps.options%2Cuser.metadata.connections.folders_root.uri%2Cuser.metadata.connections.pictures%2Cuser.metadata.connections.notifications%2Cuser.live_quota.status%2Cuser.metadata.interactions.facebook_connected_app%2Cuser.metadata.interactions.youtube_connected_app%2Cuser.metadata.interactions.linkedin_connected_app%2Cuser.metadata.interactions.twitter_connected_app%2Cuser.preferences.videos%2Cuser.upload_quota%2Cuser.emails\u0026sort\u003dpurchase_time\u0026_video_override\u003dtrue\u0026direction\u003ddesc"
}

A hopefully anonymous sample is
{
"total": 1,
"page": 1,
"per_page": 25,
"paging": {
"next": null,
"previous": null,
"first": "/me/ondemand/library?fields=uri%2Cname%2Cdescription%2Ctype%2Clink%2Cpublish.time%2Cpictures.sizes.width%2Cpictures.sizes.link%2Cmetadata.connections.videos%2Cfilm.uri%2Cfilm.name%2Cfilm.description%2Cfilm.created_time%2Cfilm.release_time%2Cfilm.duration%2Cfilm.live%2Cfilm.play.status%2Cfilm.play.progress%2Cfilm.play.drm%2Cfilm.play.dash%2Cfilm.play.hls%2Cfilm.play.progressive.type%2Cfilm.play.progressive.width%2Cfilm.play.progressive.height%2Cfilm.play.progressive.link_expiration_time%2Cfilm.play.progressive.link%2Cfilm.play.progressive.fps%2Cfilm.play.progressive.size%2Cfilm.play.progressive.md5%2Cfilm.play.progressive.log%2Cfilm.width%2Cfilm.height%2Cfilm.link%2Cfilm.pictures.sizes.width%2Cfilm.pictures.sizes.link%2Cfilm.status%2Cfilm.privacy.view%2Cfilm.privacy.comments%2Cfilm.privacy.download%2Cfilm.privacy._bypass_token%2Cfilm.review_link%2Cfilm.review_page.active%2Cfilm.review_page.link%2Cfilm.file_transfer%2Cfilm.spatial%2Cfilm.categories.uri%2Cfilm.metadata.interactions%2Cfilm.metadata.connections.comments%2Cfilm.metadata.connections.likes%2Cfilm.metadata.connections.recommendations%2Cfilm.metadata.connections.publish_to_social%2Cfilm.metadata.connections.available_albums.uri%2Cfilm.metadata.connections.available_albums.total%2Cfilm.metadata.connections.available_channels.uri%2Cfilm.metadata.connections.available_channels.total%2Cfilm.metadata.connections.trailer%2Cfilm.metadata.connections.playback%2Cfilm.metadata.connections.ondemand%2Cfilm.metadata.connections.season%2Cfilm.metadata.connections.live_stats%2Cfilm.stats%2Cfilm.password%2Cfilm.resource_key%2Cfilm.live%2Cfilm.metadata.connections.texttracks%2Cfilm.metadata.connections.users_with_access%2Cfilm.upload.status%2Cfilm.transcode.status%2Cfilm.user.uri%2Cfilm.user.id%2Cfilm.user.resource_key%2Cfilm.user.name%2Cfilm.user.bio%2Cfilm.user.account%2Cfilm.user.location%2Cfilm.user.pictures.sizes.width%2Cfilm.user.pictures.sizes.link%2Cfilm.user.is_staff%2Cfilm.user.is_creator%2Cfilm.user.membership%2Cfilm.user.metadata.connections.likes.uri%2Cfilm.user.metadata.connections.likes.total%2Cfilm.user.metadata.connections.moderated_channels.uri%2Cfilm.user.metadata.connections.moderated_channels.total%2Cfilm.user.metadata.connections.channels.uri%2Cfilm.user.metadata.connections.channels.total%2Cfilm.user.metadata.connections.following.uri%2Cfilm.user.metadata.connections.following.total%2Cfilm.user.metadata.connections.followers.uri%2Cfilm.user.metadata.connections.followers.total%2Cfilm.user.metadata.connections.videos.uri%2Cfilm.user.metadata.connections.videos.total%2Cfilm.user.metadata.connections.watchlater.uri%2Cfilm.user.metadata.connections.watchlater.total%2Cfilm.user.metadata.interactions.follow.added%2Cfilm.user.metadata.interactions.follow.uri%2Cfilm.user.metadata.connections.feed.uri%2Cfilm.user.metadata.connections.albums.total%2Cfilm.user.metadata.connections.connected_apps.uri%2Cfilm.user.metadata.connections.connected_apps.total%2Cfilm.user.metadata.connections.connected_apps.options%2Cfilm.user.metadata.connections.folders_root.uri%2Cfilm.user.metadata.connections.pictures%2Cfilm.user.metadata.connections.notifications%2Cfilm.user.live_quota.status%2Cfilm.user.metadata.interactions.facebook_connected_app%2Cfilm.user.metadata.interactions.youtube_connected_app%2Cfilm.user.metadata.interactions.linkedin_connected_app%2Cfilm.user.metadata.interactions.twitter_connected_app%2Cfilm.user.preferences.videos%2Cfilm.user.upload_quota%2Cfilm.user.emails%2Ctrailer%2Cuser.uri%2Cuser.id%2Cuser.resource_key%2Cuser.name%2Cuser.bio%2Cuser.account%2Cuser.location%2Cuser.pictures.sizes.width%2Cuser.pictures.sizes.link%2Cuser.is_staff%2Cuser.is_creator%2Cuser.membership%2Cuser.metadata.connections.likes.uri%2Cuser.metadata.connections.likes.total%2Cuser.metadata.connections.moderated_channels.uri%2Cuser.metadata.connections.moderated_channels.total%2Cuser.metadata.connections.channels.uri%2Cuser.metadata.connections.channels.total%2Cuser.metadata.connections.following.uri%2Cuser.metadata.connections.following.total%2Cuser.metadata.connections.followers.uri%2Cuser.metadata.connections.followers.total%2Cuser.metadata.connections.videos.uri%2Cuser.metadata.connections.videos.total%2Cuser.metadata.connections.watchlater.uri%2Cuser.metadata.connections.watchlater.total%2Cuser.metadata.interactions.follow.added%2Cuser.metadata.interactions.follow.uri%2Cuser.metadata.connections.feed.uri%2Cuser.metadata.connections.albums.total%2Cuser.metadata.connections.connected_apps.uri%2Cuser.metadata.connections.connected_apps.total%2Cuser.metadata.connections.connected_apps.options%2Cuser.metadata.connections.folders_root.uri%2Cuser.metadata.connections.pictures%2Cuser.metadata.connections.notifications%2Cuser.live_quota.status%2Cuser.metadata.interactions.facebook_connected_app%2Cuser.metadata.interactions.youtube_connected_app%2Cuser.metadata.interactions.linkedin_connected_app%2Cuser.metadata.interactions.twitter_connected_app%2Cuser.preferences.videos%2Cuser.upload_quota%2Cuser.emails&sort=purchase_time&_video_override=true&direction=desc&page=1",
"last": "/me/ondemand/library?fields=uri%2Cname%2Cdescription%2Ctype%2Clink%2Cpublish.time%2Cpictures.sizes.width%2Cpictures.sizes.link%2Cmetadata.connections.videos%2Cfilm.uri%2Cfilm.name%2Cfilm.description%2Cfilm.created_time%2Cfilm.release_time%2Cfilm.duration%2Cfilm.live%2Cfilm.play.status%2Cfilm.play.progress%2Cfilm.play.drm%2Cfilm.play.dash%2Cfilm.play.hls%2Cfilm.play.progressive.type%2Cfilm.play.progressive.width%2Cfilm.play.progressive.height%2Cfilm.play.progressive.link_expiration_time%2Cfilm.play.progressive.link%2Cfilm.play.progressive.fps%2Cfilm.play.progressive.size%2Cfilm.play.progressive.md5%2Cfilm.play.progressive.log%2Cfilm.width%2Cfilm.height%2Cfilm.link%2Cfilm.pictures.sizes.width%2Cfilm.pictures.sizes.link%2Cfilm.status%2Cfilm.privacy.view%2Cfilm.privacy.comments%2Cfilm.privacy.download%2Cfilm.privacy._bypass_token%2Cfilm.review_link%2Cfilm.review_page.active%2Cfilm.review_page.link%2Cfilm.file_transfer%2Cfilm.spatial%2Cfilm.categories.uri%2Cfilm.metadata.interactions%2Cfilm.metadata.connections.comments%2Cfilm.metadata.connections.likes%2Cfilm.metadata.connections.recommendations%2Cfilm.metadata.connections.publish_to_social%2Cfilm.metadata.connections.available_albums.uri%2Cfilm.metadata.connections.available_albums.total%2Cfilm.metadata.connections.available_channels.uri%2Cfilm.metadata.connections.available_channels.total%2Cfilm.metadata.connections.trailer%2Cfilm.metadata.connections.playback%2Cfilm.metadata.connections.ondemand%2Cfilm.metadata.connections.season%2Cfilm.metadata.connections.live_stats%2Cfilm.stats%2Cfilm.password%2Cfilm.resource_key%2Cfilm.live%2Cfilm.metadata.connections.texttracks%2Cfilm.metadata.connections.users_with_access%2Cfilm.upload.status%2Cfilm.transcode.status%2Cfilm.user.uri%2Cfilm.user.id%2Cfilm.user.resource_key%2Cfilm.user.name%2Cfilm.user.bio%2Cfilm.user.account%2Cfilm.user.location%2Cfilm.user.pictures.sizes.width%2Cfilm.user.pictures.sizes.link%2Cfilm.user.is_staff%2Cfilm.user.is_creator%2Cfilm.user.membership%2Cfilm.user.metadata.connections.likes.uri%2Cfilm.user.metadata.connections.likes.total%2Cfilm.user.metadata.connections.moderated_channels.uri%2Cfilm.user.metadata.connections.moderated_channels.total%2Cfilm.user.metadata.connections.channels.uri%2Cfilm.user.metadata.connections.channels.total%2Cfilm.user.metadata.connections.following.uri%2Cfilm.user.metadata.connections.following.total%2Cfilm.user.metadata.connections.followers.uri%2Cfilm.user.metadata.connections.followers.total%2Cfilm.user.metadata.connections.videos.uri%2Cfilm.user.metadata.connections.videos.total%2Cfilm.user.metadata.connections.watchlater.uri%2Cfilm.user.metadata.connections.watchlater.total%2Cfilm.user.metadata.interactions.follow.added%2Cfilm.user.metadata.interactions.follow.uri%2Cfilm.user.metadata.connections.feed.uri%2Cfilm.user.metadata.connections.albums.total%2Cfilm.user.metadata.connections.connected_apps.uri%2Cfilm.user.metadata.connections.connected_apps.total%2Cfilm.user.metadata.connections.connected_apps.options%2Cfilm.user.metadata.connections.folders_root.uri%2Cfilm.user.metadata.connections.pictures%2Cfilm.user.metadata.connections.notifications%2Cfilm.user.live_quota.status%2Cfilm.user.metadata.interactions.facebook_connected_app%2Cfilm.user.metadata.interactions.youtube_connected_app%2Cfilm.user.metadata.interactions.linkedin_connected_app%2Cfilm.user.metadata.interactions.twitter_connected_app%2Cfilm.user.preferences.videos%2Cfilm.user.upload_quota%2Cfilm.user.emails%2Ctrailer%2Cuser.uri%2Cuser.id%2Cuser.resource_key%2Cuser.name%2Cuser.bio%2Cuser.account%2Cuser.location%2Cuser.pictures.sizes.width%2Cuser.pictures.sizes.link%2Cuser.is_staff%2Cuser.is_creator%2Cuser.membership%2Cuser.metadata.connections.likes.uri%2Cuser.metadata.connections.likes.total%2Cuser.metadata.connections.moderated_channels.uri%2Cuser.metadata.connections.moderated_channels.total%2Cuser.metadata.connections.channels.uri%2Cuser.metadata.connections.channels.total%2Cuser.metadata.connections.following.uri%2Cuser.metadata.connections.following.total%2Cuser.metadata.connections.followers.uri%2Cuser.metadata.connections.followers.total%2Cuser.metadata.connections.videos.uri%2Cuser.metadata.connections.videos.total%2Cuser.metadata.connections.watchlater.uri%2Cuser.metadata.connections.watchlater.total%2Cuser.metadata.interactions.follow.added%2Cuser.metadata.interactions.follow.uri%2Cuser.metadata.connections.feed.uri%2Cuser.metadata.connections.albums.total%2Cuser.metadata.connections.connected_apps.uri%2Cuser.metadata.connections.connected_apps.total%2Cuser.metadata.connections.connected_apps.options%2Cuser.metadata.connections.folders_root.uri%2Cuser.metadata.connections.pictures%2Cuser.metadata.connections.notifications%2Cuser.live_quota.status%2Cuser.metadata.interactions.facebook_connected_app%2Cuser.metadata.interactions.youtube_connected_app%2Cuser.metadata.interactions.linkedin_connected_app%2Cuser.metadata.interactions.twitter_connected_app%2Cuser.preferences.videos%2Cuser.upload_quota%2Cuser.emails&sort=purchase_time&_video_override=true&direction=desc&page=1"
},
"data": [{
"uri": "/ondemand/pages/221615",
"name": "Swingende Notwendigkeit - Live und in Farbe",
"description": "Endlich: Swingende Notwendigkeit live und in Farbe! Dieser Film ist der überzeugende Beweis: Der preisgekrönte Klavierkabarettist Bodo Wartke und The Capital Dance Orchestra bringen jeden Konzertsaal zum Beben!\n\nDer Entertainer erweckt die legendären Tanzpaläste in ihrer ganzen Pracht zu neuem Leben. Das wandlungsfähige Orchester erklingt in feinsten Nuancen mit differenziertem Klangvolumen. Diese exquisit abgemischte Aufnahme präsentiert ein opulentes Programm mit Evergreens aus Bodo Wartkes Klavierkabarettprogrammen. Swingende Notwendigkeit ist ein mitreißendes musikalisches Feuerwerk!\n\nZwei Jahre nach der CD-Aufnahme (2013) und einer deutschlandweiten Tournee ist das Programm gereift und so zeigt dieser Konzertmitschnitt überraschende Dinge, wie die unvergessliche Heavy-Metal-Version von "Ja, Schatz!" und Bodo Wartke steppend. Die ganz große Revue jetzt für zu Hause und unterwegs. Swingende Lebensfreude - live und in Farbe!",
"type": "film",
"link": "https://vimeo.com/ondemand/swingendenotwendigkeit",
"publish": {
"time": "2020-04-17T07:17:41+00:00"
},
"pictures": {
"sizes": [{
"width": 100,
"link": "https://i.vimeocdn.com/vod_poster/313232_100x75.jpg"
}, {
"width": 200,
"link": "https://i.vimeocdn.com/vod_poster/313232_200x150.jpg"
}, {
"width": 295,
"link": "https://i.vimeocdn.com/vod_poster/313232_295x166.jpg"
}, {
"width": 640,
"link": "https://i.vimeocdn.com/vod_poster/313232_640x360.jpg"
}, {
"width": 1280,
"link": "https://i.vimeocdn.com/vod_poster/313232_1280x720.jpg"
}, {
"width": 640,
"link": "https://i.vimeocdn.com/vod_poster/313232_640x948.jpg"
}, {
"width": 1920,
"link": "https://i.vimeocdn.com/vod_poster/313232_1920x1080.jpg"
}, {
"width": 960,
"link": "https://i.vimeocdn.com/vod_poster/313232_960x1422.jpg"
}, {
"width": 1280,
"link": "https://i.vimeocdn.com/vod_poster/313232_1280x1896.jpg"
}, {
"width": 1920,
"link": "https://i.vimeocdn.com/vod_poster/313232_1920x2844.jpg"
}]
},
"metadata": {
"connections": {
"videos": {
"uri": "/ondemand/pages/221615/videos?",
"options": ["GET"],
"total": 2,
"main_total": 1,
"extra_total": 0,
"viewable_total": 2
}
}
},
"film": {
"uri": "/videos/402752443",
"name": "Swingende Notwendigkeit - Live und in Farbe",
"description": "Endlich: Swingende Notwendigkeit live und in Farbe!  und Bodo Wartke steppend. Die ganz große Revue jetzt für zu Hause und unterwegs. Swingende Lebensfreude - live und in Farbe!",
"link": "https://vimeo.com/402752443",
"duration": 8128,
"width": 1920,
"height": 1080,
"created_time": "2020-03-31T23:10:41+00:00",
"release_time": "2020-04-17T07:17:41+00:00",
"privacy": {
"view": "ptv",
"download": true,
"comments": "nobody",
"_bypass_token": "TOKEN"
},
"pictures": {
"sizes": [{
"width": 100,
"link": "https://i.vimeocdn.com/video/873134016_100x75.jpg?r=pad"
}, {
"width": 200,
"link": "https://i.vimeocdn.com/video/873134016_200x150.jpg?r=pad"
}, {
"width": 295,
"link": "https://i.vimeocdn.com/video/873134016_295x166.jpg?r=pad"
}, {
"width": 640,
"link": "https://i.vimeocdn.com/video/873134016_640x360.jpg?r=pad"
}, {
"width": 960,
"link": "https://i.vimeocdn.com/video/873134016_960x540.jpg?r=pad"
}, {
"width": 1280,
"link": "https://i.vimeocdn.com/video/873134016_1280x720.jpg?r=pad"
}, {
"width": 1920,
"link": "https://i.vimeocdn.com/video/873134016_1920x1080.jpg?r=pad"
}]
},
"stats": {
"plays": 894
},
"categories": [],
"metadata": {
"connections": {
"comments": {
"uri": "/videos/402752443/comments",
"options": ["GET"],
"total": 0
},
"likes": {
"uri": "/videos/402752443/likes",
"options": ["GET"],
"total": 21
},
"publish_to_social": {
"uri": "/videos/402752443/publish_to_social",
"options": []
},
"texttracks": {
"uri": "/videos/402752443/texttracks",
"options": ["GET", "POST"],
"total": 0
},
"recommendations": {
"uri": "/videos/402752443/recommendations",
"options": ["GET"]
},
"available_albums": {
"uri": "/videos/402752443/available_albums",
"total": 0
},
"available_channels": {
"uri": "/videos/402752443/available_channels",
"total": 0
},
"ondemand": {
"uri": "/ondemand/pages/221615",
"options": ["GET"],
"resource_key": "cfba0c2d0be8cc989ed7d983c17b67fb45e9dde9"
},
"trailer": {
"uri": "/ondemand/pages/221615/videos/403656164",
"options": ["GET"],
"resource_key": "688e13c2eedb4171f512fdb344f004ea87c80a95"
},
"season": {
"uri": "/ondemand/pages/221615/seasons/227171",
"options": ["GET"],
"name": "Feature"
}
},
"interactions": {
"watchlater": {
"uri": "/users/myuseraccountnumber/watchlater/402752443",
"options": ["GET", "PUT", "DELETE"],
"added": true,
"added_time": "2021-03-08T20:30:02+00:00"
},
"like": {
"uri": "/users/myuseraccountnumber/likes/402752443",
"options": ["GET", "PUT", "DELETE"],
"added": false,
"added_time": null
},
"rent": {
"expires_time": "2021-03-11T20:30:02+00:00",
"purchase_time": "2021-03-08T20:30:02+00:00",
"uri": null,
"stream": "purchased",
"link": null,
"price": null,
"currency": null,
"display_p
16 a0
rice ":null,"
drm ":false},"
buy ":{"
expires_time ":null,"
purchase_time ":null,"
uri ":null,"
download ":"
unavailable ","
stream ":"
unavailable ","
link ":null,"
price ":null,"
currency ":null,"
display_price ":null,"
drm ":false},"
subscribe ":null,"
report ":{"
uri ":" / videos / 402752443 / report ","
options ":["
POST "],"
reason ":["
pornographic ","
harassment ","
ripoff ","
incorrect rating ","
spam ","
causes harm ","
csam "]}}},"
user ":{"
uri ":" / users / USERNUMBER ","
name ":"
Bodo Wartke ","
location ":"
","
bio ":"
Herzlich Willkommen auf meinem offiziellen Vimeo - Kanal!Viele weitere Lieder,
Infos,
alle Tourdaten und mehr findet ihr auf: http: //www.bodowartke.de/\n\nViel Spaß!\n\nEuer Bodo","membership":{"type":"pro","display":"PRO","badge":{"type":"pro","text":"PRO","alt_text":"Erfahre mehr über Vimeo PRO","url":"/pro"}},"pictures":{"sizes":[{"width":30,"link":"https://i.vimeocdn.com/portrait/9796936_30x30"},{"width":72,"link":"https://i.vimeocdn.com/portrait/9796936_72x72"},{"width":75,"link":"https://i.vimeocdn.com/portrait/9796936_75x75"},{"width":100,"link":"https://i.vimeocdn.com/portrait/9796936_100x100"},{"width":144,"link":"https://i.vimeocdn.com/portrait/9796936_144x144"},{"width":216,"link":"https://i.vimeocdn.com/portrait/9796936_216x216"},{"width":288,"link":"https://i.vimeocdn.com/portrait/9796936_288x288"},{"width":300,"link":"https://i.vimeocdn.com/portrait/9796936_300x300"},{"width":360,"link":"https://i.vimeocdn.com/portrait/9796936_360x360"}]},"metadata":{"connections":{"albums":{"total":14},"channels":{"uri":"/users/USERNUMBER/channels","total":0},"feed":{"uri":"/users/USERNUMBER/feed"},"followers":{"uri":"/users/USERNUMBER/followers","total":177},"following":{"uri":"/users/USERNUMBER/following","total":0},"likes":{"uri":"/users/USERNUMBER/likes","total":0},"moderated_channels":{"uri":"/users/USERNUMBER/channels?filter=moderated","total":1},"videos":{"uri":"/users/USERNUMBER/videos","total":144},"pictures":{"uri":"/users/USERNUMBER/pictures","options":["GET","POST"],"total":1},"folders_root":{"uri":"/users/USERNUMBER/folders/root"}},"interactions":{"follow":{"added":false,"uri":"/users/myuseraccountnumber/following/USERNUMBER"}}},"live_quota":{"status":"available"},"resource_key":"68c8642d10f094f4d523c4d0986ffa8da884cd48"},"play":{"progressive":[{"type":"video/mp4","width":960,"height":540,"link_expiration_time":"2021-03-08T23:30:31+00:00","link":"https://vimeo-prod-skyfire-std-us.storage.googleapis.com/01/550/16/402752443/1721579938.mp4?GoogleAccessId=GOOGLW2TRT7BCCZZO5AX&Expires=1615246231&Signature=Wl1KjYIKXvI2XCAj2ooiPj%2BWyIA%3D","fps":25,"size":1568510807,"md5":"7f705947c35b5fe276145d946f7ec7b3","log":"https://api.vimeo.com/videos/402752443/log/1721579938/1615235431/098ebca3462c3bb5abb4790d8ffb8ae073917fb1"},{"type":"video/mp4","width":426,"height":240,"link_expiration_time":"2021-03-08T23:30:31+00:00","link":"https://vimeo-prod-skyfire-std-us.storage.googleapis.com/01/550/16/402752443/1721579937.mp4?GoogleAccessId=GOOGLW2TRT7BCCZZO5AX&Expires=1615246231&Signature=4%2FQMgVHsXvwhNzwXPhZa2xNkTlU%3D","fps":25,"size":353196860,"md5":"a5340cc8b8eaa5f8362e811f1dc2e152","log":"https://api.vimeo.com/videos/402752443/log/1721579937/1615235431/fb0976c67de41f134aac855f7b16a25b4b9ad5f1"},{"type":"video/mp4","width":640,"height":360,"link_expiration_time":"2021-03-08T23:30:31+00:00","link":"https://vimeo-prod-skyfire-std-us.storage.googleapis.com/01/550/16/402752443/1721579935.mp4?GoogleAccessId=GOOGLW2TRT7BCCZZO5AX&Expires=1615246231&Signature=4JJ%2FUqgNia9kOAra9XBVc8HK8aM%3D","fps":25,"size":623367515,"md5":"bdfb94e5af40d25d22eb8fbc24915d5a","log":"https://api.vimeo.com/videos/402752443/log/1721579935/1615235431/dbf8d1e022bdf112283ea8ac6d9ddfbf9abf0517"},{"type":"video/mp4","width":1920,"height":1080,"link_expiration_time":"2021-03-08T23:30:31+00:00","link":"https://vimeo-prod-skyfire-std-us.storage.googleapis.com/01/550/16/402752443/1721579934.mp4?GoogleAccessId=GOOGLW2TRT7BCCZZO5AX&Expires=1615246231&Signature=qvyZaVXI6h9TM%2F3C9i3LWICFCtQ%3D","fps":25,"size":5256879778,"md5":"e11ce158d82f19dc674f14f50155eccf","log":"https://api.vimeo.com/videos/402752443/log/1721579934/1615235431/e43954af89b3b37b03e0e958f920e83cd2457c3d"},{"type":"video/mp4","width":1280,"height":720,"link_expiration_time":"2021-03-08T23:30:31+00:00","link":"https://vimeo-prod-skyfire-std-us.storage.googleapis.com/01/550/16/402752443/1721579932.mp4?GoogleAccessId=GOOGLW2TRT7BCCZZO5AX&Expires=1615246231&Signature=Q5x%2BYTvEPQ34Lywdx3lLiYqqmCA%3D","fps":25,"size":2505234984,"md5":"4624588bc0ddfee0cdb9df39a2f100a9","log":"https://api.vimeo.com/videos/402752443/log/1721579932/1615235431/cc1229443b03b61c11457be90400d91f6d9a97a5"}],"hls":{"link_expiration_time":"2021-03-08T22:30:31+00:00","link":"https://player.vimeo.com/play/83bd13b5-03d0-492a-9b79-d02fdf8233ca/hls?s=402752443_1615242631_9dd69d43bb719d0f6e26df5e42c3ea4c&context=Vimeo\Controller\Api\Resources\User\OnDemand\PurchasesController.&logging=false","log":"https://api.vimeo.com/videos/402752443/log/hls/1615235431/4dd04f671b29c8ea3804c83732917f8264f54270"},"dash":{"link_expiration_time":"2021-03-08T22:30:31+00:00","link":"https://player.vimeo.com/play/83bd13b5-03d0-492a-9b79-d02fdf8233ca/dash?s=402752443_1615242631_9dd69d43bb719d0f6e26df5e42c3ea4c&context=Vimeo\Controller\Api\Resources\User\OnDemand\PurchasesController.&logging=false","log":"https://api.vimeo.com/videos/402752443/log/dash/1615235431/9adbd91e87a721e40789cad080028595d0eafcef"},"status":"playable"},"status":"available","resource_key":"9404148ca39dcb0688e6c031154ebd63fc32708d","upload":{"status":"complete"},"transcode":{"status":"complete"}},"trailer":{"uri":"/videos/403656164","name":"Swingende Notwendigkeit - Live und in Farbe (Offizieller Trailer VoD)","description":"Endlich: Swingende Notwendigkeit live und in Farbe!  und Bodo Wartke steppend. Die ganz große Revue jetzt für zu Hause und unterwegs. Swingende Lebensfreude - live und in Farbe!",
"type": "video",
"link": "https://vimeo.com/403656164",
"duration": 160,
"width": 1920,
"language": null,
"height": 1080,
"embed": {
"html": "<iframe src="https://player.vimeo.com/video/403656164?title=0&byline=0&portrait=0&badge=0&autopause=0&player_id=0&app_id=53467\" width="1920" height="1080" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen title="Swingende Notwendigkeit - Live und in Farbe">",
"badges": {
"hdr": false,
"live": {
"streaming": false,
"archived": false
},
"staff_pick": {
"normal": false,
"best_of_the_month": false,
"best_of_the_year": false,
"premiere": false
},
"vod": true,
"weekend_challenge": false
}
},
"created_time": "2020-04-03T11:36:23+00:00",
"modified_time": "2021-03-07T22:03:06+00:00",
"release_time": "2020-04-17T07:17:41+00:00",
"content_rating": ["safe"],
"license": null,
"privacy": {
"view": "ptv",
"embed": "public",
"download": true,
"add": true,
"comments": "nobody",
"_bypass_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjbGlwX2lkIjo0MDM2NTYxNjQsImV4cCI6MTYxNTIzOTA2MH0.fITsg8MGRHiOjxgwP1FtaKpXYgkl-bkzuMBOI9t5LT8"
},
"pictures": {
"uri": "/videos/403656164/pictures/873207902",
"active": true,
"type": "custom",
"sizes": [{
"width": 100,
"height": 75,
"link": "https://i.vimeocdn.com/video/873207902_100x75.jpg?r=pad",
"link_with_play_button": "https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F873207902_100x75.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"
}, {
"width": 200,
"height": 150,
"link": "https://i.vimeocdn.com/video/873207902_200x150.jpg?r=pad",
"link_with_play_button": "https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F873207902_200x150.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"
}, {
"width": 295,
"height": 166,
"link": "https://i.vimeocdn.com/video/873207902_295x166.jpg?r=pad",
"link_with_play_button": "https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F873207902_295x166.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"
}, {
"width": 640,
"height": 360,
"link": "https://i.vimeocdn.com/video/873207902_640x360.jpg?r=pad",
"link_with_play_button": "https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F873207902_640x360.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"
}, {
"width": 960,
"height": 540,
"link": "https://i.vimeocdn.com/video/873207902_960x540.jpg?r=pad",
"link_with_play_button": "https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F873207902_960x540.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"
}, {
"width": 1280,
"height": 720,
"link": "https://i.vimeocdn.com/video/873207902_1280x720.jpg?r=pad",
"link_with_play_button": "https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F873207902_1280x720.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"
}, {
"width": 1920,
"height": 1080,
"link": "https://i.vimeocdn.com/video/873207902_1920x1080.jpg?r=pad",
"link_with_play_button": "https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F873207902_1920x1080.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png"
}],
"resource_key": "a7ff1fcc09c09e78c6a6a405f322231e74d1d59b",
"default_picture": false
},
"tags": [],
"stats": {
"plays": 798
},
"categories": [],
"metadata": {
"connections": {
"comments": {
"uri": "/videos/403656164/comments",
"options": ["GET"],
"total": 0
},
"credits": {
"uri": "/videos/403656164/credits",
"options": ["GET", "POST"],
"total": 0
},
"likes": {
"uri": "/videos/403656164/likes",
"opt
5 a0
ions ":["
GET "],"
total ":1},"
pictures ":{"
uri ":" / videos / 403656164 / pictures ","
options ":["
GET ","
POST "],"
total ":1},"
publish_to_social ":{"
uri ":" / videos / 403656164 / publish_to_social ","
options ":[]},"
texttracks ":{"
uri ":" / videos / 403656164 / texttracks ","
options ":["
GET ","
POST "],"
total ":0},"
related ":{"
uri ":" / me / ondemand / library ? fields = uri,
name,
description,
type,
link,
publish.time,
pictures.sizes.width,
pictures.sizes.link,
metadata.connections.videos,
film.uri,
film.name,
film.description,
film.created_time,
film.release_time,
film.duration,
film.live,
film.play.status,
film.play.progress,
film.play.drm,
film.play.dash,
film.play.hls,
film.play.progressive.type,
film.play.progressive.width,
film.play.progressive.height,
film.play.progressive.link_expiration_time,
film.play.progressive.link,
film.play.progressive.fps,
film.play.progressive.size,
film.play.progressive.md5,
film.play.progressive.log,
film.width,
film.height,
film.link,
film.pictures.sizes.width,
film.pictures.sizes.link,
film.status,
film.privacy.view,
film.privacy.comments,
film.privacy.download,
film.privacy._bypass_token,
film.review_link,
film.review_page.active,
film.review_page.link,
film.file_transfer,
film.spatial,
film.categories.uri,
film.metadata.interactions,
film.metadata.connections.comments,
film.metadata.connections.likes,
film.metadata.connections.recommendations,
film.metadata.connections.publish_to_social,
film.metadata.connections.available_albums.uri,
film.metadata.connections.available_albums.tot
1268
al,
film.metadata.connections.available_channels.uri,
film.metadata.connections.available_channels.total,
film.metadata.connections.trailer,
film.metadata.connections.playback,
film.metadata.connections.ondemand,
film.metadata.connections.season,
film.metadata.connections.live_stats,
film.stats,
film.password,
film.resource_key,
film.live,
film.metadata.connections.texttracks,
film.metadata.connections.users_with_access,
film.upload.status,
film.transcode.status,
film.user.uri,
film.user.id,
film.user.resource_key,
film.user.name,
film.user.bio,
film.user.account,
film.user.location,
film.user.pictures.sizes.width,
film.user.pictures.sizes.link,
film.user.is_staff,
film.user.is_creator,
film.user.membership,
film.user.metadata.connections.likes.uri,
film.user.metadata.connections.likes.total,
film.user.metadata.connections.moderated_channels.uri,
film.user.metadata.connections.moderated_channels.total,
film.user.metadata.connections.channels.uri,
film.user.metadata.connections.channels.total,
film.user.metadata.connections.following.uri,
film.user.metadata.connections.following.total,
film.user.metadata.connections.followers.uri,
film.user.metadata.connections.followers.total,
film.user.metadata.connections.videos.uri,
film.user.metadata.connections.videos.total,
film.user.metadata.connections.watchlater.uri,
film.user.metadata.connections.watchlater.total,
film.user.metadata.interactions.follow.added,
film.user.metadata.interactions.follow.uri,
film.user.metadata.connections.feed.uri,
film.user.metadata.connections.albums.total,
film.user.metadata.connections.connected_apps.uri,
film.user.metadata.connections.connected_apps.total,
film.user.metadata.connections.connected_apps.options,
film.user.metadata.connections.folders_root.uri,
film.user.metadata.connections.pictures,
film.user.metadata.connections.notifications,
film.user.live_quota.status,
film.user.metadata.interactions.facebook_connected_app,
film.user.metadata.interactions.youtube_connected_app,
film.user.metadata.interactions.linkedin_connected_app,
film.user.metadata.interactions.twitter_connected_app,
film.user.preferences.videos,
film.user.upload_quota,
film.user.emails,
trailer,
user.uri,
user.id,
user.resource_key,
user.name,
user.bio,
user.account,
user.location,
user.pictures.sizes.width,
user.pictures.sizes.link,
user.is_staff,
user.is_creator,
user.membership,
user.metadata.connections.likes.uri,
user.metadata.connections.likes.total,
user.metadata.connections.moderated_channels.uri,
user.metadata.connections.moderated_channels.total,
user.metadata.connections.channels.uri,
user.metadata.connections.channels.total,
user.metadata.connections.following.uri,
user.metadata.connections.following.total,
user.metadata.connections.followers.uri,
user.metadata.connections.followers.total,
user.metadata.connections.videos.uri,
user.metadata.connections.videos.total,
user.metadata.connections.watchlater.uri,
user.metadata.connections.watchlater.total,
user.metadata.interactions.follow.added,
user.metadata.interactions.follow.uri,
user.metadata.connections.feed.uri,
user.metadata.connections.albums.total,
user.metadata.connections.connected_apps.uri,
user.metadata.connections.connected_apps.total,
user.metadata.connections.connected_apps.options,
user.metadata.connections.folders_root.uri,
user.metadata.connections.pictures,
user.metadata.connections.notifications,
user.live_quota.status,
user.metadata.interactions.facebook_connected_app,
user.metadata.interactions.youtube_connected_app,
user.metadata.interactions.linkedin_connected_app,
user.metadata.interactions.twitter_connected_app,
user.preferences.videos,
user.upload_quota,
user.emails & sort = purchase_time & _video_override = true & direction = desc & offset = 1 ","
options ":["
GET "]},"
recommendations ":{"
uri ":" / videos / 403656164 / recommendations ","
options ":["
GET "]},"
albums ":{"
uri ":" / videos / 403656164 / albums ","
options ":["
GET ","
PATCH "],"
total ":0},"
available_albums ":{"
uri ":" / videos / 403656164 / available_albums ","
options ":["
GET "],"
total ":0},"
available_channels ":{"
uri ":" / videos / 403656164 / available_channels ","
options ":["
GET "],"
total ":0},"
versions ":{"
uri ":" / videos / 403656164 / versions ","
options ":["
GET "],"
total ":1,"
current_uri ":" / videos / 403656164 / versions / 306984667 ","
resource_key ":"
634 ef5814a3ebb396da7929e2cc8814739c7811d "},"
ondemand ":{"
uri ":" / ondemand / pages / 221615 ","
options ":["
GET "],"
resource_key ":"
cfba0c2d0be8cc989ed7d983c17b67fb45e9dde9 "}},"
interactions ":{"
watchlater ":{"
uri ":" / users / myuseraccountnumber / watchlater / 403656164 ","
options ":["
GET ","
PUT ","
DELETE "],"
added ":false,"
added_time ":null},"
like ":{"
uri ":" / users / myuseraccountnumber / likes / 403656164 ","
options ":["
GET ","
PUT ","
DELETE "],"
added ":false,"
added_time ":null},"
rent ":null,"
buy ":null,"
subscribe ":null,"
report ":{"
uri ":" / videos / 403656164 / report ","
options ":["
POST "],"
reason ":["
pornographic ","
harassment ","
ripoff ","
i
5 a3
ncorrect rating ","
spam ","
causes harm ","
csam "]}}},"
user ":{"
uri ":" / users / USERNUMBER ","
name ":"
Bodo Wartke ","
link ":"
https : //vimeo.com/bodowartke","capabilities":{"hasLiveSubscription":false},"location":"","gender":"m","bio":"Herzlich Willkommen auf meinem offiziellen Vimeo-Kanal! Viele weitere Lieder, Infos, alle Tourdaten und mehr findet ihr auf: http://www.bodowartke.de/\n\nViel Spaß!\n\nEuer Bodo","short_bio":null,"membership":{"type":"pro","display":"PRO","badge":{"type":"pro","text":"PRO","alt_text":"Erfahre mehr über Vimeo PRO","url":"/pro"}},"created_time":"2015-06-09T06:35:12+00:00","pictures":{"uri":"/users/USERNUMBER/pictures/9796936","active":true,"type":"custom","sizes":[{"width":30,"height":30,"link":"https://i.vimeocdn.com/portrait/9796936_30x30"},{"width":72,"height":72,"link":"https://i.vimeocdn.com/portrait/9796936_72x72"},{"width":75,"height":75,"link":"https://i.vimeocdn.com/portrait/9796936_75x75"},{"width":100,"height":100,"link":"https://i.vimeocdn.com/portrait/9796936_100x100"},{"width":144,"height":144,"link":"https://i.vimeocdn.com/portrait/9796936_144x144"},{"width":216,"height":216,"link":"https://i.vimeocdn.com/portrait/9796936_216x216"},{"width":288,"height":288,"link":"https://i.vimeocdn.com/portrait/9796936_288x288"},{"width":300,"height":300,"link":"https://i.vimeocdn.com/portrait/9796936_300x300"},{"width":360,"height":360,"link":"https://i.vimeocdn.com/portrait/9796936_360x360"}],"resource_k
255
ey ":"
568 de6ee3a0d5b91c3d602ae2bd3a05b65c3b70b ","
default_picture ":false},"
websites ":[{"
uri ":" / users / USERNUMBER / links / 3854164 ","
name ":"
Homepage ","
link ":"
www.bodowartke.de ","
type ":"
link ","
description ":null},{"
uri ":" / users / USERNUMBER / links / 3854166 ","
name ":"
Facebook ","
link ":"
www.facebook.com / bodowartke / ","
type ":"
facebook ","
description ":null},{"
uri ":" / users / USERNUMBER / links / 3854168 ","
name ":"
Twitter ","
link ":"
twitter.com / bodowartke ","
type ":"
twitter ","
description ":null},{"
uri ":" / users / USERNUMBER / links / 3854169 ","
name ":"
Soundcloud ","
link ":"
soundcloud.com / bodowartke ","
type ":"
soundcloud ","
description ":null}],"
m
2 c3a
etadata ":{"
connections ":{"
albums ":{"
uri ":" / users / USERNUMBER / albums ","
options ":["
GET "],"
total ":14},"
appearances ":{"
uri ":" / users / USERNUMBER / appearances ","
options ":["
GET "],"
total ":0},"
channels ":{"
uri ":" / users / USERNUMBER / channels ","
options ":["
GET "],"
total ":0},"
feed ":{"
uri ":" / users / USERNUMBER / feed ","
options ":["
GET "]},"
followers ":{"
uri ":" / users / USERNUMBER / followers ","
options ":["
GET "],"
total ":177},"
following ":{"
uri ":" / users / USERNUMBER / following ","
options ":["
GET "],"
total ":0},"
groups ":{"
uri ":" / users / USERNUMBER / groups ","
options ":["
GET "],"
total ":0},"
likes ":{"
uri ":" / users / USERNUMBER / likes ","
options ":["
GET "],"
total ":0},"
membership ":{"
uri ":" / users / USERNUMBER / membership / ","
options ":["
PATCH "]},"
moderated_channels ":{"
uri ":" / users / USERNUMBER / channels ? filter = moderated ","
options ":["
GET "],"
total ":1},"
portfolios ":{"
uri ":" / users / USERNUMBER / portfolios ","
options ":["
GET "],"
total ":0},"
videos ":{"
uri ":" / users / USERNUMBER / videos ","
options ":["
GET "],"
total ":144},"
shared ":{"
uri ":" / users / USERNUMBER / shared / videos ","
options ":["
GET "],"
total ":0},"
pictures ":{"
uri ":" / users / USERNUMBER / pictures ","
options ":["
GET ","
POST "],"
total ":1},"
folders_root ":{"
uri ":" / users / USERNUMBER / folders / root ","
options ":["
GET "]},"
team_members ":{"
uri ":" / users / USERNUMBER / teammembers ","
options ":["
GET ","
POST "],"
total ":0,"
invites_remaining ":3,"
max_seats ":3},"
teams ":{"
uri ":" / users / USERNUMBER / teams ","
options ":["
GET "],"
total ":1}},"
interactions ":{"
follow ":{"
added ":false,"
added_time ":null,"
uri ":" / users / myuseraccountnumber / following / USERNUMBER ","
options ":["
GET ","
PUT ","
DELETE "]},"
block ":{"
uri ":" / me / block / USERNUMBER ","
options ":["
PUT ","
DELETE "],"
added ":false,"
added_time ":null},"
report ":{"
uri ":" / users / USERNUMBER / report ","
options ":["
POST "],"
reason ":["
inappropriate avatar ","
spammy ","
bad videos ","
creepy ","
not playing nice ","
impersonation ","
inappropriate job post "]}}},"
location_details ":{"
formatted_address ":"
","
latitude ":null,"
longitude ":null,"
city ":null,"
state ":null,"
neighborhood ":null,"
sub_locality ":null,"
state_iso_code ":null,"
country ":null,"
country_iso_code ":null},"
skills ":[],"
available_for_hire ":false,"
can_work_remotely ":false,"
live_quota ":{"
status ":"
available ","
time ":{"
monthly_remaining ":9223372036854775807,"
monthly_maximum ":9223372036854775807,"
event_maximum ":43200},"
streams ":{"
remaining ":1,"
maximum ":1},"
studio_seats ":1},"
resource_key ":"
68 c8642d10f094f4d523c4d0986ffa8da884cd48 "},"
files ":[{"
quality ":"
sd ","
type ":"
video / mp4 ","
width ":426,"
height ":240,"
expires ":"
2021 - 03 - 09 T08 : 30: 31 + 00: 00 ","
link ":"
https: //player.vimeo.com/play/1726526696?s=403656164_1615246231_add77f7544404f1526342c7e690b3b8a&sid=c1d2112e88d920fbb03f471d724800a563ce7d741615235431&oauth2_token_id=TOKENID","created_time":"2020-04-03T11:43:54+00:00","fps":25,"size":7471222,"md5":"7689d782970bcf2908a60962ab3da376","public_name":"SD 240p","size_short":"7,13 MB"},{"quality":"hd","type":"video/mp4","width":1920,"height":1080,"expires":"2021-03-09T08:30:31+00:00","link":"https://player.vimeo.com/play/1726526695?s=403656164_1615246231_3492bdb60b0811788c7fa2edbfcd97a9&sid=c1d2112e88d920fbb03f471d724800a563ce7d741615235431&oauth2_token_id=TOKENID","created_time":"2020-04-03T11:43:54+00:00","fps":25,"size":109624080,"md5":"08f70648e72f90c4e4ae46a138cefa90","public_name":"HD 1080p","size_short":"104,55 MB"},{"quality":"sd","type":"video/mp4","width":640,"height":360,"expires":"2021-03-09T08:30:31+00:00","link":"https://player.vimeo.com/play/1726526685?s=403656164_1615246231_bffa2b665f51d2746c2016e938801f41&sid=c1d2112e88d920fbb03f471d724800a563ce7d741615235431&oauth2_token_id=TOKENID","created_time":"2020-04-03T11:43:53+00:00","fps":25,"size":12807378,"md5":"9f6875526f9f605bc25b27c2bc703e9d","public_name":"SD 360p","size_short":"12,21 MB"},{"quality":"sd","type":"video/mp4","width":960,"height":540,"expires":"2021-03-09T08:30:31+00:00","link":"https://player.vimeo.com/play/1726526677?s=403656164_1615246231_862719b962a5b5285f1a4d12ac268874&sid=c1d2112e88d920fbb03f471d724800a563ce7d741615235431&oauth2_token_id=TOKENID","created_time":"2020-04-03T11:43:53+00:00","fps":25,"size":33009616,"md5":"40a21e6de6d75720be5a4a75da15062c","public_name":"SD 540p","size_short":"31,48 MB"},{"quality":"hd","type":"video/mp4","width":1280,"height":720,"expires":"2021-03-09T08:30:31+00:00","link":"https://player.vimeo.com/play/1726526674?s=403656164_1615246231_b69335aee92ae0cf831dabf68b714afa&sid=c1d2112e88d920fbb03f471d724800a563ce7d741615235431&oauth2_token_id=TOKENID","created_time":"2020-04-03T11:43:53+00:00","fps":25,"size":55108808,"md5":"910917dd6efa718002255366640a4c77","public_name":"HD 720p","size_short":"52,56 MB"},{"quality":"hls","type":"video/mp4","expires":"2021-03-08T22:30:31+00:00","link":"https://player.vimeo.com/play/a706f97b-4271-478a-bd95-a76b0d71bb6c/hls?s=403656164_1615242631_adf4e021a2e6070e993d6250407de96a&context=Vimeo\Controller\Api\Resources\User\OnDemand\PurchasesController.&oauth2_token_id=TOKENID","created_time":"2020-04-03T11:43:54+00:00","fps":25,"size":7471222,"md5":"7689d782970bcf2908a60962ab3da376","public_name":"SD 240p","size_short":"7,13 MB"}],"play":{"progressive":[{"type":"video/mp4","codec":"H264","width":426,"height":240,"link_expiration_time":"2021-03-08T23:30:31+00:00","link":"https://vimeo-prod-skyfire-std-us.storage.googleapis.com/01/731/16/403656164/1726526696.mp4?GoogleAccessId=GOOGLW2TRT7BCCZZO5AX&Expires=1615246231&Signature=CKZN9e57Mm5BfZXf16H8P%2FxjYuc%3D","created_time":"2020-04-03T11:43:54+00:00","fps":25,"size":7471222,"md5":"7689d782970bcf2908a60962ab3da376","log":"https://api.vimeo.com/videos/403656164/log/1726526696/1615235431/c9808569f9609310a14d482ba48bf705fdd46244"},{"type":"video/mp4","codec":"H264","width":1920,"height":1080,"link_expiration_time":"2021-03-08T23:30:31+00:00","link":"https://vimeo-prod-skyfire-std-us.storage.googleapis.com/01/731/16/403656164/1726526695.mp4?GoogleAccessId=GOOGLW2TRT7BCCZZO5AX&Expires=1615246231&Signature=F%2BOlRlZ7e6UekyLAvHiwxPYaQyo%3D","created_time":"2020-04-03T11:43:54+00:00","fps":25,"size":109624080,"md5":"08f70648e72f90c4e4ae46a138cefa90","log":"https://api.vimeo.com/videos/403656164/log/1726526695/1615235431/0af85d63b11a343d18c8e1ae5841b181068eb37c"},{"type":"video/mp4","codec":"H264","width":640,"height":360,"link_expiration_time":"2021-03-08T23:30:31+00:00","link":"https://vimeo-prod-skyfire-std-us.storage.googleapis.com/01/731/16/403656164/1726526685.mp4?GoogleAccessId=GOOGLW2TRT7BCCZZO5AX&Expires=1615246231&Signature=7o2k3LZCA%2BYlhF8QYM7g62GETyI%3D","created_time":"2020-04-03T11:43:53+00:00","fps":25,"size":12807378,"md5":"9f6875526f9f605bc25b27c2bc703e9d","log":"https://api.vimeo.com/videos/403656164/log/1726526685/1615235431/eafec3fe459539313964ef5cf7058666db5cf51c"},{"type":"video/mp4","codec":"H264","width":960,"height":540,"link_expiration_time":"2021-03-08T23:30:31+00:00","link":"https://vimeo-prod-skyfire-std-us.storage.googleapis.com/01/731/16/403656164/1726526677.mp4?GoogleAccessId=GOOGLW2TRT7BCCZZO5AX&Expires=1615246231&Signature=Ef%2FkNjZmcC%2FbtL2jDqjjH6rArQQ%3D","created_time":"2020-04-03T11:43:53+00:00","fps":25,"size":33009616,"md5":"40a21e6de6d75720be5a4a75da15062c","log":"https://api.vimeo.com/videos/403656164/log/1726526677/1615235431/8b9f028356746fb1e05924ad2187b71fc92ab0a2"},{"type":"video/mp4","codec":"H264","width":1280,"height":720,"link_expiration_time":"2021-03-08T23:30:31+00:00","link":"https://vimeo-prod-skyfire-std-us.storage.googleapis.com/01/731/16/403656164/1726526674.mp4?GoogleAccessId=GOOGLW2TRT7BCCZZO5AX&Expires=1615246231&Signature=ujpN5vURBmALmkp1SX8KgOmwWmY%3D","created_time":"2020-04-03T11:43:53+00:00","fps":25,"size":55108808,"md5":"910917dd6efa718002255366640a4c77","log":"https://api.vimeo.com/videos/403656164/log/1726526674/1615235431/444453a8807c51dc285b743148b9f66be363ddc4"}],"hls":{"link_expiration_time":"2021-03-08T22:30:31+00:00","link":"https://player.vimeo.com/play/a706f97b-4271-478a-bd95-a76b0d71bb6c/hls?s=403656164_1615242631_adf4e021a2e6070e993d6250407de96a&context=Vimeo\Controller\Api\Resources\User\OnDemand\PurchasesController.&logging=false","log":"https://api.vimeo.com/videos/403656164/log/hls/1615235431/6542bdefb2d4110c27f11c4bf076ebd682fc1e44"},"dash":{"link_expiration_time":"2021-03-08T22:30:31+00:00","link":"https://player.vimeo.com/play/a706f97b-4271-478a-bd95-a76b0d71bb6c/dash?s=403656164_1615242631_adf4e021a2e6070e993d6250407de96a&context=Vimeo\Controller\Api\Resources\User\OnDemand\PurchasesController.&logging=false","log":"https://api.vimeo.com/videos/403656164/log/dash/1615235431/00923a2306da6f3cf9baf82eb07184be1b0ae6ff"},"status":"playable"},"app":null,"status":"available","resource_key":"31b4d4c3ae14871895ee4699bc5b52230526b739","badge":{"type":"vod","festival":null,"link":"https://vimeo.com/ondemand","text":"Vimeo On Demand","pictures":{"uri":null,"active":true,"type":"custom","sizes":[{"width":60,"height":66,"link":"https://i.vimeocdn.com/video_badge/vod_60x66.png"},{"width":120,"height":131,"link":"https://i.vimeocdn.com/video_badge/vod_120x131.png"},{"width":200,"height":219,"link":"https://i.vimeocdn.com/video_badge/vod_200x219.png"},{"width":300,"height":328,"link":"https://i.vimeocdn.com/video_badge/vod_300x328.png"},{"width":400,"height":438,"link":"https://i.vimeocdn.com/video_badge/vod_400x438.png"}],"resource_key":"e013a37de4198e3c43dd998eeddf215ea510c96e","default_picture":false}},"upload":{"status":"complete","link":null,"upload_link":null,"complete_uri":null,"form":null,"approach":null,"size":null,"redirect_url":null},"transcode":{"status":"complete"},"is_playable":true,"vod":{"id":221615}},"user":{"uri":"/users/USERNUMBER","name":"Bodo Wartke","location":"","bio":"Herzlich Willkommen auf meinem offiziellen Vimeo-Kanal! Viele weitere Lieder, Infos, alle Tourdaten und mehr findet ihr auf: http://www.bodowartke.de/\n\nViel Spaß!\n\nEuer Bodo","membership":{"type":"pro","display":"PRO","badge":{"type":"pro","text":"PRO","alt_text":"Erfahre mehr über Vimeo PRO","url":"/pro"}},"pictures":{"sizes":[{"width":30,"link":"https://i.vimeocdn.com/portrait/9796936_30x30"},{"width":72,"link":"https://i.vimeocdn.com/portrait/9796936_72x72"},{"width":75,"link":"https://i.vimeocdn.com/portrait/9796936_75x75"},{"width":100,"link":"https://i.vimeocdn.com/portrait/9796936_100x100"},{"width":144,"link":"https://i.vimeocdn.com/portrait/9796936_144x144"},{"width":216,"link":"https://i.vimeocdn.com/portrait/9796936_216x216"},{"width":288,"link":"https://i.vimeocdn.com/portrait/9796936_288x288"},{"width":300,"link":"https://i.vimeocdn.com/portrait/9796936_300x300"},{"width":360,"link":"https://i.vimeocdn.com/portrait/9796936_360x360"}]},"metadata":{"connections":{"albums":{"total":14},"channels":{"uri":"/users/USERNUMBER/channels","total":0},"feed":{"uri":"/users/USERNUMBER/feed"},"followers":{"uri":"/users/USERNUMBER/followers","total":177},"following":{"uri":"/users/USERNUMBER/following","total":0},"likes":{"uri":"/users/USERNUMBER/likes","total":0},"moderated_channels":{"uri":"/users/USERNUMBER/channels?filter=moderated","total":1},"videos":{"uri":"/users/USERNUMBER/videos","total":144},"pictures":{"uri":"/users/USERNUMBER/pictures","options":["GET","POST"],"total":1},"folders_root":{"uri":"/users/USERNUMBER/folders/root"}},"interactions":{"follow":{"added":false,"uri":"/users/myuseraccountnumber/following/USERNUMBER"}}},"live_quota":{"status":"available"},"resource_key":">resourcekey<"}}]}
0

Seems Vimeo now has a new product and will probably discontinue video ondemand:

Vimeo On Demand is not currently available to new sellers. To start selling content today, use Vimeo OTT.


ASP.NET Core 3.0 Blazor Server app does not start when adding browser logging

I'm trying to add the BlazorExtension.Logging library to my ASP.NET Core 3.0 application and I'm getting the following error that suggests some circular dependency issue between IJSRuntime and BrowserConsoleLogger :
System.AggregateException
  HResult=0x80131500
  Message=Some services are not able to be constructed
  Source=Microsoft.Extensions.DependencyInjection
  StackTrace:
   at Microsoft.Extensions.DependencyInjection.ServiceProvider..ctor(IEnumerable`1 serviceDescriptors, ServiceProviderOptions options)
   at Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(IServiceCollection services, ServiceProviderOptions options)
   at Microsoft.Extensions.DependencyInjection.DefaultServiceProviderFactory.CreateServiceProvider(IServiceCollection containerBuilder)
   at Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1.CreateServiceProvider(Object containerBuilder)
   at Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider()
   at Microsoft.Extensions.Hosting.HostBuilder.Build()
   at CareSwitch.Program.<Main>d__0.MoveNext() in C:\Users\MarkFayngersh\source\repos\CareSwitch Blazor\Program.cs:line 18

Inner Exception 1:
InvalidOperationException: Error while validating the service descriptor 'ServiceType: Microsoft.Extensions.Hosting.IHostApplicationLifetime Lifetime: Singleton ImplementationType: Microsoft.Extensions.Hosting.Internal.ApplicationLifetime': A circular dependency was detected for the service of type 'Microsoft.JSInterop.IJSRuntime'.
Microsoft.Extensions.Hosting.IHostApplicationLifetime(Microsoft.Extensions.Hosting.Internal.ApplicationLifetime) -> Microsoft.Extensions.Logging.ILogger<Microsoft.Extensions.Hosting.Internal.ApplicationLifetime>(Blazor.Extensions.Logging.BrowserConsoleLogger<Microsoft.Extensions.Hosting.Internal.ApplicationLifetime>) -> Microsoft.JSInterop.IJSRuntime(Microsoft.AspNetCore.Components.Server.Circuits.RemoteJSRuntime) -> Microsoft.Extensions.Logging.ILogger<Microsoft.AspNetCore.Components.Server.Circuits.RemoteJSRuntime>(Blazor.Extensions.Logging.BrowserConsoleLogger<Microsoft.AspNetCore.Components.Server.Circuits.RemoteJSRuntime>) -> Microsoft.JSInterop.IJSRuntime

Inner Exception 2:
InvalidOperationException: A circular dependency was detected for the service of type 'Microsoft.JSInterop.IJSRuntime'.
Microsoft.Extensions.Hosting.IHostApplicationLifetime(Microsoft.Extensions.Hosting.Internal.ApplicationLifetime) -> Microsoft.Extensions.Logging.ILogger<Microsoft.Extensions.Hosting.Internal.ApplicationLifetime>(Blazor.Extensions.Logging.BrowserConsoleLogger<Microsoft.Extensions.Hosting.Internal.ApplicationLifetime>) -> Microsoft.JSInterop.IJSRuntime(Microsoft.AspNetCore.Components.Server.Circuits.RemoteJSRuntime) -> Microsoft.Extensions.Logging.ILogger<Microsoft.AspNetCore.Components.Server.Circuits.RemoteJSRuntime>(Blazor.Extensions.Logging.BrowserConsoleLogger<Microsoft.AspNetCore.Components.Server.Circuits.RemoteJSRuntime>) -> Microsoft.JSInterop.IJSRuntime

Error goes away as soon as I remove the call to .AddBrowserConsole().
Versions

ASP.NET Core Blazor Server app - v3.0.0
Blazor.Extensions.Logging - v1.0.0

Noticed the blazor-wasm tag was added, just wanted to clarify that this is only an issue when using the Server hosted model. It appears to work fine when using wasm.

Thanks for contacting us, @pheuter.
The library you depend on requries an ILogger, which results in a circular dependency. You should follow up with the referenced library owner to get that fixed.


Money and Tps Not Working

My tps only shows %tps% and my money wont show the correct balance i have 15k but it still said 0

Hi there!
Are you using vault?
What server jar are you using?

Sorry im new, uhm no i dont use vault and i am using paper

Is Vault in the latest version?
Does the same error occur on a normal spigot jar?

Uhm do i need to download vault? and i dont know because im using paper but using spigot plugins works well

yes you need to download vault in order to display money

hello i downloaded vault the latest and now my scoreboard says all "RealScoreboard" what happen

@DeavMaxy do /plugins and /version, then send a screenshot of those 2 values...


Generate extras for rosebones

👋 I really like your light vim themes!
Is there a chance we could get the alacritty and tmux files generated for rosebones and forestbones?
I can probably try to create PR tonight 🙂

Hello. They are not generate because rose-pine and everforest already provides themes for alacritty. For tmux, the theme usually is defined by user config, but maybe we could generate as well.


[IDEA] Use cloudflare to cache and save on bandwidth

So this is not a real issue but just an idea.
I see that today, loading badgen.net takes 144 KB of bandwidth, and it will become bigger every time new badges are added.

As you said on your comment,  the bandwidth usage is already pretty high, and I guess the index page is a big part of it.
Also, the response time on uptime robot is now > 500ms, which is a lot more than a few weeks ago.
Maybe you could use the free plan of Cloudflare to cache live badges for a few minutes, and static badges for a whole week!
Docs and index could also be cached for a few minutes
It could even prevent occasional downtime

I assume the total bandwidth usage (in Zeit's dashboard) is already include cached responses.
Currently live badge are cached 3~4 minutes, static badge are cached 1 year, docs pages are cached 1 day, by Now CDN (Cloudflare). Plus 60 seconds cache on user's browser.
Here's scale rules for badgen.net, I never saw it spin up a second instance, so the server load should be fine (by now):
  Scale
    dc          min        max        current
    sfo1         1          2            1
    bru1         1          2            1

  Events
    2018-08-13T15:01:12.811Z state INITIALIZING
    2018-08-13T15:01:14.193Z build-start
    2018-08-13T15:01:31.432Z build-complete
    2018-08-13T15:01:31.490Z state READY
    2018-08-13T15:01:33.000Z instance-start (sfo1)
    2018-08-13T15:02:14.000Z instance-start (bru1)
    2018-08-13T15:02:17.074Z scale-set
    2018-08-13T15:02:41.688Z scale-set
    2018-08-13T15:02:51.368Z scale-set
    2018-08-13T15:02:59.716Z scale-set

But I'm not sure why response time rise from ~300ms to ~500ms recently 🤔

Changed the response badge to /npm/v/ava, formerly it's response time from home page.
BTW, saw a traffic spike yesterday :D
  Scale
    dc          min        max        current
    sfo1         1          3            1
    bru1         1          3            1

  Events
    2018-08-22T14:24:37.763Z state INITIALIZING
    2018-08-22T14:24:39.794Z build-start
    2018-08-22T14:25:10.403Z build-complete
    2018-08-22T14:25:10.463Z state READY
    2018-08-22T14:25:12.000Z instance-start (sfo1)
    2018-08-22T14:25:52.262Z scale-set
    2018-08-22T14:25:54.000Z instance-start (bru1)
    2018-08-22T14:26:23.066Z scale-set
    2018-08-22T14:26:28.493Z scale-set
    2018-08-22T14:26:34.937Z scale-set
    2018-08-23T05:29:52.000Z instance-start (sfo1)
    2018-08-23T09:12:31.000Z instance-stop (sfo1)

So, the cache you're talking about is browser cache, meaning I won't call the API multiple times if I reload the index page again and again.
However, if 100 different people visit badgen.net in a short time interval,  you will consume 100 * 144kB = 14Mb of bandwidth!
That's where a cloudflare layer could be useful: it would remember the badges responses and serve them again until the cache expires, without even calling the badgen API

Currently live badge are cached 3~4 minutes, static badge are cached 1 year, docs pages are cached 1 day, by Now CDN (Cloudflare)

These are CDN cache by cloudflare. Cache status can be verified by:
curl 'https://badgen.net/npm/v/next' -sI | grep 'cf-cache-status'
#> cf-cache-status: HIT

Maybe you could use the free plan of Cloudflare to cache live badges for a few minutes, and static badges for a whole week!

You can't. Badge service is a tricky thing. Users are constantly updating things, so you can't just say "cache everything for few days or weeks".
And with "tricky" i mean, that it should be fresh and not cache, by design. Yea, some small & smart caches is okey, but not aggressive caching.
As about the home page.. I would answer "And what?". It's preview and that's normal, users are not using the home page, but few badges at their readmes.
But yea, there is a way to decrease the stats for the homepage. Show only Usage & Example's Static sections, but not the Live badges section. And provide search. But still, that's not cool thing, because forces interested people to do more (e.g. type in a search field) - it's just not cool and it's not beautiful.

All right, I didn't realize Now CDN was using Cloudflare ! That's great!
They don't tell if your bandwidth quota is consumed though, but I hope the answer is no..
@olstenlarck The live badges in the home page are just examples, they don't need to be exact all the time! I don't know how, but badges could have a longer cache time when seen from the homepage...
I'm just throwing ideas here, cause I think that homepage is using a huge part of your server's ressources, but again, they're juste ideas, I don't have real solutions right now

Now CDN is really a helpful & important cache layer for Badgen Service, glad we have it since the beginning. 💪


room.lastMessages returning empty list

I'm trying to get the last messages that was sent in a room using room.lastMessages but I'm always getting an empty list even when the room does have some messages in it, what am I missing?
Thanks for the awesome package btw.

Did you set up and tested the cloud function that will set them? It will not work out of the box

Oh, I didn't, let me do that, thanks.

how to set up and test the cloud function that will set them? any guide

@AndroidDev-Rehan no guides, there are some basic examples in the docs, everything else is Firebase documentation and your code :)


Comments

@jessopb @NetOperatorWibby will do styling and presentation work for this. Please involve him once routing/redux portion is complete.

@jessopb @netoperatorwibby check out https://storybook.js.org/ and see if it's worth trying for the work on this, @seanyesmunt says it could be useful (I haven't done a deep dive yet)

This is blocked by SDK issues (not sure issue exists)

closed - refer to #2510


Support a MyMonero-compatible wallet

This issue requests support for an implementation of the MoneroWallet.js interface which allows the wallet's view key to be shared with a 3rd party in order to offload processing of incoming transactions.
By implementing the MoneroWallet.js interface, the adapter will conform to this library's specification and plug into existing tests.

Hello! Our wallet software are now using MyMonero-compatible backend, we are considering to switch to monero-javascript implementation if we be able to run it alongside our backend services. @woodser what you think basically needs to be done on monero-javascript side to accomplish this? I am now lurking through the source, just looking how hard it may be to do it.

Ideally another implementation of MoneroWallet.js is added to monero-javascript which supports a MyMonero-style backend.  Then applications like yours can use a single library and wallet interface to manage multiple wallet architectures.
Currently monero-javascript supports monero-wallet-rpc (MoneroWalletRpc.js) and fully local wallets using WebAssembly (MoneroWalletWasm.js and MoneroWalletKeys.js for local keys-only management) which can be used alongside your current implementation.
To support a MyMonero-style backend in monero-javascript, a new wallet implementation would be added, e.g. src/main/js/wallet/MoneroWalletRemoteViewKey.js, which extends and implements the methods of MoneroWallet.js.
For testing, we'd use the existing test suite to test the new wallet implementation by adding a new test class, e.g. src/test/TestMoneroWalletRemoteViewKey.js in the same style as the existing TestMoneroWalletRpc.js and other wallet test classes.
It would be great getting help to support such a backend by conforming what you have to the MoneroWallet.js interface for inclusion in monero-javascript.

@pitersky Do you have a link to your work for reference?

Appreciate description very much, thank you, that helps a lot. I don't have any code to share yet, if you mean it by "my work". Anyway I have started to work on this issue. I plan to make a PR if I will get it to work.

@woodser would something like this speak to what you're looking to do here.
https://github.com/mymonero/mymonero-utils/tree/master/packages/mymonero-wallet-manager
This package uses https://github.com/mymonero/mymonero-utils/tree/master/packages/mymonero-lws-client for speaking to the server and https://github.com/mymonero/mymonero-utils/tree/master/packages/mymonero-monero-client to use the wasm code.
Trying to reduce the complexity of wasm files where possible is an ongoing process. The idea is to extend this to allow an rpc connection if a person chooses to use it that way.

@devinpearson Yes it looks like these assets could be used to implement the interface in monero-javascript, MoneroWallet.js, by sharing the wallet's view key with a light wallet server for scanning.

And this one Monero light-wallet Server

@trasherdk monero-lws is supported in the package I’ve linked. OpenMonero should be as well.


Add support for React version display

Description
Added support for displaying React version
Screenshot

Do you really need to use python for this?

Do you really need to use python for this?

No, tldr: For performance jq, or python are used first to parse the version from package.json` with node as a fallback.
This PR re-purposes code from the existing Package section which states:

We use jq, python to parse package version for improving performance and node as a fallback.

I am using the exact same logic for parsing the package.json of a React app that the existing Package section is using: jq first, then python for improving performance with node as a fallback.

What needs to happen for this to thaw?

What needs to happen for this to thaw?

Good job!

There were merge conflicts that are now resolved.

I've moved the code from this section to https://github.com/spaceship-prompt/spaceship-react
This is an external section that can be installed along the spaceship. I also invited @RyanNerd to the repo to maintain this section. Thanks for contributing!
P.S: Let me know if anyone wants to pick up maintaining this section.

how to disable this feature please?