update toolchain to llvm 18

I would like to reinterpret the buffer before calling process_data, what's your opinion on that @omarhogni ?

I would like to reinterpret the buffer before calling process_data, what's your opinion on that @omarhogni ?

to which type?

@jbbjarnason You are missing alignment check for reinterpret cast, on x86_64 it will work unaligned but will be slow, on some older arms it will just crash, on modern >= armv7 unaligned should work but same as on x64 very slow
And I would use some span_cast as below to avoid mistakes with size
template<typename T, typename... Args>
concept same_as_any_of = std::disjunction_v<std::is_same<T, Args>...>;

template<typename T>
concept byte_like = same_as_any_of<T, std::byte, char, uint8_t>;

template<typename T>
concept trivially_copyable_non_byte = std::is_trivially_copyable_v<T> && !byte_like<T>;

template<byte_like SrcType, trivially_copyable_non_byte DstType>
[[nodiscard]]
constexpr auto span_cast(std::span<SrcType> src) -> std::span<const DstType> {
    assert((reinterpret_cast<std::uintptr_t>(src.data()) % alignof(DstType) == 0) && "Data must be aligned to the destination type");
    std::size_t dst_size = src.size_bytes() / sizeof(DstType);
    return {reinterpret_cast<const DstType*>(src.data()), dst_size};
}


FireStore GaxError: Request Entity Too Large

Not clear if this is a bug or not, but the error message seemed pretty strange. The code below threw the following error messsage:
import json
from google.cloud import firestore

db = firestore.Client.from_service_account_json('serviceAccountCredentials.json')
data = json.load(open('/home/alexander/Downloads/cresicor-dev-export.json'))

companies = data['companies']

# update companies
for cid, company in companies.items():
    company_ref = db.collection('companies').document(cid)
    company_ref.set(company)

Error Message:
---------------------------------------------------------------------------
_Rendezvous                               Traceback (most recent call last)
/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/api_callable.py in inner(*args, **kwargs)
    375         try:
--> 376             return a_func(*args, **kwargs)
    377         # pylint: disable=catching-non-exception

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/retry.py in inner(*args)
     67         updated_args = args + (timeout,)
---> 68         return a_func(*updated_args, **kwargs)
     69

/home/alexander/anaconda3/lib/python3.5/site-packages/grpc/_channel.py in __call__(self, request, timeout, metadata, credentials)
    506                                                credentials)
--> 507         return _end_unary_response_blocking(state, call, False, deadline)
    508

/home/alexander/anaconda3/lib/python3.5/site-packages/grpc/_channel.py in _end_unary_response_blocking(state, call, with_call, deadline)
    454     else:
--> 455         raise _Rendezvous(state, None, None, deadline)
    456

_Rendezvous: <_Rendezvous of RPC that terminated with (StatusCode.UNAVAILABLE, 413:Request Entity Too Large)>

During handling of the above exception, another exception occurred:

GaxError                                  Traceback (most recent call last)
<ipython-input-8-b018dddf4a82> in <module>()
     12 for cid, company in companies.items():
     13     company_ref = db.collection('companies').document(cid)
---> 14     company_ref.set(company)
     15
     16 # update users

/home/alexander/anaconda3/lib/python3.5/site-packages/google/cloud/firestore_v1beta1/document.py in set(self, document_data, option)
    222         batch = self._client.batch()
    223         batch.set(self, document_data, option=option)
--> 224         write_results = batch.commit()
    225         return _first_write_result(write_results)
    226

/home/alexander/anaconda3/lib/python3.5/site-packages/google/cloud/firestore_v1beta1/batch.py in commit(self)
    133             commit_response = self._client._firestore_api.commit(
    134                 self._client._database_string, self._write_pbs,
--> 135                 transaction=None, options=self._client._call_options)
    136
    137         self._write_pbs = []

/home/alexander/anaconda3/lib/python3.5/site-packages/google/cloud/firestore_v1beta1/gapic/firestore_client.py in commit(self, database, writes, transaction, options)
    849         request = firestore_pb2.CommitRequest(
    850             database=database, writes=writes, transaction=transaction)
--> 851         return self._commit(request, options)
    852
    853     def rollback(self, database, transaction, options=None):

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/api_callable.py in inner(request, options)
    450                 func, this_settings.timeout, **this_settings.kwargs)
    451         api_call = _catch_errors(api_call, gax.config.API_ERRORS)
--> 452         return api_caller(api_call, this_settings, request)
    453
    454     if settings.page_descriptor:

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/api_callable.py in base_caller(api_call, _, *args)
    436     def base_caller(api_call, _, *args):
    437         """Simply call api_call and ignore settings."""
--> 438         return api_call(*args)
    439
    440     def inner(request, options=None):

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/api_callable.py in inner(*args, **kwargs)
    378         except tuple(to_catch) as exception:
    379             utils.raise_with_traceback(
--> 380                 gax.errors.create_error('RPC failed', cause=exception))
    381
    382     return inner

/home/alexander/anaconda3/lib/python3.5/site-packages/future/utils/__init__.py in raise_with_traceback(exc, traceback)
    417         if traceback == Ellipsis:
    418             _, _, traceback = sys.exc_info()
--> 419         raise exc.with_traceback(traceback)
    420
    421 else:

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/api_callable.py in inner(*args, **kwargs)
    374         """Wraps specified exceptions"""
    375         try:
--> 376             return a_func(*args, **kwargs)
    377         # pylint: disable=catching-non-exception
    378         except tuple(to_catch) as exception:

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/retry.py in inner(*args)
     66         """Updates args with the timeout."""
     67         updated_args = args + (timeout,)
---> 68         return a_func(*updated_args, **kwargs)
     69
     70     return inner

/home/alexander/anaconda3/lib/python3.5/site-packages/grpc/_channel.py in __call__(self, request, timeout, metadata, credentials)
    505         state, call, deadline = self._blocking(request, timeout, metadata,
    506                                                credentials)
--> 507         return _end_unary_response_blocking(state, call, False, deadline)
    508
    509     def with_call(self, request, timeout=None, metadata=None, credentials=None):

/home/alexander/anaconda3/lib/python3.5/site-packages/grpc/_channel.py in _end_unary_response_blocking(state, call, with_call, deadline)
    453             return state.response
    454     else:
--> 455         raise _Rendezvous(state, None, None, deadline)
    456
    457

GaxError: GaxError(RPC failed, caused by <_Rendezvous of RPC that terminated with (StatusCode.UNAVAILABLE, 413:Request Entity Too Large)>)

I tried breaking the write operation down, and I got another weird error:
import json
from google.cloud import firestore

db = firestore.Client.from_service_account_json('serviceAccountCredentials.json')
data = json.load(open('/home/alexander/Downloads/cresicor-dev-export.json'))

companies = data['companies']

# update companies
for cid, company in companies.items():
    for fid, field in company.items():
        field_ref = db.collection('companies').document(cid + '/' + fid)
        field_ref.set(field)

Error:
---------------------------------------------------------------------------
_Rendezvous                               Traceback (most recent call last)
/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/api_callable.py in inner(*args, **kwargs)
    375         try:
--> 376             return a_func(*args, **kwargs)
    377         # pylint: disable=catching-non-exception

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/retry.py in inner(*args)
     67         updated_args = args + (timeout,)
---> 68         return a_func(*updated_args, **kwargs)
     69

/home/alexander/anaconda3/lib/python3.5/site-packages/grpc/_channel.py in __call__(self, request, timeout, metadata, credentials)
    506                                                credentials)
--> 507         return _end_unary_response_blocking(state, call, False, deadline)
    508

/home/alexander/anaconda3/lib/python3.5/site-packages/grpc/_channel.py in _end_unary_response_blocking(state, call, with_call, deadline)
    454     else:
--> 455         raise _Rendezvous(state, None, None, deadline)
    456

_Rendezvous: <_Rendezvous of RPC that terminated with (StatusCode.INVALID_ARGUMENT, Document name "projects/cresicor-dev/databases/(default)/documents/companies/4Ksz1cDrEA/actual" lacks "/" at index 79.)>

During handling of the above exception, another exception occurred:

InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-22-3f0c888825ab> in <module>()
     23     for fid, field in company.items():
     24         field_ref = db.collection('companies').document(cid + '/' + fid)
---> 25         field_ref.set(field)

/home/alexander/anaconda3/lib/python3.5/site-packages/google/cloud/firestore_v1beta1/document.py in set(self, document_data, option)
    222         batch = self._client.batch()
    223         batch.set(self, document_data, option=option)
--> 224         write_results = batch.commit()
    225         return _first_write_result(write_results)
    226

/home/alexander/anaconda3/lib/python3.5/site-packages/google/cloud/firestore_v1beta1/batch.py in commit(self)
    133             commit_response = self._client._firestore_api.commit(
    134                 self._client._database_string, self._write_pbs,
--> 135                 transaction=None, options=self._client._call_options)
    136
    137         self._write_pbs = []

/home/alexander/anaconda3/lib/python3.5/site-packages/google/cloud/firestore_v1beta1/gapic/firestore_client.py in commit(self, database, writes, transaction, options)
    849         request = firestore_pb2.CommitRequest(
    850             database=database, writes=writes, transaction=transaction)
--> 851         return self._commit(request, options)
    852
    853     def rollback(self, database, transaction, options=None):

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/api_callable.py in inner(request, options)
    450                 func, this_settings.timeout, **this_settings.kwargs)
    451         api_call = _catch_errors(api_call, gax.config.API_ERRORS)
--> 452         return api_caller(api_call, this_settings, request)
    453
    454     if settings.page_descriptor:

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/api_callable.py in base_caller(api_call, _, *args)
    436     def base_caller(api_call, _, *args):
    437         """Simply call api_call and ignore settings."""
--> 438         return api_call(*args)
    439
    440     def inner(request, options=None):

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/api_callable.py in inner(*args, **kwargs)
    378         except tuple(to_catch) as exception:
    379             utils.raise_with_traceback(
--> 380                 gax.errors.create_error('RPC failed', cause=exception))
    381
    382     return inner

/home/alexander/anaconda3/lib/python3.5/site-packages/future/utils/__init__.py in raise_with_traceback(exc, traceback)
    417         if traceback == Ellipsis:
    418             _, _, traceback = sys.exc_info()
--> 419         raise exc.with_traceback(traceback)
    420
    421 else:

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/api_callable.py in inner(*args, **kwargs)
    374         """Wraps specified exceptions"""
    375         try:
--> 376             return a_func(*args, **kwargs)
    377         # pylint: disable=catching-non-exception
    378         except tuple(to_catch) as exception:

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/retry.py in inner(*args)
     66         """Updates args with the timeout."""
     67         updated_args = args + (timeout,)
---> 68         return a_func(*updated_args, **kwargs)
     69
     70     return inner

/home/alexander/anaconda3/lib/python3.5/site-packages/grpc/_channel.py in __call__(self, request, timeout, metadata, credentials)
    505         state, call, deadline = self._blocking(request, timeout, metadata,
    506                                                credentials)
--> 507         return _end_unary_response_blocking(state, call, False, deadline)
    508
    509     def with_call(self, request, timeout=None, metadata=None, credentials=None):

/home/alexander/anaconda3/lib/python3.5/site-packages/grpc/_channel.py in _end_unary_response_blocking(state, call, with_call, deadline)
    453             return state.response
    454     else:
--> 455         raise _Rendezvous(state, None, None, deadline)
    456
    457

InvalidArgumentError: InvalidArgumentError(RPC failed, caused by <_Rendezvous of RPC that terminated with (StatusCode.INVALID_ARGUMENT, Document name "projects/cresicor-dev/databases/(default)/documents/companies/4Ksz1cDrEA/actual" lacks "/" at index 79.)>)

So for the first error, it seems you are clear on what the issue is, your entity was too large. I'm not sure what the limits are, maybe @samtstern can help there?
As for the second, the string which is the full document key has a length of 79, so the error essentially says it's an incomplete key.
The issue is essentially my fault (I'm the sole dev of the firestore package) for allowing a / in collection or document names.
So if you use a delimiter other than / in
field_ref = db.collection('companies').document(cid + '/' + fid)

when combining cid and fid, you will have no issues.

Hmm, I changed the line in question to
 field_ref = db.collection('companies').document(cid + '.' + fid)
and I got a different error message:
---------------------------------------------------------------------------
_Rendezvous                               Traceback (most recent call last)
/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/api_callable.py in inner(*args, **kwargs)
    375         try:
--> 376             return a_func(*args, **kwargs)
    377         # pylint: disable=catching-non-exception

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/retry.py in inner(*args)
     67         updated_args = args + (timeout,)
---> 68         return a_func(*updated_args, **kwargs)
     69

/home/alexander/anaconda3/lib/python3.5/site-packages/grpc/_channel.py in __call__(self, request, timeout, metadata, credentials)
    506                                                credentials)
--> 507         return _end_unary_response_blocking(state, call, False, deadline)
    508

/home/alexander/anaconda3/lib/python3.5/site-packages/grpc/_channel.py in _end_unary_response_blocking(state, call, with_call, deadline)
    454     else:
--> 455         raise _Rendezvous(state, None, None, deadline)
    456

_Rendezvous: <_Rendezvous of RPC that terminated with (StatusCode.INVALID_ARGUMENT, Too many indexed properties)>

During handling of the above exception, another exception occurred:

InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-23-2b0be71d20d1> in <module>()
     23     for fid, field in company.items():
     24         field_ref = db.collection('companies').document(cid + '.' + fid)
---> 25         field_ref.set(field)

/home/alexander/anaconda3/lib/python3.5/site-packages/google/cloud/firestore_v1beta1/document.py in set(self, document_data, option)
    222         batch = self._client.batch()
    223         batch.set(self, document_data, option=option)
--> 224         write_results = batch.commit()
    225         return _first_write_result(write_results)
    226

/home/alexander/anaconda3/lib/python3.5/site-packages/google/cloud/firestore_v1beta1/batch.py in commit(self)
    133             commit_response = self._client._firestore_api.commit(
    134                 self._client._database_string, self._write_pbs,
--> 135                 transaction=None, options=self._client._call_options)
    136
    137         self._write_pbs = []

/home/alexander/anaconda3/lib/python3.5/site-packages/google/cloud/firestore_v1beta1/gapic/firestore_client.py in commit(self, database, writes, transaction, options)
    849         request = firestore_pb2.CommitRequest(
    850             database=database, writes=writes, transaction=transaction)
--> 851         return self._commit(request, options)
    852
    853     def rollback(self, database, transaction, options=None):

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/api_callable.py in inner(request, options)
    450                 func, this_settings.timeout, **this_settings.kwargs)
    451         api_call = _catch_errors(api_call, gax.config.API_ERRORS)
--> 452         return api_caller(api_call, this_settings, request)
    453
    454     if settings.page_descriptor:

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/api_callable.py in base_caller(api_call, _, *args)
    436     def base_caller(api_call, _, *args):
    437         """Simply call api_call and ignore settings."""
--> 438         return api_call(*args)
    439
    440     def inner(request, options=None):

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/api_callable.py in inner(*args, **kwargs)
    378         except tuple(to_catch) as exception:
    379             utils.raise_with_traceback(
--> 380                 gax.errors.create_error('RPC failed', cause=exception))
    381
    382     return inner

/home/alexander/anaconda3/lib/python3.5/site-packages/future/utils/__init__.py in raise_with_traceback(exc, traceback)
    417         if traceback == Ellipsis:
    418             _, _, traceback = sys.exc_info()
--> 419         raise exc.with_traceback(traceback)
    420
    421 else:

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/api_callable.py in inner(*args, **kwargs)
    374         """Wraps specified exceptions"""
    375         try:
--> 376             return a_func(*args, **kwargs)
    377         # pylint: disable=catching-non-exception
    378         except tuple(to_catch) as exception:

/home/alexander/anaconda3/lib/python3.5/site-packages/google/gax/retry.py in inner(*args)
     66         """Updates args with the timeout."""
     67         updated_args = args + (timeout,)
---> 68         return a_func(*updated_args, **kwargs)
     69
     70     return inner

/home/alexander/anaconda3/lib/python3.5/site-packages/grpc/_channel.py in __call__(self, request, timeout, metadata, credentials)
    505         state, call, deadline = self._blocking(request, timeout, metadata,
    506                                                credentials)
--> 507         return _end_unary_response_blocking(state, call, False, deadline)
    508
    509     def with_call(self, request, timeout=None, metadata=None, credentials=None):

/home/alexander/anaconda3/lib/python3.5/site-packages/grpc/_channel.py in _end_unary_response_blocking(state, call, with_call, deadline)
    453             return state.response
    454     else:
--> 455         raise _Rendezvous(state, None, None, deadline)
    456
    457

InvalidArgumentError: InvalidArgumentError(RPC failed, caused by <_Rendezvous of RPC that terminated with (StatusCode.INVALID_ARGUMENT, Too many indexed properties)>)

@alexanderwhatley You are really putting the API through it's paces :grinning:
I'm surprised to see this, as the concepted of unindexed properties doesn't seem to be part of the Firestore API definition.
I'd guess a more proper reading of that error message is "too many properties" rather than "Too many indexed properties". Though it's also very possible I have made a programming mistake.
Do you mind sharing how many properties you are trying to add when the failure occurs?

@dhermes, would you mind if I email you the data and the code I used so you can try to replicate on your end? Would probably be easier that way.

That would be fine with me.

Emailed you.

@samtstern, @dhermes any updates on this?

Bump.

It's been a couple weeks now @dhermes. Any updates?

Sorry for the delay, I am a bit swamped.

@alexanderwhatley @samtstern After checking out the data, I have found the issue (I think).
Two of the entities (named actual and expected) had 20,510 keys, but there is a hard limit that is less than that number.
@samtstern Can the limit be published? Can we file a bug with the backend team to make the issue clearer in the error message? Either say "you tried to upload X MB and the limit is Y MB" or "you tried to upload Z properties and the limit is T properties"?

+1

@dhermes, would the solution for now to be to break the request up (say into chunks of size <=10000)?

@alexanderwhatley Yes. 20,000 properties is a lot. It seems you'd rather have a list with 20,000 entities than unique keys in a dictionary?
I can't really give recommendations on how to use the Firestore API though, I just wrote the client. (i.e. I don't have intimate knowledge of the backend). @samtstern May know better.

@dhermes, oh, perhaps there is a misunderstanding on my part then. I was trying to import this data from firebase, and store all of the entries in the same way, i.e. as dictionary entries under the main fields.

I'm a bit confused at this point. This issue presented in two ways:

"413:Request Entity Too Large"
"Too many indexed properties"

Both of these involve you adding data to Firebase, not importing/reading from Firebase. There is no issue with reading data that is already stored.

So what I did was what the Firestore documentation recommended: I downloaded my Firebase data as a JSON file (which is what I emailed to you.) I then tried to push all of the data in the exact same format to Firestore.

Gotcha. I have to tap out at this point: my Firebase knowledge is too limited.
@jonparrott @samtstern do you know of any resources I can point to? (There doesn't seem to be any Firebase link on https://cloud.google.com/support/docs/issue-trackers)

@dhermes Just for clarity: the source data is from firebase, being migrated into firestore.
@alexanderwhatley Maybe the difference in the data models between Firebase RTD and Firestore is what is tripping you up?  I.e., you need to break up that one, massive JSON top-level mapping into individual documents (one per key?  I'm just guessing).

Hi @tseaver, I tried that, but it was incredibly slow (I have more than 20,000 keys for some of the fields after all), which is why I'm looking for a reasonable workaround here.

Apologies for my delay here.  Just to recap, there are the following limits on a document (all specified here):
https://cloud.google.com/firestore/quotas

Your document can only have 20,000 fields due to indexing limits.
The total size of your document can only be 1MB.

For the fields limit nested fields count as well, so this doc has 5 properties:
{
  name: Sam, // 1
  age: 100,  // 2
  likes: {
     turtles: true, // 3
     ponies: false, // 4
     football: true // 5
  }
}

When you get "too many indexed properties" your document has >= 20,001 fields.  When you get "request entity too large" you have exceeded the 1MB document total size limit.
Neither of these can be solved by "breaking up" your request into multiple calls, these are limits on documents themselves.
What does one company object look like?  I am trying to understand why it would have 20,000 properties.  If I see an example we can discuss alternate data structures.

@samtstern, would you mind if I email the same data file to you? It would probably be easier to directly view the data than for me to describe it here.

@alexanderwhatley sure, that will work.

@dhermes I believe we can close this issue as it's not a problem with the Python library but rather just a more general issue of proper data structuring in Cloud Firestore.  I can confirm that the example data for a "company" that Alexander sent over to me is both over 1MB and has more than 20,000 fields so the errors are expected.
I will see what I can do about getting clearer error messages and I am working with Alexander privately over email to choose a more efficient structure.

Great thanks!


External bins could be bundled without target in the name?

Is your feature request related to a problem? Please describe.
externalBins have to have the form name-$TARGET on the file system, where name is what's actually specified in the array. This much makes sense, but it's a slight pain to then use them from them main application which has to look for them in the bundle with that name.
Describe the solution you'd like
It would be convenient if name-$TARGET was bundled as simply name, since there would be no conflict once bundled.
Describe alternatives you've considered
Can look up the uname at runtime, or name-*, or whatever, to find the appropriate (and only) binary.
Additional context

How would you differentiate the linux and macOS binaries then?
We do provide an API to find the binary path though (which will be improved on the next release).

How would you differentiate the linux and macOS binaries then?

I've only been using one machine so far, so I assumed only the relevant name-$TARGET binary was included in $TARGET's build - bundle/osx/app_1.2.3_x64.app only needs the x86_64-apple-darwin variant, for example?

We do provide an API to find the binary path though

Ah yes - tauri_utils::target_triple() 👍🏻.
This makes me realise another issue - the path would be format!("{}/../Contents/{}-{}", resource_dir(), bin_name, target_triple()) on MacOS, but that ../Contents is platform-specific. (I don't have my usual Linux machine to hand, but I assume it would be in libexec instead.) Perhaps that's what's known about and to be impoved in the next release? 🙂
(To circle back to the first point, I think it would be unusual to put x86_64-linux-gnu or whatever suffixes there on a system whereethat's necessarily the case for all (functional) binaries. Perhaps I've misunderstood?)

At least, those are the paths mentioned in the docs - what I'm actually seeing is it returning the path to the parent directory of the main app, i.e. src-tauri/target/debug, or src-tauri/target/debug/bundle/osx/app_version.app/Contents/MacOS, et al. - not (as the docs say):

${exe_dir}../Resources (inside .app).

(It's actually more convenient for this purpose as it is. Though maybe the name's confusing if you did want icons or whatever from Resources.)

How would you differentiate the linux and macOS binaries then?

I've only been using one machine so far, so I assumed only the relevant name-$TARGET binary was included in $TARGET's build - bundle/osx/app_1.2.3_x64.app only needs the x86_64-apple-darwin variant, for example?

We do provide an API to find the binary path though

Ah yes - tauri_utils::platform::target_triple() 👍🏻.
This makes me realise another issue - the path would be format!("{}/../Contents/{}-{}", resource_dir(), bin_name, target_triple()) on MacOS, but that ../Contents is platform-specific. (I don't have my usual Linux machine to hand, but I assume it would be in libexec instead.) Perhaps that's what's known about and to be impoved in the next release?
(To circle back to the first point, I think it would be unusual to put x86_64-linux-gnu or whatever suffixes there on a system whereethat's necessarily the case for all (functional) binaries. Perhaps I've misunderstood?)

I meant this API (yeah it doesn't look so good or easy to understand, it'll be rewritten.

Ah, thanks! tauri_api::command::get_output("name".into(), args, std::process::Stdio::piped()) is just what I needed. 🙂

I'm reopening this issue because I think we should support this.

I've evaluated it and the change isn't worth the work IMO - convention over configuration. We can reevaluate if more people prefers this, but since Tauri is a cross platform framework, I think we should stick with the target triple solution.


Added SciFiTitleCard

Added new SciFiTitleCard and updated my README, the primary README and the cards.json.

Okay so I made a few changes:

I added the CardModel (required for the UI)
Removed the specified font replacements, as those are not relevant to the default Font
Corrected USES_SEASON_TITLE to False
Removed all references to season text from the card (unused)
Added the episode_text_color and stroke_color extras
Removed the season and episode number arguments in __init__ (unused)
Removed the episode prefix text detection (unused)
Added support for the interword spacing Font option
Removed erroneous references to separate season and episode count fonts

If that all looks good, I'll test out the card and then we can merge it

All sounds good to me.  I'll try to be more careful next time.  Still trying to get an understanding of all the aspects of the cardtype formatting.

@azuravian It's not a problem, I don't have this documented anywhere and the format is very specific.
I also just added an extra to disable adding the _ to the title text.

Sounds good, I considered that myself, but it was already pretty extra heavy.  I guess more options isn't a problem though.

Yeah you can never have enough extras! Especially since they're pretty easy to select within the UI now. But looks good! Thanks for creating this


Insecure default cipher

The default cipher implementation at https://github.com/Jsondb/jsondb-core/blob/c49654d1eee2ace4d5ca5be19730652a966ce7f4/src/main/java/io/jsondb/crypto/DefaultAESCBCCipher.java is vulnerable to various attacks.
The cipher construction used is AES-128/192/256 in CBC mode with PKCS5 padding with the key as the IV and no authentication.

Lack of authentication leads to various interactive attacks. PKCS5+CBC makes these attacks fairly simple.
Using the key as the IV can be used to reveal the key, as CBC does not protect the confidentiality of the IV. For example, given a limited decryption oracle, an attacker could decrypt two identical blocks A||A. The decryption oracle in this mode will yield (Dec_K(A)^K) || (Dec_K(A)^A), which can be used to extract K.
Using the same IV repeatedly leads to distinguisher attacks.

All in all, this set of algorithms provides IND-EAV security at most. While the documentation does state that "CBC may not be the most secure mode", this is a severe understatement. Offering this set of algorithms as the only default, and even offering it at all, will lead to insecure storage of secrets.

Thanks for finding this, how pathetic of me I never ever gave a thought to this aspect. I will fix this asap with some other things I have in mind.

@yawkat do you have any suggestions for the chiper to use?

The "ideal" solution would be something like NaCl's crypto_secretbox. However, this would entail adding external libraries, which is probably overkill for this project.
Using only the Java standard library, our suggestion would be AES-GCM. A quick google shows this example: https://gist.github.com/praseodym/f2499b3e14d872fe5b4a which seems sane. The AAD part is not relevant here I believe, since you have no associated plaintext data. The nonce for the operation must be random - GCM is not nonce-reuse resistant. Also note that SecureRandom.getInstanceStrong, as used in the example, may block. Another SecureRandom provider such as SHA1PRNG may be better if you wish to avoid this, and should not seriously undermine security.

This has been fixed by @rzwitserloot


OCP4.6: ovn-kubernetes implementation has changed significantly

What happened:
Connectivity does not work
What you expected to happen:
Connectivity to work.
How to reproduce it (as minimally and precisely as possible):
Deploy one cluster at least
Anything else we need to know?:
route agent on the gateway shows this error:
E1203 07:38:29.021015       1 endpoint_created.go:22] Error handling created endpoint: TransitionToGateway failed: "ovn-hostroutes-handler" returned error: error adding submariner default: network is unreachable

+ '[' /usr/sbin '!=' unknown ']'                                                                                [1491/1844]
+ echo 'iptables is present on the host at /usr/sbin/iptables'
+ sed 's!@@PATH@@!/usr/sbin!' /usr/sbin/iptables-wrapper.in
+ exec submariner-route-agent -v=2 -alsologtostderr
I1203 07:38:14.654607       1 main.go:34] Starting submariner-route-agent using the event framework
W1203 07:38:14.654863       1 client_config.go:543] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
I1203 07:38:14.658520       1 cni_iface.go:46] Interface "lo" has "<IP_ADDRESS>" address
I1203 07:38:14.658678       1 cni_iface.go:46] Interface "br-ex" has "<IP_ADDRESS>" address
I1203 07:38:14.658986       1 cni_iface.go:46] Interface "ovn-k8s-gw0" has "<IP_ADDRESS>" address
I1203 07:38:14.659048       1 cni_iface.go:46] Interface "ovn-k8s-mp0" has "<IP_ADDRESS>" address
I1203 07:38:14.659056       1 cni_iface.go:51] Found CNI Interface "ovn-k8s-mp0" that has IP "<IP_ADDRESS>" from ClusterCIDR "<IP_ADDRESS>/14"
I1203 07:38:14.681152       1 cni_iface.go:101] Successfully annotated node "ip-10-0-22-131.us-east-2.compute.internal" with cniIfaceIP "<IP_ADDRESS>"
I1203 07:38:14.681171       1 registry.go:50] Event handler "logger" added to registry "routeagent_driver".
I1203 07:38:14.681179       1 registry.go:52] Event handler "kubeproxy-iptables-handler" ignored for registry "routeagent_driver".
I1203 07:38:14.681187       1 registry.go:50] Event handler "ovn-hostroutes-handler" added to registry "routeagent_driver".
W1203 07:38:14.681243       1 client_config.go:543] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
I1203 07:38:28.888446       1 controller.go:124] Starting the Event controller...
I1203 07:38:28.988939       1 handler.go:54] A new Endpoint for remote cluster "cluster-c" has been created: v1.EndpointSpec{ClusterID:"cluster-c", CableName:"submariner-cable-cluster-c-10-0-93-189", HealthCheckIP:"<IP_ADDRESS>", Hostname:"
ip-10-0-93-189", Subnets:[]string{"<IP_ADDRESS>/16", "<IP_ADDRESS>/14"}, PrivateIP:"<IP_ADDRESS>", PublicIP:"<IP_ADDRESS>", NATEnabled:true, Backend:"libreswan", BackendConfig:map[string]string(nil)}
I1203 07:38:28.989076       1 handler.go:39] A new Endpoint for the local cluster has been created: v1.EndpointSpec{ClusterID:"cluster-d", CableName:"submariner-cable-cluster-d-10-0-22-131", HealthCheckIP:"<IP_ADDRESS>", Hostname:"ip-10-0-2
2-131", Subnets:[]string{"<IP_ADDRESS>/16", "<IP_ADDRESS>/14"}, PrivateIP:"<IP_ADDRESS>", PublicIP:"<IP_ADDRESS>", NATEnabled:true, Backend:"libreswan", BackendConfig:map[string]string(nil)}
I1203 07:38:28.989327       1 handler.go:34] The current node has become a Gateway
E1203 07:38:28.989554       1 endpoint_created.go:22] Error handling created endpoint: TransitionToGateway failed: "ovn-hostroutes-handler" returned error: error adding submariner default: network is unreachable
I1203 07:38:29.000127       1 handler.go:39] A new Endpoint for the local cluster has been created: v1.EndpointSpec{ClusterID:"cluster-d", CableName:"submariner-cable-cluster-d-10-0-22-131", HealthCheckIP:"<IP_ADDRESS>", Hostname:"ip-10-0-2
2-131", Subnets:[]string{"<IP_ADDRESS>/16", "<IP_ADDRESS>/14"}, PrivateIP:"<IP_ADDRESS>", PublicIP:"<IP_ADDRESS>", NATEnabled:true, Backend:"libreswan", BackendConfig:map[string]string(nil)}
I1203 07:38:29.000372       1 handler.go:34] The current node has become a Gateway
E1203 07:38:29.000470       1 endpoint_created.go:22] Error handling created endpoint: TransitionToGateway failed: "ovn-hostroutes-handler" returned error: error adding submariner default: network is unreachable
I1203 07:38:29.020694       1 handler.go:39] A new Endpoint for the local cluster has been created: v1.EndpointSpec{ClusterID:"cluster-d", CableName:"submariner-cable-cluster-d-10-0-22-131", HealthCheckIP:"<IP_ADDRESS>", Hostname:"ip-10-0-2
2-131", Subnets:[]string{"<IP_ADDRESS>/16", "<IP_ADDRESS>/14"}, PrivateIP:"<IP_ADDRESS>", PublicIP:"<IP_ADDRESS>", NATEnabled:true, Backend:"libreswan", BackendConfig:map[string]string(nil)}
I1203 07:38:29.020897       1 handler.go:34] The current node has become a Gateway
E1203 07:38:29.021015       1 endpoint_created.go:22] Error handling created endpoint: TransitionToGateway failed: "ovn-hostroutes-handler" returned error: error adding submariner default: network is unreachable
I1203 07:38:29.061224       1 handler.go:39] A new Endpoint for the local cluster has been created: v1.EndpointSpec{ClusterID:"cluster-d", CableName:"submariner-cable-cluster-d-10-0-22-131", HealthCheckIP:"<IP_ADDRESS>", Hostname:"ip-10-0-2
2-131", Subnets:[]string{"<IP_ADDRESS>/16", "<IP_ADDRESS>/14"}, PrivateIP:"<IP_ADDRESS>", PublicIP:"<IP_ADDRESS>", NATEnabled:true, Backend:"libreswan", BackendConfig:map[string]string(nil)}
I1203 07:38:29.061427       1 handler.go:34] The current node has become a Gateway
E1203 07:38:29.061530       1 endpoint_created.go:22] Error handling created endpoint: TransitionToGateway failed: "ovn-hostroutes-handler" returned error: error adding submariner default: network is unreachable
I1203 07:38:29.088646       1 controller.go:131] Event controller started
I1203 07:38:29.089604       1 handler.go:72] A Node with name "ip-10-0-22-131.us-east-2.compute.internal" and addresses []v1.NodeAddress{v1.NodeAddress{Type:"InternalIP", Address:"<IP_ADDRESS>"}, v1.NodeAddress{Type:"ExternalIP", Address:"
<IP_ADDRESS>"}, v1.NodeAddress{Type:"Hostname", Address:"ip-10-0-22-131.us-east-2.compute.internal"}, v1.NodeAddress{Type:"InternalDNS", Address:"ip-10-0-22-131.us-east-2.compute.internal"}, v1.NodeAddress{Type:"ExternalDNS", Address:"e
c2-18-189-185-228.us-east-2.compute.amazonaws.com"}} has been added to the cluster
I1203 07:38:29.090209       1 handler.go:72] A Node with name "ip-10-0-149-197.us-east-2.compute.internal" and addresses []v1.NodeAddress{v1.NodeAddress{Type:"InternalIP", Address:"<IP_ADDRESS>"}, v1.NodeAddress{Type:"Hostname", Address:$
ip-10-0-149-197.us-east-2.compute.internal"}, v1.NodeAddress{Type:"InternalDNS", Address:"ip-10-0-149-197.us-east-2.compute.internal"}} has been added to the cluster

Environment:

Submariner version (use subctl version):
Kubernetes version (use kubectl version):
Cloud provider or hardware configuration:
OS (e.g: cat /etc/os-release):
Kernel (e.g. uname -a):
Install tools:
Network plugin and version (if this is a network-related bug):
Others:

ovn things have changed with node-local support: https://github.com/ovn-org/ovn-kubernetes/blob/master/docs/design/shared_gw_dgp.md

ovn_kube_new_arch.txt
dump.sh.txt

Fixed in https://github.com/submariner-io/submariner/pull/997


Add a warning for the deletion command

The deletions are permanent so we are working on adding warning for these locations where customer can pull the information to perform the deletions.  Please add the below to any AZ command for DevTest labs that is for deleting:

[!CAUTION]
Deleting resources from your lab is permanent, and cannot be undone.

Related command

Description

Testing Guide

History Notes

[Component Name 1] BREAKING CHANGE: az command a: Make some customer-facing breaking change
[Component Name 2] az command b: Add some customer-facing feature

This checklist is used to make sure that common guidelines for a pull request are followed.

[ ] The PR title and description has followed the guideline in Submitting Pull Requests.

[ ] I adhere to the Command Guidelines.

[ ] I adhere to the Error Handling Guidelines.

lab


[zoom] Password starting with "^" character not accepted

DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

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

Checklist

[X] I'm reporting a bug unrelated to a specific site
[X] I've verified that I'm running yt-dlp version 2022.11.11 (update instructions) or later (specify commit)
[X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
[X] I've checked that all URLs and arguments with special characters are properly quoted or escaped
[X] I've searched the bugtracker for similar issues including closed ones. DO NOT post duplicates
[X] I've read the guidelines for opening an issue

Provide a description that is worded well enough to be understood
Possible python is not accepting password starting with ^ symbol correctly, as it is an operator in python programming language
yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" https://fsf-vu-lt.zoom.us/rec/share/M_ZWj2OsRDTfnI7flbQQAxWgGA4abDaGqCRK0hBfVfVoGJsedgzu0dH4AIy04dOr.zq2O2wsIo4JWrX3t --video-password ^G03R#6a
Trying to run this command password is not accepted, even though it's accepted accessing this recording manually through a browser
Previously tried to use zoom-dl, using a very similar command it gave me an error something on the lines of "Password "G03R#6a" is not correct" Completely omitting the first character "^"
Provide verbose output that clearly demonstrates the problem

[X] Run your yt-dlp command with -vU flag added (yt-dlp -vU <your command line>)
[X] Copy the WHOLE output (starting with [debug] Command-line config) and insert it below

Complete Verbose Output
[debug] Command-line config: ['-vU', '-f', 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best', 'https://fsf-vu-lt.zoom.us/rec/share/M_ZWj2OsRDTfnI7flbQQAxWgGA4abDaGqCRK0hBfVfVoGJsedgzu0dH4AIy04dOr.zq2O2wsIo4JWrX3t', '--video-password', 'PRIVATE']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version 2022.11.11 [8b64402] (win_exe)
[debug] Python 3.8.10 (CPython AMD64 64bit) - Windows-10-10.0.19044-SP0 (OpenSSL 1.1.1k  25 Mar 2021)
[debug] exe versions: ffmpeg 2022-01-03-git-68d0a7e446-essentials_build-www.gyan.dev (setts), ffprobe 2022-01-03-git-68d0a7e446-essentials_build-www.gyan.dev
[debug] Optional libraries: Cryptodome-3.15.0, brotli-1.0.9, certifi-2022.09.24, mutagen-1.46.0, sqlite3-2.6.0, websockets-10.4
[debug] Proxy map: {}
[debug] Loaded 1723 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: 2022.11.11, Current version: 2022.11.11
yt-dlp is up to date (2022.11.11)
[debug] [zoom] Extracting URL: https://fsf-vu-lt.zoom.us/rec/share/M_ZWj2OsRDTfnI7flbQQAxWgGA4abDaGqCRK0hBfVfVoGJsedgzu0dH4AIy04dOr.zq2O2wsIo4JWrX3t
[zoom] M_ZWj2OsRDTfnI7flbQQAxWgGA4abDaGqCRK0hBfVfVoGJsedgzu0dH4AIy04dOr.zq2O2wsIo4JWrX3t: Downloading webpage
[zoom] M_ZWj2OsRDTfnI7flbQQAxWgGA4abDaGqCRK0hBfVfVoGJsedgzu0dH4AIy04dOr.zq2O2wsIo4JWrX3t: Validating passcode
ERROR: [zoom] M_ZWj2OsRDTfnI7flbQQAxWgGA4abDaGqCRK0hBfVfVoGJsedgzu0dH4AIy04dOr.zq2O2wsIo4JWrX3t: Wrong passcode: HTTP Error 401: Unauthorized (caused by <HTTPError 401: 'Unauthorized'>); please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U
  File "yt_dlp\extractor\common.py", line 674, in extract
  File "yt_dlp\extractor\zoom.py", line 41, in _real_extract
  File "yt_dlp\extractor\common.py", line 1034, in download_content
  File "yt_dlp\extractor\common.py", line 998, in download_handle
  File "yt_dlp\extractor\common.py", line 868, in _download_webpage_handle
  File "yt_dlp\extractor\common.py", line 825, in _request_webpage

  File "yt_dlp\extractor\common.py", line 807, in _request_webpage
  File "yt_dlp\YoutubeDL.py", line 3692, in urlopen
  File "urllib\request.py", line 531, in open
  File "urllib\request.py", line 640, in http_response
  File "urllib\request.py", line 569, in error
  File "urllib\request.py", line 502, in _call_chain
  File "urllib\request.py", line 649, in http_error_default
urllib.error.HTTPError: HTTP Error 401: Unauthorized

With --print-traffic you can see the full password is being sent correctly (url-encoded):
send: b'id=eiNTbUup_mV6q-3sYVuIT4KZl1cBowbWlxJYEOR2Acvghc-qi4Rbu-Ta7iT4Z0X7.teaSBN42ode-mBr7&passwd=%5EG03R%236a&action=viewdetailpage'
reply: 'HTTP/1.1 401 Unauthorized\r\n'

Browser dev tools show that the extractor sending a POST request to the correct endpoint. The browser also adds an empty recaptcha=param to the POST data, but the data is otherwise correctly formatted.
The browser sends a referer header with the password included as a query param:
    "referrer": "https://fsf-vu-lt.zoom.us/rec/share/CdpMt1UpzcwaIJjXru_iXWfA2fXz4yxs9cuJBAJ86rwZb7Rg_b6SFsVFDZNaYt7W.MP146CnL-9yfmF2I?password=%5EG03R%236a",

I've tried adding this and the empty recaptcha POST data param to the extractor and still get a 401 response.
There are also a whole lot of dynamically generated headers that the extractor does not include, but not sure if they are necessary or relevant. Possibly of note is the ZOOM-CSRFTOKEN header.
Unfortunately, the extractor doesn't have any working tests. Does anyone have any working example URLs (password-protected or otherwise) to share?

@danyl420 Since you are on Windows, did you consider that caret is an escape character in cmd.exe or are you using Powershell?
$ echo ^G03R#6a
G03R#6a

$ echo ^^G03R#6a
^G03R#6a

Duplicate of https://github.com/yt-dlp/yt-dlp/issues/2299


Fix readme typos

Hi, sorry to be that person but I just fixed a bunch of typos that I found when reading the README. :slightly_smiling_face:

sorry to be that person

You mean the MVP ?
Thanks a lot, it's really appreciated.

I took the liberty of modifying slightly your PR (README.md is kept in sync in different files, most importantly the Rustdoc part).


Create detailed README.md

Project README.md
As an user of the project, I would like the be able to quickly find information about the project and how to set it up.
Acceptance Criteria

README.md is updated to contain user needed information and installation instructions.

Need an update for the last two sprints -- will add soon.


Make AzureAdMgt.GetAccessToken and UrlHelper.GetGraphUrl accessible

Hello,
we want to create a Mail Logging Application based on the graph api similar to the EmailLogging App. The EmailLogging App is not extensible and we have some different demands, so we can not use it. Therefore we created an own implementation in our app.
I now have the issue that the procedure to get the AccessToken on a BC Online Environment have the scope OnPrem. The implementation is based on codeunit 1686 "Email Logging OAuth Client" and the issue occurs in local procedure TryGetAccessTokenInternal(var AccessToken: Text). The following procedures have Scope OnPrem:

codeunit 6300 "Azure AD Mgt." - GetAccessToken
codeunit 9005 "Url Helper" - procedure GetGraphUrl(): Text

As a workaround I used the accessible procedure in the Email - Outlook REST API App in codeunit 4507 "Email - OAuth Client", but it would be nice to not have the dependency on this app just for the purpose of getting the access token.
Can you tell me if it is the intended way to get the Access Token with the procedure in the Email - Outlook REST API App? Or do you think it would make sense to make the needed procedures accessible? I could provide a PR to remove the Scope if it helps :)
Thanks in advance
Internal work item: AB#524054

Hi @Gerdna, I'm sorry but we cannot open up the GetAccessToken procedure due to security reasons.
The Email - Outlook REST API wasn't meant to divulge the access token either, and that has been closed since. If you need to access Mail resources, you'd need to create an app which would request for the necessary permissions from the user.


Travis-CI is be broken

Some bad sed commands in the .travis.yml file.

Current coverage is 19.030% (diff: 100%)

Merging #94 into master will not change coverage

@@             master        #94   diff @@
==========================================
  Files            19         19
  Lines           846        846
  Methods         116        116
  Messages          0          0
  Branches          0          0
==========================================
  Hits            161        161
  Misses          685        685
  Partials          0          0

Powered by Codecov. Last update a5307cb...0074d34


4conv1fc？

May I ask, how did you use XBNBlock on 4conv1FC? Can you share it?

@Gaoang1 , we only use the XBNBlock in the Backbone, not in the detect header. That is, all the GN is used in the detect header for 4conv1FC.

@Gaoang1，我们只在 Backbone 中使用 XBNBlock，而不在检测头中使用。也就是说，所有的 GN 都用在 4conv1FC 的检测头中。

thanks

I can't reproduce so many improvements in Faster-RCNN that you mentioned in your paper. Are there any more details? Or could you please provide your faster-RCNN weight？

@Gaoang1 , you should note that GroupNorm is also used on the FPN in the setting of 'GN' and "XBNBlock".


Update injecting browser agent example

Is your feature request related to a problem? Please describe.
In 8.12.0 we introduced a flag(hasToRemoveScriptWrapper) to api.getBrowserTimingHeader that does not wrap the browser agent in a script tag.  We can update the example to show how to properly put in the head of the html and reuse in a custom component.

Hi @bizob2828,
in your comment, you said that we could use the Script component, but which strategy can we use (beforeInteractive is allowed on in _document https://nextjs.org/docs/messages/no-before-interactive-script-outside-document)?
Thanks

Notes here for whoever takes this
The way to deal with it currently is by creating a react component which returns a

@bizob2828 thanks for clarifying.
This new snippet brought me two doubts.
1 - If we put the tracking code in the _app.tsx, this means that for the static pages getBrowserTimingHeader is called during build time and it never changes. Is this correct?
2 - During client-side navigation, the tracking code does not change, whereas in the previous snippet with getServerSideProps it used to change on each page/request also when they were loaded from the client. Doesn't this affect the type of tracked data?

Hi @siuvdlec,
Could you elaborate on the use cases you're interested in, there are multiple ways of integrating the NR Browser Agent with NextJs depending on the needs.
Since NextJs has multiple ways of rendering pages, could you let me know which ones of the following use cases you're interested in:

Static Site Generation (getStaticProps)

Incremental Static Regeneration

Server Side Rendering (getServerSideProps)

Hydration
React Server Components - React 18 & Next 12

Client Side Rendering - (with useEffect/useSWR)

Answering your question no 1 @siuvdlec, I'm not sure what you mean by the tracking code, but basically what happens here is that we are circumventing the issue you mentioned in your first post (related to _document.js NextJs page) and we are not relying on the logic of NextJs because we are injecting the script tag into the head of the html document directly.
This means that every page returned from the server is going to have the NR Browser Agent in the head of the document

Hi @matewilk,
we use SSR, but sometimes it is possible that some projects use SSG at least for the error pages.
In my previous comment, when I used tracking code I meant the string returned from getBrowserTimingHeader.
With this last approach (script in _app.ts), for the SSG pages, we call getBrowserTimingHeader during build time, for the SSR pages we call getBrowserTimingHeader only the first time during server render.
If we don't have to call getBrowserTimingHeader for each page as in the previous snippet, why can't we put into _document.ts that it is rendered only on the server? But at the same time I see the string returned from getBrowserTimingHeader and I find a hash called transactionName so I think that I have to call getBrowserTimingHeader for each page not only during the first server render.

Hi @siuvdlec
I double checked that for you and you're absolutely right, you can inject the NR Browser agent into the _document.ts page, it would looks something like this:
const newrelic = require("newrelic");

export default class MyDocument extends Document {
  static async getIntialProps() {
    const browserTimingHeader = newrelic.getBrowserTimingHeader({
      hasToRemoveScriptWrapper: true,
    });

    return {
      browserTimingHeader,
    };
  }

  render() {
    return (

    );
  }
}

export default MyDocument;

So both, injecting directly into  and using

    );
  }
}

export default MyDocument;


Animation travel not working when an animation is looped

Godot version
4.1
System information
Windows 10
Issue description
Hi,
I think there's an issue with looping animation and traveling in the animationtree. I think there weren't any issue in the 4.1 RC 2, or previous builds.
I tested it and it was working perfectly fine in the previous build 4.0.3, but not in the 4.1 RC2
There's somewhere an issue with loop animation and travel in animationTree which is incompatible now...
Steps to reproduce

you set up an animation an select the "loop" option

you make a traveling state machine with an animationtree and activate transitions

Make the travel transition to "At end"

you launch the animation with the tree, then try in code with the state machine to travel to the next animation

Expected : the travel is done and the loop is over
Current : not working, the travel doesn't work
Again, was working perfectly fine with 4.0.3. Currently on 4.1 : seems to work with transition "Immediate". The bug is only for "at end" transitions.
Minimal reproduction project
don't have one at the moment, too complicated to create (because I need to make the code and so on)

Please make a Minimal Reproduction Project so someone can test this. :)

Agreed, please add a minimal reproduction project:

A small Godot project which reproduces the issue, with no unnecessary files included. Be sure to not include the .godot folder in the archive (but keep project.godot).
Drag and drop a ZIP archive to upload it. Do not select another field until the project is done uploading.
Note for C# users: If your issue is not Mono-specific, please upload a minimal reproduction project written in GDScript or VisualScript. This will make it easier for contributors to reproduce the issue locally as not everyone has a Mono setup available.

Sorry, I did et have time to make a project. If I make a project, and that we test it inside the animation tree by clicking the button, is that okay. It doesn't work with the travel function in code but I think that's the same with the play button in the animation tree.

I have a similar problem with transitions in AnimationTree, where auto advance doesn't work if animation is looping.  Attached is a project that demonstrates this behavior.
animation_test.zip

Open project in Godot 4.0.3
Click on AnimationTree in gomako/gomako.tscn
Observe that "idle" state eventually transitions to "yawn" state.

https://github.com/godotengine/godot/assets/2000051/ad1822a4-1eee-4da6-8072-ead7244867b4

Open the same project in Godot 4.1
Click on AnimationTree in gomako/gomako.tscn
Observe that we are stuck looping in "idle" state.

https://github.com/godotengine/godot/assets/2000051/84cc6760-5964-4898-8caa-4120153e450d
Note that even in Godot 4.0.3, we will get stuck if Xfade Time is set to zero.  It's possible to workaround this by disabling loop bit for the ones where we want the animation state to travel, but then those animations won't loop outside of AnimationTree.

It seems to be the same issue, but I don't understand what's the transition view that you have.
On my side, it can be seen in the animation tree : you click on play and the transition / travel doesn't happen
Is that okay with this project or should I upload mine??

@jordanlis preferably prepare a simple test project stripped of everything but bare minimum. These can be same issues or different. Test projects are needed to test these cases. Check what @AThousandShips asked of you above for instructions.

OK I'll spend some time preparing a demo it need to be fixed.

@jordanlis that's the "auto advance" bit.  But I could also do it with a state machine, attached:
animation_test2.zip
https://github.com/godotengine/godot/assets/2000051/8e9a89c3-2c87-4767-b3d0-dbb1cff79e34
https://github.com/godotengine/godot/assets/2000051/70dd9777-50a2-4556-aacb-d082d7a4a7c9

I remember this is an intended change. You can use statemachine_playback.next() to break out of the loop

@TokageItLab How do you break out of a looped animation at the end of that animation, next breaks immediately and looped animaitons don't trigger signals? That sounds like what they want to do.

There are several ways to break out of the loop:

Use next() with AutoAdvance disabled (equivalent to using next() with AtEnd)
Use AdvanceCondition with Immediate mode
Use method track to place a function like loop_ended() before the end of the loop animation (just before the length of the xfade) to manage the possible states on the GDScript side for example:

func loop_ended()
	if (character.can_transition):
		statemachine_playback.next()

@TokageItLab I hope I'm not misunderstanding. I gave it a try and the 1/ did not wait until the end of the transition be it with or without AtEnd. Am I missing something, please?

I can't see what you are trying. Even if it is 1 and 2, the xfade time of the transition should be respected. Although, there is no wait for the animation to end, so the user must determine if the animation has looped one loop or not.

Use next() with AutoAdvance disabled (equivalent to using next() with AtEnd)

I was a bit wrong about this. Actually they are not equivalent.
next() does not go to the next state unless there is an explicit path there. So if you want to use next(), you need to create a path to the next state with travel() or have a path to the next state with AutoAdvance before you use next().

I don't understand where there was any need to prevent the system to allow a transition in the state machine. For me it's a bug --> In the interface, the transition are not happening, what's the need behind the change ?
Now, it's not possible to transition from one state to another in auto mode ? In code, we need to do that with "next" which is not even waiting for the end frame to happen ?
Please, could you help me by clarifying the solution to have a looped animation and transition to the next state ( and waiting for the animation first animation to end) ?
It feels like a gaz factory for nothing... Why did you even do that ? I checked in the mentioned issue and nowhere it is said that the travel function must not work when the animation is looped...
Don't want to be rude or anythting, I'm just expressing something here that doesn't feel good for me.

what's the need behind the change ?

This was a necessary change for nested StateMachine to xfade correctly.
In order to determine the end time of a StateMachine from outside the StateMachine, the StateMachine must have an infinite time length while it is looping. The looping animation should also have an infinite time length to be consistent with it.
Before the AnimationStateMachine rework, the loop was broken by AtEnd even though it was looping, but the looping process is redundantly and redundantly implemented in the AnimationNodeStateMachine, which is separate from the AnimationNodeAnimation, and it is not a backward loop or a pause in the looping process. In addition, it did not correctly handle backward loops and pingpong loops, so it was just breaking down.

Please, could you help me by clarifying the solution to have a looped animation and transition to the next state ( and waiting for the animation first animation to end) ?

The implementation of 3 I have described above should work most closely with what you are intending to do. However, it is a bit tedious, and I have heard that @SaracenOne is currently working on a new SwitchMode implementation that will perform transitions when a specified time has elapsed, so it may be better to use that in the future.
However, while they may solve the problem for AnimationNodeStateMachine, they may not solve the problem for AnimationNodeTransition.

Note that even in Godot 4.0.3, we will get stuck if Xfade Time is set to zero. It's possible to workaround this by disabling loop bit for the ones where we want the animation state to travel, but then those animations won't loop outside of AnimationTree.

To be honest, this is the cleanest way to go. However, it is not good way because Animation or AnimationTree as a Resource may be referenced by multiple Nodes.
So, in my opinion, it would make sense to implement LoopModeOverride as a parameter of AnimationNodeAnimation, since the AnimationNode parameter is stored in each AnimationTree as a node. This allows us to manage the loop state for each character, even if the same Animation or AnimationTree resource is used repeatedly. I will send a PR for this later.

Okay, not really sure to understand your first sentence.
Just to make sure that I understand : does your pr will allow looped animation + at end transition to travel to the next animation with

next function?
travel function?
pushing the play button in the animation tree?

Sorry, I feel that I don't understand everything so it's important for me that you clarify if you don't mind
from what I understand about the current solution I need to use next instead of travel and test if the animation has ended. I'll try to make something like that...

No, looping animation is never AutoAdvanced by AtEnd, nor should it be.
This problem is not something that should be solved by the StateMachine, but is fundamentally caused by the fact that AnimationTree lacks an API to manage the looping state of the Animation, so I will add a parameter to manage the looping state in #79400.

No, not autoadvance. Just manually in script or in the animationtree.you see what I mean?

I still don't get your solution. Your pr will allow to disable the looped animation, so if I Want to go from the looped animation to another, I won't be able to do it until I disable it? And then I have to reactivate it if I need to play it again... And I will be able to wait the end of the animation thanks to the script you put in 3 apparently.
I really think that all of this should really stay simple.
Like for example a parameter of the next() function that allows to force the transition.
example : next(override) or some think like this that allows to break the loop and continue to the next animation but wait for the atEnd transition.
What do you think?

example : next(override) or some think like this that allows to break the loop and continue to the next animation but wait for the atEnd transition.

It is not possible. Since the looping animation now has infinite length, it is no longer possible to detect the end of that animation on the StateMachine side. Nor does it solve anything in NodeTransition.
As I have explained many times, you can break out of the loop in several ways.

Using next() and MethodTrack. This is available in 4.1.
By PR of https://github.com/godotengine/godot/pull/79400, you disable the loop by a loop override in NodeAnimation. If you set the loop override of NodeAnimation to No Override after the transition, the next time you play the loop animation, the loop will be enabled again - This is different from changing the loop in AnimationPlayer's Animation, where no re-caching occurs and the loop state can be managed on a per-character basis.
Wait for future implementation of transitions elapsed time.

Ok, I just let go for now.
I don't understand how to transition at the end of the looped animation with your solution (I'll try to understand by trying with the code you gave, but I don't see what it does and where to put that)
Next function is just breaking the loop in my code, and the downside is that it triggers other animation when not needed (it seems to look for any available path, so weird things are done now...)
For me, the travel should just work and break the loop. That's it. I need to rework totally my code appearently, and I don't know how to make my state machine work with this new godot 4.x.
Thanks for your time anyway.

I had the same problem, what I did to solve it in one line of code :
state_machine.travel("myState") state_machine.next()
Make sure to add state_machine.next() to activate the travelling.


feat(owned): add new command

CURRENT STATE:
not working and copied from the health command
the command will use the ocm creds only and list clusters based on the
creator (if no args are provided, use the current user)

feel free to review and give me your worst.
currently previewing the Subscription, but can move to show the Cluster resource if it'll look better

fixed all of your comments, hope it's good enough now (IE ready for another round in the review ring)

so this works for 2 days now. added a small fix today (based on local testing of the previous script)


App is not closed when user hits Android device native back button

Is your feature request related to a problem? Please describe.
App is not closed when a user hits Android native back button
Actual result:

App is not closed. Nothing happens on hit on Android back button
Only choice is to hide the app to run in background

Expected result:

App is closed when user hits Android back button

Describe the solution you'd like
App is closed when user hits Android native back button

Fixed in #92. Thanks for reporting!


docs: grammar corrections

Closes #
✅ Checklist

[x] I have followed every step in the contributing guide (updated 2022-10-06).
[x] The PR title follows the convention we established conventional-commit
[x] I performed a functional test on my final commit

Changelog

Corrected a few grammar spellings
Made a few sentences easier to read

💯

I know these changes are probably correct but I hate literally all of them. Can I use my "guy who does brand good" veto power here?

I decided


Suppress a YARD warn for Lint/DisjunctiveAssignmentInConstructor

This PR suppresses the following warning.
% cd path/to/rubocop-repo
% bundle exec rake yard_for_generate_documentation
[warn]: @param tag has unknown parameter name: node
    in file
    `lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb' near
    line 41
Files:         524
Modules:        80 (   11 undocumented)
Classes:       495 (    3 undocumented)
Constants:     765 (  753 undocumented)
Attributes:     26 (    0 undocumented)
Methods:      1186 ( 1052 undocumented)
 28.72% documented

This warning was regressed by the following changes.
         def check(node)
           return unless node.method_name == :initialize

-          check_body(node)
+          check_body(node.body)
         end

         # @param [DefNode] node a constructor definition
-        def check_body(node)
-          body = node.body
+        def check_body(body)
+          return if body.nil?

https://github.com/rubocop-hq/rubocop/commit/608943f62d111fe2dafbb7f122567f1a1b8ef578#diff-acaaab0e12f42621dfca06a26980cec6L34
This PR fixes by moving the YARD @param tag to the caller method with a high abstraction level.

Before submitting the PR make sure the following are checked:

[x] Wrote good commit messages.
[ ] Commit message starts with [Fix #issue-number] (if the related issue exists).
[x] Feature branch is up-to-date with master (if not - rebase it).
[x] Squashed related commits together.
[ ] Added tests.
[ ] Added an entry to the Changelog if the new code introduces user-observable changes. See changelog entry format.
[x] The PR relates to only one subject with a clear title
and description in grammatically correct, complete sentences.
[x] Run bundle exec rake default. It executes all tests and RuboCop for itself, and generates the documentation.

:bowing_man:


NAVIGATION_1: At least two ways of finding content

Desc: Same issue as HEADING_1 when page has no H1
Data: "page: no page title" in Element column of Element Results table
Tool: AInspector Sidebar
Evaluation Library Version: <IP_ADDRESS>
Ruleset: HTML4 Legacy Techniques
URL: https://news.ycombinator.com/

removed "no page title", so just says "page", I think this is better for the rule


Travis healthcheck

Details
Update a few minor points around travis (Use 16.04, Don't print geckodriver info twice, remove un-required matrix tests)
Motivation and Context
Speed up travis runs, reduce clutter in logs
How Has This Been Tested?
The travis runs will show this working (Hopefully)
Types of changes

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

Checklist:

[ ] I've added tests for my code.
[ ] My change requires a change to the documentation.
[ ] I have updated the documentation accordingly.

Issue: Rails6 fails to be tested
Review/Merge options:

Accept and merge as is
Alter travis.yml to "accept" rails6 failures.
Attempt to fix Rails6 issues first (I have an experimental branch for this, but that's also giving me problems)

cc/ @mvz @olleolleolle - My preference is one of the first 2 options as this is a tiny PR, which attempts to speed up travis runs so actually this would be beneficial to get in sooner rather than later.

Actually, let's merge this now!


8tracks.com ERROR: An extractor error has occured. (caused by KeyError(u'id',))

$ youtube-dl -citw -f bestaudio --verbose http://8tracks.com/asaiber/classical-indian-pakistani-and-persian-music
[debug] System config: []
[debug] User config: []
[debug] Command-line args: [u'-citw', u'-f', u'bestaudio', u'--verbose', u'http://8tracks.com/asaiber/classical-indian-pakistani-and-persian-music']
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2<IP_ADDRESS>
[debug] Python version 2.7.9 - Darwin-14.3.0-x86_64-i386-64bit
[debug] exe versions: ffmpeg 2.6.2, ffprobe 2.6.2
[debug] Proxy map: {}
[8tracks] classical-indian-pakistani-and-persian-music: Downloading webpage
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 1/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 2/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 3/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 4/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 5/22
[8tracks] classical-indian-pakistani-and-persian-music: Waiting for<PHONE_NUMBER>27 seconds
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 5/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 6/22
[8tracks] classical-indian-pakistani-and-persian-music: Waiting for<PHONE_NUMBER>27 seconds
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 6/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 7/22
[8tracks] classical-indian-pakistani-and-persian-music: Waiting for<PHONE_NUMBER>27 seconds
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 7/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 8/22
[8tracks] classical-indian-pakistani-and-persian-music: Waiting for<PHONE_NUMBER>27 seconds
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 8/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 9/22
[8tracks] classical-indian-pakistani-and-persian-music: Waiting for<PHONE_NUMBER>27 seconds
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 9/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 10/22
[8tracks] classical-indian-pakistani-and-persian-music: Waiting for<PHONE_NUMBER>27 seconds
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 10/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 11/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 12/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 13/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 14/22
[8tracks] classical-indian-pakistani-and-persian-music: Waiting for<PHONE_NUMBER>27 seconds
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 14/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 15/22
[8tracks] classical-indian-pakistani-and-persian-music: Waiting for<PHONE_NUMBER>27 seconds
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 15/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 16/22
[8tracks] classical-indian-pakistani-and-persian-music: Waiting for<PHONE_NUMBER>27 seconds
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 16/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 17/22
[8tracks] classical-indian-pakistani-and-persian-music: Waiting for<PHONE_NUMBER>27 seconds
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 17/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 18/22
[8tracks] classical-indian-pakistani-and-persian-music: Waiting for<PHONE_NUMBER>27 seconds
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 18/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 19/22
[8tracks] classical-indian-pakistani-and-persian-music: Waiting for<PHONE_NUMBER>27 seconds
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 19/22
[8tracks] classical-indian-pakistani-and-persian-music: Downloading song information 20/22
ERROR: An extractor error has occured. (caused by KeyError(u'id',)); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 273, in extract
return self._real_extract(url)
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/eighttracks.py", line 146, in _real_extract
'id': compat_str(track_data['id']),
KeyError: u'id'
Traceback (most recent call last):
File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 650, in extract_info
ie_result = ie.extract(url)
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 279, in extract
raise ExtractorError('An extractor error has occured.', cause=e)
ExtractorError: An extractor error has occured. (caused by KeyError(u'id',)); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

Here as well:
[8tracks] best-music-to-have-while-studying-reading-or-chilling: Downloading song information 45/66
ERROR: An extractor error has occured. (caused by KeyError(u'id',)); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
  File "/usr/bin/youtube-dl/youtube_dl/extractor/common.py", line 273, in extract
    return self._real_extract(url)
  File "/usr/bin/youtube-dl/youtube_dl/extractor/eighttracks.py", line 146, in _real_extract
    'id': compat_str(track_data['id']),
KeyError: u'id'
Traceback (most recent call last):
  File "/usr/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 650, in extract_info
    ie_result = ie.extract(url)
  File "/usr/bin/youtube-dl/youtube_dl/extractor/common.py", line 279, in extract
    raise ExtractorError('An extractor error has occured.', cause=e)
ExtractorError: An extractor error has occured. (caused by KeyError(u'id',)); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

Version
$ youtube-dl --verbose "http://8tracks.com/joffidelity/best-music-to-have-while-studying-reading-or-chilling"
[debug] System config: []
[debug] User config: []
[debug] Command-line args: [u'--verbose', u'http://8tracks.com/joffidelity/best-music-to-have-while-studying-reading-or-chilling']
[debug] Encodings: locale UTF-8, fs UTF-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2<IP_ADDRESS>
[debug] Python version 2.7.8 - Linux-3.16.7-21-desktop-x86_64-with-SuSE-13.2-x86_64
[debug] exe versions: ffmpeg 2.6.3, ffprobe 2.6.3
[debug] Proxy map: {}
[8tracks] best-music-to-have-while-studying-reading-or-chilling: Downloading webpage

I also get this error:
ERROR: An extractor error has occured. (caused by KeyError('id',)); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/youtube_dl/extractor/common.py", line 273, in extract
    return self._real_extract(url)
  File "/usr/lib/python3.4/site-packages/youtube_dl/extractor/eighttracks.py", line 146, in _real_extract
    'id': compat_str(track_data['id']),
KeyError: 'id'
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/youtube_dl/extractor/common.py", line 273, in extract
    return self._real_extract(url)
  File "/usr/lib/python3.4/site-packages/youtube_dl/extractor/eighttracks.py", line 146, in _real_extract
    'id': compat_str(track_data['id']),
KeyError: 'id'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/youtube_dl/YoutubeDL.py", line 650, in extract_info
    ie_result = ie.extract(url)
  File "/usr/lib/python3.4/site-packages/youtube_dl/extractor/common.py", line 279, in extract
    raise ExtractorError('An extractor error has occured.', cause=e)
youtube_dl.utils.ExtractorError: An extractor error has occured. (caused by KeyError('id',)); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

Haven't been able to figure out the problem yet, but I can for example download the first 2 songs if I change line 126 in https://github.com/rg3/youtube-dl/blob/master/youtube_dl/extractor/eighttracks.py to:
 for i in range(2):

Same issue here:
$ youtube-dl -i --verbose "https://8tracks.com/hellotuesday/go-down-in-flames"
[debug] System config: []
[debug] User config: []
[debug] Command-line args: [u'-i', u'--verbose', u'https://8tracks.com/hellotuesday/go-down-in-flames']
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2015.07.21
[debug] Python version 2.7.10 - Darwin-14.4.0-x86_64-i386-64bit
[debug] exe versions: ffmpeg 2.7.2, ffprobe 2.7.2, rtmpdump 2.4
[debug] Proxy map: {}
[8tracks] go-down-in-flames: Downloading webpage
[8tracks] go-down-in-flames: Downloading song information 1/15
[8tracks] go-down-in-flames: Downloading song information 2/15
[8tracks] go-down-in-flames: Downloading song information 3/15
[8tracks] go-down-in-flames: Downloading song information 4/15
[8tracks] go-down-in-flames: Downloading song information 5/15
[8tracks] go-down-in-flames: Waiting for 113.6 seconds
[8tracks] go-down-in-flames: Downloading song information 5/15
[8tracks] go-down-in-flames: Downloading song information 6/15
[8tracks] go-down-in-flames: Waiting for 113.6 seconds
[8tracks] go-down-in-flames: Downloading song information 6/15
[8tracks] go-down-in-flames: Downloading song information 7/15
[8tracks] go-down-in-flames: Waiting for 113.6 seconds
[8tracks] go-down-in-flames: Downloading song information 7/15
[8tracks] go-down-in-flames: Waiting for 113.6 seconds
[8tracks] go-down-in-flames: Downloading song information 7/15
[8tracks] go-down-in-flames: Downloading song information 8/15
[8tracks] go-down-in-flames: Waiting for 113.6 seconds
[8tracks] go-down-in-flames: Downloading song information 8/15
[8tracks] go-down-in-flames: Waiting for 113.6 seconds
[8tracks] go-down-in-flames: Downloading song information 8/15
[8tracks] go-down-in-flames: Downloading song information 9/15
[8tracks] go-down-in-flames: Waiting for 113.6 seconds
[8tracks] go-down-in-flames: Downloading song information 9/15
[8tracks] go-down-in-flames: Downloading song information 10/15
[8tracks] go-down-in-flames: Waiting for 113.6 seconds
[8tracks] go-down-in-flames: Downloading song information 10/15
[8tracks] go-down-in-flames: Downloading song information 11/15
[8tracks] go-down-in-flames: Waiting for 113.6 seconds
[8tracks] go-down-in-flames: Downloading song information 11/15
[8tracks] go-down-in-flames: Waiting for 113.6 seconds
[8tracks] go-down-in-flames: Downloading song information 11/15
[8tracks] go-down-in-flames: Downloading song information 12/15
[8tracks] go-down-in-flames: Waiting for 113.6 seconds
[8tracks] go-down-in-flames: Downloading song information 12/15
ERROR: An extractor error has occured. (caused by KeyError(u'id',)); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
  File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 275, in extract
    return self._real_extract(url)
  File "/usr/local/bin/youtube-dl/youtube_dl/extractor/eighttracks.py", line 146, in _real_extract
    'id': compat_str(track_data['id']),
KeyError: u'id'
Traceback (most recent call last):
  File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 656, in extract_info
    ie_result = ie.extract(url)
  File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 281, in extract
    raise ExtractorError('An extractor error has occured.', cause=e)
ExtractorError: An extractor error has occured. (caused by KeyError(u'id',)); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

Duplicates:  #5278,  #5029. I'm having the same problem on Ubuntu 15.04, youtube-dl version 2015.09.09.

Duplicate of #5029.


TypeScript Error with URL Assignment: 'URL' is not assignable to type 'WritableDraft'.

🐛 Bug Report
I am encountering an issue with the Immer library when trying to update an attribute with a URL type. TypeScript reports the following error:
Type 'URL' is not assignable to type 'WritableDraft<URL>'.
  Types of property 'searchParams' are incompatible.
    Type 'URLSearchParams' is missing the following properties from type 'Map<string, string | null>': clear, [Symbol.toStringTag]typescript(2322)

Here's an example of how the code is implemented:
const state = {
  anotherAttribute: "value",
  myUrlAttribute: new URL("https://example.com"),
};

produce(state, (draft) => {
  draft.myUrlAttribute = new URL("https://example.com");
});

Link to repro
You can find a live demonstration of the issue in this CodeSandbox link: https://codesandbox.io/p/sandbox/reverent-fog-yc4hq5
To Reproduce

Define a state object with an attribute of type URL.
Use the produce function to modify the URL attribute.
TypeScript reports the error mentioned above.

Observed behavior
TypeScript reports an error when trying to assign a new URL object to a draft URL attribute within the produce function.
Expected behavior
I expect the URL attribute to be updated without any TypeScript errors.
Environment

Immer version: ^9.0.21
TypeScript version: 5.0.4
✅ I filed this report against the latest version of Immer
❌ Occurs with setUseProxies(true)
❌ Occurs with setUseProxies(false) (ES5 only)

Try castDraft utility
On Tue, 22 Aug 2023, 20:44 patrykparcheta, @.***> wrote:

🐛 Bug Report
I am encountering an issue with the Immer library when trying to update an
attribute with a URL type. TypeScript reports the following error:
Type 'URL' is not assignable to type 'WritableDraft'.
Types of property 'searchParams' are incompatible.
Type 'URLSearchParams' is missing the following properties from type 'Map<string, string | null>': clear, [Symbol.toStringTag]typescript(2322)
Here's an example of how the code is implemented:
const state = {
anotherAttribute: "value",
myUrlAttribute: new URL("https://example.com"),
};
produce(state, (draft) => {
draft.myUrlAttribute = new URL("https://example.com");
});
Link to repro
You can find a live demonstration of the issue in this CodeSandbox link:
https://codesandbox.io/p/sandbox/reverent-fog-yc4hq5
To Reproduce

Define a state object with an attribute of type URL.
Use the produce function to modify the URL attribute.
TypeScript reports the error mentioned above.

Observed behavior
TypeScript reports an error when trying to assign a new URL object to a
draft URL attribute within the produce function.
Expected behavior
I expect the URL attribute to be updated without any TypeScript errors.
Environment

Immer version: ^9.0.21
TypeScript version: 5.0.4
✅ I filed this report against the latest version of Immer
❌ Occurs with setUseProxies(true)
❌ Occurs with setUseProxies(false) (ES5 only)

—
Reply to this email directly, view it on GitHub
https://github.com/immerjs/immer/issues/1066, or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAN4NBA47CI6PNBPQ4PC65LXWT4YFANCNFSM6AAAAAA32K65FQ
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

This function solves the problem. Thank you for the help. Wonderful library.


pre-commit

LINTING ALL THE THINGS AGAIN

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 88.621%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
195

Relevant Lines:
214

💛  - Coveralls


BTable empty props and slot

BTable is now near to be usable for production!!! Good job!
what is missing now is empty slot and "old" props to define the default empty slot like:
empty-filtered-text, empty-text, empty-filtered-html and empty-html

I've left them out since never needed to use them. However, I will work on it soon, Thanks for sharing the information.

It was added in this PR #672, I did not add empty-html, orempty-filtered-html props because there is no real benefit from it. I might be mistaken about these props since i don't really know what they are for.

I agree... with empty slot empty-html or empty-filtered-html probably could be dropped.
Anyway in these props you can write custom html for empty table (no data) and empty filtered table with (no data after filter applying).
They are the same as empty-text and empty-filtered-text but you can set some HTML instead plain text.

It was added in this PR #672, I did not add empty-html, orempty-filtered-html props because there is no real benefit from it. I might be mistaken about these props since i don't really know what they are for.

I agree... with empty slot empty-html or empty-filtered-html probably could be dropped. Anyway in these props you can write custom html for empty table (no data) and empty filtered table with (no data after filter applying). They are the same as empty-text and empty-filtered-text but you can set some HTML instead plain text.

I see, sounds like useless props since you can write the HTML in the slot anyways


Allow plain negative numbers

str() converts minus - to unicode \u2212 which prevents the regex to match.
This is fixed by replacing it again with -.

Could you provide an example that doesn't work?
E.g. #num("-2.5") works perfectly for me.

If you do calculations or use variables it works for positive numbers but not for negative numbers.
The proposed change allows to directly use numbers as is and not in a string, which enhances convenience for the user.
#import "@preview/unify:0.4.3": num
#let x = -2
#let y = 3

// #num(x) // does not work
// #num(str(x)) // does not work

#num(y) // works

#num(str(y)) // works

#num(calc.exp(1)) // works

// #num(-calc.exp(1)) // does not work

Thank you for your contribution!


V2: Modify Feeds page to include data quality information

Update Feeds page to include validation report highlights. Design to be added here.

Closing - doing full iteration, not dividing it up


workbox-build: broadcastUpdate channelName

Again broadcastUpdate with<EMAIL_ADDRESS>workbox-build wants this:
"options": {
  "broadcastUpdate": {
    "channelName": "my-update-channel"
  }
}

(resulting in new workbox.broadcastUpdate.Plugin({"channelName":"my-update-channel"}))
but it should be:
"options": {
  "broadcastUpdate": "my-update-channel"
}

(for new workbox.broadcastUpdate.Plugin("my-update-channel"), which actually works)
Without channelName, it doesn't get accepted:

Service worker generation failed: ValidationError: child "runtimeCaching" fails because ["runtimeCaching" at position 1 fails because [child "options" fails because [child "broadcastUpdate" fails because ["broadcastUpdate" must be an object]]]]

There is no {channelName: ...} in the test either:
https://github.com/GoogleChrome/workbox/blob/86c7ef7a8b6fe768c7fc52ba9e18aed8dee338b1/test/workbox-broadcast-cache-update/static/sw.js#L12-L14

Thanks for catching this, @mischnic!


Sagi gh pages

Looks really cool, thanks!
My blog post refers to this repo as an example of what the finished code looks like, I will keep the repo as-is, but I am definitely going to update the readme and link to your repo as an evolved version. 👍


Unable to parse syslog messages which have version = 0

<142>0 2020-08-07T05:35:04+05:30 localhost root[6045]: root 6045 -  Sample Message
Here is a sample syslog message. When Version = 0, parsing fails
SyslogMessage.parse(r'<142>0 2020-08-07T05:35:04+05:30 localhost root[6045]: root 6045 -  Sample Message')
Traceback (most recent call last):
File "C:\python373\lib\site-packages\syslog_rfc5424_parser\message.py", line 78, in parse
groups = parser.parse(message_string)
File "C:\python373\lib\site-packages\syslog_rfc5424_parser\parser.py", line 126, in parse
tree = _parser.parse(s)
File "C:\python373\lib\site-packages\lark\lark.py", line 228, in parse
return self.parser.parse(text)
File "C:\python373\lib\site-packages\lark\parser_frontends.py", line 38, in parse
return self.parser.parse(token_stream, *[sps] if sps is not NotImplemented else [])
File "C:\python373\lib\site-packages\lark\parsers\lalr_parser.py", line 68, in parse
for token in stream:
File "C:\python373\lib\site-packages\lark\lexer.py", line 335, in lex
for x in l.lex(stream, self.root_lexer.newline_types, self.root_lexer.ignore_types):
File "C:\python373\lib\site-packages\lark\lexer.py", line 169, in lex
raise UnexpectedCharacters(stream, line_ctr.char_pos, line_ctr.line, line_ctr.column, state=self.state)
lark.exceptions.UnexpectedCharacters: No terminal defined for '0' at line 1 col 6
<142>0 2020-08-07T05:35:04+05:30 localhost ro
^
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "", line 1, in
File "C:\python373\lib\site-packages\syslog_rfc5424_parser\message.py", line 80, in parse
raise ParseError('Unable to parse message', message_string)
syslog_rfc5424_parser.message.ParseError: Unable to parse message: '<142>0 2020-08-07T05:35:04+05:30 localhost root[6045]: root 6045 -  Sample Message'
Some of the other sample messages
Version=10 is fine
SyslogMessage.parse(r'<142>10 2020-08-07T05:35:04+05:30 localhost root[6045]: root 6045 -  Sample Message')
SyslogMessage(severity=<SyslogSeverity.info: 6>,facility=<SyslogFacility.local1: 17>,version=10,timestamp='2020-08-07T05:35:04+05:30',hostname='localhost',appname='root[6045]:',procid='root',msgid='6045',sd={},msg=' Sample Message')
Version=100 is fine
SyslogMessage.parse(r'<142>100 2020-08-07T05:35:04+05:30 localhost root[6045]: root 6045 -  Sample Message')
SyslogMessage(severity=<SyslogSeverity.info: 6>,facility=<SyslogFacility.local1: 17>,version=100,timestamp='2020-08-07T05:35:04+05:30',hostname='localhost',appname='root[6045]:',procid='root',msgid='6045',sd={},msg=' Sample Message')
Version=1001 fails
SyslogMessage.parse(r'<142>1001 2020-08-07T05:35:04+05:30 localhost root[6045]: root 6045 -  Sample Message')
Traceback (most recent call last):
File "C:\python373\lib\site-packages\syslog_rfc5424_parser\message.py", line 78, in parse
groups = parser.parse(message_string)
File "C:\python373\lib\site-packages\syslog_rfc5424_parser\parser.py", line 126, in parse
tree = _parser.parse(s)

Technically any version other than 1 is illegal under RFC 5424 (versions have to be allocated by IANA under the RFC 5226 process; that list can be found at https://www.iana.org/assignments/syslog-parameters/syslog-parameters.xhtml#syslog-parameters-3). Do you have something that actually generates a non-version-1 message?

I have legacy RFC-3164 messages coming into the server
When rsyslog.conf is configured to receive RFC-5424 messages, I see that it converts the incoming RFC-3164 message format to RFC-5424 message
The version field is set to '0' in this case

Well, technically the RFC says that version 0 is forbidden, but I guess it wouldn't really hurt to accept it here.

Due to the age of the issue and the current lack of a releasing flow for Rust OSS, I'm going to close this. For those that may need this in the short term, feel free to fork the repo and build from source. We may revisit this in the future; however, because this goes against the RFC, I'm not initially inclined to make this change at the source.


Apply id("droidkaigi.primitive.detekt") to core-designsystem and fix ./gradlew composeLint

Idea Description
Please add the plugin here and fix the lint errors by ./gradlew composeLint.
https://github.com/DroidKaigi/conference-app-2022/blob/96681626f9385f0e9f1a15cbbb2a9d07610cfb92/core-designsystem/build.gradle.kts#L4
Reference images and links

🙋🏻♂ Can I take this ?

Thanks! Assigned🙏


Form validation before submit

Would require a major UI revamp, and errors for scramble depth require too much text, does not seem worth it currently.


add index file

This makes it easier to use the library.

closing in favor of https://github.com/siriwatknp/mui-treasury/pull/80


Feature to change brightness

I think this is a fairly easy feature, which has a lot of usage. This should be implemented as soon as possible.

Can't you get this from your .i3 config?
bindsym XF86MonBrightnessDown exec xbacklight - 2%
bindsym XF86MonBrightnessUp exec xbacklight + 2%

It should be a universal terminal command, not from .i3, but yeah, I'm planning to use xbacklight

I know, I was just reminding you that as a command it's probably in your i3config.


Use parent ref to appropriately size plot titles

Follow up to https://github.com/iterative/vscode-dvc/pull/4734/files#r1406283814
Demo
https://github.com/iterative/vscode-dvc/assets/37993418/f87f8c16-ce32-492d-b8b4-93fc8e90ea13

If we're happy with the change I'll merge it into the monster PR.


ISPN-5571 CommandAwareRpcDispatcher submits delayed tasks that aren't…

… cancelled if completed before
https://issues.jboss.org/browse/ISPN-5571

Also, remember to format git commit messages appropriately! (a title of 72 chars is recommended for easier reading, anything beyond that is wrapped, see here)

@galderz I've made some more changes today. I even managed to get the subject under 72 characters, although I don't think that's something entirely feasible in general (e.g. when fixing a test with a very long name).

@danberindei A test name that's 72 characters looks fishy, but I hope you get my point. It helps to keep commit messages in order :)

Integrated