do not limit an airtable instance to a single table_name

if we have multiple tables in a base_key, it's kind of frustrating to have to create a different Airtable instance for each table, what I propose is to make table_name a variable in each insert, update, delete call, the changes are quite minim:
def __init__(self, base_key, api_key=None):
        """
        If api_key is not provided, :any:`AirtableAuth` will attempt
        to use ``os.environ['AIRTABLE_API_KEY']``
        """
        session = requests.Session()
        session.auth = AirtableAuth(api_key=api_key)
        self.session = session
        self.base_url = posixpath.join(self.API_URL, base_key)

def record_url(self, table_name, record_id):
        """ Builds URL with record id """
        url_safe_table_name = quote(table_name, safe="")
        return posixpath.join(self.base_url, url_safe_table_name, record_id)

and a method could be updated as so :
def get(self, table_name, record_id):
        """
        Retrieves a record by its id
        >>> record = airtable.get('recwPQIfs4wKPyc9D')
        Args:
            record_id(``str``): Airtable record id
        Returns:
            record (``dict``): Record
        """
        record_url = self.record_url(table_name, record_id)
        return self._get(record_url)

if you are okay with the changes I can make a PR

Thanks for submitting this.
I have an open issue to make table name settable, so I am glad you opened this.
See #13
I think it's fair use case however, I also think it would be equally frustrating if you only use one table, and you have to enter the table name on each request, don't you agree?
Let's consider some options:

Each class instance is associated with a table - current state, good for single table use
Class instance is not linked to a single table, and a table name is provided on each request - your proposal, good for multiple tables use
Instance can take a default table name (kwargs), but requests can also pass an optional table name  - most flexible, but seems it could get confusing.
Subclass Airtable to a create a Class that takes table name on each request. This seems the most flexible, and most importantly, won't break backward compatibility.
Not sure how we would name the subclass.

For the time being, you can also just create this subclass yourself with the changes you proposed.
Thoughts?

I think it's fair use case however, I also think it would be equally frustrating if you only use one table, and you have to enter the table name on each request, don't you agree?

Actually, I don't think so, an example here is how it's done in aws python sdk, in each request you always have to provide the bucket name (we can see it as the same high-level param as the table name for airtable :see_no_evil: ), and it's actually a very small price to pay for greater flexibility (the user can always set up a global var for his table name and just use it everywhere) or maybe even create a subclass of his own for each of the tables with his own functions that are custom made for his use case, eg:
class User(Airtable):
  def __init__(self, table_name, api_key=None):
    super().__init__(api_key=api_key)
    self.table_name = table_name

  def add_user(self, work_id, name, age, profession):
    user_record = self.match(self.table_name, 'work_id', work_id) # look if user already exist
    if user_record: # if already exist update it
      return self.update(self.table_name, ....)

Subclass Airtable to a create a Class that takes table name on each request. This seems the most flexible, and most importantly, won't break backward compatibility.
Not sure how we would name the subclass.

I agree with you on this one, it is quite important to not break backward compatibility and this might be the solution for that, but what bugs me a little bit here is that we will be going from a class for a single table_name to a more general one for any table_name ..

Ok, I think you convinced me 🙂
The official js library instantiates a "base" as well and table name is passed.
Maybe we can make a breaking change on 1.x, since there a few other breaking changes I want to make.
In the mean time a subclass would probably be the best option.
Class AirtableBase(Airtable):
    # override methods to take table name

I'll make a PR for both then, there is a branch for the breaking change?

Great. No 1.x branch yet but I will start one

actually it doesn't need to be a breaking change, we can just make an AirtableBase class and have the Airtable class inherit from it, it should stay backward compatible in this case and can also serve as a kind of example if someone wants to make his own table class (as shown above)
so we would have
class AirtableBase:
 # same as the current Airtable class but with table_name as var in each method

class Airtable(AirtableBase):
  # update methods of AirtableBase to use a fixed table_name

I have a project where I really need table names to be passed on each call.
I essentially wrote the Base Class I described above. It's the same as Airtable() but all methods take a table_name arg.
We could use this as the main class, and then have a class Table where table name is provided on __init__
"""

class Base(object):

    VERSION = "v0"
    API_BASE_URL = "https://api.airtable.com/"
    API_LIMIT = 1.0 / 5  # 5 per second
    API_URL = posixpath.join(API_BASE_URL, VERSION)
    MAX_RECORDS_PER_REQUEST = 10

    def __init__(self, base_key, api_key=None, timeout=None):
        """
        Instantiates a new Airtable instance

        >>> table = Airtable('basekey', "tablename")

        With timeout:

        >>> table = Airtable('basekey', "tablename", timeout=(1, 1))

        Args:
            base_key(``str``): Airtable base identifier

        Keyword Args:
            api_key (``str``, optional): Optional API key. If not provided,
                it will attempt to use ``os.environ['AIRTABLE_API_KEY']``
            timeout (``int``, ``Tuple[int, int]``, optional): Optional timeout
                parameters to be used in request. `See requests timeout docs.
                <https://requests.readthedocs.io/en/master/user/advanced/#timeouts>`_

        """
        session = requests.Session()
        session.auth = AirtableAuth(api_key=api_key)
        self.base_key = base_key
        self.session = session
        self.timeout = timeout

    def table_url(self, table_name):
        url_safe_table_name = quote(table_name, safe="")
        return posixpath.join(self.API_URL, self.base_key, url_safe_table_name)

    def _process_params(self, params):
        """
        Process params names or values as needed using filters
        """
        new_params = OrderedDict()
        for param_name, param_value in sorted(params.items()):
            param_value = params[param_name]
            ParamClass = AirtableParams._get(param_name)
            new_params.update(ParamClass(param_value).to_param_dict())
        return new_params

    def _chunk(self, iterable, chunk_size):
        """Break iterable into chunks."""
        for i in range(0, len(iterable), chunk_size):
            yield iterable[i : i + chunk_size]

    def _build_batch_record_objects(self, records):
        return [{"fields": record} for record in records]

    def _process_response(self, response):
        try:
            response.raise_for_status()
        except requests.exceptions.HTTPError as exc:
            err_msg = str(exc)

            # Reports Decoded 422 Url for better troubleshooting
            # Disabled in IronPython Bug:
            # https://github.com/IronLanguages/ironpython2/issues/242
            if not IS_IPY and response.status_code == 422:
                err_msg = err_msg.replace(response.url, unquote(response.url))
                err_msg += " (Decoded URL)"

            # Attempt to get Error message from response, Issue #16
            try:
                error_dict = response.json()
            except ValueError:
                pass
            else:
                if "error" in error_dict:
                    err_msg += " [Error: {}]".format(error_dict["error"])
            raise requests.exceptions.HTTPError(err_msg)
        else:
            return response.json()

    def record_url(self, table_name, record_id):
        """ Builds URL with record id """
        table_url = self.url_table(table_name)
        return posixpath.join(table_url, record_id)

    def _request(self, method, url, params=None, json_data=None):
        response = self.session.request(
            method, url, params=params, json=json_data, timeout=self.timeout
        )
        return self._process_response(response)

    def _get(self, url, **params):
        processed_params = self._process_params(params)
        return self._request("get", url, params=processed_params)

    def _post(self, url, json_data):
        return self._request("post", url, json_data=json_data)

    def _put(self, url, json_data):
        return self._request("put", url, json_data=json_data)

    def _patch(self, url, json_data):
        return self._request("patch", url, json_data=json_data)

    def _delete(self, url):
        return self._request("delete", url)

    def _delete_batch(self, table_name, record_ids):
        table_url = self.table_url(table_name)
        return self._request("delete", table_url, params={"records": record_ids})

    def get(self, table_name, record_id):
        """
        Retrieves a record by its id

        >>> record = airtable.get('Contacts', 'recwPQIfs4wKPyc9D')

        Args:
            table_name(``str``): Airtable table name
            record_id(``str``): Airtable record id

        Returns:
            record (``dict``): Record
        """
        record_url = self.record_url(table_name, record_id)
        return self._get(record_url)

    def get_iter(self, table_name, **options):
        """
        Record Retriever Iterator

        Returns iterator with lists in batches according to pageSize.
        To get all records at once use :any:`get_all`

        >>> for page in airtable.get_iter('Contacts'):
        ...     for record in page:
        ...         print(record)
        [{'fields': ... }, ...]

        Args:
                table_name(``str``): Airtable table name

        Keyword Args:
                max_records (``int``, optional): The maximum total number of
                    records that will be returned. See :any:`MaxRecordsParam`
                view (``str``, optional): The name or ID of a view.
                    See :any:`ViewParam`.
                page_size (``int``, optional ): The number of records returned
                    in each request. Must be less than or equal to 100.
                    Default is 100. See :any:`PageSizeParam`.
                fields (``str``, ``list``, optional): Name of field or fields to
                    be retrieved. Default is all fields. See :any:`FieldsParam`.
                sort (``list``, optional): List of fields to sort by.
                    Default order is ascending. See :any:`SortParam`.
                formula (``str``, optional): Airtable formula.
                    See :any:`FormulaParam`.

        Returns:
            iterator (``list``): List of Records, grouped by pageSize

        """
        offset = None
        table_url = self.table_url(table_name)
        while True:
            data = self._get(table_url, offset=offset, **options)
            records = data.get("records", [])
            time.sleep(self.API_LIMIT)
            yield records
            offset = data.get("offset")
            if not offset:
                break

    def get_all(self, table_name, **options):
        """
        Retrieves all records repetitively and returns a single list.

        >>> airtable.get_all('Contacts')
        >>> airtable.get_all('Contacts', view='MyView', fields=['ColA', '-ColB'])
        >>> airtable.get_all('Contacts', maxRecords=50)
        [{'fields': ... }, ...]

        Args:
            table_name(``str``): Airtable table name

        Keyword Args:
            max_records (``int``, optional): The maximum total number of
                records that will be returned. See :any:`MaxRecordsParam`
            view (``str``, optional): The name or ID of a view.
                See :any:`ViewParam`.
            fields (``str``, ``list``, optional): Name of field or fields to
                be retrieved. Default is all fields. See :any:`FieldsParam`.
            sort (``list``, optional): List of fields to sort by.
                Default order is ascending. See :any:`SortParam`.
            formula (``str``, optional): Airtable formula.
                See :any:`FormulaParam`.

        Returns:
            records (``list``): List of Records

        >>> records = get_all(maxRecords=3, view='All')

        """
        all_records = []
        table_url = self.table_url(table_name)
        for records in self.get_iter(table_url. **options):
            all_records.extend(records)
        return all_records

    def match(self, table_name, field_name, field_value, **options):
        """
        Returns first match found in :any:`get_all`

        >>> airtable.match('Contacts', 'Name', 'John')
        {'fields': {'Name': 'John'} }

        Args:
            table_name(``str``): Airtable table name
            field_name (``str``): Name of field to match (column name).
            field_value (``str``): Value of field to match.

        Keyword Args:
            max_records (``int``, optional): The maximum total number of
                records that will be returned. See :any:`MaxRecordsParam`
            view (``str``, optional): The name or ID of a view.
                See :any:`ViewParam`.
            fields (``str``, ``list``, optional): Name of field or fields to
                be retrieved. Default is all fields. See :any:`FieldsParam`.
            sort (``list``, optional): List of fields to sort by.
                Default order is ascending. See :any:`SortParam`.

        Returns:
            record (``dict``): First record to match the field_value provided
        """
        from_name_and_value = AirtableParams.FormulaParam.from_name_and_value
        formula = from_name_and_value(field_name, field_value)
        options["formula"] = formula
        for record in self.get_all(table_name, **options):
            return record
        else:
            return {}

    def search(self, table_name, field_name, field_value, **options):
        """
        Returns all matching records found in :any:`get_all`

        >>> airtable.search('People', 'Gender', 'Male')
        [{'fields': {'Name': 'John', 'Gender': 'Male'}, ... ]

        >>> airtable.search('People', 'Checkbox Field', 1)
        [{'fields': {'Name': 'John', 'Gender': 'Male'}, ... ]

        Args:
            table_name(``str``): Airtable table name
            field_name (``str``): Name of field to match (column name).
            field_value (``str``): Value of field to match.

        Keyword Args:
            max_records (``int``, optional): The maximum total number of
                records that will be returned. See :any:`MaxRecordsParam`
            view (``str``, optional): The name or ID of a view.
                See :any:`ViewParam`.
            fields (``str``, ``list``, optional): Name of field or fields to
                be retrieved. Default is all fields. See :any:`FieldsParam`.
            sort (``list``, optional): List of fields to sort by.
                Default order is ascending. See :any:`SortParam`.

        Returns:
            records (``list``): All records that matched ``field_value``

        """
        records = []
        from_name_and_value = AirtableParams.FormulaParam.from_name_and_value
        formula = from_name_and_value(field_name, field_value)
        options["formula"] = formula
        records = self.get_all(table_name, **options)
        return records

    def insert(self, table_name, fields, typecast=False):
        """
        Inserts a record

        >>> record = {'Name': 'John'}
        >>> airtable.insert('Contacts', record)

        Args:
            table_name(``str``): Airtable table name
            fields(``dict``): Fields to insert.
                Must be dictionary with Column names as Key.
            typecast(``boolean``): Automatic data conversion from string values.

        Returns:
            record (``dict``): Inserted record

        """
        table_url = self.table_url(table_name)
        return self._post(
            table_url, json_data={"fields": fields, "typecast": typecast}
        )

    def batch_insert(self, table_name, records, typecast=False):
        """
        Breaks records into chunks of 10 and inserts them in batches.
        Follows the set API rate.
        To change the rate limit use ``airtable.API_LIMIT = 0.2``
        (5 per second)

        >>> records = [{'Name': 'John'}, {'Name': 'Marc'}]
        >>> airtable.batch_insert('Contacts', records)

        Args:
            table_name(``str``): Airtable table name
            records(``list``): Records to insert
            typecast(``boolean``): Automatic data conversion from string values.

        Returns:
            records (``list``): list of added records
        """
        inserted_records = []
        table_url = self.table_url(table_name)
        for chunk in self._chunk(records, self.MAX_RECORDS_PER_REQUEST):
            new_records = self._build_batch_record_objects(chunk)
            response = self._post(
                table_url, json_data={"records": new_records, "typecast": typecast}
            )
            inserted_records += response["records"]
            time.sleep(self.API_LIMIT)
        return inserted_records

    def update(self, table_name, record_id, fields, typecast=False):
        """
        Updates a record by its record id.
        Only Fields passed are updated, the rest are left as is.

        >>> record = airtable.match('Employees', 'Employee Id', 'DD13332454')
        >>> fields = {'Status': 'Fired'}
        >>> airtable.update(record['id'], fields)

        Args:
            table_name(``str``): Airtable table name
            record_id(``str``): Id of Record to update
            fields(``dict``): Fields to update.
                Must be dictionary with Column names as Key
            typecast(``boolean``): Automatic data conversion from string values.

        Returns:
            record (``dict``): Updated record
        """
        record_url = self.record_url(table_name, record_id)
        return self._patch(record_url, json_data={"fields": fields, "typecast": typecast})

    def update_by_field(self, table_name, field_name, field_value, fields, typecast=False, **options):
        """
        Updates the first record to match field name and value.
        Only Fields passed are updated, the rest are left as is.

        >>> record = {'Name': 'John', 'Tel': '540-255-5522'}
        >>> airtable.update_by_field('Contacts', 'Name', 'John', record)

        Args:
            table_name(``str``): Airtable table name
            field_name (``str``): Name of field to match (column name).
            field_value (``str``): Value of field to match.
            fields(``dict``): Fields to update.
                Must be dictionary with Column names as Key
            typecast(``boolean``): Automatic data conversion from string values.

        Keyword Args:
            view (``str``, optional): The name or ID of a view.
                See :any:`ViewParam`.
            sort (``list``, optional): List of fields to sort by.
                Default order is ascending. See :any:`SortParam`.

        Returns:
            record (``dict``): Updated record
        """
        record = self.match(table_name, field_name, field_value, **options)
        return {} if not record else self.update(record["id"], fields, typecast)

    def replace(self, table_name, record_id, fields, typecast=False):
        """
        Replaces a record by its record id.
        All Fields are updated to match the new ``fields`` provided.
        If a field is not included in ``fields``, value will bet set to null.
        To update only selected fields, use :any:`update`.

        >>> record = airtable.match('Seats', 'Seat Number', '22A')
        >>> fields = {'PassangerName': 'Mike', 'Passport': 'YASD232-23'}
        >>> airtable.replace(record['id'], fields)

        Args:
            table_name(``str``): Airtable table name
            record_id(``str``): Id of Record to update
            fields(``dict``): Fields to replace with.
                Must be dictionary with Column names as Key.
            typecast(``boolean``): Automatic data conversion from string values.

        Returns:
            record (``dict``): New record
        """
        record_url = self.record_url(table_name, record_id)
        return self._put(record_url, json_data={"fields": fields, "typecast": typecast})

    def replace_by_field(
        self, table_name, field_name, field_value, fields, typecast=False, **options
    ):
        """
        Replaces the first record to match field name and value.
        All Fields are updated to match the new ``fields`` provided.
        If a field is not included in ``fields``, value will bet set to null.
        To update only selected fields, use :any:`update`.

        Args:
            table_name(``str``): Airtable table name
            field_name (``str``): Name of field to match (column name).
            field_value (``str``): Value of field to match.
            fields(``dict``): Fields to replace with.
                Must be dictionary with Column names as Key.
            typecast(``boolean``): Automatic data conversion from string values.

        Keyword Args:
            view (``str``, optional): The name or ID of a view.
                See :any:`ViewParam`.
            sort (``list``, optional): List of fields to sort by.
                Default order is ascending. See :any:`SortParam`.

        Returns:
            record (``dict``): New record
        """
        record = self.match(table_name, field_name, field_value, **options)
        return {} if not record else self.replace(record["id"], fields, typecast)

    def delete(self, table_name, record_id):
        """
        Deletes a record by its id

        >>> record = airtable.match('Employees', 'Employee Id', 'DD13332454')
        >>> airtable.delete(record['id'])

        Args:
            table_name(``str``): Airtable table name
            record_id(``str``): Airtable record id

        Returns:
            record (``dict``): Deleted Record
        """
        record_url = self.record_url(table_name, record_id)
        return self._delete(record_url)

    def delete_by_field(self, table_name, field_name, field_value, **options):
        """
        Deletes first record  to match provided ``field_name`` and
        ``field_value``.

        >>> record = airtable.delete_by_field('Employees', 'Employee Id', 'DD13332454')

        Args:
            table_name(``str``): Airtable table name
            field_name (``str``): Name of field to match (column name).
            field_value (``str``): Value of field to match.

        Keyword Args:
            view (``str``, optional): The name or ID of a view.
                See :any:`ViewParam`.
            sort (``list``, optional): List of fields to sort by.
                Default order is ascending. See :any:`SortParam`.

        Returns:
            record (``dict``): Deleted Record
        """
        record = self.match(table_name, field_name, field_value, **options)
        record_url = self.record_url(table_name, record_id)
        return self._delete(record_url)

    def batch_delete(self, table_name, record_ids):
        """
        Breaks records into batches of 10 and deletes in batches, following set
        API Rate Limit (5/sec).
        To change the rate limit set value of ``airtable.API_LIMIT`` to
        the time in seconds it should sleep before calling the function again.

        >>> record_ids = ['recwPQIfs4wKPyc9D', 'recwDxIfs3wDPyc3F']
        >>> airtable.batch_delete(records_ids)

        Args:
            table_name(``str``): Airtable table name
            records(``list``): Record Ids to delete

        Returns:
            records(``list``): list of records deleted

        """
        chunks = self._chunk(record_ids, self.MAX_RECORDS_PER_REQUEST)
        deleted_records = []
        for chunk in chunks:
            response = self._delete_batch(table_name, chunk)
            deleted_records += response["records"]
            time.sleep(self.API_LIMIT)
        return deleted_records

    def __repr__(self):
        return "<Airtable>"

Worked in the next major release #126 @bendidi


Automated Bitcoin Core installation and the Assumeutxo project

Liana requires a connection to a running Bitcoin Core instance to operate. Most users don't run Bitcoin Core on their machine, and having to install many moving pieces is a friction to the UX.
We could imagine the GUI installer would download and install Bitcoin Core itself at the click of a button from the user. But then, the user would not be able to use the wallet before IBD is done.
Here enters the assumeutxo project: https://github.com/bitcoin/bitcoin/issues/15605. If the user is not able to setup Bitcoin Core themselves, the temporary trust (until background IBD completes) of assumeutxo could be reasonable. Anyway for these users it's that or using a random public Electrum node so...
What do you think?

I'm not too sure how to make it best, I guess if Core isn't detected running, a message could pop up asking to run it or install it.
IBD is long yes. AssumeUTXO is "better" than random Electrum, but if/when we have electrum we can ask the user what they prefer as failover during IBD:

Wait for full verification
Use AssumeUTXO
Use Electrum during sync time

Another note: Specter and BTCPay distribute snapshots of data directories for this usecase. I think it's insane and we shouldn't do that, but wanted to mention it still.

Another issue: we can't just download a binary and run it on the user machine. At least not under MacOS (and probably Windows too). And bundling bitcoind by default would be insane.

Partial support for Assumeutxo was released in Bitcoin Core 26.0. It's still not usable, and even less so with a wallet.


Anti-spam suggestion for pypi repositories

Hello!
I found out that there is a spammer who creates many repositories containing only a PKG-INFO file advertising his (probably fake) roblox currency generator, amazon gift codes, etc.
Even though this repository does not have a malicious effect on developers, it is definitely a malicious/unwanted activity.
One of such "developers" for example:

Google indexes this kind of links, it may harm the reputation of pypi:

So I wrote a heuristics for this kind of situations.

For example, one of this repos: https://pypi.org/project/roblox-free-robux-no-survey-2022-roblox-for-robux-v-2529/


Auto-Resolution-Selection

Used in selection of resolution for structure function

Is there a way to estimate the probability or likelihood corresponding to each time lag in dcf?


web: assorted mobile fixes

Hello @hyu, @jazzdan,
Please review the following commits I made in branch nicks/mobile:
1ea37486a3c3b97ea8240688ef13d5dec9f83f3a (2019-11-05 20:29:54 -0500)
web: assorted mobile fixes

mostly just hiding a few things on small screens + getting the accessibility better


Downloaded image is in the wrong location wrt the query vector

Steps:

Query the staccato api with the attached vector.
study_area.zip
Select a random scene and download a band with "Add to Layers" and "Stream COGs" option.

Expected:
query vector and downloaded image are coincident.
Actual:
query vector and band are very far away from one another.  The distance is probably thousands of world sizes, so it seems to be an issue with CRS.

Issue was that my Project Properties CRS was set to "No Projection" (shown as an X on top of the globe-with-hat icon).  Changing this to EPSG:4326 / WGS 84 resolved this display issue.


multiple severity for same rule

Using no-console as an example, I would like to do this:
{
  "rules": {
    "no-console": [{
      "severity": "warning",
      "options": [
        "warn",
        "error"
      ]
    }, {
      "severity": "error",
      "options": [
        "log"
      ]
    }]
  }
}

Interesting idea! Would this be implemented on a rule-by-rule basis?

I think rule-by-rule is a good place to start. Don't over-engineer it IMO.

💀 It's time! 💀
TSLint is being deprecated and no longer accepting pull requests for major new changes or features. See #4534. 😱
If you'd like to see this change implemented, you have two choices:

Recommended: Check if this is available in ESLint + typescript-eslint ✅
Not Recommended: Fork TSLint locally 🤷♂

👋 It was a pleasure open sourcing with you!
If you believe this message was posted here in error, please comment so we can re-open the issue!

🤖 Beep boop! 👉  TSLint is deprecated 👈 (#4534)  and you should switch to typescript-eslint! 🤖
🔒 This issue is being locked to prevent further unnecessary discussions. Thank you! 👋


Synthesize stops when text contains invalid character(s)

TTS DEMO -- For all  in US English Voices only, after pressing "Speak" button the program begins to synthesize text to speech, but stops before the end when text contains invalid character
Expected: For all voices, program synthesizes all text, with any character, to speech
Actual: For US English voices, program does not synthesize text, with invalid character, to speech
Note:
As per Radek, "This is a bug in the demopage; it works fine when communicating directly with  https://stream-d.watsonplatform.net/text-to-speech/api/v1/synthesize?voice=en-US_AllisonVoice"
See details below:
When en-US_AllisonVoice, en-US_LisaVoice, or en-US_MichaelVoice is selected, and the text below is entered, and you press "Speak" the program stops speaking at the point "Stops speaking here" is stated in the text box.
And an audio file is successfully created containing only the part spoken out loud and not the entire text.
When any other voice is selected, the program works correctly and completes successfully by not stopping in the middle of the text.
Example text in text box:
Italian:
 <phoneme alphabet="ibm" ph="1byan.0ko"></phoneme>```

English:
```<phoneme alphabet="ipa" ph="təˈmeɪ.ɾoʊ"></phoneme>
<phoneme alphabet="ipa" ph="təˈmeɪ.ɾoʊ"></phoneme>
<phoneme alphabet="ibm" ph=".0tx.1me.0Fo"></phoneme>```

Castillian Spanish:
```<phoneme alphabet="ipa" ph=".ˈθiŋ.ko"></phoneme>
 <phoneme alphabet="ibm" ph="1Tin.0ko"></phoneme>```

Italian:
```<phoneme alphabet="ipa" ph=".ʤe.ˈla.to"></phoneme>
 <phoneme alphabet="ibm" ph="1byan.0ko"></phoneme>```

English:
```<phoneme alphabet="ipa" ph="təˈmeɪ.ɾoʊ"></phoneme>
<phoneme alphabet="ipa" ph="təˈmeɪ.ɾoʊ"></phoneme>
<phoneme alphabet="ibm" ph=".0tx.1me.0Fo"></phoneme>```

Castillian Spanish:
```<phoneme alphabet="ipa" ph=".ˈθiŋ.ko"></phoneme>
 <phoneme alphabet="ibm" ph="1Tin.0ko"></phoneme>```     -- Stops speaking here

North American Spanish:
```<phoneme alphabet="ipa" ph=".in.di.ˈβi.ðwo"></phoneme>
 <phoneme alphabet="ibm" ph=".0e.1DaD"></phoneme>```

Brazilian Portuguese

<phoneme alphabet="ipa" ph=".ĩ.ˈsẽ.su"></phoneme>
 <phoneme alphabet="ibm" ph=".0o.0bri.1ga.0du"></phoneme>

French:
<phoneme alphabet="ipa" ph=".ʃə.val"></phoneme>
 <phoneme alphabet="ibm" ph="0o.k1'oe~'"></phoneme>

US English
<phoneme alphabet="ipa" ph=".ˈfæst"></phoneme>
 <phoneme alphabet="ibm" ph=".1mH.0DR"></phoneme>

<phoneme alphabet="ipa" ph="təˈmeɪ.ɾoʊ"></phoneme>
 <phoneme alphabet="ibm" ph=".0tx.1me.0Fo"></phoneme>

UK English

<phoneme alphabet="ipa" ph=".ˈbʌ.tən"></phoneme>
 <phoneme alphabet="ibm" ph=".0In.1hEx.0rIt"></phoneme>

German:
<phoneme alphabet="ipa" ph=".ˈʦaʊ.bɐ"></phoneme>
 <phoneme alphabet="ibm" ph=".1h'oj'.0t@"></phoneme>

Alexandra

This seems like a service bug, although we may be able to work around it in the demo. @daniel-bolanos what do you think?

This is fixed in #71 and should be deployed soon.  The problem is that the error message in the demo was getting suppressed.  The service does return a correct 'Illegal character' error.

Should we remove the characters that are illegal so that the demo synthesize the text? I down side is that users will expect the API to synthesize the same text

I've been considering this.  The problem with removing the offending characters is that we don't know how important that character might be.  I think the best thing to do is just pass the service error message to the user so they can understand what happened.  I'm looking into how much more info we can get from the service (like error position, etc).  but synthesis is halted on the error and the service itself doesn't continue.


Cannot read properties of undefined (reading 'name') in KogitoEditorIntegrationProvider.tsx:49:38 with kaoto UI main branch

With some integration files, there is a blank page.
Example of files to reproduce:
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: my-integration-name
spec: {}

stacjktrace in console:
KogitoEditorIntegrationProvider.tsx:49 Uncaught TypeError: Cannot read properties of undefined (reading 'name')
    at KogitoEditorIntegrationProvider.tsx:49:38
    at memoizedSelector (with-selector.development.js:79:1)
    at getSnapshotWithSelector (with-selector.development.js:134:1)
    at updateSyncExternalStore (react-dom.development.js:16860:1)
    at Object.useSyncExternalStore (react-dom.development.js:17943:1)
    at useSyncExternalStore (react.development.js:1676:1)
    at useSyncExternalStoreWithSelector (with-selector.development.js:145:1)
    at useStore (index.mjs:8:1)
    at useBoundStore (index.mjs:25:1)
    at KogitoEditorIntegrationProviderInternal (KogitoEditorIntegrationProvider.tsx:47:80)

the stack is pointing to code that was chnanged very recently in this PR https://github.com/KaotoIO/kaoto-ui/pull/2034/


On iOS Simulator, try Camera() fails to throw CameraError but crashes in deinit()

videoOutput! member of Camera class set to nil before  throwing CameraError and that causes Camera.deinit()crash with

fatal error: unexpectedly found nil while unwrapping an Optional value

while attempting to access videoOutput!
To solve the issue, these changes:

Fix iOS GPUImageTests build failure by correcting file locations in xcodeproj
Add testCameraError() test case to harness the code reproduces the crash
Fix the crash by assigning videoOutput! with a valid object, not nil

💯


 Lifecycle injection APIs can only be used during execution of setup().  The demo site uses Vue 3 and it works fine.
Which Vue 3 version are you using? The package requires at least Vue 3.2 as it uses <script setup>.

Hi,
I'm using vue version 3.2.41.
I've my scripts running below the template, I don't see how the components are being exposed, but I'm guessing this is all part of the setup syntactic sugar. Now I'm curious how they will know if a variable is unused. In my example I don't have the setup argument but its by the book import in setup function, expose as component, so I'm not sure what's wrong.

I can't seem to reproduce this. If you could provide a minimal reproduction that'd be great, thanks!

Please try updating to v2.2.3 and check if the issue is fixed.


When adding a schema that contains an array to the data mapper, the array is not identified.

Description:
When creating a data mapper using a JSON file that contains an array to generate the schema, the array is not identified; only fields are recognized.
Tested json file content.
[
  {
    "name": "John Doe",
    "description": "A software engineer from California."
  },
  {
    "name": "Jane Smith",
    "description": "A graphic designer based in New York."
  },
  {
    "name": "Alice Johnson",
    "description": "A freelance writer and editor."
  },
  {
    "name": "Bob Brown",
    "description": "A project manager with experience in IT services."
  }
]

View of the schema in data mapper.

Suggested Labels:

Suggested Assignees:

Affected Product Version:
v0.9.24071813
OS, DB, other environment details and versions:
Steps to reproduce:
Related Issues:

@chathuranga-jayanath-99 Could you please upgrade the vsix to v1.0.0 and try? Let us know know if the issue persists.

This is fixed with https://github.com/wso2/maven-tools/pull/132


ManagedIdentityClient fails for either "failed to retreive secret key from the identity endpoint" or "expected a 401 response, received"

Bug Report

import path of package in question, e.g. .../services/compute/mgmt/2018-06-01/compute

"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"

SDK version e.g. master, latest, 18.1.0

github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1
github.com/microsoftgraph/msgraph-sdk-go v1.33.0

Specify the exact commit if possible; one way to get this is the REVISION
column output by go list -m <module>, for example go list -m github.com/Azure/azure-sdk-for-go/sdk/azcore.

go list -m github.com/Azure/azure-sdk-for-go/sdk/azidentity
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1
go list -m github.com/Azure/azure-sdk-for-go/sdk/azcore
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.2
go list -m github.com/microsoftgraph/msgraph-sdk-go
github.com/microsoftgraph/msgraph-sdk-go v1.33.0

output of go version

go version
go version go1.21.6 darwin/arm64

What happened?
I am trying to use ManagedIdentity with a custom endpoint, similar to this implementation: https://github.com/gsoft-inc/azure-cli-credentials-proxy. With the azure-sdk-for-python everything works as expected. However, with azure-sdk-for-go there are two issues:

The query params are added correctly only when I add the ? sign to the end of the URL. This part seems to be related to this line: https://github.com/Azure/azure-sdk-for-go/blob/4a5bfaf4207656db342beeaccff953a335c4bcc6/sdk/azidentity/managed_identity_client.go#L373
Once added (i.e. http://azcliproxy/token?), then it fails with the assumption of a 401, which is in this line: https://github.com/Azure/azure-sdk-for-go/blob/4a5bfaf4207656db342beeaccff953a335c4bcc6/sdk/azidentity/managed_identity_client.go#L381-L384

What did you expect or want to happen?
The same as with the azure-sdk-for-python - it should work with the generated token from the custom endpoint I have supplied.

How can we reproduce it?
You can build the azcliproxy either from the .NET project or from this Go gist https://gist.github.com/Shaked/e16e36c93048423fc0e6d574c78aa6b2. Then run it on the same network with a project that uses the following lines:

cred, _ := azidentity.NewDefaultAzureCredential(nil)
scopes := []string{"https://graph.microsoft.com/.default"}
graphClient, err := msgraphsdk.NewGraphServiceClientWithCredentials(cred, scopes)
if err != nil {
  log.Fatalf("Failed to create graph client: %v", err)
}
me, err := graphClient.Me().Get(context.Background(), nil)
if err != nil {
  log.Fatalf("Failed to get me: %v", err)
}
log.Printf("Me: %#v", ,me.GetDisplayName())

Make sure to set the following environment variables:
        - name: IDENTITY_ENDPOINT
          value: "http://azcliproxy:8080/token"
        - name: IMDS_ENDPOINT
          value: "dummy_required_value"

Anything we should know about your environment.

The exact same azcliproxy work with this python code:
import loguru
from azure.identity import DefaultAzureCredential
import os
import asyncio

async def run_msgraph():
    from msgraph import GraphServiceClient

    credential = DefaultAzureCredential()
    scopes = ["https://graph.microsoft.com/.default"]
    client = GraphServiceClient(credentials=credential, scopes=scopes)
    me = await client.me.get()
    if me:
        print(me.display_name)
    else:
        print("No user found")

asyncio.run(run_msgraph())

This use case is important for bypassing UMI dependency while working on a local machine, where federated tokens are not available and ideally SP secrets are not something I'd like to use.
In case this is not a bug I'd like to understand the differences between the python code and the Go code and if there's anything that can be done to overcome this issue.
Thank you!
### Tasks

Thanks for opening this issue! Firstly, I have to underline that our managed identity client supports only Azure platforms. We don't support or test anything else. If you want to imitate an Azure platform's managed identity service, I suggest targeting a simpler one, like App Service (set IDENTITY_ENDPOINT and IDENTITY_HEADER; respond like this). Setting IDENTITY_ENDPOINT and IMDS_ENDPOINT configures our managed identity client for Azure Arc, which has a somewhat elaborate protocol that your endpoint evidently doesn't implement. Your Python code is fragile because it depends on the way azure-identity handles unexpected responses. That behavior is undefined, which is to say the current behavior is an implementation detail that could change at any time. So, I think the best way to move forward with this approach is to imitate a simpler service.

@chlowell

I suggest targeting a simpler one, like App Service (set IDENTITY_ENDPOINT and IDENTITY_HEADER; respond like this).

It worked. Thanks for the tip!


Proof-of-concept dependency API.

Addresses #22
TODO/Questions:

Why is SpecLite used instead of full Gem::Specification? Should we store both, or add required dependency data to SpecLite?
Is Index the right spot for this?
Tests.
Documentation.

@xaviershay just checking to see if you need anymore feedback from me.


"hex" field missing in GetPayload Response

The GetPayload Response is currently not returning the signed transaction blob which would be found in the Response->hex field.

Thanks for the heads up! Do you have a payload UUID for me to check :)?

I am sorry it was a bit late, I think I misdescribed the problem, the API is returning the hex field correctly. But the Response Object that is serialized is lacking it. Should be a quick fix in adding the parameter, I will create a pull request.

Clear, noticed the PR as well. Thank you!!

Merged and fixed :)


[Docs] Readme - Update Maesh Logo

Description
This section of the README (https://github.com/layer5io/meshery#supported-service-meshes) uses the version of the Maesh logo that has text included ("Traefik Maesh"), but shouldn't.

@akashprasher over to you! :)

The PR(https://github.com/layer5io/meshery/pull/1733) also Fixes this issue
As I have changed the origin file It'll reflect everywhere it is being used.

This makes sense, but please don't do so across repos as we will inevitably end up with broken links, since people can't/don't track dependencies from other repos.


what is ST_Envelope_Agg ?

The web docs mention aggregation functions including ST_Envelope_Agg (which shows a :duck: native implementation).  How is this defined?  I don't see it in the GitHub README either.  I'd be very interested in aggregation functions.

Sorry about that, we're working on updating the docs and the readme here on GitHub properly.
The ST_Envelope_Agg basically returns a bounding box (as a polygon) containing the bounding box of all the input geometries. The signature is GEOMETRY ST_Extent_Agg(GEOMETRY). The source is here

Hmm, come to think of it it should probably be changed/aliased to ST_Extent, like in PostGIS


Increase accuracy of torso parsing

(Firstly, I want to apologize for creating multiple issues; if this is bothersome or you are very busy just let me know and I will try to work these out myself. In this case, feel free to close the issue.)
I've tried several videos now, and in many cases the parsing is not very accurate for the torso, especially when the subject is a woman with long hair. The problem is, if the torso isn't correctly parsed, it influences the generated background image.
Are there parameters in the parsing model that can be adjusted, or is it just not perfect regarding the torso? Do you have any recommendations for what to change if the results of step 3 in the preprocessing aren't good?
Here are some examples:

Hi, feel free to create issues.
For face pasing, we just use the open source code face-parsing.PyTorch, and I don't think there are adjustable parameters to improve the results. In my opinion, the most promising way to improve the results is to use more challenging dataset to retrain a more powerful model.
I notice there are some released face parsing dataset lapa-dataset and short-video-face-parsing-challenge, and including these data for training the parsing model may improve the parsing accuracy.

@RobinRenggli have you faced similar issues with male subjects as well?

@RobinRenggli have you faced similar issues with male subjects as well?

I did not run many tests on male subjects, but the factors that seem to confuse the parsing models are what you'd expect: Anything that obstructs the torso, such as hair or for example a microphone in front of the person. With "easy" examples it works well.

I've played around with this a little and managed to improve it, but not by much and only for one specific example (so the opposite of generalizable). In the process I started to ask myself the following question:
Where exactly is the torso parsing used, except for creating the com_imgs and the background? Why are the com_imgs used for the loss in the torso-nerf, when, if the parsing and background creation works well, com_imgs should be near identical to orig_imgs? I tried using the orig_imgs for the loss instead and it seems to work similarly. Is it because the slight differences in background between com_imgs and orig_imgs leads to artifacts and slows down/confuses the torso learning sometimes?
Improving this seems very useful, because right now the set of input videos that produce good results are somewhat constrained by this (short haired person facing the camera and not moving too much gets a little boring). Especially since the pose generation seems to work for these harder examples, but the parsing fails.

I've played around with this a little and managed to improve it, but not by much and only for one specific example (so the opposite of generalizable). In the process I started to ask myself the following question:
Where exactly is the torso parsing used, except for creating the com_imgs and the background? Why are the com_imgs used for the loss in the torso-nerf, when, if the parsing and background creation works well, com_imgs should be near identical to orig_imgs? I tried using the orig_imgs for the loss instead and it seems to work similarly. Is it because the slight differences in background between com_imgs and orig_imgs leads to artifacts and slows down/confuses the torso learning sometimes?
Improving this seems very useful, because right now the set of input videos that produce good results are somewhat constrained by this (short haired person facing the camera and not moving too much gets a little boring). Especially since the pose generation seems to work for these harder examples, but the parsing fails.

Hi, thanks for sharing this. Sometimes (specifically, when the background does not change) using ori_imgs will improve the result. Since in com_imgs we only copy the pixels coverd by head and torso parsing maps from ori_imgs, com_imgs will not contain the full torso part if the torso paring map fails to cover the full torso. If the background doesn't change during the full video, the perfect com_imgs ('perfect' means extracted from perfect parsing maps) will be the same as the ori_imgs. The reason that we use com_imgs is that sometimes the background changes.
So the conclusion is, if the head parsing maps are good while the torso parsing maps are bad and the background dosen't show obvious changes, using ori_imgs will lead better results than com_imgs.

Thank you for the elaborate answer. I can confirm that your conclusion worked for me as well.
I've been running an experiment over the weekend on a "difficult" example to test the limits of your method. (Difficult to me means long hair, non-white background, a lot of head-movement and with that torso movement.)
I found that the main issue with these examples is the torso, if the person does not stand very still, the Torso-NeRF produces bad outputs for me.
Have you tried similar examples and did you get similar results? Did you test any ideas on how to handle this, or is the model just not suited to examples where the person does not stand very still (i.e. news anchor style)?

Hi, I have tested on a video in which the person kept moving head and torso significantly, the synthesized torso parts show obvious artifacts and are often blur. So it's a limitation of the current method.


only-include-used-icons may look into the wrong folder

Hi @garronej ,
I'm working on a project that fetches multiple repositories in a subfolder, and this folder is .gitignore since it's only for analyses.
Unfortunately the binary only-include-used-icons throws an error trying to find dsfr assets into them:
[Error: ENOENT: no such file or directory, realpath '/xxx/myproject/data/initiatives/ac3a1957-2f3c-4aec-8b61-61d45ab9655f/repositories/a7510318-ebab-4559-b3b9-767277bac8a2/public/dsfr/fonts'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'realpath',
  path: '/xxx/myproject/data/initiatives/ac3a1957-2f3c-4aec-8b61-61d45ab9655f/repositories/a7510318-ebab-4559-b3b9-767277bac8a2/public/dsfr/fonts'
}

I tried to have a look at https://github.com/codegouvfr/react-dsfr/blob/main/src/bin/only-include-used-icons.ts but I don't get which instructions would try to go into nested folders (cwd and getProjectRoot seem to not do that).
If you have any idea, I would appreciate!

Hey @sneko,
How are you doing?
Can you share the link of the repo?
I'll update the code so it works in your usecase. Maybe the best aproach would be to make the script take a argument that point to the source directory but I try to keep the API surface as small as possible. I don't want to shift the burden of configuration to the user when I can figure out myself where I should search. Obviously here I failed to locate the source dir

Good thanks :)
I reproduced with your demo repo: https://github.com/garronej/react-dsfr-next-appdir-demo
It's important to note I'm lucky to see the error, because the third-party repository I was analyzing has DSFR stuff but they committed symbolic links (pointing to nowhere). That's why the binary says no such file or directory, otherwise your script would have work correctly but on the wrong folder.
Here the file https://github.com/betagouv/collectif-objets/blob/main/public/dsfr/dsfr.min.css to make it fail (you can recreate it with ln -s ../nowhere.dsfr.min.css dsfr.min.css).
You can copy this into your demo repository into react-dsfr-next-appdir-demo/my-repo/public/dsfr/dsfr.min.css to perform tests.
Tell me if you prefer a fork.

It does not work, I tried it with on your demo repo with a symlink in a subfolder. According to the commit https://github.com/codegouvfr/react-dsfr/commit/af517455dc340adb9e88a54623da94f9d235367c you added the check once candidateFilePaths is computed whereas I think the issue is before the array is built.
I may explore it in the next days.
In all cases, skipping symbolic links in my case will fix the error, but your binary will look for icons of other repositories. Which is fine I guess because:

I download/analyzer third-party repositories at runtime
The usage only-include-used-icons is during local development or when building (and when building for production the CI/CD has a clean environment so no nested repositories)
Having other icons locally does not affect me that much, I'm fine with it (may be a bit long if thousands of repositories to analyze but it's too specific to my case)

Skipping the symbolic links is what I tried to do but apparently I should have made a mistake.
Please provide me with a step by step reproduction and I'll fix it write away.
Something like:
git clone https://github.com/garronej/react-dsfr-next-appdir-demo
yarn install
yarn run something

Yes sorry, here it is:
git clone https://github.com/garronej/react-dsfr-next-appdir-demo
yarn install
mkdir -p data/no-matter-subfolder/public
ln -s ../nowhere.dsfr.min.css data/no-matter-subfolder/public/dsfr.min.css
yarn run predev

thanks a tot for reporting and for the repro! fixed


New Helper 'Get-AvailableDriveLetter'

should return the next free drive letter

very useful for mounting iso-files from cocolateyinstall.ps1

Fixed with #597


Scope $destroy issue in 0.2.18

Prior to this version when leaving a state, $scope $destroy was called first then the $scope of the new state was made then $stateChangeSuccess was called. Now I see order change completely: first the new state's $scope is made then  $stateChangeSuccess is called then $scope $destroy is called on the previous state. Is this part of the new changes? Because its messing up the way I handle some elements design between states.

Fixed in 84fd41268cb052c8af6b68bcf90324e7a1243146
I recommend using ver 0.2.15 until 0.2.19 is released, if the behavior in 0.2.18 is a problem for you.

Could 0.2.19 be released sooner than usually?
This bug breaks many cases.
For example, if somebody doing some cleanup in services on scope destroy, then at the moment the new data (which was set in service on new scope init) could be cleaned up!

@dmitry-dedukhin I recommend using 0.2.15 (the release prior to the one where this bug was introduced) until 0.2.19 is released.

@christopherthielen I've updated from 0.2.15 a month ago.
And as far as I remember this update was caused by two $stateChangeStart events bug in 0.2.15. This was critical for me so reverting is not an option...

Is there even going to be a 0.2.19?  It's a pretty bad state to leave the 0.2.x branch in... :(

There will be a 0.2.19. I can only do so much in my spare time, sorry.


Error when loading modules without export using AMD and outFile options

TypeScript Version:  2.5.2
Code
// a.ts
console.log('A');

// main.ts
import './a';

// main.js (output file of the command "tsc -m amd --outFile main.js main.ts")
console.log('A');
define("main", ["require", "exports", "./a"], function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
});

// When running the following error appear:
// Uncaught Error: Script error for "a", needed by: main

gist attached: https://gist.github.com/micnic/eea64a938858e9450bc6a2992cb0105c
Expected behavior:
It is expected that the content of the files which are imported without export statement is concatenated without being wrapped in a closure and they are not required anymore in the output file.
Actual behavior:
When running the code I get the error that the file ./a can not be found. This happens because these files are still required in the context of main.ts closure in the output file.

Duplicate of #18232

@kitsonk it is not really the same, the problem is that the a.ts is concatenated and after, when it is no more "visible", it is required like a normal module

It is the same, you are trying to load it as a module, but it is being emitted as global JavaScript, and thereby cannot be loaded as a module.  Just because you are concatenating to a single file is immaterial.

Sorry, but you did not get my point, I created a gist in this use case: https://gist.github.com/micnic/eea64a938858e9450bc6a2992cb0105c
please download it as zip, unpack it, run tsc in the terminal in the directory, open the browser and check the browser console

I did get your point.
a.ts is being emitted as global/plain JavaScript, instead of a module that can be loaded.  This is because TypeScript considers any TypeScript file without imports or exports as a global JavaScript file, not a module that can be loaded.
The outFile and the AMD target are red herrings to the root problem.  Your problem would go away if you added:
console.log('A');

export let undefined;

to a.ts.  Try it, you will notice it fixes your problem.  But it is a workaround versus a solution.

@kitsonk The linked code works fine when tsc emits individual files but fails when outFile is used. This behavior differs from tools such as r.js which emits a named define for a'.

@aluanhaddad depends on what the behaviour is though.  Obviously console.log('A'); is a non-sensical construct.  The transpiler is not emitting it as a module and that could cause problems depending on the use case.  But yes, I can see how the behaviour changes between the outFile or not, but the root cause is still that it isn't being emitted as a module, which only exhibits itself when the files are concatenated.

ok, thanks for the explanation, I think this issue can be closed


measure/data is missing after installation from Git

I have installed the scikit-video from Github following your instructions and then I have tried to measure the NIQE of a video, but I got an error, that the niqe_image_params.mat is missing and when I have checked it appears that the whole data/ dir is missing so I had to copy it manually from cloned directory to the /usr/lib/<python_version>/site-packages/<scikit_video_version>/skvideo/measure/data directory. I guess you have forgotten to copy this particular directory in the setup.py.
By the way, if I install scikit-video with pip in python-3.9 I am getting the scipy.misc error about imresize, so maybe it is a good idea to update the pip version with the fix from pull request #122 and #123

this error is also affecting the example videos, (installation was done freshly from the git version to avoid the imresize)
>>> import skvideo.datasets
>>> import skvideo.io
>>> videodata = skvideo.io.vread(skvideo.datasets.bigbuckbunny())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/PATH/venv/lib/python3.8/site-packages/skvideo/io/io.py", line 144, in vread
    reader = FFmpegReader(fname, inputdict=inputdict, outputdict=outputdict, verbosity=verbosity)
  File "/PATH/venv/lib/python3.8/site-packages/skvideo/io/ffmpeg.py", line 44, in __init__
    super(FFmpegReader,self).__init__(*args, **kwargs)
  File "/PATH/venv/lib/python3.8/site-packages/skvideo/io/abstract.py", line 69, in __init__
    self.size = os.path.getsize(filename)
  File "/usr/lib/python3.8/genericpath.py", line 50, in getsize
    return os.stat(filename).st_size
FileNotFoundError: [Errno 2] No such file or directory: '/PATH/venv/lib/python3.8/site-packages/skvideo/datasets/data/bigbuckbunny.mp4'
>>>

and the solution is already provided in pull request #156


Need to get XCDYouTubeVideo Only !!

Hello,
I need to use this library only to get the XCDYouTubeVideo object and not use the XCDYouTubeVideoPlayerViewController ..
How can i achieve this ?? please i really need help

How about reading the documentation? ;-)


backgroundColor not working in html for Chrome

Hi I don't know if I am doing anything wrong but I am trying to change the backgroundColor of the stage like this:
var stage = new NGL.Stage( "viewport", {backgroundColor:'grey'} );
it works in codepen and Mozilla and Opera but not when I open the website with Chrome.
For all I use this CDN:
https://cdn.rawgit.com/arose/ngl/v2.0.0-dev.31/dist/ngl.js

Are you running Chrome over Ubuntu? I have the same issue, but not just this one. The trajectories don't work properly, nor some representations like surfaces. As I said, it just happens in Chrome (and Chromium) over Ubuntu (14.04 in my case). Some of my co-workers have similar issues with NGL View.
Before that, it happened after every Chrome update, but I fixed it just resetting WebGL through chrome://flags. But after updating to the version 64 or 65, this option disappeared, so I tried with a plugin, but this trick doesn't fix the bug anymore.
It seems more a problem with WebGL / Ubuntu compatibility.

Yes I use the same Ubuntu config.
Thanks for your answer.

Anybody knows how to fix that? Some google chrome trick?

Works for me in current Chrome (67), see screenshot. Is it still a problem for you?

Are you running Chrome on Ubuntu? In my case: Chrome 67, Ubuntu 14.04 and the background is always black. Chrome on mac works properly (as Safari). Firefox works perfect in both OS.

I tested on a Mac. My first idea about linux is that is is a graphics driver issue.

Thanks Alexander. So there is nothing to do but wait for a fix from Chrome?

Or maybe update gpu drivers

Hi, I have the same issue: Chrome 68, Windows 10. Background stays black even if i change the color.

Is this related to this?
https://stackoverflow.com/questions/16177056/changing-three-js-background-to-transparent-or-other-color
When I execute the following code, the color of the background is changing but I'm loosing transparency:
nglStage.viewer.renderer.setClearColor( 0xffffff, 1);
nglStage.viewer.requestRender();

If I change the second parameter of the setClearColor method from 1 to 0, the behavior is similar to the one observed while using:
nglStage.setParameters({backgroundColor: "white"});

However changing ThreeJS scene background works well:
nglStage.viewer.scene.background = new THREE.Color( 0xffffff );
But it required me to add the ThreeJS dependency to my project.
I think it could be avoided if it was done from NGL directly.
Thanks

Hi David,
The code below fix the background color issue but in my case (Chrome on Ubuntu), the 3D representation disappears when I interact with it.
nglStage.viewer.renderer.setClearColor( 0xffffff, 1); nglStage.viewer.requestRender();
By the way, I have experiencied the same issue in Safari mobile.

@gbayarri: it's because the second parameter of setClearColor controls transparency. So when setting to 1 we loose transparency and thus it makes the representation disappears.
Have you tried the second workaround?
nglStage.viewer.scene.background = new THREE.Color( 0xffffff );

@david-bouyssie: yes, with TREE is working, thanks!
But just with static representations. When I try to represent a trajectory the background changes, but the molecules remain at the first position while the bonds move properly.

I thought this issue was related with the background one because it only happens in the same cases I can't change the background (in my case chrome on ubuntu and safari mobile). Is it related?

I'm affected by this problem on Ubuntu 21.04 with Chrome 93 using XOrg display server.

After an upgrade and restart it seems to work fine for me now on Chrome 94 when using "System title bars and borders" (not sure if this is related).

Thanks for the data points @krassowski. If there's a solid way to reproduce we could dig a bit more, but if it's a transient thing it's pretty hard to know where to start!

No worries, I was just trying to leave trace in case someone gets bitten again in future to help to triangulate the issue. There is more discussion in https://github.com/nglviewer/nglview/issues/948#issuecomment-929312548.


pkg/env: refactor KrewPaths to compute paths

remove access to internals of KrewPaths and provide methods
rename KrewPaths to Paths (tentative)
make Paths testable + add tests
MustGetKrewPaths: add test for home dir detection

This PR paves the way to;

add environment-variable overrides for krew base path and have it testable
refactor common filepath.Join()s that happen around returned paths so they
are not repeated in the plugin lifecycle logic.

Codecov Report

Merging #63 into master will increase coverage by 1.39%.
The diff coverage is 36.66%.

@@            Coverage Diff             @@
##           master      #63      +/-   ##
==========================================
+ Coverage   42.83%   44.22%   +1.39%
==========================================
  Files          12       12
  Lines         558      554       -4
==========================================
+ Hits          239      245       +6
+ Misses        274      262      -12
- Partials       45       47       +2

Impacted Files
Coverage Δ

pkg/installation/upgrade.go
0% <0%> (ø)
:arrow_up:

pkg/installation/install.go
23.07% <0%> (-6%)
:arrow_down:

pkg/environment/environment.go
56.75% <100%> (+32.51%)
:arrow_up:

Continue to review full report at Codecov.

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

cc: @lbb

/retest

I think the tests are fine. One of the builds (/push) was failing reproducibly by failing to clone the branch (it was trying to clone the wrong repo I think).


Vite and AMD

Hello there,
In an unrelated project I have issues using vite with the azure-devops-extension-sdk library which uses AMD that vite does not handle out of the box. I do notice that you in this project apparently have resolved this problem. Could you please briefly explain your setup?
Cheers,
Martin

@maasha
I don't recall exactly, but I think I solved it by converting the sdk to not use AMD: https://github.com/woehrl01/azdo-workitem-documents-extension/blob/main/patches/azure-devops-extension-sdk%2B2.0.11.patch

@woehrl01 ah, I see. And I suppose creating the patch is not trivial?
There is a fork of the SDK explaining that converting from AMD to ESM requires a lot of fixing:
https://www.npmjs.com/package/azure-devops-extension-sdk-esm?activeTab=readme
also, I doubt that this package is production ready.
Moreover, there is no ESM version of the azure-devops-extension-api also required for creating DevOps extensions :o(
Cheers,
Martin

If I remember correctly, I just downloaded the sdk and changed from and to commonjs and used the resulting js as patch in this extension. This worked fine. @maasha

@woehrl01 Thanks. I still think it would be neat if there was a vite plugin for AMD ala rollup-plugin-amd (which I fail to make work).


Parts of a body not respecting collision filter

So, I'm trying to disable collision on certain parts of a body depending upon an event.
It seems that applying collisionFilter on a body part doesn't really do anything.
Is this a bug or the way it is implemented.
I'm not talking about collision with parts of the same body, but with the world
        const mainBody = Bodies.rectangle(0, 0, w * 0.4, h * 0.8, {
		chamfer: { radius: w * 0.2 },
		label: 'main',
	});

	const sensors = {
		bottom: Bodies.rectangle(0, h * 0.4, w * 0.25, 10, { isSensor: true, label: 'bottom' }),
		front: Bodies.rectangle(w * 0.225, 0, 20, h * 0.5, { isSensor: true, label: 'front',  }),
		back: Bodies.rectangle(-w * 0.225, 0, 10, h * 0.5, { isSensor: true, label: 'back' }),
	};

	sensors.front.collisionFilter = {
		group: -1,
		category: -1,
		mask: 1 << 2
	}

	const compoundBody = Body.create({
		parts: [mainBody, sensors.bottom, sensors.front, sensors.back],
		frictionStatic: 0,
		frictionAir: 0.02,
		friction: 0.1,
		// The offset here allows us to control where the sprite is placed relative to the
		// matter body's x and y - here we want the sprite centered over the matter body.
		render: { sprite: { xOffset: 0.35, yOffset: 0.45 } },
	});

	this.body = compoundBody;

That's right currently for performance and simplicity reasons only the parent body collisionFilter is used rather than from each part, so I think you might need to use constraints to do something like this.


[Bug]: Errors issued when using PraisonAI --agents feature

What happened?
Hi,
First, many thanks for this fantastic and versatile tool!
Now the issue. I am testing the --agents feature using the example provided:
echo "Search for recent articles about the future of AI and write me a 500-word essay on the findings" | fabric --agents | fabric --output test_report.md
The generated output seems fine, and it also creates markdown document as expected. However during the process, several warnings are issued related to the connection pool and the tokeniser. I attach the log below.

I am running fabric from Macos Sonoma 14.5.
Python version : 3.12.3
Fabric default model: OpenAI gpt-4o

Version check

[X] Yes I was.

Relevant log output
2024-07-16 11:36:19,909 -<PHONE_NUMBER> - manager.py-manager:282 - WARNING: Error in TokenCalcHandler.on_llm_start callback: KeyError('Could not automatically map gpt-4o to a tokeniser. Please use `tiktoken.get_encoding` to explicitly get the tokeniser you expect.')
2024-07-16 11:36:20,843 -<PHONE_NUMBER>4 - connectionpool.py-connectionpool:329 - WARNING: Connection pool is full, discarding connection: us-api.i.posthog.com. Connection pool size: 10
2024-07-16 11:36:20,852 -<PHONE_NUMBER>2 - connectionpool.py-connectionpool:329 - WARNING: Connection pool is full, discarding connection: us-api.i.posthog.com. Connection pool size: 10
2024-07-16 11:36:20,863 -<PHONE_NUMBER>6 - connectionpool.py-connectionpool:329 - WARNING: Connection pool is full, discarding connection: us-api.i.posthog.com. Connection pool size: 10
2024-07-16 11:36:34,903 -<PHONE_NUMBER> - manager.py-manager:282 - WARNING: Error in TokenCalcHandler.on_llm_start callback: KeyError('Could not automatically map gpt-4o to a tokeniser. Please use `tiktoken.get_encoding` to explicitly get the tokeniser you expect.')
2024-07-16 11:36:56,816 -<PHONE_NUMBER> - manager.py-manager:282 - WARNING: Error in TokenCalcHandler.on_llm_start callback: KeyError('Could not automatically map gpt-4o to a tokeniser. Please use `tiktoken.get_encoding` to explicitly get the tokeniser you expect.')

Relevant screenshots (optional)
No response

it works, but I see this in my terminal:
2024-07-25 10:57:23,822 -<PHONE_NUMBER> - manager.py-manager:282 - WARNING: Error in TokenCalcHandler.on_llm_start callback: KeyError('Could not automatically map gpt-4o-mini-2024-07-18 to a tokeniser. Please use `tiktoken.get_encoding` to explicitly get the tokeniser you expect.')
2024-07-25 10:57:24,797 -<PHONE_NUMBER>8 - connectionpool.py-connectionpool:329 - WARNING: Connection pool is full, discarding connection: us-api.i.posthog.com. Connection pool size: 10
2024-07-25 10:57:24,814 -<PHONE_NUMBER>2 - connectionpool.py-connectionpool:329 - WARNING: Connection pool is full, discarding connection: us-api.i.posthog.com. Connection pool size: 10
2024-07-25 10:57:24,814 -<PHONE_NUMBER>2 - connectionpool.py-connectionpool:329 - WARNING: Connection pool is full, discarding connection: us-api.i.posthog.com. Connection pool size: 10
2024-07-25 10:57:44,789 -<PHONE_NUMBER> - manager.py-manager:282 - WARNING: Error in TokenCalcHandler.on_llm_start callback: KeyError('Could not automatically map gpt-4o-mini-2024-07-18 to a tokeniser. Please use `tiktoken.get_encoding` to explicitly get the tokeniser you expect.')
2024-07-25 10:58:17,083 -<PHONE_NUMBER> - manager.py-manager:282 - WARNING: Error in TokenCalcHandler.on_llm_start callback: KeyError('Could not automatically map gpt-4o-mini-2024-07-18 to a tokeniser. Please use `tiktoken.get_encoding` to explicitly get the tokeniser you expect.')
Starting PraisonAI...

Same here, at the top of my .txt file:
Starting PraisonAI...
 [DEBUG]: == Working Agent: Recipe Researcher
 [INFO]: == Starting Task: Search for classic recipes specifically geared towards cooking flank steak on a charcoal BBQ. Compile a list of the best recipes available online.
 [DEBUG]: == [Recipe Researcher] Task output: Here is a curated list of classic recipes for cooking flank steak on a charcoal BBQ, complete with links and brief descriptions for each recipe:

then I see content, then I see DEBUG, INFO
then I see content, then I see DEBUG, INFO
then the final content looks OK


Added gzip size badge

Just a badge to show an updated gzip size of the minified bundle. (sorry for the double commit, please squash them)

Coverage remained the same at 100.0% when pulling 50459e23962ef018ebce8c31ecd66ecd1f9da61a on FezVrasta:patch-1 into 4a9aefcdff603b48867fbb809d3bbf985b2d3293 on developit:master.


Get Category Ratings on Review Detail Screen if they Exist

https://github.com/mikelor/FlyWhy/blob/ecbc365c5ca29686c817c01356eb415e02070f1b/getReviews.py#L204-L204

The Review Details Screen will sometimes display a subset of categories that the user has rated on a scale of 0 to 5. This information could be helpful in understanding specific areas for improvement.
Add the functionality to get the categorical ratings if they exist. See below for an example


Allow saving and retriving circuit with initialize instruction from qpy file

Summary
This PR fixes #11158 . It adds the necessary conditions and cases for treating the StatePreparation instruction when reading from a qpy file.
Details and comments
When loading a circuit that had an initialize instruction (with an index or a label as parameter) from a qpy file, a QiskitError was thrown because these cases were not treated when the circuit was rebuilt, more specifically in the read instruction function.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

7 of 7 (100.0%)  changed or added relevant lines in 1 file are covered.
3 unchanged lines in 1 file lost coverage.
Overall coverage increased (+0.02%) to 86.948%

Files with Coverage Reduction
New Missed Lines
%

crates/qasm2/src/lex.rs
3
91.16%

Totals

Change from base Build<PHONE_NUMBER>:
0.02%

Covered Lines:
74356

Relevant Lines:
85518

💛  - Coveralls


Drug response data representation approaches

Description
As a bioinformatician, I was to look for different representation for drug response and treatment data.
Acceptance criteria

[ ] find representation approaches
[ ] agreed upon a representation approach

https://docs.google.com/document/d/1oqET6Gc3AiFqxo9Vpni2l7jph71FcWV_aPriWkoY75A/edit?usp=sharing


add suave-playground as example

Closing as we are going to use this repo as a directory of small Suapp patterns. We are preparing another place for this kind of full fledged examples.


Updating outdated ActionBarActivity

ActionBarActivity is deprecated , and hence has been replaced with AppCompatActivity.

@FleetAdmiral Thanks for the contribution!
You forgot the import that goes along with your code change.
Line #6 import android.support.v7.app.ActionBarActivity; --> import android.support.v7.app.AppCompatActivity;

@akoscz  Whoops , will fix that .

Thanks!


Implement sending files using CDC (Content-Delivery-Chanking) [feature request]

Hello guys!
Its just feature request. I think will be nice to add CDC support for tool like that.
I post it here just in case someone has time to add support of it in wormhole.
Here some rust lib which can help with it: https://github.com/rustic-rs/cdc

What's the use-case for this?
In any event, it's very unlikely the server repository (this one) is the correct place to suggest such a feature; the content is encrypted by clients, so one of the client implementations would be the right place to do some sort of hashing like this


Support workspace/executeCommand LSP request

Introduces support for the workspace/executeCommand which allows us to call into the language server, execute a provided command, and return the result to the caller.

@dhuebner Could be possible, but I imagine simply restarting the language server by restarting the language-client is a better idea, as it would restart the process. That can be done from the extension.

by restarting the language-client is a better idea, as it would restart the process. That can be done from the extension.

I'm thinking about a command like "Developer: Restart TS server",  it is useful when e.g. working on workspace manager like changing excluded folders from indexing


Limit results to specific place types

Hi!
First, thank you for sharing your code. I am using it for a quite big project and I have to filter the places results to a specific type (like regions, geocode, establishements...) see : https://developers.google.com/places/supported_types
I don't see any way to do it actually. It looks like I have to pass a parameter 'types' in the URL but I do not find the URL inside your code.
May someone give me a little help on that?
Best

Actually, we didn't limit the results from google places. It will retrieve the places from google map based on user input. If you want to filter according to types, you have to take the place object.
May be you have an idea to filter the places by types.
Inside of place object you have 3 properties. They are geocode, address, regions.

Ok, thanks for you quick reply. Indeed, I didn't realise you were using Google Maps API instead of Places's.


--bind-srt-encoding or --bind-srt-language flags cause recursive array join error

ran transcode-video with the following arguments:
transcode-video --add-srt /Volumes/BitBucket/batch-mkv/Subtitles/Paper\ Towns.srt --bind-srt-language eng --bind-srt-encoding UTF-8 --mp4 /Volumes/BitBucket/MakeMKV\ Destination/Paper\ Towns.mkv
I get an error returned:
/usr/bin/transcode-video: recursive array join
If I remove either --bind-srt-language OR --bind-srt-encoding but leave the other flag in, I still get the error. Removing both flags causes the error to not occur and the transcoding completes successfully.

@bpharriss OK, I'll see if I can reproduce with my test files after dinner. I'll also inspect the code to see how that particular error message might happen.
Stay tuned...

@bpharriss BTW, can you give me some more information like what OS platform and which version of HandBrake you're using? Thanks.

HandBrake is 0.10.2. I'm running on a 10.9.5 system. All was working correctly, then I decided to "brew upgrade" and "gem update" and then the issue started.

@bpharriss OK, this may be caused by a patch I took from @arikalish then:
https://github.com/donmelton/video_transcoding/pull/25
But my code before his patch was clearly wrong. So it's possible the change just exposed some other bug.

In all truth, I've stopped pulling in .srts manually lately and instead started remuxing the source mkvs with the srt and DVD-style subs converted from the PGS subs (converting my Bluray library) so I haven't used the command line srt options and wouldn't have come across this since then.
It's definitely possible that my patch borked something but it was super-simple.

@arikalish Yeah, super simple.  Probably some cut and paste error. :) My theory is that your fix simply exposed another one of my bugs.

They're everyone's bugs now :)

@arikalish I'm just generous that way. :)

@bpharriss @arikalish Sonuvagun! Rolling back the change "fixes" the problem. However, I suspect this is because the offset code never worked correctly. Ugh.
Still tinkering with it...

@bpharriss an easy way to check if it ever worked might be to give v.27 a bogus encoding (say, EBDAC or maybe something a little less esoteric...) and see if it totally munges the output.

@arikalish I found the bug. There was a typo in your patch. And we both missed it. :)
It should have changed "language" to "offset," not "offsets." So... not plural. :)
I'll fix it shortly.

Damn... my first accepted pull request and it's got a bug... embarrassing. :)

@arikalish Hey, I missed it too. And I screwed up the regression test. :)
@bpharriss I should have an updated Gem out later tonight after some more testing (and after dinner). My apologies.

Good catch. And get back to the important stuff - that wine isn't going to sip itself ;)

@bpharriss Damn right! :)

@bpharriss and @arikalish OK, the fix is in and pushed. Just gem update to get version 0.3.1.


[Do not merge] [PoC] Changes generated by publish script

Generated by https://github.com/kubernetes/test-infra/pull/2077
@sttts @deads2k @lavalamp

I like this a lot.


Fix non-existing stubs

The fixed ones are taken from here: https://docs.neuralmagic.com/sparsezoo/source/models.html

I have just noticed that SparseZoo state_dicts are not compatible with the expected state_dicts for torchvision models, so runs with these stubs will crash with RuntimeError: Error(s) in loading state_dict for ResNet.
torchvision models expect something like this:

conv1.weight
layer1.0.conv1.weight
fc.weight

and SparseZoo models have something like this:

input.conv.weight
sections.0.0.conv1.weight
classifier.fc.weight


cadCAD.tools.easy_run is unable to handle Config Parameters on which the values are Sequence like

Potential fix:
refactor select_config_M_dict so that the dict values are callables rather than values

@danlessa @emanuellima1  I think this might be a better patch for the parameters issue. This way you don't have to transform the parameter to a different data type it can stay as is.  I think because it is parameter assignment for the setup, this would be pretty performant.
What do you think? What do we need to do to land this ? I'm happy to take that up.


PjArray>>reverse alters the object, whereas the Smalltalk implementation returns a copy

I have to say that the method name "reverse" seems to imply change of the receiver.
https://www.gnu.org/software/smalltalk/manual-base/gst-base.html#Array confirms that reverse expects to make a copy. grrr... legacy.
We could add another method: #reversed ?

We can't change #reverse, because it is standard Javascript and it would affect all JS code in the application, including JS libraries. In Pharo, #reverse and #reversed do the same thing (return a reversed copy). So yes, we'll add #reversed, and document that #reverse doesn't work the same as Smalltalk. We should also define #reversed for strings.

We can't change #reverse, because it is standard Javascript and it would affect all JS code in the application, including JS libraries. In Pharo, #reverse and #reversed do the same thing (return a reversed copy). So yes, we'll add #reversed, and document that #reverse doesn't work the same as Smalltalk. We should also define #reversed for strings.

Fixed, although we discovered a new obscure bug in the process, which will be logged against this issue

Fixed, although we discovered a new obscure bug in the process, which will be logged against this issue


Add support for -Zbuild-std to cargo fetch

This allows downloading the dependencies for libstd in advance, which
can be useful in e.g. sandboxed build environments.
Fixes https://github.com/rust-lang/wg-cargo-std-aware/issues/22.
r? @ehuss

I'd like to test that build -Zbuild-std doesn't download anything if you've previously run fetch, but that takes a very long time to execute because it's building the whole standard library ... is there a way to cut it off after I see the first "Building" line maybe?

Ah, I think testsuite/standard_lib.rs is what I want :)

Following up on this, I continue to believe that the hardcoding of "test" should be shared between cargo build and cargo fetch one way or another. I think that the functionality can be shared between the two code paths.

@rustbot ready

I tried to address Alex's concerns.

Could you squash some old commits? It may confuse people when tracing the history. Thanks!

Looks good to go. Thanks!
@bors r+

:pushpin: Commit 55b680c1942898f83bb0eb3e7eb0c36e5ef94834 has been approved by weihanglo

:hourglass: Testing commit 55b680c1942898f83bb0eb3e7eb0c36e5ef94834 with merge a44758ac805600edbb6ba51e7e6fb81a6077c0cd...

:sunny: Test successful - checks-actions
Approved by: weihanglo
Pushing a44758ac805600edbb6ba51e7e6fb81a6077c0cd to master...


detection datasets are hard to download

It is not easy to download the detection datasets smoothly. Can you put the dataset on the BaiduYun for easy downloading?
Thanks.

Xunlei (Thunder Network) downloader is ok.


Failed Loading Environment error after rebooting manager node

Bug description
After rebooting the manager node in a 1 manager, 1 worker docker swarm setup, portainer will boot the service, but attempting to load the primary environment will fail with an error:
Failed loading environment
Unable to find an agent on any manager node

This error happens both from the worker and manager node instances of the portainer web interface.
Expected behavior
After a reboot, portainer boots normally and allows loading the environment.
Portainer Logs
Provide the logs of your Portainer container or Service.
Steps to reproduce the issue:

Setup a docker swarm with 1 manager, 1 worker. The manager is Ubuntu Server in my case, while the worker is Pop OS!
Verify that portainer is working normally by visiting the web interface
Reboot the manager node (system reboot)
Visit web interface again, attempt clicking on primary environment
See error

Additional context
Discord thread has additional context if needed.

@joshbuker
Thank you for logging this request that was initially posted in our Discord channel.  I am going to provide further updates here with my testing and forward to Product for review.
Thanks!

Per our Discord conversation, using sudo systemctl restart docker on the worker node is confirmed as a workaround for the issue. After rebooting the service, the error goes away and the GUI can be accessed again - without any changes on the manager node.

DOCKER SWARM REBOOT TESTING:
(1) Manager, (1+) Worker
[1] Install Swarm Portainer Server on Manager:
curl -L https://downloads.portainer.io/ee2-16/portainer-agent-stack.yml -o portainer-agent-stack.yml
docker stack deploy -c portainer-agent-stack.yml portainer
[2] Reboot Manager Node
[3] Navigate UI
[4] Wait 2 Minutes
https://user-images.githubusercontent.com/20426210/210469483-0e6c40c9-3325-4601-8fcf-3c11100d9b33.mov
[5] Toast appears:
Failed loading environment
Unable to find an agent on any manager node

[6] Home >> Environment:primary >> Node indicator is no longer appearing

WORKAROUND:
[1] sudo systemctl restart docker on worker node
[2] Navigate UI on Manager
[3] Wait 1 minute.
[4] Home >> Environment:primary >> Node indicator is appearing with node counts

[5] Toast no longer appears
Note:  this workaround also works on multiple worker node clusters.  You only need to restart docker on one worker node.
ADDITIONAL TESTING:
(2) Manager, (1) Worker
Notes:  Issue does not occur.
TODO:
Need to determine if this is Docker Swarm behavior or a bug.  Updates to follow.
Thanks!

Update:
Upon further review here:  https://docs.docker.com/engine/swarm/admin_guide/#force-the-swarm-to-rebalance
[1] Reboot Manager Node
[2] Navigate UI
[3] Wait 2 Minutes
[4] Toast appears:
Failed loading environment
Unable to find an agent on any manager node

[5] Home >> Environment:primary >> Node indicator is no longer appearing
WORKAROUND:
[1] sudo docker service update portainer_agent on Manager
[2] Navigate UI on Manager
[3] Wait 1 minute.
[4] Home >> Environment:primary >> Node indicator is appearing with node counts
[5] Toast no longer appears
Thanks!

Update:
Upon further investigation, I have found a better workaround.
Run the following on the Manager node (image name may need to be edited):
sudo docker service update --image portainer/agent:2.16.2 --force portainer_agent
Thanks!

same problem, the workaround working... but a really annoying that this issue are exist more than one year...

Per our Discord conversation, using sudo systemctl restart docker on the worker node is confirmed as a workaround for the issue. After rebooting the service, the error goes away and the GUI can be accessed again - without any changes on the manager node.

This resolved my issue

Hi,
I'm using portainer for 4 years in production swarm env. I have always seen this issue and the only workaround is to restart portainer_agent on all nodes ... quite annoying.
I think portainer doesnt support well network latency / reconnections and also I can't use portainer in a multicloud swarm env with 5ms latency because the agent node timeout half the time...
I use the latest version 2.19.4
So now I restart portainer in a cronjob at 23:00pm every day to limit this issue ...
Please, give us a fix for that
thanks

This has been an issue for years now.  Has any progress been made?  :/
We have written a cron job that looks fore the "unable to redirect request to a manager node: no manager node found" then kicks off a service update, but it is not really a great solution...

we are on the same boat, this happen in every environment that we have (Portainer BE customer) after we reboot any node in a swarm cluster, not necessairly a manager node. This is quite frustrating and we have it since the beginning of our experience with Portainer.
We tried to configure a systemd unit that restart the portainer_agent service on one manager for each swarm cluster 40 minutes after the node booted up (that's pretty much the time it takes to update one of our clusters plus 20 minutes of margin) but is not a real solution. For example if we have to restart any worker node for an unplanned maintenance then we have to remember also to manually restart the portainer_agent service for that swarm cluster.
@tamarahenson  Any plan to fix this? The workaround is not a real solution because we have different reboot/update policies in our swarm clusters. If that's not on roadmap we will open a support case on the customer portal because we are having many complaints from out end users that are perceiving Portainer as unstable and broken every time they have this errors. I know that the workaround is a quick fix but at that point the user has already experienced the error.

Happened again today after restarting two worker nodes (Azure VMs).
1st VM took a while and did not affect anything.
2nd VM had a fast reboot and throwed the same "portainer unable to find an agent on any manager node" message in Portainer web.
Fixed it with: docker service update --image portainer/agent:2.xx.x --force portainer_agent

I am experiencing the same problem after restarting my entire Swarm cluster. Portainer and its agents do not start properly, resulting in the following error message:
Unable to find an agent on any manager node

I'm in portainer v1.19.5 (the LTS version).
Running a docker service update temporarily fixes the problem, but the issue reoccurs after each reboot.
This is an ongoing issue. Can we have a permanent fix, please?

Make sure the agent container running on a manager is exactly called portainer_agent. I just wasted alot of time debugging this because I had renamed it.

what if it's deployed through docker swarm? Following this guide: https://docs.portainer.io/start/install-ce/server/swarm/linux, the https://downloads.portainer.io/ce2-21/portainer-agent-stack.yml creates portainer_agent.randomstring names on nodes.

Nothing from the above helped me connect to agents. Changing to access through socket, i.e. adding:
volumes:
      - /var/run/docker.sock:/var/run/docker.sock

to the portainer in portainer-agent-stack did the trick, at least for now.

I am in the same state as @rkj.  It is a swarm deployment using the same template.

what if it's deployed through docker swarm? Following this guide: https://docs.portainer.io/start/install-ce/server/swarm/linux, the https://downloads.portainer.io/ce2-21/portainer-agent-stack.yml creates portainer_agent.randomstring names on nodes.

I use the same compose file and and also use docker swarms, so I guess the random characters at the end is fine?
In my case it was that I created a duplicate of the agent service in that compose.yml, where I changed where the volumes folder was mapped because I have it elsewhere for persistence sake, and so I called this new service agent_persistent. Coincidentally all my managers has this persistent mapping so they need this version of the service. And this didnt work.
Then I finally tried restoring the back the old name, and instead I made a duplicate of the service with regular volume mapping, so non-managers get that, and it works.
TLDR:
Doesnt work ("cannot find a manager on any node"):
agent_persistent:
  image: portainer/agent:2.21.0
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - /persistent/docker/volumes:/var/lib/docker/volumes
  networks:
    - agent_network
  deploy:
    mode: global
    placement:
      constraints:
        node.role == manager

agent:
  image: portainer/agent:2.21.0
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - /var/lib/docker/volumes:/var/lib/docker/volumes
  networks:
    - agent_network
  deploy:
    mode: global
    placement:
      constraints:
        node.role != manager

Works:
agent:
  image: portainer/agent:2.21.0
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - /persistent/docker/volumes:/var/lib/docker/volumes
  networks:
    - agent_network
  deploy:
    mode: global
    placement:
      constraints:
        node.role == manager

agent_worker:
  image: portainer/agent:2.21.0
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - /var/lib/docker/volumes:/var/lib/docker/volumes
  networks:
    - agent_network
  deploy:
    mode: global
    placement:
      constraints:
        node.role != manager

Ok, this is pretty silly, the agent is missing 9001 port exposed. Added that and it seems to work now.

@rkj , Are we having about the same issue?  It only breaks after a reboot, and not during initial deployment?

Maybe it's different.
It used to work, but then my server rebooted two nights ago and it stopped working which brought me to this bug. Then I realized my portainer was still running on single node instead of swarm, so I moved it there and it didn't help so I'm a bit lost. In either case exposing the ports does fix the issue for me, which I guess is odd as the portainer and portainer_agents should be on same network and not have to expose ports to the hosts.


Fix extra newline in class member snippet completions

Fixes #46609.
For now there will always be trailing semicolons at the end of property or signature declarations, but I'm working on fixing that in another PR.

@typescript-bot cherry-pick this to release-4.5


Make AlignedVec::change_capacity method public

AlignedVec::change_capacity would be useful to me at least, for 2 reasons:

As an optimization when my own code has already determined that capacity needs to grow and by how much.
To implement a different growth strategy from exponential growth.

I don't know how you feel about this. If you think public API is large enough already, please feel free to reject this PR.
Builds on PR #359 as touches the same code. Please merge #359 first.
PS I'll get back onto #353 in a bit. Just wanted to get all the more bitty changes in first.

Now rebased on master.

LGTM, thanks for the PR!


Add my blog into showcase

The URL of my blog is: http://wendy-shao.ghost.io/

first you must to use the theme D:


Extremely slow to render

I havent figured out why yet, but after adding this component and looking to display it in render() , it takes like 10 seconds or so before it surfaces. If you have encountered this before appreciate if u can let me know why. ill keep looking at this in the mean time when i get a chance.

@ajonno
Please give me more info:
What OS and Version are you using?
Have you enabled Debug JS Remotely?
Only the dialog very slow?

Same situation here. Quite an old android tablet, but much heavier things such as mapbox run great on it

Really want to know the fps for Native and JS thread when you open the Dialog

how do you get that info? happy to run that for you

You can access the developer menu by shaking your device or by selecting "Shake Gesture"
https://facebook.github.io/react-native/docs/debugging.html

Then you can select Show Perf Monitor

Both running around 60fps

Do you using console.log or enabled remote debugging?

console.log

Try remote console.log it may affect performance on RN
On Thu, 29 Mar 2018 at 2:06 AM, fmelp<EMAIL_ADDRESS>wrote:

console.log
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/jacklam718/react-native-popup-dialog/issues/15#issuecomment-376981533,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AFPXbq27VGG1FNG2tGRC7TgFc_hwwklRks5ti9FDgaJpZM4LE7-A
.

@fmelp Does it work?

 Had to use something else cause these tablets i need to use for the job are total whack. Thanks so much!!

Okay

I have the same issue! When I use JS Debugging it takes a looong seconds to show modal, if I disable it, it appear instantly !

animations does not use nativeDriver in this library. I believe it's a the reason of speed bug.

@Clowning FYI:
https://github.com/facebook/react-native/issues/5632
https://github.com/facebook/react-native/issues/10559

I've add useNativeDriver and set it to true by default.
you can use latest v0.13.46

Hi @jacklam718, It's much better with useNativeDriver. Thanks.

@punksta  thanks for letting me know