Flutter web deployed using GitHub Pages redirects to a different site.

I found a peculiar bug that happens ONLY to Flutter Web projects which use GitHub pages deployment.
So I'm trying to deploy my flutter web app using GitHub pages, but I'm facing a weird issue. So I have my portfolio on imgkl.github.io and I'm trying to deploy another app called fl_catalogue which has the URL, imgkl.github.io/fl_catalogue/. But when I try to go to the fl_catalogue app, it takes me to my portfolio.
FYI: Already opened a Stackoverflow question regarding this, no luck there.

I'm deploying the site, using this workflow.
name: Flutter Web
on:
push:
branches:
  - master
jobs:
 build:
   name: Build Web
   env:
     my_secret: ${{secrets.commit_secret}}
   runs-on: ubuntu-latest
   steps:
      - uses: actions/checkout@v1
      - uses: subosito/flutter-action@v1
        with:
           channel: 'beta'
      - run: flutter config --enable-web
      - run: flutter pub get
      - run: flutter build web --release
      - run: |
          cd build/web
          git init
          git config --global user.email my_email
          git config --global user.name Imgkl
          git status
          git remote add origin<EMAIL_ADDRESS>          git checkout -b gh-pages
          git add --all
          git commit -m "update"
          git push origin gh-pages -f

Shouldn't it be /#/fl_catalogue/ or something like this?

Shouldn't it be /#/fl_catalogue/ or something like this?

No. Tried the url, https://imgkl.github.io/#/fl_catalogue/
But, still it redirects to my portfolio.

No. Tried the url, https://imgkl.github.io/#/fl_catalogue/
But, still it redirects to my portfolio.

Found a solution to this issue, We have to change the <base href="/"> to <base href="/fl_catalogue/"> in the index.html which is in web folder.
<!--
    If you are serving your web app in a path other than the root, change the
    href value below to reflect the base path you are serving from.

    The path provided below has to start and end with a slash "/" in order for
    it to work correctly.

    Fore more details:
    * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
  -->
  <base href="/">

Found a solution to this issue, We have to change the <base href="/"> to <base href="/fl_catalogue/"> in the index.html which is in web folder.
<!--
    If you are serving your web app in a path other than the root, change the
    href value below to reflect the base path you are serving from.

    The path provided below has to start and end with a slash "/" in order for
    it to work correctly.

    Fore more details:
    * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
  -->
  <base href="/">


fix-getCommand-error-resp

Pull Request for issue
Description
fix protcl.ErrUnknownCommand use
Testing Instructions
Additional Comments

tnx @Chyroc


Reactive Form

Any plan on supporting Reactive Form ?

What kind of support do you mean? @Korigoth
Any more details?

Reactive Form support  for  formControlName="editor"  on the editor itself

Try this,
html:
<ckeditor [(ngModal)]="editor" name="editor" formControlName="editor"></ckeditor>
ts:
myForm;
editor;

ngOnInit(){
  this.myForm = new FormGroup({
  'editor': new FormControl ( this.editor, [Validator.required] )
 })
}

I got this working for me in a reactive form. If you use formControlName, you don't need ngModal but you do need a parent [formGroup] in the template, like:
<form [formGroup]="myForm">
    <ckeditor name="myEditor" formControlName="editor"></ckeditor>
</form>

Or, you can do this if you create your FormGroup and FormControls in ngOnInit or if you have nested field components like I do, etc
<ckeditor name="myEditor" [formControl]="myForm.controls.editor"></ckeditor>

Thank you all for the valuable tips.

How to validate
<ckeditor name="myEditor" [formControl]="myForm.controls.editor">
in angular 7
Thanks in advance

Look at the demo https://stackblitz.com/edit/ng2-ckeditor


Adding "run_groups" and "data_spaces"

Hi!
I've been working with the ESP8266Scheduler a bit and while I haven't used the official Arduino, or any other "Scheduler", libraries for comparison; I really like it!
One thing about the "one-big-loop" model is you have lots of control over the ordering of if/when things happen and they can share in-common data easily.  Scheduler largely eliminates that in favor of coroutines wrapped in their own classes that all run mostly segregated and seemingly in parallel.
I've written some basic/initial code to add a "run_groups" concept to the Scheduler which adds back some degree of those coordination capabilities while keeping everything nice and separated. :)
In a Task code, either setup() or the constructor(), you'd add something like setRunGroupID(N); where currently N is a number 0..7 or 255 (the default).
(The number of groups available is defined by the size of a bitfield used internally; I used an uint8_t.)
By assigning a Task a run_group_id, that Task will be delayed until all Tasks with lower run_group_ids have "succeeded" for this cycle.  "Success" means the Task considers its work completed and will wait for the next "cycle" before resuming.  So it could mean the Task "timed out" on what it was doing and didn't want to hold up downstream RunGroups from processing any longer.
RunGroup 0xFF is the default RunGroup, and it's also the exception to the rule. Tasks with run_group_id 0xFF use the current behavior - other run_groups do not wait for them, and they do not wait for anything else (other than their own shouldRun()).
Excluding that exception, groups of Tasks will execute in the order of their run_group_id in a cycle.  Higher numbered RunGroups will delay until all Tasks in the lower RunGroups have marked themselves complete.
When all the Tasks in all RunGroups have executed, the cycle_id number increments and the Tasks' completed state get reset.
Here's an example from 3 Tasks to explain it more clearly.
2 Tasks "Acquire" data then 1 "Processes" it.
Notice the cycle_id (the first number) remains the same until all three Tasks have run and that the two "Acquiring" Tasks Finish before the "Processing" Task begins; and the cycle_id increments only after the "Processing" Task completes:
[Cycle_ID] ([Task_Id]) [Function]... [Internal Counter]
2	(1.1) Acquiring... 1
2	(1.2) Acquiring... 1
2	(1.2) Acquiring... 2
2	(1.1) Acquiring... 2
2	(1.2) Acquiring... 3
2	(1.2) Acquiring... 4
2	(1.1) Acquiring... 3
2	(1.2) Acquiring... 5
2	(1.2) Acquiring... 5 Done!
2	(1.1) Acquiring... 4
2	(1.1) Acquiring... 5
2	(1.1) Acquiring... 5 Done!
2		(5.1) Processing... 1
2		(5.1) Processing... 2
2		(5.1) Processing... 3
2		(5.1) Processing... 4
2		(5.1) Processing... 5
2		(5.1) Processing... 5 Done!
3	(1.1) Acquiring... 1
3	(1.2) Acquiring... 1
3	(1.2) Acquiring... 2
3	(1.2) Acquiring... 3
3	(1.1) Acquiring... 2
3	(1.2) Acquiring... 4
3	(1.1) Acquiring... 3
3	(1.2) Acquiring... 5
3	(1.2) Acquiring... 5 Done!
3	(1.1) Acquiring... 4
3	(1.1) Acquiring... 5
3	(1.1) Acquiring... 5 Done!
3		(5.1) Processing... 1
3		(5.1) Processing... 2
3		(5.1) Processing... 3
3		(5.1) Processing... 4
3		(5.1) Processing... 5
3		(5.1) Processing... 5 Done!
4	(1.1) Acquiring... 1
4	(1.2) Acquiring... 1
4	(1.2) Acquiring... 2
4	(1.2) Acquiring... 3
4	(1.1) Acquiring... 2
4	(1.2) Acquiring... 4
4	(1.2) Acquiring... 5
4	(1.2) Acquiring... 5 Done!
4	(1.1) Acquiring... 3

In this example, no Task had run_group_id 0xFF because its output more cluttered and confused the example than helped it.
If there's interest, I can explain the internals of how it works a bit more; and discuss modifications for merging it.  While it's not "trivial", it's not a big diff.
One of the things that I put a lot of time into is keeping the amount of state required to as little as I could imagine (but no less :) ) and making the update functions as efficient/quick as I could (for instance, the new code never makes a run through the entire list of Tasks; it does it all "inline" as the Scheduler reaches them).
The SchedulerClass added 4 bytes; and the Tasks 2 bytes and 2 bools.
One thing I wanted that I couldn't do easily was get "loop()" to return a bool rather than a void.
I think that would make things cleaner/clearer to understand.
Thanks!

Wow,
That is some awesome work. This method didn't even occur to me. Thanks very much. I greatly appreciate the effort.
Could you explain more about wanting loop() to return a bool?

Sure, it's how a Task signals "Done for this cycle".
The Tasks all have a bool variable called "loop_complete" which is their signal to the Scheduler to stop calling them until the next cycle.  If the loop() function returned a bool, that return item would get placed in that loop_complete spot by the Scheduler.
This way, to the programmer, loop() returns "false" until that Task "succeeds" and returns "true".
They use the return code to indicate to the Scheduler the success/failure of the loop().
This way, if at the top of the loop() code it detects some failure condition like "External Device is not responding"; they can set a couple flags so they know to deal with that next time loop() is called and do a short circuit "return true;" instead of the double command "setLoopComplete(true); return;"
You can check out the diff here:
https://github.com/MikeFair/ESP8266Scheduler/commit/0bb21d625d0d3360227f60ae6c16012b03203dc2
The white space got a bit screwed up in some places, and a comment needs to be fixed. (Tasks indicate they are no longer active when loop_complete == true; the comment says false.)
And I'm pretty sure the two dedicated additional boolean variables added the Task can be eliminated.
By changing cycle_id and run_group_id on the Tasks to a struct with a 1-bit flag, and a 7-bit number; in place of an uint8_t, loop_complete can use the high bit on cycle_id, and active_run_group can use the high bit on run_group_id.
 :)

Ok,
I am starting to get my head around it. Surely loop_complete could be made private and loop() could return a bool. You could then set loop_complete in loopWrapper()?
Like:
void loopWrapper() {
    if (!setup_done) {
        setup();
        setup_done = true;
    }

    while(1) {
        this->loop_complete = loop();
        yield();
    }
}

Would that not solve that issue?

Perhaps some of the reset logic for the current_cycle_id and loop_complete could also be internalized into the task. Perhaps being a reset() and update() function. This may take some of the burden away from the Scheduler.

void loopWrapper() {
    if (!setup_done) {
        setup();
        setup_done = true;
    }

    while(1) {
        this->loop_complete = loop();
        yield();
    }
}

Exactly!
And perhaps the group update functions should go there too.
Currently they execute anytime the Task runs delay or yield too; which creates a side effect when loop_complete = true happens before a delay(); the loop() would "pause" and then pick up again just after the delay() on the next cycle.  Which makes perfect sense for what/how it's working; just not what I originally intended.

Perhaps some of the reset logic for the current_cycle_id and loop_complete could also be internalized into the task. Perhaps being a reset() and update() function. This may take some of the burden away from the Scheduler.

I'm not opposed to the idea but I'm not sure it would work.
I in fact actually started out by putting it in the Tasks following the Delay pattern; the problem was Task.h cannot see Scheduler.h to call any functions the SchedulerClass exported (like getCurrentCycleID()) and I didn't want to mess with that; I also saw that SchedulerClass was already a friend to Task so could mess with the internals of Task if it needed to; but not the other way around.  It also turned out the Task update code reduced to a couple if tests and a couple assignments in a function that already had to look at the internal state information of the Task anyway; so updating that information "while it was there" was an extremely "light" addition...
I thought briefly about separating the state and logic out into a new RunGroups.h that they both included; again that seemed too heavy handed to keep the feature "light" on the resources (though I honestly don't think it would actually be any more "expensive" than the current method and it would make a good "extension pattern" that could be followed by others so would be worth doing)...
To be as open/forthcoming as I can see about it; there are two things a Task could manage itself:
  // (1)
  if (scheduler_cycle_id != current->current_cycle_id) {
    if (task_run_group_id != 0xFF) current->loop_complete = false;
    current->current_cycle_id = scheduler_cycle_id;
  }

  // and (2) psuedocode
  if (the_tasks_run_group_is_an_active_group) {
    current->run_group_active = true;
  } else {
    current->run_group_active = false;
  }

In other words, (1) if the Scheduler's Cycle has moved from what the Task remembers; that's the signal to reset the loop_complete flag; and (2) the Scheduler indicates to the Task whether or not it's run_group is currently active by setting the flag.
The Task then tests those flags in shouldRun().
Everything else would almost certainly be calling a function the SchedulerClass exported because that's where the group state is (because Tasks can't see information about other Tasks).
And let's keep in mind too regarding the term "burden"; it's going to be the same CPU cycles spent to do the work whether it happens in the Scheduler or in the Tasks, regardless of where it happens, because the work must be done.  The key point more important than "who" does the work is maximizing time spent in "loop()" (by minimizing CPU cycles other places); a Task's "shouldRun()" is not "loop()" and so therefore is as equally costly to "loop()" as the Scheduler is; I'd even argue that a Task's "shouldRun()" is an externalized extension of the Scheduler. :)

I thought briefly about separating the state and logic out into a new RunGroups.h that they both included;

I really like this idea. It is unlikely to be very much more expensive after it has been compiled, but the level of clarity and intention would likely be worth it. I will take another look through the code this week to see if there is any more insight there from my side.

And let's keep in mind too regarding the term "burden";

My use of the word burden was not to imply CPU cycles, but rather role and responsibility, and in general, design. It would probably be better to have each class manage as much of it own internals as possible. While the line is a little blury here cause we are reaching in for next and context, the more we can centralize the logic of a Task in a Task, I would argue, the better. This is however opinion :) I will however take your point on giving the task less responsibility some more thought. Perhaps there is some middle ground here, I am not sure yet.

It would probably be better to have each class manage as much of it own internals as possible. While the line is a little blury here cause we are reaching in for next and context, the more we can centralize the logic of a Task in a Task, I would argue, the better.

Agreed, the question then is "Are RunGroups an internal state to a Task? or are RunGroups part of the runtime environment the Task lives in?"  I never saw RunGroups as part of the logic of a Task; but I also didn't see "Delay" as internal to a Task either.
Given the model you're alluding to, it's seems Tasks are responsible for coordinating themselves and choosing to run or not run as they deem fit and the Scheduler serves as a Task list container and execution pump.
"Delay()" isn't something the Scheduler enforces on the Task's behalf; it's something the Task chooses to honor because "shouldRun()" gives the Task the chance to pump state.  If a Task didn't want to honor "Delay()" it doesn't have to.  For instance, if it wanted "Interruptable Delay" which would delay for a timeout period unless some signal happened that triggered it to resume earlier... [Which btw is another really important function: bool WaitOn(SOME_SIGNAL_IDENTIFIER, time_out);]
Ok, here's the model I'm seeing; extending a Task's runnable features means coding up a Header File to implement logic and store shared state, and extending a Task's shouldRun rather than mess with the TaskPump itself.  This means "delay" should also be moved into a new Delay.h which Task.h includes; to serve as an example for how to "think" this way.
These are features that a Task includes, like add-on modules, and uses "shouldRun()" to feed them data.
FWIW, and to that point, here's what I see:

I thought briefly about separating the state and logic out into a new RunGroups.h that they both included;
I really like this idea. It is unlikely to be very much more expensive after it has been compiled, but the level of clarity and intention would likely be worth it.

Implement RunGroups.h with the 4 variables that are currently in the Scheduler and move the two functions into RunGroups.h.
RunGroups.h will need to know to increment the cycle_id.
This was originally done in the Scheduler when it saw Scheduler::main was about to get Scheduled.
I think the best approach to mimic this is having Scheduler::main call updateCycleID() in RunGroups.h. This avoids RunGroups.h storing how many Tasks there are or storing pointers to compare (which would be duplicated by other modules; storing the same data redundantly in multiple places).
Tasks then call the RunGroups.h update functions passing in their own task_id(this), run_group_id, and loop_complete during shouldRun() (Or they pass in the struct with the first bit a boolean (loop_complete), and a 7-bit run_group_id).
The update function in RunGroups.h will return a struct with a Boolean "group_active" bit, and a Cycle_ID.  The logic in those functions should work for this almost unchanged; and may in fact get simpler...

Given the model you're alluding to, it's seems Tasks are responsible for coordinating themselves and choosing to run or not run as they deem fit and the Scheduler serves as a Task list container and execution pump.

Interesting point you make. While I was interested in centralizing logic in the Task, I think perhaps your point holds more weight. We should probably try moving more logic out of the Task and make the Scheduler responsible for this.
I think I will split out a new branch to work on this when I get some time. Please feel free to contribute.

An example of how possibly to do Delay.h:
#ifndef DELAY_H
#define DELAY_H

	struct DelayInfo {
		uint32_t delay_start = 0;
		uint32_t delay_ms = 0;
	}

    void delay(DelayInfo* delay_info, uint32_t ms) {
        if (ms) {
            delay_info->delay_start = millis();
            delay_info->delay_ms = ms;
        }

        yield(); // Do not return to the calling Task; move to the next Task
    }

	inline bool isDelayed(DelayInfo* delay_info) {
		return (delay_info->delay_ms != 0);
	}

	inline void updateDelay(DelayInfo* delay_info) {
		if (delay_info->delay_ms == 0) return;  // Optimize for the non-delayed case

		// This comparison is "rollover safe"
        uint32_t now = millis();
        if ((now - delay_info->delay_start) >= delay_info->delay_ms)
			delay_info->delay_ms = 0;
	}

	/*
	class Task {
		// ...
		DelayInfo delay_info;
		// ...
	}
    virtual bool shouldRun() {
		// ...
		// Pump the DelayInfo
		updateDelayInfo(&delay_info);
		if (isDelayed(&delay_info)) return false;
		// ...
	}
	void loop() {
		// ...
		delay(&delay_info, 1000);
		// ...
	}
	*/

#endif

Following the same pattern, here's a first stab at RunGroups.h
(Note: I didn't test to see if these even compile; they are more a demonstration of "how" they might be done so you can get a sense/feel for the pattern of extending Tasks this way).
The general approach is:

A "feature" creates a struct to put its per Task data in.
The Task declares one of these structs and passes a pointer to it when the "features" functions are called.  These functions are mostly inline so they'll compile as if they are directly part of the Task's code.
The "feature" can use this pointer as a Task ID (since the address of each struct will be different for each Task) if it thinks it needs one.
It is expected for a feature to modify Task.h as required to call functions at their required times. So adding a feature isn't totally done in a black box with just the header/cpp file.  However none of the feature's "logic" or "state updates" happen in Task.h; that's what the feature's functions are for.
This keeps the logic for separate features isolated, and keeps Task.h "clean" in the sense that it is easy for people to work in a way that doesn't "mess up" the logic of other features.

This struct/struct address approach could also be reversed, and classes with their member functions used instead; structs and functions are just the first way I saw on how to "extend" a Task with a new feature that carries almost no overhead and can be "inline" so the compiler will treat them as if they were directly embedded in the Tasks' code.
(Skip to the bottom to see how this gets used in Task.h)
#ifndef RUNGROUPS_H
#define RUNGROUPS_H

	struct RunGroupInfo {
		uint8_t run_group_id = 0;

		uint8_t task_active:1 = 0;
		uint8_t run_group_active:1 = 0;
		uint8_t cycle_id:6 = 0;
	}

	uint8_t scheduler_cycle_id;
	uint8_t count_active_group_tasks;
	uint8_t scheduler_run_group_id;
	uint8_t lowest_active_run_group_id;
	uint8_t next_run_group_id;

	inline void updateTask(RunGroupInfo* run_group_info) {
		// Executes before loop()
		uint8_t task_run_group_id = run_group_info->run_group_id;
		uint8_t task_cycle_id = run_group_info->cycle_id;

		// First, check the cycle_id
		if ( task_cycle_id != scheduler_cycle_id ) {
			// If the Task's cycle_id doesn't match; reset task_active and set the current cycle_id
			if (task_run_group_id != 0xFF) run_group_info->task_active = true;
			run_group_info->cycle_id = scheduler_cycle_id;
		}

		// Next, update the Task's run_group_active flag
		// run_group_active is always true when the run_group_id == 0xFF
		run_group_info->run_group_active = (task_run_group_id == 0xFF) || (task_run_group_id == scheduler_run_group_id);

		// RunGroupId tracking: Calculate the next run_group_id, and the lowest run_group_id to use when the cycle wraps.
		if (task_run_group_id < lowest_active_run_group_id) lowest_active_run_group_id = task_run_group_id;
		if (task_run_group_id > scheduler_run_group_id && task_run_group_id < next_run_group_id) next_run_group_id = task_run_group_id;
	}

	void updateRunGroups(RunGroupInfo* run_group_info) {
		// This is called after the Task's loop() has run;
		// updateTask(&run_group_info) reset task_active and cycle_id if required before loop() ran;
		// and if task_run_group_id was part of a currently active run_group, loop() could have set run_group_info->task_active

		// If this Task is task_active and also part of the current run_group, increment count_active_group_tasks; this group_id isn't done yet
		if (run_group_info->task_active && run_group_info->run_group_id == scheduler_run_group_id) count_active_group_tasks++;
	}

	void updateRunGroupsCycleId() {
		// If no Tasks in this group were active (all task_active == false), move to the next group_id
		if (count_active_group_tasks == 0) {
			if (next_run_group_id == 0xFF) { // If no next highest run_group_id exists; then all run_groups have completed
				scheduler_run_group_id = lowest_active_run_group_id;
				scheduler_cycle_id++;        // As all run_groups have completed; incrment the scheduler_cycle_id
			} else {
				scheduler_run_group_id = next_run_group_id;
			}
		}
		count_active_group_tasks = 0;  		// reset count of still active tasks in this run_group
		lowest_active_run_group_id = 0xFF;	// reset lowest_active_run_group_id
		next_run_group_id = 0xFF;	        // reset next_run_group_id
	}

	/*
	class Task {
		// ...

		RunGroupInfo run_group_info;

		// ...
	}
    virtual bool shouldRun() {
		// ...

		// Check the run_group_active and task_active Status
		return (run_group_info.run_group_active && run_group_info.task_active);
	}
	void loopWrapper() {

		// ...

		while(1) {

			updateTask(&run_group_info);
			run_group_info->task_active = loop();
			updateRunGroups(&run_group_info)

			yield();
		}
	}

	class Scheduler {
		Scheduler::main::loop() {
			updateRunGroupsCycleID();
		}
	}
	*/

#endif

Lastly, I changed a couple things around in the RunGroups logic code above:

The "loop_complete" flag was renamed to "task_active" and the logic is reversed; if loop() returns true, it will remain "active" and get called again.  When it's done, loop() should return false (no longer active).

This moves updateTask() and updateRunGroups() to loopWrapper() instead of the Scheduler; the reason is the only time this information changes is before and after the completion of loop(); the Scheduler and "shouldRun()" are called much more often, like the between times during a delay().

I eliminated the bit field for groups and track the "next_group_id" differently. Ther are now 256 available run_groups.

I expect Scheduler::main's "loop()" function to call the RunGroups.h updateRunGroupsCycleID(); this avoids having to compare pointers or count Tasks.  This uses the Scheduler's "main" loop() to mark the beginning/ending of a "pass" through the Tasks.  Other modules might want something similar.

Given the model you're alluding to, it seems Tasks are responsible for coordinating themselves and choosing to run or not run as they deem fit and the Scheduler serves as a Task list container and execution pump.

Interesting point you make. While I was interested in centralizing logic in the Task, I think perhaps your point holds more weight. We should probably try moving more logic out of the Task and make the Scheduler responsible for this.

Sounds like a plan, :)
Now that I've done the work I've done, I think I get how it all works and see how to rearrange things.
I expect to stick with the header files approach to implementing the Scheduler features.
I'll share my results as I get them. :)
PS I'm also very curious how the official Arduino Scheduler library works.  Somehow keeps the main loop() function of a project active while it does its Task thing...  Do you know?

I have made a start in the "run_group" branch. I will hopefully have some time to take a stab at splitting run groups out tonight. Let me know what you think.
Figured I would do it piece at a time, lastly moving the most of shouldRun() and friends into the Scheduler. I would like the Task to have some say as to weather it should run though. I use this in cases where no config has yet been provided, and think it is useful.
I am looking forward to seeing your results.
I don't know how the Arduino Scheduler works, it is possible though that it is a full multitasker, rather than a co-operative multitasker like this one. It would explain how it keeps running.

I would like the Task to have some say as to weather it should run though. I use this in cases where no config has yet been provided, and think it is useful.

I'll keep you posted, I agree shouldRun() is useful; a task's shouldRun() appears to fit better in Loopwrapper() where it selects whether or not loop() for the Task gets called.
Where it is now, it selects whether or not the task's continuation resumes (I.e. the task gets scheduled).

First pass at moving things into the Scheduler and separating out "new features" into separate include files.
Here's the diff:
https://github.com/MikeFair/ESP8266Scheduler/commit/b9ea97453cea557fa58810d6002b0109394dae16
It seems to work as advertised; here's the output from my last run using both the delay and RunGroup features (though there's no timing information directly displayed in the output; the inconsistency in task output ordering is showing that differing delays were happening).
Look it over, I can make a pull request if you like.

Thanks. I'll take a look this week.
Have a good one.

Here's a heads on the biggest/main changes:

Everything was redone in one shot:

The Scheduler now hosts both delay and RunGroups;
The Task loopWrapper calls shouldRun() before the start of loop() (not during loop())
A new "can_schedule(Task* t)" [which replaces what shouldRun() was doing];
A new "class SchedulerTask : public Task" to serve as the new "main" for doing "Scheduler Work"

Delay.h provides a DelayInfo struct (Every Task gets an instance of this struct) and there's a "Delay" class with static methods that operate on that struct.  The Tasks also have local member functions that hide away the struct and external class functions.  Calls to "delay(10);" work like they always have.

RunGroups.h/cpp provides a RunGroupsInfo struct (again one per Task) and a RunGroups class with static methods and variables that operate on the struct and keeps track of the RunGroups state.  All 256 group ids are now valid (I eliminated the internal bitField tracker), and the ScheulderClass::main Task is used to detect when a full pass through the list of Tasks has happened.  (You'll see the addition of a "SchedulerTask" class)

There's a new SchedulerTask.h which implements the class of ::main's Task.  Right now it only calls the function to update the RunGroup's cycle_id.  But I expect it to be useful for other modules that require periodic housekeeping which can happen between passes through all the active Tasks.

So far, all the Tasks in my testing are working exactly as the design intended.  :)

Following of from your run groups sample, I have had a run at simplifying the process. I think it worked out, but I haven't had time to run and debug this yet. Let me know what you think though.
run_groups
Will jump back on this asap. A little heck here at the moment.

So I had another crack at this this weekend, and the more I looked at it, the more it seemed too complex. For me this generally points towards a needed simplification or rethink.
This is what I have come up with. If we treat a RunGroup as a mini scheduler, and abstract and share the methods used to determine if a Task can be run, we will simplify the issue greatly. The RunGroup can then be run like a Task. When it is done, the next RunGroup or Task can be run.
I think in the end this will hold 2 advantages:

The RunGroup logic is entirely encapsulated. It seems now to be sitting between the Scheduler and the Task, which is a bit messy.
The Scheduler can be used without run groups with no penalty. With RunGroup logic all over, not using them still incurs the logic of using them.

There are still some details I am working out.

If you are saying something like:
    Task t1;
    Task t2;
    RunGroup rg1;

    rg1.addTask(t1);
    scheduler.addRunGroup(rg1);
    scheduler.addTask(t2);

Where a RunGroup is derived from, that makes sense to me.
On Mon, Nov 21, 2016 at 12:03 AM, Nicholas Wiersma<EMAIL_ADDRESS>
wrote:

So I had another crack at this this weekend, and the more I looked at it,
the more it seemed too complex. For me this generally points towards a
needed simplification or rethink.
This is what I have come up with. If we treat a RunGroup as a mini
scheduler, and abstract and share the methods used to determine if a Task
can be run, we will simplify the issue greatly. The RunGroup can then be
run like a Task. When it is done, the next RunGroup or Task can be run.
I think in the end this will hold 2 advantages:

The RunGroup logic is entirely encapsulated. It seems now to be
sitting between the Scheduler and the Task, which is a bit messy.
The Scheduler can be used without run groups with no penalty. With
RunGroup logic all over, not using them still incurs the logic of
using them.

There are still some details I am working out.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/nrwiersma/ESP8266Scheduler/issues/3#issuecomment-261868937,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ACMqLcXwtLL0aiK4-myti8bHfj-iSqbwks5rAVBrgaJpZM4Kwr1l
.

If you are saying something like:
    Task t1;
    Task t2;
    RunGroup rg1;

    rg1.addTask(t1);
    scheduler.addRunGroup(rg1);
    scheduler.addTask(t2);

Where a RunGroup is derived from, that makes sense to me.

The Scheduler can be used without run groups with no penalty. With RunGroup logic all over, not using them still incurs the logic of using them.

To be clear, not using any rungroups is very inexpensive.  When a Task is in RunGroup 0xFF, which is the default, most, if not all the rungroup functions have immediate short circuit returns.
So the "cost" of not using RunGroups is pretty close to 3 "Branch if not equal" instructions and a couple assignments and adds to handle the function calls.
Honestly, I'd compare the current implementation of delay that always does the millis() math regardless of whether or not there's an active delay as more expensive than not using RunGroups and having them there (at least the way I coded it).
BTW, I think there's a bug in the code you were looking; there's a point I call "yield()" but it's the system yield() and not the Task's yield().  So keep an eye out; I'll likely have more code to post soon.

Hello
this is very interesting.
has this been finalised?
best regards

Unfortunately not yet. I need to do a fair bit of restructuring to have then sit lightly in the library. I havnt had much time lately, and am hoping to get back to it soon.

I take it that the idea didn't make it? ;-)

I dont have a lot of time for this project any more. I am basically just doing maintenance at this point. Feel free to add though :)


Unit tests doing assignent instead of equality check

When experimenting with #252, two test cases were also discovered where an assignment was being done rather than an equality check.
This is not a "failure", but rather these tests could never fail - it is defeating the purpose of the test case entirely.

Imported from trac issue 222.  Created by jphickey on 2017-11-08T12:46:12, last modified: 2019-03-05T15:21:51

Trac comment by jphickey on 2017-11-08 12:48:17:
Commit [changeset:b1bfcc1] ready for review
Note - the original push had a typo in the log message which stated ticket 221 instead of 222.  This was corrected in the commit above.

Trac comment by sstrege on 2017-11-08 13:37:29:
Recommend/approve for 6.6.0

Trac comment by glimes on 2017-11-09 11:18:15:
Recommend approve for 6.6.0

Trac comment by glimes on 2017-11-14 13:25:01:
approved at 2017-11-14 CCB


fix(schema) limit positive integer limit to 255 (1 byte) when setting

healthchecker thresholds

why was this changed? didn't we have issues in the past with this? Maybe @locao knows?

why was this changed? didn't we have issues in the past with this? Maybe @locao knows?

@Tieske see FTI-796

@Tieske see FTI-796

@murillopaula thx! that was the one

@murillopaula thx! that was the one


日志内容显示错误：2022-05-27T11:48:04.782+0800: 604360.660: [GC pause (G1 Evacuation Pause)

所有日志的msg内容页面上都显示为
`
2022-05-27T11:48:04.782+0800: 604360.660: [GC pause (G1 Evacuation Pause) (young)
Desired survivor size 301989888 bytes, new threshold 1 (max 1)

age 1: 238254864 bytes, 238254864 total
604360.660: [G1Ergonomics (CSet Construction) start choosing CSet, _pending_cards: 23914, predicted base time: 13.34 ms, remaining time: 36.66 ms, target pause time: 50.00 ms]
604360.660: [G1Ergonomics (CSet Construction) add young regions to CSet, eden: 122 regions, survivors: 17 regions, predicted young region time: 37.16 ms]
604360.660: [G1Ergonomics (CSet Construction) finish choosing CSet, eden: 122 regions, survivors: 17 regions, old: 0 regions, predicted pause time: 50.50 ms, target pause time: 50.00 ms]
, 0.0696159 secs]
[Parallel Time: 65.1 ms, GC Workers: 16]
[GC Worker Start (ms): Min: 604360660.1, Avg: 604360660.2, Max: 604360660.2, Diff: 0.2]
[Ext Root Scanning (ms): Min: 1.6, Avg: 1.8, Max: 2.8, Diff: 1.2, Sum: 28.8]
[Update RS (ms): Min: 3.6, Avg: 4.2, Max: 5.0, Diff: 1.5, Sum: 67.5]
[Processed Buffers: Min: 4, Avg: 9.6, Max: 19, Diff: 15, Sum: 154]
[Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.4]
[Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.0]
[Object Copy (ms): Min: 57.5, Avg: 58.4, Max: 59.0, Diff: 1.5, Sum: 934.8]
[Termination (ms): Min: 0.0, Avg: 0.4, Max: 0.8, Diff: 0.8, Sum: 5.8]
[Termination Attempts: Min: 1, Avg: 1.0, Max: 1, Diff: 0, Sum: 16]
[GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.6]
[GC Worker Total (ms): Min: 64.8, Avg: 64.9, Max: 65.0, Diff: 0.2, Sum: 1037.9]
[GC Worker End (ms): Min: 604360725.0, Avg: 604360725.0, Max: 604360725.1, Diff: 0.1]
[Code Root Fixup: 0.0 ms]
[Code Root Purge: 0.0 ms]
[Clear CT: 0.5 ms]
[Other: 4.0 ms]
[Choose CSet: 0.0 ms]
[Ref Proc: 2.3 ms]
[Ref Enq: 0.2 ms]
[Redirty Cards: 0.2 ms]
[Humongous Regis
`

@qianque7

感谢指出问题，已进行修复 https://github.com/clickvisual/clickvisual/pull/300


Loading onedark clears custom highlight definitions

This is my favorite neovim colorscheme, so thank you! However, I have one problem with it.
In my init.lua, I define a custom highlight group for superfluous whitespace:
vim.cmd("highlight BadWhitespace ctermbg=red guibg=red")
vim.api.nvim_create_autocmd({ "VimEnter", "WinEnter" }, { command = [[match BadWhitespace /\s\+$/]] })

With onedark installed, but not loaded, the highlight works. Whitespace at the end of lines is marked red and :hi BadWhitespace outputs BadWhitespace  xxx ctermbg=9 guibg=Red. After using :colors onedark however, the highlighting disappears and :hi BadWhitespace outputs BadWhitespace  xxx cleared.
Other colorschemes do not exhibit this behavior of clearing user defined highlights.

Nevermind, this seems to be a neovim issue.

This was a problem for me as well. I use Lazy.nvim and couldn't get onedark.nvim to load before everything else.
I endup writting build patch for lazy entry
return {
  'navarasu/onedark.nvim',
  lazy = false,
  priority = 1000,
  build = [[cat <<EOF | git apply -
diff --git a/lua/onedark/init.lua b/lua/onedark/init.lua
index 05d0998..f97684c 100644
--- a/lua/onedark/init.lua
+++ b/lua/onedark/init.lua
@@ -14,7 +14,6 @@ end

 ---Apply the colorscheme (same as ':colorscheme onedark')
 function M.colorscheme()
-    vim.cmd("hi clear")
     if vim.fn.exists("syntax_on") then vim.cmd("syntax reset") end
     vim.o.termguicolors = true
     vim.g.colors_name = "onedark"
EOF

  ]],
  init = function()
    vim.cmd([[colorscheme onedark]])
  end
}


Setting the hostname - Pico W

The default hostname is PicoW.
How do I set it to something different?
I am using circuit python 8.2
If I do this:
...
from adafruit_httpserver import Server, Request, FileResponse, MIMETypes, GET, JSONResponse
wifi.radio.hostname = str("xx")

...

server.serve_forever(str(wifi.radio.hostname)) # line 67
...

The REPL says:
>>> Wi-Fi: No IP | Done | 8.2.0-rc.1
Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
code.py output:
0;🐍<IP_ADDRESS> | code.py | 8.2.0-rc.1socket_resolve_host() returned -2
Traceback (most recent call last):
  File "adafruit_httpserver/server.py", line 138, in _verify_can_start
gaierror: (-2, 'Name or service not known')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "code.py", line 67, in <module>
  File "adafruit_httpserver/server.py", line 151, in serve_forever
  File "adafruit_httpserver/server.py", line 170, in start
  File "adafruit_httpserver/server.py", line 140, in _verify_can_start
RuntimeError: Cannot start server on xx:80
0;🐍<IP_ADDRESS> |<EMAIL_ADDRESS>RuntimeError | 8.2.0-rc.1
Code done running.
0;🐍<IP_ADDRESS> | REPL | 8.2.0-rc.1
Adafruit CircuitPython 8.2.0-rc.1 on 2023-06-27; Raspberry Pi Pico W with rp2040

Needless to say removing this and rebooting ...
0;🐍Wi-Fi: Authentication failure | REPL | 8.2.0-rc.1
Adafruit CircuitPython 8.2.0-rc.1 on 2023-06-27; Raspberry Pi Pico W with rp2040
>>>
>>> Wi-Fi: No IP | Done | 8.2.0-rc.1
Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
code.py output:
0;🐍<IP_ADDRESS> | code.py | 8.2.0-rc.1Started development server on http://PicoW:80

Instead of server.serve_forever(str(wifi.radio.hostname)) try server.serve_forever(str(wifi.radio.ipv4_address)), hostname will be visible, but if you want to access server via it you need to configure a mDNS.

TY


Invisible palette

Operating system or device - Godot version: Linux Mint Mate 18.1 (x64_86), custom_build 3.0 (commit 7088d9e)
Issue description: Just an invisible palette, which, after all, works as it should.
Steps to reproduce:

Duplicate of #8372


Deployment from Redesign Repos to Production (Mack Trucks  Only)

Agile Requirement
As a business owner, I want to approve the signed off code before going live.
Description
Test the following URLs (QA and UAT) to sign them off:
Mack Trucks:
https://develop--vg-macktrucks-com-rd--netcentric.hlx.page/
https://develop--vg-macktrucks-com-rd--netcentric.hlx.page/trucks/
https://develop--vg-macktrucks-com-rd--netcentric.hlx.page/trucks/anthem/
https://develop--vg-macktrucks-com-rd--netcentric.hlx.page/trucks/anthem/features/
https://develop--vg-macktrucks-com-rd--netcentric.hlx.page/trucks/anthem/inventory/
https://develop--vg-macktrucks-com-rd--netcentric.hlx.page/trucks/anthem/specs/
https://develop--vg-macktrucks-com-rd--netcentric.hlx.page/powertrain-and-suspensions/
https://develop--vg-macktrucks-com-rd--netcentric.hlx.page/powertrain-and-suspensions/
https://develop--vg-macktrucks-com-rd--netcentric.hlx.page/powertrain-and-suspensions/engines/mp8/
https://develop--vg-macktrucks-com-rd--netcentric.hlx.page/parts-and-services/
https://develop--vg-macktrucks-com-rd--netcentric.hlx.page/magazine/
https://develop--vg-macktrucks-com-rd--netcentric.hlx.page/about-mack/
https://develop--vg-macktrucks-com-rd--netcentric.hlx.page/magazine/articles/2023/may/savage-keeps-california-moving-with-mack-anthem
Test created pages that include all new blocks, like /homepage/ or /pdp/ for both brands.
Also, test the header and footer prior to deployment.
Acceptance Criteria
The above-mentioned urls and header and footer are tested and approved by business before they are merged to production.

Posting here content ( or possible content) issues for visibility and review

on Trucks -> Anthem
https://develop--vg-macktrucks-com-rd--netcentric.hlx.page/trucks/anthem/

all videos on the page are error 403


MAD-G

Thank you so much for the library! I would like to carry out experiments on MAD-G. I wonder whether the new version of the library supports it, and do you plan to add a tutorial regarding MAD-G?

Unfortunately, adapter-transformers does not include MAD-G currently.
cc @JoPfeiff

Bumping this, wonder if it's coming soon. Seems like an exciting approach!

also bumping this! Hope MAD-G comes soon, very exciting approach

bumping this +1!

What is the tentative date for the release of MAD-G?

Any news on this?  "We release the MAD-G code online at: https://github.com/Adapter-Hub/adapter-transformers" - page 9 of the paper :upside_down_face:

Hey, the authors of the paper have unfortunately not contributed their code to the main branch of adapter-transformers/ Adapters to this date.
Their research code (based on a very old version of adapter-transformers) can be found here: https://github.com/adapter-hub/CPGAdapters. We can look into porting it if there is interest.


docs: update twitter and switch titles to sentence case

Codecov Report

Merging #158 (9bd1c7e) into master (0b4406d) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #158   +/-   ##
=======================================
  Coverage   81.44%   81.44%
=======================================
  Files          73       73
  Lines        5281     5281
=======================================
  Hits         4301     4301
  Misses        711      711
  Partials      269      269


refactor

after looking wenhook.rs it seems to me unsafe to bind a webhook to a token. I suggest using https://github.com/nikolay-govorov/nanoid

after looking wenhook.rs it seems to me unsafe to bind a webhook to a token. I suggest using https://github.com/nikolay-govorov/nanoid

Cannot really understand, why it's unsafe to use a token there (since token is unknown for anyone except Telegram servers).

Cannot really understand, why it's unsafe to use a token there (since token is unknown for anyone except Telegram servers).

there are applications that check for available paths and also if you forget to specify in the robot.txt then the path can be indexed in search engines

there are applications that check for available paths and also if you forget to specify in the robot.txt then the path can be indexed in search engines

There is so smaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal chance, that Telegram Bot token will be bruteforced (if it's possible - Telegram has a really huge security hole). How it can be indexed in robot.txt - idk, since I see no way, how search engine will get my private Telegram Bot token.

There is so smaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal chance, that Telegram Bot token will be bruteforced (if it's possible - Telegram has a really huge security hole). How it can be indexed in robot.txt - idk, since I see no way, how search engine will get my private Telegram Bot token.

I think that it would be better to change the way of getting the link

I think that it would be better to change the way of getting the link

Maybe you are right but no for security reasons since current approach is secure and there is no way without hacking Telegram servers (or user's storage with Telegram bot token) to get the token.
However the possible improvement can be like: provide webhook bind url with environment variable. It's highly configurable to end-user way to set any uri, as they wish.
If you want to do such change, feel free to do it in another PR.

Maybe you are right but no for security reasons since current approach is secure and there is no way without hacking Telegram servers (or user's storage with Telegram bot token) to get the token.
However the possible improvement can be like: provide webhook bind url with environment variable. It's highly configurable to end-user way to set any uri, as they wish.
If you want to do such change, feel free to do it in another PR.

ok

ok

So for now fix the last warn and seems like it can be merged :)

So for now fix the last warn and seems like it can be merged :)

what? I fixed everything

what? I fixed everything

Unfortunately - no. See detection.rs, line with static INSTANCE: OnceCell<[&'static str; 76]> = OnceCell::new();. It shall be moved back to the function as well.

Unfortunately - no. See detection.rs, line with static INSTANCE: OnceCell<[&'static str; 76]> = OnceCell::new();. It shall be moved back to the function as well.


Create ethicontrol-case-management-tutorial

Dear maintainers, please add this tutorial into the folder.
Thanks,
Oleg

@microsoft-github-policy-service agree company="your company"

@microsoft-github-policy-service agree company="Ethicontrol"

@jeevansd @CelesteDG - can you review the submission of this new article? (I think it should be moved into the SaaS directory, but that would be your call. (if you approve, the commits should be moved to the private repo for access to staging and acrolinx so we can do a full review) thanks!
#label:"aq-pr-triaged"
@MicrosoftDocs/public-repo-pr-review-team

Hi @oleg-ethicontrol
Thank you very much for your contribution. We are migrating Microsoft Entra content from this existing repo and into a dedicated Microsoft Entra content repo. To complete the migration, we are closing all open and unmerged PRs EOD today, October 18th. We won't have a public repo immediately available after we complete our migration to allow our team time to further clean up our content structure, make updates, etc. I've tagged the relevant team members in this comment to make sure we have a work item open to track this PR and follow up as needed.
thanks
CC @jeevansd

#please-close


[Snyk] Upgrade playwright-core from 1.27.1 to 1.28.0

This PR was automatically created by Snyk using the credentials of a real user.Snyk has created this PR to upgrade playwright-core from 1.27.1 to 1.28.0.
:information_source: Keep your dependencies up-to-date. This makes it easier to fix existing vulnerabilities and to more quickly identify and fix newly disclosed vulnerabilities when they affect your project.

The recommended version is 62 versions ahead of your current version.
The recommended version was released a month ago, on 2022-11-16.

Release notes

Package name: playwright-core

1.28.0 - 2022-11-16Playwright Tools

Record at Cursor in VSCode. You can run the test, position the cursor at the end of the test and continue generating the test.

Live Locators in VSCode. You can hover and edit locators in VSCode to get them  highlighted in the opened browser.
Live Locators in CodeGen. Generate a locator for any element on the page using "Explore" tool.

Codegen and Trace Viewer Dark Theme. Automatically picked up from operating system settings.

Test Runner

Configure retries and test timeout for a file or a test with test.describe.configure([options]).
// Each test in the file will be retried twice and have a timeout of 20 seconds.
test.describe.configure({ retries: 2, timeout: 20_000 });
test('runs first', async ({ page }) => {});
test('runs second', async ({ page }) => {});

Use testProject.snapshotPathTemplate and testConfig.snapshotPathTemplate to configure a template controlling location of snapshots generated by expect(page).toHaveScreenshot(name[, options]) and expect(screenshot).toMatchSnapshot(name[, options]).
// playwright.config.ts
import type { PlaywrightTestConfig } from '@ playwright/test';
const config: PlaywrightTestConfig = {
testDir: './tests',
snapshotPathTemplate: '{testDir}/screenshots/{testFilePath}/{arg}{ext}',
};
export default config;

New APIs

locator.blur([options])
locator.clear([options])
android.launchServer([options]) and android.connect(wsEndpoint[, options])
androidDevice.on('close')

Browser Versions

Chromium 108.0.5359.29
Mozilla Firefox 106.0
WebKit 16.4

This version was also tested against the following stable channels:

Google Chrome 107
Microsoft Edge 107

1.28.0-beta-1669074896000 - 2022-11-21

1.28.0-beta-1669073057000 - 2022-11-21

1.28.0-beta-1669072579000 - 2022-11-21

1.28.0-beta-1668756027000 - 2022-11-18

1.28.0-beta-1668635971000 - 2022-11-16

1.28.0-beta-1668558158000 - 2022-11-16

1.28.0-beta-1668558062000 - 2022-11-16

1.28.0-beta-1668546899000 - 2022-11-15

1.28.0-beta-1668546662000 - 2022-11-15

1.28.0-beta-1668541955000 - 2022-11-15

1.28.0-beta-1668541928000 - 2022-11-15

1.28.0-beta-1668538774000 - 2022-11-15

1.28.0-beta-1668538195000 - 2022-11-15

1.28.0-beta-1668535043000 - 2022-11-15

1.28.0-beta-1668481322000 - 2022-11-15

1.28.0-beta-1668473403000 - 2022-11-15

1.28.0-beta-1668469027000 - 2022-11-14

1.28.0-beta-1668463093000 - 2022-11-14

1.28.0-beta-1668449150000 - 2022-11-14

1.28.0-beta-1668449009000 - 2022-11-14

1.28.0-beta-1668203080000 - 2022-11-11

1.28.0-alpha-oct-9-2022 - 2022-10-09

1.28.0-alpha-oct-8-2022 - 2022-10-08

1.28.0-alpha-oct-7-2022 - 2022-10-07

1.28.0-alpha-oct-6-2022 - 2022-10-06

1.28.0-alpha-oct-31-2022 - 2022-10-31

1.28.0-alpha-oct-30-2022 - 2022-10-30

1.28.0-alpha-oct-29-2022 - 2022-10-29

1.28.0-alpha-oct-28-2022 - 2022-10-28

1.28.0-alpha-oct-27-2022 - 2022-10-27

1.28.0-alpha-oct-26-2022 - 2022-10-26

1.28.0-alpha-oct-25-2022 - 2022-10-25

1.28.0-alpha-oct-24-2022 - 2022-10-24

1.28.0-alpha-oct-23-2022 - 2022-10-23

1.28.0-alpha-oct-22-2022 - 2022-10-22

1.28.0-alpha-oct-21-2022 - 2022-10-21

1.28.0-alpha-oct-20-2022 - 2022-10-20

1.28.0-alpha-oct-19-2022 - 2022-10-19

1.28.0-alpha-oct-18-2022 - 2022-10-18

1.28.0-alpha-oct-17-2022 - 2022-10-17

1.28.0-alpha-oct-16-2022 - 2022-10-16

1.28.0-alpha-oct-15-2022 - 2022-10-15

1.28.0-alpha-oct-14-2022 - 2022-10-14

1.28.0-alpha-oct-13-2022 - 2022-10-13

1.28.0-alpha-oct-12-2022 - 2022-10-12

1.28.0-alpha-oct-11-2022 - 2022-10-11

1.28.0-alpha-oct-10-2022 - 2022-10-10

1.28.0-alpha-nov-9-2022 - 2022-11-09

1.28.0-alpha-nov-8-2022 - 2022-11-08

1.28.0-alpha-nov-7-2022 - 2022-11-07

1.28.0-alpha-nov-6-2022 - 2022-11-06

1.28.0-alpha-nov-5-2022 - 2022-11-05

1.28.0-alpha-nov-4-2022 - 2022-11-04

1.28.0-alpha-nov-3-2022 - 2022-11-03

1.28.0-alpha-nov-2-2022 - 2022-11-02

1.28.0-alpha-nov-11-2022 - 2022-11-11

1.28.0-alpha-nov-10-2022 - 2022-11-10

1.28.0-alpha-nov-1-2022 - 2022-11-01

1.28.0-alpha-1667504282000 - 2022-11-03

1.28.0-alpha-1666810142000 - 2022-10-26

1.28.0-alpha-1666716920000 - 2022-10-25

1.27.1 - 2022-10-12Highlights
This patch release includes the following bug fixes:
#18010 - fix(generator): generate nice locators for arbitrary selectors
#17999 - chore: don't fail on undefined video/trace
#17955 - [Question] Github Actions test compatibility check failed mitigation?
#17960 - [BUG] Codegen 1.27 creates NUnit code that does not compile
#17952 - fix: fix typo in treeitem role typing
Browser Versions

Chromium 107.0.5304.18
Mozilla Firefox 105.0.1
WebKit 16.0

This version was also tested against the following stable channels:

Google Chrome 106
Microsoft Edge 106

    from playwright-core GitHub release notes

Commit messages

Package name: playwright-core

8f9bf0f cherry-pick(#18818): chore: multiply overloaded options in csharp
c3335e4 cherry-pick(#18799): chore: allow `py` code blocks for python
5459be0 cherry-pick(#18768): chore: verify tab groups in docs during lint (#18837)
553a211 cherry-pick(#18832): docs: remove images from locators.md
f7087bf cherry-pick(#18830): chore: update WebKit browser version to 16.4 (#18831)
2720c72 chore: mark 1.28.0 (#18754)
7431471 cherry-pick(#18802): doc: version 1.28 release notes (#18829)
ba1a1bd cherry-pick(#18819): fix(locators): frameLocator().nth serialized correctly
09c2d89 cherry-pick(#18822): chore(electron): filter test args out
e20be6c cherry-pick(#18804): fix(electron): stall node while browser is starting
5ceac3f cherry-pick(#18800): chore: hide TestProject.setup and TestInfo.storage (#18803)
c6d7cb4 cherry-pick(#18801): fix: recorder dark theme and strict explore locator parser
2fd36db cherry-pick(#18796): chore: ignore untrusted clicks when recording
db93e97 cherry-pick(#18791): Revert "chore(driver): roll driver to recent Nod… (#18794)
0cf4d94 cherry-pick(#18719): fix(getByRole): name and exact
2e484b4 Revert "chore: support narrow terminal windows for messages (#18714)"
251cc9e chore: fix docs (#18751)
7685c92 chore: use '--disable-component-update' flag to avoid component updates (#18745)
46559a3 fix(ct): setting ctTemplateDir does not work (#18152)
2e84c63 docs: update locators in getting started (#18738)
ad5fe28 docs: improve locators examples and flow (#18548)
26044c1 fix(webserver): do not spawn webserver as a new process group (#18564)
2841b0b fix: address ff test failure with new event mode
f3a99fd chore: address API review comments for the `snapshotPathTemplate` (#18716)

Compare

Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open upgrade PRs.
For more information:
🧐 View latest project report
🛠 Adjust upgrade PR settings
🔕 Ignore this dependency or unsubscribe from future upgrade PRs

:broken_heart: Tests Failed

the below badges are clickable and redirect to their specific view in the CI or DOCS

Expand to view the summary

Build stats

Start Time: 2022-12-14T11:47:39.559+0000

Duration: 8 min 35 sec

Test stats :test_tube:

Test
Results

Failed
1

Passed
201

Skipped
2

Total
204

Test errors
Expand to view the tests failures
Test / Synthetics JavaScript formatter accepts custom step organization – Synthetics JavaScript formatter accepts custom step organization

Expand to view the error details
 null

Expand to view the stacktrace
 Error: expect(received).toMatchSnapshot()

Snapshot name: `Synthetics JavaScript formatter accepts custom step organization 1`

- Snapshot  - 1
+ Received  + 1

@@ -10,11 +10,11 @@
    });
    step('Assert text=Babel Minify textContent', async () => {
      expect(await page.textContent('text=Babel Minify')).toMatch('Babel');
      const [page1] = await Promise.all([
        page.waitForEvent('popup'),
-       page.getByText('Babel Minify').click()
+       page.locator('text=Babel Minify').click()
      ]);
      await Promise.all([
        page1.waitForNavigation(/*{ url: 'https://github.com/babel/minify' }*/),
        page1.locator('a:has-text("smoke")').click()
      ]);
    at Object.<anonymous> (/var/lib/jenkins/workspace/nt-rum_elastic-synthetics_PR-681/src/github.com/elastic/synthetics/__tests__/formatter/javascript.test.ts:176:52)
    at Promise.then.completed (/var/lib/jenkins/workspace/nt-rum_elastic-synthetics_PR-681/src/github.com/elastic/synthetics/node_modules/jest-circus/build/utils.js:333:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (/var/lib/jenkins/workspace/nt-rum_elastic-synthetics_PR-681/src/github.com/elastic/synthetics/node_modules/jest-circus/build/utils.js:259:10)
    at _callCircusTest (/var/lib/jenkins/workspace/nt-rum_elastic-synthetics_PR-681/src/github.com/elastic/synthetics/node_modules/jest-circus/build/run.js:277:40)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at _runTest (/var/lib/jenkins/workspace/nt-rum_elastic-synthetics_PR-681/src/github.com/elastic/synthetics/node_modules/jest-circus/build/run.js:209:3)
    at _runTestsForDescribeBlock (/var/lib/jenkins/workspace/nt-rum_elastic-synthetics_PR-681/src/github.com/elastic/synthetics/node_modules/jest-circus/build/run.js:97:9)
    at _runTestsForDescribeBlock (/var/lib/jenkins/workspace/nt-rum_elastic-synthetics_PR-681/src/github.com/elastic/synthetics/node_modules/jest-circus/build/run.js:91:9)
    at run (/var/lib/jenkins/workspace/nt-rum_elastic-synthetics_PR-681/src/github.com/elastic/synthetics/node_modules/jest-circus/build/run.js:31:3)

Steps errors
Expand to view the steps failures

Runs the tests

Took 2 min 50 sec . View more details here
Description: ./node_modules/.bin/jest --ci --reporters=default --reporters=jest-junit

:robot: GitHub comments
Expand to view the GitHub comments

To re-run your PR in the CI, just comment with:

/test : Re-trigger the build.


Look into alternate database structure for tag associations

Right now a separate table is created for association.
So for Time Entries, we have
TimeEntryTag
and for Timestamps we have
TimestampTag
This is an okay way to do it, but it seems a little redundant to have a separate table per entity.
Ideally we add a column identifying the resource like 'timestamp' and 'time-entry'.
This might be a bit difficult with Doctrine ORM.
Another approach is to have all of the related entities on one table, and have the others have a null value.
Something like
EntityTags

tag_id
timestamp_id: int | null
time_entry_id: int | null

I would suggest maybe trying a json column?
That way, you have one column.
But you store all the entities and their tags inside the json text.

https://tapoueh.org/blog/2013/10/denormalizing-tags/

This has an interesting display of querying multiple tags using a postgres feature

One other thought I have is to automate it a bit from the code side.

So you create an interface or maybe trait, and the doctrine entity could implement it.
This could be picked up by the database migration code and generate it
Plus, auto-complete should see that trait and be able to run the collection, query, and other CRUD operations.

An updated scheme has been implemented. Please see
https://github.com/Vafilor/TimeTracker/blob/main/design_docs/tags.md
for more information.
Going to close this out for now, but I'm always up for a discussion on a new way to do it.


add Scatter + tests

[x] docstring
[ ] example page (still needs gifs)
[x] example notebook
[ ] gallery entry
[x] reliming behavior
[ ] use plot when c and s do not vary
[x] if c is a 2d array of numbers don't error
[ ] scatter tests
[x] add a cache to not call functions over and over
[x] labels
also:
created tests + testing infrastructure (github actions)
autoformatted using black
started to introduce broadcasting #106

continuation of https://github.com/ianhi/mpl-interactions/pull/101 but ended up opening a new one in the quest to get github actions to go

heatmap slicer test failure between 3.2 and 3.3 is due to different behavior. idk how to effectively differentiate at test time though??

Gonna merge because it's getting hard to implement other things without the improvements in this pr


refactor: Merge preview_value_mappings() and match_values()

The commit simplifies the API by removing preview_value_mappings() and merging its functionality into match_values(). The functionality provided by preview_value_mappings() is now fully supported by match_values().

I think we can be slightly more consistent with the outputs from match_values. When the input is a tuple it returns a dataframe (I like it), but when the input is a dataframe, it returns a list of dictionaries, with some extra attributes (e.g. coverage). It can be a little bit confusing, and users would need two scripts to parser the outputs. I think we should return a dataframe (when a tuple is the input) and a list of dataframes (when a dataframe is the input). Each output dataframe would continue to have the 3 columns (source, target, and similarity). To know which columns are, we can add the name of the columns as metadata.
result = {
    'source': ["a", "b", "c", "d"],
    'target': ["A", "B", "C", "D"],
    'similarity': [1.0, 1.0, 1.0, 1.0]
}

result = pd.DataFrame(result)
print("Original DataFrame:")
print(result)

result.attrs['source'] = {'name': 'id'}
result.attrs['target'] = {'name': 'ID'}
print("\nDataFrame with metadata:")
print(result)

# Access the metadata for each column
print("\nMetadata for source column:")
print(result.attrs['source'])

print("\nMetadata for target column:")
print(result.attrs['target'])

Using a data frame looks good but also creates inconsistencies with other functions. One of the reasons the output is a dictionary containing source and target keys is that this is the expected input format of bdi.materialize_mapping() and update_mappings(). So if we change it to a DataFrame, we need to modify these functions to support two different input cases. I'll investigate if this can be done easily.

@roquelopez this is ready to review again.

@aecio I made some minor changes. Feel free to merge!

Thanks, @roquelopez. I also added two more commits (function reordering and rename update_mappings) that we discussed.


issue with 0.12.0 and 0.13.0

On windows 11H4, no error has been shown, but the service result unreachable.
same code works until version 0.11.5:
let mdns = ServiceDaemon::new()?;
let ip = local_ip()?;
let host_name = format!("{}.local.", ip);
let properties = [("port", CAST_SERVICE_PORT)];
let my_service = ServiceInfo::new(
    LOCAL_DISCOVERY_SERVICE_NAME,
    "ScreenCaster",
    &*host_name,
    ip,
    CAST_SERVICE_PORT,
    &properties[..],
)?;

mdns.register(my_service)?;

Ok(mdns)

I tried and indeed that's a bug. The problem is that a new probing code in 0.12.0 did not convert service name (including instance name) to lower case properly.  For example, if you change your test instance name to "screencaster", the bug will not show up.
This bug just happened to be fixed by PR #286 .  So if you pull the latest main branch, it should be fixed. I tried locally and it seems working. Let me know if the issue still exists. I will try to publish a bugfix release soon.
Thanks for opening this issue!

Everything works fine now

Thanks for verifying!


Add headers to all subcommands

Fixes #50,#45

LGTM after you make all the headers constants and rebase the commits.

Updated

LGTM


[flutter_tools] add --android-gradle-daemon option, use in devicelab

Description
Remove devicelab specific code for shutting down gradle daemon, add --android-gradle-daemon option to build/run/drive`. Avoids need for un-tested devicelab specific handler. There are also some feature requests for this, so 2 birds one stone.
Example:
flutter build apk --no-android-gradle-daemon will pass --no-daemon on to gradle

iOS/macOS failures is the current SDK flake and is unrelated

This was relanded in https://github.com/flutter/flutter/pull/68491


Update RocketMQ_Example.md

onSuccess中，countDownLatch需要减值。
What is the purpose of the change
XXXXX
Brief changelog
XX
Verifying this change
XXXX
Follow this checklist to help us incorporate your contribution quickly and easily. Notice, it would be helpful if you could finish the following 5 checklist(the last one is not necessary)before request the community to review your PR.

[x] Make sure there is a Github issue filed for the change (usually before you start working on it). Trivial changes like typos do not require a Github issue. Your pull request should address just this issue, without pulling in other changes - one PR resolves one issue.
[x] Format the pull request title like [ISSUE #123] Fix UnknownException when host config not exist. Each commit in the pull request should have a meaningful subject line and body.
[x] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
[x] Write necessary unit-test(over 80% coverage) to verify your logic correction, more mock a little better when cross module dependency exist. If the new feature or significant change is committed, please remember to add integration-test in test module.
[x] Run mvn -B clean apache-rat:check findbugs:findbugs checkstyle:checkstyle to make sure basic checks pass. Run mvn clean install -DskipITs to make sure unit-test pass. Run mvn clean test-compile failsafe:integration-test  to make sure integration-test pass.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

Coverage decreased (-0.07%) to 51.228% when pulling 5a2011db84bb648011bc746a0cdc10cab8ffab7c on lenozhi:patch-1 into 9f95a972e10e0681bc3f2d00e9957aa212e897b5 on apache:master.

Codecov Report

Merging #2354 into master will decrease coverage by 0.22%.
The diff coverage is n/a.

@@             Coverage Diff              @@
##             master    #2354      +/-   ##
============================================
- Coverage     45.69%   45.47%   -0.23%
+ Complexity     4269     4250      -19
============================================
  Files           546      546
  Lines         35860    35860
  Branches       4763     4763
============================================
- Hits          16385    16306      -79
- Misses        17430    17493      +63
- Partials       2045     2061      +16

Impacted Files
Coverage Δ
Complexity Δ

...tmq/logappender/log4j2/RocketmqLog4j2Appender.java
35.00% <0.00%> (-10.00%)
3.00% <0.00%> (-1.00%)

...org/apache/rocketmq/common/stats/StatsItemSet.java
41.79% <0.00%> (-8.96%)
16.00% <0.00%> (-3.00%)

...ketmq/client/impl/consumer/PullMessageService.java
71.11% <0.00%> (-8.89%)
8.00% <0.00%> (-2.00%)

...org/apache/rocketmq/store/ha/WaitNotifyObject.java
75.00% <0.00%> (-7.70%)
10.00% <0.00%> (-1.00%)

...in/java/org/apache/rocketmq/test/util/MQAdmin.java
38.88% <0.00%> (-5.56%)
7.00% <0.00%> (-1.00%)

...ain/java/org/apache/rocketmq/test/util/MQWait.java
43.24% <0.00%> (-5.41%)
3.00% <0.00%> (ø%)

...he/rocketmq/client/impl/consumer/ProcessQueue.java
57.67% <0.00%> (-5.12%)
31.00% <0.00%> (-1.00%)

...ache/rocketmq/common/stats/MomentStatsItemSet.java
39.13% <0.00%> (-4.35%)
5.00% <0.00%> (-1.00%)

...ava/org/apache/rocketmq/filter/util/BitsArray.java
58.11% <0.00%> (-4.28%)
29.00% <0.00%> (-2.00%)

...ketmq/common/protocol/body/ConsumerConnection.java
95.83% <0.00%> (-4.17%)
13.00% <0.00%> (-1.00%)

... and 12 more

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 9f95a97...5a2011d. Read the comment docs.


Pass the user, navRoot and contentType objects to the restricted function of the block settings

Backport of #6271 and #6293 to Volto 17
Fixes #6264

Vale is busted for 17.x.x, so I created a PR here https://github.com/plone/volto/pull/6377. It works now. I'll merge that and update this branch.

All green. One final pass from @davisagli or @sneridagh?


Bug: junit.xml not generated

Description of the issue
Description:
I have a multi-module project using workspaces. In the workspace cargo.toml I have a [profile.dev.junit] block giving a path for junit.xml. When I run cargo nextest run, it is successfully running the tests for the sub-module containing some tests, but it is not writing a junit.xml cargo file anywhere. It is warning me that the manifest key is not used. This may be my user error, puting the config in the wrong place?
A representative output is:
$ cargo nextest run
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
warning: /home/nmrp3/devel/turingatemyhamster/ssnet/Cargo.toml: unused manifest key: profile.dev.junit
warning: function `resolve_to_download_url` is never used
   --> src/ssnet_lib/src/biogrid_cache.rs:289:10
    |
289 | async fn resolve_to_download_url(client: &reqwest::Client, url: &str, resource: &str) -> Result<Option<Str...
    |          ^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: `#[warn(dead_code)]` on by default

warning: `ssnet_lib` (lib) generated 1 warning
warning: `ssnet_lib` (lib test) generated 1 warning (1 duplicate)
warning: unused variable: `latest_remote_release`
  --> src/biogrid_cache/src/main.rs:33:21
   |
33 |         if let Some(latest_remote_release) = cache.remote().await?.version(&latest_remote_version) {
   |                     ^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_latest_remote_release`
   |
   = note: `#[warn(unused_variables)]` on by default

warning: `biogrid_cache` (bin "biogrid_cache" test) generated 1 warning
    Finished `test` profile [unoptimized + debuginfo] target(s) in 0.09s
------------
 Nextest run ID efb5be7a-b625-413a-bef9-8c65533f2970 with nextest profile: default
    Starting 10 tests across 2 binaries
        PASS [   0.004s] ssnet_lib biogrid_cache::tests::version_eq
        PASS [   0.004s] ssnet_lib biogrid_cache::tests::version_from_str_works
        PASS [   0.004s] ssnet_lib biogrid_cache::tests::version_from_str_not_numeric
        PASS [   0.005s] ssnet_lib biogrid_cache::tests::version_ord_major
        PASS [   0.005s] ssnet_lib biogrid_cache::tests::version_ord_point
        PASS [   0.005s] ssnet_lib biogrid_cache::tests::version_ord_minor
        PASS [   0.005s] ssnet_lib tests::it_works
        PASS [   0.007s] ssnet_lib biogrid_cache::tests::version_from_str_wrong_number_of_components_fails
        PASS [   0.008s] ssnet_lib biogrid_cache::tests::parse_version_handles_single_digit_versions
        PASS [   0.009s] ssnet_lib biogrid_cache::tests::parse_version_handles_multi_digit_versions
------------
     Summary [   0.009s] 10 tests run: 10 passed, 0 skipped

My workspace is:
[workspace]
members = [
    "src/ssnet_lib",
    "src/biogrid_cache",
    # Add other binaries here
]

resolver = "2"

[workspace.dependencies]
ssnet_lib = { path = "src/ssnet_lib" }
reqwest = { version = "0.12.7", features = ["json"] }
tokio = { version = "1", features = ["full"] }
indicatif = "0.17"
log = "0.4"
env_logger = "0.11.5"
clap = { version = "4", features = ["derive"] }
colored = "2"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0.128"
select = "0.6.0"
regex = "1.10.6"

[profile.dev.junit]
path = "junit.xml"
store-success-output = false
store-failure-output = true

The cargo for the library with tests is:
name = "ssnet_lib"
version = "0.1.0"
edition = "2021"

[dependencies]
reqwest = { workspace = true }
tokio = { workspace = true }
log = { workspace = true }
indicatif = { workspace = true }
serde = { workspace = true }
select = { workspace = true }
regex = { workspace = true }

Expected outcome
I expected a junit.xml file to be generated under the target directory.
Actual result
It was not generated.
Nextest version
cargo-nextest 0.9.79 (ec7861ab7 2024-10-02)
release: 0.9.79
commit-hash: ec7861ab7c27a63f036eca5fb3bbe67bbe1c0dd1
commit-date: 2024-10-02
host: x86_64-unknown-linux-gnu

Additional context
No response

Hi, thanks for filing the report! Nextest configuration goes under .config/nextest.toml — see https://nexte.st/docs/configuration/.

Thank you. I was looking at https://nexte.st/docs/machine-readable/junit/ and I had not spotted that the link to the nextest configuration was outside of the main cargo toml config. It's working as expected for me now. Perhaps in the "example configuration" on that junit page, use the code fence feature where it lets you name the file, and make it /.config/nextest.toml for clarity?

Agreed -- done!


Update TODO.md

@donno2048 I don't know if it is out of scope, but I think we should ban this lib as it can be used for cryptominer attacks https://github.com/jgarzik/pyminer/blob/master/pyminer.py

@donno2048 I don't know if it is out of scope, but I think we should ban this lib as it can be used for cryptominer attacks https://github.com/jgarzik/pyminer/blob/master/pyminer.py
It was the first result for cryptominer Python libs.

If we're doing this with tiers this can be an option, the problem is, anyone can create such a thing so it's highly problematic to moderate, so we should use something like the MIT license i.e. no guaranteed to work...

@donno2048 I don't know if it is out of scope, but I think we should ban this lib as it can be used for cryptominer attacks https://github.com/jgarzik/pyminer/blob/master/pyminer.py
It was the first result for cryptominer Python libs.

If we're doing this with tiers this can be an option, the problem is, anyone can create such a thing so it's highly problematic to moderate, so we should use something like the MIT license i.e. not guaranteed to work, and explain the problem

True. I was looking over the instructions of how to make your own without a lib, and there was no obvious fix.
However, if we do support blocking whole libs, blocking that might help a tiny bit.
I have only ever worked with  Creative Commons Zero v1.0 Universal (that is what I use in all my repos), so I don't know anything about MIT license.
I would prefer something that lets other people build off our code & is not extremely hard to work with, but I am ok with whatever works best for you and this project

@donno2048 I don't know if it is out of scope, but I think we should ban this lib as it can be used for cryptominer attacks https://github.com/jgarzik/pyminer/blob/master/pyminer.py
It was the first result for cryptominer Python libs.

If we're doing this with tiers this can be an option, the problem is, anyone can create such a thing so it's highly problematic to moderate, so we should use something like the MIT license i.e. not guaranteed to work, and explain the problem

True. I was looking over the instructions of how to make your own without a lib, and there was no obvious fix.
However, if we do support blocking whole libs, blocking that might help a tiny bit.
I have only ever worked with Creative Commons Zero v1.0 Universal (that is what I use in all my repos), so I don't know anything about MIT license.
I would prefer something that lets other people build off our code & is not extremely hard to work with, but I am ok with whatever works best for you and this project

The MIT license is quite permissive while still not providing any guarantee:
Copyright
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Is #7 ok?


Can't compile in VS2019

Using the VS XAML Templates. Added the login pages into the solution. The project is a xamarin.forms project. Get the following error when building:
LoginViewModel' does not contain a definition for 'NotifyPropertyChanged' and no accessible extension method 'NotifyPropertyChanged' accepting a first argument of type 'LoginViewModel' could be found (are you missing a using directive or an assembly reference?)
The same error shows on VS on my Windows laptop and Macbook.

Hi @redbinkieresearchlabs ,
Greetings from Syncfusion.
We have analyzed the reported problem and we would like to let you know that If the specified file [BaseViewModel.cs] already have in the application with the same name in the UIKit then, UIKit will ignore that file. In order to resolve that, need to add the required thing in your application.
BaseViewModel.cs from UIKit is not added in the application. In that we have NotifyPropertyChanged event. Could you please use OnPropertyChanged instead of NotifyPropertyChanged to resolve this issue?
Also please include LoginViewModel.cs in ViewModels/Forms folder due to the same class is having in ViewModels folder.
Please find the github source file in the below
https://github.com/syncfusion/essential-ui-kit-for-xamarin.forms/blob/master/EssentialUIKit/ViewModels/Forms/LoginViewModel.cs
https://github.com/syncfusion/essential-ui-kit-for-xamarin.forms/blob/master/EssentialUIKit/ViewModels/BaseViewModel.cs
For more information please refer the below UG link
https://help.syncfusion.com/xamarin/uikit/gettingstarted
Regards,
Yuvaraj

Hi @redbinkieresearchlabs ,
Greetings from Syncfusion.
We have analyzed the reported problem and we would like to let you know that If the specified file [BaseViewModel.cs] already have in the application with the same name in the UIKit then, UIKit will ignore that file. In order to resolve that, need to add the required thing in your application.
BaseViewModel.cs from UIKit is not added in the application. In that we have NotifyPropertyChanged event. Could you please use OnPropertyChanged instead of NotifyPropertyChanged to resolve this issue?
Also please include LoginViewModel.cs in ViewModels/Forms folder due to the same class is having in ViewModels folder.
Please find the github source file in the below
https://github.com/syncfusion/essential-ui-kit-for-xamarin.forms/blob/master/EssentialUIKit/ViewModels/Forms/LoginViewModel.cs
https://github.com/syncfusion/essential-ui-kit-for-xamarin.forms/blob/master/EssentialUIKit/ViewModels/BaseViewModel.cs
For more information please refer the below UG link
https://help.syncfusion.com/xamarin/uikit/gettingstarted
Regards,
Yuvaraj


Fixes #16 Whitelist files to run TypeScript standards task against

If a tsconfig.json file does not have a files, includes, or
excludes property set, then tsc will run against all files / folders
in the same directory as the tsconfig.json file. Because of this, in
generated projects, files in the dist folder were getting included in
our standards task. So, we whitelist the folders to run tsc against
using the includes property.

Please wait on this, something is incorrect.

@jthomerson sorry for the mix-up. You should be fine to review this  now.
If you have the same comment about needing *.js and *.ts on the globs in the tsconfig.json file, then the reply is:
I think leaving it as **/* is the right thing to do because tsc selects the correct file type based on your tsconfig.json options. From the docs:

If a segment of a glob pattern includes only * or .*, then only files with supported extensions are included (e.g. .ts, .tsx, and .d.ts by default with .js and .jsx if allowJs is set to true).


⚠ sandbox-api.piste.gouv.fr healthcheck has degraded performance

In 836ec7e, sandbox-api.piste.gouv.fr healthcheck (https://sandbox-api.piste.gouv.fr/cassation/judilibre/v1.0/healthcheck) experienced degraded performance:

HTTP code: 200
Response time: 3024 ms

Resolved: sandbox-api.piste.gouv.fr healthcheck performance has improved in 18f05c8.


Always use homogeneous attachment sizes

Homogeneous attachments are a requirement for Metal (and possibly Vulkan) correctness. If rendering to a RenderTarget that has a smaller height than the underlying Texture, the Metal backend must set the Viewport to be the bottom-left of the texture, to match OGL. However, it can only do this correctly if all attachments have the same size.

This causes an assertion to fire when DOF is turned on:
// compute numbers of "safe" levels (should be 4, but can be 3 at half res)
const uint8_t mipmapCount = std::min(maxMipLevels, ctz(width | height));
assert_invariant(mipmapCount == maxMipLevels || mipmapCount == maxMipLevels-1);


How to make ".pb" file

Hello!
Thank you for your nice implementation.
I would like to know how to make ".pb" file form output of darknet.
Did you use this ( https://github.com/thtrieu/darkflow ) ?
I am really glad if you help me!

Thanks !
You can definitely use the model definitions from that repo. I used this repo: https://github.com/gliese581gg/YOLO_tensorflow
What I did is I saved the graph structure using tf.train.write_graph(), then I merged the graph with the pre-trained weights using the freeze_graph utility in the TensorFlow repo. Then I stripped the unused nodes and voila, you have a .pb graph with weights that you can use in the tensorflow android demo.
Cheers !

Thank you!! I will try

Great work, thank you. @natanielruiz
Could you provide more details? Now I am using darknet to training a detector (only one class needs to be detected). But in this step "making .bp" ,I always get this kind of error
[[Node: save/RestoreV2_16/_1 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/gpu:0", send_device="/job:localhost/replica:0/task:0/cpu:0", send_device_incarnation=1, tensor_name="edge_75_save/RestoreV2_16", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"]()]]
I put tf.train.write_graph() in the last of build_networks() of YOLO_tiny_tf.py
and use   python freeze_graph.py --input_graph=test_tiny.pb --input_checkpoint=model_tiny.ckpt --output_graph=out.pb  to merge .bp and .ckpt
Thank you in advance.

Hi Xieyulai,
I have never used darknet to train a network. I belive you are also talking about a protobuff ".pb" file.
I don't understand where in your code you get that error, that would be helpful to know.
Also I have never had that error before.
Cheers

natanielruiz, thank you for your answer. I get the error for freeze_graph step. It is a litte bit complicated, because I need to train a model (.weights file) using darknet, and convert it into .ckpt file, and then convert it into .pb file. Is it possible using this ( https://github.com/thtrieu/darkflow ) LittleWat  mentioned to directly convert .weights file into .pb file, did you successfully try it?

I see that the weights file for yolo-v1 (pascal voc) is of size 753 mb(https://pjreddie.com/darknet/yolov1/ ). But the graph file that you provide is around 172 mb. How did you reduce the size to 172 mb.
Did you use the tiny-yolo version? If yes, how did you remove the Dropout Nodes(since they use ops that are not available in android - "realDiv" etc) ?


Weird issue when visualizing GenStage pipelines

Hi guys,
this project is really cool! I started playing with it to visualize GenStage pipelines and I bumped into a weird behaviour. You can find my code here: https://github.com/Arkham/genstaged
My GenStage setup is:

one producer which generates numbers
one producer-consumer which filters only even numbers
two consumers

So I booted the app with EPL and amazing, everything works perfectly! But then I commented out these lines (https://github.com/Arkham/genstaged/blob/master/lib/genstaged/consumer.ex#L16-L18) when I used to print the received events and suddenly I don't see anything anymore in my performance lab. Here's a gif

Definitely looks wierd 😟  Sorry for responding so late @Arkham, I'll try to investigate 🙂


OutOfMemoryError VRAM requirements

hi, i tried to run IP-Adapter/ip_adapter_sdxl_controlnet_demo.ipynb on a

3060/12Gb
T4/16Gb.

# load ip-adapter
ip_model = IPAdapterXL(pipe, image_encoder_path, ip_ckpt, device)

an in both i get CUDA out of memory, here is the T4
OutOfMemoryError: CUDA out of memory. Tried to allocate 44.00 MiB (GPU 0; 14.58 GiB total capacity; 13.86 GiB already allocated; 19.31 MiB free; 14.44 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

L4 with 24Gb , the same.
OutOfMemoryError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 21.99 GiB total capacity; 21.09 GiB already allocated; 15.69 MiB free; 21.79 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

@5shekel Did you manage to solve the problem? With 15GB, I have an OOM, too.


Renaming a Blazor component tag takes a long time to be recognized

This issue has been moved from a ticket on Developer Community.

Repro steps:

Enable the new experimental Razor editor
Create a new Blazor Server app
Add a <Counter /> component tag to Pages/Index.razor
Select the tag and hit F2 to rename it to Incrementer

Expected result:

The Counter component is renamed to Incrementer and is recognized almost immediately.

Actual result:

The Counter tag gets renamed but then a diagnostic squiggle appears saying the tag isn't recognized for about 5-10sec before getting resolved.
Correct coloring of the tag is also missing until after the diagnostic resolves and you do an edit.

Original Comments
Feedback Bot on 1/24/2021, 07:29 PM:
We have directed your feedback to the appropriate engineering team for further evaluation. The team will review the feedback and notify you about the next steps.

Original Solutions
(no solutions)

@ryanbrandenburg do you know if this is an issue still? Just following these steps on latest preview it was snappy for me. Trace is here

@ryzngard if this is no-repro for you and we haven't had further reports lets close this out, we can re-open if someone sees it again.


vimPlugins.codeium-vim: patch to use nix's codeium

Description of changes
By default, the codeium.vim plugin tries to download and install the codeium language server from the internet.
This patch injects the path to the nix codeium binary in the plugin code.
The same approach has already been adopted for the codeium.nvim plugin.
I tested this locally and it works fine !
Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
24.05 Release Notes (or backporting 23.05 and 23.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

this is the kind of things that break easily, could you add a test that fails without the patch ? might be tricky since codium might try to phone home. If they expose some API to check if the binary is available, you could use that.


Fix gpu devices.

Some fixes extracted from #3643.

Fix gpu_set normalized and unnormalized.
Fix DeviceSpan.

@RAMitchell @pseudotensor https://github.com/h2oai/h2o4gpu/pull/677 should now be fixed.  The bug is in GPUSet::Normalise, which now has proper.  Sorry for my mistake.


Align clippy flags for all builds

This reduces the chance of cache invalidation between the runs of rust-analyzer, cargo build/run and clippy.
On my machine (with no global Rust config atm), it made huge improvements, ie. no rebuilds from scratch anymore.
There might better ways, but I can't justify spending more time on this right now. Some possible further direction:

add a separate build profile for rust-analyzer & clippy

bors r+

bors r+

bors r+


No deck illegality warning

When you build a deck for Standard MWL 3.0 using cards that are rotated out you get no info on illegality of the deck.
In the list of your private decks you can see that a deck was "Built for Standard MWL 3.0", how much influence was spent, if agenda points comply with the rules and if you have enough cards in the deck.
In my case there is no info that the deck is illegal due to 1 copy of Anonymous Tip which was rotated with the last rotation. In edit mode you get some vague message saying "Deck contains rotated cards" but after clicking "click to update" link you get info concerning the number of cards that were replaced with their post-rotation counterparts and that's all. Having rotated out card in your deck is not indicated in any way.

This is a good example of the current issues with the legality checker. Let me think about this and I'll come back with a better solution.
Thanks for the screenshots, they help a lot.


CelebA download is broken

The download of all CelebA files except identity_CelebA.txt is broken. For example, the URL to download img_align_celeba.zip resolves to https://drive.google.com/uc?id=0B7EVK8r0v71pZjFTYXZWM3FlRnM&export=download. This link is publicly accessible, but you have to be logged into Google. Otherwise you'll see a 404 page.
I'll have a look if it is possible to get a general download link from the ID.
cc @pmeier @YosuaMichael

It seems the author has intentionally restricted the visibility for these files for some reason. If that is true, I think there is no way for us to provide an automatic download.

It seems something on the GDrive side has changed. The link above now gives a 403 (forbidden) instead a 404 page when you are logged. When you are not logged in you will be prompted to do so and afterwards see the same 403 page.
Exporting the link manually gives https://drive.google.com/file/d/0B7EVK8r0v71pZjFTYXZWM3FlRnM/view. While logged in you get transferred to the download page. If you are not logged in, you get the login prompt but land on page stating that access need to be requested.
For other datasets, e.g. Caltech101, both link variants are equivalent:

https://drive.google.com/uc?id=137RyRjvTBkBiIfeYBNZBtViDHQ6_Ewsp&export=download
https://drive.google.com/file/d/137RyRjvTBkBiIfeYBNZBtViDHQ6_Ewsp/view

We prefer the first, because it has less redirects and checks.
In any case it seems that Celeba is no longer automatically downloadable unless you are logged in. Thus, I propose we disable the download functionality preferably before the upcoming release. @NicolasHug Thoughts?

Thanks for reminding me and for your investigations @pmeier !
What do you mean by "being logged in"? Is it logged in from a browser?

What do you mean by "being logged in"? Is it logged in from a browser?

Yes. In particular, we need the session cookies. As possible way is to ask users to export the cookies to a file from the browser that we can read in. But this far from an "automated approach".
AFAIK, there is no way to login from the command line or through env vars or the like.

Thanks for the deets. I agree we should deactivate it.

Closed in #6052.

Should we keep it open? Ultimately we'll want to put back the download feature, if the Gdrive becomes available again?

That's reasonable. Should we also ping the owner (send an email or something) to let them know and ask them if they can open-up or rehost the dataset?

Ultimately we'll want to put back the download feature, if the Gdrive becomes available again?

I don't think it will come back. This is not a limitation by GDrive, but as explained in https://github.com/pytorch/vision/issues/5705#issuecomment-1082778379 a conscious decision by the author to limit access. I've contacted them twice and asked to revert it, but got no response.
If we want to keep it open, we should have some kind scheduled test or the like if the download is publicly accessible again.

Thanks for clarifying Philip. Let me close again then.

If we're not expecting to put it back, then we might want to deprecate the download parameter instead of keeping it around

Hi there,
It seems the situation is even worse now?
Trying to download it like so:
dataset = dset.CelebA(
    root='datasets/celeba',
    download=True,
)

... results in the following error:
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
[<ipython-input-15-75c5cdc7e903>](https://localhost:8080/#) in <cell line: 1>()
----> 1 dataset = dset.CelebA(
      2     root='datasets/celeba',
      3     download=True,
      4 )

2 frames
[/usr/local/lib/python3.10/dist-packages/torchvision/datasets/utils.py](https://localhost:8080/#) in download_file_from_google_drive(file_id, root, filename, md5)
    244
    245         if api_response == "Quota exceeded":
--> 246             raise RuntimeError(
    247                 f"The daily quota of the file {filename} is exceeded and it "
    248                 f"can't be downloaded. This is a limitation of Google Drive "

RuntimeError: The daily quota of the file img_align_celeba.zip is exceeded and it can't be downloaded. This is a limitation of Google Drive and can only be overcome by trying again later.

It would be really nice if that could be available out of the box somehow. Perhaps indeed disable the download feature, or point to some other way of obtaining the dataset (Huggingface?)?
Thanks for reading in any case!