🐛 [cloud_firestore] Transaction not retrying after concurrent write

Bug report
Describe the bug
In the following code block, I tried to use transactions to prevent concurrent access to my Cloud Firestore database, since it is run on 3 separate clients at approximately the same time. I've organised the code so that the reads happen before the writes, as recommended here
Future<bool> voteToKill(String roomId, String userId, String killId) async {
        DocumentReference docRef = _collectionReference.doc(roomId);
        // Prevent concurrent access during voting with transaction
        // https://firebase.google.com/docs/firestore/manage-data/transactions#dart
        return await FirebaseFirestore.instance
            .runTransaction((transaction) async {
          print('Running transaction');
          var playerSnapshots = await docRef.collection('players').get();
          // READ
          Map<String, List> votesToKillMap = {};
          for (var playerDoc in playerSnapshots.docs) {
            final playerData = (await playerDoc.reference.get()).data();

            votesToKillMap[playerDoc.reference.id] =
                playerData?['votesToKill'] as List;
          }

          print('votesToKillMap retrieved: $votesToKillMap');
          // MODIFY IN CLIENT MEMORY

          for (var votesToKill in votesToKillMap.entries) {
            // If player is not the one that user just voted to kill,
            if (votesToKill.key != killId) {
              // but that player has the user's vote, remove vote
              if (votesToKill.value.contains(userId)) {
                votesToKill.value.remove(userId);
                continue;
              } else {
                continue;
              }
            }

            // If player is the one that user just voted to kill,
            if (votesToKill.key == killId) {
              // and that player already has the user's vote, revoke vote
              if (votesToKill.value.contains(userId)) {
                votesToKill.value.remove(userId);
                continue;
              } else {
                // add vote
                votesToKill.value.add(userId);
                continue;
              }
            }

            throw UnimplementedError();
          }
          print('votesToKillMap modified: $votesToKillMap');
          // WRITE
          for (var playerDoc in playerSnapshots.docs) {
            playerDoc.reference.update({
              'votesToKill': votesToKillMap[playerDoc.reference.id],
            });
          }
        }).then((value) => true);
        print('votesToKillMap written to firestore');
  }

This produces the following output:

Output  (see bold and emphasised text)

// Client 1
Running transaction
votesToKillMap retrieved: {5dXPSuVnwYRrrhvvIneAeB2OWA43: [], N3pH68ldG0QMyH68uXEzRPdrAcv1: [], UZqHjvmLtGYxBmMbHhHnWicLV2o1: [], jtmg6FR040QLTP0I11q3Rmz8JQL2: [], rrdW0TkPVzdPFKmiyELEG0Qm8bi2: []}
votesToKillMap modified: {5dXPSuVnwYRrrhvvIneAeB2OWA43: [], N3pH68ldG0QMyH68uXEzRPdrAcv1: [], **_UZqHjvmLtGYxBmMbHhHnWicLV2o1: [N3pH68ldG0QMyH68uXEzRPdrAcv1],_** jtmg6FR040QLTP0I11q3Rmz8JQL2: [], rrdW0TkPVzdPFKmiyELEG0Qm8bi2: []}
votesToKillMap written to firestore

// Client 2
Running transaction
votesToKillMap retrieved: {5dXPSuVnwYRrrhvvIneAeB2OWA43: [], N3pH68ldG0QMyH68uXEzRPdrAcv1: [], UZqHjvmLtGYxBmMbHhHnWicLV2o1: [N3pH68ldG0QMyH68uXEzRPdrAcv1], jtmg6FR040QLTP0I11q3Rmz8JQL2: [], rrdW0TkPVzdPFKmiyELEG0Qm8bi2: []}
votesToKillMap modified: {5dXPSuVnwYRrrhvvIneAeB2OWA43: [], N3pH68ldG0QMyH68uXEzRPdrAcv1: [], **_UZqHjvmLtGYxBmMbHhHnWicLV2o1: [N3pH68ldG0QMyH68uXEzRPdrAcv1, jtmg6FR040QLTP0I11q3Rmz8JQL2],_** jtmg6FR040QLTP0I11q3Rmz8JQL2: [], rrdW0TkPVzdPFKmiyELEG0Qm8bi2: []}
votesToKillMap written to firestore

// Client 3
Running transaction
votesToKillMap retrieved: {5dXPSuVnwYRrrhvvIneAeB2OWA43: [], N3pH68ldG0QMyH68uXEzRPdrAcv1: [], UZqHjvmLtGYxBmMbHhHnWicLV2o1: [N3pH68ldG0QMyH68uXEzRPdrAcv1], jtmg6FR040QLTP0I11q3Rmz8JQL2: [], rrdW0TkPVzdPFKmiyELEG0Qm8bi2: []}
votesToKillMap modified: {5dXPSuVnwYRrrhvvIneAeB2OWA43: [], N3pH68ldG0QMyH68uXEzRPdrAcv1: [], **_UZqHjvmLtGYxBmMbHhHnWicLV2o1: [N3pH68ldG0QMyH68uXEzRPdrAcv1, 5dXPSuVnwYRrrhvvIneAeB2OWA43],_** jtmg6FR040QLTP0I11q3Rmz8JQL2: [], rrdW0TkPVzdPFKmiyELEG0Qm8bi2: []}
votesToKillMap written to firestore

Client 2 and 3 are reading after Client 1 writes to Firestore, and then they are both trying to read and write concurrently, which causes the incorrect end state in Firestore. I was hoping that this would be caught and the transaction would be rerun, but it does not seem to be the case. Did I miss something?

Expected Output (see bold and emphasised text)

// Client 1
Running transaction
votesToKillMap retrieved: {5dXPSuVnwYRrrhvvIneAeB2OWA43: [], N3pH68ldG0QMyH68uXEzRPdrAcv1: [], UZqHjvmLtGYxBmMbHhHnWicLV2o1: [], jtmg6FR040QLTP0I11q3Rmz8JQL2: [], rrdW0TkPVzdPFKmiyELEG0Qm8bi2: []}
votesToKillMap modified: {5dXPSuVnwYRrrhvvIneAeB2OWA43: [], N3pH68ldG0QMyH68uXEzRPdrAcv1: [], **_UZqHjvmLtGYxBmMbHhHnWicLV2o1: [N3pH68ldG0QMyH68uXEzRPdrAcv1],_** jtmg6FR040QLTP0I11q3Rmz8JQL2: [], rrdW0TkPVzdPFKmiyELEG0Qm8bi2: []}
votesToKillMap written to firestore

// Client 2
Running transaction
votesToKillMap retrieved: {5dXPSuVnwYRrrhvvIneAeB2OWA43: [], N3pH68ldG0QMyH68uXEzRPdrAcv1: [], UZqHjvmLtGYxBmMbHhHnWicLV2o1: [N3pH68ldG0QMyH68uXEzRPdrAcv1], jtmg6FR040QLTP0I11q3Rmz8JQL2: [], rrdW0TkPVzdPFKmiyELEG0Qm8bi2: []}
votesToKillMap modified: {5dXPSuVnwYRrrhvvIneAeB2OWA43: [], N3pH68ldG0QMyH68uXEzRPdrAcv1: [], **_UZqHjvmLtGYxBmMbHhHnWicLV2o1: [N3pH68ldG0QMyH68uXEzRPdrAcv1, jtmg6FR040QLTP0I11q3Rmz8JQL2],_** jtmg6FR040QLTP0I11q3Rmz8JQL2: [], rrdW0TkPVzdPFKmiyELEG0Qm8bi2: []}
votesToKillMap written to firestore

// Client 3
Running transaction
votesToKillMap retrieved: {5dXPSuVnwYRrrhvvIneAeB2OWA43: [], N3pH68ldG0QMyH68uXEzRPdrAcv1: [], UZqHjvmLtGYxBmMbHhHnWicLV2o1: [N3pH68ldG0QMyH68uXEzRPdrAcv1, jtmg6FR040QLTP0I11q3Rmz8JQL2], jtmg6FR040QLTP0I11q3Rmz8JQL2: [], rrdW0TkPVzdPFKmiyELEG0Qm8bi2: []}
votesToKillMap modified: {5dXPSuVnwYRrrhvvIneAeB2OWA43: [], N3pH68ldG0QMyH68uXEzRPdrAcv1: [], **_UZqHjvmLtGYxBmMbHhHnWicLV2o1: [N3pH68ldG0QMyH68uXEzRPdrAcv1, jtmg6FR040QLTP0I11q3Rmz8JQL2, 5dXPSuVnwYRrrhvvIneAeB2OWA43],_** jtmg6FR040QLTP0I11q3Rmz8JQL2: [], rrdW0TkPVzdPFKmiyELEG0Qm8bi2: []}
votesToKillMap written to firestore

Additional context
cloud_firestore: ^4.4.5

Flutter doctor
Run flutter doctor and paste the output below:
Click To Expand
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.7.8, on macOS 13.1 22C65 darwin-x64, locale
    en-SG)
[✓] Android toolchain - develop for Android devices (Android SDK version 32.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 14.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2022.1)
[✓] VS Code (version 1.77.3)
[✓] Connected device (7 available)
[✓] HTTP Host Availability

• No issues found!

Flutter dependencies
Run flutter pub deps -- --style=compact and paste the output below:
Click To Expand
dependencies:
- after_layout 1.2.0 [flutter]
- animations 2.0.7 [flutter]
- cloud_firestore 4.4.5 [cloud_firestore_platform_interface cloud_firestore_web collection firebase_core firebase_core_platform_interface flutter meta]
- common 0.0.1 [atomic flutter go_router provider flutter_dev_utils]
- connectivity_plus 3.0.3 [flutter flutter_web_plugins connectivity_plus_platform_interface js meta nm]
- cupertino_icons 1.0.5
- firebase_auth 4.3.0 [firebase_auth_platform_interface firebase_auth_web firebase_core firebase_core_platform_interface flutter meta]
- firebase_core 2.8.0 [firebase_core_platform_interface firebase_core_web flutter meta]
- flutter 0.0.0 [characters collection js material_color_utilities meta vector_math sky_engine]
- flutter_dev_utils 0.0.3 [flutter logger]
- flutter_form_builder 7.7.0 [flutter intl collection]
- flutter_typeahead 4.3.1 [flutter flutter_keyboard_visibility]
- form_builder_validators 8.4.0 [flutter flutter_localizations intl]
- get_it 7.2.0 [async collection]
- go_router 6.5.5 [collection flutter flutter_web_plugins logging meta]
- google_fonts 3.0.1 [flutter http path_provider crypto]
- google_sign_in 5.4.4 [flutter google_sign_in_android google_sign_in_ios google_sign_in_platform_interface google_sign_in_web]
- injectable 2.1.0 [get_it]
- package_info_plus 3.0.3 [ffi flutter flutter_web_plugins http meta path package_info_plus_platform_interface win32]
- provider 6.0.5 [collection flutter nested]
- responsive_framework 0.2.0 [flutter collection]
- simple_icons 7.10.0 [flutter]
- store_redirect 2.0.1 [flutter]
- tuple 2.0.1
- unique_names_generator 1.0.0

EDIT: incomplete information and removed third party package

Thanks for the report @juskek
Can you take a look at https://stackoverflow.com/questions/42071051/dart-how-to-manage-concurrency-in-async-function and see if it helps in your case ?

Thanks for the report @juskek Can you take a look at https://stackoverflow.com/questions/42071051/dart-how-to-manage-concurrency-in-async-function and see if it helps in your case ?

Hi Darshan, thanks for the quick reply!
Correct me if I am wrong, but it seems like the problem and solution here is with regards to managing concurrency on the same client, where resources within the Dart class may be accessed concurrently.
I think I am facing an issue with concurrent access to Cloud Firestore, by separate Dart clients, e.g. iPhone 1, iPhone 2, iPhone 3 are calling voteToKill(), which is reading and writing to Cloud Firestore concurrently.

Thanks for the update. Would be good to provide a complete minimal reproducible code sample along with steps to replicate so that we can analyze it further.

Hi Darshan, I was being silly; should have been using the transaction object to call .get() and .update().
Here is the corrected code:
Future<bool> voteToKill(String roomId, String userId, String killId) async {
        DocumentReference docRef = _collectionReference.doc(roomId);
        // Prevent concurrent access during voting with transaction
        // https://firebase.google.com/docs/firestore/manage-data/transactions#dart
        return await FirebaseFirestore.instance
            .runTransaction((transaction) async {
          print('Running transaction');
          var playerSnapshots = await docRef.collection('players').get();
          // READ
          Map<String, List> votesToKillMap = {};
          for (var playerDoc in playerSnapshots.docs) {
            final playerData = (await transaction.get(playerDoc.reference)).data();
            // DO NOT CALL GET WITHOUT TRANSACTION OBJECT:
            // final playerData = (await playerDoc.reference.get()).data();

            votesToKillMap[playerDoc.reference.id] =
                playerData?['votesToKill'] as List;
          }

          .
          // WRITE
          for (var playerDoc in playerSnapshots.docs) {
            transaction.update(playerDoc.reference, {
                'votesToKill': votesToKillMap[playerDoc.reference.id],
            });
            // DO NOT CALL UPDATE WITHOUT TRANSACTION OBJECT
            // playerDoc.reference.update({
            //   'votesToKill': votesToKillMap[playerDoc.reference.id],
            // });
          }
        }).then((value) => true);
        print('votesToKillMap written to firestore');
  }


NTR: new term "Frameshift detected" under qc issues

PHA4GE QC Contextual Data Tag Specification - New Term Request (NTR)
May request multiple terms in a single issue - delete the fields irrelevant to your request.
We're annotating some PHAC datasets for public repo upload and want to use the PHA4GE QC tags but some of the genomes in our datasets have detected frameshifts reducing the overall quality. There doesn't seem to be an appropriate term for frameshifts in the quality control issues field. I had a chat with Emma Griffiths and we think a new term is needed to tag such genomes, details can be viewed below.
New Field(s)
Label:
Definition/Description:
Definition Source:
Synonyms or alternative labels:
Additional Comments (not an annotation):
Picklist Item(s)
Associated Field(s): quality control issues
Parent Term: Not Applicable
Label: Frameshift detected
Definition/Description: The identification of frameshift mutations resulting in reduced overall genome quality.
Definition Source (reference, website): Emma Griffiths
Synonyms or alternative labels: Not Applicable
Additional Comments: Not Applicable

Contributor Attribution: {Optional - ORCiD is preferred}
Thanks!

New "quality control issues" tag added: excess frameshift mutations detected [GENEPIO:0100751]


Update ru.coffee

Coverage remained the same at 62.221% when pulling 26f2824fffafcf4190446bb61b75f7ea641a3bde on Bryukh-patch-ru into e4d384f2119cf221be414908067045f09b21e778 on master.


[BUG] Current implementation of auto-tune switch doesn't work correctly

Describe the bug
I tried running a scan with auto-tune switch on a target that allows maximum of 300 req/s. With auto-tune feroxbuster was trying to do almost 4k req/s. As a result it was receiving tons of 429 and still decided it's good idea to "increase speed" I let it run for around 30 seconds (to not overburden the target ) but speed kept on oscillating around 3.5k req/s. At the same I had no way to "hint" the app about max rate as --rate-limit option doesn't work with --auto-tune. I attach a screen shot of my scan.

i recently reworked the auto-tune logic so that it's more aggressive about returning to a faster speed. It'll check every --timeout / 2 seconds whether the # of 429s/errors has increased or not and adjust based off that. auto-tune always tries to work itself back to an unlimited scan, which may not be the best solution. It doesn't have the concept of 'locking in' a rate (i.e. 300 req/s).
as a test, you could also try a longer span between rate adjustments by increasing the timeout, to see how it affects behavior. it would give it more time to 'see' the additional 429s
currently, --auto-tune and --rate-limit are mutually exclusive. would being able to use --rate-limit as a maximum value for --auto-tune address your issue?

ref: https://epi052.github.io/feroxbuster-docs/docs/examples/auto-tune/


#373 Focus issues fixes

Remove existing workaround
Stop windows deleting and re-adding border, which is causing focus loss as elements get dettached to the current view
#373

Thanks for your contribution, there was a bug in the border on windows and color couldn't be changed, that's why I re-created border in a windows specific code. Since this MAUI bug is resolved, this PR makes sense.

Makes sense, I was wondering what it was, figured it must have been something weird and you would test before merging

Yes I tested before merging and works perfectly, thanks for your contribution 🎉


I want to write a while_loop in while_loop. Does anyone know how write it correctly or have some examples?

NOTE: Only file GitHub issues for bugs and feature requests.  All other topics will be closed.
For general support from the community, see StackOverflow.
To make bugs and feature requests more easy to find and organize, we close issues that are deemed
out of scope for GitHub Issues and point people to StackOverflow.
For bugs or installation issues, please provide the following information.
The more information you provide, the more easily we will be able to offer
help and advice.
What related GitHub issues or StackOverflow threads have you found by searching the web for your problem?
Environment info
Operating System:
Installed version of CUDA and cuDNN:
(please attach the output of ls -l /path/to/cuda/lib/libcud*):
If installed from binary pip package, provide:

A link to the pip package you installed:
The output from python -c "import tensorflow; print(tensorflow.__version__)".

If installed from source, provide

The commit hash (git rev-parse HEAD)
The output of bazel version

If possible, provide a minimal reproducible example (We usually don't have time to read hundreds of lines of your code)
What other attempted solutions have you tried?
Logs or other output that would be helpful
(If logs are large, please upload as attachment or provide link).

Please check out StackOverflow for community support. We try to keep this issue tracker focused on bugs and feature requests.


Personal Conversation Schema proposal

Thought about putting this into a PR but am not sure if you plan to make a 2.0 install file. So for now I'll just put this in an issue and close it in favor of #1980 after this has been reviewed and stuff can be submitted.
public function table_personal_conversations()
{
    return $this->table->create_table('{db_prefix}personal_conversations',
        array(
            array('name' => 'id_pc',             'type' => 'int', 'size' => 10, 'unsigned' => true, 'auto' => true),
            array('name' => 'id_member_started', 'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'id_member_updated', 'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'time_updated',      'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'reply_count',       'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'id_msg_first',      'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'time_msg_first',    'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'id_msg_last',       'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'time_msg_last',     'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'locked',            'type' => 'tinyint', 'size' => 3, 'unsigned' => true, 'default' => 0),
            array('name' => 'invites_open',      'type' => 'tinyint', 'size' => 3, 'unsigned' => true, 'default' => 0),
        ),
        array(
            array('name' => 'id_pc',      'columns' => array('id_pm'), 'type' => 'primary'),
            array('name' => 'id_member',  'columns' => array('id_member_started'), 'type' => 'key'),
            array('name' => 'time_first',    'columns' => array('time_msg_first'), 'type' => 'key'),
            array('name' => 'time_last',    'columns' => array('time_msg_last'), 'type' => 'key'),
        ),
        array(),
        'ignore'
    );
}

public function table_pc_recipients()
{
    return $this->table->create_table('{db_prefix}pc_recipients',
        array(
            array('name' => 'id_pc',     'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'id_member', 'type' => 'mediumint', 'size' => 8, 'unsigned' => true, 'default' => 0),
            array('name' => 'labels',    'type' => 'varchar', 'size' => 255, 'default' => -1),
            array('name' => 'time_read', 'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'last_read', 'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'status',    'type' => 'tinyint', 'size' => 3, 'unsigned' => true, 'default' => 0),
        ),
        array(
            array('name' => 'id_pc_member', 'columns' => array('id_pc', 'id_member'), 'type' => 'primary'),
            array('name' => 'id_member_pc', 'columns' => array('id_member', 'status', 'id_pc'), 'type' => 'unique'),
        ),
        array(),
        'ignore'
    );
}

public function table_pc_messages()
{
    return $this->table->create_table('{db_prefix}pc_messages',
        array(
            array('name' => 'id_pm',          'type' => 'int', 'size' => 10, 'unsigned' => true, 'auto' => true),
            array('name' => 'id_pc',          'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'poster_time',     'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'id_member',       'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'id_pm_modified',  'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'subject',         'type' => 'varchar', 'size' => 255, 'default' => ''),
            array('name' => 'poster_name',     'type' => 'varchar', 'size' => 255, 'default' => ''),
            array('name' => 'poster_email',    'type' => 'varchar', 'size' => 255, 'default' => ''),
            array('name' => 'poster_ip',       'type' => 'varchar', 'size' => 255, 'default' => ''),
            array('name' => 'smileys_enabled', 'type' => 'tinyint', 'size' => 4, 'default' => 1),
            array('name' => 'modified_time',   'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'modified_name',   'type' => 'varchar', 'size' => 255, 'default' => ''),
            array('name' => 'body',            'type' => 'mediumtext'),
            array('name' => 'icon',            'type' => 'varchar', 'size' => 16, 'default' => 'xx'),
        ),
        array(
            array('name' => 'id_pm',        'columns' => array('id_pm'), 'type' => 'primary'),
            array('name' => 'id_pc',        'columns' => array('id_pc', 'id_pm'), 'type' => 'unique'),
            array('name' => 'id_member',     'columns' => array('id_member', 'id_pm'), 'type' => 'unique'),
            array('name' => 'ip_index',      'columns' => array('poster_ip(15)', 'id_topic'), 'type' => 'key'),
            array('name' => 'related_ip',    'columns' => array('id_member', 'poster_ip', 'id_pm'), 'type' => 'key'),
        ),
        array(),
        'ignore'
    );
}

Honestly I'm not sure why the install has the version number in it, it should not...
Anyway, the 1_1 will become 2_0 and that's all there is to it.
I like the schema, it's something like what I started in the past, but never finished.
Mine was a bit more convoluted, with the option to "invite" new members to a convo, but the intentional limitation of allowing them to see only the messages since their joining.
Have you considered inviting/kicking/leaving conversations?
I think it may be worth a try. Yes, it makes things a bit more complex, but in today chat systems, it would look natural I guess.
I would suggest something along the line:
public function table_pc_participation_log()
{
    return $this->table->create_table('{db_prefix}pc_participation_log',
        array(
            array('name' => 'id_pc',          'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'id_member',       'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'id_pm',  'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
            array('name' => 'action',         'type' => 'varchar', 'size' => 255, 'default' => ''),
            array('name' => 'action_time',   'type' => 'int', 'size' => 10, 'unsigned' => true, 'default' => 0),
        ),
        array(
            array('name' => 'action_index',        'columns' => array('id_pc', 'id_member', 'id_pm', 'action'), 'type' => 'key'),
            array('name' => 'ids_index',        'columns' => array('id_pc', 'id_member', 'id_pm'), 'type' => 'key'),
        ),
        array(),
        'ignore'
    );
}

Just a stub, I didn't put that much thought in it.
"action" would be some keyword like (joined, left, kicked, invited, accepted). The reason for the indexes... I'm not even sure action_index is really needed, while the other should help with the JOIN on other tables (I guess).
If you think it's something worth the time, then I would say the only one allowed to invite/kick should be the owner of the conversation that is the initiator, otherwise it would require another layer of permissions assignable at the conversation level that I feel would become quite easily a mess...
That said, I'm not sure if what I proposed is really in scope of the "conversations" that could happen via "personal messages" in a forum.

Dammit, sorry for closing it!

Have you considered inviting/kicking/leaving conversations?

Yes, the invites_open determines if the author or others can invite. 0 - only admins with override can invite. 1 - only author or admins with override can invite. 2 - any conversation member can invite.
The status column determines if a conversation has been left/hidden, stickied, or ignored.
Another column, can_kick, could allow the author to kick people or not if they have the permission. Again, 0 - only for admins with the override permission, 1 - the author can kick participants.
Voting for kicks/invites should be a 2.1 thing. We're already well in advance of Xenforo's offering here.
A part of me wants to also denormalize the labels system, as it does rather suck.

/me is blind xD
hmm... I'm not convinced about giving special permissions in this case to admins. The reason is mostly psychological: every so often people participating in forums raise the question "can the admin see my conversations?" (to which the answer is "anybody with access to the database can see them"), mentioning admins with the risk of the word slip into the documentation or somewhere would make it confusing (I know... I'm also pretty sure the intention is not to have the fact that admins can manage members, but I'm also pretty sure one way or another it will end up around) for people that will start thinking admin can manage the participants to any  conversation, and as a consequence they can see the conversations.
And anyway, the permission for admins would apply only to the conversations they are participating to, so it would create two types of conversations (those in which an admin con "do something" and all the others), making it even more confusing.
And the reason for the log, was to actually show when a certain person was invited/kicked/etc from the conversation, to make it more transparent to all the participants.

A part of me wants to also denormalize the labels system, as it does rather suck.

heh.
Well... since the direction is towards conversations, TBH I'm not even sure labels are actually useful at all. And anyway I wonder if they should (still) apply to each single message, or to a conversation.
This is another can of worms. :laughing:

A part of me wants to also denormalize the labels system, as it does rather suck.

That is the nicest thing ever said about the labels system !

TBH I'm not even sure labels are actually useful at all.

My forum members would castrate you for saying such a thing. We are going on twelve million pms.
A threadmark/bookmark system for individual posts/pms would be a different concept. It's really popular and I've been asked to extend XF's bookmarks system to PMs on my Xenforo forum.

Vekseid wrote on 03/11/2019 02:39:

TBH I'm not even sure labels are actually useful at all.

My forum members would castrate you for saying such a thing.

LOL
/me runs!


Bump BlockScout version & deps and enable 18.04 support

Purpose

This change fixes a list of (known bugs) bugs that we discovered running blockscout in production on Azure.
Changes:

bump blockscout and deps to a more stable plus recent version
the installer supports 16.04 and 18.04 VMs now

Does this introduce a breaking change?

[ ] Yes
[X] No

Pull Request Type
What kind of change does this Pull Request introduce?

[X] Bugfix
[X] Feature
[ ] Code style update (formatting, local variables)
[ ] Refactoring (no functional changes, no api changes)
[ ] Documentation content changes
[ ] Other... Please describe:

How to Test
Follow the existing instructions on https://github.com/Azure-Samples/blockchain/tree/master/ledger/template/ethereum-on-azure/technology-samples/blockscout and adapt the changes to the installer contained in this pull request

Test the code

Open the explorer page.

What to Check
Verify that the following are valid

The explorer page opens and transactions are indexed.

Other Information

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.:x: marsmensch sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.

A short update. I have removed all ancient dependency settings yesterday and successfully tested the installation on an Ubuntu 18.04 LTS VM deployed via Azure.
They are meaningless anyway since after each VM update the dependencies (erlang, elixir) would havee been overwritten anyway. Right now the installer deploys blocscout from github master.
Please let me know if i should:

squash my existing changes
checkout a specific github hash


models support Russian doll caching?

Will the upcoming Laravel Framework support Russian Doll caching? I saw a old issues thread that had been closed from a year or so ago, I wanted to know if this is going to be pushed into Laravel 5, as it's very effective in Rails.

This is probably something for you to implement in your own app. Repositories can be very good for this sort of thing. You can wrap your eloquent repository in a caching repository.


Pycrypto issue

The requirements.txt suggest installing pycrypto, which results in the following error when performing a scan:
AttributeError: module 'time' has no attribute 'clock'

According to this issue pycrypto is dead. I solved the issue by installing a fork:
pip3 uninstall pycrypto
pip3 install -U pycryptodome

pip install pycryptodome==3.4.3
should solve the issue.

Thanks @sidh104! :) I merge them into a single discussion thread


Releasing this in 1.3.1 right now. Thanks @mheptinstall for the fix!

Releasing this in 1.3.1 right now. Thanks @mheptinstall for the fix!


Chapter 5 scripts: no load_pdbbind() attribute in version 2.1.0 of deepchem with python2.7

The two sample scripts for chapter 5 are not working with deepchem version 2.1.0 running with python2.7 on a Mac Mojave.
Traceback (most recent call last):
File "./pdbbind_nn.py", line 5, in
pdbbind_tasks, pdbbind_datasets, transformers = dc.molnet.load_pdbbind(featurizer="grid", split="random", subset="core")
AttributeError: 'module' object has no attribute 'load_pdbbind'
I get the same error with the other file.
There is an attribute load_pdbbind_grid().

pdbbind_tasks, pdbbind_datasets, transformers = dc.molnet.load_pdbbind_grid(split='random', featurizer='grid', subset='core', reload=True)
Loading dataset from disk.
TIMING: dataset construction took 0.031 s
Loading dataset from disk.
TIMING: dataset construction took 0.191 s
Loading dataset from disk.
TIMING: dataset construction took 0.022 s
Loading dataset from disk.
Traceback (most recent call last):
File "", line 1, in
TypeError: 'NoneType' object is not iterable

I am stuck.

Could you upgrade to DeepChem 2.2? The book scripts are intended to be run with 2.2 and later versions of DeepChem.

Thank you for the suggestion.
After removing macports from my path, I was able to install deepchem with python3.5 from source after running the bash script. The code in question is now starting to download a 2GB file.
Please note that the version number in deepchem/init.py in GitHub is 2.1.1. when maybe it should be 2.2.1.

You can close this issue.


Generate service class with constructors that allow injection of executor configuration

This change is to enable use cases that require more fine grained configuration of the execuors.

This PR depends on  finos/legend-engine#495

Replaced by #358


Add MoonLana Token

[ ] I will not ping the Discord about this pull request.

Please provide the following information for your token.
Please include change to the src/lib/.json and in the PR
At minimum each entry should have

Token Address: AMdnw9H5DFtQwZowVFr4kUgSXJzLokKSinvgGiUoLSps
Token Name: MoonLana
Token Symbol: MOLA
Logo: https://i.ibb.co/NtrSyDc/moonlana.jpg
Link to the official homepage of token: https://moonlana.com/

@garious hello, when could this change be integrated into the main branch?

@bartosz-lipinski hello, when could this change be integrated into the main branch?

 We can dl it😎😍


Receiving ClassCastException exception when using PushModalAsync for a page wrapped in a NavigationPage

I'm experiencing a problem when i'make a modal navigation to a form page from the map page.
Even has an open bug for Xamarin, about the problem.
https://bugzilla.xamarin.com/show_bug.cgi?id=43692
I believe that is not associated with this component, but if you can help me will be of great value.
Thank you.

The following repository with project with the reproduction of the error:
Use version Android
https://github.com/izefler/PrismUnityApp1

I reproduced too.
I think this is not associated with this component as you said.
I tried to debug with X.F.GoogleMaps source code, but debugger does not stop into my code.
I will watch bugzilla and X.F.Maps original code.
If I found solution then apply X.F.GoogleMaps.

Thanks for the feedback.
Actually the problem is reallocated to XF, and I did not get the problem, a bug was opened in Xamarin matins, and to get around the problem, I changed my browsing strategy.


How to avoid single point of failure

Hi Walkor,
I want to avoid single point of failure so need to understand:
Suppose if the Registers goes down then what will happen to the existing connection and new connection? Also if we restart the Register then all the previous connections will be lost?
What will happen if one Business worker crashes? How are Gateway workers forwarded to another Business worker?
Regards,
Narottam

Hi nskushwah
Here are the answers https://github.com/walkor/GatewayWorker/issues/83#issuecomment-990667859 .

Thanks


[feature] Add client versions statistics to Prometheus exporters

The first 8 bytes of a client's peer_id will typically include information about what client/version that peer is running.
Is it possible to include statistics about how many peers are connected with a specific version of a client?
bittorrent-tracker currently exposes this data in its stats page in this format

Edit: For aquatic-ws and aquatic-http, it might be best to also collect the same data, but with user-agent.

https://github.com/webtorrent/bittorrent-peerid/blob/master/index.js#L248

Code in https://github.com/greatest-ape/aquatic/pull/141 is ready to try out (for aquatic_udp)!

Code in #141 is ready to try out (for aquatic_udp)!

I'll make sure to test it out when I get the chance. I currently only use aquatic_ws, but I'll see if I can spin up a udp instance and take it for a spin ;)

Alright, great!

I’ve merged support for udp and ws.
If someone is using the http implementation in at least semi-production and needs this feature, please comment or open a new issue and I’ll consider it.


Add missing Tag attributes for Angular

Add missing attributes added in CCA PR #2279
Referencing #134, to mark Tag as complete

Hello @Akshat55,
I had some curiosities (some of which aren't strictly about this particular issue) I was hoping you could clarify.
Between the Angular and React implementations of Carbon Design System, I noticed not all components have feature parity. The Accordion has one obvious example. The React version supports isFlush, which applies some stylistic tweaks. The Angular version doesn't have such an input at all.
Another more subtle example is Button. The Angular version supports assistiveTextPlacement, yet the React version (presumably) supports this as tooltipPosition (or it may be something else entirely). In such cases, are you expecting this project to churn out the minimum common subset of supported attributes and ignore those which aren't universal?
Specifically about a-tag.tsx, why does the Angular code export choose to include code which covers the close event emitter, yet the React version doesn't include any boilerplate for the onClose handler? (I assume this might just be for convenience.)
I can try make some changes if I understand the direction of this project a bit more.

Hi @miqh,
isFlush property was added in Carbon v11, currently Angular implementation (master branch) is using Carbon v10. Same applies to the button and tooltip positions. As for this reason, this project only supports Carbon v10 currently. You can find the storybook for Carbon v10 for react here & the implementation here.
So for this issue, you'd have to update the angular code export in a-tag.tsx. Based on the comment, it seems to be already there 😆 so the comments can now be removed.
Yes, there should be a event emitted for onClose. which should be added. @zvonimirfras Any thoughts on how onClose should be added? I'm thinking something similar to a-checkbox.tsx.

Thanks for the feedback & suggestion, much appreciated! Not sure why you add to install CRA & sass globally though... will have someone take a look at this. However, feel free to contribute a fix for setting environment variables in windows!

Appreciate the insight @Akshat55.
Ah, I wasn't aware that the Angular implementation targeted an older version of Carbon Design System. I've only just located the implementation-agnostic documentation for it here.
More broadly, can one expect that the React implementation for v10 is complete? (i.e. Adheres to all features explained by the design documentation.) If it is, then I can use this fact to also background check if any Angular component implementations are missing functionality that's otherwise expected.
When I find some time I'll try get around to making some changes to address the consistency of code exports across various components here.

I can also double-check what I said about running a fresh setup of this project on a Windows machine. I'm pretty sure the environment variable issue I pointed out still stands as a problem regardless.

Closed in #166


Design visual merge modal window

More mocks in .../webapp/Merge-tables/

Love the icons, dude, they are pretty good. Not sure if the spatial one is reflecting anything spatial but it works.
The first screen looks very empty, don't you think?
In general I think that we are loosing a beautiful opportunity to explain how a merge works.

1 to the third point
"In general I think that we are loosing a beautiful opportunity to explain how a merge works."
i think we need something different


Is there a bug in multibox_loss.py?

when I train the model, there is a bug in layers/modules/multibox_loss.py
In line 97, loss_c[pos]=0, the shape of mask [32,8732] ar index 0 not match the shape of the indexed tensor [270424,1] at index 0.

modification places are Line 90 and Line 111
change
loss_l = F.smooth_l1_loss(loc_p, loc_t, size_average=False)
to
loss_l = F.smooth_l1_loss(loc_p, loc_t, reduction='sum')

train.py: line 188, should also change
from
print('iter ' + repr(iteration) + ' || Loss: %.4f ||' % (loss.data[0]), end=' ')
to
print('iter ' + repr(iteration) + ' || Loss: %.4f ||' % (loss.item()), end=' ')

This problem may be caused by the version of pytorch
here is the solution
1.add code before 'loss_c[pos] = 0' at multibox_loss.py
loss_c = loss_c.view(pos.size()[0], pos.size()[1])
loss_c[pos] = 0 # filter out pos boxes for now
2.at train.py
change
loc_loss += loss_l.data[0]
conf_loss += loss_c.data[0]
to:
loc_loss += loss_l.item()
conf_loss += loss_c.item()
3. and mybe there will be a warning:
UserWarning: size_average and reduce args will be deprecated, please use reduction='sum' instead.
warnings.warn(warning.format(ret))
change
size_average=False
to
reduction='sum'
reference
https://blog.csdn.net/qq_30614451/article/details/100137358

GREAT CSDN!!!

when I train the model, there is a bug in layers/modules/multibox_loss.py
In line 97, loss_c[pos]=0, the shape of mask [32,8732] ar index 0 not match the shape of the indexed tensor [270424,1] at index 0.

Just changing the code order of line 97 and 98, it would work


Social Media Images and Font Edits

This PR changes hold some edits I made to the overall appearance of the portfolio website. I've listed them below:

Edit the font

Delete / Renamed / Edited images

Added movie quotes to the random movie quote button

I think i may have undid the correct formatting. Fixing it now!


Add support for wildcard in app ID

Proposed Changes
Add support for wildcard in app ids
Related Issues

#537
main idea from @ztrhgf. Thanks ;)

@ztrhgf feel free to add any review, that's your piece of work 😊

thanks!

thank you

Should also fix #548


splice_ad AD-A1 vectors have encoding artefacts rendering QR codes difficult to read in test recordings

New versions of splice_ad vectors are needed, so the QR codes are less difficult to read.
Currently they have some encoding artefacts (macroblocking), which render some of the QR codes more difficult to read, especially in device screen recordings.
Applies to all 3 framerate families.
Examples:

Could you please test with the new URL (2023-91-01 batch) and confirm it works for you?

@nicholas-fr Please can you check if these new batches appear OK.

Is there an encrypted version of this as well? Does that have the same issues? The results suggest it might.

I re-regenerated all the stream (so that includes also the encrypted ones + ss1 + chunked).

The re-encoded streams resolve #63.
The splice_* streams were not regenerated, but I assume the same fix will work equally well for them.

They were:

https://dash.akamaized.net/WAVE/vectors/cfhd_sets/12.5_25_50/splice_ad/2023-09-01
https://dash.akamaized.net/WAVE/vectors/cfhd_sets/12.5_25_50/splice_ad-cenc/2023-09-01
https://dash.akamaized.net/WAVE/vectors/cfhd_sets/12.5_25_50/splice_main/2023-09-01
https://dash.akamaized.net/WAVE/vectors/cfhd_sets/12.5_25_50/splice_main-cenc/2023-09-01

Thanks, I was indeed looking in the wrong place....
I've checked splice_ad and splice_main and they look OK.

Closing as I have a recording with the correct content.


Fixed #24381 -- removed ForeignObjectRel opts and to_opts

These cached properies were causing problems with pickling, and in
addition they were confusingly defined: field.rel.model._meta was
not the same as field.rel.opts.
Instead users should now use field.rel.related_model._meta inplace of
field.rel.opts, and field.rel.to._meta in place of field.rel.to_opts.

Merged in f95122e541df5bebb9b5ebb6226b0013e5edc893 with test added.


Applying 'meas_filter.apply' on job with parameter

Right now, if I apply 'meas_filter.apply' on a job with parameter, such as:
   job = execute(qc,
              backend=backend, initial_layout=initial_layout, shots=shots,
              parameter_binds=[{t2: t2_val} for t2_val in theta2])

it returns
QiskitError: 'Unrecognized type for raw_data.'
Is it possible that I can apply error mitigation on this type of job? Thanks!

Are you applying meas_fitter to the IBMQJob or the Result? ie are you doing meas_filter.apply(job.result())?

Are you applying meas_fitter to the IBMQJob or the Result? ie are you doing meas_filter.apply(job.result())?

I'm sorry.


api.PresignedPostPolicy() > Don't make request to minio if it's not needed

Please resubmit PRs to master branch, release branch is only to cherry-pick changes for release.


Playable Synthetics

This PR adds synthetics as a playable race - but doesn't make them available to play.

No passive healing
Can't be cloned

In theory we can make an 'unbrained' synthetic printable from lathes and let people slot mmis and posibrains into them, but I don't want to test that right now.

+1 Literally the androids from TGMC???

Watch as the Hog gorges itself on my teats despite his cries of hatred..


Cannot find "getindex" on network -> XHR

It seems I can only find "getdashinfoxxx" and "proxy?xxx" on my XHR tag. Is there other ways to find the containder id? Thankss

It seems I can only find "getdashinfoxxx" and "proxy?xxx" on my XHR tag. Is there other ways to find the containder id? Thankss

Hi, I could not reproduce your issue. I don't have "getdashinfoxxx" and "proxy?xxx" in XHR, so I am not sure if those tags contain the USER_URL information.
My suggestion is to open the homepage of a weibo user, e.g. 'https://m.weibo.cn/u/3347059490' and follow the comments of code from line 81 to line 86 to find 'getIndex...'
Regards,
He

Thanks a lot! I now understand the problem, and it seems to exist not on
all weibo accounts. I tried the weibo account in your code example, and it
works pretty well.
On Sun, Sep 6, 2020, 3:17 PM He Zhang<EMAIL_ADDRESS>wrote:

It seems I can only find "getdashinfoxxx" and "proxy?xxx" on my XHR tag.
Is there other ways to find the containder id? Thankss
Hi, I could not reproduce your issue. I don't have "getdashinfoxxx" and
"proxy?xxx" in XHR, so I am not sure if those tags contain the USER_URL
information.
My suggestion is to open the homepage of a weibo user, e.g. '
https://m.weibo.cn/u/3347059490' and follow the comments of code from
line 81 to line 86 to find 'getIndex...'
Regards,
He
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/HeZhang1994/weibo-crawler/issues/13#issuecomment-687890306,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ANS2YMADDYTHSB743ZRD5DTSEPU63ANCNFSM4Q3HRLOQ
.

Thanks a lot! I now understand the problem, and it seems to exist not on all weibo accounts. I tried the weibo account in your code example, and it works pretty well.
…
On Sun, Sep 6, 2020, 3:17 PM He Zhang @.***> wrote: It seems I can only find "getdashinfoxxx" and "proxy?xxx" on my XHR tag. Is there other ways to find the containder id? Thankss Hi, I could not reproduce your issue. I don't have "getdashinfoxxx" and "proxy?xxx" in XHR, so I am not sure if those tags contain the USER_URL information. My suggestion is to open the homepage of a weibo user, e.g. ' https://m.weibo.cn/u/3347059490' and follow the comments of code from line 81 to line 86 to find 'getIndex...' Regards, He — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub <#13 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/ANS2YMADDYTHSB743ZRD5DTSEPU63ANCNFSM4Q3HRLOQ .

Great!


What is the difference between isort and this repo

Are there any advantages to use this repo over isort?

isort and usort perform the same basic function, but usort's main goal is to Do The Right Thing (or close to it) without additional directives.  There are some examples in the first couple paragraphs of https://github.com/facebookexperimental/usort#readme
that demonstrate how it avoids some classes of behavior changes that tools like isort can cause.
If there are specific questions that are not addressed in the readme, I'm happy to take a look.

A more explicit comparison is now available as part of the "Why µsort?" page: https://usort.readthedocs.io/en/latest/why.html


Redirect '/artist-invites' to '/invites'

          1 Warning

:warning:
Please provide a linked tracker story for this PR in the description

  Generated by :no_entry_sign: Danger


Fix NoSuchElementException in notification content plugin

Task/Issue URL: https://app.asana.com/0/488551667048375/1203928902312895/f
Description
See asana task for description
Steps to test this PR
AppTP Notifications

[ ] fresh install from this branch
[ ] launch app and enable AppTP
[ ] verify ongoing notification shows and text is Scanning for tracking activity… beep… boop
[ ] open any one app that tracks
[ ] verify ongoing notification shows and text is Tracking attempts blocked in 1 app (past hour).
[ ] open any second app that tracks
[ ] verify ongoing notification shows and text is Tracking attempts blocked across 2 apps (past hour).
[ ] Force close the app
[ ] notification should disappear
[ ] re-open app
[ ] verify ongoing notification shows and text is Tracking attempts blocked across 2 apps (past hour).
[ ] verify tapping on the notification takes the user to AppTP screen

Current dependencies on/for this PR:

develop

PR #2828   👈

This comment was auto-generated by Graphite.


Launching Management Server Fails

Rancher Version:
latest
Docker Version:
Docker version 1.11.1, build 5604cbe
OS and where are the hosts located? (cloud, bare metal, etc):
main computer
Setup Details: (single node rancher vs. HA rancher, internal DB vs. external DB)
run
Environment Type: (Cattle/Kubernetes/Swarm/Mesos)
local
Steps to Reproduce:
ran $ docker run -d --restart=always -p 8080:8080 rancher/server
Results:
160605  1:13:19 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
160605  1:13:19 [Note] Plugin 'FEDERATED' is disabled.
160605  1:13:19 InnoDB: The InnoDB memory heap is disabled
160605  1:13:19 InnoDB: Mutexes and rw_locks use GCC atomic builtins
160605  1:13:19 InnoDB: Compressed tables use zlib 1.2.8
160605  1:13:19 InnoDB: Using Linux native AIO
160605  1:13:19 InnoDB: Initializing buffer pool, size = 128.0M
160605  1:13:19 InnoDB: Completed initialization of buffer pool
160605  1:13:19 InnoDB: highest supported file format is Barracuda.
160605  1:13:19  InnoDB: Waiting for the background threads to start
160605  1:13:20 InnoDB: 5.5.47 started; log sequence number 1595675
160605  1:13:20 [Note] Server hostname (bind-address): '<IP_ADDRESS>'; port: 3306
160605  1:13:20 [Note]   - '<IP_ADDRESS>' resolves to '<IP_ADDRESS>';
160605  1:13:20 [Note] Server socket created on IP: '<IP_ADDRESS>'.
160605  1:13:20 [ERROR] /usr/sbin/mysqld: Error writing file '/var/run/mysqld/mysqld.pid' (Errcode: 28)
160605  1:13:20 [ERROR] Can't start server: can't create PID file: No space left on device
160605  1:13:20 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
160605  1:13:20 [Note] Plugin 'FEDERATED' is disabled.
160605  1:13:20 InnoDB: The InnoDB memory heap is disabled
160605  1:13:20 InnoDB: Mutexes and rw_locks use GCC atomic builtins
160605  1:13:20 InnoDB: Compressed tables use zlib 1.2.8
160605  1:13:20 InnoDB: Using Linux native AIO
160605  1:13:20 InnoDB: Initializing buffer pool, size = 128.0M
160605  1:13:20 InnoDB: Completed initialization of buffer pool
160605  1:13:20 InnoDB: highest supported file format is Barracuda.
160605  1:13:20  InnoDB: Waiting for the background threads to start
160605  1:13:21 InnoDB: 5.5.47 started; log sequence number 1595675
160605  1:13:21 [Note] Server hostname (bind-address): '<IP_ADDRESS>'; port: 3306
160605  1:13:21 [Note]   - '<IP_ADDRESS>' resolves to '<IP_ADDRESS>';
160605  1:13:21 [Note] Server socket created on IP: '<IP_ADDRESS>'.
160605  1:13:21 [ERROR] /usr/sbin/mysqld: Error writing file '/var/run/mysqld/mysqld.pid' (Errcode: 28)
160605  1:13:21 [ERROR] Can't start server: can't create PID file: No space left on device
160605  1:13:21 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
160605  1:13:21 [Note] Plugin 'FEDERATED' is disabled.
160605  1:13:21 InnoDB: The InnoDB memory heap is disabled
160605  1:13:21 InnoDB: Mutexes and rw_locks use GCC atomic builtins
160605  1:13:21 InnoDB: Compressed tables use zlib 1.2.8
160605  1:13:21 InnoDB: Using Linux native AIO
160605  1:13:21 InnoDB: Initializing buffer pool, size = 128.0M
160605  1:13:21 InnoDB: Completed initialization of buffer pool
160605  1:13:21 InnoDB: highest supported file format is Barracuda.
160605  1:13:21  InnoDB: Waiting for the background threads to start
160605  1:13:22 InnoDB: 5.5.47 started; log sequence number 1595675
160605  1:13:22 [Note] Server hostname (bind-address): '<IP_ADDRESS>'; port: 3306
160605  1:13:22 [Note]   - '<IP_ADDRESS>' resolves to '<IP_ADDRESS>';
160605  1:13:22 [Note] Server socket created on IP: '<IP_ADDRESS>'.
160605  1:13:22 [ERROR] /usr/sbin/mysqld: Error writing file '/var/run/mysqld/mysqld.pid' (Errcode: 28)
160605  1:13:22 [ERROR] Can't start server: can't create PID file: No space left on device
160605  1:13:23 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
160605  1:13:23 [Note] Plugin 'FEDERATED' is disabled.
160605  1:13:23 InnoDB: The InnoDB memory heap is disabled
160605  1:13:23 InnoDB: Mutexes and rw_locks use GCC atomic builtins
160605  1:13:23 InnoDB: Compressed tables use zlib 1.2.8
160605  1:13:23 InnoDB: Using Linux native AIO
160605  1:13:23 InnoDB: Initializing buffer pool, size = 128.0M
160605  1:13:23 InnoDB: Completed initialization of buffer pool
160605  1:13:23 InnoDB: highest supported file format is Barracuda.
160605  1:13:23  InnoDB: Waiting for the background threads to start
Expected:
site is available on port 8080.

Are these logs from docker logs <rancher_server_container>?

PS C:\Program Files\Docker Toolbox>

ok ran it again and it booted


Add Japanese translation file (ja_jp.json)

Japanese translation files have been added to correspond to the latest English one.

Thank you for translating the mod.


Improve linux alert expression

Problem:
node_filesystem_files_free returns the free inodes numbers, not free disk size.
Solution:
Using node_filesystem_free_bytes instead of node_filesystem_files_free.
Issue:
https://github.com/rancher/rancher/issues/22680

LGTM

Does this get updated in existing alert rules for existing clusters automatically?

@moschlar it does not get updated automatically afaict, but you can easily change it yourself:


Incorrect results with cblas_sgemm when called no of times

I get different results when I call cblas_sgemm no of times (I am calling cblas_sgemm 500 times, parallelized with openmp pragma directive).  I don't see any race condition or any other reason for getting very different values on each run.  Kindly find the below results and sample code to reproduce the issue.
Run 1 result : 39960
Run 2(sometimes after several runs) : 52880
Flags used to build OpenBLAS: USE_THREAD=1 and USE_OPENMP=1
Sample code:
#include
#include <cblas.h>
#include
const int MATRIX_DIMENSION = 999;
const int NUM_GEMM_CALLS = 500;
template
void initialize_matrix(std::vector& matrix, T value) {
std::fill(matrix.begin(), matrix.end(), value);
}
template
void print_matrix(const std::vector& matrix, int rows, int cols) {
for (int i = 0; i < std::min(rows, MATRIX_DIMENSION); ++i) {
for (int j = 0; j < std::min(cols, MATRIX_DIMENSION); ++j) {
std::cout << matrix[i * MATRIX_DIMENSION + j] << "\t";
}
std::cout << std::endl;
}
}
int main() {
std::vector A(MATRIX_DIMENSION * MATRIX_DIMENSION, 8.0);
std::vector B(MATRIX_DIMENSION * MATRIX_DIMENSION, 5.0);
std::vector C(MATRIX_DIMENSION * MATRIX_DIMENSION, 0.5);
#pragma omp parallel for
for (int i = 0; i < NUM_GEMM_CALLS; ++i) {
    cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
                MATRIX_DIMENSION, MATRIX_DIMENSION, MATRIX_DIMENSION,
                1.0, A.data(), MATRIX_DIMENSION,
                B.data(), MATRIX_DIMENSION,
                0.0, C.data(), MATRIX_DIMENSION);
}

// Print a portion of the result matrix for diagnostics
std::cout << "Result Matrix (partial):" << std::endl;
print_matrix(C, 1, 1);

return 0;

}

Not entirely sure your sample code is correct, sharing the result matrix C between the omp threads may not be safe. (I do get identical results within the parallel region if I add firstprivate(C) to the pragma, but then C remains at its initial value outside the omp block of course)

Thank you Martin for your suggestions. Please find my comments below:

I tried building OpenBLAS with option NUM_PARALLEL set to both 500 and 32(using a 32 core machine) but I still see the issue.

Based on the suggestion mentioned in the wiki, https://github.com/OpenMathLib/OpenBLAS/wiki/faq#multi-threaded - I tried building OpenBLAS using
USE_THREAD=0 USE_LOCKING=1 but still see the same issue.

Next thing, I removed USE_OPENMP=1 and USE_THREAD=1 from my build command. I don't see any issues now but I get the below warning as "OpenBLAS Warning : Detect OpenMP Loop and this application may hang. Please rebuild the library with USE_OPENMP=1 option." So does this mean there is no issue with OpenBLAS Pthreads backend?

I agree on your last suggestion that there might be a race condition but not sure why I don't see any issues with smaller matrix dimensions. Any idea why? But now that I think each iteration would write to C which means multiple threads might try to update the same memory concurrently so I have modified the code for loop as below. I see correct value printed but seeing free:invalid pointer error.

#pragma omp parallel for schedule(static)
for (int i = 0; i < NUM_GEMM_CALLS; i++) {
blas_function(CblasRowMajor, CblasNoTrans, CblasNoTrans,
MATRIX_DIMENSION, MATRIX_DIMENSION, MATRIX_DIMENSION,
static_cast(1.0), A.data(), MATRIX_DIMENSION,
B.data(), MATRIX_DIMENSION,
static_cast(0.0), C.data() + i * MATRIX_DIMENSION * MATRIX_DIMENSION, MATRIX_DIMENSION);
}
Let me know your thoughts on this.

Another way I can think of - each thread has its own private copy (privateC) of the result matrix. After the parallel region, a reduction operation is performed to accumulate the results from all threads into the shared matrix C.

Did you adjust the size of C accordingly ? Otherwise you'll be writing beyond the end of allocated memory with each i greater than zero

Thank you @martin-frbg. I adjusted the size of C. However with this approach, I am unable to run my code for larger matrices. I see vector size large error.


Method that does subset of fasta seqs would be nice, similar to Alignment.subalignment()

When writing fasta seqs it would be nice to have method that quickly does "seqs_to_keep" (subset) just like in the Alignment class.  Feature suggestion.
seqs_to_keep : list, optional
http://scikit-bio.org/docs/0.2.3/generated/skbio.alignment.Alignment.subalignment.html?highlight=subalignment

Is this in regards to SequenceCollection? Or are you interested in a kwarg which accomplishes this in the writer itself?

From what I see, it would make sense to have a subset in the SequenceCollection
to get these sequences:    seq_list = ["C1", "C2"]
from a SequenceCollection object I do this:
def get_seq_from_list():
seqs = SequenceCollection.read("otu_seqs.fasta", format="fasta")
for i in seq_list:
seq_in_list = seqs.get_seq(i)
yield seq_in_list
skbio.write(get_seq_from_list(), into="practice_mini_out.fasta", format="fasta")
in the Alignment  class I can do this in one line, but I do not have an alignment:
otu_seqs = all_tips_seqs.subalignment(seq_list)

That makes sense. Also just as a tip for your example code above, you can use a generator rather than a sequence collection by using skbio.read your code will look basically identical, but it will be very memory efficient.

Yeah, these files should be small, but you're right, I'll use a generator.  Thanks!

:+1: !!

SequenceCollection has been removed (#1220) in favor of Python list/generator-comprehensions.


Betterstack Metrics Vector Error

Hello, I can't get the dashboard and metrics to work, the logs are fine. I'm using betterstack-logs-1.1.2 in a Kubernetes with Traefik and Cert Manager.
My betterstack-values.yaml:
metrics-server:
  enabled: true

vector:
  hostNetwork:
    enabled: true
  customConfig:
    sources:
      better_stack_kubernetes_logs:
        type: kubernetes_logs
        extra_label_selector: "app=my-engine"
    sinks:
      better_stack_http_sink:
        auth:
          token: <TOKEN>
      better_stack_http_metrics_sink:
        auth:
          token: <TOKEN>

My logs:
2024-04-26T07:35:35.667928Z  INFO vector::app: Log level is enabled. level="info"
2024-04-26T07:35:35.669251Z  INFO vector::app: Loading configs. paths=["/etc/vector"]
2024-04-26T07:35:40.435062Z  INFO source{component_kind="source" component_id=better_stack_kubernetes_logs component_type=kubernetes_logs}: vector::sources::kubernetes_logs: Obtained Kubernetes Node name to collect logs for (self). self_node_name="pool-kfolvp7yd-ybqmr"
2024-04-26T07:35:40.451872Z  INFO source{component_kind="source" component_id=better_stack_kubernetes_logs component_type=kubernetes_logs}: vector::sources::kubernetes_logs: Including matching files. ret=["**/*"]
2024-04-26T07:35:40.451912Z  INFO source{component_kind="source" component_id=better_stack_kubernetes_logs component_type=kubernetes_logs}: vector::sources::kubernetes_logs: Excluding matching files. ret=["**/*.gz", "**/*.tmp"]
2024-04-26T07:35:45.132014Z  INFO vector::topology::running: Running healthchecks.
2024-04-26T07:35:45.132294Z  INFO vector: Vector has started. debug="false" version="0.37.1" arch="x86_64" revision="cb6635a 2024-04-09 13:45:06.561412437"
2024-04-26T07:35:45.132319Z  INFO vector::app: API is disabled, enable by setting `api.enabled` to `true` and use commands like `vector top`.
2024-04-26T07:35:45.132419Z  INFO vector::topology::builder: Healthcheck passed.
2024-04-26T07:35:45.132542Z  INFO vector::topology::builder: Healthcheck passed.
2024-04-26T07:35:45.180427Z  INFO source{component_kind="source" component_id=better_stack_kubernetes_logs component_type=kubernetes_logs}:file_server: file_source::checkpointer: Loaded checkpoint data.
2024-04-26T07:35:50.178452Z ERROR source{component_kind="source" component_id=better_stack_kubernetes_metrics_nodes component_type=http_client}: vector::internal_events::http_client_source: HTTP request processing error. url=https://betterstack-logs-metrics-server/apis/metrics.k8s.io/v1beta1/nodes error="Timeout error: request exceeded 5s" error_type="request_failed" stage="receiving" internal_log_rate_limit=true
2024-04-26T07:35:50.180134Z ERROR source{component_kind="source" component_id=better_stack_kubernetes_metrics_pods component_type=http_client}: vector::internal_events::http_client_source: HTTP request processing error. url=https://betterstack-logs-metrics-server/apis/metrics.k8s.io/v1beta1/pods error="Timeout error: request exceeded 5s" error_type="request_failed" stage="receiving" internal_log_rate_limit=true
2024-04-26T07:36:00.185253Z  WARN source{component_kind="source" component_id=better_stack_kubernetes_metrics_nodes component_type=http_client}:http: vector::internal_events::http_client: HTTP error. error=error trying to connect: error:0A000086:SSL routines:(unknown function):certificate verify failed:ssl/statem/statem_clnt.c:2092:: self-signed certificate in certificate chain error_type="request_failed" stage="processing" internal_log_rate_limit=true
2024-04-26T07:36:00.185360Z ERROR source{component_kind="source" component_id=better_stack_kubernetes_metrics_nodes component_type=http_client}: vector::internal_events::http_client_source: HTTP request processing error. url=https://betterstack-logs-metrics-server/apis/metrics.k8s.io/v1beta1/nodes error=CallRequest { source: hyper::Error(Connect, Custom { kind: Other, error: ConnectError { error: Error { code: ErrorCode(1), cause: Some(Ssl(ErrorStack([Error { code: 167772294, library: "SSL routines", function: "(unknown function)", reason: "certificate verify failed", file: "ssl/statem/statem_clnt.c", line: 2092 }]))) }, verify_result: X509VerifyResult { code: 19, error: "self-signed certificate in certificate chain" } } }) } error_type="request_failed" stage="receiving" internal_log_rate_limit=true
2024-04-26T07:36:00.189320Z  WARN source{component_kind="source" component_id=better_stack_kubernetes_metrics_pods component_type=http_client}:http: vector::internal_events::http_client: HTTP error. error=error trying to connect: error:0A000086:SSL routines:(unknown function):certificate verify failed:ssl/statem/statem_clnt.c:2092:: self-signed certificate in certificate chain error_type="request_failed" stage="processing" internal_log_rate_limit=true

I already try with tls.verify_certificate and tls.verify_hostname to false. Any help?
Thanks in advance

Hi @samuelexferri,
Thank you for reaching out!
Could you share how you run Kubernetes? EKS, Digital Ocean, something else?
Could you try using the values.yaml configuration for Minikube? 🙏
It has helped other people with SSL issues.
https://betterstack.com/docs/logs/kubernetes/#2-set-up-helm-chart

Let me know if this helps. 🙏
I'm happy to look further into this.
Thanks again for raising this!

Hi, thanks for the quick response! It works now!


Add new settings for page number control

Feature Description
Reported by @hiifong
In https://github.com/go-gitea/gitea/pull/22937, we added pagination for user dashboard, but it broke the definition of FeedPagingNum in the document:

We need to add new settings for the page number control to avoid too many pages in user dashboard, as if there are too many records, it will be very slow to load the page.
Screenshots
No response

It's not clear to me how FEED_PAGING_NUM is broken, as far as I can tell that still correctly controls the number of activities on each page?
I can see that counting the total number of activities for the purpose of the "Last" button could be slow. Two potential solutions:

Just hide the "Last" button for the activity feed, it's not important to be able to navigate to the last page for this case.
Add a mechanism like page=last which counts the total activities only after clicking "Last", so it doesn't affect typical dashboard page views.

In source code, it is defined as the number of feeds on each page, but in the document on each page is not mentioned.
So user may take it for the total number of all items.
ps:
At first, @hiifong reported the last page button is too slow.
Then @lunny said we have settings to control the total display count.
Then someone said maybe FeedPagingNum can control it , as the document said we can control the number of itesm that are displayed in home feed.
But it didn't work as FeedPagingNum should have a default vaule 2.
Then I found that in https://github.com/go-gitea/gitea/pull/22937, FeedPagingNum which can control the toltal display count in old versions, has been changed to control the number of items on each page.

Ah, to me it makes sense to just update the description to say "on one page" then since that's what the other *_PAGING_NUM settings do and still effectively the same as before for the first page.
Personally I think hiding the "Last" button would be preferable to capping the number of activities, since otherwise "Last" is quite arbitrary.

Maybe we should only display Prev and Next buttons, because it's meaningless to go to some page.

In source code, it is defined as the number of feeds on each page, but in the document on each page is not mentioned. So user may take it for the total number of all items.
ps: At first, @hiifong reported the last page button is too slow. Then @lunny said we have settings to control the total display count. Then someone said maybe FeedPagingNum can control it , as the document said we can control the number of items that are displayed in home feed. But it didn't work as FeedPagingNum should have a default vaule 20. Then I found that in #22937, FeedPagingNum which can control the toltal display count in old versions, has been changed to control the number of items on each page.

home page loading time screens

hot

@hiifong Could you please add the index in https://github.com/go-gitea/gitea/issues/21611#issuecomment-1451113252 and test if the index could improve the page loading time?

Ah, to me it makes sense to just update the description to say "on one page" then since that's what the other *_PAGING_NUM settings do and still effectively the same as before for the first page.

As we have no version control for the old document, maybe we need to wait until the new document being finished to change the description?


Set the correct Content-Type header for static WebP images

This is a simiar fix as #163 but for the local WebP image serving. Previously, content-deposition has already been set to inline by Django, but content-type was application/octet-stream, which was causing downloading.
It can be implemented by customizing the original django.views.static.serve view for *.webp files.
Reason for custom view
The reason why we cannot use the original serve is that the current Django implementation set the Content-Type header based on the return value of mimetypes.guess_type(). Although the image/webp MIME type has been added to mimetypes database just since Python 3.11 (ref. python/cpython#29259), the image/webp is not yet registered to the official IANA mime-type list and guess_type() in the Django source code needs to have strict=False option to guess image/webp, but it doesn't.
Screenshot after this change

The error messages in failed tests seem to be the same ones by the last commit to the main branch.
At least I confirmed to pass all tests in the local container:
root@f23f04b91240:/takahe# pytest
========================================================================= test session starts ==========================================================================
platform linux -- Python 3.11.0, pytest-7.2.0, pluggy-1.0.0
django: settings: takahe.settings (from option)
rootdir: /takahe, configfile: setup.cfg
plugins: dotenv-0.5.2, django-4.5.2, httpx-0.21.2, asyncio-0.20.3, anyio-3.6.2
asyncio: mode=Mode.STRICT
collected 54 items

tests/activities/models/test_post.py ....                                                                                [  7%]
tests/activities/models/test_post_targets.py ...                                                                                [ 12%]
tests/activities/views/test_compose.py ..                                                                                [ 16%]
tests/activities/views/test_posts.py .                                                                                [ 18%]
tests/activities/views/test_timelines.py .                                                                                [ 20%]
tests/users/models/test_identity.py ...                                                                                [ 25%]
tests/users/views/test_activitypub.py ...                                                                                [ 31%]
tests/users/views/test_auth.py ....                                                                                [ 38%]
stator/tests/test_graph.py ...                                                                                [ 44%]
tests/activities/models/test_hashtag.py ..                                                                                [ 48%]
tests/activities/templatetags/test_activity_tags.py ..                                                                                [ 51%]
tests/core/test_html.py ..                                                                                [ 55%]
tests/core/test_ld.py .                                                                                [ 57%]
tests/core/test_signatures.py ....                                                                                [ 64%]
tests/users/views/test_domains.py ...................                                                                                [100%]

========================================================================== 54 passed in 9.72s ==========================================================================
r

Thanks for figuring this out!


Using Elasticsearch client 8.11.0 is not compatible for your Elasticsearch server

Just opening a new bug so that you may find sometime to fix it..
I have deployed bitnami Elasticsearch stack running docker.io/bitnami/elasticsearch:8.12.2-debian-12-r0 however, the logging operator is showing below given error when I try to push logs.
2024-03-22 15:43:13 +0000 [info]: adding filter in @0f24568f7a85f811f71650c48d07e851 pattern="**" type="dedot"
2024-03-22 15:43:13 +0000 [info]: #0 [clusterflow:logging:cluster-flow-es:1] DeDot will recurse nested hashes and arrays
2024-03-22 15:43:13 +0000 [info]: adding match in @0f24568f7a85f811f71650c48d07e851 pattern="**" type="elasticsearch"
2024-03-22 15:43:13 +0000 [error]: #0 config error file="/fluentd/etc/fluent.conf" error_class=Fluent::ConfigError error="Using Elasticsearch client 8.11.0 is not compatible for your Elasticsearch server. Please check your using elasticsearch gem version and Elasticsearch server."
2024-03-22 15:43:13 +0000 [error]: Worker 0 exited unexpectedly with status 2
2024-03-22 15:43:13 +0000 [info]: Received graceful stop

I'm running helm based deployment of Logging-Operator version 4.5.6 with below given configs.
Logging and FluentbitAgent
apiVersion: logging.banzaicloud.io/v1beta1
kind: FluentbitAgent
metadata:
  name: expertflow-fluentbit-agent
spec:
    bufferStorage: {}
    bufferStorageVolume:
      hostPath:
        path: ""
    bufferVolumeImage: {}
    filterKubernetes: {}
    image: {}
    inputTail:
      storage.type: filesystem
    positiondb:
      hostPath:
        path: ""
    resources: {}
    updateStrategy: {}

---
apiVersion: logging.banzaicloud.io/v1beta1
kind: Logging
metadata:
  name: fluentd-bit-logging
  namespace: logging
spec:
  enableRecreateWorkloadOnImmutableFieldChange: true
  fluentd:
    bufferStorageVolume:
      pvc:
        spec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 40Gi
  controlNamespace: logging

my clusterFlow and ClusterOutputs
# ClusterFlows to deploy
apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterFlow
metadata:
  name: cluster-flow-es
  namespace: logging
  labels:
    someLabel: foo
spec:
      filters:
        - record_modifier: # if you e.g. have multiple clusters
            records:
              - cluster: "CLUSTER_NAME"
        # replaces dots in labels and annotations with dashes to avoid mapping issues (app=foo (text) vs. app.kubernetes.io/name=foo (object))
        # fixes error: existing mapping for [kubernetes.labels.app] must be of type object but found [text]
        - dedot:
            de_dot_separator: "-"
            de_dot_nested: true
      globalOutputRefs:
        - cluster-output-es

---

apiVersion: logging.banzaicloud.io/v1beta1
kind: ClusterOutput
metadata:
  name: cluster-output-es
  namespace: logging
  labels:
    someLabel: foo
spec:
      elasticsearch:
        host: devops218.ef.com/es
        #port: 9200
        user: elastic
        index_name: efcx
        password:
          valueFrom:
            secretKeyRef:
              name: elastic-password   #kubectl -n logging create  secret generic  elastic-password  --from-literal=password=admin123
              key: password
        scheme: https
        ssl_verify: false
        logstash_format: true
        include_timestamp: true
        reconnect_on_error: true
        reload_on_failure: true
        buffer:
          flush_at_shutdown: true
          type: file
          chunk_limit_size: 4M # Determines HTTP payload size
          total_limit_size: 1024MB # Max total buffer size
          flush_mode: interval
          flush_interval: 10s
          flush_thread_count: 2 # Parallel send of logs
          overflow_action: block
          retry_forever: true # Never discard buffer chunks
          retry_type: exponential_backoff
          retry_max_interval: 60s
        # enables logging of bad request reasons within the fluentd log file (in the pod /fluentd/log/out)
        log_es_400_reason: true

/kind bug

I'm now reverting back to ES 8.11.x of my ELk stack

I think we can upgrade the client lib to 8.12, but before we do it would nice if you could try this on your side while you have 8.11 and 8.12 servers as well:
Pull our fluentd docker image, make the following modifications and a build a new one:
fluent-gem install -N --version 8.12.0 elasticsearch
fluent-gem uninstall --version 8.11.0 elasticsearch
fluent-gem uninstall --version 8.11.0 elasticsearch-api

It would help me if you could try out this image with your 8.11 and the once upgraded then with your 8.12 server version as well.


X-FHIR-FORWARDED-URL not correct with bulk data

Describe the bug
A clear and concise description of what the bug is.
Passing in a header X-FHIR-FORWARD-URL=https://myUrl.com/context/root/$export on a bulk data export results in the result header of content-location to equal https://myUrl.com/context/root/$export/$bulkdata-status?...
To Reproduce
Steps to reproduce the behavior:

Go to '...'
Click on '....'
Scroll down to '....'
See error

Expected behavior
A clear and concise description of what you expected to happen.
Additional context
Add any other context about the problem here.

I wasn't able to reproduce this from the latest in main:

I'm suggesting we close it unless we can reproduce.

I'm not able to reproduce either.
I need to see the request/curl and the fhir-server-config.json.
Please ping me the details, and we can debug

Also look for this in your logs... Error while computing the original request URI

It's the body that won't output in the polling of the status

Worked with Dag on this.

Addressed issue in one on one consultation.
Dag found three issues total, one was related to the URL passed in which caused the above fix.
We've made it a bit more resilient in the PR. Moving to QA

Confirmed with Dag that this is working.


I got an error  when  I use  flipTo function in a 'react' project

my react component code:
const FlipNumber = ({ number: realNumber, className }) => {
  const ref = useRef();
  const flipRef = useRef(null);
  useEffect(() => {
    if (!flipRef.current) {
      flipRef.current = new Flip({
       node: ref.current,
        from: 0,
        to: realNumber,
        duration: 1.5,
        separator: ',',
      });
    } else {
      // error when flipTo runs
      flipRef.current.flipTo({ to: realNumber });
    }
  }, [realNumber]);
  return (
   <div
      ref={ref}
    />
  );
};

I think this will work:
https://codesandbox.io/s/snowy-tdd-gf9hp?file=/src/App.js:89-488
const FlipNumber = ({ number: realNumber }) => {
  const ref = useRef();
  const flipRef = useRef(null);
  useEffect(() => {
    flipRef.current = new Flip({
      node: ref.current,
      from: 0,
      to: realNumber,
      duration: 1.5,
      separator: ","
    });
  }, []);
  useEffect(() => {
    flipRef.current.flipTo({ to: realNumber });
  }, [realNumber]);

  return <div ref={ref} />;
};

Yeah. It does work in my  'vite' demo project but I failed in my production project, which meas it may be an incompatibility problem.  Forget it.  Thanks very much for your reply  !

any updated?

@xmsz I believe this works effectively

@xmsz I believe this works effectively

@gaoryrt still error...

@gaoryrt still error...
Please provide a minimal reproduction.

似乎是数字位数不一样，所以提示 Cannot read properties of undefined (reading 'childNodes')

On my side, fixed by adding "?"
for (let i = 0; i < this.ctnrArr[digit]?.childNodes.length; i += 1) {

Sorry, no time to understand exactly the problem and no time for PR.
I'm using number-flip with lit-element (shadowdom)
Btw thank you for this cool lib ;)

Mhhh bad fixe. The problem occured only when i'm using a 2 digit number (from:0, to: 10)

More related to #27

@eviltik
Yes, due to the design, each digit in the flipping number must remain it's unique place.
Like if you start with a 3-digit number, say 742, the biggest number you can go in the later flipping is 999.


"Get-PBIDatasetParameters", "Set-PBIDatasetParameters" cmdlets not present in latest module

"Get-PBIDatasetParameters", "Set-PBIDatasetParameters" not present in latest <IP_ADDRESS> module
even after installing these 2 cmdlets not getting imported.

Hi,
We've just updated the module to version <IP_ADDRESS> which already contains the cmdlets you mentioned.
Thank you for the feedback.


adapter::delete causes a program crash

Hi, when I run the demo_server.rs example from current master (Win 10, MSVC compiler, Rust 1.56), the program crashes when adapter::delete is called:
Here's the stacktrace:
thread 'main' panicked at 'Expected function, got error.: GetProcAddress { source: Os { code: 127, kind: Uncategorized, message: "The specified procedure could not be found." } }', C:\<fakepath>\wireguard-nt\src\wireguard_nt_raw.rs:1459:14
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread 'main' panicked at 'Expected function, got error.: GetProcAddress { source: Os { code: 127, kind: Uncategorized, message: "The specified procedure could not be found." } }', C:\<fakepath>\wireguard-nt\src\wireguard_nt_raw.rs:1476:14
stack backtrace:
   0:     0x7ff7034c09de - std::backtrace_rs::backtrace::dbghelp::trace
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\..\..\backtrace\src\backtrace\dbghelp.rs:98
   1:     0x7ff7034c09de - std::backtrace_rs::backtrace::trace_unsynchronized
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\..\..\backtrace\src\backtrace\mod.rs:66
   2:     0x7ff7034c09de - std::sys_common::backtrace::_print_fmt
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\sys_common\backtrace.rs:67
   3:     0x7ff7034c09de - std::sys_common::backtrace::_print::impl$0::fmt
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\sys_common\backtrace.rs:46
   4:     0x7ff7034d03ea - core::fmt::write
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\core\src\fmt\mod.rs:1150
   5:     0x7ff7034bb8b8 - std::io::Write::write_fmt<std::sys::windows::stdio::Stderr>
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\io\mod.rs:1667
   6:     0x7ff7034c2c86 - std::sys_common::backtrace::_print
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\sys_common\backtrace.rs:49
   7:     0x7ff7034c2c86 - std::sys_common::backtrace::print
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\sys_common\backtrace.rs:36
   8:     0x7ff7034c2c86 - std::panicking::default_hook::closure$1
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\panicking.rs:210
   9:     0x7ff7034c2774 - std::panicking::default_hook
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\panicking.rs:227
  10:     0x7ff7034c32e5 - std::panicking::rust_panic_with_hook
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\panicking.rs:624
  11:     0x7ff7034c2ecb - std::panicking::begin_panic_handler::closure$0
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\panicking.rs:521
  12:     0x7ff7034c1327 - std::sys_common::backtrace::__rust_end_short_backtrace<std::panicking::begin_panic_handler::closure$0,never$>
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\sys_common\backtrace.rs:141
  13:     0x7ff7034c2e29 - std::panicking::begin_panic_handler
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\panicking.rs:517
  14:     0x7ff7034d5b30 - core::panicking::panic_fmt
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\core\src\panicking.rs:101
  15:     0x7ff7034d5bd3 - core::result::unwrap_failed
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\core\src\result.rs:1617
  16:     0x7ff7034316f3 - enum$<core::result::Result<ref$<void (*)(ptr_mut$<wireguard_nt::wireguard_nt_raw::_WIREGUARD_ADAPTER>)>,ref$<enum$<libloading::error::Error> > > >::expect<ref$<void (*)(ptr_mut$<wireguard_nt::wireguard_nt_raw::_WIREGUARD_ADAPTER>)>,ref$<enum$<libloading::
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\library\core\src\result.rs:1259
  17:     0x7ff70342d9d1 - wireguard_nt::wireguard_nt_raw::wireguard::WireGuardFreeAdapter
                               at C:\<fakepath>\wireguard-nt\src\wireguard_nt_raw.rs:1473
  18:     0x7ff703425a0e - wireguard_nt::adapter::impl$1::drop
                               at C:\<fakepath>\wireguard-nt\src\adapter.rs:527
  19:     0x7ff7034250af - core::ptr::drop_in_place<wireguard_nt::adapter::Adapter>
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\library\core\src\ptr\mod.rs:188
  20:     0x7ff703427ba7 - wireguard_nt::adapter::Adapter::delete
                               at C:\<fakepath>\wireguard-nt\src\adapter.rs:514
  21:     0x7fff1c911030 - <unknown>
  22:     0x7fff1c914cb2 - is_exception_typeof
  23:     0x7fff1c91f0e4 - _C_specific_handler
  24:     0x7fff1c913f28 - is_exception_typeof
  25:     0x7fff1c91fa21 - _CxxFrameHandler3
  26:     0x7fff2a9f214f - _chkstk
  27:     0x7fff2a980939 - RtlUnwindEx
  28:     0x7fff1c91f5ae - _C_specific_handler
  29:     0x7fff1c912bf5 - is_exception_typeof
  30:     0x7fff1c91300d - is_exception_typeof
  31:     0x7fff1c914024 - is_exception_typeof
  32:     0x7fff1c91fa21 - _CxxFrameHandler3
  33:     0x7fff2a9f20cf - _chkstk
  34:     0x7fff2a9a1454 - RtlRaiseException
  35:     0x7fff2a9a11a5 - RtlRaiseException
  36:     0x7fff28404f99 - RaiseException
  37:     0x7fff1c916480 - CxxThrowException
  38:     0x7ff7034c7281 - panic_unwind::real_imp::panic
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\panic_unwind\src\seh.rs:313
  39:     0x7ff7034c7209 - panic_unwind::__rust_start_panic
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\panic_unwind\src\lib.rs:105
  40:     0x7ff7034c359b - std::panicking::rust_panic
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\panicking.rs:672
  41:     0x7ff7034c349b - std::panicking::rust_panic_with_hook
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\panicking.rs:642
  42:     0x7ff7034c2ecb - std::panicking::begin_panic_handler::closure$0
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\panicking.rs:521
  43:     0x7ff7034c1327 - std::sys_common::backtrace::__rust_end_short_backtrace<std::panicking::begin_panic_handler::closure$0,never$>
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\sys_common\backtrace.rs:141
  44:     0x7ff7034c2e29 - std::panicking::begin_panic_handler
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\panicking.rs:517
  45:     0x7ff7034d5b30 - core::panicking::panic_fmt
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\core\src\panicking.rs:101
  46:     0x7ff7034d5bd3 - core::result::unwrap_failed
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\core\src\result.rs:1617
  47:     0x7ff703431bc3 - enum$<core::result::Result<ref$<i32 (*)(ptr_mut$<wireguard_nt::wireguard_nt_raw::_WIREGUARD_ADAPTER>,ptr_mut$<i32>)>,ref$<enum$<libloading::error::Error> > > >::expect<ref$<i32 (*)(ptr_mut$<wireguard_nt::wireguard_nt_raw::_WIREGUARD_ADAPTER>,ptr_mut$<i32>
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\library\core\src\result.rs:1259
  48:     0x7ff70342d958 - wireguard_nt::wireguard_nt_raw::wireguard::WireGuardDeleteAdapter
                               at C:\<fakepath>\wireguard-nt\src\wireguard_nt_raw.rs:1456
  49:     0x7ff703427b51 - wireguard_nt::adapter::Adapter::delete
                               at C:\<fakepath>\wireguard-nt\src\adapter.rs:505
  50:     0x7ff7034229f1 - my_project::wireguard::WireguardIface::create_interface
                               at C:\<fakepath>\my_project\src\wireguard.rs:127
  51:     0x7ff703422ede - my_project::main
                               at C:\<fakepath>\my_project\src\main.rs:64
  52:     0x7ff7034218db - core::ops::function::FnOnce::call_once<void (*)(),tuple$<> >
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\library\core\src\ops\function.rs:227
  53:     0x7ff70342146b - std::sys_common::backtrace::__rust_begin_short_backtrace<void (*)(),tuple$<> >
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\library\std\src\sys_common\backtrace.rs:125
  54:     0x7ff703421191 - std::rt::lang_start::closure$0<tuple$<> >
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\library\std\src\rt.rs:63
  55:     0x7ff7034c3736 - core::ops::function::impls::impl$2::call_once
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\library\core\src\ops\function.rs:259
  56:     0x7ff7034c3736 - std::panicking::try::do_call
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\panicking.rs:403
  57:     0x7ff7034c3736 - std::panicking::try
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\panicking.rs:367
  58:     0x7ff7034c3736 - std::panic::catch_unwind
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\panic.rs:129
  59:     0x7ff7034c3736 - std::rt::lang_start_internal::closure$2
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\rt.rs:45
  60:     0x7ff7034c3736 - std::panicking::try::do_call
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\panicking.rs:403
  61:     0x7ff7034c3736 - std::panicking::try
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\panicking.rs:367
  62:     0x7ff7034c3736 - std::panic::catch_unwind
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\panic.rs:129
  63:     0x7ff7034c3736 - std::rt::lang_start_internal
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\/library\std\src\rt.rs:45
  64:     0x7ff70342115f - std::rt::lang_start<tuple$<> >
                               at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35\library\std\src\rt.rs:62
  65:     0x7ff703422f46 - main
  66:     0x7ff7034d409c - invoke_main
                               at d:\a01\_work\6\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
  67:     0x7ff7034d409c - __scrt_common_main_seh
                               at d:\a01\_work\6\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
  68:     0x7fff2a3f7034 - BaseThreadInitThunk
  69:     0x7fff2a9a2651 - RtlUserThreadStart
thread panicked while panicking. aborting.

Sorry, my bad. This happens only if the latest wireguard.dll library file is used (straight from the wireguard-nt website.
I confirm that it's all fine when I use the specific wireguard.dll file from the examples/wireguard-nt/amd64. So this is a non-issue.
Having said that, it's a bit worrying that already the new version of the wireguard.dll has broken backwards compatibility.

I tried running bindgen on the wireguard.h distributed together with wireguard.dll (NOT the one you put together), however, I see that bindgen doesn't really produce anything useful as far as the methods are concerned. Have you also experienced this? Is this why you decided to rewrite wireguard.h by hand?
I'm willing to spend some time trying to make bindgen work with the original wireguard.h file, so that hopefully we can release new versions with little to no manual intervention (i.e. without needing to manually verify/rewrite wireguard.h before we feed it to bindgen).
However, before I do this, I'd like to know how/why you decided to rewrite wireguard.h by hand, what you tried etc, so that I don't end up just duplicating the effort you've already put into this.
@TroyNeubauer

Yes, I decided to manually create a wireguard.h to pass to bindgen because the official header file only has typedefs for the functions and not normal external definitions that bindgen likes. To create it I went through the documentation and wrote out the functions as a c-compiler would expect them. I messed around with bindgen a little bit but concluded that for the effort, the api is unlikely to change very much so I bailed and did it by hand. That would be awesome if you could come up with a better solution. One crazy idea I had is if getting declarations from the distributed header is hard, it might be worthwhile to scrape this page: https://git.zx2c4.com/wireguard-nt/about/. It has a decently standardized format.
Also it looks like WireguardDeleteAdapter was renamed to WireGuardCloseAdapter in 0.10, which is why GetProcAddress is failing. I'll build out some logic for calling the right version of the function based on which one is available.
I'd be happy to accept any PR that makes keeping things up to date easy.

Seems like we can get it done quite easily if bindgen supports static variables with --dynamic-loading. It should be possible since libloading, which is what is used under the hood, already supports it.
I've opened an issue about it --dynamic-loading ignores static variables. Let's see if it gets any traction with the devs over there, if not I will look into it myself.

Hi, I managed to get bindgen to work nicely with the original wireguard.h header file (without any changes to bindgen itself).
The problem is adapter.rs doesn't like the new wireguard_nt_raw.rs because, as you've already noticed, some of the function signatures etc. have changed.
Maybe if you could create a separate branch for my changes (say, driver-0.10.1), I could open a PR and push my work to that branch, and then you could take it the rest of the way?
@TroyNeubauer

This sounds great. driver-0.10.1 is now ready for you on here

Hey, thanks a bunch. I've just pushed my changes to the branch. For a brief description of that is (and what isn't) included, see the description of https://github.com/nulldotblack/wireguard-nt/pull/4

Solved by  #5. Closing


Fix old e2e tests

What does this PR do?
This PR aims to fix CWS old e2e tests by reverting to the old endpoint for downloading policies. No need to update to the latest, as these tests will be dropped in the future once the new-e2e tests are up and running.

Motivation

Additional Notes

Possible Drawbacks / Trade-offs

Describe how to test/QA your changes

/merge


Esp-idf arduino component require

https://github.com/m5stack/M5StickC-Plus/blob/3e9db294bac4cb99cdcf5353432df936619ad7b8/CMakeLists.txt#L13
Hello m5stack team,
this is more a question than an issue. Im trying to use M5StickC-Plus as a esp-idf component. Seems like it requires another component named arduino. What is the repo for the arduino component?. I can only find this -> https://github.com/espressif/arduino-esp32
Is arduino-esp32 component compatible with M5SickC-Plus?
Thank you very much and kind regards,
Rafa

I think you are right。

https://www.youtube.com/watch?v=05GKbdcH92Y 可以参考这个

Hello @rafapaezbas, are using PlatformIO to build this library?

Recommended to use M5Unified, which is currently the main maintenance of both Arduino and ESP-IDF support library.