Door sensor?

Hi!
I'm working on a project where I try to integrate a door sensor with google assistant. I would like to be able to ask the assistant "is the living room door open" or closed for example.
I'm aware that the devices does not really matter and I can choose whatever device type. But I'm having a hard time finding good traits for this type of device. To clarify the door sensor can only have two values, 1 or 0 open or closed.
What kind of traits do you recommend for this type of sensor?
I have tried both the toggles and modes traits but neither of them worked as expected. I couldn't get them to return if the door was open or closed. I tried with lots of different traits and modes.

you can make a custom pcb and buy a sensor for it depending on what you want and what you want to spend:
you can buy a cheap ldr but this only works during the day
you can buy a cheap infrared sensor works all the time
you can buy a cheap distance sensor (this one is little bit more expensive still not above few bucks but this gives you more chance to expand
btw not buying a cheap easy custom pcb is also possible there are alot of choices depending on what you want to do with it
you can also buy something like a ESP8266 and expand it to much more than only a door sensor for everything together u should not pay more than 10 bucks (and that is the expensive ESP version of it)

The best trait I'd recommend would be a toggle, or maybe OnOff. It's a bit weird to ask "is my door on", although there's no Sensor trait in the docs.

The best trait I'd recommend would be a toggle, or maybe OnOff. It's a bit weird to ask "is my door on", although there's no Sensor trait in the docs.

We did tried the toggle trait, but with no success to get it to understand a Query but only Execute. I assume the Query is what we want to do if we just want the status of something? The syncing also seems to work fine when we connect the device for the first time.

What toggle would you be using? Looking at the list of available toggles, I don't see one that may be more useful.

What toggle would you be using? Looking at the list of available toggles, I don't see one that may be more useful.

We did tried different toggles. For example we just wanted to try if toogle name "Away" would work for a open door, and Hold for closed door. Just for testing we then asked the assistant "Is the door away?" And the expected results would be that the assistant fired our Query function but it did not. It did understand something in the way of "Turn the door away" and fired our Execute function but since we are talking about a sensor we cant execute anything on it, only read from it.

I tried out a similar query and I was able to get the expected result.
"Is quiet on the kitchen vacuum"

Kitchen vacuum quiet is on

I imagine that a question of "Is away on the door" would work.

+1 device type sensor is good idea  like :

door sensor : are there doors / windows open? yes the window of the kitchen
temperature sensor : what is the temperature in the kitchen? It's 21°C

I tried out a similar query and I was able to get the expected result.
"Is quiet on the kitchen vacuum"

Kitchen vacuum quiet is on

I imagine that a question of "Is away on the door" would work.

Mhmm, yes maybe it would work even though it's really weird to ask anything like that. Are there any plans for releasing something in the near future for making something like this more easy and natural?

+1 device type sensor is good idea like :

door sensor : are there doors / windows open? yes the window of the kitchen
temperature sensor : what is the temperature in the kitchen? It's 21°C

Yes it would be really good if they implemented something like this.

I can't comment on future releases, but I will pass on the suggestion of a sensor.

Please vote up my original issue on this too! There's plenty of us looking for a proper open/close trait right now!
https://github.com/actions-on-google/smart-home-nodejs/issues/99

@Fleker Is there any news/updates on this - is there planse to add sensor traits?

Someone has accumulated a lot of the rumored / partially implemented stuff in the Google API here. No word yet on release date / finalization / documentation of any of these though.

As this is not directly related to the sample, I've copied this request over to the public issue tracker.
https://issuetracker.google.com/issues/136103089


Improve article 2012.03618 - \hrule

Exact location of issue
2012.03618 Algorithm 1 Pseudocode contains \hrule that is not displayed correctly
Problem details
\hrule should produce a horizontal rule beneath line 3 of the pseudocode but it is displayed to the right
Desktop (please complete the following information)

OS: Ubuntu
Browser Firefox

More problems before we get to \hrule, I will close here as duplicate to #136 until we surface our way above Fatal territory again.


importing uproot package with standalone

•	Nuitka version, full Python version, flavor, OS, etc. as output by this command.
python -m nuitka –version
1.0.7
Commercial: None
Python: 3.8.8 (default, Apr 13 2021, 15:08:03) [MSC v.1916 64 bit (AMD64)]
Flavor: Anaconda Python
Executable: C:\path\to\env\Scripts\python.exe
OS: Windows
Arch: x86_64
WindowsRelease: 10

•	How did you install Nuitka and Python
Python installed via anaconda.  Virtual environment setup and command “python -m pip install ” used for installing packages.
•	The specific PyPI names and versions
uproot==4.3.5
•	Also supply a Short, Self Contained, Correct, Example
import uproot
•	Provide in your issue the Nuitka options used
python -m nuitka  --follow-imports --enable-plugin=numpy --standalone  test.py
Explanation:
I am trying to make a single file executable with Nuitka and am running into problems with the uproot package.  I’ve been able to successfully make an executable with the code when not including the portions that import uproot, but it fails when including that package.  I usually put input(“some text”) statements around the code example and it never makes it to the input(“some text”) statement after the import statement.
A couple comments from playing around with the uproot source code trying to track down the issue.  Uproot has several dependencies, of which only numpy is a hard requirement.  One of the dependencies isn’t available on windows (xrootd) and the portions of the uproot source code containing code related to that package seem to be causing issues (if I comment out said code, the executable will make it further into the source code but crash again when hitting another piece of code related to that package or perhaps code related to the other optional dependencies).
Uproot works perfectly fine on windows when using it in a script, so I’m wondering if there is a way to get it to work when using Nuitka as well.

You are not using the latest stable release, not the previous last hotfix.

Sorry about that.  I've updated to 1.1.2 and retried with no success.
I also re-installed uproot to avoid any changes I made and to get the original warnings that come up:
Nuitka-Inclusion:WARNING: Cannot find distribution 'XRootD' at
Nuitka-Inclusion:WARNING: 'C:\env\lib\site-packages\uproot\extras.py:135', expect potential run time
Nuitka-Inclusion:WARNING: problem, unless this unused code.
Nuitka-Inclusion:WARNING: Cannot find distribution 'pyxrootd' at
Nuitka-Inclusion:WARNING: 'C:env\lib\site-packages\uproot\extras.py:139', expect potential run time
Nuitka-Inclusion:WARNING: problem, unless this unused code.

@ty-borg interesting, what do you expect from me now?

Closing for lack of feedback.


Bug Report: Crash

(Windows)

I'm working on revamping BGSprite so rn it crashes, but I'll have it fixed soon

I'm working on revamping BGSprite so rn it crashes, but I'll have it fixed soon

ok


Dashboard Display

I must say you have built a high level inventory management system.
In the future will you include POS with barcode reader enabled and a dashboard showing all the locations with stock movement?

We will try our best to add these features in the future. Thank you for your support.

ModernWms is currently gathering requirements for the next version and would like to ask for your input. Are there any specific features you would like to see included? Please share your suggestions and they will be added to our pool of requirements for consideration.

GS-1 code system and operations reader with barcode scanner


fix: use Time class instead of Date class

Previously I made a mistake by using the Date class to produce a time string, resulting in a persistent 00:00 timing.
Using Time class now to solve this.

@Vic-L Thanks for the contribution! ❤ 💪


Runtime: Fix unitFormatter with numberFormatter

JSON.stringify omits functions, so the generated runtimeKey
did not depend on the value of the numberFormatter option,
causing different unitFormatters to have an identical runtimeKey.
Fixes #704

Thanks @nkovacs!! Great catch!
I left a comment above. What do you think? Just let me know if you have any questions about it...

Pull request for compiler is up: https://github.com/globalizejs/globalize-compiler/pull/31
and I've removed the hack in core-runtime.js.

I've rebased on master and uncommented the compiler test. Travis fails because of the missing compiler change.

Ok thanks

@nkovacs, other formatters (e.g., date, relative time) also include a number formatter in their runtime properties. We need to understand why this happens with unit formatter, but not with the other ones...

No other formatter accepts a formatter as an option, which should affect the runtimeKey.

True! Thanks

Thanks @nkovacs!

Pull request for compiler is up: globalizejs/globalize-compiler#31
and I've removed the hack in core-runtime.js.

Instead of depending on globalize-compiler to include the runtimeKey info, I've update the runtime function to do it.


PipelineRollout not recreating Pipeline

Describe the bug
Numaplane reconciliation does not seem to happen after deleting and restoring a PipelineRollout.
To Reproduce
Steps to reproduce the behavior:
Via ArgoCD:

delete an existing PipelineRollout (you may need to remove the finalizer manually);
sync PipelineRollout again;
the reconciliation seems not to be triggered: nothing in the Numaplane logs (level set to Info) nor Pipeline child is deployed;
restarting the Numaplane controller will reconcile the PipelineRollout.

Expected behavior
A Pipeline should be created after applying a PipelineRollout spec to the cluster.
Environment (please complete the following information):

Numaplane version of July 11th

NOTE:
Make sure this bug does not also happen for ISBServiceRollout.

Message from the maintainers:
Impacted by this bug? Give it a 👍. We often sort issues this way to know what to prioritize.

I wasn't able to reproduce this through adding PipelineRollout, deleting, re-adding. My thought is that based on the fact that you wrote "you may need to remove the finalizer manually", it has something to do with some scenario in which you'd have to remove the finalizer yourself.
Since the log lines were on INFO, we don't know for sure if the subsequent reconciliation didn't happen, or if it did happen and it simply didn't create a new Pipeline for whatever reason and thus didn't log anything.
One thing to note is that if a reconciliation doesn't occur at all, it would be because the queue lock on that PipelineRollout for some reason didn't get released here.  I guess we need to make sure that that can't happen (like no indefinite blocking).

I was able to reproduce the issue. At the first deletion after the Numaplane Controller is restarted, the issue is not present. However, deleting again the PipelineRollout will cause the issue. I enabled debug logs and attached is a file describing the timeline of operations and relative logs.
Debug logs and timeline.txt

This is caused by the rate limiting of the queue. It's using an exponential backoff algorithm, and that's causing it to get delayed more and more with all of the subsequent requests coming in. For now, I will change it to not use rate limiting when Reconcile() is called, and we can revisit that issue later.


scene.pause(this.scene.key) called at the end of create() is not working.

Hi!
I was trying to run my GameScene and then immediately pause it and run another scene on top of it, using run(), like this:
this.scene.pause(this.scene.key);
this.scene.run("StartLevelScene");
pause() and run() were called at the end of create() method of the GameScene.
New scene has poped up on top of GameScene, but the GameScene update() was still running.
Using sleep() caused the GameScene to go black (no rendering) but the update() was being called.
When the pause() call was changed to this (thanks @Antriel ):
this.scene.manager.queueOp('pause', this.scene.key);
everything started to work fine.
Have a nice day!

Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

Thank you for submitting this issue. We have fixed this and the fix has been pushed to the master branch. It will be part of the next release. If you get time to build and test it for yourself we would appreciate that.


Prevent unsendable references from being sent

Context
It's currently possible to trick the system into sending references requests for any existing reference, even if it's already sent or if the application already enough references.
Changes proposed in this pull request
Use the new policy object from #3423 to restrict the controller.
Guidance to review
Does the logic make sense?
Link to Trello card
https://trello.com/c/9FgC13b6

@stevehook nice catch. I've made it use the policy logic instead. Because it's checked elsewhere already, we're now raising an exception if we encounter a unrequestable reference here. This saves us from having to pass in the flash.


how to mock onclick event to retrieve some coordinate?

I don't find any example of how to do this

Hi, could you be more specific about what method you would like to mock?
There are multiple objects with an addListener / addListenerOnce method.
I assume you're talking about google.maps.Map and have a setup similar to the example here: https://developers.google.com/maps/documentation/javascript/examples/event-click-latlng
Here's a possible way to test event handling assuming you do not have a global google.maps.Map instance (and create a fresh Map in your implementation that is not accessible from the outside).
The general idea is to intercept, enrich and finally store calls to addListener. Once captured, we can invoke the handlers whenever we want. The following test passes. Try to change the mouseEvent's returned lat/lng and see what happens.
import { initialize, Map as GoogleMap } from ".";

beforeEach(() => {
  initialize();
});

test("onClick with coordinates", () => {
  // Setup a mock map
  const mockMap = new GoogleMap(null);
  const events: { event: string; handler: Function }[] = [];
  const eventCleanup = jest.fn();

  mockMap.addListener.mockImplementation((event, handler) => {
    // Typeof google.maps.MapMouseEvent
    const mouseEvent = { latLng: { lat: () => 1, lng: () => 1 } };
    events.push({ event, handler: () => handler(mouseEvent) });
    return { remove: eventCleanup };
  });

  // Replace the map that will be created in the implementation with
  // our mock
  jest.spyOn(google.maps, "Map").mockReturnValue(mockMap);

  /* ---Implementation, maybe outside of the test--- */
  const map = new google.maps.Map(null);
  const listener = map.addListener(
    "click",
    (event: google.maps.MapMouseEvent) => {
      if (event.latLng.lat() > 1) throw new Error("No latLng");
    }
  );
  listener.remove();
  /* ---------------------------------------------- */

  // By now, the handlers have been registered
  expect(events).toHaveLength(1);
  expect(events[0].event).toBe("click");
  expect(() => events[0].handler()).not.toThrow(); // Invoke the handler
  expect(eventCleanup).toHaveBeenCalled();
});

Hi, thank you for your answer. Yes, that's what I try to do.
I would like to cover all my code with some tests. But google map is a huge challenge.
Your code works. My code contains google maps is look like this.
import {Circle, GoogleMap, Marker, useJsApiLoader,} from '@react-google-maps/api';
import {useEffect, useState} from 'react';
import ClientSideRender from '../client-side-render';

const containerStyle = {
  width: '100%',
  height: '400px',
};

const mitraisJogjaCoordinate = {
  lat: -7.8006443,
  lng:<PHONE_NUMBER>,
};

export default function OfficeMap({onCoordinateChange, radius, latitude, longitude, isEdit}) {
  // noinspection JSUnresolvedVariable
  const {isLoaded} = useJsApiLoader({
    id: 'google-map-script',
    googleMapsApiKey: process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY,
  });
  const [marker, setMarker] = useState({});

  const onMapClick = ({latLng}) => {
    setMarkerCoordinate(latLng);
  };

  const onCircleDragEnd = ({latLng}) => {
    setMarkerCoordinate(latLng);
  };

  const setMarkerCoordinate = (latLng) => {
    setMarker({
      position: {
        lat: latLng.lat(),
        lng: latLng.lng(),
      },
    });
    onCoordinateChange({latitude: latLng.lat(), longitude: latLng.lng()});
  };

  useEffect(() => {
    if (latitude && longitude) {
      setMarker({
        position: {
          lat: latitude,
          lng: longitude,
        },
      });
      onCoordinateChange({latitude, longitude});
    }
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, [])

  return (
    <ClientSideRender>
      {!isLoaded &&
Loading...
}
      {isLoaded && (
        <GoogleMap
          data-testid="google-map"
          mapContainerStyle={containerStyle}
          center={isEdit ? {lat: latitude, lng: longitude} : mitraisJogjaCoordinate}
          zoom={18}
          onClick={onMapClick}>
          {/* Child components, such as markers, info windows, etc. */}

          {marker && (

              <Marker key={marker.id} position={marker.position}/>
              <Circle
                onDragEnd={onCircleDragEnd}
                center={marker.position}
                radius={radius}

                options={{
                  strokeColor: '#4361EE',
                  strokeOpacity: 0.8,
                  strokeWeight: 1,
                  fillColor: '#409CFF',
                  fillOpacity: 0.35,
                  draggable: true,
                }}
              />

          )}
        </GoogleMap>
      )}
    </ClientSideRender>
  );
}

when I use the test code above, some lines are covered.
/* eslint-disable testing-library/no-unnecessary-act */
// noinspection JSCheckFunctionSignatures

import {initialize} from "@googlemaps/jest-mocks";
import {render} from "@testing-library/react";
import {GoogleMap} from "@react-google-maps/api";

beforeEach(() => {
  initialize();
});

it('should render office map', async () => {
  // Setup a mock map
  // const mockMap = new GoogleMap(null);
  const mockMap = new google.maps.Map(null);    // I changed only this line
  const events = [];
  const eventCleanup = jest.fn();

  mockMap.addListener.mockImplementation((event, handler) => {
    // Typeof google.maps.MapMouseEvent
    const mouseEvent = { latLng: { lat: () => 1, lng: () => 1 } };
    events.push({ event, handler: () => handler(mouseEvent) });
    return { remove: eventCleanup };
  });

  // Replace the map that will be created in the implementation with
  // our mock
  jest.spyOn(google.maps, "Map").mockReturnValue(mockMap);

  /* ---Implementation, maybe outside of the test--- */
  const map = new google.maps.Map(null);
  const listener = map.addListener(
    "click",
    (event) => {
      if (event.latLng.lat() > 1) throw new Error("No latLng");
    }
  );
  listener.remove();
  /* ---------------------------------------------- */

  // By now, the handlers have been registered
  expect(events).toHaveLength(1);
  expect(events[0].event).toBe("click");
  expect(() => events[0].handler()).not.toThrow(); // Invoke the handler
  expect(eventCleanup).toHaveBeenCalled();
})

but there are some lines that are not covered.

I have tried adding render and mocking the onClick function.

but not work.

do you have any ideas on how to do this?

Hi, I reckon you're using the react-google-maps package. I'm not quite familiar with how it makes use of Google Maps internally so it's hard to suggest a testing recipe.
Anyway, a few things that could be helpful:

I wrote quite extensive integration tests for a geo game that uses Maps. Maybe something fits your usecase: Link
In you test file above, you should likely render your component, not the wrapper provided by react-google-maps (again, I don't know how the lib works but your import {GoogleMap} from "@react-google-maps/api" seems wrong)
I cannot figure out everything in your script, but implementation details like setState do not need to be tested explicitly. Instead, maybe try to fire a fake click even as described above and then check if a marker has been created. Either a google.maps.Marker or the Marker component provided by the wrapper


Necromancer's Shield

Description
I would like a necromancer styled shield that uses the same purple glowing effect found on the Mist Sword and Bow of Frey mod with stats on par with Mistlands content
Is the feature related to a problem?
Yes!!! The Problem is Iron Gate Studios lets us down with this god awful skin for what is not our end game shield... this is a travesty that only Cheb can solve!
Solutions
I think you should be able to just pull the prefab for the Carapace Buckler and inject the new design like you've done in the past.
Your Ideal Solution
Maybe use the shield to summon a new kind of Necro monster or a Bat whenever you successfully Parry if you have a Necromancy Skill above 70?

Nice Idea, but I would like like a book more:
-looks like necronomicon
-when you block there is a Magic shield in front of you that gets stronger, needs less Stamina with the Necromany Skill lvl
-from lvl 50 (?) onward the schield is full Body but the Stamina usage is higher


./jsoncpp_test: error while loading shared libraries: libjsoncpp.so.0: cannot open shared object file: No such file or directory

Hi I was trying to install jsoncpp and the build process always fails and I have no idea why.
Here is a gist:
https://gist.github.com/anonymous/2d1dba55d994a006f3f8
Update:
I was able to fix the problem above by running the cmake and make install commands myself after downloading the source. I thought I was out of the fire, but then the next next thing I tried to install ran into another error.
Here in the next gist:
https://gist.github.com/edc4b3a408bb9d28d69a
Why is linuxbrew having so much trouble compiling things? Am I doing something wrong?

I'm traveling until the new year. If you haven't yet found a workaround or solution for this issue, please bump this thread after then. Sorry for the delay.

Does this issue still affect you? Please reopen this issue if it does.


Exception: Request Error!: 404 : Not Found (/mstar/daily.py)

It appears the morningstar endpoint for collecting data is no longer available...
Exception: Request Error!: 404 : Not Found
Traceback (most recent call last)
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1997, in call
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1985, in wsgi_app
response = self.handle_exception(e)
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1540, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python3.5/dist-packages/flask/_compat.py", line 33, in reraise
raise value
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python3.5/dist-packages/flask/_compat.py", line 33, in reraise
raise value
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functionsrule.endpoint
File "/home/robinhood/robinhood-portfolio/app.py", line 90, in portfolio
bc = BackendClass(DATAFILE, USERFILE)
File "/home/robinhood/robinhood-portfolio/backend/backend.py", line 35, in init
self._validate_user_dict()
File "/home/robinhood/robinhood-portfolio/backend/backend.py", line 78, in _validate_user_dict
self.update_market_data(fresh_start=True)
File "/home/robinhood/robinhood-portfolio/backend/backend.py", line 104, in update_market_data
self._df_ord.symbol.unique(), min_date, max_date)
File "/home/robinhood/robinhood-portfolio/backend/market_data.py", line 71, in download_save_market_data
end_date.date())
File "/home/robinhood/robinhood-portfolio/backend/market_data.py", line 41, in _get_historical_prices
pf = web.DataReader(tickers, 'morningstar', start_date, end_date)
File "/usr/lib/python3.5/site-packages/pandas_datareader/data.py", line 391, in DataReader
session=session, interval="d").read()
File "/usr/lib/python3.5/site-packages/pandas_datareader/mstar/daily.py", line 219, in read
df = self._dl_mult_symbols(symbols=symbols)
File "/usr/lib/python3.5/site-packages/pandas_datareader/mstar/daily.py", line 130, in _dl_mult_symbols
resp.status_code, resp.reason))
Exception: Request Error!: 404 : Not Found

Yes, Morningstar is deprecated - https://github.com/pydata/pandas-datareader/issues/557
The next one to try is IEX. Will update the code in a few days or you can fork and update yourself.

https://github.com/omdv/robinhood-portfolio/commit/1711cf204271e1838e0cac85b0e13de02281dc7c


Python evaluator module fix

Description
Python evaluation module' ranking metric functions have redundant and unnecessary sorting codes.
E.g.
df_hit["rank"] = df_hit.groupby(col_user)[col_prediction].rank(
        method="first", ascending=False
)

doesn't need to use rank() since df_hit is already sorted by user and ratings as it is generated by groupby user (pandas groupby's sort argument is by default True) and nlargest ratings.
This change removes those redundant and unnecessary sorts and also refactor get_top_k_items to return DataFrame with 'rank' column to make its behavior the same as our pyspark evaluation module.
Related Issues

Checklist:

[ ] I have followed the contribution guidelines and code style for this project.
[x] I have added tests covering my contributions.
[x] I have updated the documentation accordingly.

@gramhagen Few changes since the last review:

changed "rank" to rank
caching groups turns out does not work, since nlargest sorts the ratings while the cached group object still contains unsorted ratings. I changed it back to use groupby again, but added sort=False so that groupby can be performed efficiently (groupby-without-sorting still keeps the inter-group orders and we already sorted previously by 'nlargest')
found the above issue from spark's unit-tests which matches spark-evaluation-fn results to python's. Python evaluation tests couldn't catch the error because the test case users and items were already sorted. I made a simple tweak to the test case so that can catch such errors in the future.

oh interesting, i didn't realize we use the python evaluation to validate test results for spark, we should remove that linkage, I'll add a separate feature request

oh, i take it back, I guess that's an additional check just to ensure they match. i guess it helped in this case.

@loomlike feel free to merge when you think it is convenient


Support additional Cluster Provisioners

Currently we require Cluster API. We should support Crossplane, KCC, or others, and also show using CAPI for non-KinD clusters.
/sig automation

Demonstration underway in https://github.com/nephio-project/docs/pull/64


Determine which DNS records need adding/updating

The application needs to compare a collection of DNS records against what's in configuration and produce a new list of records that require adding or updating.
I was envisioning some kind of service that works it out.

The requirement has been achieved in the DNSRecordCollection.


Updated the MAINTAINERS doc. and the CODEOWNERS doc.

Issue #, if available:
https://github.com/opensearch-project/index-management/issues/684
Description of changes:
Updated the MAINTAINERS doc. and the CODEOWNERS doc.
CheckList:

[x] Commits are signed per the DCO using --signoff

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Dup of https://github.com/opensearch-project/index-management/pull/770.


Feature/profile nav question

Product profile

Industry profile

Location Profile
col

muni

dept

msa

About Pages

http://ci-deploys.cid-labs.com/cid-harvard/atlas-subnational-frontend/feature/profile-nav-question/251

COL-780 :+1:
COL-781 :+1:

COL-778 still seems to be overflowing text in the spanish translation, but you folks knew that already

all checked on firefox

COL-778 still seems to be overflowing text in the spanish translation, but you folks knew that already

Yup, that is in another ticket for the header.


Generalize the interface of a Source by allowing it to emit a collection at once

@srkukarni I do like the addition of a collections interface here, but I'm not sure how I feel about making Collection<T> get() the sole method for retrieving data from a source. The current T get() method makes a lot more sense for me when it comes to basically all of the use cases that I've worked with. What would be some use cases where the collections interface would be, in fact, required? I suppose batch processing might be an example, but even then it's not yet clear to me what the collections construct yields. I'm open to being convinced, especially because this is a new problem domain for me, but would like to hear more about the rationale.

@lucperkins This change affects only the complex source. Thus the simple sources are still just having a simple interface. The reason why I propose this change is that most of the real-world spouts (kafka/pulsar) actually prefer to emit a list at a time rather than one element. Thus it naturally fits the use case. Also having the ability to emit multiple means that sources get less complicated:- they dont need to have to buffer data logic in them, etc.

QQ: I am new to Heron/Storm so this question may not make sense. Collection<> interface makes sense in some cases. I am wondering if efficiency a factor here?
About the interface, I am wondering if some kind of hint about the collection size could be helpful to avoid over-sized batch?

@srkukarni Okay, as long as the simple SerializableGenerator option exists, I don't see any reason to oppose this. +1

@nwangtw I did think about some kind of a hint. The issue is that the impl cannot really make smart choice regarding this hint value. There is nothing that the base api exposes any info about this.
We could in the future think about enhancing the base api to support this, but that probably requires some extra thought.

SGTM. Thanks.


error in phpstorm.meta file

HI Im getting a error in my phpStorm meta file that stops it from working . e.g.:
app('')('') => [
after looking at the contents of the file I noticed that its getting double parentheses and its happens on all version of App.
PhpStrom 9
build 141.1912
Laravel 5.0
php version  5.5.27
os x 10.10

Did you publish the views to your own dir? If so, can you remove/refresh them?

@barryvdh all information here is outdated and the current phpstorm meta works, also the format has changed since then etc. => I vote for closing the issue :}


special characters in jp2 filename breaks potto-loris/frontend

The filenames for the media in collection 28043 (Prison Pandemic) have special characters in them, which causes an error. Example for item/ark:/81235/d8bn9xg89/:
http.client.InvalidURL: URL can't contain control characters. '/iiif/28043/00_ALA_SantaRita_20220225_43871_00_Collection Cover (9).jp2/info.json' (found at least ' ') "GET /item/ark:/81235/d8bn9xg89/ HTTP/1.1" 500 21137

Fixed by this commit to public_interface: https://github.com/ucldc/public_interface/commit/b90fe372a4d932243f419f65c8a60534b7776338
And this commit to potto-loris:  https://github.com/ucldc/potto-loris/commit/b5956b91d4c50dc58e7fc4adf87db397bfe3b72d

This seems like it's still fixed: https://calisphere-stage.cdlib.org/item/ark:/81235/d8bn9xg89/


Use GitHub files API with pagination for PR diff

Used the same idea as in danger-js to get a list of files for PR diff using List pull requests files API from GitHub with pagination. The old Get a pull request API has a limit of 300 files and there is no pagination, which is why Danger can't leave an Inline comment with error 406 from the GitHub API.
Fixes #1489

@timbaev Could you please add CHANGELOG entry before merging?

@timbaev Could you please add CHANGELOG entry before merging?

No problem, thanks!


Fix some links

This PR fixes some links in README.md
I'm not sure why there are changes from dependabot (third_party/cctz) in my commit...
Signed-off-by: Dominik Wernberger<EMAIL_ADDRESS>

@Werni2A - It looks like you accidently used git commit --amend and put your changes into an existing change from dependabot. I have fixed up the history for your commit.

Your right, thanks for the info and correcting it.


Question about Launching via Docker Compose in Ubuntu?

Hello.
I've only previously used IPv6nat on my Manjaro (Arch) systems, which made available the installable systemd service.
I'm trying to bring up the container on Ubuntu for the first time, and I can't tell if it worked or not.
Here's what it did:
/mnt/nvme/dockerfs/containers/ipv6nat$ sudo docker compose up
[+] Running 5/5
 ...
[+] Running 1/0
 ⠿ Container ipv6nat  Created                                                                                0.1s
Attaching to ipv6nat

Here's what docker ps says:
CONTAINER ID   IMAGE               COMMAND                  CREATED              STATUS              PORTS     NAMES
97165b30bbfa   robbertkl/ipv6nat   "/docker-ipv6nat-com…"   About a minute ago   Up About a minute             ipv6nat

What's the best way to make sure it's actually working as intended, and that I don't need to also do the tweaking for router advertisements?

Here's the compose file:
$ cat docker-compose.yml
version: '3.3'

services:
    ipv6n:
        container_name: ipv6nat
        cap_drop:
          - ALL
        cap_add:
          - NET_ADMIN
          - NET_RAW
          - SYS_MODULE
        network_mode: host
        restart: unless-stopped
        volumes:
            - '/var/run/docker.sock:/var/run/docker.sock:ro'
            - '/lib/modules:/lib/modules:ro'
        image: robbertkl/ipv6nat


Add functionality for Anthropics's Claude

Add functionality for Anthropics's Claude for resume scanning in the folder ClaudeResumeScan

I'll like to contribute, please assign this to me


Fix typedef comments

Codecov Report

Merging #62 into master will decrease coverage by 0.13%.
The diff coverage is 87.5%.

@@            Coverage Diff             @@
##           master      #62      +/-   ##
==========================================
- Coverage   66.36%   66.22%   -0.14%
==========================================
  Files          39       39
  Lines        2628     2632       +4
  Branches       46       47       +1
==========================================
- Hits         1744     1743       -1
- Misses        861      866       +5
  Partials       23       23

Impacted Files
Coverage Δ

src/tokentree/walk/WalkFieldDef.hx
84.44% <ø> (-4.92%)
:arrow_down:

src/tokentree/walk/WalkTypedefBody.hx
91.42% <100%> (+0.12%)
:arrow_up:

src/tokentree/walk/WalkArrayAccess.hx
61.7% <85.71%> (+2.17%)
:arrow_up:

src/tokentree/walk/WalkClass.hx
83.15% <0%> (-2.11%)
:arrow_down:

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 071bed8...42c8daf. Read the comment docs.


virt-launcher: fix exit pod race condition

This commit fixes a race condition that would cause a VMI compute
pod to exit and end up in an erroneous 'Failed' state even if actually
the pod terminated gracefully.
The race condition is caused by having 2 goroutines doing a wait() on
the same PID, while a fix existed already it was not covering the whole
critical section causing to the race to persist (just with a lower
failure rate).
One example of the race is the following:
The goroutine executing on the SIGCHLD signal handler completes the
Wait4() and is about to write the exit status on the channel
goroutine 1
case syscall.SIGCHLD:
	var wstatus syscall.WaitStatus
	wpid, err := syscall.Wait4(-1, &wstatus, syscall.WNOHANG, nil)
	if err != nil {
		log.Log.Reason(err).Errorf("Failed to reap process %d", wpid)
	}

        **EXECUTION HERE**

	if wpid == cmd.Process.Pid {
		exitStatus <- wstatus
	}

While a second goroutine gets unblocked on the Wait() and continues its
execution after not finding anything inside the exitStatus channel
goroutine 2
exitCode := 0
if err := cmd.Wait(); err != nil {
select {
	case status := <-exitStatus:
		exitCode = int(status)
	default:
                **EXECUTION HERE**
		exitCode = 1
		if exiterr, ok := err.(*exec.ExitError); ok {

This would cause the VMI pod to report an exitCode=1 thus ending
up in Failed state because internally the Wait() function
actually calls first waitid() and then wait4(), both these functions
can fail if the SIGCHLD handler reaps the child process first leaving no
waitable pid in the system.
The fix has been tested with the following script:

function drain {
    NODE=$1

    kubectl drain $NODE --ignore-daemonsets --delete-local-data &> /dev/null
    sleep 0.5
    kubectl uncordon $NODE
}

function check-failed-pod {
    pods=$(kubectl get pod --field-selector 'status.phase==Failed' -o json | jq '.items | length')
    if [[ $pods -gt 0 ]]; then
        return 0
    else
        return 1
    fi
}

nodes=(node01 node02)
i=0

while true; do
    for node in "${nodes[@]}"; do
        echo "iteration $i"
        drain $node
        if check-failed-pod; then
            echo "Failed pod detected!"
            exit 1
        fi
        i=$((i + 1))
    done
done

without this commit: 1 failure every ~7 node drains
with this commit: no failures in over 200 iterations
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1943164
Signed-off-by: Antonio Cardace<EMAIL_ADDRESS>
What this PR does / why we need it:
Which issue(s) this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close the issue(s) when PR gets merged):
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1943164
Special notes for your reviewer:
Release note:

Fix virt-launcher exit pod race condition

/cc @davidvossel @stu-gott

Thanks @acardace!
/lgtm

I guess you're right, it seems indeed like a no-op. @rmohr I see git blames you :) any reason to keep this line?

/hold
Feel free to unhold when you decide what do regarding this

if exitCode != 0 {

          log.Log.Errorf("dirty virt-launcher shutdown: exit-code %d", exitCode)

  }

This indeed works but effectively it's the same as the current PR with the difference what it's using +1 goroutine which I don't think it's strictly necessary as everything main has to do is waiting for a signal. WDYT?
By the way I added the 'dirty shutdown' log line and also a 1 exitCode if parent virt-launcher is not able to deliver a SIGTERM to the child launcher.

/retest

This indeed works but effectively it's the same as the current PR with the difference what it's using +1 goroutine which I don't think it's strictly necessary as everything main has to do is waiting for a signal. WDYT?

it's possible we may want the goroutine to continue in the background to reap possible zombie processes that virt-launcher may inherit.

This indeed works but effectively it's the same as the current PR with the difference what it's using +1 goroutine which I don't think it's strictly necessary as everything main has to do is waiting for a signal. WDYT?

it's possible we may want the goroutine to continue in the background to reap possible zombie processes that virt-launcher may inherit.

I'm ok with keeping the additional goroutine around but just keep in mind that when the monitored virt-launcher exits and we receive the SIGCHLD odds are that any zombie process still laying around will be cleaned up by the kernel as the process terminates immediately, I doubt the goroutine will get a chance to execute signal handlers.

I'm ok with keeping the additional goroutine around but just keep in mind that when the monitored virt-launcher exits and we receive the SIGCHLD odds are that any zombie process still laying around will be cleaned up by the kernel as the process terminates immediately, I doubt the goroutine will get a chance to execute signal handlers.

yeah, any zombie processes not handled by us will eventually get handled by something on the host (either pid 1 or some parent in the controller runtime). I think we should try to cleanup (reap) the child processes ourselves when possible though.

@davidvossel PR updated, thanks for your comments :)

/retest

/retest

/unhold

/cherry-pick release-0.41


Call to a member function getDomain() on null in Safari

I logged in https://partners.shopify.com/xxxxxxx/resources/get_started to the Apps section. ->Test Application -> Select Store -> name-store. The error is only in safari. Chrome and Mozilla are fine.
Does anyone have any ideas?

@artem55555p   This is not package  Error you have to check the database you clean-up manfully  so Delete app and Install again.

I've tested this successfully on my own apps and new blank build. Closing it for now as the issue is quite old. Reopen if it still exists.


Correct style for some layer elements when its hidden

Hi guys!
This is an enhancement of the style of a layer when it's hidden so it's more clear that it is.
The layer title should be in #CBCED0 and the icon in 24% transparency.

Let me know if you have any question :)
and thanks!

Easy peasy, @MariaCheca will do it in a minute 💋 .


Remove non-critical gas estimate fallback data

If a request to the Gas API fails for any reason, we attempt to hit
Infura directly and compute the same pieces of data that the Gas API
computes. However, considering that this data supports the new gas fee
UI design in the extension, it is not necessary for us to emulate the
API 100%. We only need data that is critical to allow users to see and
select fees for different priority levels in order to make transactions.
Everything else — a snapshot of recent base and priority fees, whether
the base and priority fees have risen or fallen recently, and how busy
the network is — is not important.
This commit removes these extra computations so as to further limit the
amount of requests that are made to Infura.

Is this ready for review, or should this be a draft?

@rekmarks This PR is ready for review! I just wanted to make sure if I needed to make changes to the branch I could easily do so, hence the commit to add the dist/ files. But I just reverted that commit, so it should be easier to review.

@mcmire if you have some time today to go over these changes that would be great! I'm having trouble following the full picture here.


Add a main.py to allow for executable zip files

Looking at the dependencies that Black requires, they all seem to be pure Python (I believe aiohttp breaks that, but it's listed as an optional dependency). That would mean that if you constructed a zip file with a __main__.py at the top along with all dependencies included then you should be able to point Python at the zip and have Black work in a self-contained manner.
This was just an idea I had while people talk about packaging tools over at discuss.python.org.

Thanks for your feedback. This will stop being true once we compile with mypyc or introduce other performance measures that compile Black. We won't be moving to __main__.py for this reason (we don't want to break users in the future).


Prepare for Spring Cloud Azure 5.19.0 release

Description
Prepare for Spring Cloud Azure 5.19.0 release
All SDK Contribution checklist:

[ ] The pull request does not introduce [breaking changes]
[ ] CHANGELOG is updated for new features, bug fixes or other significant changes.
[ ] I have read the contribution guidelines.

General Guidelines and Best Practices

[ ] Title of the pull request is clear and informative.
[ ] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, see this page.

Testing Guidelines

[ ] Pull request includes test coverage for the included changes.

API change check
API changes are not detected in this pull request.


[chore](script message) More convenient error msg for nofile open. #39642

cherry pick from #39642

run buildall


Unable to create vpc-subnetwork

Encountering an error on terraform apply. Strangely, only seven resources are marked for creation created in terraform plan, none of which is a vpc network or subnetwork.
Error : Error applying plan:

1 error occurred:
	* google_container_cluster.cluster: 1 error occurred:
	* google_container_cluster.cluster: googleapi: Error 400: Subnetwork "projects/<GCP_PROJECT>/regions/europe-west1/subnetworks/vpc-subnetwork" is not valid for Network "vpc-network"., badRequest

$ terraform version
Terraform v0.11.14
+ provider.google v2.5.1
+ provider.random v2.1.1

I've not been able to reproduce this issue and it uses an older version of Terraform so I'm going to close. Feel free to reopen if you encounter this problem again. Thanks!


feat: extend get all representations for case reference endpoint for bo integration

Describe your changes
Ticket: https://pins-ds.atlassian.net/browse/ASB-1996
PR extends /api/v1/representation?caseReference={caseReference} for back office integration for specific case references using the BACK_OFFICE_INTEGRATION_GET_REPRESENTATION_CASE_REFERENCES flag.
The seeding will be done in the next ticket: https://pins-ds.atlassian.net/browse/ASB-2097
Useful information to review or test
Please use the seed script first to generate dummy data.
To confirm back office integrations works locally, use BC0110001:
http://localhost:3000/api/v1/representations?caseReference=BC0110001

To confirm ni integration still works locally (regression) use anything else:
http://localhost:3000/api/v1/representations?caseReference=EN010009

Type of change 🧩

[ ] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] Documentation update
[ ] Other (please explain in the description section above)

Checklist before requesting a review

[x] I have performed a self-review of my own code
[x] I have double checked this work does not include any hardcoded secrets or passwords
[x] I have made corresponding changes to the documentation
[x] I have provided details on how I have tested my code
[x] I have referenced the ticket number above
[x] I have provided a description of the ticket
[x] I have included unit tests to cover any testable code changes

:tada: This PR is included in version 1.6.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

:tada: This PR is included in version 2.21.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


staticProperties does not apply styles

Description
Defining a property in staticProperties does not apply styles. For example,
const vars = {
  cursor: {
    pointer: "pointer",
  },
}

const responsiveProperties = defineProperties({
  staticProperties: {
    cursor: vars.cursor,
  },
})

Adding this, component that uses this:
import { rainbowSprinkles } from "../sprinkles.css"

export const container = rainbowSprinkles({
  cursor: "pointer",
})

will no longer have cursor: pointer work properly. If cursor property is removed from the staticProperties, it works.

When you use the object syntax for staticProperties, you are opting into using the $ prefix. This should work:
export const container = rainbowSprinkles({
-  cursor: "pointer",
+  cursor: "$pointer",
})

If you just want to use the value 'pointer', you should use the array syntax:
const responsiveProperties = defineProperties({
  staticProperties: {
    cursor: ['pointer'],
  },
})

Hope that helps!


[release-1.20] optimize schema analysis performance

This is an automated cherry-pick of #48683

This will be included in 1.20.3. Will merge after 1.20.2 candidate is out, which should be later today.

@istio-testing: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name
Commit
Details
Required
Rerun command

unit-tests_istio_release-1.20
2d61c874d03cefde40f09bb9d9df98c41d1f1ec6
link
unknown
/test unit-tests

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

/retest


DefaultEndpoint.QUEUE_SIZE becomes out of sync, preventing command queueing

Observed Version(s): 5.0.3.RELEASE
Introduced in Version(s): 4.4.0.Final

Still exists in 5.0.3.RELEASE

Still visible in master? Unknown but likely

I've not tested the 5.x branch at all

Expected:
When request queue size is hit, submitted commands are terminated early.  When request queue drains, new commands are once again submitted
Actual:
I'm still in the process of determining exactly what is happening here, but what I'm observing is that when a redis instance is performing a task that blocks the foreground thread for a substantial amount of time (seconds up to minutes, details on how to do this below), the DefaultEndpoint can become wedged in a state where QUEUE_SIZE is stuck at a non-zero value.  If this value is greater than clientOptions.getRequestQueueSize() - command, validateWrite will never again validate any writes submitted to it.

To Reproduce
Using the setup shown below, connect to redis and verify that commands are processed correctly.  Then submit a redis save command, and while that save is running (that's why we use a large list, but there are other ways to replicate this), submit more than requestQueueSize requests:
sudo docker exec helix-redis redis-cli save &
for i in {1..100}; do cat payload.json| curl -v -H 'Content-Type: application/json' -d @- http://localhost:8000/redis-endpoint 2>&1; done

Performing the above, and then waiting for the save command to complete, results in the log file:

https://gist.github.com/nivekastoreth/d934ac60488604baa11be770ed7d1c71#file-lettuce-incorrect-queue-breaking-log

After the save operation has completed, submitting a single followup request results in the log file:

https://gist.github.com/nivekastoreth/d934ac60488604baa11be770ed7d1c71#file-lettuce-incorrect-queue-broken-log
As shown in the log file, the value of QUEUE_SIZE is now stuck at 5 and above.  Given a second cycle, this connection would become entirely unresponsive.  By using a debugger, one can manually set this value to zero and verify that everything once again works correctly.

Speculation:
I believe the dequeue command is never called due, in some part, to the following error, but currently haven't tracked down the exact flow that results in this case:
2018-04-20 14:43:53 UTC [lettuce-nioEventLoop-10-3] WARN  i.n.c.AbstractChannelHandlerContext - Failed to mark a promise as failure because it has failed already: DefaultChannelPromise@4a01a122(failure: io.lettuce.core.RedisException: Internal stack size exceeded: 10. Commands are not accepted until the stack size drops.), unnotified cause: io.lettuce.core.RedisException: Internal stack size exceeded: 10. Commands are not accepted until the stack size drops.
	at io.lettuce.core.protocol.CommandHandler.validateWrite(CommandHandler.java:441)
	at io.lettuce.core.protocol.CommandHandler.addToStack(CommandHandler.java:410)
	at io.lettuce.core.protocol.CommandHandler.writeSingleCommand(CommandHandler.java:367)
	at io.lettuce.core.protocol.CommandHandler.write(CommandHandler.java:334)
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738)
	at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:730)
	at io.netty.channel.AbstractChannelHandlerContext.access$1900(AbstractChannelHandlerContext.java:38)
	at io.netty.channel.AbstractChannelHandlerContext$AbstractWriteTask.write(AbstractChannelHandlerContext.java:1081)
	at io.netty.channel.AbstractChannelHandlerContext$WriteAndFlushTask.write(AbstractChannelHandlerContext.java:1128)
	at io.netty.channel.AbstractChannelHandlerContext$AbstractWriteTask.run(AbstractChannelHandlerContext.java:1070)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:163)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.lang.Thread.run(Thread.java:745)

Setup:
Redis:
-- sudo docker exec redis redis-cli --eval redis-gen.lua , "large_set" 50000000 0

local set_name = #ARGV >= 1 and ARGV[1] or 'large_set'
local entry_count = #ARGV >= 2 and ARGV[2] or 50000000
local entry_start = #ARGV >= 3 and ARGV[3] or 0

local memory = {}

local base = '00000000-0000-0000-0000-'
local min =<PHONE_NUMBER>00

local start = entry_count * entry_start
local stop = start + entry_count
for user = start, stop, 1 do
  redis.call("sadd", set_name, base .. (min + user))
end

memory[set_name] = redis.call("scard", set_name)
return cjson.encode(memory)

Client:
  val resources = DefaultClientResources.builder()
    .ioThreadPoolSize(11)
    .computationThreadPoolSize(11)
    .build()
  val client = RedisClient.create(resources)
  val options = ClientOptions.builder()
    .autoReconnect(true)
    .requestQueueSize(10) // low number here to make it easier to reproduce
    .pingBeforeActivateConnection(false)
    .cancelCommandsOnReconnectFailure(true)
    .disconnectedBehavior(DisconnectedBehavior.REJECT_COMMANDS)
    .build()
  client.setOptions(options)
  val connection = client.connect(uri)

  // later on, submitting requests via:
  val async: RedisAsyncCommands[String, String] = connection().async()
  val future: RedisFuture[[String] = async.evalsha[String](digest.value, ScriptOutputType.VALUE, keys, values: _*)

P.S. This println also seems removable:

5.x: https://github.com/lettuce-io/lettuce-core/blob/5.x/src/main/java/io/lettuce/core/protocol/DefaultEndpoint.java#L810-L812
5.0.x: https://github.com/lettuce-io/lettuce-core/blob/5.0.x/src/main/java/io/lettuce/core/protocol/DefaultEndpoint.java#L765-L767

Thanks a lot for your extensive bug report. I fixed the println issue via #765. I need to have a look on what happens with the queue size.

Just a quick note that the save mechanism is just one way of replicating the behaviour, but we first noticed this in production when attempting to delete or unlink a very large Set while under load.  I don't believe that there is any real difference between the two use cases from the point of view of the lettuce client, but figured it might be worth mentioning.

After further analysis, this bug is a consequence of retry and the queue limit protection. Writing a command to a queue that is full completes the command exceptionally and throws an exception. The ChannelPromise notifies RetryListener which attempts to retry the command.
The command gets into the event loop. CommandHandler.write(…) sees the command is done so it is no longer written. This no-op causes the resulting future to never complete as there is nothing to write/flush.
There are two things to do:

Do not resubmit commands that are done.
Complete no-op writes ourselves.

Snapshots are available. Care to give 5.0.4.BUILD-SNAPSHOT a spin (lettuce-core-5.0.4.BUILD-20180423.123048-8)?

This looks great on my end, at least in my cobbled together reproduction environment.  I'll will see if i can get this tested on production hardware later today, but I expect it to pass there as well.
Thanks!

Do you have an ETA on when you'll be releasing 5.0.4 with this fix?

I added release dates to the milestones.

Awesome, thanks.


[6.0.0] importlib.util.find_spec raises ValueError (it was not a case with imp.find_module)

Greetings!
Thakns for maintaining this package! ✨
While trying new version 6.0.0, we discovered the next issue:
Exception occurred:
  File "/opt/python/3.8.6/lib/python3.8/importlib/util.py", line 114, in find_spec
    raise ValueError('{}.__spec__ is None'.format(name))
ValueError: celery.__spec__ is None

I did try to dig a bit and discovered, that new importlib.find_spec raises ValueError in case the spec would be None or is not set. The change related to it was introduced in #73.
This behaviour differs from imp.find_module, where it was returning None or raising ImportError.
Seems like we need to update this bit in spelling library to cover new behaviour.
Cheers,
Rust

The fix you've provided is included in release 7.0.0, so I'm going to close this issue. I think this is the same as #95, which I am leaving open until the reporters there can confirm that the fix also solves the problem for them.
Thanks again for finding and fixing the problem!


Playerbedenterevent / leave event

i keep getting this error when entering or leaving a bed on harbor v1.5.2(even though it says 1.5.1 i have the 1.5.2 jar. i am using Paper 137 for 1.14.4 and was having the same error on 1.14.3
sometimes the night will skip like its supposed to, other times it wont
https://pastebin.com/14aCyF2B
config:
https://pastebin.com/dUemEQcN
plugin list:

actionbar api
announcer
armorstand tools
async world edit
buycraftx
chunk spawner limiter
citizens
core protect
craftbook
crazy auctions
discordSRV
dynmap
dynmap-citizens
dynmap-essentials
dynmap-greifprevention
editable signs
essentialsx
greifprevention
Harbor
head database
holographic displays
HorseTPWithMe
marriage master
mcmmo classic
minepacks
mineable spawners
mob capture
mobhunting
multiverse core
multiverse inventories
multiverse netherportals
multiverse portals
multiverse signportals
nerf phantoms
openinv
permissionsex
placeholder api
plot2dynmap
plotsquared
plugin lib
plugman
protocol lib
server list plus
tab
tempfly
time is money
vault
voting plugin
wildernesstb
world edit
world guard

im still getting this error on 1.5.3

I am removing the need for events in the latest build of Harbor, so this should be resolved.


Delete public links on GET (#1364)

might need a rebase with master, I see some scenarios that were expected to fail that passed.

@refs just rebased, let's see


Update the logo for GMail

This using the design sent over by Izzie and the SVG data found on
Wikimedia.

:+1:


What are the upper values for AST,ALT, and ALP?

Hi,
When I extracted the data using "pivoted-lab.sql", I found that indicators such as AST, ALT, ALP had a lot of abnormally high values, which had caused me a lot of trouble.I want to know the reliable upper limit of the laboratory indicator instrument used in these hospitals, or can you give me a range.
Thanks a lot

Besides,  how to find the outliers for height and weight?

Unfortunately we don't have the lab reference or any other ranges, as these may vary from hospital to hospital.  This applies to the labs and height/weight.
I'm afraid you will have to have a look at the data a little more closely and see if alternative analysis methods (e.g., bin the data,  use rank based methods (e.g., medians) can be used.
In my experience most of what people think are spurious or erroneous data are in fact legitimate.

I will add that height and weight can be found in many places within the eICU-CRD tables, so don't restrict yourself to the patient table when encountering some weird or ambiguous data.


asset: limit max value of issuance leaf to math.MaxUint32

This is a step towards fixing:
https://github.com/lightninglabs/taproot-assets/issues/544.
In this commit, we limit the max amount of an asset that can be issued
at one time to math.MaxUint32. The existing 32-bit sum is left in place.
This gives us enough buffer room, as we'd need 4 billion UTXOs of the
same assets to overflow the root sum. In the future, we can lift this
limit with future asset versions.
An asset can have more than 4 billion ish units if they issue with
distinct UTXOs. This value can be viewed as the max amt that can be
issued in a single tranche.

Thinking that the amount field for addresses should now also be a uint32? And receiving more than that requires the interactive flow or multiple addresses.

Thinking that the amount field for addresses should now also be a uint32?

Hmm, yeah good point, hadn't thought about that interaction. In that case, it's possible to actually just re-use the address if needed.

Should also update the overflow checks we have for tree leaves so we can fail earlier than asset.New(), e.x. in the porter:
https://github.com/lightninglabs/taproot-assets/blob/5373ccceaa92a6b4e32ff55c2e272608429fbbc5/tapscript/send.go#L323
RPC types also need to be updated, like MintAssetRequest, so we don't ingest uint64s where relevant.

Thinking that the amount field for addresses should now also be a uint32?

Hmm, yeah good point, hadn't thought about that interaction. In that case, it's possible to actually just re-use the address if needed.

Unrelated but would be neat to signal to the sender that those two asset leaves could be merged into the same anchor output; maybe if they share the same internal key?
Could also be useful for handling receiving for asset groups.


showRationaleInDialog doesn't remove/replace existing dialog

showRationaleInDialog is a simple method that creates and shows a new instance of PermisoDialogFragment (and also sets a callback) with a tag of PermisoDialogFragment.TAG.
If there is an existing dialog showing with a tag of PermisoDialogFragment.TAG, then this will show multiple dialogs.
showRationaleInDialog should first call FragmentManager#findFragmentByTag(String tag) and dismiss that dialog.

Also/FYI, I question if "dialogFragment.setOnCloseListener(...)" will survive a screen rotation...but that is a separate issue.

I don't quite understand how, but setOnCloseListener seems to handle rotation just fine.
I would think a reference to a callback would not be retained when the DialogFragment is recreated after a rotation.
This goes against how I thought Fragments worked...unless something changed since I last groked how they worked.

To prevent the listener being lost on rotation, I call setRetainInstanceState(true).
https://github.com/greysonp/permiso/blob/master/permiso/src/main/java/com/greysonparrelli/permiso/PermisoDialogFragment.java#L56

Thanks! I see that now in the comments! :)


entersState seems to be locking the thread for itself, causing abortions to always happen

Hey, trying to play around with discord.js v13/voice 0.6.0, and noticed this caveat (very quickly) after reading the examples.
entersState(connection, VoiceConnectionStatus.Ready, 30e3); // As mentioned and used in samples, ala /examples directory on repo.
console.log("Usually somehting would run here, but an abortion would not cause this to run");

and for the part of the interactions handler im using:
case 'join': {
	const channel = interaction.member?.voice.channel;
		if (channel) {
			try {
				await interaction.reply('Should of joined voice channel?');
				const connection = await connectToChannel(channel); // connectToChannel function is verbatim from the Basic Example
				// ...

Further details:

@discordjs/voice version: 0.6.0
Node.js version: 16.11.0
Operating system: Windows 10 x86_64 | 10.0.19041
Priority this issue should have – Kind of hard to use the library if it doesn't work?

Relevant client options:

partials: none
gateway intents: none
other: Intents.FLAGS.GUILDS, using interactions

Not sure if you're experiencing the same issue I was, but I had to include  Intents.FLAGS.GUILD_VOICE_STATES to get past the entersState line. The client won't know what state the connection is in without that intent.

Oh. my bad, that fixed it, should really of looked into what intents i'll use.


Send message fix for email cahnnel

Coverage remained the same at 93.267% when pulling b3663eb08f6146a9c82231361fdcff3ed010dedf on RickCarlino:send_message_broke into 971b711e4e0b7fbb4cb8d9ed392b094f744984af on FarmBot:staging.


presence: Extract lib/presence and clean up names

The last commit here is slightly non-trivial, whereas most of the early commits just move code around and rename things.

I'm a big fan of moving all the code to zerver/lib/presence.py and additing reasonable names for these functions.  Thanks for doing this preparatory cleanup!


Outlook on Windows does not support navigation via urls/window.location in an integrated third-party app

We are in the process of extending Testportal Teams integration (https://teams.microsoft.com/l/app/7c5000d4-3c00-4cf3-af5f-2f1d4a6d9328) so that it targets also:

Outlook on the web
Outlook on Windows (Microsoft 365)
Office on the web
Office app for Windows

We've managed to test integration with Office and Outlook on the web integration and it works well.
However we've discovered an issue with Outlook on Windows.
Testportal loads correctly, but the integration does not support navigation through page reloads. Our app is not a full Single-Page Application. We do have a lot of navigation through regular  and window.location.
What happens is that when you try to navigate, a new page loads in a popup window rather than inside of an integration frame.
We believe that as long as a target page is in the same domain, a new page shouldn't be forced into a popup window.
This issue blocks us from going live with our integration as we can't redesign quickly our app to be a full SPA.

@marcintomiak -
If you have any business-critical issue which need immediate attention, please raise a support request here:
https://docs.microsoft.com/en-us/microsoft-365/admin/get-help-support?view=o365-worldwide&tabs=online

@marcintomiak - We are informing the engineering team ,they are look into this,We will let you know once we get any update.

@marcintomiak -Did you get chance to check above suggestion?

Hey @salaman, we're pretty sure that urls that are popping up in a new window are all from the same domain, via https (as they are just a navigation within an app). We will look into it again on Monday and I'll get back to you with feedback.

Hey @salaman, coming back with feedback. So it seems like you actively update logic around new window popups.
As of today it all works well, however:

Before we've created a ticket, navigation was broken as pages would popup in new window
Early this week, our authentication flow via microsoftTeams.authentication.authenticate() wouldn't work as it would popup in new window and never come back to Outlook main window
As of today everything works well

So I guess my feedback would be that it is solved, but actually apparently was fixed in the meantime on your side.


Getter doesn't support Representer instance methods

 class Find
  include Supa::Representable

  define do
    namespace :jsonapi do
      attribute :version, getter: -> { '1.0' }
    end

    collection :included, getter: -> { station_codes } do
      attribute :id, getter: -> { self }
      attribute :type, getter: -> { 'stations' }

      namespace :attributes do
        attribute :code, getter: -> { self }
      end
    end
  end

  def station_codes
    codes = self.collect(&:departure_station_code) + self.collect(&:arrival_station_code)
    codes.uniq!
    codes
  end
end

And it will be difficult to put different objects inside included block

We take care of this feature in https://github.com/distribusion/supa


Add Client ID to Get Frame UDP response header

The Client ID is a 4-bit integer supplied by the client, which maps internally to a stage prop on the client.
This allows clients that drive multiple strips to know which stage prop is represented by a given UDP response, which may return out of order.
The Get Frame request syntax now looks like GF:StagePropCode[:ClientID], where ClientID is optional (defaults to 0 if none is supplied).

Note that this means a given client can control a maximum of 16 stage props (Client IDs can be between 0 and 15 inclusive).


reorder_imported_names shouldn't force lexicographic sort order

Currently, I have to keep my multiple-import lines ordered manually because reorder_imported_names forces all of the constants to sort first, despite being the least significant part of an API and I really don't like this kind of suggested correction:
- use self::libc::{access, c_char, c_int, W_OK};
+ use self::libc::{W_OK, access, c_char, c_int};

This is clearly because it's using the same kind of naive lexicographic sort you see from things like Apache's mod_autoindex and, while that would be annoying normally, it's flat-out grating here. With all-caps names sorting first, the import feels top-heavy and more difficult to skim.

cc https://github.com/rust-lang-nursery/fmt-rfcs/issues/24. Closing this issue since it is more of a spec'ing issue rather than an implementation one.

Ahh. I didn't notice the existence of fmt-rfcs... but now I suspect my participation will drop because I have this thing about never feeling competent enough to do more than commenting on someone else's RFCs.


[WIP] Pruned transducer stateless5 recipe for AISHELL4

I am trying to build a pruned-transducer-stateless5 recipe for AISHELL4.

Here is a problem that I want to ask for some suggestions on.
In aishell4,  the text includes the unit <sil>, such as:
呃<sil>一个惊喜吧呃对合影惊喜自己当作是留念然后
那就可以让部长申两个活动，一个是<sil>联欢会的一个加分儿的项目，还有一个就是<sil>
那由D同学做一个P P T吧，他是<sil>学计算机的，然后就让他

So, I need to process these texts which include <sil>.
The first choice for me is to remove the <sil> when generating text. And also I need to remove it in the testing text.
The second choice is to treat it as a single modeling unit, being the same as a char unit.
I am not sure which is better, or maybe there are any other better good ideas for this case.

Are there recipes in other frameworks? What are others doing about it?

A good idea.

Do we accept perl codes for processing text?

I think maybe it's better if I change it to python format.

Do we accept perl codes for processing text?

If there are only several lines of perl script that can be embedded in prepare.sh, that would be fine.
Otherwise, I recommend you to use Python.

With num_workers=0 it has to be slow, that's expected.

When I use num-workers=2 to run again based on one GPU, there are some training logs:
(k2-python) luomingshuang@de-74279-k2-train-2-0602201035-5fb6d86964-mclm7:~/codes/icefall-pruned-rnnt5-aishell4/egs/aishell4/ASR$ CUDA_VISIBLE_DEVICES='4' python pruned_transducer_stateless5/train.py --max-duration 220 --num-workers 2 --exp-dir pruned_transducer_stateless5/exp-one-gpu
2022-06-08 07:55:57,171 INFO [train.py:877] Training started
2022-06-08 07:55:57.403222: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /ceph-sh1/fangjun/software/cuda-10.2.89/lib:/ceph-sh1/fangjun/software/cuda-10.2.89/lib64:
2022-06-08 07:55:57.403275: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
2022-06-08 07:56:00,409 INFO [train.py:887] Device: cuda:0
2022-06-08 07:56:00,476 INFO [lexicon.py:176] Loading pre-compiled data/lang_char/Linv.pt
2022-06-08 07:56:00,486 INFO [train.py:898] {'best_train_loss': inf, 'best_valid_loss': inf, 'best_train_epoch': -1, 'best_valid_epoch': -1, 'batch_idx_train': 0, 'log_interval': 1, 'reset_interval': 100, 'valid_interval': 200, 'feature_dim': 80, 'subsampling_factor': 4, 'model_warm_step': 50, 'env_info': {'k2-version': '1.15.1', 'k2-build-type': 'Release', 'k2-with-cuda': True, 'k2-git-sha1': 'f8d2dba06c000ffee36aab5b66f24e7c9809f116', 'k2-git-date': 'Thu Apr 21 12:20:34 2022', 'lhotse-version': '1.3.0.dev+git.4198446.dirty', 'torch-version': '1.11.0', 'torch-cuda-available': True, 'torch-cuda-version': '10.2', 'python-version': '3.8', 'icefall-git-branch': 'icefall-pruned-rnnt5-aishell4', 'icefall-git-sha1': '296303a-dirty', 'icefall-git-date': 'Tue Jun 7 22:36:20 2022', 'icefall-path': '/ceph-meixu/luomingshuang/icefall', 'k2-path': '/ceph-ms/luomingshuang/k2_latest/k2/python/k2/__init__.py', 'lhotse-path': '/ceph-meixu/luomingshuang/anaconda3/envs/k2-python/lib/python3.8/site-packages/lhotse-1.3.0.dev0+git.4198446.dirty-py3.8.egg/lhotse/__init__.py', 'hostname': 'de-74279-k2-train-2-0602201035-5fb6d86964-mclm7', 'IP address': '<IP_ADDRESS>'}, 'world_size': 1, 'master_port': 12354, 'tensorboard': True, 'num_epochs': 30, 'start_epoch': 1, 'start_batch': 0, 'exp_dir': PosixPath('pruned_transducer_stateless5/exp-one-gpu'), 'lang_dir': 'data/lang_char', 'initial_lr': 0.003, 'lr_batches': 5000, 'lr_epochs': 6, 'context_size': 2, 'prune_range': 5, 'lm_scale': 0.25, 'am_scale': 0.0, 'simple_loss_scale': 0.5, 'seed': 42, 'print_diagnostics': False, 'save_every_n': 4000, 'keep_last_k': 30, 'average_period': 100, 'use_fp16': False, 'num_encoder_layers': 24, 'dim_feedforward': 1536, 'nhead': 8, 'encoder_dim': 384, 'decoder_dim': 512, 'joiner_dim': 512, 'manifest_dir': PosixPath('data/fbank'), 'max_duration': 220, 'bucketing_sampler': True, 'num_buckets': 300, 'concatenate_cuts': False, 'duration_factor': 1.0, 'gap': 1.0, 'on_the_fly_feats': False, 'shuffle': True, 'drop_last': True, 'return_cuts': True, 'num_workers': 2, 'enable_spec_aug': True, 'spec_aug_time_warp_factor': 80, 'enable_musan': True, 'input_strategy': 'PrecomputedFeatures', 'training_subset': 'L', 'blank_id': 0, 'vocab_size': 3284}
2022-06-08 07:56:00,487 INFO [train.py:900] About to create model
2022-06-08 07:56:01,081 INFO [train.py:904] Number of model parameters: 94337552
2022-06-08 07:56:04,849 INFO [asr_datamodule.py:429] About to get train cuts
2022-06-08 07:56:04,853 INFO [asr_datamodule.py:231] About to get Musan cuts
2022-06-08 07:56:04,854 INFO [asr_datamodule.py:238] Enable MUSAN
2022-06-08 07:56:04,962 INFO [asr_datamodule.py:263] Enable SpecAugment
2022-06-08 07:56:04,962 INFO [asr_datamodule.py:264] Time warp factor: 80
2022-06-08 07:56:04,962 INFO [asr_datamodule.py:276] Num frame mask: 10
2022-06-08 07:56:04,962 INFO [asr_datamodule.py:289] About to create train dataset
2022-06-08 07:56:04,963 INFO [asr_datamodule.py:318] Using DynamicBucketingSampler.
2022-06-08 07:56:09,181 INFO [asr_datamodule.py:334] About to create train dataloader
2022-06-08 07:56:09,181 INFO [asr_datamodule.py:437] About to get dev cuts
2022-06-08 07:56:09,183 INFO [asr_datamodule.py:365] About to create dev dataset
2022-06-08 07:56:09,772 INFO [asr_datamodule.py:384] About to create dev dataloader
2022-06-08 07:56:09,773 INFO [train.py:1054] Sanity check -- see if any of the batches in epoch 1 would cause OOM.
2022-06-08 08:00:27,984 INFO [train.py:815] Epoch 1, batch 0, loss[loss=0.9558, simple_loss=1.912, pruned_loss=9.052, over 5285.00 frames.], tot_loss[loss=0.9558, simple_loss=1.912, pruned_loss=9.052, over 5285.00 frames.], batch size: 23, lr: 3.00e-03
2022-06-08 08:00:30,086 INFO [train.py:815] Epoch 1, batch 1, loss[loss=0.7711, simple_loss=1.542, pruned_loss=9.094, over 5263.00 frames.], tot_loss[loss=0.8632, simple_loss=1.726, pruned_loss=9.073, over 10495.15 frames.], batch size: 21, lr: 3.00e-03
2022-06-08 08:01:10,457 INFO [train.py:815] Epoch 1, batch 2, loss[loss=0.8648, simple_loss=1.73, pruned_loss=9.108, over 5434.00 frames.], tot_loss[loss=0.8637, simple_loss=1.727, pruned_loss=9.085, over 15824.20 frames.], batch size: 99, lr: 3.00e-03
2022-06-08 08:01:11,278 INFO [train.py:815] Epoch 1, batch 3, loss[loss=0.6862, simple_loss=1.372, pruned_loss=9.249, over 5430.00 frames.], tot_loss[loss=0.818, simple_loss=1.636, pruned_loss=9.127, over 21095.96 frames.], batch size: 33, lr: 3.00e-03
2022-06-08 08:01:21,158 INFO [train.py:815] Epoch 1, batch 4, loss[loss=0.5969, simple_loss=1.194, pruned_loss=9.26, over 5197.00 frames.], tot_loss[loss=0.774, simple_loss=1.548, pruned_loss=9.154, over 26082.00 frames.], batch size: 16, lr: 3.00e-03
2022-06-08 08:01:22,072 INFO [train.py:815] Epoch 1, batch 5, loss[loss=0.6028, simple_loss=1.206, pruned_loss=9.481, over 5392.00 frames.], tot_loss[loss=0.7444, simple_loss=1.489, pruned_loss=9.21, over 31213.18 frames.], batch size: 18, lr: 3.00e-03
2022-06-08 08:01:27,888 INFO [train.py:815] Epoch 1, batch 6, loss[loss=0.5526, simple_loss=1.105, pruned_loss=9.342, over 5306.00 frames.], tot_loss[loss=0.7163, simple_loss=1.433, pruned_loss=9.23, over 36207.05 frames.], batch size: 22, lr: 3.00e-03
2022-06-08 08:01:28,707 INFO [train.py:815] Epoch 1, batch 7, loss[loss=0.5148, simple_loss=1.03, pruned_loss=9.262, over 5371.00 frames.], tot_loss[loss=0.69, simple_loss=1.38, pruned_loss=9.234, over 41215.97 frames.], batch size: 29, lr: 3.00e-03
2022-06-08 08:01:42,786 INFO [train.py:815] Epoch 1, batch 8, loss[loss=0.4969, simple_loss=0.9939, pruned_loss=9.257, over 5310.00 frames.], tot_loss[loss=0.6678, simple_loss=1.336, pruned_loss=9.236, over 46113.82 frames.], batch size: 18, lr: 3.00e-03
2022-06-08 08:01:43,608 INFO [train.py:815] Epoch 1, batch 9, loss[loss=0.5297, simple_loss=1.059, pruned_loss=9.424, over 5346.00 frames.], tot_loss[loss=0.6533, simple_loss=1.307, pruned_loss=9.256, over 50998.68 frames.], batch size: 25, lr: 3.00e-03
2022-06-08 08:02:01,751 INFO [train.py:815] Epoch 1, batch 10, loss[loss=0.554, simple_loss=1.108, pruned_loss=9.458, over 5376.00 frames.], tot_loss[loss=0.6438, simple_loss=1.288, pruned_loss=9.275, over 55864.69 frames.], batch size: 37, lr: 3.00e-03
2022-06-08 08:02:02,639 INFO [train.py:815] Epoch 1, batch 11, loss[loss=0.4267, simple_loss=0.8533, pruned_loss=9.177, over 5476.00 frames.], tot_loss[loss=0.6242, simple_loss=1.248, pruned_loss=9.267, over 60782.04 frames.], batch size: 17, lr: 3.00e-03
2022-06-08 08:02:24,529 INFO [train.py:815] Epoch 1, batch 12, loss[loss=0.6245, simple_loss=1.249, pruned_loss=9.511, over 5390.00 frames.], tot_loss[loss=0.6242, simple_loss=1.248, pruned_loss=9.287, over 65564.22 frames.], batch size: 49, lr: 3.00e-03
2022-06-08 08:02:25,393 INFO [train.py:815] Epoch 1, batch 13, loss[loss=0.5387, simple_loss=1.077, pruned_loss=9.375, over 5440.00 frames.], tot_loss[loss=0.6176, simple_loss=1.235, pruned_loss=9.294, over 70348.58 frames.], batch size: 31, lr: 3.00e-03
2022-06-08 08:02:41,581 INFO [train.py:815] Epoch 1, batch 14, loss[loss=0.5919, simple_loss=1.184, pruned_loss=9.385, over 5390.00 frames.], tot_loss[loss=0.6158, simple_loss=1.232, pruned_loss=9.3, over 75035.09 frames.], batch size: 49, lr: 3.00e-03
2022-06-08 08:02:42,388 INFO [train.py:815] Epoch 1, batch 15, loss[loss=0.5398, simple_loss=1.08, pruned_loss=9.256, over 5431.00 frames.], tot_loss[loss=0.6106, simple_loss=1.221, pruned_loss=9.297, over 79715.74 frames.], batch size: 62, lr: 3.00e-03
2022-06-08 08:02:55,783 INFO [train.py:815] Epoch 1, batch 16, loss[loss=0.5844, simple_loss=1.169, pruned_loss=9.465, over 5343.00 frames.], tot_loss[loss=0.6089, simple_loss=1.218, pruned_loss=9.308, over 84261.59 frames.], batch size: 33, lr: 3.00e-03
2022-06-08 08:02:56,663 INFO [train.py:815] Epoch 1, batch 17, loss[loss=0.4624, simple_loss=0.9247, pruned_loss=9.312, over 5159.00 frames.], tot_loss[loss=0.6004, simple_loss=1.201, pruned_loss=9.308, over 88577.97 frames.], batch size: 14, lr: 3.00e-03
2022-06-08 08:03:14,726 INFO [train.py:815] Epoch 1, batch 18, loss[loss=0.5623, simple_loss=1.125, pruned_loss=9.351, over 5383.00 frames.], tot_loss[loss=0.5982, simple_loss=1.196, pruned_loss=9.31, over 93075.19 frames.], batch size: 47, lr: 3.00e-03
2022-06-08 08:03:15,588 INFO [train.py:815] Epoch 1, batch 19, loss[loss=0.4958, simple_loss=0.9917, pruned_loss=9.32, over 5322.00 frames.], tot_loss[loss=0.5926, simple_loss=1.185, pruned_loss=9.311, over 97466.44 frames.], batch size: 28, lr: 3.00e-03
2022-06-08 08:03:44,387 INFO [train.py:815] Epoch 1, batch 20, loss[loss=0.5633, simple_loss=1.127, pruned_loss=9.368, over 5469.00 frames.], tot_loss[loss=0.591, simple_loss=1.182, pruned_loss=9.314, over 101960.77 frames.], batch size: 61, lr: 3.00e-03
2022-06-08 08:03:45,262 INFO [train.py:815] Epoch 1, batch 21, loss[loss=0.5749, simple_loss=1.15, pruned_loss=9.378, over 5434.00 frames.], tot_loss[loss=0.5902, simple_loss=1.18, pruned_loss=9.317, over 106375.17 frames.], batch size: 72, lr: 3.00e-03
2022-06-08 08:03:51,698 INFO [train.py:815] Epoch 1, batch 22, loss[loss=0.4955, simple_loss=0.991, pruned_loss=9.392, over 5433.00 frames.], tot_loss[loss=0.5856, simple_loss=1.171, pruned_loss=9.321, over 110744.42 frames.], batch size: 27, lr: 3.00e-03
2022-06-08 08:03:52,595 INFO [train.py:815] Epoch 1, batch 23, loss[loss=0.5053, simple_loss=1.011, pruned_loss=9.519, over 5275.00 frames.], tot_loss[loss=0.5819, simple_loss=1.164, pruned_loss=9.33, over 114911.97 frames.], batch size: 18, lr: 3.00e-03
2022-06-08 08:04:01,234 INFO [train.py:815] Epoch 1, batch 24, loss[loss=0.4291, simple_loss=0.8583, pruned_loss=9.412, over 5441.00 frames.], tot_loss[loss=0.5749, simple_loss=1.15, pruned_loss=9.334, over 119203.85 frames.], batch size: 12, lr: 3.00e-03
2022-06-08 08:04:17,872 INFO [train.py:815] Epoch 1, batch 25, loss[loss=0.5338, simple_loss=1.068, pruned_loss=9.364, over 5457.00 frames.], tot_loss[loss=0.5731, simple_loss=1.146, pruned_loss=9.335, over 123468.81 frames.], batch size: 60, lr: 3.00e-03
2022-06-08 08:04:18,744 INFO [train.py:815] Epoch 1, batch 26, loss[loss=0.4739, simple_loss=0.9479, pruned_loss=9.445, over 5341.00 frames.], tot_loss[loss=0.5689, simple_loss=1.138, pruned_loss=9.34, over 127575.12 frames.], batch size: 25, lr: 3.00e-03
2022-06-08 08:04:32,789 INFO [train.py:815] Epoch 1, batch 27, loss[loss=0.4645, simple_loss=0.929, pruned_loss=9.407, over 5286.00 frames.], tot_loss[loss=0.5647, simple_loss=1.129, pruned_loss=9.342, over 131585.37 frames.], batch size: 20, lr: 3.00e-03
2022-06-08 08:04:33,656 INFO [train.py:815] Epoch 1, batch 28, loss[loss=0.4937, simple_loss=0.9875, pruned_loss=9.484, over 5393.00 frames.], tot_loss[loss=0.5619, simple_loss=1.124, pruned_loss=9.348, over 135662.52 frames.], batch size: 28, lr: 3.00e-03
2022-06-08 08:04:46,499 INFO [train.py:815] Epoch 1, batch 29, loss[loss=0.4878, simple_loss=0.9755, pruned_loss=9.323, over 5469.00 frames.], tot_loss[loss=0.559, simple_loss=1.118, pruned_loss=9.347, over 139774.89 frames.], batch size: 39, lr: 3.00e-03
2022-06-08 08:04:47,382 INFO [train.py:815] Epoch 1, batch 30, loss[loss=0.4376, simple_loss=0.8751, pruned_loss=9.239, over 5087.00 frames.], tot_loss[loss=0.5547, simple_loss=1.109, pruned_loss=9.343, over 143464.15 frames.], batch size: 12, lr: 3.00e-03

When I use num-workers=4 to run again based on one GPU, there are some training logs:
(k2-python) luomingshuang@de-74279-k2-train-2-0602201035-5fb6d86964-mclm7:~/codes/icefall-pruned-rnnt5-aishell4/egs/aishell4/ASR$ CUDA_VISIBLE_DEVICES='4' python pruned_transducer_stateless5/train.py --max-duration 220 --num-workers 4 --exp-dir pruned_transducer_stateless5/exp-one-gpu
2022-06-08 08:05:43,112 INFO [train.py:877] Training started
2022-06-08 08:05:43.287827: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /ceph-sh1/fangjun/software/cuda-10.2.89/lib:/ceph-sh1/fangjun/software/cuda-10.2.89/lib64:
2022-06-08 08:05:43.287867: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
2022-06-08 08:05:45,859 INFO [train.py:887] Device: cuda:0
2022-06-08 08:05:45,916 INFO [lexicon.py:176] Loading pre-compiled data/lang_char/Linv.pt
2022-06-08 08:05:45,924 INFO [train.py:898] {'best_train_loss': inf, 'best_valid_loss': inf, 'best_train_epoch': -1, 'best_valid_epoch': -1, 'batch_idx_train': 0, 'log_interval': 1, 'reset_interval': 100, 'valid_interval': 200, 'feature_dim': 80, 'subsampling_factor': 4, 'model_warm_step': 50, 'env_info': {'k2-version': '1.15.1', 'k2-build-type': 'Release', 'k2-with-cuda': True, 'k2-git-sha1': 'f8d2dba06c000ffee36aab5b66f24e7c9809f116', 'k2-git-date': 'Thu Apr 21 12:20:34 2022', 'lhotse-version': '1.3.0.dev+git.4198446.dirty', 'torch-version': '1.11.0', 'torch-cuda-available': True, 'torch-cuda-version': '10.2', 'python-version': '3.8', 'icefall-git-branch': 'icefall-pruned-rnnt5-aishell4', 'icefall-git-sha1': '296303a-dirty', 'icefall-git-date': 'Tue Jun 7 22:36:20 2022', 'icefall-path': '/ceph-meixu/luomingshuang/icefall', 'k2-path': '/ceph-ms/luomingshuang/k2_latest/k2/python/k2/__init__.py', 'lhotse-path': '/ceph-meixu/luomingshuang/anaconda3/envs/k2-python/lib/python3.8/site-packages/lhotse-1.3.0.dev0+git.4198446.dirty-py3.8.egg/lhotse/__init__.py', 'hostname': 'de-74279-k2-train-2-0602201035-5fb6d86964-mclm7', 'IP address': '<IP_ADDRESS>'}, 'world_size': 1, 'master_port': 12354, 'tensorboard': True, 'num_epochs': 30, 'start_epoch': 1, 'start_batch': 0, 'exp_dir': PosixPath('pruned_transducer_stateless5/exp-one-gpu'), 'lang_dir': 'data/lang_char', 'initial_lr': 0.003, 'lr_batches': 5000, 'lr_epochs': 6, 'context_size': 2, 'prune_range': 5, 'lm_scale': 0.25, 'am_scale': 0.0, 'simple_loss_scale': 0.5, 'seed': 42, 'print_diagnostics': False, 'save_every_n': 4000, 'keep_last_k': 30, 'average_period': 100, 'use_fp16': False, 'num_encoder_layers': 24, 'dim_feedforward': 1536, 'nhead': 8, 'encoder_dim': 384, 'decoder_dim': 512, 'joiner_dim': 512, 'manifest_dir': PosixPath('data/fbank'), 'max_duration': 220, 'bucketing_sampler': True, 'num_buckets': 300, 'concatenate_cuts': False, 'duration_factor': 1.0, 'gap': 1.0, 'on_the_fly_feats': False, 'shuffle': True, 'drop_last': True, 'return_cuts': True, 'num_workers': 4, 'enable_spec_aug': True, 'spec_aug_time_warp_factor': 80, 'enable_musan': True, 'input_strategy': 'PrecomputedFeatures', 'training_subset': 'L', 'blank_id': 0, 'vocab_size': 3284}
2022-06-08 08:05:45,925 INFO [train.py:900] About to create model
2022-06-08 08:05:46,400 INFO [train.py:904] Number of model parameters: 94337552
2022-06-08 08:05:50,115 INFO [asr_datamodule.py:429] About to get train cuts
2022-06-08 08:05:50,118 INFO [asr_datamodule.py:231] About to get Musan cuts
2022-06-08 08:05:50,120 INFO [asr_datamodule.py:238] Enable MUSAN
2022-06-08 08:05:50,228 INFO [asr_datamodule.py:263] Enable SpecAugment
2022-06-08 08:05:50,228 INFO [asr_datamodule.py:264] Time warp factor: 80
2022-06-08 08:05:50,229 INFO [asr_datamodule.py:276] Num frame mask: 10
2022-06-08 08:05:50,229 INFO [asr_datamodule.py:289] About to create train dataset
2022-06-08 08:05:50,229 INFO [asr_datamodule.py:318] Using DynamicBucketingSampler.
2022-06-08 08:05:54,631 INFO [asr_datamodule.py:334] About to create train dataloader
2022-06-08 08:05:54,631 INFO [asr_datamodule.py:437] About to get dev cuts
2022-06-08 08:05:54,633 INFO [asr_datamodule.py:365] About to create dev dataset
2022-06-08 08:05:55,577 INFO [asr_datamodule.py:384] About to create dev dataloader
2022-06-08 08:05:55,578 INFO [train.py:1054] Sanity check -- see if any of the batches in epoch 1 would cause OOM.
2022-06-08 08:10:30,286 INFO [train.py:815] Epoch 1, batch 0, loss[loss=0.9558, simple_loss=1.912, pruned_loss=9.052, over 5285.00 frames.], tot_loss[loss=0.9558, simple_loss=1.912, pruned_loss=9.052, over 5285.00 frames.], batch size: 23, lr: 3.00e-03
2022-06-08 08:10:31,157 INFO [train.py:815] Epoch 1, batch 1, loss[loss=0.7711, simple_loss=1.542, pruned_loss=9.094, over 5263.00 frames.], tot_loss[loss=0.8632, simple_loss=1.726, pruned_loss=9.073, over 10495.15 frames.], batch size: 21, lr: 3.00e-03
2022-06-08 08:10:47,571 INFO [train.py:815] Epoch 1, batch 2, loss[loss=0.8648, simple_loss=1.73, pruned_loss=9.109, over 5434.00 frames.], tot_loss[loss=0.8637, simple_loss=1.727, pruned_loss=9.085, over 15824.20 frames.], batch size: 99, lr: 3.00e-03
2022-06-08 08:10:48,376 INFO [train.py:815] Epoch 1, batch 3, loss[loss=0.6862, simple_loss=1.372, pruned_loss=9.248, over 5430.00 frames.], tot_loss[loss=0.818, simple_loss=1.636, pruned_loss=9.127, over 21095.96 frames.], batch size: 33, lr: 3.00e-03
2022-06-08 08:10:49,258 INFO [train.py:815] Epoch 1, batch 4, loss[loss=0.5969, simple_loss=1.194, pruned_loss=9.258, over 5197.00 frames.], tot_loss[loss=0.774, simple_loss=1.548, pruned_loss=9.153, over 26082.00 frames.], batch size: 16, lr: 3.00e-03
2022-06-08 08:10:50,107 INFO [train.py:815] Epoch 1, batch 5, loss[loss=0.6028, simple_loss=1.206, pruned_loss=9.48, over 5392.00 frames.], tot_loss[loss=0.7444, simple_loss=1.489, pruned_loss=9.21, over 31213.18 frames.], batch size: 18, lr: 3.00e-03
2022-06-08 08:10:57,468 INFO [train.py:815] Epoch 1, batch 6, loss[loss=0.5526, simple_loss=1.105, pruned_loss=9.341, over 5306.00 frames.], tot_loss[loss=0.7163, simple_loss=1.433, pruned_loss=9.229, over 36207.05 frames.], batch size: 22, lr: 3.00e-03
2022-06-08 08:10:58,273 INFO [train.py:815] Epoch 1, batch 7, loss[loss=0.5148, simple_loss=1.03, pruned_loss=9.262, over 5371.00 frames.], tot_loss[loss=0.69, simple_loss=1.38, pruned_loss=9.234, over 41215.97 frames.], batch size: 29, lr: 3.00e-03
2022-06-08 08:11:01,953 INFO [train.py:815] Epoch 1, batch 8, loss[loss=0.4969, simple_loss=0.9939, pruned_loss=9.256, over 5310.00 frames.], tot_loss[loss=0.6678, simple_loss=1.336, pruned_loss=9.236, over 46113.82 frames.], batch size: 18, lr: 3.00e-03
2022-06-08 08:11:02,764 INFO [train.py:815] Epoch 1, batch 9, loss[loss=0.5297, simple_loss=1.059, pruned_loss=9.423, over 5346.00 frames.], tot_loss[loss=0.6533, simple_loss=1.307, pruned_loss=9.256, over 50998.68 frames.], batch size: 25, lr: 3.00e-03
2022-06-08 08:11:08,665 INFO [train.py:815] Epoch 1, batch 10, loss[loss=0.5538, simple_loss=1.108, pruned_loss=9.457, over 5376.00 frames.], tot_loss[loss=0.6437, simple_loss=1.287, pruned_loss=9.275, over 55864.69 frames.], batch size: 37, lr: 3.00e-03
2022-06-08 08:11:09,524 INFO [train.py:815] Epoch 1, batch 11, loss[loss=0.4266, simple_loss=0.8533, pruned_loss=9.177, over 5476.00 frames.], tot_loss[loss=0.6242, simple_loss=1.248, pruned_loss=9.266, over 60782.04 frames.], batch size: 17, lr: 3.00e-03
2022-06-08 08:11:15,845 INFO [train.py:815] Epoch 1, batch 12, loss[loss=0.6245, simple_loss=1.249, pruned_loss=9.511, over 5390.00 frames.], tot_loss[loss=0.6242, simple_loss=1.248, pruned_loss=9.286, over 65564.22 frames.], batch size: 49, lr: 3.00e-03
2022-06-08 08:11:16,639 INFO [train.py:815] Epoch 1, batch 13, loss[loss=0.5386, simple_loss=1.077, pruned_loss=9.375, over 5440.00 frames.], tot_loss[loss=0.6176, simple_loss=1.235, pruned_loss=9.293, over 70348.58 frames.], batch size: 31, lr: 3.00e-03
2022-06-08 08:11:29,614 INFO [train.py:815] Epoch 1, batch 14, loss[loss=0.5918, simple_loss=1.184, pruned_loss=9.385, over 5390.00 frames.], tot_loss[loss=0.6157, simple_loss=1.231, pruned_loss=9.3, over 75035.09 frames.], batch size: 49, lr: 3.00e-03
2022-06-08 08:11:30,393 INFO [train.py:815] Epoch 1, batch 15, loss[loss=0.5396, simple_loss=1.079, pruned_loss=9.256, over 5431.00 frames.], tot_loss[loss=0.6106, simple_loss=1.221, pruned_loss=9.297, over 79715.74 frames.], batch size: 62, lr: 3.00e-03
2022-06-08 08:11:31,175 INFO [train.py:815] Epoch 1, batch 16, loss[loss=0.5844, simple_loss=1.169, pruned_loss=9.466, over 5343.00 frames.], tot_loss[loss=0.6089, simple_loss=1.218, pruned_loss=9.308, over 84261.59 frames.], batch size: 33, lr: 3.00e-03
2022-06-08 08:11:32,022 INFO [train.py:815] Epoch 1, batch 17, loss[loss=0.4623, simple_loss=0.9246, pruned_loss=9.311, over 5159.00 frames.], tot_loss[loss=0.6004, simple_loss=1.201, pruned_loss=9.308, over 88577.97 frames.], batch size: 14, lr: 3.00e-03
2022-06-08 08:11:48,858 INFO [train.py:815] Epoch 1, batch 18, loss[loss=0.5627, simple_loss=1.125, pruned_loss=9.35, over 5383.00 frames.], tot_loss[loss=0.5982, simple_loss=1.196, pruned_loss=9.31, over 93075.19 frames.], batch size: 47, lr: 3.00e-03
2022-06-08 08:11:49,684 INFO [train.py:815] Epoch 1, batch 19, loss[loss=0.4959, simple_loss=0.9917, pruned_loss=9.319, over 5322.00 frames.], tot_loss[loss=0.5926, simple_loss=1.185, pruned_loss=9.311, over 97466.44 frames.], batch size: 28, lr: 3.00e-03
2022-06-08 08:11:50,537 INFO [train.py:815] Epoch 1, batch 20, loss[loss=0.563, simple_loss=1.126, pruned_loss=9.368, over 5469.00 frames.], tot_loss[loss=0.591, simple_loss=1.182, pruned_loss=9.314, over 101960.77 frames.], batch size: 61, lr: 3.00e-03
2022-06-08 08:11:51,418 INFO [train.py:815] Epoch 1, batch 21, loss[loss=0.575, simple_loss=1.15, pruned_loss=9.378, over 5434.00 frames.], tot_loss[loss=0.5902, simple_loss=1.18, pruned_loss=9.317, over 106375.17 frames.], batch size: 72, lr: 3.00e-03
2022-06-08 08:12:00,784 INFO [train.py:815] Epoch 1, batch 22, loss[loss=0.4955, simple_loss=0.991, pruned_loss=9.393, over 5433.00 frames.], tot_loss[loss=0.5855, simple_loss=1.171, pruned_loss=9.321, over 110744.42 frames.], batch size: 27, lr: 3.00e-03
2022-06-08 08:12:01,681 INFO [train.py:815] Epoch 1, batch 23, loss[loss=0.5052, simple_loss=1.01, pruned_loss=9.521, over 5275.00 frames.], tot_loss[loss=0.5819, simple_loss=1.164, pruned_loss=9.33, over 114911.97 frames.], batch size: 18, lr: 3.00e-03
2022-06-08 08:12:04,138 INFO [train.py:815] Epoch 1, batch 24, loss[loss=0.4291, simple_loss=0.8582, pruned_loss=9.416, over 5441.00 frames.], tot_loss[loss=0.5749, simple_loss=1.15, pruned_loss=9.334, over 119203.85 frames.], batch size: 12, lr: 3.00e-03
2022-06-08 08:12:05,003 INFO [train.py:815] Epoch 1, batch 25, loss[loss=0.5337, simple_loss=1.067, pruned_loss=9.363, over 5457.00 frames.], tot_loss[loss=0.5731, simple_loss=1.146, pruned_loss=9.335, over 123468.81 frames.], batch size: 60, lr: 3.00e-03
2022-06-08 08:12:12,781 INFO [train.py:815] Epoch 1, batch 26, loss[loss=0.4739, simple_loss=0.9478, pruned_loss=9.444, over 5341.00 frames.], tot_loss[loss=0.5689, simple_loss=1.138, pruned_loss=9.34, over 127575.12 frames.], batch size: 25, lr: 3.00e-03
2022-06-08 08:12:13,682 INFO [train.py:815] Epoch 1, batch 27, loss[loss=0.4643, simple_loss=0.9287, pruned_loss=9.404, over 5286.00 frames.], tot_loss[loss=0.5647, simple_loss=1.129, pruned_loss=9.342, over 131585.37 frames.], batch size: 20, lr: 3.00e-03
2022-06-08 08:12:17,462 INFO [train.py:815] Epoch 1, batch 28, loss[loss=0.4937, simple_loss=0.9874, pruned_loss=9.483, over 5393.00 frames.], tot_loss[loss=0.5619, simple_loss=1.124, pruned_loss=9.348, over 135662.52 frames.], batch size: 28, lr: 3.00e-03
2022-06-08 08:12:20,571 INFO [train.py:815] Epoch 1, batch 29, loss[loss=0.4876, simple_loss=0.9752, pruned_loss=9.322, over 5469.00 frames.], tot_loss[loss=0.559, simple_loss=1.118, pruned_loss=9.347, over 139774.89 frames.], batch size: 39, lr: 3.00e-03
2022-06-08 08:12:27,676 INFO [train.py:815] Epoch 1, batch 30, loss[loss=0.4398, simple_loss=0.8795, pruned_loss=9.228, over 5087.00 frames.], tot_loss[loss=0.5548, simple_loss=1.11, pruned_loss=9.343, over 143464.15 frames.], batch size: 12, lr: 3.00e-03

I also have a question when I use 4 GPUs for running this recipe, there are 3 GPUs whose utilization is 100% while another GPU's utilization is 0% most of the time. The case is shown as the following picture:

It seems 4 workers is still not enough to saturate the GPUs. You have a few seconds spike of latency every 4 batches. Try increasing it further if your system resources allow.

If 1 GPU is idle, it actually means that all GPUs are idle; the others are just waiting on a spin-lock inside some kernel, waiting to be able to sync the data via nccl.

I'm a little surprised to see (from your screenshot) that it is unzipping data.  Can you tell me what kind of archive you are dealing with here, or what format?  I didn't realize we had any setup where unzipping data is something that the data loaders would do.

Yes, it is the jsonl.gz format.

When I create the WebDataset for testing, I find that the speed of this process is very slow. (The following picture shows that it will take many hours to finish it. The following video is the process of creating webdataset that I use py-spy to look. ) Are there some methods or suggestions to improve the speed?

https://user-images.githubusercontent.com/37799481/172527657-75f0cd88-943b-40d2-9974-a196980b11f7.mp4

So it's the decoding process that is slow?
From the stack traces in the video, it appears to be decoding the audio rather than just loading the features.  Is this expected?
I think if you have just one CPU thread responsible for decoding encoded audio, it's not surprising that that would be slower than ctual decoding on a GPU.

... I am also a bit confused about what decode.py does.  Is that ASR decoding?  Why is it creating  tarball?

Based on the current decode.py in this pr (I remove the Webdataset part), it decode fastly.

In my video, it doesn't run to the decoding process, just the process of creating WebDataset.

So it's the decoding process that is slow? From the stack traces in the video, it appears to be decoding the audio rather than just loading the features. Is this expected? I think if you have just one CPU thread responsible for decoding encoded audio, it's not surprising that that would be slower than ctual decoding on a GPU.

About this pruned_transducer_stateless5 recipe trained with AISHELL4, my best results for testing set are as follows:

epoch
avg
decoding-method
CER(%)

30
25
greedy_search
30.05

30
25
modified_beam_search
29.16

30
25
fast_beam_search
29.20

A baseline result for testing set from (wenet)[https://github.com/wenet-e2e/wenet/tree/main/examples/aishell4/s0] is 32.58%(CER). Our results are better than theirs.

@luomingshuang
Could you also upload a torchscript model to https://huggingface.co/luomingshuang/icefall_asr_aishell4_pruned_transducer_stateless5/tree/main/exp
?
I will add it to https://huggingface.co/spaces/k2-fsa/automatic-speech-recognition
after you upload it.


Add simple prompt https://github.com/sotayamashita/simple

@sotayamashita Great.
Minor grammar point: ...by the @ mathiasbynens's prompt.

@bucaran

Minor grammar point: ...by the @ mathiasbynens's prompt.

thanks. i'll fix it

No problem, it's already fixed :smile: