Allow null authentication via a CustomOAuth20RefreshTokenFactory

This PR is a follow-up of: https://github.com/apereo/cas/pull/5858 focused on refresh tokens.
Refresh tokens are the most criticial tokens in the storage as they last the longest time. Removing the descendantTickets is a first optimization. Though, we can notice that the authentication object exists twice in it: at the root and in the TGT.
This PR proposes to not populate anymore the direct RT authentication and rely on the one provided by the TGT. For big profiles, this small change can save a lot of space.

Could you please clarify what you mean by the authentication object exists twice in it: at the root and in the TGT? Which is the "root"?

Furthermore, I don't think this change is right. The authentication object attached to an RT may not always be the same thing as the authn object attached to the TGT. The former is built on the fly, usually.

In the OAuth20DefaultRefreshToken (like in the OAuth20DefaultAccessToken), there are the authentication and the ticketGrantingTicket properties and in its ticketGrantingTicket property, there is a very similar authentication property.
For a user with many attributes or big attributes, the duplication is costly.

I may have missed failing tests and use cases, but I only see one place which is impacted by having a null authentication property in the OAuth20DefaultRefreshToken: in the OAuth20DefaultTokenGenerator. This makes me think that we could bypass this information...

For a user with many attributes or big attributes, the duplication is costly.

I would agree, and I suspect the solution here has side effects. I should of course verify this, but if you remove the TGT that is the parent for an RT and the RT is also not removed, this change would then mean that the RT has no valid authentication object attached to it. Its authentication is void, and its parent entity is now dead and expired and removed. So the RT becomes an orphan, and while this may not cause a problem now, it will surely cause problems in the future.
I submit the solution should not be to null out the authentication. The solution should likely be to somehow decouple the ticket-granting ticket from the RT. The RT must have its own authentication and it must somehow maintain a link to its parent TGT not via a full TicketGrantingTicket object, but perhaps via just the ID of the TGT. This is just a theory, and in the end may require additional changes, but regardless, we cannot have or maintain orphan tickets even if all the tests pass today.

I understand. You are the voice of the wisdom ;-)
This solution is a bit fragile and may have side effects (although I don't see them when testing).
I guess this would be a big change, too late for the last RC9 of v7. In any case, just let me know how I can help on this.
About this PR, I reverted the null authentication: https://github.com/apereo/cas/pull/5863/commits/ea56a51f815b531950a3581c91b133de4e83ec6c
Though, I'd like to keep the small changes to allow this customisation (null authentication via a CustomOAuth20RefreshTokenFactory). This could be critical for some deployments I know who have very high load.

That is totally fine, thank you. We could surely revisit this perhaps in 7.1 or later.
To be sure, have you verified that tests do cover statements like this already?
            var authn = requestHolder.getAuthentication();
            if (authn == null) {
                authn = requestHolder.getTicketGrantingTicket().getAuthentication();
            }

I gave this some more thought and looked around; I think nulling out the authentication object should be safe even in the scenario that I mentioned. But to be extra sure, it would be great to have a puppeteer test to demonstrate and prove this scenario:

config option: child tickets are tracked in the TGT, cas.ticket.track-descendant-tickets=false
login, get AT and RT, and logout, etc. Verify TGT is removed and gone, but both RT and AT remain valid.
Ask the RT to issue ATs.
In the registered service policy, make sure RTs are renewed every time a new AT is generated.

If this scenario passes, I think we should be good :) (or 90% covered).
You can help with this part if you have the time, or let me know and I'll see what I can cook something up. (We can also do this later after v7)
Thanks again! (and sorry for the back and forth)

I just saw your latest comment on the Puppeteer test.
Meanwhile, I have added two unit tests to confirm that the "if" statement is really called and works. I think this might be enough.
Are we good for the merge?

As it stands, yes this looks great, thank you. We can merge.
Would you like to investigate this further maybe separately, or leave that up to me?

No problem. I will take care of that on #5861 after I sync with master as well as checking all OAuth tests.

Wonderful, merci beaucoup!

I'm now focusing on https://github.com/apereo/cas/pull/5863#issuecomment-1822345232.

I just add a new Puppeteer test (inspired by oidc-authzcode-refresh-token): https://github.com/apereo/cas/pull/5861/commits/f9e38455761bb7b14c8147cd3a6cc4d57cc88b85
This should meet your expectations, except the part: "In the registered service policy, make sure RTs are renewed every time a new AT is generated.": I'm not sure what you mean here...

In the registered service policy, make sure RTs are renewed every time a new AT is generated

Right, let me clarify please:
https://apereo.github.io/cas/development/authentication/OAuth-Authentication-Clients.html
Make sure you test with both generateRefreshToken, and renewRefreshToken  set to true.

This should be good now: https://github.com/apereo/cas/pull/5861/commits/2081cc102ffda66ed35650a79fe94147d1b155ac


ColorPicker: Adding safety code to property modification - Fix for issue #21462

Summary of the Pull Request
Blocking endless loop on property change which led to very high memory consumption

PR Checklist

[X] Closes: #21462
[ ] Communication: I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected
[ ] Tests: Added/updated and all pass
[ ] Localization: All end user facing strings can be localized
[ ] Dev docs: Added/updated
[ ] New binaries: Added on the required places

[ ] JSON for signing for new binaries
[ ] WXS for installer for new binaries and localization folder
[ ] YML for CI pipeline for new test projects
[ ] YML for signed pipeline

[ ] Documentation updated: If checked, please file a pull request on our docs repo and link it here: #xxx

Detailed Description of the Pull Request / Additional comments
From the provided logs it is clear that there is an endless loop calling the settings save method. It is called from one place, from a property change handler. And indeed, inside the property changed handler method the property is updated. Security code added to avoid the endless loop.

Validation Steps Performed
Could not reproduce the original problem but the found endless loop is blocked.

Would you be so kind to update the title a bit to be a bit more descriptive? :)

@jaimecbernardo if we are going to hotfix, thoughts on adding this in too?

@jaimecbernardo if we are going to hotfix, thoughts on adding this in too?

Sounds good!


[NEW] Add french translation

French translation of Rocket.Chat desktop application.

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.Guillermo PEREZ seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.

You forgot some properties to translate. Check against latest rocket Chat dev Version.


"Topana" is listed in the drop-down menu

Description:
"Topana" is listed in the drop-down menu alongside its corresponding county according to the law
Precondition:
The website is up an running.

Step 1
Type "Topana" in the search bar.

Expected results
The location is listed in the drop-down menu as "Comuna Topana, OLT".


Auxiliary

Description
Please include a summary of the change and which is fixed.

Rename categories
Fix https://github.com/Samsung/CredData/issues/71
round benchmark scores to 10^-6

How has this been tested?
Please describe the tests that you ran to verify your changes.

[x] UnitTest
[ ] Benchmark

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (2a53a44) 90.44% compared to head (2fb5ef7) 90.44%.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #498   +/-   ##
=======================================
  Coverage   90.44%   90.44%
=======================================
  Files         127      127
  Lines        4335     4335
  Branches      695      695
=======================================
  Hits         3921     3921
  Misses        273      273
  Partials      141      141

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


Prepare release 4.6.0

Overview
This PR prepares release 4.6.0
Related Issue / Discussion
Additional Information
Contribution Agreement
(as per https://github.com/geopython/pywps/blob/master/CONTRIBUTING.rst#contributions-and-licensing)

[ ] I'd like to contribute [feature X|bugfix Y|docs|something else] to PyWPS. I confirm that my contributions to PyWPS will be compatible with the PyWPS license guidelines at the time of contribution.
[x] I have already previously agreed to the PyWPS Contributions and Licensing Guidelines

coverage: 84.092% (+0.03%) from 84.061% when pulling 53b0c81c25629995bb156a4e08582317fe2f9e7b on cehbrecht:prepare-release-4.6.0 into 53b0c81c25629995bb156a4e08582317fe2f9e7b on geopython:main.


Change orthography profile format default to "csv"

The "prf" ending creates inconveniencies for unexperienced users, as they usually do not know how to quickly open them in spreadsheet software. Furthermore, on github, they are displayed as pure text, rather than the table-form which would make it easier to discuss, comment, and inspect online. Using "tsv", as "\t" is the default separator, seems like the best solution with github as a sharing platform in mind, and usually, "tsv" will be opened automatically in spreadsheet software on the major platforms. All that needs to be done then is to add some tutorial that illustrates to non-programmers how to save the files in text form and utf8.

Sounds good. Me I prefer transparent file naming, so I'm ok with TSV or CSV, since that's the file format for profiles. And thanks for this suggestion!
I'm having a hard time keeping up with all the work being done on lexibank -- are you using the segments package at all over there? If so, I can give this the highest priority. I'm working on a couple of case studies (Juptyer notebooks to go with the book) at the moment, so I could crank out the changes ASAP if that's helpful.

yes, the tokenizer of segments is used by default when an orthography profile is defined for a dataset. As far as I can tell, the segments package is completely agnostic with regards to the filename extension of profiles, see
$ grep -r "prf" segments | grep -v pyc
segments/tests/test_tokenizer.py:        self.t = Tokenizer(_test_path('test.prf'))
segments/tests/test_tokenizer.py:        t = Tokenizer(_test_path('test.prf'), errors_replace=lambda c: '<{0}>'.format(c))
segments/tests/test_tokenizer.py:        t = Tokenizer(_test_path('test.prf'), errors_replace=lambda c: '?')
segments/tests/test_cli.py:            Mock(args=[os.path.join(os.path.dirname(__file__), 'test.prf')],

So I guess the question is only, if the extension is part of the profile specification in the book. In any case, I think this issue can be closed.

The book simply says:
A1. A profile is a unicode UTF-8 encoded text file, ideally using NFC, no- BOM, and LF (see Section 2.11), that includes the information pertinent to the orthography.
A2. A profile is a tab-separated CSV file with an obligatory header line
So, yeah it doesn't matter what the file is named (but I can go ahead and update the .prf files and the calls to them in segments to be a bit more transparent, and so that they will display nicely in Git.)

Ok. Thanks for the info! So allowing comment lines in profiles is a feature (or a bug? :) ) of segments. Maybe this should be documented somewhere - or this should be added to the book?

As of now, I think the consequent use of csv and the usage of columns to
add comments, etc., would even allow to get rid of comments in the
profile, making it also more convenient to edit them in spreadsheet
software. One may think of restricting the conversion procedure in
segments, as we currently use IPA, and other things, so that people
don't convert to their comments (but on the other hand: who is going to
to that? and I enjoy the flexibility)

Are you using comments in profiles in lexibank? We wrote here:
A4. Separate lines with comments are not allowed. Comments that be- long to specific lines will have to be put in a separate column of the CSV file, e.g. add a column called comments.
and that we put metadata in a separate file:
A3. Metadata are added in a separate UTF-8 text file using a basic tag: value format. Metadata about the orthographic description given in the orthography profile includes, minimally, (i) author, (ii) date, (iii) title of the profile, (iv) a stable language identifier encoded in BCP 47/ISO 639-3 of the target language of the profile, and (v) bibliographic data for resource(s) that illustrate the orthography described in the profile. Further, (vi) the tokenization method and (vii) the unicode normalisation used should be documented here (see below).
So, yes then my own test profiles are indeed bad because they include comments! Nice catch.
In the book the formal specification is on pages 82--86. Those might need to be updated, but right now yes, no comments.
(And you can tell Michael wrote this bit because he uses British spelling. Will have to fix that.)

Good! I think this is a clear case: @LinguList sorry, no flexibility! :)
So, yes, let's kick out the comment handling in segments! Does this go for the rules file as well?

But we should add a comment column when creating an initial profile running segments profile, maybe?

@bambooforest and maybe the book should add glottocodes as valid language identifiers :)

But one thing that NEEDS to be supported is to allow me to add a user-defined column for conversion (I'm fine with having to specify it in metadata), so I want to have different layers, like "IPA", "CLPA", whatever, you see? Fixing the "comment" to be always COMMENT is fine, and I agree there's no need for inline comments.

@LinguList  But one can have any number of columns in orthography profiles already.

Yes, we can kick out comment handling.
A5. A minimal profile consists of a single column with a header called Grapheme, listing each of the different graphemes in a separate line.  The name of this column is crucial for automatic processing.
That's the basic basic. Michael's version in R makes use of Left and Right context columns:
A6. Optional columns can be used to specify the left and right context of the grapheme, to be designated with the headers Left and Right, re- spectively.  e same grapheme can occur multiple times with different contextual specifications, for example to distinguish different pronunciations depending on the context.
For him this was particularly important for processing Dutch orthography. He went as far as:
A7. The columns Grapheme, Left and Right can use regular expres- sion metacharacters. If regular expressions are used, then all literal us- age of the special symbols, like full stops <.> or dollar signs <$> (so-called metacharacters) have to be explicitly escaped by adding a backslash be- fore them (i.e. use <.> or <$>). Note that any specification of context au- tomatically expects regular expressions, so it is probably be er to always escape all regular expression metacharacters when used literally in the or- thography.  e following symbols will need to be preceded by a backslash: {}| +*.-!?ˆ$ and the backslash \ itself.
It's optional because we didn't agree on this approach and I never implemented it in segments. Something else optional -- and I think this fits in with @LinguList 's IPA, CLPA, etc:
A8. An optional column can be used to specify classes of graphemes, to be identified by the header Class. For example, this column can be used to define a class of vowels. Users can simply add ad-hoc identifiers in this column to indicate a group of graphemes, which can then be used in the description of the graphemes or the context.
Again, you can add whatever you want:
A10. Any other columns can be added freely, but will mostly be ignored by any software application using the profiles.

We do state that:
B1. Each line of a profile will be interpreted as a regular expression. So ware applications using pro files can also o er to interpret a profile in the literal sense to avoid the necessity for the user to escape regular expressions metacharacters in the profile. However, this only is possible when no contexts or classes are described, so this seems only useful in the most basic orthographies.
And this part then also gets hung up on the Left, Right context processing needed for the tricker cases of orthographic parsing (as in Dutch).
B2. The class column will be used to produce explicit or chains of regular expressions, which will then be inserted in the Grapheme, Left and Right columns at the position indicated by the class-identiers. For exam- ple, a class called V as a context specification might be replaced by a regular expression like: (a|e|i|o|u|ei|au). Only the graphemes themselves are included here, not any contexts specified for the elements of the class. Note that in some cases the ordering inside this regular expression might be crucial.

@xrotwang, yes, but I wanted to make sure this stays like that ;-)

So that's another bug in segments: Currently we identify the Grapheme column by checking
if not self.column_labels and tokens[0].lower().startswith("graphemes"):
    ...

when we should check =='Grapheme' for any of the columns, right?

@xrotwang -- indeed this is a bug. We aren't explicit about it being first (I think that was Mattis's suggestion at one point and I just internalized it).

Ok. I'll put together a PR getting the code in line with the spec. We can't give any URL for the spec yet, can we?

Note also some issues that came up in the long thread on lexibank including errors/left-over characters, and separateor, we write:
B9. Leftover characters, i.e. characters that are not matched by the profile, should be reported to the user as errors. Typically, the un- matched character are replaced in the tokenization by a user-specified symbol-string.
Any so ware application offering to use orthography profile:

should offer user-options to specify:

C1. the name of the column to be used for transliteration (if any).
C2. the symbol-string to be inserted between graphemes. Option- ally, a warning might be given if the chosen string includes characters from the orthography itself.
C3. the symbol-string to be inserted for unmatched strings in the
tokenized and transliterated output.
C4. the tokenization method, i.e. whether the tokenization should pro-
ceed global or linear (see B6 above).
C5. unicode normalization, i.e. whether the text-string and profile should
use NFC or NFD.

@xrotwang -- indeed this is a bug. We aren't explicit about it being first (I think that was Mattis's suggestion at one point and I just internalized it).

Yep, but it's useful to have this structure, as it is the source graphemes you are working with, right? LIke the ID, the thing you check for uniqueness, so keepign it in the first column is useful.

I was planning on put the book, use cases and specs here:
https://github.com/unicode-cookbook

@LinguList I guess keeping it in the first column is useful, but wouldn't force this. Since arbitrary other columns are allowed, it could easily be the case, that one of these is even more important for a particular use case. E.g. a Category column, maybe with values typo, which would signal to the linguist editing the profile: "don't spend time on this weird grapheme" ...

I see and agree.

@bambooforest Considering that arbitrary additional columns are allowed and the format is specified as CSV also means, we cannot parse the profile naively, using line.split('\t'), because it may contain quoted cells with tabs, etc. Since python's csv module differs notably between 2.7 and 3.4, I think we need to use a protable csv reader library. My go-to library is clldutils :) This would add some unnecessary dependencies, but I think overall would be worth it (we'd also get object-oriented path handling and could throw out the docopt dependency). Ok with this?

sgtm. we're the only ones using the library and cli, so let requests come if anyone else starts using it. :)

I think this can  be closed now.


Repo does not have .pre-commit-hooks.yaml

I added yor to one of my repos' .pre-commit-config.yaml files with settings taken from the readme:
- repo: https://github.com/bridgecrewio/yor
    rev: 5d56b61447940e9928426e4df6b577f28000cd6d  # frozen: v0.1.65
    hooks:
      - id: yor
        name: yor
        entry: yor tag -d
        args: ["terraform"]
        language: golang
        types: [terraform]
        pass_filenames: false

Then added the config file to a git branch so that I could execute pre-commit run and try it out, but an exception was thrown during initialization:
$ pre-commit run
[INFO] Initializing environment for https://github.com/bridgecrewio/yor.
An error has occurred: InvalidManifestError:
=====> /Users/gwhorley/.cache/pre-commit/repoxhvlei6s/.pre-commit-hooks.yaml does not exist
Check the log at /Users/gwhorley/.cache/pre-commit/pre-commit.log

The log only provided a stacktrace along with the error shown above. The contents of that cached directory contains the cloned repo with no .pre-commit-hooks.yaml. What am I missing?

@JamesWoolfenden mind taking a look at this?


multipe tables - dynamic tables

Hi,
I am going to try and make dynamic tables. I wonder if it is possible at all?
What I need to do is based on what user clicks, I want to open a new table in a accordion panel.
Each table must have its own data and its own sources , and its own pagination.
Do you know how the pagination will understand it is for which table on the same controller?
Thanks for your response.

Any table is independent to each other, I will say... start writing some code and I will help you complete if you have some issue.

Thanks.
Okay, I am doing it like a dynamic table. When we click on a link, it will get new data and creates a table in a separate Accordion:

{{group.title}}

{{group.content}}

{{ row.fileName }}
{{ row.fileSize }}

I could have an object called groups, and push to it when a new table needed to be created.
My issue is the functions:  bind-resource-callback="getFiles"
I need to pass the group to that function to call this function with the group is clicked on. But it is not possible. Another way was, to have my function in the object. So every time I push all the attributes and the function call... and change this line to:  bind-resource-callback="group.getFiles"
That is not possible maybe.
What is your suggestion? The tables are purely dynamic.
Thanks,

This is strange that I cannot post html here. I did put an space for html tags. there must be an easy way!

I think the best thing is you create a Plunker, so I can code there and help you for your problem.
http://plnkr.co/edit/DNJVQXT7NnNk5k1flqQ2?p=preview

I did fix it. Thanks. It was easy to do. group.getFiles was working as the function in the array of objects.

Nice!


What's the benefit compared to npy?

answer is yes for zero copy and lazy loading for numpy

So the main reason is bfloat16 support in numpy then
I figure they would be open to a pull request

And lazy loading and zero-copy.
All 3 are reasons.
Actually a very minor one is the use of zip, which can be also abused by zip-bombs. (And zipping never can compress tensors from ML so it brings no value, it's actually detrimental to load speeds a lot if things are actually compressed)

also trivial format spec (which leads to trivial parser implementation in any language) including random-access reading
npy format spec doesn't seem too complex: https://stackoverflow.com/a/4090115/593036 but still more than this one :)

Numpy supports lazy loading via memmap
And it supports zero copy by default since it's the name format in memory and on disk

Not the npz files as far as I know:
https://stackoverflow.com/questions/29080556/how-does-numpy-handle-mmaps-over-npz-files

Yes definitely npz do not support those since they're compressed on disk
I meant the npy files

Well, having a single file for entire ML models is usually more practical than handling every array separately.
So .npy doesn' t really fit the bill to be useful in ML only .npz is a contender (and has the 3 aforementioned missing features).

You are more than welcome to implement memory mapping for npz when it's uncompressed.
But you are breaking the format (which can and should accept compressed values, regardless of the defaults for savez).
But still probably a nice addition over at numpy if possible.
Other things for memory mapping and zero copy, you cannot memory map files which are saved in a different endianness and/or row order than the host machine/target tensor.

I think highlighting that safetensor is a better format for the use case of storing a collection of tensors will make the point stronger.
For a single tensor, npy seems to fit the bill, but indeed for many it doesn't.
So for example for the use case of storing a lot of embeddings coming from an encoder model (say because you want to build a knn from them or use them for building a classifier), npy can work well as it's a single tensor (with a batch dimension)
For the use case of storing many different tensors as is the case of ml models, having a new format sounds great!
While we're on this topic: did you know there is no good format to store both embeddings and metadata? If that might inspire some ideas...


added contribution guidelines

I have added the Contribution Guidelines file. thanks for giving me this opportunity

Thank you for your contribution , follow for more :)


Version of forge?

Could you release a compatible version with forge

I also agree we need forge, most users whom play mod pack use pure forge and the forge/bucket servers are badly coded and don't work right so please release a version for forge and this user was left without a reply since Apr please reply to them even if it's a no.

We're already compatible with Forge if you use Proxy Protocol instead of this plugin. No plans to support sponge/forge directly with this plugin at the moment since it's unnecessary, not even required for protection, it just supplies IPs.


Create property to determine if skill is abstract in context

Proposed changes
Create property to determine if skill is abstract in context.
Requierement was mentioned in https://github.com/valory-xyz/open-autonomy/pull/1086#discussion_r923035167.
Fixes
n/a
Types of changes
What types of changes does your code introduce to agents-aea?
Put an x in the boxes that apply

[ ] Bugfix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

Checklist
Put an x in the boxes that apply.

[x] I have read the CONTRIBUTING doc
[x] I am making a pull request against the develop branch (left side). Also you should start your branch off our develop.
[x] Lint and unit tests pass locally with my changes and CI passes too
[x] I have added tests that prove my fix is effective or that my feature works
[x] I have checked that code coverage does not decrease.
[x] I have added necessary documentation (if appropriate)
[x] Any dependent changes have been merged and published in downstream modules

Further comments
n/a

Codecov Report

Merging #229 (8ec8918) into main (d72f99a) will decrease coverage by 0.10%.
The diff coverage is 100.00%.

:exclamation: Current head 8ec8918 differs from pull request most recent head 8f2b3b2. Consider uploading reports for the commit 8f2b3b2 to get more accurate results

@@            Coverage Diff             @@
##             main     #229      +/-   ##
==========================================
- Coverage   94.65%   94.55%   -0.11%
==========================================
  Files         311      312       +1
  Lines       24993    25156     +163
==========================================
+ Hits        23658    23785     +127
- Misses       1335     1371      +36

Flag
Coverage Δ

unittests
94.55% <100.00%> (-0.11%)
:arrow_down:

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

Impacted Files
Coverage Δ

aea/skills/base.py
100.00% <100.00%> (ø)

aea/helpers/ipfs/base.py
95.12% <0.00%> (-1.06%)
:arrow_down:

aea/cli/publish.py
77.84% <0.00%> (-0.82%)
:arrow_down:

aea/cli/push.py
63.63% <0.00%> (-0.37%)
:arrow_down:

aea/helpers/base.py
100.00% <0.00%> (ø)

aea/helpers/cid.py
83.33% <0.00%> (ø)

aea/cli/ipfs_hash.py
29.09% <0.00%> (+1.88%)
:arrow_up:

Continue to review full report at Codecov.

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


Navigation in 3M Compass eBook is completely broken

This is a 3M-generated (by a consultant, holbrook.com) eBook from InDesign.  It is very complicated with lots of video, it's own navigation patterns and so on.  It has so far generated 3 different issues, this one as well as #507 and #350.
This issue is a:
(choose an option)

Bug report
Feature request
Enhancement suggestion
Question
Other?

Related issue(s), pull request(s)
See also #NUMBER
Expected behaviour
Should do...
Observed behaviour
Instead, does...
Steps to reproduce

Step 1
Step 2
etc.

Test file(s)
(if relevant, please indicate public EPUB URL(s), or whether you can share ebook(s) privately)
Product
(choose appropriately)

Readium Chrome extension

latest official version available from the Chrome Web Store
custom build

Readium cloud reader app

latest development build uploaded at https://readium.firebaseapp.com
custom integration (public deployment URL?)

Native application (ReadiumSDK C++)

official "launcher" sample
proprietary app

Hybrid app (ReadiumJS)

Electron
Apache Cordova

Other?

Web browser
(choose appropriately)
Please indicate version if possible

Chrome
Firefox
Internet Explorer
Edge
Opera
Other?

Operating system
(choose appropriately)
Please indicate OS version

Windows
OSX
Linux
iOS
Android
Other?

Additional information
...

Doh!  I think this is pilot error on my part.  There ARE only 4 main "pages" in the book, i.e different "Compass Pages". Then "entering" the chapter takes you to the "launch page" for that chapter.    Each product number is a link to a popup page - sort of a linear="no" workflow.

Let's go back to basics. This HTML+JS content should work in regular web browsers (let's ignore Readium for now). I'm on Windows 10. Let's open OEBPS/compass2015_h_v31_ReadiumChange-1.xhtml. Symptoms:

The rendering viewport seems to scroll too far (blank space right and bottom edges of the page)
Chrome (small amount of extra scrolling), Edge + IE (really large amount of scrolling)
Firefox works okay.

In-page interactions (icon clicks, popup dialogs, etc.) fail to trigger
Chrome (!)
Firefox, Edge, IE work okay. I am able to experience the full HTML+JS navigation.

So, no wonder why nothing works in the Readium Chrome extension :)  (at least, in my tests, on my computer)

Now, having tested vanilla web browser, let's see what happens in Readium (cloud reader, so we can tests several web browsers, not just Chrome):
Firefox: everything works fine.
Chrome: in-page UX does not respond (same as vanilla web browser experience)
IE + Edge: in-page links / navigation results in 404 errors (can this be a Readium problem because of document.write() which is used specifically for these web browsers that do not support BlobURI?)

Just tried the book on Windows 7 in Parallels and Windows 10 in Parallels - both worked without problems.  Then tried Windows 10 on my wife's Lenovo laptop and ,,,  nothing interactive worked,  Got to the Compass Page and couldn't get out.  Readium's page next would move me to the different Compass Pages (i.e. different Enter buttons).  But couldn't "enter" the chapter nor did the navigation icons (Home, Compass, Pyramid, Next Steps).  Truly weird.

Can you confirm that in both Windows 10 environments the Chrome version was 49?

Yes, both were Chrome 49.0.2623

Related (FXL scaling issue): https://github.com/readium/readium-js-viewer/issues/504#issuecomment-197451880

Ah, I found the source of the problem! (both FXL scaling error, and broken internal navigation)
This is not a bug in Readium. The HTML scaling function is fine.
Culprit in idGeneratedScript.js:
function goToDestination(ref) {
window.location.href = ref;
}

Explanation: any dynamic / scripted redirect  (via window.location.href or any other means) of the iframe that hosts EPUB content documents, will always break Readium (in several critical ways). That's because Readium can only preprocess and handle hyperlinks that are statically encoded (represented in a declarative way in the HTML files). Using scripted navigation is bad practice in the general case anyway, although I must admit that maybe it works fine in iBooks (and other reading systems) that capture / intercept dynamic URI loading.
In Readium, it may have "looked" like everything is working fine with some combination of web browsers / OS, but in fact the HTML is forcibly loaded into the iframe with no reading system intervention / checks / injections (MathJax, navigator.epubReadingSystem, annotations CSS, viewport dimensions, audio Media Overlays, etc.). In other words: this leads to a complete disconnection of the displayed HTML and the hosting reading system. It's just like loading the HTML file directly inside any arbitrary iframe.
I am filing a new issue: https://github.com/readium/readium-shared-js/issues/275


$network rules do not work on the proxy level

Steps to reproduce

Comment out connectionFilter.findConnectionRule in the LocalVpnService
Build and run AdGuard
Add <IP_ADDRESS>$network to the user filter (the IP address of example.org)
Try opening https://example.org in your browser

Expected result

Connection is blocked
onRequestProcessed is called right after that

Proxy session may use FilterUrl's matchIp

core/pull-requests/328

Reopening since it is not integrated yet with net module. But additional discussion is needed here.


Remove relative path info from executable field

Related to https://github.com/grafana/grafana-zabbix/issues/1785
A change in the plugin SDK allows us now to not require the nested datasource executable to live in the parent root directory.

@wbrowne I'm trying this out but it is not working for me. It tries to get the executable from the datasource folder. am I missing something?
I deleted the dist folder. run mage -v and then yarn build

@zoltanbedi could you take it for a spin now and let me know if it's okay for you? 🙏 Can you also confirm the directory structure of the built plugin looks like the following:

Plugin dist
./go_plugin_build_manifest
./datasource
./datasource/query_help.md
./datasource/gpx_zabbix-datasource_windows_amd64.exe
./datasource/gpx_zabbix-datasource_darwin_amd64
./datasource/gpx_zabbix-datasource_linux_arm64
./datasource/module.js.map
./datasource/plugin.json
./datasource/img
./datasource/img/icn-zabbix-datasource.svg
./datasource/module.js
./datasource/dashboards
./datasource/dashboards/template_linux_server.json
./datasource/dashboards/zabbix_system_status.json
./datasource/dashboards/zabbix_server_dashboard.json
./datasource/gpx_zabbix-datasource_linux_arm
./datasource/gpx_zabbix-datasource_linux_amd64
./datasource/gpx_zabbix-datasource_darwin_arm64
./LICENSE
./panel-triggers
./panel-triggers/module.js.LICENSE.txt
./panel-triggers/module.js.map
./panel-triggers/plugin.json
./panel-triggers/img
./panel-triggers/img/icn-zabbix-problems-panel.svg
./panel-triggers/module.js
./CHANGELOG.md
./module.js.map
./plugin.json
./README.md
./img
./img/screenshot-annotations.png
./img/screenshot-dashboard01.png
./img/icn-zabbix-app.svg
./img/screenshot-triggers.png
./img/screenshot-showcase.png
./img/screenshot-metric_editor.png
./styles
./styles/dark.css
./styles/light.css
./module.js


Error undefined method alias_method_chain

I updated to rails 5.1 and solidus master  but I get this error, I was reading that this could be due to device version, and requires device master.

Hi @sechix,
I believe the problem is that alias_method_chain was removed in Rails 5.1

I don't think we're using alias_method_chain anywhere. Please feel free to file a new issue if I'm wrong.


Redirect call to a user's voicemail

Hello,
Is it possible to redirect a call to a user voicemail directly (mean the call should go to the voicemail without ringing the user) ?
is  it documented somewhere ?
Thx !

Yes, you can create an InvitationParticipantInfo with EndpointType = EndpointType.Voicemail when inviting the user.

@mwerghemmi  and @ksikorsk
When I hit Inivite API by setting EndpointType = EndpointType.Voicemail , I am getting this issue:
could not obtain destination from voicemail workflow
Can you please help me with this?

@mwerghemmi  and @ksikorsk
When I hit Inivite API by setting EndpointType = EndpointType.Voicemail , I am getting this issue:
could not obtain destination from voicemail workflow
Can you please help me with this?

@mwerghemmi and @ksikorsk
When I hit Inivite API by setting EndpointType = EndpointType.Voicemail , I am getting this issue:
 could not obtain destination from voicemail workflow
Can you please help me with this?

@mwerghemmi and @ksikorsk
When I hit Inivite API by setting EndpointType = EndpointType.Voicemail , I am getting this issue:
 could not obtain destination from voicemail workflow
Can you please help me with this?

Hi @ksikorsk,
are there any way to prevent a call to nbe transferred to voicemail.
in my scenario now i want to transfer a call to a user but i dont want it to be transferred to its voicemail.
by any chance are there a value for the EndpointType to say it should not be voicemail.
Many thanks,
Mefteh.

Hi @ksikorsk ,
The transfer to voicemail stops working starting Feb 2022. Any change on the API side (still possible )  ?
may be we just need to change body of our request when we transfer ?
Many thanks for your response !
Mefteh.


Sorry, just saw the hard to see link for View on GitHub :)

Please disregard #414, thanks! It would be helpful if the link was at the top of the page, too.

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

ID: 591d1079-dec9-5797-eb4f-4d11b56fcbd9
Version Independent ID: 0169a2c9-a004-d5fd-7a24-855664f2d8b5
Content: Customizing a Map Pin - Xamarin
Content Source: docs/xamarin-forms/app-fundamentals/custom-renderer/map/customized-pin.md
Product: xamarin
GitHub Login: @davidbritch
Microsoft Alias: dabritch

Just kidding... there's still no code... That was a link to the docs. I should have clicked the link first. Would be helpful to have source code because it appears code is missing. It looks like you closed a similar entry, but I still don't see the option.

What code do you think is missing?
The Related Links section at the bottom of the doc links to the sample, which contains complete code.

I hear ya. I'm saying it's less work for someone to follow the example if all the code referenced is in the code samples in the article. For example, GetCustomPin() isn't in there. Maybe something that would help would provide the sample source code link at the beginning of the article, since not all the code is included in the article text itself.

Understood. Thanks for the feedback. There are plans afoot to link to the sample near the top of each guide.

Awesome. GREAT article - I didn't say that, and should have. It really helped me out, and will be used in a medical app to help save lives :)


 Given that Go 1.13 is releasing soon we should at least get to the current version (go 1.12)

Update a few latent tasks to use the GoGradle Tasks
Update GoGradle to 0.11.4
Update GoGradle to use Go 1.12

GoGradle apparently sources the Go tool of the correct version itself, so there shouldn't be any jenkins image changes required. AFAICT Moving to a new version of the GoGradle plugin simply uses gradle magic.

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Choose reviewer(s) and mention them in a comment (R: @username).
[ ] Format the pull request title like [BEAM-XXX] Fixes bug in ApproximateQuantiles, where you replace BEAM-XXX with the appropriate JIRA issue, if applicable. This will automatically link the pull request to the issue.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.


Don't understand README

recorder = OmRecorder.wav(         new PullTransport.Default(mic(), new PullTransport.OnAudioChunkPulledListener() {           @Override public void onAudioChunkPulled(AudioChunk audioChunk) {             animateVoice((float) (audioChunk.maxAmplitude() / 200.0));           }         }), file());
What should be in animateVoice() method? i don't see any implementation of it!

@leshark like this:
private void animateVoice(final float maxPeak) {     recordButton.animate().scaleX(1 + maxPeak).scaleY(1 + maxPeak).setDuration(10).start(); }

I’ve waited for 4 years! Finally! (Really, not, I do not even write for android anymore XD)
Hope this helps someone

@leshark I answered for exactly this reason, good luck


Error in getting started: no ViziaPlugParams in the root

I followed the instructions in the guide, but I ended up getting this error. I'm new to the language, so it's possible I'm doing something wrong.
My steps, from a new nih-plug cookiecutter project were to add nih vizia to the cargo.toml file and copy the two snippets from the "adding a basic vizia gui" section of the guide to the new editor.rs and existing lib.rs files in my project. Am I missing a step? I apologize if this is a silly question, it's probably just because I don't understand the language that well.
error[E0432]: unresolved import `crate::ViziaPlugParams`
 --> src/editor.rs:6:5
  |
6 | use crate::ViziaPlugParams;
  |     ^^^^^^^^^^^^^^^^^^^^^^ no `ViziaPlugParams` in the root

UPDATE: I figured it out. Turns out I just needed to change ViziaPluginParams to be the name of my plugin's Params struct, as cookiecutter generated. It might be good to make a note to always change ViziaPlugin to whatever your plugin's name is.


[FR] Eliminate the need of IP port forwarding

This would make installation lot easier for end gateway user. (plug and play)
It wouldn't even work with GSM networks (NATed IPs).
Why is it needed?
Gateway receives a packet, forwards it to server , checks for answers.
Server doesn't have to initiate.
Even a smart lamp bulb can solve this, you can control it over a .com domain outside your house without port forwarding.
Even the block chain p2p can work behind router, see uTorrent. (uses multiple technics)

For the full hotspot you could use UPnP to try automatic port forwarding over router.
If it fails user can still doe it manually.

For the full hotspot you could use UPnP to try automatic port forwarding over router. If it fails user can still doe it manually. There is a linux lib for it.

This is already the case, see here.


How to get Tweets from a specific account as soon as they are posted

I was reading the documentation, but I didn't find anything related to Tweets events for example. Because I wanted to get an account's tweets and their content

Hi there,
I would suggest you checkout the version 5.0 of tweetinvi and the documentation about events:
https://linvi.github.io/tweetinvi/dist/account-activity/account-activity-events.html
Let me know if this answers your question.
Cheers,
Linvi

Yes, it helped in some parts. This documentation you showed me is much better than the one in READM.md
However, my program crashes when I start. I feel something is missing for the code to work properly, and I don't know what it is. Would you help me?
Auth.SetUserCredentials("API_key", "API_secret", "Acces_token", "Acces_token_secret");

string user = "xxxxxxxxxxxxx";

var stream = Stream.CreateAccountActivityStream(user);

Console.WriteLine("Listening to Twitter...");

stream.TweetCreated += (sender, arguments) =>
{
   Console.WriteLine(arguments.Tweet.FullText);

};

And finally, congratulations on the great job done with tweetinvi

Hi there,
I just wanted to point out that you are sharing code for 4.0 and not 5.0.
Please check all the documentation of Account Activity because you will first need to request a special account from Twitter.
Cheers,
Linvi

I updated the version of your library to v5, and followed the examples in the documentation, however the following error is occurring:
https://api.twitter.com/1.1/account_activity/all/dev/webhooks.json?url=https%3A%2F%2F44bf704bd386.ngrok.io%20 request failed.
static async Task Main(string[] args)
{
    Plugins.Add<AspNetPlugin>();

    //user that i will watch
    long USER_ID = 00000000;

    var appClient = new TwitterClient("API_key", "API_secret", "Acces_token", "Acces_token_secret");

    var user = await userClient.Users.GetAuthenticatedUserAsync();
    Console.WriteLine(user); //program crashes after execute this line

    await userClient.AccountActivity.CreateAccountActivityWebhookAsync(":env_name", "https://something.ngrok.io ");

    Console.WriteLine("Listening to Twitter...");

    var accountActivityHandler = userClient.AccountActivity.CreateRequestHandler();

    await RunServer(accountActivityHandler);

    var accountActivityStream = accountActivityHandler.GetAccountActivityStream(USER_ID, ":env_name");

    accountActivityStream.TweetCreated += (sender, arguments) =>
    {
        Console.WriteLine(arguments.Tweet.FullText);
    };
}

static async Task RunServer(Tweetinvi.Models.IAccountActivityRequestHandler accountActivityHandler)
{
    var httpServer = new SimpleHttpServer(8042);

    httpServer.OnRequest += async (sender, context) =>
    {
        var webhookRequest = WebhookRequestFactory.Create(context);

        // check if the request comes from twitter
        if (await accountActivityHandler.IsRequestManagedByTweetinviAsync(webhookRequest))
        {
            // let tweetinvi manage the twitter requests and respond to it
            await accountActivityHandler.TryRouteRequestAsync(webhookRequest);
        }
        else
        {
            // a request not coming from twitter (probably for a user of your website)
            var streamWriter = new StreamWriter(context.Response.OutputStream);
            await streamWriter.WriteAsync("Hello friend, this page does not exists!");
            await streamWriter.FlushAsync();
            context.Response.StatusCode = 404;
            context.Response.Close();
        }
    };

    httpServer.Start();

    await httpServer.WaitUntilDisposed();
}

thanks for attention

I updated the version of your library to v5, and followed the examples in the documentation, however the following error is occurring: Access is denied.
static async Task Main(string[] args)
{
    Plugins.Add<AspNetPlugin>();

    var userClient = new TwitterClient("CONSUMER_KEY", "CONSUMER_SECRET", "ACCESS_TOKEN", "ACCESS_TOKEN_SECRET");

    //user that i will watch
    long USER_ID = 000000000;

    var user = await userClient.Users.GetAuthenticatedUserAsync();
    Console.WriteLine(user);

    Console.WriteLine("Listening to Twitter...");

    var accountActivityHandler = userClient.AccountActivity.CreateRequestHandler(); //programa crashes after execute this line

    await RunServer(accountActivityHandler);

    await userClient.AccountActivity.CreateAccountActivityWebhookAsync("dev", "https://something.ngrok.io ");

    var accountActivityStream = accountActivityHandler.GetAccountActivityStream(USER_ID, "dev");

    accountActivityStream.TweetCreated += (sender, arguments) =>
    {
        Console.WriteLine(arguments.Tweet.FullText);
    };
}

static async Task RunServer(Tweetinvi.Models.IAccountActivityRequestHandler accountActivityHandler)
{
    var httpServer = new SimpleHttpServer(8042);
    //i made a class based on SimpleHttpServer.cs at this link https://linvi.github.io/tweetinvi/dist/account-activity/account-activity-with-http-server.html
    httpServer.OnRequest += async (sender, context) =>
    {
        var webhookRequest = WebhookRequestFactory.Create(context);

        // check if the request comes from twitter
        if (await accountActivityHandler.IsRequestManagedByTweetinviAsync(webhookRequest))
        {
            // let tweetinvi manage the twitter requests and respond to it
            await accountActivityHandler.TryRouteRequestAsync(webhookRequest);
        }
        else
        {
            // a request not coming from twitter (probably for a user of your website)
            var streamWriter = new StreamWriter(context.Response.OutputStream);
            await streamWriter.WriteAsync("Hello friend, this page does not exists!");
            await streamWriter.FlushAsync();
            context.Response.StatusCode = 404;
            context.Response.Close();
        }
    };

    httpServer.Start();

    await httpServer.WaitUntilDisposed();
}

thanks for attention

Did you request a premium account on Twitter?
https://developer.twitter.com/en/apply

if you talk about it, yes!

Could you please share the exception that you are receving?

Yes, here it is:
` System.Net.HttpListenerException
HResult=0x80004005
Message=Access is denied.
Source=System.Net.HttpListener
StackTrace:
at System.Net.HttpListener.AddPrefixCore(String registeredPrefix) in //src/System.Net.HttpListener/src/System/Net/Windows/HttpListener.Windows.cs:line 553
at System.Net.HttpListener.AddAllPrefixes() in //src/System.Net.HttpListener/src/System/Net/Windows/HttpListener.Windows.cs:line 532
at System.Net.HttpListener.Start() in //src/System.Net.HttpListener/src/System/Net/Windows/HttpListener.Windows.cs:line 281
at TwitterWatcher.SimpleHttpServer.Start() in C:\Users\henri\source\repos\TwitterWatcher\TwitterWatcher\SimpleHttpServer.cs:line 23
at TwitterWatcher.Program.d__0.MoveNext() in C:\Users\henri\source\repos\TwitterWatcher\TwitterWatcher\Program.cs:line 54
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() in //src/System.Private.CoreLib/shared/System/Runtime/ExceptionServices/ExceptionDispatchInfo.cs:line 63
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) in //src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/TaskAwaiter.cs:line 180
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) in //src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/TaskAwaiter.cs:line 151
at System.Runtime.CompilerServices.TaskAwaiter.GetResult() in /_/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/TaskAwaiter.cs:line 107
at TwitterWatcher.Program.(String[] args)
This exception was originally thrown at this call stack:
System.Net.HttpListener.AddPrefixCore(string) in HttpListener.Windows.cs
System.Net.HttpListener.AddAllPrefixes() in HttpListener.Windows.cs
System.Net.HttpListener.Start() in HttpListener.Windows.cs
TwitterWatcher.SimpleHttpServer.Start() in SimpleHttpServer.cs
TwitterWatcher.Program.Main(string[]) in Program.cs
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() in ExceptionDispatchInfo.cs
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task) in TaskAwaiter.cs
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task) in TaskAwaiter.cs
System.Runtime.CompilerServices.TaskAwaiter.GetResult() in TaskAwaiter.cs
TwitterWatcher.Program.(string[])`

Any update?

Sorry, not yet. I will try to reproduce your issue tonight.
I recently tried Account Activity successfully, so it probably comes from something in the solution you have.

Here is a full example. Let me know if this works for you. Test and approved
// Program.cs
using System;
using System.IO;
using System.Threading.Tasks;
using Tweetinvi;
using Tweetinvi.Models;
using Tweetinvi.AspNet;

namespace tweetinvi_hello_world
{
    class Program
    {
        static async Task Main(string[] args)
        {
            Plugins.Add<AspNetPlugin>();

            var userCreds = new TwitterCredentials("CONSUMER", "CONSUMER_SECRET", "ACCESS_TOKEN", "ACCESS_TOKEN_SECRET");

            var appCreds = new TwitterCredentials("CONSUMER", "CONSUMER_SECRET",)
            {
                BearerToken = "BEARER_TOKEN"
            };

            var appClient = new TwitterClient(appCreds);
            var userClient = new TwitterClient(userCreds);

            var environments = await appClient.AccountActivity.GetAccountActivityWebhookEnvironmentsAsync();
            if (environments[0].Webhooks.Length > 0)
            {
                // cleanup is not mandatory but this will works 100% of cases if you change your ngrok url
                await appClient.AccountActivity.DeleteAccountActivityWebhookAsync("sandbox", environments[0].Webhooks[0]);
            }

            var accountActivityHandler = appClient.AccountActivity.CreateRequestHandler();

            var httpServer = new SimpleHttpServer(8080);
            httpServer.OnRequest += async (sender, context) =>
            {
                var webhookRequest = WebhookRequestFactory.Create(context);
                if (await accountActivityHandler.IsRequestManagedByTweetinviAsync(webhookRequest))
                {
                    await accountActivityHandler.TryRouteRequestAsync(webhookRequest);
                }
                else
                {
                    if (context.Request.Url.AbsolutePath == "/close")
                    {
                        httpServer.Dispose();
                    }

                    var streamWriter = new StreamWriter(context.Response.OutputStream);
                    await streamWriter.WriteAsync("Hello friend, this page does not exists!");
                    await streamWriter.FlushAsync();
                    context.Response.StatusCode = 404;
                    context.Response.Close();
                }
            };
            httpServer.Start();

            await userClient.AccountActivity.CreateAccountActivityWebhookAsync("sandbox", "https://bab133e35e69.ngrok.io");

            await userClient.AccountActivity.SubscribeToAccountActivityAsync("sandbox");
            var authenticatedUser = await userClient.Users.GetAuthenticatedUserAsync();
            var accountActivityStream = accountActivityHandler.GetAccountActivityStream(authenticatedUser.Id, "sandbox");
            accountActivityStream.EventReceived += (sender, receivedEvent) =>
            {
                Console.WriteLine(receivedEvent.Json);
            };

            accountActivityStream.TweetCreated += (sender, tweetCreatedEvent) => { Console.WriteLine("A tweet was created by USER_ID or a tweet mentioning USER_ID"); };

            await httpServer.WaitUntilDisposed();

            // Now try performing some events and the handlers will trigger the events.
        }
    }
}

// SimpleHttpServer.cs
using System;
using System.Net;
using System.Threading.Tasks;

namespace tweetinvi_hello_world
{
    public class SimpleHttpServer : IDisposable
    {
        private readonly HttpListener _server;

        public SimpleHttpServer(int port)
        {
            _server = new HttpListener();
            _server.Prefixes.Add($"http://*:{port}/");
        }

        public EventHandler<HttpListenerContext> OnRequest;

        public void Start()
        {
            _server.Start();
            RunServerAsync();
        }

        private async Task RunServerAsync()
        {
            while (_server.IsListening)
            {
                var context = await _server.GetContextAsync();
                OnRequest?.Invoke(this, context);
            }
        }

        public async Task WaitUntilDisposed()
        {
            while (!_disposed)
            {
                await Task.Delay(200);
            }
        }

        private bool _disposed;
        public void Dispose()
        {
            _disposed = true;
            ((IDisposable) _server)?.Dispose();
        }
    }
}

I still have the same problem
`
An unhandled exception of type 'System.Net.HttpListenerException' occurred in System.Private.CoreLib.dll
Access is denied.
The program '[18004] TwitterWatcher.exe' has exited with code -1 (0xffffffff).
`
The only thing I changed in your code was the credentials and ngrok URL (my Dev environment label is also called a sandbox)

I upgraded to the latest version (beta-1) and restarted visual studio in admin mode, in addition to putting the line cs await httpServer.WaitUntilDisposed();  above events, and it worked. However, from what I read in the documentation, the user I intend to assist, needs to be registered before the events will work. How could I do that? (I couldn't find it in the documentation)

Hi there.

in addition to putting the line await httpServer.WaitUntilDisposed(); above events, and it worked

I don't see how this is possible. Would you mind sharing your code?

from what I read in the documentation, the user I intend to watch (another user, not me), needs to be registered before the events to work. How could I do that? (I couldn't find it in the documentation)

Thanks for sharing this, looks like I need to improve the documentation.
So what you need to do is for every user you wish to listen to, you will need to request get credentials for your app (Auth documentation).
When you have the user credentials, create a client with these credentials.
Now you just need to invoke:
var otherUserCredentials = ...;
var otherUserClient = new TwitterClient(otherUserCredentials);

// registration
await otherUserClient.AccountActivity.SubscribeToAccountActivityAsync("sandbox");

I will add this task to documentation for 5.0 to improve this detail.
I hope this helps out.

My full code:

static async Task Main(string[] args)
        {
            Plugins.Add<AspNetPlugin>();

            var userCreds = new TwitterCredentials("CONSUMER", "CONSUMER_SECRET", "ACCESS_TOKEN", "ACCESS_TOKEN_SECRET");

            var appCreds = new TwitterCredentials("CONSUMER", "CONSUMER_SECRET")
            {
                BearerToken = "BEARER_TOKEN"
            };

            var appClient = new TwitterClient(appCreds);
            var userClient = new TwitterClient(userCreds);

            var environments = await appClient.AccountActivity.GetAccountActivityWebhookEnvironmentsAsync();
            if (environments[0].Webhooks.Length > 0)
            {
                // cleanup is not mandatory but this will works 100% of cases if you change your ngrok url
                await appClient.AccountActivity.DeleteAccountActivityWebhookAsync("sandbox", environments[0].Webhooks[0].Id);
            }

            var accountActivityHandler = appClient.AccountActivity.CreateRequestHandler();

            var httpServer = new SimpleHttpServer(8042);
            httpServer.OnRequest += async (sender, context) =>
            {
                var webhookRequest = WebhookRequestFactory.Create(context);
                if (await accountActivityHandler.IsRequestManagedByTweetinviAsync(webhookRequest))
                {
                    await accountActivityHandler.TryRouteRequestAsync(webhookRequest);
                }
                else
                {
                    if (context.Request.Url.AbsolutePath == "/close")
                    {
                        httpServer.Dispose();
                    }

                    var streamWriter = new StreamWriter(context.Response.OutputStream);
                    await streamWriter.WriteAsync("Hello friend, this page does not exists!");
                    await streamWriter.FlushAsync();
                    context.Response.StatusCode = 404;
                    context.Response.Close();
                }
            };
            httpServer.Start();

            await httpServer.WaitUntilDisposed();

            await userClient.AccountActivity.CreateAccountActivityWebhookAsync("sandbox", "https://075b77e22be5.ngrok.io");

            await userClient.AccountActivity.SubscribeToAccountActivityAsync("sandbox");
            var authenticatedUser = await userClient.Users.GetAuthenticatedUserAsync();
            long USER_ID =<PHONE_NUMBER>00000;
            var accountActivityStream = accountActivityHandler.GetAccountActivityStream(USER_ID, "sandbox");
            accountActivityStream.EventReceived += (sender, receivedEvent) =>
            {
                Console.WriteLine(receivedEvent.Json);
            };

            accountActivityStream.TweetCreated += (sender, tweetCreatedEvent) => { Console.WriteLine(tweetCreatedEvent); };
            // Now try performing some events and the handlers will trigger the events.
        }

If I run the code normally, the error I mentioned earlier occurs, and if I run the code without changing anything, but as an admin, this error occurs:
Tweetinvi.Exceptions.TwitterException: 'https://api.twitter.com/1.1/account_activity/all/sandbox/webhooks.json?url=https%3A%2F%2F0a7c509ed22e.ngrok.io request failed.'

I removed the part of the code that contained the events, just to test the server, and it was working normally

and sorry for not having detailed it better, but when I said another user, I meant to login with my credentials and watch another user (a news profile for example), specifying the ID of that profile. And for that it needs to be registered, but I couldn't find it in the documentation

Hello there,
I am sorry but I do not understand your question. I think I answered your question regarding how to "register"/subscribe a user to a stream.
await otherUserClient.AccountActivity.SubscribeToAccountActivityAsync("sandbox");

Please share more details.

My first question about assisting users is that i want to assist any user, without needing his credentials. For example: I have the API key for my twitter, but I need to monitor your account activity.
My other problem is that I cannot monitor myself, because the program fails to request, and throws the following error:
Tweetinvi.Exceptions.TwitterException: 'https://api.twitter.com/1.1/account_activity/all/sandbox/webhooks.json?url=https%3A%2F%2F0a7c509ed22e.ngrok.io request failed.'

My first question about assisting users is that i want to assist any user, without needing his credentials. For example: I have the API key for my twitter, but I need to monitor your account activity.

This is not possible. You need approval from users in order to track them. You get their approval by getting them to accept your app which in returns generates a set of credentials.
Without such a mechanism developers would be able to track everybody without their consent.

My other problem is that I cannot monitor myself, because the program fails to request, and throws the following error:

Please check the description of the exception. You can use the e.ToString() to retrieve all the relevant information.
I guess that the problem is that you already have a registered url. You will need to remove your previous registered webhooks as per the doc.
// quick solution to clean your sandbox environment
var webhooks = await appClient.AccountActivity.GetAccountActivityEnvironmentWebhooksAsync("sandbox");
if (webhooks.Length > 0)
{
    await appClient.AccountActivity.DeleteAccountActivityWebhookAsync("sandbox", webhooks[0]);
}

You're right. In addition, I had to contact twitter support to release write access, as I was having the following error:
URL : https://api.twitter.com/1.1/account_activity/all/sandbox/webhooks.json?url=https%3A%2F%2F152a8ac9770a.ngrok.io
Code : 403
Error documentation description : Forbidden - The request is understood, but it has been refused or access is not allowed. An accompanying error message will explain why. This code is used when requests are being denied due to update limits.
Error message : https://api.twitter.com/1.1/account_activity/all/sandbox/webhooks.json?url=https%3A%2F%2F152a8ac9770a.ngrok.io request failed.
Application cannot perform write actions. Contact Twitter Platform Operations through https://help.twitter.com/forms/platform. (261)

I have another question:
I think the best way to get public tweets is with the filtered stream. And I did it! The only thing I wanted to improve, is the latency when receiving the data, which is currently around 3~4 seconds. Is there anything I can do to reduce this latency?

Is it possible for me to get tweets from my feed in real time with Account Activity?

Yes just subscribe your own user. The credentials provided on apps.twitter.com provide access tokens which you can use to authenticate yourself.

Sorry, but could you explain better what it would be like to subscribe my own user?
Because according to the documentation, I'm already doing this. But I only receive events that start from my actions, as follows, my tweets, responses, likes...

What type of interactions are you looking to subscribe to.
All the available events can be found here : https://linvi.github.io/tweetinvi/dist/account-activity/account-activity-events.html

What type of interactions are you looking to subscribe to.

My feed in real time. Because I want to get tweets from a specific account in real time, but in the documentation I couldn't find anything related.

I am sorry but I am getting very confused. What about these events?

Remember I said I wanted to get my Twitter timeline in real time? This is what I want...
And with that, I can filter the results, to finally get the tweets from a specific account!
In short: I follow an X user, and his tweets will appear on my timeline as soon as they are posted, and through some filters I can get them.
What I mainly need is to get public tweets in real time, and then I do the filtering part.
I hope I made it clearer.

Account Activity allow you to track a specific user who gave his approval to get tracked. You can track almost every interaction this user has on Twitter.
Filtered Streams allow you to track tweets posted on twitter. You can track tweets by content, location and user.
There are multiple filtered streams available.

Public filtered Stream 1.1
Enterprise filtered stream 1.1
Public filtered stream 2

You can read tweetinvi documentation for filtered streams v1.1 here and filters available for filtered stream.
I did not have time yet to create documentation for any of the Twitter API v2 endpoints. So please check the Twitter doc for now.
I hope this answers your question.

Yes, you helped a lot!
I tried to use Account Activity, because it has a faster update than the stream. So I have one last question: is it possible to reduce the update delay that is currently in the stream (around 3~4 seconds)?

No this is not possible this is a limitation from Twitter and I assume that technically it would be extremely complex for them to assure such low SLAs for streams offered to thousands of developer apps.
Twitter offers Enterprise version of their streams, they could offer better SLAs but you will probably have to pay a premium. You can discuss the price and your requirements with their enterprise teams.
I suggest you look into Gnip : https://support.gnip.com/apis/#.

Understood! I will close this topic, as all doubts have been solved. Thank you very much for all your attention and patience!


biggan

Thanks for the nice video Yannic.
Would have appreciate a mention or keeping the licence on the BigGan code.
I usually don't care too much about people copying my code around and removing licences but for some reason reverse-engineering this model directly from the block-box TF graph of TF-Hub took me a few painful nights (in particular the weirdly stored BatchNorm statistics) so it's close to my heart.

Thanks a lot for notifying me, this is really important. I thought I tracked all references.
I hope it's fixed now. I'll do another pass over the rest.


Workaround terraform error

What does this PR change?
Workaround some problems

@ricardoasmarques the second commit is wrong, but I need your help to fix it.


Visualization

I tested this with random numbers and it worked (so then I modified it to work with the MCU class), but I'm not entirely sure that it works with the MCUInterface methods for getting measurements.

Hmm, was PyQt3D even a option for this task?

That does seem like a better idea. I just used VPython because it's very very easy to use, but I'm not sure that it can be put in a widget on the interface since it always opens up in a browser window.

Yah using what you are comfortable with is a higher priority. Even though it being on a separate window may not be the ideal solution using PyQt3D might be more annoying then using vpython.

We will work on a proper visualization software next R&D season (next week)


[T3A2][W15-A2]Liu Ziyang

Ready for Review

Some comments added. Feel free to add more comment if you have any questions. Once you are done, you may close the PR after reading comments.


The Simon Game

Simon is an electronic game of short-term memory skill
The instructions:
1- At the start of the game, one of the four keys randomly lights up and concurrently plays a sound that corresponds to that key. The player must press the same key twice. 3- After that, the Simon randomly switches on a second light and the original one again. 4- The player must use his memory to recreate this line of lights.

I am interested to work on this ? Can you assign it to me

Hi, I am a GSSoC contributor. Can I work on this issue?

goodwork @harmeetsingh11 . I am closing this issuse.


New Gem release?

I'm using the theme via Gem. The latest release was almost a year ago though. Is there any chance for releasing a new version please?

v2.2.5 has  released.


Recode the video to h264 from VP09

DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

[X] I understand that I will be blocked if I intentionally remove or skip any mandatory* field

Checklist

[X] I'm asking a question and not reporting a bug or requesting a feature
[X] I've looked through the README
[X] I've verified that I have updated yt-dlp to nightly or master (update instructions)
[X] I've searched known issues and the bugtracker for similar questions including closed ones. DO NOT post duplicates
[X] I've read the guidelines for opening an issue

Please make sure the question is worded well enough to be understood
Hello,
When using --list-formats for fb video, all formats are shown in vp09

In this case, is it still possible to --recode the video in h264 in mp4 container directly from yt-dlp download? Is there any way, we can get h264 directly from yt-dlp in such cases where it shows only vp09 and thus bypassing the need to encode it again to h264 by ffmpeg (which is an intensive task, especially if the video is 30 minute plus).
or the only option is to encode into h264 with ffmpeg after downloading, but that is a very time intensive task. I get speed of 8x when encoding with this command:
$ffmpegpath -i $downloadlocation
-c:v libx264 -preset superfast -profile:v high -level 4.1 -b:v 3550k -movflags +faststart $outpathpath
Provide verbose output that clearly demonstrates the problem

[ ] Run your yt-dlp command with -vU flag added (yt-dlp -vU <your command line>)
[ ] If using API, add 'verbose': True to YoutubeDL params instead
[ ] Copy the WHOLE output (starting with [debug] Command-line config) and insert it below

Complete Verbose Output
No response

Please always share full verbose output AS TEXT, not incomplete SCREENSHOTS
I don't even have a URL to copy/paste so I can reproduce the issue, test solutions/workarounds, etc
What you can do is pass a Firefox --user-agent string to yt-dlp to get h264 formats. You'll have to find that yourself; you didn't make things easy for me so I will not make them easy for you

I understand. Below are the verbose and 2 examples to try.
In example 1, all formats and resolutions are available in av1
In example 2, all formats and resolutions are available in vp09
And yes, I passed user agent too
I was thinking if there is any way to find and download h264 formats without needing to convert with ffmpeg later. I gave you 2 examples of facebook reels and reels are short. But if the video is 30 minute plus long, then ffmpeg can take a lot of time. That's why I was thinking if there is any way to get the h264 stream directly.
Below are the examples:
Example 1 : AVAILABLE FORMAT - AV01 FORMAT ONLY - TEST LINK - https://www.facebook.com/reel/901359768637125
root@myproject:~# /home/cloudproject/htdocs/website/yt-dlp --list-formats --add-header "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36" --verbose "https://www.facebook.com/reel/901359768637125"
[debug] Command-line config: ['--list-formats', '--add-header', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36', '--verbose', 'https://www.facebook.com/reel/901359768637125']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version<EMAIL_ADDRESS>from yt-dlp/yt-dlp-master-builds [f101e5d34] (zip)
[debug] Python 3.12.3 (CPython x86_64 64bit) - Linux-6.8.0-49-generic-x86_64-with-glibc2.39 (OpenSSL 3.0.13 30 Jan 2024, glibc 2.39)
[debug] exe versions: none
[debug] Optional libraries: certifi-2023.11.17, requests-2.31.0, sqlite3-3.45.1, urllib3-2.0.7
[debug] Proxy map: {}
[debug] Request Handlers: urllib
[debug] Loaded 1837 extractors
[facebook:reel] Extracting URL: https://www.facebook.com/reel/901359768637125
[facebook] Extracting URL: https://m.facebook.com/watch/?v=901359768637125&_rdr
[facebook]<PHONE_NUMBER>37125: Downloading webpage
[debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7), vcodec:vp9.2(10), channels, acodec, size, br, asr, proto, vext, aext, hasaud, source, id
[info] Available formats for<PHONE_NUMBER>37125:
ID                EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC          VBR ACODEC     ABR ASR MORE INFO
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
548015101550069a  m4a audio only │ ~454.66KiB   80k https │ audio only          mp4a.40.5  80k 48k DASH audio, m4a_dash
sd                mp4 unknown    │                  https │ unknown             unknown
hd                mp4 unknown    │                  https │ unknown             unknown
435770889388103v  mp4 720x1280   │ ~  1.89MiB  342k https │ av01.0.05M.08  342k video only         DASH video, mp4_dash
886549083632511v  mp4 720x1280   │ ~  4.69MiB  849k https │ av01.0.05M.08  849k video only         DASH video, mp4_dash
8833681036699331v mp4 720x1280   │ ~  6.41MiB 1161k https │ av01.0.05M.08 1161k video only         DASH video, mp4_dash
1110743124187626v mp4 720x1280   │ ~  8.19MiB 1483k https │ av01.0.05M.08 1483k video only         DASH video, mp4_dash
1122592449486384v mp4 720x1280   │ ~ 10.49MiB 1899k https │ av01.0.05M.08 1899k video only         DASH video, mp4_dash
994167125852088v  mp4 720x1280   │ ~ 14.18MiB 2566k https │ av01.0.05M.08 2566k video only         DASH video, mp4_dash
1957100738130676v mp4 1080x1920  │ ~ 18.68MiB 3382k https │ av01.0.08M.08 3382k video only         DASH video, mp4_dash
573977305042089v  mp4 2160x3840  │ ~ 24.48MiB 4433k https │ av01.0.12M.08 4433k video only         DASH video, mp4_dash
==================
=================
Example 2 : AVAILABLE FORMAT - VP09 FORMAT ONLY -  TEST LINK - https://www.facebook.com/reel/559260123368837
root@myproject:~# /home/cloudproject/htdocs/website/yt-dlp --list-formats --add-header "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36" --verbose "https://www.facebook.com/reel/559260123368837"
[debug] Command-line config: ['--list-formats', '--add-header', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36', '--verbose', 'https://www.facebook.com/reel/559260123368837']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version<EMAIL_ADDRESS>from yt-dlp/yt-dlp-master-builds [f101e5d34] (zip)
[debug] Python 3.12.3 (CPython x86_64 64bit) - Linux-6.8.0-49-generic-x86_64-with-glibc2.39 (OpenSSL 3.0.13 30 Jan 2024, glibc 2.39)
[debug] exe versions: none
[debug] Optional libraries: certifi-2023.11.17, requests-2.31.0, sqlite3-3.45.1, urllib3-2.0.7
[debug] Proxy map: {}
[debug] Request Handlers: urllib
[debug] Loaded 1837 extractors
[facebook:reel] Extracting URL: https://www.facebook.com/reel/559260123368837
[facebook] Extracting URL: https://m.facebook.com/watch/?v=559260123368837&_rdr
[facebook]<PHONE_NUMBER>68837: Downloading webpage
[debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7), vcodec:vp9.2(10), channels, acodec, size, br, asr, proto, vext, aext, hasaud, source, id
[info] Available formats for<PHONE_NUMBER>68837:
ID                EXT RESOLUTION │   FILESIZE   TBR PROTO │ VCODEC          VBR ACODEC     ABR ASR MORE INFO
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
887923809754579a  m4a audio only │ ~ 60.78KiB   50k https │ audio only          mp4a.40.5  50k 44k DASH audio, m4a_dash
sd                mp4 unknown    │                  https │ unknown             unknown
hd                mp4 unknown    │                  https │ unknown             unknown
454258474361572v  mp4 720x1280   │ ~183.91KiB  151k https │ vp<IP_ADDRESS>  151k video only         DASH video, mp4_dash
559532510363677v  mp4 720x1280   │ ~324.39KiB  267k https │ vp<IP_ADDRESS>  267k video only         DASH video, mp4_dash
473175651895336v  mp4 720x1280   │ ~466.38KiB  383k https │ vp<IP_ADDRESS>  383k video only         DASH video, mp4_dash
1519050408876672v mp4 720x1280   │ ~659.77KiB  542k https │ vp<IP_ADDRESS>  542k video only         DASH video, mp4_dash
581762877873902v  mp4 720x1280   │ ~883.34KiB  726k https │ vp<IP_ADDRESS>  726k video only         DASH video, mp4_dash
603164665463049v  mp4 720x1280   │ ~  1.12MiB  945k https │ vp<IP_ADDRESS>  945k video only         DASH video, mp4_dash
1865315847208992v mp4 1080x1920  │ ~  1.68MiB 1413k https │ vp<IP_ADDRESS> 1413k video only         DASH video, mp4_dash
1501315310579375v mp4 1080x1920  │ ~  2.29MiB 1929k https │ vp<IP_ADDRESS> 1929k video only         DASH video, mp4_dash

That's not a Firefox user-agent, but I just tried it with one (Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0), and it made no diffference for the 1st link and only yielded av01 instead of vp9 for the 2nd link. I guess the user-agent workaround no longer works

There's really not a good built-in way to re-encode to h264 if the format downloaded is already in an mp4 container, because the --recode-video option was foolishly designed to take a container argument instead of a codec argument. You'll need to use an --exec ffmpeg line (use %(filepath)q)

So you mean that if the video is not available in h264, then there is no other way to download it and then encode it with ffmpeg either using exec or proc commands and then serve it. Right?

Isn't it possible to use ffmpeg as downloader and specify a conversion to be applied at the same time? Or to specify a conversion arg to the Merger PP?
... even without implementing the ffmpeg combining issue(/PR?) that I somehow can't find now.

Yes, I understand that @bashonly Good day
@dirkf, why would you want to download with ffmpeg? Is it resource efficient or faster?

It could be if you're going to transcode anyway. Or, doesn't --recode-video mp4 force what you want (when the site offers no h.264)?

Isn't it possible to use ffmpeg as downloader and specify a conversion to be applied at the same time?

Since the formats are separate video and audio, not sure if it's possible to pass downloader args for one format but not the other

Or, doesn't --recode-video mp4 force what you want (when the site offers no h.264)?

--recode mp4 is a no-op if the downloaded format is already in an mp4 container (which facebook's vp9/av01 formats are)

So let's pass the conversion args as ffmpeg output args to the MergerPP (wow, that's some funky syntax):
$ yt-dlp -v --postprocessor-args 'Merger+ffmpeg_o1:-vcodec h264' 'https://www.facebook.com/reel/559260123368837'
[debug] Command-line config: ['-v', '--postprocessor-args', 'Merger+ffmpeg_o1:-vcodec h264', 'https://www.facebook.com/reel/559260123368837']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version<EMAIL_ADDRESS>from yt-dlp/yt-dlp [7ea278792] (zip)
[debug] Python 3.11.2 (CPython i686 32bit) - Linux-6.1.0-27-686-pae-i686-with-glibc2.36 (OpenSSL 3.0.15 3 Sep 2024, glibc 2.36)
[debug] exe versions: ffmpeg 5.1.6-0 (setts), ffprobe 5.1.6-0
[debug] Optional libraries: Cryptodome-3.11.0, certifi-2022.09.24, requests-2.28.1, sqlite3-3.40.1, urllib3-1.26.12
[debug] Proxy map: {}
[debug] Request Handlers: urllib
[debug] Loaded 1837 extractors
[facebook:reel] Extracting URL: https://www.facebook.com/reel/559260123368837
[facebook] Extracting URL: https://m.facebook.com/watch/?v=559260123368837&_rdr
[facebook]<PHONE_NUMBER>68837: Downloading webpage
[debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7), vcodec, channels, acodec, size, br, asr, proto, vext, aext, hasaud, source, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info]<PHONE_NUMBER>68837: Downloading 1 format(s):<PHONE_NUMBER>579375v+887923809754579a
[debug] Invoking http downloader on "https://video.flhr10-1.fna.fbcdn.net/v/t39.25447-2/467999492_1073310144263073_1837701230774859749_n.mp4?_nc_cat=109&ccb=1-7&_nc_sid=9a5d50&efg=eyJ2ZW5jb2RlX3RhZyI6ImRhc2hfcjJldmV2cDktcjFnZW4ydnA5LWhmcl9xOTAiLCJ2aWRlb19pZCI6NTU5MjYwMTIzMzY4ODM3fQ==&_nc_e2o=559260123368837&_nc_ohc=_2_MTziGlEoQ7kNvgHWg1Yl&_nc_zt=28&_nc_ht=video.flhr10-1.fna&_nc_gid=A05nEIOGDrHn2eJP2WEY2E8&oh=00_AYBEzTu_1mZFMLKHHFvC5mujG2ftYA3slgzPVFrR7HFgjA&oe=674FF109"
[download] Destination: 2.2M views · 23K reactions ｜ Crunchy High Protein Chips 😋🔥 ｜ Keto Snackz [559260123368837].f1501315310579375v.mp4
[download] 100% of    2.29MiB in 00:00:02 at 1.12MiB/s
[debug] Invoking http downloader on "https://video.flhr10-2.fna.fbcdn.net/v/t58.16807-2/459938024_1241632397055336_6708966974524931067_n.mp4?_nc_cat=111&ccb=1-7&_nc_sid=9a5d50&efg=eyJ2ZW5jb2RlX3RhZyI6ImRhc2hfYXVkaW9fYWFjcF80OF9mcmFnXzJfYXVkaW8iLCJ2aWRlb19pZCI6NTU5MjYwMTIzMzY4ODM3fQ==&_nc_e2o=559260123368837&_nc_ohc=_xN51yTIvaMQ7kNvgF3luTG&_nc_zt=28&_nc_ht=video.flhr10-2.fna&_nc_gid=A05nEIOGDrHn2eJP2WEY2E8&oh=00_AYCYEMgoQozrEkX8cMrIaGbltQpBNElIBCCIQhzIoDmnog&oe=675004CA"
[download] Destination: 2.2M views · 23K reactions ｜ Crunchy High Protein Chips 😋🔥 ｜ Keto Snackz [559260123368837].f887923809754579a.m4a
[download] 100% of   61.59KiB in 00:00:00 at 352.19KiB/s
[Merger] Merging formats into "2.2M views · 23K reactions ｜ Crunchy High Protein Chips 😋🔥 ｜ Keto Snackz [559260123368837].mp4"
[debug] ffmpeg command line: ffmpeg -y -loglevel repeat+info -i 'file:2.2M views · 23K reactions ｜ Crunchy High Protein Chips 😋🔥 ｜ Keto Snackz [559260123368837].f1501315310579375v.mp4' -i 'file:2.2M views · 23K reactions ｜ Crunchy High Protein Chips 😋🔥 ｜ Keto Snackz [559260123368837].f887923809754579a.m4a' -c copy -map 0:v:0 -map 1:a:0 -movflags +faststart -vcodec h264 'file:2.2M views · 23K reactions ｜ Crunchy High Protein Chips 😋🔥 ｜ Keto Snackz [559260123368837].temp.mp4'
Deleting original file 2.2M views · 23K reactions ｜ Crunchy High Protein Chips 😋🔥 ｜ Keto Snackz [559260123368837].f1501315310579375v.mp4 (pass -k to keep)
Deleting original file 2.2M views · 23K reactions ｜ Crunchy High Protein Chips 😋🔥 ｜ Keto Snackz [559260123368837].f887923809754579a.m4a (pass -k to keep)
$ ffprobe -hide_banner -show_format -print_format csv 2.2M\ views\ ·\ 23K\ reactions\ ｜\ Crunchy\ High\ Protein\ Chips\ 😋🔥\ ｜\ Keto\ Snackz\ \[559260123368837\].mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2.2M views · 23K reactions ｜ Crunchy High Protein Chips 😋🔥 ｜ Keto Snackz [559260123368837].mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf59.27.100
  Duration: 00:00:10.08, start: 0.000000, bitrate: 3556 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1080x1920, 3538 kb/s, 60 fps, 60 tbr, 15360 tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc59.37.100 libx264
  Stream #0:1[0x2](und): Audio: aac (HE-AAC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 48 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
format,2.2M views · 23K reactions ｜ Crunchy High Protein Chips 😋🔥 ｜ Keto Snackz [559260123368837].mp4,2,0,"mov,mp4,m4a,3gp,3g2,mj2",QuickTime / MOV,0.000000,10.078000,4480600,3556737,100,isom,512,isomiso2avc1mp41,Lavf59.27.100

Bingo! Previous logs reveal the secret knowledge that Merger specifies -c copy ...; as the user-specified output arguments are inserted before the output filename, -vcodec h264 overrides the default copy codec.
This seems a bit lucky and likely to be broken in future, so maybe a more formal solution should be considered.
With --recode-video ..., the option value specifies a certain required container type, with whatever required media conversion, and there isn't a way to be more specific.
For cases like this the option syntax might be extended to specify, optionally, a required codec, compatible with the specified container by ext, say a semicolon-separated string of type:codec where type can be one of a, v, sandcodecis a name as defined inffmpeg -encodersfor thattype. In this case --recode-video mp4;v:h264` would be wanted.
A wild-card ext, meaning "the expected container ext" might also be supported, say @ (character that is generally not significant to a shell and also not used in codec names, or * or any) when specifying a codec: then --recode-video @;v:h264.

Discussion about or proposals for improving the --recode option should be continued in #7607

... not sure if it's possible to pass downloader args for one format but not the other

Actually, it doesn't matter when the arg is just -vcodec h264. As in the Merger PP, it overrides an existing default -c ... option, but since the -v semantics is forwarded into the ffmpeg download options (it isn't for PP) you get a message about the override:
$ yt-dlp -v --external-downloader ffmpeg --external-downloader-args 'ffmpeg:-vcodec h264' 'https://www.facebook.com/reel/559260123368837'
...
[debug] Invoking ffmpeg downloader on ...
...
Multiple -c, -codec, -acodec, -vcodec, -scodec or -dcodec options specified for stream 0, only the last option '-c:v h264' will be used.
...
$ gh\ Protein\ Chips\ 😋🔥\ ｜\ Keto\ Snackz\ \[559260123368837\].mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2.4M views · 26K reactions ｜ Crunchy High Protein Chips 😋🔥 ｜ Keto Snackz [559260123368837].mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf59.27.100
  Duration: 00:00:10.08, start: 0.000000, bitrate: 3556 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1080x1920, 3538 kb/s, 60 fps, 60 tbr, 15360 tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc59.37.100 libx264
  Stream #0:1[0x2](und): Audio: aac (HE-AAC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 48 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
format,2.4M views · 26K reactions ｜ Crunchy High Protein Chips 😋🔥 ｜ Keto Snackz [559260123368837].mp4,2,0,"mov,mp4,m4a,3gp,3g2,mj2",QuickTime / MOV,0.000000,10.078000,4480600,3556737,100,isom,512,isomiso2avc1mp41,Lavf59.27.100
$

As 3k more people have reacted to the page and ~197k more either tried this download or viewed the page, the title of the video now begins 2.4M ....


Upload option no longer appears in Source Control view

In the "Source Control" view, right clicking on files that have changed no longer shows the "Upload" option. This worked a few days ago with a previous version of VS Code and/or the extension.
Repro steps:

Go to Source Control tab
Right click on a file that has changed
Look for "Upload" option

Observed: No "Upload" verb appears in the Source Control view. However, it does appear in the normal Explorer view.
I tried re-installing the extension and restarting VS Code, and this didn't address the problem.
Desktop:

OS: Windows 10
VSCode Version 1.30.0
Extension Version 1.8.3

Extension Logs from Startup
[debug] register command "Cancel All Transfer" from "./commandCancelAllTransfer.ts"
[debug] register command "Config" from "./commandConfig.ts"
[debug] register command "List Active Folder" from "./commandListActiveFolder.ts"
[debug] register command "Open Ssh Connection" from "./commandOpenSshConnection.ts"
[debug] register command "Set Profile" from "./commandSetProfile.ts"
[debug] register command "Toggle Output Panel" from "./commandToggleOutputPanel.ts"
[debug] register command "Upload Changed Files" from "./commandUploadChangedFiles.ts"
[debug] register command "Delete Remote" from "./fileCommandDeleteRemote.ts"
[debug] register command "Diff" from "./fileCommandDiff.ts"
[debug] register command "Diff Active File" from "./fileCommandDiffActiveFile.ts"
[debug] register command "Download" from "./fileCommandDownload.ts"
[debug] register command "Download Active File" from "./fileCommandDownloadActiveFile.ts"
[debug] register command "Download Active Folder" from "./fileCommandDownloadActiveFolder.ts"
[debug] register command "Download File" from "./fileCommandDownloadFile.ts"
[debug] register command "Download Folder" from "./fileCommandDownloadFolder.ts"
[debug] register command "Download Force" from "./fileCommandDownloadForce.ts"
[debug] register command "Download Project" from "./fileCommandDownloadProject.ts"
[debug] register command "Edit In Local" from "./fileCommandEditInLocal.ts"
[debug] register command "List" from "./fileCommandList.ts"
[debug] register command "List All" from "./fileCommandListAll.ts"
[debug] register command "Reveal In Explorer" from "./fileCommandRevealInExplorer.ts"
[debug] register command "Reveal In Remote Explorer" from "./fileCommandRevealInRemoteExplorer.ts"
[debug] register command "Sync Both Directions" from "./fileCommandSyncBothDirections.ts"
[debug] register command "Sync Local To Remote" from "./fileCommandSyncLocalToRemote.ts"
[debug] register command "Sync Remote To Local" from "./fileCommandSyncRemoteToLocal.ts"
[debug] register command "Upload" from "./fileCommandUpload.ts"
[debug] register command "Upload Active File" from "./fileCommandUploadActiveFile.ts"
[debug] register command "Upload Active Folder" from "./fileCommandUploadActiveFolder.ts"
[debug] register command "Upload File" from "./fileCommandUploadFile.ts"
[debug] register command "Upload Folder" from "./fileCommandUploadFolder.ts"
[debug] register command "Upload Force" from "./fileCommandUploadForce.ts"
[debug] register command "Upload Project" from "./fileCommandUploadProject.ts"
[warn] ENOENT: no such file or directory, open 'C:\Users[REDACTED].ssh\config' load C:\Users[REDACTED].ssh\config failed
[info] config at [REDACTED] {"remotePath":"[REDACTED]","uploadOnSave":false,"downloadOnOpen":false,"ignore":[],"concurrency":4,"protocol":"sftp","connectTimeout":10000,"interactiveAuth":false,"secure":false,"passive":false,"remoteTimeOffsetInHours":0,"port":22,"host":"[REDACTED]","username":"[REDACTED]"}

Options in Source Control view:

Options in Explorer view:

It's been removed because of some flaws. You should use Upload Changed Files command.

I don't see the "Upload Changes Files" command. Only "Upload Active File"
and "Upload Active Folder" and "Upload Project". Is any configuration
needed to get this command to appear?
Any chance you'll consider supporting the upload option in Source Control
view in a future update?
On Sat, Dec 15, 2018 at 5:16 PM X.L<EMAIL_ADDRESS>wrote:

It's been removed because of some flaws. You should use Upload Changed
Files command.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/liximomo/vscode-sftp/issues/429#issuecomment-447610068,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AARQk2StQmIySlHH968QPXB59spV2Mk6ks5u5Z7egaJpZM4ZU1H7
.


dist vuetable-2.js un-minified version?

do you have an expanded vuetable-2.js file you could also make available in the dist folder? thanks!

@ratiw You can conditionally add plugins inside webpack.build.config based on an env variable
var outputFileName = "vuetable-2.js"
var plugins = [

    new webpack.BannerPlugin(banner, {
        raw: true
    }),
    new ExtractTextPlugin(cssFileName, { allChunks: true }),
    new StatsPlugin("../stats.json", {
        chunkModules: true
        //exclude: [/node_modules[\\\/]react/]
    })
];

if(process.env.minify === "true") {
  outputFileName  = "vuetable0-2,min.js";
    var minifyPlugins = [
        new webpack.DefinePlugin({
            "process.env" : {
                NODE_ENV : JSON.stringify("production")
            }
        }),
        new webpack.optimize.UglifyJsPlugin({
            compress: {
                warnings: false
            }
        }),
        new webpack.optimize.DedupePlugin()
    ];

    plugins = plugins.concat(minifyPlugins)

}

//build config
module.exports = [
 //other code
 output:{
  // other code
  filename: outputFileName
 },
 plugins:plugins,
]

Usage:
"build:bundle": "webpack --progress --config build/webpack.build.config.js",
"build:bundle-min:"cross-env minify=true webpack --progress --config build/webpack.build.config.js"

@cristijora Thanks as always. However, is it possible to just run build:bundle and it generates both the minify and un-minify version?

"build:bundle-simple": "webpack --progress --config build/webpack.build.config.js",
"build:bundle-min:"cross-env minify=true webpack --progress --config build/webpack.build.config.js",
"build:bundle": "npm run build:bundle-simple && npm run build:bundle-min"

You can create a new npm task which will run both

@cristijora, Thanks a lot 👍

@cristijora I've updated the webpack config to the one the generated by vue-cli v2.8.0 and now the build:bundle is no longer working. Can you please help look at it and send a PR for the fix? Sorry, for the trouble.

Shall I use develop branch ?

@cristijora Yes. Thank you.

Ok. The issue is that webpack.build.config.js is using webpack 1 and vue-cli uses webpack 2. I will make the necessary changes to port that config to webpack 2 also.

Thank you so much. Hope I didn't mess things up too much.
On Sun, May 28, 2017 at 6:50 PM, Cristi Jora<EMAIL_ADDRESS>wrote:

Ok. The issue is that webpack.build.config.js is using webpack 1 and
vue-cli uses webpack 2. I will make the necessary changes to port that
config to webpack 2 also.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/ratiw/vuetable-2/issues/153#issuecomment-304508963,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAxQaYWRPUnPRaL6hSVILvwvqvwbq94Lks5r-V-NgaJpZM4NloJC
.

closing as I see you have vuetable-2-full.js now. thanks.


form validation by onChange()

Sorry , my English is not good.
I get a issue about the validation from server.
I want to check the email/username exist and return the error message when users enteredd the field and onblur the field and server will return the result json to the form
how can i do the validation on this.

I found the form can onChange to handle the error


get wrongresult using infer_tensorrr_imagenet.py for multi-batch inference

Description

hi rmccorm4! I use your code to add optimization proflie for a Resnet101 onnx model which have a dynamic shape in batchsize, and bulid a int8 engine. But when i do inference with  infer_tensorrt_imagenet.py，i only get correct result with batchsize=1. For other batchsize, i get the most of output probability equal to 0.
I know that i should add something in runtime code, and follow https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#runtime_dimensions, but i didnt figure it out. Could u show me how to make the multi-batch inference, thank u!
Environment
TensorRT Version: TensorRT 7.2.1
GPU Type: P4
CUDA Version: 11.0
CUDNN Version: 8.0.5
Operating System + Version:  Ubuntu 18.04.5 LTS
Python Version (if applicable): 3.6.9
Relevant Files

i add codes to get the input shape with batchsize = 32,
# Run inference.
context.active_optimization_profile = 3
context_inputshape = context.get_binding_shape(0)
context.set_binding_shape(0, context_inputshape)
context.execute(batch_size, dbindings)

still get the wrong result like this.

Steps To Reproduce

Hi @ZuoMeng96 ,
Try context.execute_v2(findings) instead.
If that doesn't work, please try saving your engine to a file and running your engine with tensorrt-utils/inference/infer.py

Hi @ZuoMeng96 ,
Try context.execute_v2(dbindings) instead.
If that doesn't work, please try saving your engine to a file and running your engine with tensorrt-utils/inference/infer.py.
ex: python3 infer.py -e resnet101.engine

Thanks @rmccorm4 . That infer_tensorrt_imagenet.py didn't handle the different profiles at runtime, if there is only one  profile matched with input it does work.


Monitor user feedback and make iterative improvements based on user responses and suggestions.

Can you please explain the issue and how will you proceed? @TANIYASHARMA30