show git.viewChanges in a seperate windows (maybe base on floating window)

Open All git Changes in one window is supported in vscode, but it can be do better.
Just like other git tools (webstorm or Folk), users can open all changes in a seperate window (in maximum size), which is very convenient for reviewing changes, and don't disturb your coding.
Maybe it can be implemented by floating window currently, but the interactive experience is not good, which requires user to move "Git: Changes" window into new window manullay.

This feature request is now a candidate for our backlog. The community has 60 days to upvote the issue. If it receives 20 upvotes we will move it to our backlog. If not, we will close it. To learn more about how we handle feature requests, please see our documentation.
Happy Coding!


fix: update proto files to v0.34.21

During latest Cosmos SDK v0.46.1 update, I forgot to update proto files and script to get them. This PR fixes this.

Tests are failing because there is no compatible version of cosmos-sdk available. My plan was to rename to rollmint, and then release updated cosmos-sdk.

types.proto file is used by proto/optimint/optimint.proto and proto/optimint/state.proto, but changes in types.proto doesn't affect generated files.


Prior deleted deploy showing up instead of newly deployed site

App Id: d2lwend04neamk
Region: us-east-1
Step: 2  Troubleshoot Domain -
Status: Domain activation -X- Failed
Error Message: One or more of the CNAMEs you provided are already associated with a different resource.
Issue/question
I Used Route 53 to set up A Record, CNAME domain and CNAME www records, in addition I created a test.myDomain.com CNAME record.
They all point to the same<PHONE_NUMBER>1234.cloudfront.net. CNAME but the www.myDomain.com and the top domain (myDomain.com) both go to an old version from different app id, however test.myDomain fails with a 403 page.
I checked the DNS and they are all delivering the same set of IPs
Additional information
FYI: new version is correctly deployed and can be gotten from the *********.amplifyapp.com url
test.myDdomain.com
403 ERROR
The request could not be satisfied.
...

So I may be getting CNAMEAlreadyExistsException with a prior, now deleted version of the app. How can I remove the old content and delete the CNAME association to the original CloudFront.net distribution? I need to delete CNAME association and replace it with the new one.

I found the prior App Id d1al6j15fy5a30 but do not know where it is being maintained other than the cloudfront.net cache, Is it possible to purge it entirely so that I can create a new CNAME reference without conflict?

My issue was cause by a forgotten Amplify Console app generated in another region.
The advise by @Athena96 was to identify the App ID and Zone of the prior apps that I made.
It turns out, that although I thought I had deleted all prior apps and resources. One remained in another Region (which was selected inadvertently).
The puzzler was that the creating DNS entries for the new region with new App ID caused the old version created in the undeleted prior (errant) region to be referenced just fine. Making the new App in the new region orphaned from the custom Domain.
Thanks for the Amplify CI and Hosting with CloudFront - this is great stuff

Hi! @badrhombus, I've the same issue just now. How did you resolve it? I've the old AppId and the region but I cannot find something wrong in my DNS records. Thank you!


Multiprocessing

Is there any instruction to use multiprocessing in RB3 zoo, such as python train.py ----, I can't find where in train.py, so I can only call related libraries for training? similar:
env_id = "CartPole-v1"     num_cpu = 4  # Number of processes to use     # Create the vectorized environment     env = SubprocVecEnv([make_env(env_id, i) for i in range(num_cpu)])
Thanks

Hello,
if you look at the yaml files, you will find a n_envs hyperparameter, that can also be changed on the fly:
python train.py --algo ppo --env CartPolev-1 -params n_envs:4

Hello, if you look at the yaml files, you will find a n_envs hyperparameter, that can also be changed on the fly:
python train.py --algo ppo --env CartPole-v1 -params n_envs:4

and the type of vec env is controlled via the --vec-env argument

Thanks a lot.

Hello，When I use python train.py --algo tqc --env PandaReach-v1 -params n_envs:4，I met an error，
ValueError: Error: the model does not support multiple envs; it requires a single vectorized environment.
is this model not supporting multiple environments？or any other problems.Thanks a lot.

@learningxiaobai
As error states, the algorithm does not support multiple environments (off-policy methods like DQN, DDPG, TD3, SAC and TQC only work with one env). Close the issue if this answered the question.

does not support multiple environments (off-policy methods like DQN, DDPG, TD3, SAC and TQC only work with one env).

not yet https://github.com/DLR-RM/stable-baselines3/issues/179
(her reply buffer support will take additional time)

does not support multiple environments (off-policy methods like DQN, DDPG, TD3, SAC and TQC only work with one env).

not yet DLR-RM/stable-baselines3#179
(her reply buffer support will take additional time)

hello,when I use not her reply buffer,it didn't work as usual,such as:
python train.py --algo ddpg --env HalfCheetahBulletEnv-v0 -params n_envs:4
I still met the same error, what is the problem?

I still met the same error, what is the problem?

are you using the experimental branch https://github.com/DLR-RM/stable-baselines3/pull/439 ?
if not, that's normal, as @Miffyli off-policy algos on master do not support multi env training (but this will change once the PR is merged)

I added experimental support for multi env with HER in https://github.com/DLR-RM/stable-baselines3/pull/654

I added experimental support for multi env with HER in DLR-RM/stable-baselines3#654

great work！！！！！

Hello, I use the branch feat/multienv-her，but When I use python train.py --algo tqc --env PandaReach-v1 -params n_envs:4，I still met the error.
ValueError: Error: the model does not support multiple envs; it requires a single vectorized environment.

I added experimental support for multi env with HER in DLR-RM/stable-baselines3#654

Hello, I use the branch feat/multienv-her，but When I use python train.py --algo tqc --env PandaReach-v1 -params n_envs:4，I still met the error.
ValueError: Error: the model does not support multiple envs; it requires a single vectorized environment.

you need to use that branch of contrib: https://github.com/Stable-Baselines-Team/stable-baselines3-contrib/pull/50

Hello， I met an error，Is there some wrong with her ？Thanks.
(rl-baselines3-zoo-master) C:\codes\rl\rl-baselines3-zoo-master>python train.py --algo tqc --env PandaPush-v1 -params n_envs:3 ========== PandaPush-v1 ========== Seed:<PHONE_NUMBER> Default hyperparameters for environment (ones being tuned will be overridden): OrderedDict([('batch_size', 2048),              ('buffer_size', 1000000),              ('env_wrapper', 'sb3_contrib.common.wrappers.TimeFeatureWrapper'),              ('gamma', 0.95),              ('learning_rate', 0.001),              ('n_envs', 3),              ('n_timesteps', 1000000.0),              ('policy', 'MultiInputPolicy'),              ('policy_kwargs', 'dict(net_arch=[512, 512, 512], n_critics=2)'),              ('replay_buffer_class', 'HerReplayBuffer'),              ('replay_buffer_kwargs',               "dict( online_sampling=True, goal_selection_strategy='future', "               'n_sampled_goal=4, )'),              ('tau', 0.05)]) Using 3 environments Creating test environment pybullet build time: Nov  2 2021 15:42:29 argv[0]= C:\ProgramData\Anaconda3\envs\rl-baselines3-zoo-master\lib\site-packages\gym\logger.py:34: UserWarning: WARN: Box bound precision lowered by casting to float32   warnings.warn(colorize("%s: %s" % ("WARN", msg % args), "yellow")) argv[0]= argv[0]= argv[0]= Using cpu device Log path: logs/tqc/PandaPush-v1_2 Traceback (most recent call last):   File "train.py", line 195, in <module>     exp_manager.learn(model)   File "C:\codes\rl\rl-baselines3-zoo-master\utils\exp_manager.py", line 202, in learn     model.learn(self.n_timesteps, **kwargs)   File "C:\ProgramData\Anaconda3\envs\rl-baselines3-zoo-master\lib\site-packages\sb3_contrib\tqc\tqc.py", line 299, in learn     reset_num_timesteps=reset_num_timesteps,   File "C:\ProgramData\Anaconda3\envs\rl-baselines3-zoo-master\lib\site-packages\stable_baselines3\common\off_policy_algorithm.py", line 375, in learn     self.train(batch_size=self.batch_size, gradient_steps=gradient_steps)   File "C:\ProgramData\Anaconda3\envs\rl-baselines3-zoo-master\lib\site-packages\sb3_contrib\tqc\tqc.py", line 194, in train     replay_data = self.replay_buffer.sample(batch_size, env=self._vec_normalize_env)   File "C:\ProgramData\Anaconda3\envs\rl-baselines3-zoo-master\lib\site-packages\stable_baselines3\her\her_replay_buffer.py", line 652, in sample     samples.append(self.buffers[i].sample(int(batch_sizes[i]), env))   File "C:\ProgramData\Anaconda3\envs\rl-baselines3-zoo-master\lib\site-packages\stable_baselines3\her\her_replay_buffer.py", line 212, in sample     return self._sample_transitions(batch_size, maybe_vec_env=env, online_sampling=True)  # pytype: disable=bad-return-type   File "C:\ProgramData\Anaconda3\envs\rl-baselines3-zoo-master\lib\site-packages\stable_baselines3\her\her_replay_buffer.py", line 295, in _sample_transitions     episode_indices = np.random.randint(0, self.n_episodes_stored, batch_size)   File "mtrand.pyx", line 746, in numpy.random.mtrand.RandomState.randint   File "_bounded_integers.pyx", line 1338, in numpy.random._bounded_integers._rand_int32 ValueError: high <= 0

I don't think it is not related to multiprocessing. I suggest you to open a new issue.
The model tries to sample transitions before the first episode is stored. What is the value of training_start? Did you change the environment in any way?

I don't think it is related to multiprocessing. I suggest you to open a new issue. The model tries to sample transitions before the first episode is stored. What is the value of learning_starts? Did you change the environment in any way?

nothing changed.just use default setting

add learning-start in PandaPush ,it works,thanks @qgallouedec


Consider using a proper lexer for things like quoted longnames

Several modules in JSDoc contain what are more or less highly specialized lexers. For example, jsdoc/name includes code of this sort to handle quoted longnames, and jsdoc/tag/type does something similar to extract type expressions from strings.
We should consider using the Lexer module to reimplement this code, which, if nothing else, would probably make the code more maintainable.

Lexer seems rather dead. And it has no tests. I would not trust it.

This is not particularly important.

Another option: https://github.com/no-context/moo


Settings appears once in metadata, but each set of software may have its own

The settings field of Metadata should be moved to Software so different software packages can set and maintain their own settings without the user having to pry the information out of an ad-hoc JSON array or somesuch.

This makes sense to me.  I'll work on that for the next release.

This change is included in the WCON specification updates in #146

So the new schema for the "software" object is, to use an example for clarity, either like the below example or an array of such objects:
"software":
	{
		"tracker": {"name": "Michael", "version": "0.3.4"},
		"featureID": "@OMG",
		"settings": {}
	}

"settings" can be anything desired.
I added a stub test to at least check that including settings doesn't cause a problem with an arrayed set of software specifications.   b44a535c3c4c6274aedc0db98e61421cf7a3fbf8


SvelteKit 2

Pull Request Checklist
Note to first-time contributors: Please open a discussion post in Discussions and describe your changes before submitting a pull request.
Before submitting, make sure you've checked the following:

[x] Target branch: Please verify that the pull request targets the dev branch.
[x] Description: Provide a concise description of the changes made in this pull request.
[x] Changelog: Ensure a changelog entry following the format of Keep a Changelog is added at the bottom of the PR description.
[ ] Documentation: Have you updated relevant documentation Open WebUI Docs, or other documentation sources?
[ ] Dependencies: Are there any new dependencies? Have you updated the dependency versions in the documentation?
[ ] Testing: Have you written and run sufficient tests for validating the changes?
[ ] Code review: Have you performed a self-review of your code, addressing any coding standard issues and ensuring adherence to the project's coding standards?
[ ] Prefix: To cleary categorize this pull request, prefix the pull request title, using one of the following:

BREAKING CHANGE: Significant changes that may affect compatibility
build: Changes that affect the build system or external dependencies
ci: Changes to our continuous integration processes or workflows
chore: Refactor, cleanup, or other non-functional code changes
docs: Documentation update or addition
feat: Introduces a new feature or enhancement to the codebase
fix: Bug fix or error correction
i18n: Internationalization or localization changes
perf: Performance improvement
refactor: Code restructuring for better maintainability, readability, or scalability
style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc.)
test: Adding missing tests or correcting existing tests
WIP: Work in progress, a temporary label for incomplete or ongoing work

Changelog Entry
Description

[Concisely describe the changes made in this pull request, including any relevant motivation and impact (e.g., fixing a bug, adding a feature, or improving performance)]

Added

[x] Migrated to SvelteKit 2;
[x] Added Node 18.13 required;
[x] Added typescript improvements;
[x] Clean up the code;

Changed

[List any changes, updates, refactorings, or optimizations]

Deprecated

[List any deprecated functionality or features that have been removed]

Removed

[List any removed features, files, or functionalities]

Fixed

[List any fixes, corrections, or bug fixes]

Security

[List any new or updated security-related changes, including vulnerability fixes]

Breaking Changes

BREAKING CHANGE: [List any breaking changes affecting compatibility or functionality]

Additional Information

[Insert any additional context, notes, or explanations for the changes]

[Reference any related issues, commits, or other relevant information]

Screenshots or Videos

[Attach any relevant screenshots or videos demonstrating the changes]

Atomic changes please!


Animation player doesn't let update track properties

Godot version
Godot 4 RC5
System information
Windows 10
Issue description
When I add a position track and add a keyframe to it, it won't let me move the node
https://user-images.githubusercontent.com/93532233/221439385-29453eb3-5de5-493a-aa7e-ea70dba97fdb.mp4
Steps to reproduce
Add to an animation from the animation player a keyframe of a property (position for example) and you will see that later it does not let you move it
Minimal reproduction project
N/A

Can't reproduce. Can you make a minimal reproduction project?

Looks like you have an AnimationTree active. It will override the AnimationPlayer and will force the animation values so you won't be able to edit it. You'll need to deactivate the AnimationTree to be able to modify the animations.

Thanks, i didn´t realize i had it enable

This seems a bit confusing, so maybe something can be improved here.

Ran into a similar issue myself.
I was using the rotation property of a Marker2D. With an AnimationTree active in the scene the rotation property becomes locked to a value of 0 after it has been key-ed to an animation.
However, if I change the track mode for the property from continuous to discrete then I am able to change the value of rotation and key it properly again.
Or, as @mrcdk said, if you deactivate the AnimationTree then you can still change the property value and key it even if the track mode is still continuous (which is the default when key-ing the property).

I've run into a similar issue in Godot 4.0. The minimal reproduction project is attached.
I have an AnimationTree with an AnimationNodeStateMachine manually driving the animations for an AnimationPlayer. The AnimationPlayer has three animations: MoveRight, RotateToZero, and RESET. The MoveRight animation moves a sprite to the right, the RotateToZero sets the rotation degrees to zero. RESET only sets the position of the sprite to Vector2.ZERO.
The issue arises when the RotateToZero rotation track is set to continuous as valegians (above) stated.
The issue is that if I set the sprite rotation by code, then once AnimationTree.advance() is called, the sprite is rotated back to zero. This happens regardless of the angle set in the rotation track in the RotateToZero animation.
Another thing to note is that inside of the AnimationNodeStateMachine, the AnimationTree goes from start -> MoveRight -> end. The RotateToZero animation is not inside of the AnimationTree at all.
AnimationBug.zip

I've run into a similar issue in Godot 4.0. The minimal reproduction project is attached.
I have an AnimationTree with an AnimationNodeStateMachine manually driving the animations for an AnimationPlayer. The AnimationPlayer has three animations: MoveRight, RotateToZero, and RESET. The MoveRight animation moves a sprite to the right, the RotateToZero sets the rotation degrees to zero. RESET only sets the position of the sprite to Vector2.ZERO.
The issue arises when the RotateToZero rotation track is set to continuous as valegians (above) stated.
The issue is that if I set the sprite rotation by code, then once AnimationTree.advance() is called, the sprite is rotated back to zero. This happens regardless of the angle set in the rotation track in the RotateToZero animation.
Another thing to note is that inside of the AnimationNodeStateMachine, the AnimationTree goes from start -> MoveRight -> end. The RotateToZero animation is not inside of the AnimationTree at all. AnimationBug.zip

Currently experiencing a similar issue. I have some code that will rotate a node, and when an animation exists (which is not in use) that alters the same property, it will force the rotation value to lock in place.


Add foundry-merge-nodes option

Adds an option foundry-merge-nodes used with:
kevm foundry-merge-nodes [Contract.test_name] --node [node id] --node [node id]

which creates a new node which is the anti_unify_with_constraints of all the listed nodes and makes this node a cover of all the listed nodes.
Optionally, include the --include-disjunct flag to keep the abstracted nodes as an orBool disjunction, e.g.
<k> 1 </k>

merged with
<k> 2 </k>

would yield:
<k> N:Int </k>
#And (N ==K 1 orBool N ==K 2)

Additionally, the PR changes foundry-remove-node so that it no longer prunes the target node if it is a child of the removed node, and fixes foundry-step-node, foundry-section-edge, foundry-remove-node, foundry-list and foundry-to-dot, which were assuming that the proof being operated on was an APRProof and not an APRBMCProof, so they converted the proof back to an APRProof.

Let's reduce whitespace a bit, no need to define some of the intermediates (eg. intermeditae for new_cterm, can just directly create it an insert it as a node). Also, instead of naming the variables apr_proof, I've been trying to switch to just the more compact proof name everywhere.

We should also be putting a sanity check on the nodes the user has asked to merge. Specifically, they all must:

Have the exact same content in the following cells: <k>, <program>, <pc>, <callDepth>.

Pulled out foundry_get_apr_proof and foundry_get_proof into #2002.

I think this is now failing because the #lookup is not working because the merge is deleting the sort information on the two values it merges. It should be able to infer the weakest sort that covers both. I can't explain why 5f99e71 passed CI.


feat: AlicanAkyuz/Fix connecting another account after insufficient funds error

The type of this PR is: Fix
Description
The PR fixes the issue that a user should be able to click on Save and Continue button after receiving an insufficient funds error on their initially-connected account.
The solution here is to set the relevant error state to false when a new bank account connection is completed.
Video
https://user-images.githubusercontent.com/42584148/183929157-ff669b79-7408-4aa1-bb12-c4a81651ea8a.mov

merged this fix here: https://github.com/artsy/force/commit/978a5c60c3f4dfcbc5a914e0517c37c49fab6961


Allow text wrapping behavior to be controlled

when the word is very long, the text wrap will be not good.
at web, we can use word-break: break-all; to solve it.
so, can flutter add the feature?
Use case
MaterialApp(
  theme: new ThemeData(),
  home: Scaffold(
    body: Center(
      child: Container(
        width: 100.0,
        child: Text.rich(
          TextSpan(text: '中文information spropaganda accomplishment accomplishment'),
        ),
      ),
    ),
  ),
)

like this, between two long word, there is very large spacing.
Proposal
please add new params wordBreak to TextSpan, let word wrap at end of line, instead of end of word.

Reference how does it look in CSS https://developer.mozilla.org/en-US/docs/Web/CSS/word-break

/cc @Hixie for thoughts.

@VladyslavBondarenko are you saying you want the text to overflow its box?

@Hixie I attached the link to CSS docs to show what behavior author would like to achieve:
corresponding to word-break: break-all; instead of corresponding to word-break: break-word;

Ah, got it. FWIW, you should be able to do this today by just inserting a word separator between every character. It might make Thai and Arabic look a bit weird though.
To implement this we would probably start by adding a wrapStyle property to ui.TextStyle. Exactly what values it takes is a little tricky. We need to express both where line breaking opportunities happen, and how they take priority (e.g. break at the first of these opportunities, unless you find none, in which case break at these, etc). We could do this by having a hard-coded set of patterns, like CSS, or we could have some more elaborate mechanism. I suppose the ultimate solution would be to just pass in a closure that gets called to see where we should wrap. Probably too expensive though.

I'm also in need for this. I was looking everywhere thinking there must be a way to do it (wrapping text by breaking words). My use case is showing long URLs in little space, I want them to wrap but then since random characters of it are considered braking (like -), I get ugly things like:

Where what I want is almost this (I'm replacing the hyphen with a non-breaking hyphen, \u2011, but it is still breaking at / and I can't find a non-breaking /):

The even if there were a non-breaking slash, replacing characters is not really a solution as I want the text to be selectable (and copyable) too, and then the text becomes an invalid URL.
Same could be applied to long UUIDs or similar long strings.
I even tried to look at Flutter's code to see how wrapping was done (as word-breaking wrapping is the simplest way of wrapping ever I guess it shouldn't be too hard to implement), but I failed to find where normal word wrapping is being done.

I'm also in need for this. I was looking everywhere thinking there must be a way to do it (wrapping text by breaking words). My use case is showing long URLs in little space, I want them to wrap but then since random characters of it are considered braking (like -), I get ugly things like:

Where what I want is almost this (I'm replacing the hyphen with a non-breaking hyphen, \u2011, but it is still breaking at / and I can't find a non-breaking /):

The even if there were a non-breaking slash, replacing characters is not really a solution as I want the text to be selectable (and copyable) too, and then the text becomes an invalid URL.
Same could be applied to long UUIDs or similar long strings.
I even tried to look at Flutter's code to see how wrapping was done (as word-breaking wrapping is the simplest way of wrapping ever I guess it shouldn't be too hard to implement), but I failed to find where normal word wrapping is being done.

+1

///breakWord数据
String get breakWord{
String breakWord = ' ';
runes.forEach((element){
breakWord += String.fromCharCode(element);
breakWord +='\u200B';
});
return breakWord;
}
Perfect

///breakWord数据
String get breakWord{
String breakWord = ' ';
runes.forEach((element){
breakWord += String.fromCharCode(element);
breakWord +='\u200B';
});
return breakWord;
}
Perfect

///breakWord数据
   String get breakWord{
    String breakWord = ' ';
    runes.forEach((element){
      breakWord += String.fromCharCode(element);
      breakWord +='\u200B';
    });
    return breakWord;
  }

Perfect

///breakWord数据
String get breakWord{
String breakWord = ' ';
runes.forEach((element){
breakWord += String.fromCharCode(element);
breakWord +='\u200B';
});
return breakWord;
}
Perfect

Thanks for the workaround, but again, this doesn't cover all use cases:

replacing characters is not really a solution as I want the text to be selectable (and copyable) too, and then the text becomes an invalid URL.
Same could be applied to long UUIDs or similar long strings.

Adding a breaking character between each character have the same issue about being able to copy the original string by selecting it.

Any update on this?

Any advance on this?

From https://github.com/flutter/flutter/issues/61081#issuecomment-738454863

Ah, got it. FWIW, you should be able to do this today by just inserting a word separator between every character. It might make Thai and Arabic look a bit weird though.
...

Replace space with '\u00a0' where you don't want to break
Insert '\ufeff' between the characters you don't want to break
Optionally insert '\u200b' where you want to break

Facing same problem, zero-width char broken text copy in third-party libraries.

You can try magic_text widget to solve it. This widget wrap the text and handle word break character automatically.
[https://pub.dev/packages/magic_text](Magic Text Pub package)

Facing same problem, zero-width char broken text copy in third-party libraries.

You can try magic_text widget to solve it. This widget wrap the text and handle word break character automatically.
https://pub.dev/packages/magic_text

I came up with this solution.
What do you think?
It looks like that:
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: SingleChildScrollView(
            child: SelectionArea(
              child: Text.rich(
                BreakAllTextSpan(
                    '''Loremipsumdolorsitamet, consecteturadipiscingelit.Sedauctoreuismodplacerat.Crassuscipitatmassasedpulvina.Inpurusnisl,bibendumsitametdolorac,feugiat mattis risus. Maecenas vehicula lobortis justo, nec tincidunt nulla convallis ac. Nam nulla lacus, tincidunt id malesuada in, ultricies non enim. Morbi non sodales ex. Integer vitae odio sit amet nisi finibus malesuada ut in libero. Sed auctor tempus nisl. Donec et scelerisque nunc. Quisque rhoncus nunc quam. Aliquam erat volutpat. Integer condimentum sit amet quam ac accumsan. Donec porttitor faucibus vulputate. Ut sollicitudin vestibulum augue vel suscipit.'''),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

class BreakAllTextSpan extends TextSpan {
  BreakAllTextSpan(String text) : super(text: text.breakString);

  @override
  void computeToPlainText(StringBuffer buffer,
      {bool includeSemanticsLabels = true, bool includePlaceholders = true}) {
    if (semanticsLabel != null && includeSemanticsLabels) {
      buffer.write(semanticsLabel);
    } else if (text != null) {
      buffer.write(text?.unbreakString);
    }
    if (children != null) {
      for (final child in children!) {
        child.computeToPlainText(
          buffer,
          includeSemanticsLabels: includeSemanticsLabels,
          includePlaceholders: includePlaceholders,
        );
      }
    }
  }
}

const zeroWidthSpace = '\u200B';

extension StringExtension on String {
  String get breakString {
    // Makes the string in [Text] widget behave like with CSS style `word-break: break-all;`
    // (src: https://github.com/flutter/flutter/issues/61081#issuecomment-1103330522)
    return runes
        .map<String>(
            (element) => '${String.fromCharCode(element)}$zeroWidthSpace')
        .join();
  }

  String get unbreakString {
    return replaceAll(zeroWidthSpace, String.fromCharCode(0xFFFC));
  }
}


Enqueue opaque frame read and writes to maintain ordering

Enqueue opaque frame read and writes to maintain ordering

Great catch. I've cherry picked your change to the PR.


Update telegraf Docker tag to v1.26.3

This PR contains the following updates:

Package
Update
Change

telegraf
patch
1.26.1 -> 1.26.3

Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.

[ ] If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot.

Edited/Blocked Notification
Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.
You can manually request rebase by checking the rebase/retry box above.
⚠ Warning: custom changes will be lost.


Numerous fixes and changes

Jack had me look through all the code.
This PR will :

Remove false support for Mac PPC and Mac 680x0 from getOS()
Remove unnecessary imports
Replace ~/.openbin/ with XDG specification directories
Use symlinks instead of alias to create ob command
Include install scripts as assets in website, replacing reliance on GitHub for downloads
Have a Makefile to make building easier

Replaced hardcoded SUPABASE_URL and SUPABASE_KEY variables with build-time variables
Replaced the old artifact building and deploying script (for GH Releases)

Added a check to ensure port 8089 is open for authentication
Remove duplicate code and unnecessary branches
Replaced (a lot) of logical or with nullish coalescing

Some other things that should be done that I didn't have a chance to do :

Rate limiting on the API that is stricter for unauthenticated users
Automated tests for the API and CLI
Proper documentation and commenting in web/
Respect user tracking preferences and not load Umami at all if GPC is present
Rewriting the footer to support two lines, if you ever add the link list back
Add proper buttons to profile page for account management
Gracefully handle missing environment variables at server start
Gracefully handle missing SUPABASE_SERVICE_KEY on account deletion
Fix non-functional date picker
Gracefully handle disallowed code publishing (web)
Consider using username (from GH or whatever) instead of UUID for profile URLs

Woah! This is amazing! We'll get back to your PR when make a seperate branch so the judges over at Supabase know what to look at.

Hey there @doamatto, we've decided against merging any commits until after the winners and results are released by Supabase, so we'll loop back to this in a little bit. Thanks!


[Bug] argparse.ArgumentError: argument command: conflicting subparser: chat

Checklist

[X] 1. I have searched related issues but cannot get the expected help.
[X] 2. The bug has not been fixed in the latest version.

Describe the bug
运行控制台交互式对话命令lmdeploy chat /root/share/model_repos/internlm2-chat-7b  报错如下：

Reproduction
lmdeploy chat /root/share/model_repos/internlm2-chat-7b
Environment
终端运行lmdeploy check_env也报相同的错误
Traceback (most recent call last):
  File "/root/.conda/bin/lmdeploy", line 8, in <module>
    sys.exit(run())
             ^^^^^
  File "/root/.conda/lib/python3.11/site-packages/lmdeploy/cli/entrypoint.py", line 19, in run
    CLI.add_parser_chat()
  File "/root/.conda/lib/python3.11/site-packages/lmdeploy/cli/cli.py", line 81, in add_parser_chat
    parser = CLI.subparsers.add_parser(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.conda/lib/python3.11/argparse.py", line 1192, in add_parser
    raise ArgumentError(self, _('conflicting subparser: %s') % name)
argparse.ArgumentError: argument command: conflicting subparser: chat

lmdeploy版本为0.3.0

Error traceback
Traceback (most recent call last):
  File "/root/.conda/bin/lmdeploy", line 8, in <module>
    sys.exit(run())
             ^^^^^
  File "/root/.conda/lib/python3.11/site-packages/lmdeploy/cli/entrypoint.py", line 19, in run
    CLI.add_parser_chat()
  File "/root/.conda/lib/python3.11/site-packages/lmdeploy/cli/cli.py", line 81, in add_parser_chat
    parser = CLI.subparsers.add_parser(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.conda/lib/python3.11/argparse.py", line 1192, in add_parser
    raise ArgumentError(self, _('conflicting subparser: %s') % name)
argparse.ArgumentError: argument command: conflicting subparser: chat

It seems occurs in python 3.11 version. If you are in a hurry, you can try it on python 3.10, it works fine on python 3.10.

It seems occurs in python 3.11 version. If you are in a hurry, you can try it on python 3.10, it works fine on python 3.10.

Thank you, i will try it

Let me reproduce the issue and see if there's a good solution for py311.

@zcg-joker Hi, sorry for the trouble. If you have time, could try pr #1401.

大哥，是不是只修了chat没修serve啊

serve 不会有这个问题的。 你这边有问题的话，可以给下版本和复现代码

closing it since no more activities. Feel free to reopen it if it is still an issue


Multiple indices in Invenio_records_rest

Is it possible to use multiple indices in a single app using invenio_records_rest? If possible which variables needs to be updated.

Yes, it's possible. See http://invenio-records-rest.readthedocs.io/en/latest/usage.html#configuration for details.
E.g. you can have /api/records/ and /api/authors. The /api/records/ will search over an Elasticsearch alias named records  which can search multiple indexes (e.g. records-record-v1.0.0 and records-record-v1.1.0. Similar goes for /api/authors.


[Question] Custom environment produces "invalid literal" error when receiving message from energyplus

Question ❓
Have you come across non-interpretable messages from energyplus leading to errors?
Additional context
I have set up a custom environment to use with sinergym. gym.make() runs successfully, but when I do env.reset() I get the error message:
ValueError: invalid literal for int() with base 10: 'Ç|2'
this occurs when disaggregating the first message received from energyplus in the line
sinergym/sinergym/simulators/eplus.py:539
version = int(rcv[0])
I was wondering if anyone has come across this problem and might know the cause for it?
Thank you!

Hi @HannesGauch,

Have you come across non-interpretable messages from energyplus leading to errors?

This kind of messages occur when there is some kind of problem with the simulation directly (not exactly with Sinergym).

I was wondering if anyone has come across this problem and might know the cause for it?

In spite of the error you mention, an output folder will have been created from that execution. Check it and look in <execution_output_folder>/<subrun_folder>/output/eplusout.err.
There should be more information about the error you are getting with the "Severe" tag.

Thank you @AlejandroCN7 !
The eplusout.err file is empty, unfortunately, and the idf file runs fine before modifiying it for sinergym.
I have pinned down the problem to the use of the observation variable:
"Environmental Impact Total CO2 Emissions Carbon Equivalent Mass(Whole Building)"
When i don't use this observation variable, the problem disappears.
Are there any known limitations to which variables can be used as observation variables (except that they have to be present in the .rdd file) ?

Thanks again @AlejandroCN7!
I am not using Normalization wrapper, but I finally found my problem.
The key for the observation variable was wrong. Should have been "Site" instead of "Whole Building".
It might be worth changing sinergym.utils.config.Config._check_observation_variables() to allow for other keys than Zone names, "Whole Building" and "Environment".
Thanks again and best regards!

Hi @HannesGauch,
Good to see you've solved it!
In the last version (v2.2.0), observation variables check has been updated , now only check is done when variable type is Zone. As we find out more about the variables, we will add new checks, such as HVAC variable type. In any case, I plan to add checks like your comment about variable type is correct or not.
I close this issue, if you have any questions feel free to reopen this issue or create another one :).
Thank you so much!


chore(sequencer): migrate executed_proposal_fingerprint and executed_proposal_hash to ephemeral store

Moving these two fields to the ephemeral store should clean up execution flows and make resets much simpler between rounds. Holding off till later since this is critical path code.
┆Issue Number: ENG-920

This issue is stale because it has been open 45 days with no activity. Remove stale label or this issue
be closed in 7 days.

This issue was closed because it was stale


Build docker & publish images

Why?
To allow users to easily run obsctl in an interactive environment through Docker without having to install Go or compile the project.
What was done

The Docker images are built using the same mechanism as in observatorium/up.

The latest tag is never used, only versioned ones.

Fixed the make build command to use go build with the local source instead of go install.
The project is now built by default with Go 1.18.

Has to be done by maintainers

Create Docker image repo at quay.io/observatorium/obsctl
Add the Quay secrets to the Github Actions, like done for Up.

Hmm, so after some deeper thought, I'm confused what the utility of doing this is. 😅
The utility of obsctl lies in the fact that once someone saves their API details and logs in as a tenant, they do not have to re-authenticate again, ever. They can now do as many operations (obsctl metrics *) as needed, without having to reconfigure their credentials or worry about refreshing some token. And they can save multiple APIs and tenants, and switch between them.
By containerizing obsctl, it loses the ability to persist this data, as containers are ephemeral by nature. So one would have to add API, login as a tenant, and then do the operations they need to do every time.  The obsctl config file is lost as soon as the operation completes. They also cannot do operations for different tenants at once.
This makes obsctl no different from token-refresher + cURL , so might as well use that instead. 😅
To retain the usefulness of obsctl, a user would have to run obsctl containers with a volume mount flag to save the config file somewhere and use it every time they run an obsctl container, which feels more complicated and way less intuitive than just installing Go and building obsctl.
@douglascamata you mentioned that using a docker image instead of installing obsctl, made it easier to use. Would love to know what issues you found that made you think so? 🤔
Feel free to correct me if I'm wrong somewhere! 🙂

If going through the setup process repeatedly is a problem, we can use the environment variable for custom config folder and mount it into the container. It's an easy solution that is already possible and requires only documentation.

Just weighing in as I believe we're at an impasse.
What utility does docker provide? Portable environment agnostic executables for a binary. Given this is being built using go, and we can do multi-arch builds, +obsctl sessions are stateful (that's kinda the whole point of obsctl) it doesn't make sense to wrap this in docker (no real benefits in portability and we add an additional step to our build processes) as we lose utility (persistent OIDC config).
I'm not convinced this has to be dockerized, we should instead look at distributing the cross-platform binaries for easier consumption.

The utility is described in the why section of the PR: To allow users to **easily run obsctl** in an interactive environment through Docker **without having to install Go or compile the project**.

(...) that it doesn't currently have with go cross-platform binaries.

Currently this project does not distribute any binary.

Currently this project does not distribute any binary.

I don't think using docker images as a vehicle for distributing a CLI is appropriate. There are other alternatives we can look into (Github Release Assets integrates with GH actions and is a CDN for cross-platform go binaries that users can WGET/curl to get on their local path)
Docker is really really cubersome for this kind of tool. It has a prerequisite of a user needing to install docker, and it's easier to just give them a binary to run that is persistent between sessions.


CAMEL-13211 - SMPP: Host, port and systemid component configuration i…

…s always overridden by URI configuration

Thank you very much for the reviews guys!


Fix for product core alias typo

Import alias userProduct was renamed to productCore, which better describes the package and follows the pattern in usergrp.

This is a good change.


Support for Flutter web?

I just wanted to ask if you have considered to extend the library to support Flutter web.
Keep up the great work!

hI @rseibane
I do not have use cases for web so far, however it might be interesting to implement,
do you have ideas how it can be implemented for web?

Hi @mogol ,
I'm a bit puzzled when you say you don't have use cases for web.
I understand that your library is often used to store jwt (as I do).
Would you recommend other ways to handle this for web and mobile ?

As many Flutter developpers, I'm using this plugin to store JWT Token.
Since flutter web is in beta, we need this kind of plugin to develop PWA.
Any plan support WEB for this plugin ?

I'm unsure of how this would be done. Local storage in the browser is not secure at all and is prone to XSS attacks. Cookies with an HttpOnly header are immune to XSS attacks, but are vulnerable to CSRF attacks in itself. That means there should be some CSRF protection in place, and is, as far as I would imagine, out of scope for this project. If something similar exists though, it would be an excellent opportunity for this library to interface with it.

After giving a thought to the web storage, I find this library a bit out of scope. I agree with @arnemolland.
I have a question regarding to the Android implementation, not sure I need to open a different issue so I will ask it here. Have you considered using the Android Backup Service instead of the Android Auto Backup? I find it more similar to the Apple Keychain.
Differences between the different backups systems supported by Android: https://developer.android.com/guide/topics/data/backup.html
What do you think?

I'm sure there's more people like me who'd like to use app with Flutter for web but are unable to do so because of this package.
A solution will be highly appreciated.

I wish there is support for Flutter Web too. (We all love ready-to-use solutions :D )
However, this package is just handles writing and reading String data into Keychain or KeyStore. These are the native and protected way of storing key-value pairs on the mobile operating systems, aka iOS and Android. So as far as I know, this package is a bridge between those stores.
So I'm not sure if this package should or can cover the web part.
BTW, my use case is similar. I'm storing the JWT tokens of logged-in users using this package.

I took a quick look at the Credential Management API, but it seems to be restricted to credentials and not arbitrary key-value pairs. It could be done in a hacky way, using PasswordCredential and setting e.g. idName as the key and passwordName as the value, but it's ugly and the API is experimental. Still, this is a tough one as browsers are very different from any mobile client. The user (and any other program) will always have access to anything stored in the browser, making a 100% secure solution impossible.
As there's no secure way to persist values locally, the goal is to minimize risk. One could just use encrypted localStorage, sessionStorage, cookies or in-memory storage, as long as it's made clear that data is not secure. However, that defeats the purpose of this package. If it's really sensitive data, you should run your own web server.
One solution could be for the user to provide their own key for encryption of localStorage data and let them handle the key themselves. However, if someone gets a hold of this key, all data would be vulnerable. It's the same problem, only distilled to the problem of storing a single key instead of the data.

Any progress on web support?

Any progress on web support?

I'm working on a tutorial to help all of you who struggle with this, as there are more workarounds required than a package can do to make Web session storage really secure. I highly doubt the package will ever support the Web, as there is NO single secure storage for the Web, but the good practices usually employed in Web development can be applied to Flutter using dart:html. I'm working a tutorial on exactly that.

I found out what must be done:

use cookie/webstorage to storage data
add additional CSRF validation

Since I'm working on CRM system with Web support, I think one day I may go back with some PR, but for now I have another priorities.

Yes, but that's beyond what a package can do. CSRF validation must be done on the backend with a separate token you store in localStorage and send along with each request. Remember to generate the CSRF token from the JWT but not have it be the JWT. And, also the backend must send the JWT as an httpOnly cookie, so any frontend package can't really touch it.

From: Julian Kowalczuk<EMAIL_ADDRESS>Sent: Wednesday, April 22, 2020 12:49:29 PM
To: mogol/flutter_secure_storage<EMAIL_ADDRESS>Cc: Carmine Zaccagnino<EMAIL_ADDRESS>Comment<EMAIL_ADDRESS>Subject: Re: [mogol/flutter_secure_storage] Support for Flutter web? (#96)
I found out what must be done:

use cookie/webstorage to storage data
add additional CSRF validation

Since I'm working on CRM system with Web support, I think one day I may go back with some PR, but for now I have another priorities.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHubhttps://github.com/mogol/flutter_secure_storage/issues/96#issuecomment-617702894, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AA3R7HKRVEDK356S6BI5MITRN3DTTANCNFSM4JZ4RH2Q.

@JulianKowalczuk the code for both the backend and the app is on my GitHub, in case you are impatient, a blog post detailing everything is coming tomorrow if everything goes according to plan.

There you go https://carmine.dev/posts/flutterwebjwt/ @vanlooverenkoen  @parnurzeal @JulianKowalczuk  @rseibane and everyone else

@carzacc Thank you for your contribution and detailed post. Yesterday I’ve checked it.
I have a very complex Flutter Web app going on. I also wrote a NodeJs app for various functionalities including registering and logging users in.
I will just create a separate api for the web app which provides an httpOnly version of user token and a CSRF token.
As far as I know your approach is the secure standard of keeping users logged in on WebApps. Thank you again for providing the code and PoC.

There you go https://carmine.dev/posts/flutterwebjwt/ @vanlooverenkoen @parnurzeal @JulianKowalczuk @rseibane and everyone else

i also came across this because of the flutter web requirement.
so this means that using this approach, it is not possible with just one codebase? since the mobile app uses flutter secure storage while the web does not.

@chitgoks You can't explicitly filter out dependencies, but you can avoid using them. One approach is to wrap your code like this
if(!kIsWeb) {
  // Use flutter_secure_storage
}

and use an else statement to implement the web logic

hi @arnemolland yes i did that now and used localStorage as alternative for web

I now use https://github.com/hivedb/hive for web, works very well for me and uses indexeddb

I now use https://github.com/hivedb/hive for web, works very well for me and uses indexeddb

I also came upon that approach, do you have any experience with it? Does it work fine or is it too much overhead for just implementing an authentication service?

works well, but doesn't support IE Edge Trident properly, see https://github.com/hivedb/hive/issues/357

I now use https://github.com/hivedb/hive for web, works very well for me and uses indexeddb

The problem with Hive is that you still need an encryption key:
https://github.com/hivedb/docs/blob/master/advanced/encrypted_box.md
So, as it is still needed to store the encryption key securely when your application is closed, we still have the same initial problem...

Web doesn't have a secure way to store stuff locally on the browser as of now. There can only be a placeholder for the web, so Flutter Web doesn't throw MissingImplementationError, as biometric_storage has.

Web doesn't have a secure way to store stuff locally on the browser as of now. There can only be a placeholder for the web, so Flutter Web doesn't throw MissingImplementationError, as biometric_storage has.

Just a conclusion:

use flutter_secure_storage on mobile
use localStorage on web

if(!kIsWeb) {
  // Use flutter_secure_storage
  var jwt = await storage.read(key: "jwt");
} else {
 // Use localStorage
  var csrfTokenOrEmpty = window.localStorage.containsKey("csrf") ? window.localStorage["csrf"] : "";;
}

Thanks for all the info on this! I ran into this issue making sure I have security in place for a cross platform app, this may help if anyone is using Flutter with auth0 and secure_storage, as everyone mentions here this will work fine for mobile platforms but the web platform fails immediately doing a secure storage read with a PlatformException.  So that's how I arrived here looking for secure_storage for flutter/web.
Here's a good article that I found - basically what BartusZac was saying - this seems to be an approach that I need to look at, because I need to set up security first instead of last when we find out all this stuff doesn't quite work on all platforms.
I need to figure this out because I need to secure a webapi with bearer tokens so I can get at the right identity in a Neo4j graph database.
[https://dev.to/carminezacc/securely-storing-jwts-in-flutter-web-apps-2nal]

Does this package now has web support? Its not listed in the supported platforms on pub.dev

The web version has not been released yet. I will let you know when it does.

Thank you very much!

Is there a timeline for the web support?

Is there a timeline for the web support?

there is already a beta version of the package but I guess no official timeline:
https://pub.dev/packages/flutter_secure_storage/versions/5.0.0-beta.5

There you go https://carmine.dev/posts/flutterwebjwt/ @vanlooverenkoen @parnurzeal @JulianKowalczuk @rseibane and everyone else

This solution doesn't seem to work well as of now.
I keep getting this error in flutter web: https://github.com/carzacc/jwt_tutorial_flutter_web/issues/1#issue-1000904033


Add VCR.py json-serialized tests

The PR adds additional tests formed with json serialization based on:

new vcrpy accept-header matcher to distinguish messagepack-marked requests from others
additional fixture json_and_msgpack to parametrize some of the existing tests
json-serialized tests being put to separate vcrpy cassettes, named with -json.gz suffix
pytest --disable-msgpack option to disable msgpack tests (same if msgpack is unavailable)

I have some doubts if we need to add Travis configuration to run all the tests with uninstalled msgpack to make sure everything works as expected w/o msgpack at all, let's discuss it if needed.
Please, review.

Codecov Report

Merging #72 into master will increase coverage by <.01%.
The diff coverage is 100%.

@@            Coverage Diff             @@
##           master      #72      +/-   ##
==========================================
+ Coverage   92.81%   92.82%   +<.01%
==========================================
  Files          28       28
  Lines        1866     1867       +1
==========================================
+ Hits         1732     1733       +1
  Misses        134      134

Impacted Files
Coverage Δ

scrapinghub/hubstorage/serialization.py
73.52% <100%> (+0.8%)
:arrow_up:

Continue to review full report at Codecov.

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

I have some doubts if we need to add Travis configuration to run all the tests with uninstalled msgpack to make sure everything works as expected w/o msgpack at all

why not?

why not?

@chekunkov  I had to add some new tests and corresponding cassettes for oldy hubstorage client, now satisfied with results, please review when you have a minute.

@chekunkov Let me know if there's anything else worrying you so we can proceed with the PR.


Updating a meeting won't update the calendar event

When editting a meeting, only the date and attendees are being updated in the Outlook event.
Description, links and other artifacts are not being updated because we are not sending those fields to the CalendarEvent - Update flow.
Inside that flow, we are not calling the template processor child flow, instead we are reusing the existing body of the event.
It might be tricky to update this flow, because the schema for the different properties varies depending on the meeting type, so that is something to keep in mind when solving this issue.

Fixed


[rt9001] Not using moment.js for dates (to be able to store the state in Redux)

Hi there,
Currently the the model elements (items, layers) NEED to have start/end dates as "moment.js" objects.
                    let item: FlightItem = {
                        row: i,
                        start: moment(startDate),
                        end: moment(endDate),
                        key: flight.id,
                        data: flight
                    };

It would be interesting to also accept "primitive" data types. E.g. number = millis. Advantage = this way we might store the entire Gantt state in a Redux state. Which doesn't accept non-serializable types (i.e. the case of "moment.js").
We'd like to take a look to see if this is difficult to implement. Any objections and/or hints?
Regards,
Cristian.

No objections.
I think this could be done in line with the suggestions in #214.
Ideally we'll use a smaller moment replacement for calculations, and try pass around epoch timestamps wherever possible

Hi!
Please take a look at the associated PR for this discussion, #241. We added also this doc. I recommend you to take a look before reviewing.
Practically now all manipulation (read/write) of dates pass through a family of functions, such as getStartDate(), getEndDate(),getStartFromItem(item), etc. The default implementation of these functions takes into account the property useMoment. If true => we are in the initial mode, where the user supplies date in "moment" format. If false => we are in the new mode, where the user supplies dates as timestamps = millis. I remind that this is convenient for people using Redux, because Redux doesn't allow having non-primitive types (such as moment) in the state.
Note: an user may extend  Timeline and override these functions for other purposes as well. E.g. to customize how start/end is retrieved for an item, if that item doesn't use the default props, or if there is a small calculation involved. For example, we work w/ flights, which don't have start / end. They only have one time. And the other one is calculated by adding a constant to it.

Hi!
We fixed the issue and answered your review questions. Could you take a new look and try to merge the PR?
Thanks!

Hi. Do you think you'll have a bit of time to take a look at the associated PR? It's an important update, and we'd like it to have it in the mainstream to avoid conflicts & co. Thanks.

Merged. Thanks!


Fix PREMIUM variable is recognized as a string as per issue #12

@jaejin1 you are making changes in dist/index.js , rather it has to be done in index.js file in the main directory

Hey hi @jaejin1 I've made few changes could you look at once. I hope it solves the issue now


Assimp not linking on macOS

The cmakelists is finding assimp, but not linking correctly it as far as I can tell, at least for assimp 5.4.3 which I get from homebrew). Thus during linking
ld: library 'assimp' not found
c++: error: linker command failed with exit code 1 (use -v to see invocation)

To make it link, I applied this diff. I'm not sure if older assimp versions maybe do not support this.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d033515..e27d6ae 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -95,7 +95,7 @@ else()
 endif()

 if(${assimp_FOUND})
-  list(APPEND EXTRA_LIBRARIES assimp)
+  list(APPEND EXTRA_LIBRARIES ${ASSIMP_LIBRARIES})
   list(APPEND EXTRA_SOURCE src/glk/io/mesh_io.cpp)
 endif()

Thanks, I'll check if it works on older versions. If not, I'll add some fallback.


ECEF Path Generator

The demo isn't working.

Hi Stephing The demo is not working, but I hope you have downloaded the code and work for you. Cheers   09.01.2023, 13:33, "stephing78" @.>: The demo isn't working.—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you are subscribed to this thread.Message ID: @.>


Add RPC stats for the client

This PR closes #69.
Signed-Off-By: Robert Clark<EMAIL_ADDRESS>

@knweiss @mjtrangoni Do either of you have strong opinions about the metric names for this PR? We're trying to decided if the rpcs_in_flight value should have the osc/mdc text prepended to it, or if we should try to add a new label to the rpcs_in_flight metric for what type of client rpc the value represents.

@roclark I'll merge this sometime after 1 PM if I haven't heard anyone say that I shouldn't!

Hi @joehandzik,
I would prefer having a new label here {osc,mdc,mdt} since it is much better for Grafana`s graph. With different variables you will have to define more than just one query for "rpc_stats".

@mjtrangoni Thanks, I figured that would be the answer but wanted to confirm before sending Robert down that path.
@roclark Rename the metrics back to what you originally had for rpcs_in_flight, and add some sort of label (node/type/???). You should be able to reuse the extra value fields I added for my converged stats PR.

On it! Thanks @mjtrangoni and @joehandzik!

Done! Though I did notice the client label this time which shows what it is targeting (ie. lustrefs-OST0000-osc-ffffxxxxxxxxxxxx). This will make sure we don't overlap identical metrics on different targets, but I still like @mjtrangoni's suggestion so that we can easily parse the type in Grafana.

LGTM! We can wait until Monday if necessary to get full buy-in from @mjtrangoni

@joehandzik Sorry, for not answering before. I'm busy and simply didn't have time to test or review these PRs. It doesn't help that it's hard to review the patches without access to a real Lustre system (i.e. at home).
Did you ever think about a test suite with copies of proc files (one of each) from a real Lustre OSS, MDS, and client respectively? I.e. a test suite that allows simulating the lustre_exporter output for each of these machine types?
This would make before/after comparisons of PRs much easier and faster. Also, it would be great help for end-to-end testing and benchmarking/performance tuning. I think @mjtrangoni's issue #93 goes into the same direction.
(E.g. see node_exporter's end-to-end-test.sh with its reference output [e22-output.txt](https://github.com/prometheus/node_exporter/blob/master/collector/fixtures/e2e-output.txt. However, please also notice https://github.com/prometheus/node_exporter/issues/478). There's also the remaining problem of negative tests that must fail...)

@knweiss No worries! I was just asking to make sure that we had the right design, not necessarily expecting you to actually do a full-blown review of the code or functionality. We'll definitely see what we can add with respect to #93.

LGTM, merging.


Fix alt duplicates

Currently if the same group is referenced multiple times, it will appear multiple times in the HLS output which is incorrect.
This change keeps track of this and will only write out the same group (currently by composing a composite key of type, group Id, Name * Language) once.

@grafov Any thoughts on this PR?

Seem like it works right way. Thank you. I'll apply this request.


render 3D

Hello, very nice work! I have a question. After testing the model we get 3 image outputs. Can you tell me how to render the 3D motion picture? Thanks!

Hi, thanks for your interests, you can direct add " --ginb run.run_render=True" to your inference code. You would get a .mp4 video file in the output folder.
As I mentioned in the README.md ~


dartdevc doesn't work on IE 11

Hello,
I have to do some tests on IE-11, and apparently it only works if I comment dartdevc.
SDK Version:
1.24.2
IE version:
Version: 11.0.9600.18837CO
Update: 11.0.48 (KB4047206)

To reproduce:

create a new "barebone web" project with IntelliJ
run it
it opens correctly in IE (and everywhere else)
uncomment the last 3 lines in pubspec (dartdevc)
re-run
it works in Chrome but not IE 11

Issue:
The console has this message:
';' expected
and points to that line (in main.dart.bootstrap.js):
for (let moduleName of Object.getOwnPropertyNames(modulePaths)) {
Apparently you can use for in (since IE 6) let (since IE 11 only), but not for of:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of#Browser_compatibility
Thanks

IE11 is not supported for dartdevc:
https://webdev.dartlang.org/tools/dartdevc/faq#what-browsers-does-dartdevc-work-with


Update bettertouchtool.sh

Updated the appNewVersion variable as it was looking at a page that was not being kept up to date by the vendor.

Rob,
When testing this I noticed a discrepancy between the appNewVersion value and the actual version of the app being installed.
appNewVersion resulted in 4.426 but the actual downloaded app was version 4.403


Added quotes around jinja variables

Ansible 1.8.4 is moaning about syntax errors:
ERROR: Syntax Error while loading YAML script, /etc/ansible/roles/mashimom.oh-my-zsh/tasks/main.yml
Note: The error may actually appear before this position: line 22, column 17

    sudo: true
    sudo_user: {{ ohmyzsh.user }}

Ok. I've repeated your PR failing to look for open ones beforehand. Your's is better. https://github.com/mashimom/ohmyzsh_plbk/pull/3

In any case, it appears as if the maintainer is not home.


type checking unstable doesn't work with fresh

to reproduce:

deno run -r -A https://fresh.deno.dev  bugg
cd  bugg
echo "Deno.serve() >> routes/api/joke.ts # or any unstable API
deno run -A --unstable --check main.ts

It works with normal deno projects, it seems to only fail with fresh somehow
deno 1.26.0+a6618dc (canary, x86_64-unknown-linux-gnu)
v8 <IP_ADDRESS>
typescript 4.8.3

By adding the following code to main.ts, it worked fine.
/// <reference lib="deno.unstable" />

But Deno.spawn was deleted.

I changed the instructions to use another unstable API
thanks for the workaround

I'm unable to reproduce this issue anymore. Maybe it got fixed in the deno language server?

I'm able to reproduce this behaviour. My question is whether this behaviour is expected or not. I'll look into this when I can.


Why do we need do read file uri from message context to read a file

Version: 0.93
According to [1] a file location is read after obtaining it from the message context. Why do we need to do that when we have a configuration called "dirURI" that specifies the read location?
[1] https://ballerinalang.org/docs/by-example/ftp-server-connector

Closing as this is related to 0.9x versions and not relevant anymore


Error: Cannot find module '../doc/directives.js' after upgrade to 17.1.x

Current behavior
Upgrade @badeballcypress-cucumber-preprocessor from v16.x to v17.1.x and on starting cypress e2e testing, this error stack from cypress starts:
[cy:run  ]
[cy:run  ] Error: Cannot find module '../doc/directives.js'
[cy:run  ] Require stack:
[cy:run  ] - $PROJECT_ROOT/node_modules/yaml/dist/compose/composer.js
[cy:run  ] - $PROJECT_ROOT/node_modules/yaml/dist/index.js
[cy:run  ] - $PROJECT_ROOT/node_modules/<EMAIL_ADDRESS>[cy:run  ] - $PROJECT_ROOT/node_modules/<EMAIL_ADDRESS>[cy:run  ] - $PROJECT_ROOT/node_modules/<EMAIL_ADDRESS>[cy:run  ] - $PROJECT_ROOT/node_modules/<EMAIL_ADDRESS>[cy:run  ] -<EMAIL_ADDRESS>[cy:run  ] -<EMAIL_ADDRESS>[cy:run  ] -<EMAIL_ADDRESS>[cy:run  ] - $PROJECT_ROOT/cypress/config/ci.ts
[cy:run  ] -$HOME/Library/Caches/Cypress/12.13.0/Cypress.app/Contents/Resources/app/packages/server/lib/plugins/child/run_require_async_child.js
[cy:run  ] - $HOME/Library/Caches/Cypress/12.13.0/Cypress.app/Contents/Resources/app/packages/server/lib/plugins/child/require_async_child.js
[cy:run  ]     at Function.Module._resolveFilename (node:internal/modules/cjs/loader:1082:15)
[cy:run  ]     at Function.Module._resolveFilename ($HOME/Library/Caches/Cypress/12.13.0/Cypress.app/Contents/Resources/app/node_modules/tsconfig-paths/lib/register.js:75:40)
[cy:run  ]     at Function.Module._resolveFilename.sharedData.moduleResolveFilenameHook.installedValue [as _resolveFilename] ($HOME/Library/Caches/Cypress/12.13.0/Cypress.app/Contents/Resources/app/node_modules/@cspotcode/source-map-support/source-map-support.js:811:30)
[cy:run  ]     at Function.Module._load (node:internal/modules/cjs/loader:928:27)
[cy:run  ]     at Module.require (node:internal/modules/cjs/loader:1149:19)
[cy:run  ]     at require (node:internal/modules/helpers:121:18)
[cy:run  ]     at Object.<anonymous> ($PROJECT_ROOT/node_modules/yaml/dist/compose/composer.js:3:18)
[cy:run  ]     at Module._compile (node:internal/modules/cjs/loader:1267:14)
[cy:run  ]     at Module._extensions..js (node:internal/modules/cjs/loader:1321:10)
[cy:run  ]     at Object.require.extensions.<computed> [as .js] ($HOME/Library/Caches/Cypress/12.13.0/Cypress.app/Contents/Resources/app/node_modules/ts-node/dist/index.js:851:20)
[cy:run  ]     at Module.load (node:internal/modules/cjs/loader:1125:32)
[cy:run  ]     at Function.Module._load (node:internal/modules/cjs/loader:965:12)
[cy:run  ]     at Module.require (node:internal/modules/cjs/loader:1149:19)
[cy:run  ]     at require (node:internal/modules/helpers:121:18)
[cy:run  ]     at Object.<anonymous> ($PROJECT_ROOT/node_modules/yaml/dist/index.js:3:16)
[cy:run  ]     at Module._compile (node:internal/modules/cjs/loader:1267:14)
[cy:run  ]     at Module._extensions..js (node:internal/modules/cjs/loader:1321:10)
[cy:run  ]     at Object.require.extensions.<computed> [as .js] ($HOME/Library/Caches/Cypress/12.13.0/Cypress.app/Contents/Resources/app/node_modules/ts-node/dist/index.js:851:20)
[cy:run  ]     at Module.load (node:internal/modules/cjs/loader:1125:32)
[cy:run  ]     at Function.Module._load (node:internal/modules/cjs/loader:965:12)
[cy:run  ]     at Module.require (node:internal/modules/cjs/loader:1149:19)
[cy:run  ]     at require (node:internal/modules/helpers:121:18)

Desired behavior
Cypress e2e can start executing without bailing. Cypress e2e tests could run on v16.0 of @badeball/cypress-cucumber-preprocessor
Test code to reproduce
N.A.
Versions

Cypress version: 12.13.0
Preprocessor version: 17.1.1
Node version: 20.2.0
OS: macOS Darwin 13.4 on Apple M2 Max

Checklist

[ V ] I've read the FAQ.
[ V ] I've read instructions for logging issues.
[ V ] I'm not using<EMAIL_ADDRESS>(package name has changed and it is no longer the most recent version, see #689).

Hey, and thanks for reporting this issue. You need to provide a minimal, reproducible example issues that illustrates the issue.

Finally found the issue and it's not related to cypress-cucumber-preprocessor but rather an optimisation in .yarnclean that removed the doc dir for js-yaml node_module which is a transitive dependency of cypress-cucumber-preprocessor that prevented cypress with cypress-cucumber-preprocessor after version 17.x to boot up correctly.
Link to the issue described here.


nrf54l15bsim: Add more functionality

A few minor changes which make this board more functional:

boards nrf54l15bsim: DT: Set radio status as ok
boards: nrf54l15bsim: Mention CLOCK
boards nrf54l15bsim: Default to build BT Controller if BT
drivers/clock_control nrf: Treat simulated nRF54L15 like real
boards nrf54l15bsim: Set clock status as ok in DT
manifest: Update nRF hw models to latest

Note it sits on top of this PR as it needs it:

#73498

CC @ilhanates


Vector layer - access members of object under properties

After @justb4 "shamelessely plugged" wegue in a reply to a question of mine on the mapserver list, I started playing with it a little.
I'm though running into a problem trying to access an attribute which is inside of an object. Not sure if I'm just blind or if there's a bug.
I'm trying "hoverAttribute":"announcements[0].title" for a GeoJSON from here:
https://tie.digitraffic.fi/api/v3/data/traffic-messages/simple?inactiveHours=0&includeAreaGeometry=false&situationType=TRAFFIC_ANNOUNCEMENT
But it doesn't work...

@sgofferj thanks for trying Wegue!
Helps when sharing your JSON config file (snippet) here and let us know if e.g. geometries and other attrs rendering works and what error messages you get, e.g. in browser console.
The API call above returns GeoJSON with nested properties, e.g. announcements is array-type. This structuring may not (yet) be supported by the OpenLayers VectorSource which is instantiated within the Wegue Layer Factory function. Could be that only 'flat' properties are supported.

If I use one of the flat attributes like "SituationId", it works. Although, it also seems to only display the points, not the MultiLineStrings. Here is the config part:
    {
      "type": "VECTOR",
      "lid": "Traffic",
      "name": "Traffic",
      "url": "https://tie.digitraffic.fi/api/v3/data/traffic-messages/simple?inactiveHours=0&includeAreaGeometry=true&situationType=TRAFFIC_ANNOUNCEMENT",
      "formatConfig": {
      },
      "format": "GeoJSON",
      "visible": true,
      "selectable": true,
      "hoverable": true,
      "hoverAttribute": "announcements[0].title",
      "style": {
        "radius": 4,
        "strokeColor": "red",
        "strokeWidth": 5,
        "fillColor": "rgba(155,153,51,0.5)",
        "label": {
          "attribute": "situationId",
          "minResolution": 4.0,
          "outlineColor": "white",
          "outlineWidth": 2,
          "fillColor": "black",
          "offsetX": 0,
          "offsetY": 15,
          "align": "center"
        }
      },
      "selectStyle": {
        "radius": 10,
        "strokeColor": "gray",
        "strokeWidth": 5,
        "fillColor": "rgb(255, 255, 0, 0.2)"
      },
      "doAppendSelectStyle": true
    },

Ah, so that's all from Openlayers. I'm not familiar with that at all. I have tinkered with Leaflet before.

Hi @sgofferj,
as @justb4 pointed out, the default tooltip only supports plain attributes. You can hovever accomplish this by implementing a custom map overlay as documented in the reusable-component section.

Also the GeoJSON returned from the API has "mixed" geometries: null, MultiLineString and Point.
Don't know how that would be rendered by the Style. This GeoJSON validator: https://www.itb.ec.europa.eu/json/geojson/upload does not seem to be allowing null when validating as GeoJSON FeatureCollection.

Oh, I see. I see how easy Vue is to understand then :).


Follow operating system config location standards

It would be great if Wrangler followed the XDG Base Directory Specification. Instead of placing the config directory .wrangler in the home directory it should be placed in the OS specific appropriate directory. This, among other things, allows a user to specify a directory in which they want all applications to look for their user configurable setting files and keep their home directory clean.
Since this project already uses dirs it would use dirs::config_dir(); as a default and fall back to the home directory so this won't be a major version change.

hi @Siilwyn -  that is an excellent idea. are you interested in submitting a PR? if you are able to do so today i'd be very happy to accept! we are going to do a release soon- so if you can't-  let me know and i'll get the change in myself!

That sounds like a good idea. Out of curiosity, what OS+dist are you running?

Great to have such a positive response! I'm interested in submitting a PR, sounds like a nice first Rust project contribution for me. :)
I'm quite busy the coming days though but somewhere next week should be good.
Running Ubuntu btw.

This issue has been automatically closed because it has not had recent activity.

This is still relevant. I just saw a folder created in my $HOME folder instead of $XDG_CONFIG_HOME. 😕

Yes, I can say the same for wrangler 1.19.8.
OS: Arch Linux x86_64
Kernel: 5.15.8


breakseq2 -2.2- has requirement pysam==0.7.7, but you'll have pysam 0.15.1 which is incompatible

I get the following problem when I try to run parliament2
breakseq2 -2.2- has requirement pysam==0.7.7, but you'll have pysam 0.15.1 which is incompatible
command:
docker run -v <INPUT_DIR>:/home/dnanexus/in -v <OUTUT_DIR>:/home/dnanexus/out dnanexus/parliament2:0.1.8 --bam .sorted.markdup.bam --bai .sorted.markdup.bam.bai -r --breakdancer --cnvnator --manta --genotype

Any thought of using conda environments to isolate the various requirements and executables? Under docker, it isn't a big deal, but under singularity (useful in an HPC environment), installing using sudo/root is problematic.

Thanks, I'll look into this in the near future.


Implementing Flask API using Linked list Data Structure

Proposed title of article
Implementing Flask API using Linked list Data Structure
Introduction paragraph (2-3 paragraphs):
Understanding data structures is an important aspect when developing applications. While this is an important aspect is a software lifecycle most developers struggle in implementing these core features when building real-world applications.
In this article, we will build a hands-on Flask API using a Linked list data structure. We will see how trivial and efficient it is in terms of insertion and deletion when creating applications.
Key takeaways:

Introduction to Flask
Understanding Linked list Data Structure
Implementing Flask API using Linked list
Testing the API using Postman

References:
N/A

@OkothPius
Good afternoon and thank you for submitting your topic suggestion.
Your topic form has been entered into our queue and should be reviewed (for approval) as soon as a content moderator is finished reviewing the ones in the queue before it.

Great topic 🚀 , make sure it matches the following:

Adds value beyond what is in the official docs and what is covered in other blog sites.
To avoid potential article closure, it should not overlap with existing EngEd articles or incoming topic suggestions.

Please reference any relevant EngEd articles in yours and build a unique project - Approved. @OkothPius


Objectron support possible?

Will you be investigating MediaPipe Objectron integration at some point?

there should probably be a way to generalize support for different models for this similar to OpenCVForUnity's DNN modules?

I'm sorry for the late reply.
I read the source code in the official repository just now, and I think it can be implemented if it's unnecessary to annotate the result visually on Unity (that is, plugin renders the image MediaPipe generates directly).

C:\Users\kitme\OneDrive\Desktop\New folder (2)\MediaPipeUnityPlugin>make cpu
./.build/protobuf-3.13.0/csharp/buildall.sh
process_begin: CreateProcess(NULL, bash C:\Users\kitme\OneDrive\Desktop\New folder (2)\MediaPipeUnityPlugin.build\protobuf-3.13.0\csharp\buildall.sh, ...) failed.
make (e=2): The system cannot find the file specified.
Makefile:61: recipe for target '.build/protobuf-3.13.0/csharp/src/Google.Protobuf/bin/Release/net45/Google.Protobuf.dll' failed
mingw32-make.exe: *** [.build/protobuf-3.13.0/csharp/src/Google.Protobuf/bin/Release/net45/Google.Protobuf.dll] Error 2
i have this error can you help me?

C:\Users\kitme\OneDrive\Desktop\New folder (2)\MediaPipeUnityPlugin>make cpu
./.build/protobuf-3.13.0/csharp/buildall.sh
process_begin: CreateProcess(NULL, bash C:\Users\kitme\OneDrive\Desktop\New folder (2)\MediaPipeUnityPlugin.build\protobuf-3.13.0\csharp\buildall.sh, ...) failed.
make (e=2): The system cannot find the file specified.
Makefile:61: recipe for target '.build/protobuf-3.13.0/csharp/src/Google.Protobuf/bin/Release/net45/Google.Protobuf.dll' failed
mingw32-make.exe: *** [.build/protobuf-3.13.0/csharp/src/Google.Protobuf/bin/Release/net45/Google.Protobuf.dll] Error 2
i have this error can you help me?

@midopooler also is facing issue in running this, apparently there is a config file missing which is not Loading objectron model in Unity. @homuler can you look into it


render notebooks

issue copied from Brigitta from older repository:
While CI executing the notebook maybe a stretch goal given the non-triviality of installing dependencies rendering executed notebooks to HTML and hosting those on e.g. RTD/gh-pages shouldn't be too difficult using the infrastructure I set up for e.g. the astroML notebooks.

I move the rendering of the notebooks to a separate repo, so it will be super clean and clear of what are the deployed notebooks.
I also propose doing the markdown formatting for them, even if we don't switch for this particular repo (see #36)

I would close this now, we do have rendering and for a subset also executed rendering.


how to make angular-katex  html encode

Hi @tfoxy ,i want to impliment like this :
http://www.intmath.com/exponential-logarithmic-functions/3-logarithm-laws.php

in angular-katex :
http://jsbin.com/valeka/5/embed?html,output

it show without new line? could u help me?

Hi! That was something I removed because I was having trouble maintaining it. I will rewrite the code to make it cleaner and add this. Meanwhile, here is working example of what you want:
http://jsbin.com/valeka/8/embed?html,output

Hi @leoluu . Sorry for the long delay. v0.9.0 was released yesterday. You can use <katex bind="tex" auto-render></katex> to do what you want. Check the following example.
http://jsbin.com/valeka/9/embed?html,output


Add support for color option

Please Describe The Problem To Be Solved
There should be an option for whether or not to enable colors when logging.
Suggest A Solution
A proposed solution would be to simply add it to the configuration passed to the CatLoggr::new and CatLoggr::config functions, later re-using it when logging or formatting happens.

Hey @Sven65, I'm new to Rust and open source, but I'd like to give this a go. Is it okay?


Add golint to scanCode.py

the openwhisk-cli repo. added "golint" to its specific travis (see https://github.com/apache/incubator-openwhisk-cli/pull/41/files)...
Would be better to catch any formatting/syntax-related errors or warnings for .go files uniformly in scanCode.py so it is uniformly applied to all .go in all repos. (and configurable).
example Travis inclusion:
before_test:

go get -u github.com/golang/lint/golint

go get -d -t ./...

Is this still relevant once the CLI moves out of this repository?

@mrutkows seems like this can move to the new utils repo?

Issue moved to apache/incubator-openwhisk-utilities #20 via ZenHub


  Stop.

Set USE_CUDA to 1 alongwith CUDA_PATH and USE_CUDNN
bash install-mxnet-ubuntu-python.sh

From the error it seems like the Makefile is not being properly parsed/read when I simply modify the config.mk to support cuda.
Changes to config.mk
# whether use CUDA during compile
USE_CUDA = 1

# add the path to CUDA library to link and compile flag
# if you have already add them to environment variable, leave it as NONE
USE_CUDA_PATH = /usr/local/cuda
#USE_CUDA_PATH = NONE

# whether use CuDNN R3 library
USE_CUDNN = 1

This issue is closed due to lack of activity in the last 90 days. Feel free to reopen if this is still an active issue. Thanks!


Add copyright and improve version matching.

See
https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet


Give Image::pull, Image::build and Image::import chunked json a type

What did you implement:
Added a type ImagePullChunk for stream chunks when using Image::pull .

Closes: #144
How did you verify your change:
Tested locally and got expected results:
Image::pull
❯ cargo run --example imagepull -- debian
   Compiling shiplift v0.7.0 (/home/wojtek/dev/shiplift)
    Finished dev [unoptimized + debuginfo] target(s) in 6.20s
     Running `target/debug/examples/imagepull debian`
ImagePullChunk { status: "Pulling from library/debian", id: Some("latest"), progress: None, progress_detail: None }
ImagePullChunk { status: "Pulling fs layer", id: Some("b9a857cbf04d"), progress: None, progress_detail: Some(ProgressDetail { current: None, total: None }) }
ImagePullChunk { status: "Downloading", id: Some("b9a857cbf04d"), progress: Some("[>                                                  ]  511.2kB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(511228), total: Some(50399171) }) }
ImagePullChunk { status: "Downloading", id: Some("b9a857cbf04d"), progress: Some("[=====>                                             ]  5.155MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(5155293), total: Some(50399171) }) }
ImagePullChunk { status: "Downloading", id: Some("b9a857cbf04d"), progress: Some("[=========>                                         ]  9.251MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(9251293), total: Some(50399171) }) }
ImagePullChunk { status: "Downloading", id: Some("b9a857cbf04d"), progress: Some("[================>                                  ]  16.44MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(16435677), total: Some(50399171) }) }
ImagePullChunk { status: "Downloading", id: Some("b9a857cbf04d"), progress: Some("[=======================>                           ]  23.62MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(23620061), total: Some(50399171) }) }
ImagePullChunk { status: "Downloading", id: Some("b9a857cbf04d"), progress: Some("[===========================>                       ]   27.7MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(27703773), total: Some(50399171) }) }
ImagePullChunk { status: "Downloading", id: Some("b9a857cbf04d"), progress: Some("[=============================>                     ]  29.25MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(29247965), total: Some(50399171) }) }
ImagePullChunk { status: "Downloading", id: Some("b9a857cbf04d"), progress: Some("[==============================>                    ]  30.78MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(30783965), total: Some(50399171) }) }
ImagePullChunk { status: "Downloading", id: Some("b9a857cbf04d"), progress: Some("[==================================>                ]  34.38MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(34380253), total: Some(50399171) }) }
ImagePullChunk { status: "Downloading", id: Some("b9a857cbf04d"), progress: Some("[======================================>            ]     39MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(38996445), total: Some(50399171) }) }
ImagePullChunk { status: "Downloading", id: Some("b9a857cbf04d"), progress: Some("[==========================================>        ]  43.09MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(43088349), total: Some(50399171) }) }
ImagePullChunk { status: "Downloading", id: Some("b9a857cbf04d"), progress: Some("[================================================>  ]  49.25MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(49248733), total: Some(50399171) }) }
ImagePullChunk { status: "Verifying Checksum", id: Some("b9a857cbf04d"), progress: None, progress_detail: Some(ProgressDetail { current: None, total: None }) }
ImagePullChunk { status: "Download complete", id: Some("b9a857cbf04d"), progress: None, progress_detail: Some(ProgressDetail { current: None, total: None }) }
ImagePullChunk { status: "Extracting", id: Some("b9a857cbf04d"), progress: Some("[>                                                  ]  524.3kB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(524288), total: Some(50399171) }) }
ImagePullChunk { status: "Extracting", id: Some("b9a857cbf04d"), progress: Some("[=========>                                         ]  9.437MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(9437184), total: Some(50399171) }) }
ImagePullChunk { status: "Extracting", id: Some("b9a857cbf04d"), progress: Some("[=================>                                 ]   17.3MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(17301504), total: Some(50399171) }) }
ImagePullChunk { status: "Extracting", id: Some("b9a857cbf04d"), progress: Some("[=======================>                           ]  23.59MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(23592960), total: Some(50399171) }) }
ImagePullChunk { status: "Extracting", id: Some("b9a857cbf04d"), progress: Some("[==========================>                        ]  26.74MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(26738688), total: Some(50399171) }) }
ImagePullChunk { status: "Extracting", id: Some("b9a857cbf04d"), progress: Some("[======================================>            ]   38.8MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(38797312), total: Some(50399171) }) }
ImagePullChunk { status: "Extracting", id: Some("b9a857cbf04d"), progress: Some("[===========================================>       ]  43.52MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(43515904), total: Some(50399171) }) }
ImagePullChunk { status: "Extracting", id: Some("b9a857cbf04d"), progress: Some("[===============================================>   ]  48.23MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(48234496), total: Some(50399171) }) }
ImagePullChunk { status: "Extracting", id: Some("b9a857cbf04d"), progress: Some("[=================================================> ]  49.81MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(49807360), total: Some(50399171) }) }
ImagePullChunk { status: "Extracting", id: Some("b9a857cbf04d"), progress: Some("[==================================================>]   50.4MB/50.4MB"), progress_detail: Some(ProgressDetail { current: Some(50399171), total: Some(50399171) }) }
ImagePullChunk { status: "Pull complete", id: Some("b9a857cbf04d"), progress: None, progress_detail: Some(ProgressDetail { current: None, total: None }) }
ImagePullChunk { status: "Digest: sha256:b16f66714660c4b3ea14d273ad8c35079b81b35d65d1e206072d226c7ff78299", id: None, progress: None, progress_detail: None }
ImagePullChunk { status: "Status: Downloaded newer image for debian:latest", id: None, progress: None, progress_detail: None }

Image::Build
❯ cargo run --example imagebuild -- test
    Finished dev [unoptimized + debuginfo] target(s) in 0.04s
     Running `target/debug/examples/imagebuild test`
Stream { stream: "Step 1/3 : FROM centos:8" }
Stream { stream: "\n" }
Stream { stream: " ---> 300e315adb2f\n" }
Stream { stream: "Step 2/3 : ENV \"test\" \"123\"" }
Stream { stream: "\n" }
Stream { stream: " ---> Using cache\n" }
Stream { stream: " ---> d03f272b1c57\n" }
Stream { stream: "Step 3/3 : CMD [ \"/bin/bash\"]" }
Stream { stream: "\n" }
Stream { stream: " ---> Using cache\n" }
Stream { stream: " ---> 8563967a5a9b\n" }
Aux { aux: Aux { id: "sha256:8563967a5a9bdfc2f93de32498feb259aaa40230833d1025996255d0ad20253a" } }
Stream { stream: "Successfully built 8563967a5a9b\n" }
Stream { stream: "Successfully tagged shiplift_test:latest\n" }

❯ cargo run --example imagebuild -- test_fail
    Finished dev [unoptimized + debuginfo] target(s) in 0.04s
     Running `target/debug/examples/imagebuild test_fail`
Stream { stream: "Step 1/3 : FROM centos:8" }
Stream { stream: "\n" }
Stream { stream: " ---> 300e315adb2f\n" }
Stream { stream: "Step 2/3 : ENV \"test\" \"123\"" }
Stream { stream: "\n" }
Stream { stream: " ---> Using cache\n" }
Stream { stream: " ---> d03f272b1c57\n" }
Stream { stream: "Step 3/3 : RUN \"slee 123\"" }
Stream { stream: "\n" }
Stream { stream: " ---> Running in c078ccf31294\n" }
Stream { stream: "\u{1b}[91m/bin/sh: slee 123: command not found\n\u{1b}[0m" }
Error { error: "The command \'/bin/sh -c \"slee 123\"\' returned a non-zero code: 127", error_detail: ErrorDetail { message: "The command \'/bin/sh -c \"slee 123\"\' returned a non-zero code: 127" } }

Image::import
❯ cargo run --example import -- deb.tar
   Compiling shiplift v0.7.0 (/home/wojtek/dev/shiplift)
    Finished dev [unoptimized + debuginfo] target(s) in 3.75s
     Running `target/debug/examples/import deb.tar`
Stream { stream: "Loaded image: debian:10-slim\n" }
Stream { stream: "Loaded image: debian:10.0\n" }
Stream { stream: "Loaded image: debian:10.0-slim\n" }
Stream { stream: "Loaded image: debian:10.1\n" }
Stream { stream: "Loaded image: debian:10.1-slim\n" }
Stream { stream: "Loaded image: debian:10.2-slim\n" }

❯ cargo run --example import -- deb_fail
    Finished dev [unoptimized + debuginfo] target(s) in 0.03s
     Running `target/debug/examples/import deb_fail`
Error { error: "open /var/lib/docker/tmp/docker-import-236809971/repositories: no such file or directory", error_detail: ErrorDetail { message: "open /var/lib/docker/tmp/docker-import-236809971/repositories: no such file or directory" } }

What (if anything) would need to be called out in the CHANGELOG for the next release:
I updated the CHANGELOG accordingly.

I like the changes a lot! Though I wish I could find the documentation for these chunks in the docker API upside_down_face

Yes, I wish it was documented somehow as well. Only way to find out what is available is to test every possibility and even then it's sometimes hard to fake an error or some random condition that would return a chunk not properly handled.
As a side note, I also find it annoying that most fields in API reference, although declared as not nullable are actually nullable and one has to determine by doing lots of tests...

Ok, so perhaps not in api reference but the struct JSONMessage  in dockers source code seems to be what we are after
https://github.com/moby/moby/blob/c9bbc68e75f224c4490ff6e3121be50a612edc22/pkg/jsonmessage/jsonmessage.go#L138

I'm wondering how to handle this one. Should I create JsonMessage and JsonProgress structs with all the fields? Current way of parsing it as an enum makes it much easier to handle for end user but it's unsure which fields will be used in the response chunk.

So I rebased the PR, and brought back ImageBuildChunk, I think it seems like the best way to handle this chunks.


Add ec_decompress as intrinsic

A native ec_decompress would remove the need for importing ECC libraries when trying to decompress compressed Ethereum public keys in EOSIO
The decompression is currently necessary after recover_key to get the Ethereum address from the decompressed public key.

Related to #6718


Add ThreadPool::broadcast

A broadcast runs the closure on every thread in the pool, then collects
the results.  It's scheduled somewhat like a very soft interrupt -- it
won't preempt a thread's local work, but will run before it goes to
steal from any other threads.
This can be used when you want to precisely split your work per-thread,
or to set or retrieve some thread-local data in the pool, e.g. #483.

In terms of what we are committing to publicly, I suppose it's this:
You have the ability to schedule a closure to run exactly once on each thread. The priority is sort of undefined (as is typical for Rayon).
That doesn't seem like too much of a commitment.

One thing to strengthen this is that racing broadcasts will be consistently ordered.  That is, given simultaneous broadcasts A and B, then if one thread sees A before B, they all will, and vice versa.  So for example, if both are setting the same TLS, every thread will set them in the same order.
It doesn't guarantee that every A will complete before any B starts, but you could use a Barrier in A if needed.  Consistent order means you won't have to worry about whether a barrier in B is also waiting, interleaved with A to deadlock.
We don't have to promise this, but I think it's powerful if we do.

The main question is whether that behavior is well-defined if the size of the threadpool were to ever become dynamic, but I am more and more dubious of such a thing ever happening, and certainly not without some form of opt-in.

I'm also skeptical of this happening.  Internally, we could at least make sure that threads are never removed while they have a broadcast waiting, but I guess new threads would just be left out.

I wonder if it'd be useful to give the closure the number of threads as well? I guess that is readily accessible from the pool, so that's why we don't, right?

Yeah, it's easy to get, although that could be racy if there are dynamic threads.  We could supply that value to indicate the number of times the broadcast will be called -- the number we're actually queuing -- independent of any new threads that may pop up.

I'd like to use this in rustc to collect thread local data (complements my WorkerLocal type well).

@Zoxc I've rebased this again, if you'd like to try it out with rustc.

There's 2 variations on this which may be useful too. spawn_broadcast which would spawn tasks on all threads without waiting for them. broadcast on a Scope which would spawn tasks on the Scope and could be considered a more general form of this PR.
I wonder if there's room for some generic code here. spawn_broadcast would wait until 'static ends before blocking (a.k.a. never), Scope::broadcast would wait until 'scope ends before blocking and the broadcast in this PR would wait on some internal lifetime before blocking. If you consider join as spawning 2 tasks, you can draw similar parallels between spawn, Scope::spawn and join.

Those variations make sense to me. The Scope::broadcast idea should be a pretty easy extension, just adding to the scope counter so they're part of the blocking set. For the static/unblocked version, I guess we could wrap the closure in an Arc and basically just spawn it out.
They could all use the same injection queues, at least.

I rebased again and added spawn_broadcast, including a scoped version. I need more docs/examples on that, but otherwise I think the code is in good shape here.
The last thing I'm thinking about is a specification of when a broadcast will run. Currently, it runs when the local deque is empty, before looking for jobs elsewhere. I can think of multiple options, from high to low "priority":

ASAP -- if we've blocked for any reason, run broadcasts first even once the blocked latch is ready.
After the seeing latch is still blocked, but before popping from the local deque.
After the local deque, but before stealing from other threads. This is what we have now.
After thread stealing, but before popping from the global injector.
After the global injector, when there are no other sources of pending work.
After the whole pool is otherwise blocked/idle.

I'm not certain that the current choice is the best. These could all be supported if we kept distinct queues, and perhaps an enum argument on the broadcast methods to indicate the user's choice, but maybe that's overkill.

These could all be supported if we kept distinct queues, and perhaps an enum argument on the broadcast methods to indicate the user's choice, but maybe that's overkill.

It sounds like something that could be tuned, but I agree that it sounds like overkill because people won't know what to pick to get it to Just Work.
You could support an enum, or not, but the most important thing is that it's as fast as possible both when it's the only thing executing on the thread pool and when the thread pool is juggling lots and lots of work. Basically, even if you do support user choice, please have (and recommend) an API where the user does not have to choose, so that they can benefit from a tried and tested compromise.

Here's the current API summary:
pub fn broadcast<OP, R>(op: OP) -> Vec<R>
where
    OP: Fn(BroadcastContext<'_>) -> R + Sync,
    R: Send;

pub fn spawn_broadcast<OP>(op: OP)
where
    OP: Fn(BroadcastContext<'_>) + Send + Sync + 'static;

pub struct BroadcastContext<'a> { .. }

impl<'a> BroadcastContext<'a> {
    pub fn index(&self) -> usize;
    pub fn num_threads(&self) -> usize;
}

impl<'a> fmt::Debug for BroadcastContext<'a> { .. }

impl<'scope> Scope<'scope> {
    pub fn spawn_broadcast<BODY>(&self, body: BODY)
    where
        BODY: Fn(&Scope<'scope>, BroadcastContext<'_>) + Send + Sync + 'scope;
}

impl<'scope> ScopeFifo<'scope> {
    pub fn spawn_broadcast<BODY>(&self, body: BODY)
    where
        BODY: Fn(&ScopeFifo<'scope>, BroadcastContext<'_>) + Send + Sync + 'scope;
}

impl ThreadPool {
    pub fn broadcast<OP, R>(&self, op: OP) -> Vec<R>
    where
        OP: Fn(BroadcastContext<'_>) -> R + Sync,
        R: Send;

    pub fn spawn_broadcast<OP>(&self, op: OP)
    where
        OP: Fn(BroadcastContext<'_>) + Send + Sync + 'static;
}

I think that's pretty safe, and the current "priority" (before remote work-stealing) still feels like a reasonable default.

bors r+


Make Replica::delete_task public

This has suitable warnings about how it interacts with sync. Note that the interactions don't actually break sync: all replicas will still end up with the same task data. It just may not be what a user would expect. Hopefully the example in the comment makes that clear.
This also fixes the symlink in .cargo to have the correct name (config.toml) and link to the right place (../config.toml). This was missed in #393.

cc @QuantumBJump for the symlink fix :)

I agree that the warnings are sufficient, but would it make sense to consider renaming these methods to purge_task to avoid reusing the term "delete" to mean two different things?

It ends up recording a Delete operation so in that sense the name makes sense. Also, purge has a connotation of removing all trace, yet the task data remains in the operation history.
Naming things is hard :(