DOCS Contributing code cleanup

Fixed a few typos and formatting issues, and made git workflow diagram easier to read by hyperlinking it to itself. Also brought down a few lines from 3 branch that maybe should have targeted 3.1 and been merged up - is it okay to do that or should I take those lines out?

Nice, thanks! Some shocking spelling mistakes in there ... we need better spell checking in our markdown editors obviously ;) I want to avoid version specific docs as much as possible, it adds to maintenance burden and is likely going stale. Could you rephrase your hint to a normal sentence saying something like "Please adjust to the SilverStripe version you're targeting. The current version can be found on http://www.silverstripe.org/software/download/"

Yeah that's a good idea. The 3 branch has that exact sentence already except it says 3.2, so if I change it here will it get merged up?

Yeah that's the idea - not immediately, but periodically

You know looking over this content a bit more I think it is too heavily focused on git commands and not enough on code quality. Think this should maybe be split in to a few pages and start off with a table of contents / check-list something like this:
So you want to contribute to SilverStripe?
Great! Contributing to the Framework, CMS or SilverStripe modules is a great way to learn more about and improve the tools you use everyday, for everybody's benefit.
We use github to coordinate code contributions. If you're new to git don't worry, we'll walk you through the commands in the links below.
To make a contribution:

If you're working on a major change, seek feedback from the community and core committers first
Make sure your proposal is solid before you spend time working on it (You can skip this if you want to fix a small bug or typo)
Review SilverStripe's coding conventions
Writing good clean code off the bat will mean your contribution gets accepted quickly
Fork the project you want to contribute to and start working in a new branch
Branching allows you to experiment freely with code changes while keeping a clean base
Create a pull request
Members of the core committers team will review your patch and give you feedback about any tweaks that are needed before merging

For more information on git check out these (links to tutorials and guis like Tower)

Yeah, that sounds like a good improvement. Just be aware there's already a separate "landing page" at http://www.silverstripe.org/community/contributing-to-silverstripe/, so we should ensure we don't produce too much overlap. Do you want to base a pull request on mine so they can be merged in sequence? Probably the easiest way to collaborate on it. I won't force push in that case.

Good point, hadn't seen that page. Happy to have a look at restructuring this section a bit but probably will be next week.

Do you want to base a pull request on mine so they can be merged in sequence?
Sorry lost me there - do you have an open PR for the same file somewhere?

do you have an open PR for the same file somewhere?

If you start to restructure the doc in this pull request without waiting for said pull request to be merged, we'll get a lot of conflicts once this request is merged. So either you wait until somebody merges this request (@tractorcow?), or you base your own pull request on my branch which will avoid later merge conflicts.

Think I get it. I will do the waiting option :)
Going forward with SemVer I'm assuming there won't be separate versions of docs for minor releases - just one version of docs for each major release right? And same with branches, I'm assuming there will be no 3.2 or 3.3 branch of SilverStripe, just tags on the 3 branch. Is that right? Probably going to be a nightmare to maintain otherwise.

@chillu I'm also a bit confused (as per normal hah)... which is your branch? Can you link it?

Heh the 'my branch' part is what stumped me, but luckily 'waiting' provided an easy out :blush:

Hey @dhensby thanks for the comments - most of the stuff you've commented here I just pulled down from the 3 branch so changing it might cause some confusing merge conflicts later I guess. Maybe I shouldn't bother with this at all - what is the policy for maintaining documentation for older versions of SilverStripe (which 3.1 is about to become?)? I noticed that 3.0 and earlier docs have a message stating that the docs may be out of date ant not maintained, so maybe it is a waste of effort for me to submit any changes to 3.1 at this point and I should just update this stuff on the 3 branch instead?

I think this should go in, it won't cause a merge problem.
You should apply patches to the LOWEST version they apply to. so 3.1 is the best place. they should then be merged up into 3.2 and 3.3 and 4

Cool. @dhensby maybe you can confirm for me - if we're adopting SemVer properly going forward won't that make it redundant (and just a pain) to have separate docs for 3.2 and 3.3? I was under the impression that one of the advantages of adhering to SemVer is that you only need one branch for each major version because everything added to it will be backwards compatible. So if that assumption is correct there should be just a 3 branch of SilverStripe with tags with a linear progression e.g. 3.2.0, 3.2.1, 3.2.2, 3.3.0, 3.3.1 etc. then a 4 branch following a similar pattern. I think with each release the decision to make it a patch vs minor release is only one of semantics.
Before adopting SemVer all SilverStripe 'minor' releases would definitely have been considered major releases from a SemVer point of view so they needed to be maintained as separate branches. But that shouldn't be the case anymore, so shouldn't we be changing our approach to releases and really embracing SemVer? I think it's going to really slow things down and hamper progress if we try to maintain individual branches for minor releases.

@jonom one branch is for each minor version actually (3.1. 3.2, etc). Otherwise we couldn't release bugfixes that affected only older versions (which we still have to support). It would be nice to just force users to update to the next minor version each release, but that's a future thing not a now thing, and it's a step we'd only take if the community supported it.
Maybe once we increase the velocity of our releases it'll be easier to do and we can start doing some rotation of our older branches, as well as having fewer new branches. :D but that's not a call we want to make just yet.

@tractorcow I feel pretty strongly that this is the wrong approach. It seems like we're trying to continue doing things 'the old way' which is counter-productive and likely to create a ton of extra work and a dis-incentive for contributions.
The adoption of SemVer should allow us to regularly (and casually) update the framework with new features that are not breaking changes. It should be safe for all users to update to the newest minor version so there should be no reason for anyone to need to stay on e.g. 3.2 vs 3.3. It shouldn't be unreasonable to think that we could get to SilverStripe version 3.15 before 4.0 ships, but it would be completely unreasonable to maintain 16 separate branches of the framework and docs to go with it.
If we maintain separate branches for 3.2, 3.3, 3.4 I think we can kiss the idea of 'regular updates' goodbye, because there would be an incentive to keep the number of minor releases as low as possible, thus creating less merge conflicts and less versions of the docs.
We don't maintain separate branches for 3.1.1 and 3.1.2, even though the upgrade between these would have been the equivalent of at least a minor and maybe a major release under SemVer (check out the changelog), so it seems crazy to me to plan to maintain separate branches for minor releases going forward. I'm really concerned that it's going to slow things down and inhibit progress, because we'll get bogged down in the commitment to maintain legacy releases that no one should need to use.

Maybe once we increase the velocity of our releases it'll be easier to do and we can start doing some rotation of our older branches, as well as having fewer new branches. :D but that's not a call we want to make just yet.

I think this is a backwards approach, because making the call to make minor and patch releases tags only is what would enable us to increase the velocity of releases. I think it would be quite empowering for developers. Note that the SemVer spec indicates that if a breaking change is accidentally introduced, it should be reverted in a following release, so this gives us a way to repair things if we stray from SemVer from time to time, surely making separate branches for minor releases redundant.
Really think there needs to be a paradigm shift for all developers in our expectations about what a minor release constitutes - not just about what is safe to put in to a minor release, but how legacy versions and docs are maintained and where developers can expect to find the latest bug fixes. Going forward developers should think of minor releases similar to the way they used to think of patch releases - in fact minor releases now should be much safer than patch releases used to be. A minor release shouldn't need to come with a bunch of fanfare or a new set of docs - we should be able to simply go, "okay there's some updated code on the 3 branch, time to do a release. If only bug fixes then update patch no. by 1, if new non-BC features update minor release no. by 1 and reset patch no. to 0".
Keen to hear your thoughts on this @tractorcow and if you think my arguments have any merit maybe I should bring this up on the dev list? Apologies if this has been discussed in depth offline and I'm missing something obvious, but I feel if this is the point where we adopt SemVer the release process should embrace that system fully and permit a fluid release cycle rather then inhibit it. Or if 3.x is the wrong time it would be good to get a discussion going now so we can reach a consensus about the release process ready for 4.0.
p.s. I realise we'd need to still maintain a 3.0 and 3.1 branch going forward as these are not SemVer compliant but I think 3.2 and onwards should just be on the 3 branch and releases simply tagged.

I completely agree with @jonom in terms of what the approach needs to be in terms of frequency of tags.
We need to make tagging releases trivial and regular so patches can be released quickly and new features added regularly.
I'm not sure we'll be seeing 3.15 ( :P ) but SemVer should allow us to maintain 1 set of docs for each major version.
Once we are able to release quickly and with little effort, this won't have as much internal resistance and will make sense to everyone.

:rose: Thanks for backing me up @dhensby

Once we are able to release quickly and with little effort, this won't have as much internal resistance and will make sense to everyone.

Are there any particular processes that need to change to facilitate rapid releases and one branch only per major version, or is this stuff already underway and just needs some time? Think we should start working towards this goal now but I'm not informed enough to know if and what needs to be changed. At a minimum I think at the time 3.2 stable is released we should inform developers how the release process and docs structure will change in the future, so developers have clear expectations about where SemVer is taking us.

Well, the release process includes extended testing, writing release announcements and other manual work. It needs to be automated far beyond its current state.
@sminee is doing some work to that extent, but we need to automate the entire thing IMO
Then, in theory, we can release patches every week if we wanted to

@jonom please can you adjust the code snippets as per my suggestions, then I'll pull this in...

@dhensby that's done now. Also added a summary, note about fixup vs squash and standardised the white space a bit more.

@dhensby @tractorcow should I open a discussion on the dev list summarising the content of https://github.com/silverstripe/silverstripe-framework/pull/4285#issuecomment-114179146?

@jonom @dhensby @tractorcow @camfindlay @chillu @willmorgan
I raised related issues in https://groups.google.com/forum/#!topic/silverstripe-dev/jG3Un5hvYVM
There seem to be some pretty fundamental issues involved here around SS development, contribution, release, and documentation that need sorting.
My being new to SS allows me to look at things with a fresh pair of eyes, and I strongly support the simplifying and clarifying of these processes. I think it would be very helpful to discuss these in more detail. I offer to play the role of "secretary" and document the discussion, note conclusions, and follow up on actions to be taken.
I think it is useful to see what others are doing:
http://cakephp.org/
http://www.codeigniter.com/
https://symfony.com/
http://laravel.com/
http://www.yiiframework.com/
http://www.zend.com/

@SpiritLevel awesome to see such commitment from someone who is only new to SilverStripe! Look forward to seeing what you collect. Maybe collect input on the dev list and release conclusions as an RFC? A few goals I'd like to see included:

Reduce overlap (and maintenance commitment) - only document topics once wherever possible. If a topic is covered in detail in a Lesson, only provide a brief introduction for it in the Developer Docs and say "Go to lesson xx to learn about yy" (I haven't watched the lessons yet but they look awesome and the best resource for beginners, so should promote that content first whenever possible). If a function or class is documented well at the API level, link to specific pieces of API documentation instead of saying the same thing a different way in the Developer Docs.
Only one version of developer docs per major version Going forward there should not be separate docs for each minor version. This is consistent with (or exceeding actually) the level of documentation versioning applied until now to non-SemVer releases.
No broken docs links 301 redirects for any docs when the URL changes. I have very often gotten a 404 while exploring the docs.
Assume knowledge / Limit scope creep In general assume a working knowledge of technologies like PHP, git, SQL, OOP, Packagist etc. but include a 'Required Knowledge' section or similar which assumes no knowledge at all and links to quality learning resources for these topics, while also outlining any applicable SilverStripe-specific concepts or exceptions.

The docs have come a long way in the last couple of years but there is always room for improvement.

Come on Travis... You can do it...

First, even before an RFC or addressing @jonom 's very specific suggestions, I think we to need to get a sufficiently large and committed working group of people to take this on. We need a critical mass of people with SS Ltd leading and backing it.
Second, I think we should, as much as is feasible, collect existing comments into one location to consolidate it all. For instance, @camfindlay has already done heaps of data collection here:
https://groups.google.com/forum/#!topic/silverstripe-dev/3X8kZVSqPiY
There was also, until recently, a very quiet google group on SS docs but it looks as though it has disappeared (several voted to kill the poor thing!). Perhaps, @camfindlay, this should be resurrected ? Or, (which only reinforces my point below) have I missed it somewhere ? Are there other sources where valuable opinions/suggestions are provided but are lost in obscurity ?
More generally, there seems to be a huge fragmentation of valuable information coming in via Github comments, Google group mailing lists, UserVoice, forums, etc....a handful of people read the comments at the time they are posted and then they fade into obscurity, relying on Google's indexes for any sort of permanence. The dual SS websites seem to further facilitate this fragmentation!
Third, I think some kind of "Communications Strategy/Policy" needs to be worked out/brainstormed as a roadmap for the group, for SS, and the wider community to follow. An approximate timeline would be good too. The approaches taken by other frameworks provide lots to think about and build upon. Again, this is where SS Ltd. backing and involvement would be crucial. Without SS Ltd. buy-in, I fear the docs will continue to be tweaked in a fragmented, uncoordinated way.
So, what do you think ?

@dhensby passed this time - should be good to go.
@SpiritLevel sounds like you have big plans! Think you'd be best off moving this discussion to a new topic on the dev list... maybe called 'Attacking Fragmentation' or something :)

@spiritlevel I agree. The docs need an overhaul in my opinion and I think I was fairly vocal about that a while back when the team was discussing new IA for the docs.
I'd love to contribute to making the docs better or having a more focused community site, but I fear I don't have the time.
SS is a pretty huge system with a lot catered for, so docs aren't so simple to approach, there are many APIs and sometimes they are inconsistent or complex.
What timezone are you in? Perhaps we can have a chat.
@jonom I'm on my phone and haven't reviewed this since the last set of changes. I'll try to look soon

@dhensby I am in Wellington :)
I am Skyping with a client at 9AM Wednesday, my time, but apart from that any time that suits you.
You're in London, right ?
We could also chuck ideas around on a google doc.

@chillu I saw elsewhere you said that 3.1 is bugfix only now - does that apply to docs and if so should I direct this to 3.2 instead? Also would love to hear your thoughts about minor release branches and docs under SemVer and whether this needs some discussion on the dev list.

@jonom I think docs improvements in 3.1 is fine, but I'd leave major restructuring for upcoming releases since it'll be too hard to consolidate otherwise. I agree with Damian that we should expose one doc version per minor release. We can introduce new features in minor releases, and don't want to a) confuse devs about feature availability in older minor releases or b) litter the docs with "since x.y" annotations which need to be cleaned up later. Having more releases selectable on doc.ss.org will require a UI change there, but that should be minimal. I always take readthedocs as an good example - they by default generate docs for every tag, and make selection easy (bottom left). Example: https://praw.readthedocs.org/

No broken docs links 301 redirects for any docs when the URL changes. I have very often gotten a 404 while exploring the docs.

@camfindlay I suspect the majority of this was caused by the docs restructuring late last year. Have you made any progress on fixing broken links from that? Maybe review Google Webmaster Tools or get webserver logs?

@chillu @jonom  we did some work on rewrites a while back and it's a time and resource thing for me (that I have minimal). I have posted a while back the top 50 urls from webmaster tools (https://github.com/silverstripe/doc.silverstripe.org/issues/50).
Would be great to get some community help to whip up the rewrites and pull request. I'm happy to review an merge.

@chillu fair enough - yeah with an interface change I can see how it would be good to have access to all versions of the docs. Any thoughts on my opinion that maintaining separate branches for each minor release goes against the grain of SemVer, and may hamper progress and a rapid release schedule by creating extra work, as security patches and bug fixes would have to be applied to each branch? Is it not acceptable to expect devs to upgrade to a release that contains new non-breaking features in order to get bug fixes?
@camfindlay I could take a look at that some time, hopefully wouldn't take long to fix the majority of them. Is that list up to date? @SpiritLevel don't mean to dob you in but if that's something you'd enjoy feel free :) otherwise I'll make a note and try to get to it in the next few weeks.

OK....I'll start on them, mixed in with client work :)
I'll post comments/questions to silverstripe/doc.silverstripe.org#50

Thanks man, feel free to bail out or just do a few, don't mean to pressure you!

Happy to help...many hands make light work, and all....

Most devs should be locking to ~3.1 in their composer files. Only those that are particularly risk averse would lock onto patch versions (~3.1.13).
Although minor releases should be completely BC, there is higher risk assosiated with those upgrades.
Ultimately this is the point of LTS versions. We say, "if you're risk averse we will be applying security patches to 3.1 for 2 years and other versions will not have security patches added (except current latest release)

@dhensby totally agree that most devs would currently be locked on to ~3.1 and we would need to keep patching 3.0 and 3.1 because they weren't SemVer compliant.
However going forward, if your risk tolerance previously was for ~3.1 before we adopted SemVer, then your equivalent risk tolerance under SemVer should be ~3. Actually ~3 from 3.2 onwards should be less risky than ~3.1 ever was. So if we used to recommend installing SilverStripe with ~3.1 in your composer file then under SemVer we should recommend ~3, shouldn't we? To not do so would be moving backwards in my book.
This is what my whole argument is about, the risk factor has completely changed with the adoption of SemVer and so our release process and notions about what is safe to target in a composer file should be updated to reflect that change.

Ultimately this is the point of LTS versions. We say, "if you're risk averse we will be applying security patches to 3.1 for 2 years and other versions will not have security patches added (except current latest release)

Are you saying that 3.2 won't see security patches once 3.3 is released? That's exactly what I'm asking for, so maybe I'm just preaching to the converted :) I don't think the intentions for a future release process are documented anywhere which is why I'm curious about it.


Master

Updated config files
Created home.md with header
Created sample posts

Next
Homepage layout

FYI you're pushing to the wrong remote repo. Check that your Git origin is set properly.

Thanks, still learning Git and think I've sorted it now.
On 29 April 2017 at 14:18, Michael Rose<EMAIL_ADDRESS>wrote:

FYI you're pushing to the wrong remote repo. Check that your Git origin
is set properly.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/mmistakes/minimal-mistakes/pull/980#issuecomment-298168579,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AXdBvuS1gmaWie7L2oxOJVv7rBx9MirPks5r0zi-gaJpZM4NMNrh
.


Popover is not working in Google Chrome

Hello all,
My popover doesn't work in Google Chrome but it does in Mozilla Firefox.
Code Rendered in Firefox:
<a href="#" data-content="

Mayur Ahir

" class="recipients" data-original-title="Shared with">1 other
Code Rendered in Chrome:
<a class="recipients" title="Shared with" data-content="

Mayur Ahir

" href="#">1 other

I created a JSFiddle of the mentioned markup using bootstrap version 1.3.0:
http://jsfiddle.net/robvangroenewoud/uPpCU/
This seems to work in both Firefox and Chrome, in fact even IE8 manages to pull it off.
Can you confirm that the JSFiddle does reproduce your problem?

Works perfectly in JSFiddle but issue still persist in my code.

Sounds like you're having issues unrelated to bootstrap? Unless you are able to produce a breaking jsfiddle i'll have to close. thanks!

I'm experiencing the same issue with google chrome, you need to click in order for the popover to come up. Even the jsfiddle posted above works this way.
Environment:
Browser: Chrome latest version at time of post
OS: OSx Lion

I have Chrome 15.0.874.106 and Lion and it works fine for me...

In addition to what @fat already reported, confirmed to be working without 'clicking':
Win (XP/7) - Chrome 15.0.874.106
Win (XP/7) - IE 8
Win (XP/7) - Firefox 7.0.1 + 8.0

tl;dr version: This is no longer an issue.
long version: On further inspection the issue only seems to be occurring in a more specific scenario.
I am having issues where chrome in fullscreen in Lion will randomly stop showing the address bar when the cursor is moved to the top of the screen. When this occurs, chrome also stops showing the popover. When I am not experiencing this issue the popover works fine.

hm... weird - maybe this will be fixed in a os update? or chrome update?


Continue after application restart

Sorry if this is a dumb question, but I need to continue watching the file tail for changes even when my app using tail-file-node would be restarted.
Currently we use some BASH scripts and logtail to get the changes from some logs. logtail creates offset and delta files which it can read when we run logtail next time.
We are about to port are app into Node JS (preferably TypeScript in the long run), therefore we are examining if tail-file-node will suit our needs.
As far as I understand it right, we can send the start position using startPos option, but how can we retrieve the current start position in order to save it on our end and pass it when the app restarts / starts again?

To be more precise, what we want to do is the following:

We have log file on a MS Windows client computer which we copy once a minute to a Linux server.
tail-file-node would watch for changes the file on the Linux server and then our app would process the log.
However, this is part of monitoring of the client computer and we need to make sure that the monitoring could be safely turned on and off anytime, and when it starts, tail-file-node would continue watching the file where it stopped.
Also the Linux server could be restarted.

Thanks in advance! :wink:

This is actually a good feature request to report the internal offsets/state during runtime.  I actually figured this was coming as an addition, so you're certainly right to bring it up.
The brute force way to see the last "position" is to just check the size of the file.  Since tailing should always be caught up, that size in bytes would be the place where you'd pick up reading.  Can you answer some questions about your implementation?

Which side initiates the copy?  Does the linux server pull the file from Windows, or the other way around? This would speak to your ability to control the flow of the tail and gather the file size before copying the latest file over to linux.
To clarify, is tail-file-node integrated with your app ?  The way you describe it somewhat sounds like they're 2 different things, although typical implementations would have the app and tail-file be 1 thing.
How often is tail-file restarting?  Again, this can be clarified by the second question.

In short, tail-file can only be given a startPos during instantiation.  If this is how your implementation works, then ok, but it almost sounds like you have a long-running app (and tail?).  I can envision this flow as a linux server running an app that watches for changes to a file, and when detected, fast-forward to the last-known position and keep reading.  However, that approach won't currently work since the tail is already running, but that could be fixed.
Proposed enhancements:

Add a state event that will provide the state of tail file's pointers like last known kStartPos.  The preference would be to report this information and let it be consumed and written to wherever (file, database, in-memory object) rather than force file creation on the users. Writing this as a JSON object to a file, for example, would be ~5 lines of code.

Potentially (depending on the answer of whether the tail is being killed/restarted) add a runtime "setter" for startPos such that it can be reset during execution.  Since copying a file will change the inode, this means the entire file would be re-read from the beginning.  So, if the desire is only to pick up the delta, then startPos could be changed on-the-fly after a renamed event is emitted

Which side initiates the copy?  Does the linux server pull the file from Windows, or the other way around? This would speak to your ability to control the flow of the tail and gather the file size before copying the latest file over to linux.

Server side. Simply put, the client (Windows) does not even know we use those logs. :wink:

To clarify, is tail-file-node integrated with your app ?  The way you describe it somewhat sounds like they're 2 different things, although typical implementations would have the app and tail-file be 1 thing.

Yes, tail-file-node will be integrated into our app once we solve #19 and #21.
The reason why I describe it as two different things is that from my point of view we use tail-file-node to do what we want it do, but yes, technically we integrate it into our app and from the end-user point of view it is the same thing. :wink:

How often is tail-file restarting?  Again, this can be clarified by the second question.

This is hard to answer.
We do CNC machines monitoring. The end-user can start or stop the monitoring on any machine individually anytime they want, but that said it should not happen quite often (they want the data gathered ideally for indefinite amount of time), but it could happen e.g. when the machine is out of service or being repaired. You might say that we might keep monitor the file on the server (which obviously would/should not change), but I think that it is not the right way to do.
Also the ethernet cables might get disconnected (by accident or intentionally).
And there is also a potentional server reboot, which is the main reason for this issue. I don’t think it is a good idea to keep the copied logs laying around (I think about them as temporarily needed files). I could read from the database (where we put the processed log data) and based on this info set the startPos.

In short, tail-file can only be given a startPos during instantiation. If this is how your implementation works, then ok, but it almost sounds like you have a long-running app (and tail?). I can envision this flow as a linux server running an app that watches for changes to a file, and when detected, fast-forward to the last-known position and keep reading. However, that approach won't currently work since the tail is already running, but that could be fixed.

I see. I am thinking about an option to kill/destroy/stop tail-file running based on some (let’s say) callback function which we could create to check if a particular machine is currently to be monitored (and also if it is online); it would be run in a preconfigured interval and when the function decided that tail-file should be stopped or restarted, then it would do so.

Proposed enhancements:

Add a state event that will provide the state of tail file's pointers like last known kStartPos.  The preference would be to report this information and let it be consumed and written to wherever (file, database, in-memory object) rather than force file creation on the users. Writing this as a JSON object to a file, for example, would be ~5 lines of code.

I am for this. I would prefer to use the in-memory (returned) object that I could process. And I think that it might be a good idea to provide it as a second argument to the data event.

Potentially (depending on the answer of whether the tail is being killed/restarted) add a runtime "setter" for startPos such that it can be reset during execution.  Since copying a file will change the inode, this means the entire file would be re-read from the beginning.  So, if the desire is only to pick up the delta, then startPos could be changed on-the-fly after a renamed event is emitted

This sounds good to me.

I am thinking about an option to kill/destroy/stop tail-file running based on some (let’s say) callback function which we could create to check if a particular machine is currently to be monitored (and also if it is online); it would be run in a preconfigured interval and when the function decided that tail-file should be stopped or restarted, then it would do so.

I see.  I'd say that you'd only have to stop tailing if there was no longer a log file to tail.  Even though we could add a tail.setPos, that could introduce race conditions with the current read timers and copying the new file and trying to reset the position.  As long as we're on the same page about the proposed features, I suppose we don't need to fully understand how you'll use it.  That being said:

We can't add state information as a second event parameter because the the data event belongs to the stream implementation and would only emit the data itself.  Therefore, it will have to be a separate event, but that wouldn't stop you from changing in-memory objects and/or flushing it to a file with a few lines of code (open a FH, which is continually truncated and re-written with JSON.stringify(state))

Adding a setter for the position is probably not a good idea, but your flow could look something like this:

const fileName = 'SOMELOG.txt'
let tail = new TailFile(fileName)

if (fileNeedsToBe copied) {
  await tail.quit()
  // copy new file from windows to local linux server now
  tail = new TailFile(fileName, {startPos: lastKnownReadPos})
  tail.start() // etc
}

We can't add state information as a second event parameter because the the data event belongs to the stream implementation and would only emit the data itself.  Therefore, it will have to be a separate event, but that wouldn't stop you from changing in-memory objects and/or flushing it to a file with a few lines of code (open a FH, which is continually truncated and re-written with JSON.stringify(state))

All of your previous comments looks good to me, but this section.
While understand the data event belongs to the stream implementation and would only emit the data itself, there might a race condition between the data and the state events (i.e. which comes first). I mean I’d like to get the last processed position, that is _after_I process the data, I’d save the current startPos (state), not before or during it.

That's a fair point, but I'm not sure that's possible.  As you know, the stream can be consumed separately from when tail-file reads the files.  There probably isn't a clean way to tie the file position to any particular line in the stream since this is just following node stream implementation rules.
That problem might not need to be solved, though.  If there are new log files coming in, it would seem that current tail stream can be exhausted before starting a new tail, and that's the recommendation.  In other words, await once(tail, 'flush') prior to closing the tail.  At that point, we could have a feature that reports the last read position because at that point, the consumption and last position would be in sync.  We could still add the state event, and perhaps that would fire after flush is emitted, and also after .quit(), keeping everything in sync.  Thoughts?

You’re right. However, what about the case when the logging gets interrupted during the day (when the log might be appended into the same file)? When I restart the app, tail-file needs to know where to start (i.e. continue) in order to make sure that no line (1) is processed twice; (2) skipped.

Ah, it's hard to speak intelligently about your specific use case, namely 'when the log might be appended into the same file', but when something dies or is killed, there is always the chance for data loss.  That can't be avoided here.  However, if it's firing a state event after each flush, then a "best approach" could be to capture that into a file that could be loaded upon restart.  Worst case scenario is that the position would be slightly behind if it was killed
Here's a remedial example:
const FH = await fs.promises.open('statefile.txt')

tail.on('state', (state) => {
  FH.writeFile(JSON.stringify(state)).catch((err) => {
    // log error or something
  })
})

process.on('SIGTERM', () => {
  FH.close().catch(() => {})
})

If you think adding this state event after a flush is helpful, then we're happy to make this a feature request.

@darinspivey, thanks for all your help! :+1:

If you think adding this state event after a flush is helpful, then we're happy to make this a feature request.

I do think it would be very useful. Thanks! :wink:

As it turns out, the flush event did not previously have a payload.  Rather than creating a new event that needs to be fired after flush, we will add the startPos as a property of the flush event payload.  PR incoming.


Force Docker version to 18.09.3

This is to try to work around https://github.com/kubernetes/kubernetes/issues/76666.

cc @yujuhong


Assay design metric for counts of number of sample lookups

Rationale
https://www.labkey.org/home/Developer/issues/issues-details.view?issueId=46345
Counts both lookups to the "samples" schema and "exp.Materials" table.

batchDomain -> number of assay design sample lookup fields in the Batch domain
runDomain -> number of assay design sample lookup fields in the Run domain
resultDomain -> number of assay design sample lookup fields in the Results domain
resultDomainWithMultiple -> number of assay design Results domains with more than one sample lookup field


Roll Flutter Engine from dd37cefd4a94 to d72135133b9a (8 revisions)

https://github.com/flutter/engine/compare/dd37cefd4a94...d72135133b9a
2024-06-20<EMAIL_ADDRESS>[Web] Fix extra new line when inputAction is not newline for a multil… (flutter/engine#53453)
2024-06-20<EMAIL_ADDRESS>Roll Dart SDK from 366eb1b4b308 to be6b533e07e7 (1 revision) (flutter/engine#53492)
2024-06-20<EMAIL_ADDRESS>Fix focus management for text fields (flutter/engine#51009)
2024-06-20<EMAIL_ADDRESS>Roll Dart SDK from cbd933e707e7 to 366eb1b4b308 (1 revision) (flutter/engine#53487)
2024-06-20<EMAIL_ADDRESS>Roll Skia from 17626ca22729 to 4471ee07e223 (1 revision) (flutter/engine#53486)
2024-06-20<EMAIL_ADDRESS>Roll Dart SDK from e403519a4436 to cbd933e707e7 (1 revision) (flutter/engine#53485)
2024-06-20<EMAIL_ADDRESS>Roll Skia from 4acebac47ea5 to 17626ca22729 (1 revision) (flutter/engine#53484)
2024-06-20<EMAIL_ADDRESS>Roll Skia from 199e1a49b091 to 4acebac47ea5 (1 revision) (flutter/engine#53482)
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-engine-flutter-autoroll
Please CC jsimmons@google.com,rmistry<EMAIL_ADDRESS>on the revert to ensure that a human
is aware of the problem.
To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose
To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Commit queue failed; closing this roll.


feat(network-flow-devices): adding network flow pack

Summary
adding new pack for NPM to analyze and alert on network flow telemetry
1 dashboard
2 NRQL baseline alerts

@jpvajda - wanted to consolidate this here for ease of conversation:
your current recommendation is to move from these keywords:
  - npm
  - network
  - networking
  - flow
  - netflow
  - sflow
  - ipfix
  - jflow
  - ktranslate
  - kentik

to these:
  - npm
  - networking
  - netflow
  - sflow
  - ipfix
  - jflow

essentially dropping network, flow, kentik, and ktranslate
my concern here is that all 4 of these are well-known terms for the NPM solution and natural search words for our customers that come in from an external site/are brand new to our concepts. Is there a strong requirement to drop these? What is the overall impact of leaving them in to the I/O project?

@thezackm that's cool! I trust you. You can reject my suggestions on the keywords you feel are appropriate.

@jpvajda / @polfliet  - should be good to go; thanks for the reviews!


[Setting] New tab button should open another of the currently selected tab

Your Windows build number:  10.0.18890.1000

What you're doing and what's happening: When you press the add tab button it always opens cmd.

What's wrong / what should be happening instead: It should open another of the currently viewed tab.

It actually opens a new tab of whatever the defaultProfile is, which is the cmd profile by default currently.
We can add a setting that new tab opens a new instance of the active tab instead.

I'm by the way wondering what happened to the Windows "Sets" feature that disappeared from the Insider builds some time ago...

I discussed this briefly with @DHowett-MSFT today. On the surface, this seems a bit like #1536, which was implemented in #1685. However, this actually has to do with specifically the behavior of the new tab button, not just the keybinding. I'm leaving this open to track changing the behavior of the new tab button.

As a end user, I understand "dumplicate current tab" means the new tab will be in the same directory as the source, but #1685 does not.
Seems like #1685 is just bind a shortcut to the plus + button's functionality

Moving relevant discussion from #11337

Description of the new feature/enhancement
Currently the new tab button opens a terminal the default profile. So for example, with my default set to WSL: Debian, the new tab button will always open with that profile.
Instead I think it'd be nice to have the new tab button open a terminal using the same profile as the currently active tab. This way if I have a non-default profile open, such as PowerShell, the + button would open a new PowerShell tab instead.
Proposed technical implementation details
The default profile could have an additional setting called Currently Active. When a new tab is opened you'd need a way to retrieve the profile of the currently active tab, then open the new tab using that profile.

You know, I might be wrong about that. I had this in my list of "issues to post in the future"

Add a setting to default the new tab button to "duplicate tab" instead of "open default profile"
Maybe that applies to the splitPane actions as well?
Is this just asking for "toolbar customization" though? Should this be an extension? How would we let an extension do that?
Would they get at the tab row, hide the new tab button, then add their own split button, with the same new tab menu, but with duplicateTab bound instead?

Crazy shower thought:
"newTabButton": {
  "action": { /* duplicate tab*/ },
  "icon": "whatever",
  "showDropdown": false
}

Also related: #6685

I tinkered on this a bit out of curiosity and it turned out to be pretty easy to implement: PathogenDavid@67a370e
diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp
index 752e8e590..96b80f16a 100644
--- a/src/cascadia/TerminalApp/TerminalPage.cpp
+++ b/src/cascadia/TerminalApp/TerminalPage.cpp
@@ -214,5 +214,13 @@ namespace winrt::TerminalApp::implementation
             if (auto page{ weakThis.get() })
             {
-                page->_OpenNewTerminal(NewTerminalArgs());
+                // Duplicate the focused terminal if there is one, otherwise create one from the default profile
+                if (const auto focusedTab{ page->_GetFocusedTabImpl() })
+                {
+                    page->_DuplicateTab(*focusedTab);
+                }
+                else
+                {
+                    page->_OpenNewTerminal(NewTerminalArgs());
+                }
             }
         });

(Unfortunately I'm not very confident I'll have any time soon to formalize it enough to make it a proper contribution, but maybe I'll save someone else a bit of time investigating.)
Edit: Worth noting that this doesn't handle the keyboard shortcuts, just clicking the button. Ctrl+Shift+T comes in in TerminalPage::_HandleNewTab and it already has NewTerminalArgs originating somewhere in the keyboard shortcut event handling schmoo, might look into that more later too.

{pseudo-spec here}

Another possibility in addition to this would be the ability to set left-/middle-/right-click options, so e.g. left-clicking the new tab button could open a cmd terminal, right-clicking could open a PS terminal, and middle-clicking a different one, all customizable in settings, of course. And if this were done, what each click does should be shown in the button's tooltip. It could even be further enhanced by opening the new tab either in the CWD or the default one depending on whether a modifier, most likely Ctrl, is used.

What would be the best way moving forward for this feature?

@chingucoding Sorry I missed that comment at the start of the year. Next steps here are basically:

have me flush out the above comment
Discuss with the team some (we'll next have quorum next week probably). I'll probably move for a vote of unanimous consent - it's not a terribly complicated proposal and I think it covers the problem space
If there aren't any NAKs then I'll probably turn that into a walkthrough similar to what I did with #1571. I honestly think the settings aren't all that bad so wiring this up shouldn't be that hard...

Dustin: "As long as I go into the settings and hit save and a newTabButton object doesn't appear, I'm cool with it"
We talked for a while about

does that design enable us to do everything we want?
does that design preclude us from doing something crazy in the future?

and we were fairly confident that it was good enough. Maybe there should have been some overlap between newTabMenu and newTabButton. Maybe showDropdown should have just been menu, where we stick the newTabMenu json.
The only real sticking point: We can probably get rid of icon, and use the icon of the command itself. If there's no icon on the command, then remove the button.....
But I actually don't love that, because the newTab action doesn't just come with an icon.
Alright so next steps: I need to write a walkthrough

wow TIL: https://mastodon.social/@JenMsft/111528828382278248

What's a feature you use a lot on your PC that you think other people probably don't know about?
I'll start - middle click on the refresh button in the browser to duplicate the current tab

It's absolutely the least discoverable feature I've ever seen, but I'm 100% here for "middle-click the new tab button duplicates"

On one hand I'd probably just prefer duplicate-by-default, but on the other hand I'm a frequent user of the middle-click-refresh gesture so I could certainly get used to doing that in Windows Terminal as well.


Feature request: more flexibility on the "Run Configurations" dialog

I set up a configuration and then saw the final command line had the "-t halt" included which I could not remove. This means that I cannot use it to launch a REPL sessoin as it immediately terminates. Leaving an open process running from the Run menu has implications no doubt, none of which I am aware of so this may not be feasible.

This is easily doable, by creating a powerful run configuration ui

I knew it  :D
Well, as soon as I can reproduce a build on my local machine I am more than
happy to have a go but I can't get past the "publish problem" that I
raised another ticket for.
On Thu, 30 Apr 2020 at 10:59<EMAIL_ADDRESS>wrote:

This is easily doable, by creating a powerful run configuration ui
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/Phosphorus15/intellij-prolog/issues/22#issuecomment-621735445,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAGHNRIMOJQVKZNEWWHZAI3RPFDYPANCNFSM4MTY4DZQ
.


Feature request: Apache Pulsar support

Apache Pulsar is a Pub/Sub messaging system like Apache Kafka (see also request #3816).
As it provides an SQL interface, it would be nice to get Pulsar integrated into DBeaver.

There is no way to connect to Pulsar over jdbc, at least easily.
I think we'll add Kafka support first.


Add HttpsRedirection and HSTS middleware template

From @jkotalik on October 13, 2017 19:22
With https://github.com/aspnet/BasicMiddleware/pull/264 being added, @Eilon asked me to write templates for this feature.
cc/ @javiercn @Tratcher
Copied from original issue: aspnet/Templates#871

From @Tratcher on October 13, 2017 19:24
We need to make sure Kestrel is set up for https first.

@Eilon my bad. Didn't realize there were two templates repos.

Yeah I have a TODO to add notes to the old repo.

(So, not your fault 😄 )

Let's review the proposed code change with @DamianEdwards .

This is still pending on picking up configuration in the middleware. Will be added once implemented.

@jkotalik Put out a PR for it and we'll merge it at the appropiate time, but we can start iterating on it.

https://github.com/aspnet/templating/commit/4d2e642b94ad6c2e152e09005c33bac7543bcf04


Link to VM is incorrect

The link to the VM in readthedocs.io seems to point to the empty VM image, not the filled one. It should point to:
https://drive.google.com/open?id=0B1GaxSkd5lU8UkF6V1A1VGpPZ2c
but it points to:
https://drive.google.com/file/d/0B1GaxSkd5lU8MTFxN3JLaHlXT2s/view

Updated.


[network] Make NetworkId & NetworkContext copyable

Motivation
I made a mistake when I first created NetworkId, making it have to be cloned everywhere because of the contained string.  This made it more unwieldy and a bunch of extra work around using the NetworkId.
Now, we can copy and make everything much easier, no longer copying around the string "vfn".  Additionally, cleans up some code and we are able to get rid of the Arc<NetworkContext> to just NetworkContext.
Migration Plan

Deploy all validators and VFNs with this version (serializing to old format).
Change code to output serialization to new format
Remove old format compatibility (or even move to using the Invalid slot instead of the current Vfn slot for readability purposes

Have you read the Contributing Guidelines on pull requests?
Yes
Test Plan
Take a look at my backwards compatible tests for serialization.  They cause some pain around having an unused value in the enum, but everything works outside of that!
Related PRs
Related to https://github.com/diem/diem/pull/9191 and thinking about how we can standardize identifiers across networks.  This PR definitely is blocked on that one (due to the ton of merge conflicts that are going to happen

/canary

/land


Generate a secret for the quay administrator

It's better to generate a secret for the quay admin user and put
it in a secret as opposed to relying on the user to modify the
init script and select their own quay administrative password.  This
change prevents a common password from being used.
Refs:

https://github.com/stolostron/backlog/issues/19783

Signed-off-by: Gus Parvin<EMAIL_ADDRESS>

/lgtm


Update speakers.ts

add myself to the list

@shershen08 Hey Mikhail, thanks a lot for your contribution!


Graph Implemented in C

Graph is a very important data structure, here I have implemented it in C using List and uses the breadth first search and depth first search method.

@VishwaroopShah contribute here https://github.com/Ishaan28malik/Get-Dev-Resources


feature req - private connections between users

docs have:
"SQLPad is meant to be run on an internal network for a single team. All connections added to the app can be used by all individuals with access to the SQLPad server."
any plans to allow private db connection details so they are not shared between users?

Hello @tooptoop4
There are no plans to add a private or user-based connections unfortunately.
Today there are 2 roles available to users. Admins can see/edit/add connections, and editors can use them for querying, but not edit or modify them.


Dynamo: cannot send same data set multiple times

Clicking send after a first time gives an error:

Currently blocked by: https://github.com/specklesystems/speckle-sharp/issues/764


Negative tests of "authorize" endpoint should include INVALID_AUD

I just realized this is a behavior the S4S Test Suite never checked for -- but it's important for API providers to get right to prevent certain attacks (i.e., a malicious server whose /metadata claims association with a legitimate authorization server).

Thanks Josh.
Is the behavior of the authorization server well-specified in standards in this error case?  By my reading of the Error Response portion of OAuth 2.0 spec, it seems that a compliant behavior would be to redirect the client browser to the redirect URI (since it isn't an issue with the redirect URI or client id), with an error param that matches one of the legal values, and a state param.
Since the aud param was added by the SMART spec from what I can tell (not seeing it in OAuth 2.0 spec), it isn't clear what that error code must be though.  Looks like the SMART App Launcher passes error=bad_audience&error_description=Bad%20audience%20value, though that error value isn't technically valid according to the OAuth 2.0 spec.   It is also missing the state parameter, which is problematic for Inferno as a client because that is how we reattach users to a running test session.
Did I get that right?

I think your assessment is correct and that the SMART launcher needs some work to ensure that it is compliant (and as far as the launcher goes, there are some intentionally strange behaviors, like we don't validate client secrets for example).
The key issue is to make sure that a server does not issue a token if a correct aud wasn't supplied.

Ok, I understand the issue.  Will see how we can add a test for this.  Thanks!


Make PicoTorrentCore cross-platform

The PicoTorrentCore project should be made cross-platform so we can start building Linux and OSX clients.

[x] Remove timer class from PicoTorrentCore. (#181)
[ ] Write platform-specific implementations of the file system classes.
[ ] Write platform-specific implementations of the environment class.
[x] Do not rely on a HWND in session::load. (#216)

@vktr Why did you close this? What happened? I'm very interesting about seeing it supported in Linux too.

I guess you can probably use Wine if you really want it to run on linux,
but a port of picotorrent is more like a complete rewritte of it ( it is
using WTL for GUI which is a C++ wrapper around win32 API). I think it is
clearly not the goal of this project to support any other platform.
On Thu, Sep 21, 2017 at 7:34 PM, Timofonic<EMAIL_ADDRESS>wrote:

@vktr https://github.com/vktr Why did you close this? What happened?
I'm very interesting about seeing it supported in Linux too.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/picotorrent/picotorrent/issues/149#issuecomment-331227600,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABNXG-yMDq0mrc7C4jjRkikmmU5p6wCUks5skp4HgaJpZM4HdCXF
.


Update version from 0.0.75 to 0.0.76

This is an automated update of version in pyproject.toml. This action is performed by publish.yml.

updated version from 0.0.75 to 0.0.76, @SuleyNL pls review


PAAS-6593 update fork

Jira Tickets included in PR are:

PAAS-6593: replace base-linux dependency with base-centos in paas-yum-repo role cookbook

As a PaaS engineer I need our role cookbooks to be using the latest base cookbook dependencies.

Acceptance criteria:
 * replace gdp-base-linux with base-centos in the runlist
 * replace the base-linux pin with base-centos (unpinned)
 * update other dependency pins as necessary
 * confirm testing still works
 * test for reconverge (daemonized chef-client)
 * check for logrotate being included and shell out a ticket to get it removed from the utility cookbook if so
 * submit a PR, have it reviewed and merged
 * work with a teammate to recycle or migrate servers


MSI MAG B550 Tomahawk - iCue only showing 1 header.

iCue is missing JRGB1, JRainbow1 and 2, and Onboard LED Headers from the list on the right.  It only lets me select JRGB2
Openrgb finds and detects all JRGB, JRainbow, and Onboard LED Headers.
Motherboard: MSI B550 Tamohawk (MS-7C91)

I fixed it by adding more zones to settings.json, I also modified devices but idk if that had anything to do with the fix.


Fix [More...] does not un-collapse single line messages

The above issue (#3313) was resolved. Also, the logo of Instagram in integrations was changed with the latest logo.
It was found that the bug was caused by overlapping of two elements in the message box (the top line and [More...] link). To avoid this overlapping, necessary margin was given.
Along with all this, the message body was properly aligned with sender's name.
Please let me know about possibility of any more improvement on this issue.
Thanks!

Automated message from Dropbox CLA bot
@khantaalaman, it looks like you've already signed the Dropbox CLA. Thanks!

Issue #3329 has also been taken care of. Please suggest improvisations, if any.
Thanks!

@khantaalaman the font-awesome upgrade should probably be a separate PR, since we'll want different fonts reviewing it.
For the More... link issue, your changes mess up the message spacing; you'll need to solve this in a way that doesn't involve removing that bottom margin.  Also, can you explain or post a short screen capture explaining how this solves the original bug?

@timabbott Thanks for your review. I will make necessary changes and will submit another set of PRs.

The font awesome update was made. Please let me know about possible improvements.
The Fix in [More...] link to be submitted as another PR.
Thanks!

@timabbott If the FontAwesome icons are updated, we'll need to update the user docs to use version 4.7.0 since they're still using 3.0.2. Would you like me to take care of that?

This is a duplicate of #3481.


Setting to turn off finished tasks

What's the Problem?
Add the ability to turn off the finished tasks tray at the top right.

Solution/Idea
Add a slider in Settings that will remove the finished tasks tray at the top right.
Alternatives
Turn it off as standard OR delete it as a whole.
Priorities

Capability
Priority

This proposal will allow developers to accomplish W
Must

This proposal will allow end users to accomplish X
Should

This proposal will allow developers to accomplish Y
Could

This proposal will allow end users to accomplish Z
Won't

Files Version
Version: <IP_ADDRESS> OS Version: 10.0.22000.795
Windows Version
Windows 11 21H2
Comments
No response

Can you share more about your use case?

Can you share more about your use case?

The finished task tray is not really needed if you only copy small files that are instantly done. Furthermore this is annoying to OCD users like me, who have to click it away after every copy.

How would you differentiate between larger files where validtion doesn't hurt? The OCD goes both ways 😆

How would you differentiate between larger files where validtion doesn't hurt? The OCD goes both ways 😆

I would just have a popup that shows the ongoing operation. It goes away when its done. Much like WinExplorer.

This is one area where we purposely differentiate from File Explorer. Displaying a green check mark when the operation is completed and displaying an error when it doesn't, gives the user confidence in the file operations much like the download experience in Microsoft Edge.


Dispatch multiple Actions from one @Effect()

I have been trying to figure this one out and I have a specific use-case where I have an Effect which makes an api call. However the data returned from the api need to be dispatched to two different stores with in my application. At present I can't seem to find a way of doing this, I know this is really a stack overflow type question but I am guessing that this is not possible, but it would be good if this was a feature. I have included a code example of what I am trying to doing, does anyone know how to achieve this.
@Effect()
    getUserCourse$: Observable<Action> = this.actions$
        .ofType(userCourseActions.ActionTypes.LOAD_USER_COURSE)
        .map(action => action.payload)
        .switchMap(userCourseId =>
        {
            return new Observable(observer =>
            {
                this.userCourseApi.getUserCourseDetail(userCourseId)
                    .subscribe(response =>
                    {
                        const data = {
                            course: response.course, //needs to go to the course store
                            userCourse: response.data //needs to go to te userCourse store
                        };
                        observer.next(data)
                    })
            })
        })
        .map(data =>
            {
                //Actions that need to be dispatched

                /*new userCourseActions.LoadUserCourseSuccessAction(data.userCourse)
                new courseActions.LoadCourseSuccessAction(data.course)*/
            }
        );

data returned from the api need to be dispatched to two different stores with in my application.

All reducers receive all actions, so with some clever naming, you could dispatch only one action.
If you don't want to do that, you have a couple of options

using concat operator
setting @Effect({ dispatch: false }) dispatching both manually instead(`store.next({ type: 'whatever' })
dispatch one with standard map, dispatch the other with store.next as mentioned above

Found a really nice way to solve the problem as described in this previous issue.
https://github.com/ngrx/effects/issues/59

@runtheyards can you paste your solution?

@codeepic here is an example:
@Effect()
    loadSpamDependencies$: Observable<Action> = this.actions$
        .ofType(spam.ActionTypes.SEND_SPAM)
        .map(action => action.payload)
        .mergeMap((spam: spamModel) =>
        {
            return [
                new spamActions.ClearSpamAction(),
                new spamActions.LoadSpamAction(spam),
                new yoloActions.LoadYoloAction(spam),

            ];

        })
        .catch(() => of(new spamActions.LoadSpamFailAction()));

My current code looks like this and it seems to work:
  @Effect()
  public select$: Observable<Action> = this.actions$
    .ofType(student.ActionTypes.SELECT)
    .map((action: student.SelectAction) => action.payload)
    .switchMap((student: student) => {
      let studentInfo1$ = this.studentService.getStudentInfo1(student);
      let studentInfo2$ = this.studentService.getStudentInfo2(student);
      return studentInfo1$.concat(studentInfo2$);
    })
    .mergeMap((data: any, index: any) => {
      let myActions: any[] = [];
      if (index === 0) {
        let myData = JSON.parse(data.content);
        myActions.push(new student.UpdateStudentInfo1(myData.data));
      }
      if (index === 1) {
        myActions.push(new student.UpdateStudentInfo2(data));
      }
      return Observable.from(myActions);
    });

Is there a way I can write it without having to check the value of index?  Will index always correctly correspond to the right observable in order?  Is there any performance gain combining the action dispatches this way vs writing 2 separate effects?

@dereklin is it possible to add a delay between the two actions in the mergeMap?

@alastair-todd In stead of forkJoin, you can use concat https://www.learnrxjs.io/operators/combination/concat.html if you want ordering.  But it will be slower because one call has to wait for the previous call to finish to start

Hi,
Returning an array of actions seems to be ok when the original action is triggered by the user, but when triggered automatically using startWith(), only the last action in the array is executed, is this normal? :(
Here my loadCurrentUser$ effect gets the current user from the local storage (token) and upon success returns a LoadCurrentUserSuccessAction action. In turns, the loadCurrentUserSuccess$ effect returns 2 actions, LoadProfileAction and LoadCurrentTicketAction. When the loadCurrentUser$ effect is triggered manually via a button, it all works well, but if triggered via startWith(), only my LoadCurrentTicketAction action is triggered :/
  @Effect() loadCurrentUser$: Observable<Action> = this.actions$
    .ofType(actions.AuthenticationActionTypes.LOAD_CURRENT_USER)
    .startWith(new actions.LoadCurrentUserAction())
    .switchMap(() => {
      return this.authService.loadCurrentUser();
    })
    .map((payload: IUser) => {
      if (!!payload) {
        return new actions.LoadCurrentUserSuccessAction(payload);
      } else {
        return new actions.LoadCurrentUserFailAction();
      }
    })
    .catch((payload: IUser) => {
      return of(new actions.LoadCurrentUserFailAction());
    });

  @Effect() loadCurrentUserSuccess$: Observable<Action> = this.actions$
    .ofType(actions.AuthenticationActionTypes.LOAD_CURRENT_USER_SUCCESS)
    .mergeMap((action: actions.LoadCurrentUserSuccessAction) => {
      return [new actions.LoadProfileAction(), new ticketsActions.LoadCurrentTicketAction()];
    });

Although I am interested in whether there exists a suitable API to cause a set of actions to all be dispatched as a batch, looking at the code above I think it actually reflects a different kind of problem.
I'm reading toward the end, actions.LoadProfileAction(), new ticketsActions.LoadCurrentTicketAction().
I'm trying to develop a sense of what actions should be, what kinds of ideas they should contain kinds of words they should use. So far, I think about actions primarily coming from a ES/CQRS background. Thinking about that, actions seem roughly akin to events. The nature of an event is that it is a thing that has happened, not an instruction about the future.
Thinking about the above code and applying that idea, I'm inclined to dispense with the notion of a "load profile" action. Rather, whatever code loads the profile would be looking for the triggering action ("load user success" or whatever), and from that it would perform the work of loading the ticket or profile or whatever. Then it would return/dispatch action(s) indicating the success of that activity. So the actions would always be about things that have happened.
Anyway, I realize this is pretty far from the direct technical questions asked above, but I think such an approach might make the technical question moot.  I think it has done so in our code redo the sort of thing pretty extensively.

I'm honestly not sure I fully understand your point. And from what I do understand, I honestly don't know what to say... I followed this example where the FindBookPageComponent directly dispatches the action SearchAction with a payload, which is then picked up by the search$ effect that takes care of calling a service to execute the actual search and return a SearchCompleteAction. I find my approach very similar, unless I'm missing some subtle detail...? Are you saying this approach is wrong to your eyes?
Now aside from the strategy questions, I'm actually looking for a reason this code works perfectly fine when the action is dispatched from a component (via button click), and not quite right when the action is dispatched via startWith() to trigger the action immediately on startup.

Oh and also, could you elaborate a little more on you first sentence:

Although I am interested in whether there exists a suitable API to cause a set of actions to all be dispatched as a batch

I must say I'd like to know more now ;)

You could theoretically create a meta-reducer that allows you to dispatch arrays of actions:
function enableDispatchingArrays(reducer: (state: any, action: Action) => any) {
  return function (state: any, action: Action | Action[]) {
    if (Array.isArray(action)) {
      return action.reduce(reducer, state);
    }

    return reducer(state, action);
  }
}

Then compose it to the left of combineReducers when creating your root reducer:
import { compose } from '@ngrx/core';
import { combineReducers } from '@ngrx/store';

const reducer = compose(enableDispatchingArrays, combineReducers)({
  auth: authReducer,
  ...
});

YMMV

@Sn3b Unfortunately it is difficult to explain all these things "on the spot" here in an issue discussion. But I'll try again with a different variant and maybe it will come through better this time.
I'm looking at the FindBookPageComponent  in the example app you mentioned. This dispatch is something called SearchAction, but there are really other factors to consider:

It is not clear the extent to which this published example app is intended as an expression of the most perfect way to use the software, or is intended as just a context to provide examples of how it could be used.
It's not clear whether anyone other than me (for example, anyone on the core Store team) cares about this notion of actions as being like events (from the CQRS/ES context), in that they are about things that have happened, not instructions of what should happen. So don't take anything I write here as being official for Store.

With that in mind, here's how I interpret the example. They have something they named SearchAction because that was a convenient name to use at the time. I interpret the meaning of that as "the user has provided some search criteria".
With that way of thinking about things, in your example I would suggest rearranging, renaming, possibly removing actions that say things like LoadProfileAction. Rather, go look at the code which is currently responding to your LoadProfileAction, and aim to make that code respond to the "thing that happened" rather than respond to "an action which is a kind of command asking something to happen". Most directly, right now you are dispatching to actions. Just dispatch one action and have both downstream activities responded to that one action. There is no requirement that you have a separate action for every consequence of an action. Perhaps instead your code that is currently reacting to LoadProfileAction, could instead react to LOAD_CURRENT_USER_SUCCESS action.
Does that help? It's probably still too difficult. I expect sometime down the line I will publish some examples showing these ideas, but I don't have anything in hand to publish right now.

@MikeRyanDev I'm even more confused now, thanks! :P
@kylecordes my brain needs a little time to process all this, but I guess indeed, looking at actions as events might eventually lead to some changes, but honestly I'm too far down the road to change all my code now :/

@MikeRyanDev I've stupidly copy pasted your enableDispatchingArrays function, and set a breakpoint on the line if (Array.isArray(action)), strangly enough, I do see my LoadProfileAction being raised, as well as my LoadCurrentTicketAction, but the loadProfileAction$ effect doesn't seem to pick it up...

@kylecordes Sorry but I do disagree with what you're saying. But again, like you say, those are just opinion :)  To me, an action (which has this naming for a reason) triggers "something". It can be a command OR an event. If you look at it in Redux (http://redux.js.org/docs/basics/Actions.html) you will see "ADD_TODO", "REMOVE_TODO" which are commands.
The important part is to not mix up "Action" that ask"someone" to do something, from "Action" that trigger an event (something occured)
The flow is like this:
Button click  ----> dispatch ACTION (do something) ---> Effects intercept and do all async things ---> dispatch ACTION (something happend) ---> view is updated.
Thus the naming of our Actions types is very important.
Just my 2 cents :)

@kylecordes I agree, the CQRS/ES world gets it right by distinguishing commands and events. Naming is important, and overloading the term 'action' for both in redux is a mess IMHO and leads to a bunch of confusion for those trying to go beyond toy examples.

@kylecordes perhaps actions are not roughly equivalent to events in the CQRS sense. When you dispatch an action to the store (pre ngrx/effects even) it was always about causing some future state to change in the store. If actions were roughly equivalent to "events", I don't think ngrx/effects would exist at all, quite frankly. I think the primary reason, really, for plumbing side-effects through action dispatches, is the dev tooling. If you were to drop ngrx/effects in favor of services, the dev tooling would only see one side of async operations -- it would see the response side, but have no visibility into the request side.


FCL-264 | add search breadcrumb if search query present on judgment d…

Changes in this PR:
Adds a search breadcrumb to the judgment breadcrumb if there is a search query.
Jira card / Rollbar error (etc)
https://national-archives.atlassian.net/browse/FCL-264
Screenshots of UI changes:

How does this look if there's a search for one of the courts? Is it 'Search results for ""'?

@jacksonj04 yes I missed that, good catch. I think I'll go with adding all the search query params when the user navigates to a judgment so we can add those to the breadcrumb link. I think that's the simplest approach without having to store it in some kind of state


Update _tools.scss

Hi @AKHILBHALL, thanks for open the related PRs.
Since all the CSShake values are customizable from the end user, could you please explain the reason on which you based the changes of the defaults.
Thanks,


Refactor portal storage to allow custom storage implementations per network

With the introduction of beacon and state networks, we need a way to use custom storage implementation based on the network specifications.
For example, in beacon, we don't use the concept of data radius, we like to have some temporary data and we want to build a FindContent response from a range of values from our database. Also, SQLite is enough for beacon and we don't want to use RocksDB.
In our current architecture, we spawn an OverlayService implementation per network with a PortalStorage instance.
The problem is that PortalStorage is specific to the history network, and we would like to swap this implementation with another for beacon and state networks.
To allow this, the most naive approach is to use the repository pattern and create a trait object that would serve as an API interface for the overlay service.  Then, we can have HistoryStorage, BeaconStorage, and StateStorage storage mechanics that would implement this trait. This will move all storage-specific responsibilities to those objects and will encapsulate the logic per network. This will not require refactoring of the overlay service code, because we will use the same API interface as the current PortalStorage.
Because the storage code will grow and to make this implementation feasible and easily maintained, I think we have to extract the storage code from the portalnet crate and create a new workspace crate "storage" where all storage implementations will reside.
Here is a list of tasks that we will need to complete to achieve this architecture change:

[ ] 1. Move  portalnet::types::messages to ethportal-api. (this will allow us to do 2. because of circular dependencies) #1040
[ ] 2. Extract portalnet::metrics  implementations to a separate workspace create. (It makes sense to have a separate crate for the metrics and this will allow us to extract the storage to a separate crate because of circular dependencies)
[ ] 3. Extract portalnet::storage to a separate storage workspace crate. (As mentioned above, this is recommended for maintenance concerns and separation of responsibilities.)
[ ] 4. Add HistoryStorage and BeaconStorage implementations with a common portal storage trait.

I think we have to extract the storage code from the portalnet crate and create a new workspace crate "storage" where all storage implementations will reside.

Maybe I'm wrong here, or misunderstanding. But it seems like we'll only keep the core Storage api traits inside this workspace, and then each subnetwork crate (eg trin-beacon / trin-state) will house their own implementations. Similar to how we treat the Validator trait.


TypeError: Cannot read properties of null (reading 'insertBefore')

Version
3.2.31
Reproduction link
sfc.vuejs.org/
Steps to reproduce
click the checkbox
What is expected?
everything is fine
What is actually happening?
TypeError: Cannot read properties of null (reading 'insertBefore')

Only reproduced in production environments

related https://github.com/vuejs/core/issues/5650
the error message is not same in chrome and firefox:
chrome:

firefox:

@javastation When remove the outer div, the error seems gone   sfc playground , so add a try catch maybe not a good fix.

Not sure if try-catching the rendering of a slot is something that is supposed to be possible

@javastation I don't understand why add a outer div will cause this error.

@javastation I don't understand why add a outer div will cause this error.

flowchart TB
	subgraph A[showTable change]
		direction LR
			2(patch root elment)-->3(root.el=preRoot.el):::red-->4(dynamicChildren!=null)-->|true|5(patch dynamicChildren,mount table using oldEl.parentNode)-->6(end:secondDiv.el is null):::red
		end
	subgraph B[checkbox change]
		direction LR
			12(patch root elment)-->13(root.el=preRoot.el):::red-->14(dynamicChildren!=null)-->|false|15(full diff)-->16(diff second div,second.el = preSecond.el):::red-->17(now secondDiv.el:null)
		end
		A-->B
		classDef red fill:#faa;

The value of the second div vnode.el is null which affects the subsequent process, in my opinion.

hi ,i use nuxt3 + element plus，also have this issue， there this my can do minimal repo:
https://stackblitz.com/edit/nuxt-starter-hfqdfg?file=app.vue
error will show in console

This problem always occurs in pages that use keep-alive.

This problem always occurs in pages that use keep-alive.

Could you provide a minimal repro?

sfc.vuejs.org/
如果你先移除 m-table 组件，再还原，它不会报错.

resources
Project setup
npm install

Compiles and hot-reloads for development
npm run serve

Compiles and minifies for production
npm run build

Run your unit tests
npm run test:unit

Customize configuration
See Configuration Reference.
sfc.vuejs.org/
If you remove the m-table component first, then restore it, it will not give an error.

sfc.vuejs.org/
If you remove the m-table component first, then restore it, it will not give an error.

Hello! Thank you for your work.
Is it possible to hope that PR will it
be accepted soon?
https://github.com/vuejs/core/pull/5670
Our team has encountered a similar error in production and we have no ideas how to fix it from our side.

hey! got the same thing here:

For us, this was triggered when Firefox is auto-filling some inputs, but I don't think it's relevant. The important thing is that it's only happening in prod mode...
After digging a little bit, it looks like the insertBefore function was called on an empty container.
We've actually lost some mental sake point trying to debug this!
So we will be forever grateful if you could push a fix soon!

Hi everyone. I also have this issue only in prod mode. A temporary workaround: remove a key attribute from your v-for. The error will still be in the console, but it fixes the issue with the rendering

Hi everyone. I also have this issue only in prod mode. A temporary workaround: remove a key attribute from your v-for. The error will still be in the console, but it fixes the issue with the rendering

In my case, I don't have any v-for in this page...
I do have a v-if , but I can't get rid of it...

Hi. I also have this issue only in prod mode.

The render function is also a workaround, like above reproduction:sfc.vuejs.org

I also had this issue only in prod mode.
vue3报错TypeError: Cannot read properties of null (reading 'insertBefore') helped me fix it.
Before
<el-table :columns="columns" :dataSource="dataSource">
  <template #default="{ row }">
     {{ row.list.length }}
  </template>
</el-table>

After
<el-table :columns="columns" :dataSource="dataSource">
  <template #default="{ row }">
     {{ row?.list?.length }}
  </template>
</el-table>

I encounter this issue too. It only happens on SSR and production build.
I tried my best to create the minimal reproduction sfc.vuejs.org
Some conditions are required to produce the bug:

You must change the props's value by checking the check box
The v-for items are modified on the mounted hook
The dynamic element needs to be wrapped deep enough (3 div)

If anyone is still dealing with this. We worked around the error by replacing most of our v-if to v-show.

If anyone is still dealing with this. We worked around the error by replacing most of our v-if to v-show.

Nice 😄 😄 😄

I'm also facing this issue using the nuxt-rc6. Real pain.

@HarisSpahija it dosn't work in my projects.
我给了我项目里的所有点式操作加上了可选操作符，然后解决了这个问题。
跟 @JimSuen 一样的解决方式，就像下面这样子，
<template #roles="scope">
  <template v-if="scope.row.roles?.length">
    <el-tag v-for="(item, index) in scope.row.roles" :key="item" size="small">
      {{ item }}
    </el-tag>
  </template>
</template>

<template #status="scope">
  <el-switch :disabled="scope.row.roles?.includes('super-admin')"></el-switch>
</template>

虽然暂时解决了问题，但是在开发者工具上面的错误提示，让人费解，无法定位问题所在。
我尝试了在build代码的时候，关闭掉minify功能，然后打条件断点，想定位是哪个组件出现了问题，但是无法定位出来问题。
而且一打上条件断点，应用渲染变得十分缓慢，调试地很难受，
TypeError: Cannot read properties of null (reading 'insertBefore')
    at insert (index.695120fe.js:4:43972)
    at w (index.695120fe.js:4:25619)
    at g (index.695120fe.js:4:25186)
    at Y (index.695120fe.js:4:32407)
    at P (index.695120fe.js:4:30866)
    at D (index.695120fe.js:4:27423)
    at E (index.695120fe.js:4:25986)
    at g (index.695120fe.js:4:25300)
    at Y (index.695120fe.js:4:31395)
    at P (index.695120fe.js:4:30866)

TypeError: Cannot destructure property 'bum' of 'U' as it is null.
    at J (index.695120fe.js:4:34070)
    at re (index.695120fe.js:4:33352)
    at q (index.695120fe.js:4:34410)
    at re (index.695120fe.js:4:33570)
    at q (index.695120fe.js:4:34410)
    at re (index.695120fe.js:4:33570)
    at q (index.695120fe.js:4:34410)
    at re (index.695120fe.js:4:33570)
    at J (index.695120fe.js:4:34151)
    at re (index.695120fe.js:4:33352)

像这样子的报错，让我十分困惑，很难定位问题所在。vue/core 应该有更友好的报错提示！

I had the same error. I was able to fix by wrapping the root node with <Suspense> in my case.

We were facing the same problem and as of complexity of our application non of the suggestions were easily applicable/not working (such as v-if -> v-show, playing with :key, tabindex, div nesting..).
So we ended up applying #5670 locally in postinstall script - that resolved it.

I also had this issue only in prod mode. vue3报错TypeError: Cannot read properties of null (reading 'insertBefore') helped me fix it.
Before
<el-table :columns="columns" :dataSource="dataSource">
  <template #default="{ row }">
     {{ row.list.length }}
  </template>
</el-table>

After
<el-table :columns="columns" :dataSource="dataSource">
  <template #default="{ row }">
     {{ row?.list?.length }}
  </template>
</el-table>

thank you for this , this is perfectly working

Development and production are not unified

I also had this issue only in prod mode. vue3报错TypeError: Cannot read properties of null (reading 'insertBefore') helped me fix it.
Before
<el-table :columns="columns" :dataSource="dataSource">
  <template #default="{ row }">
     {{ row.list.length }}
  </template>
</el-table>

After
<el-table :columns="columns" :dataSource="dataSource">
  <template #default="{ row }">
     {{ row?.list?.length }}
  </template>
</el-table>

i already do like this by adding ?. in the scope ,but didn't work, any other ideas? thanks all

I also had this issue only in prod mode at<EMAIL_ADDRESS> and I fix by abstracted into components
before
<template>

     //.....

     //.....

</template>

after
<template>

     //.....
    <components></conponents>
     //.....
</template>

<template>

</template>

I also had this issue only in prod mode at<EMAIL_ADDRESS>and I fix by abstracted into components
before
<template>

     //.....

     //.....

</template>

after
<template>

     //.....
    <components :is-show="isShow"></conponents>
     //.....

</template>

<template>

</template>

so appreciate your help, i'll try next project with vue3
i already fixed the bug by adding a amount of ?.  T T

I also had this issue only in prod mode at<EMAIL_ADDRESS>and I fix by abstracted into components
before
<template>

     //.....

     //.....

</template>

after
<template>

     //.....
    <components :is-show="isShow"></conponents>
     //.....

</template>

<template>

</template>

so appreciate your help, i'll take it

related #5650
the error message is not same in chrome and firefox:
chrome:
firefox:

I'm using nuxt3, this error occurs when I use  component

I also face this issue but I have no idea how to fix it nor do I know where exactly the issue occurs.
It happens in production and dev mode with PrimeVue  when I use nested tabs https://primefaces.org/primevue/tabview.
Sometimes when changing from one tab to another via URL param the error occurs. Is there any plan to fix it entirely?

Will this ever be fixed? I love Vue, but this is a very annoying problem I run into with every Vue project.
I started a new Nuxt 3 project, and it happened multiple times. The main problem about it is it's almost impossible to debug, the errors don't give any useful information.

        <VaOptionList
          v-model="aiModelSetting"
          :options="aiModelSettings"
          :rules="vRules(['required'])"
          text-by="label"
          value-by="value"
          type="radio"
        />
        <VaSelect
          v-if="aiModelSetting === AiModelSetting.Fixed"
          text-by="title"
          value-by="id"
          background="#ffffff"
          placeholder="Select an AI model"
        />

chunk-KGG2AQEQ.js?v=f26dbba1:7745 Uncaught (in promise) TypeError: Cannot read properties of null (reading 'insertBefore')
at insert (chunk-KGG2AQEQ.js?v=f26dbba1:7745:1)
at processFragment (chunk-KGG2AQEQ.js?v=f26dbba1:5778:1)
at patch (chunk-KGG2AQEQ.js?v=f26dbba1:5496:1)
at ReactiveEffect.componentUpdateFn [as fn] (chunk-KGG2AQEQ.js?v=f26dbba1:5930:1)
at ReactiveEffect.run (chunk-KGG2AQEQ.js?v=f26dbba1:207:1)
at instance.update (chunk-KGG2AQEQ.js?v=f26dbba1:6022:1)
at setupRenderEffect (chunk-KGG2AQEQ.js?v=f26dbba1:6030:1)
at mountComponent (chunk-KGG2AQEQ.js?v=f26dbba1:5848:1)
at processComponent (chunk-KGG2AQEQ.js?v=f26dbba1:5813:1)
at patch (chunk-KGG2AQEQ.js?v=f26dbba1:5502:1)

In this code, when aiModelSetting becomes AiModelSettings.Fixed when I press the corresponding VaOption, the error happens and Vue breaks (requires a refresh). I removed the options in the VaSelect to verify it didnt have anything to do with them.

@soylomass No I don't think it's fixed. I made a new thread here, the error is slightly different depending on how it is triggered but I think it's the same underlying issue causing a "Cannot read properties of null" in HMR
 or closely related:
If it doesn't get fixed soon I'll have to copy all UI components into the project instead of using libraries because it's such a PITA to debug atm

I also face this issue but I have no idea how to fix it nor do I know where exactly the issue occurs. It happens in production and dev mode with PrimeVue  when I use nested tabs https://primefaces.org/primevue/tabview.
Sometimes when changing from one tab to another via URL param the error occurs. Is there any plan to fix it entirely?

I also have that problem using PrimeVue, I've replaced so useless div by template tag and I wonder if it is related or no

also faced this problem on nuxt 3.3.1
the error was not always there and I started to move from commit to commit to understand in what moment it appeared and what changes could lead to this error.
in my case, I came to a new project, which is written quite badly and there was such a construction:

i changed it to:

and my variant with useAsyncData broke everything :)

should this error due to the massive unresolved issues be opened again?

It seems, although not yet clear, that when I replace the root tag, which contains a v-if directive, with a tag, and then make changes in my CustomComponent, it triggers the bug. I hope this information is not misleading.

This helped a lot, in my case, removing a v-if from the top level of a template resolved the bug. Now, the v-if directive is applied to a direct child:
<template>

With Content

</template

Now:
<template>

With Content

</template

Yeah I'm getting this as well and moving all the root level v-ifs would be quite some work for our project so would be great if it could be addressed :,) Also, we are getting some Cannot destructure property 'bum' of 'Y' as it is null. errors from the unmountComponent function which I doubt may be related?

It turns out in my case the component that was causing this bug was wrapped in a  <transition> component. After removing the transition, everything works fine. (Vue version: 3.2.45)
Before:
<template>
	<transition name="fade">

		// .. other divs

	</transition>
</template

After:
<template>

	  // .. other divs

</template

Same issue in nuxt 3.6.5 and vue 3.3.4.
It happens in production build only.

why is this one not open????

why is this one not open????

Because the devs want a reproduction example, something impossible to get because of the random nature of this bug, sadly. If only the error message could be a little bit more descriptive.

even more important it is to take out the random nature and work on finding a reason from the devs/contributors


Publish to Open VSX registry

As a user I would like to be able to search and install the tremor vscode extensions in gitpod and other IDES
that support the Open VSX registry:
https://github.com/eclipse/openvsx/wiki/Publishing-Extensions

For tracking purposes: https://github.com/EclipseFdn/open-vsx.org/issues/900


pip_opts does't work

STACKSTORM VERSION
3.8.0
Paste the output of st2 --version:
OS, environment, install method
docker-compose
Steps to reproduce the problem
configfile:
[actionrunner]
pip_opts = -i https://pypi.tuna.tsinghua.edu.cn/simple,--no-cache-dir,--disable-pip-version-check,--trusted-host=pypi.tuna.tsinghua.edu.cn
Actual Results
id: 63f4899229d1c02d754501d2
action.ref: packs.setup_virtualenv
context.user: st2admin
parameters:
packs:

k8s
status: failed
start_timestamp: Tue, 21 Feb 2023 09:06:26 UTC
end_timestamp: Tue, 21 Feb 2023 09:06:29 UTC
result:
exit_code: 1
result: None
stderr: "st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Setting up virtualenv for pack "k8s" (/opt/stackstorm/packs/k8s)
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Removing virtualenv in "/opt/stackstorm/virtualenvs/k8s"
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Virtualenv successfully removed.
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Creating virtualenv for pack "k8s" in "/opt/stackstorm/virtualenvs/k8s"
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Creating virtualenv in "/opt/stackstorm/virtualenvs/k8s" using Python binary "/opt/stackstorm/st2/bin/python"
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Running command "/opt/stackstorm/st2/bin/virtualenv -p /opt/stackstorm/st2/bin/python --always-copy --verbose --no-download /opt/stackstorm/virtualenvs/k8s" to create virtualenv.
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Installing base requirements
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Installing requirement six>=1.9.0,<2.0 with command /opt/stackstorm/virtualenvs/k8s/bin/pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir --disable-pip-version-check --trusted-host=pypi.tuna.tsinghua.edu.cn six>=1.9.0,<2.0.
Traceback (most recent call last):
File "/opt/stackstorm/st2/lib/python3.8/site-packages/python_runner/python_action_wrapper.py", line 395, in
obj.run()
File "/opt/stackstorm/st2/lib/python3.8/site-packages/python_runner/python_action_wrapper.py", line 214, in run
output = action.run(**self._parameters)
File "/opt/stackstorm/packs/packs/actions/pack_mgmt/setup_virtualenv.py", line 93, in run
setup_pack_virtualenv(
File "/opt/stackstorm/st2/lib/python3.8/site-packages/st2common/util/virtualenvs.py", line 118, in setup_pack_virtualenv
install_requirement(
File "/opt/stackstorm/st2/lib/python3.8/site-packages/st2common/util/virtualenvs.py", line 348, in install_requirement
raise Exception(
Exception: Failed to install requirement "six>=1.9.0,<2.0": Looking in indexes:  https://pypi.tuna.tsinghua.edu.cn/simple

"
stdout: ''
the pip doesn't install six success, but i can install it manuely
root@262d1f9b9e43:/opt/stackstorm# /opt/stackstorm/virtualenvs/k8s/bin/pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir --disable-pip-version-check --trusted-host=pypi.tuna.tsinghua.edu.cn 'six>=1.9.0,<2.0'
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting six<2.0,>=1.9.0
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six
Successfully installed six-1.16.0

i resolved this problem.
1, modify
/opt/stackstorm/st2/lib/python3.8/site-packages/st2common/constants/pack.py
from
BASE_PACK_REQUIREMENTS = ["six>=1.9.0,<2.0"]
to
BASE_PACK_REQUIREMENTS = ["'six>=1.9.0,<2.0'"]
2, modify
/opt/stackstorm/st2/lib/python3.8/site-packages/st2common/util/shell.py
FROM
def run_command(
cmd,
stdin=None,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=False,
cwd=None,
env=None,
close_fds=None,
):
TO
def run_command(
cmd,
stdin=None,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True,
cwd=None,
env=None,
close_fds=None,
):
cmd = " ".join(cmd)
this is the good result
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Installing requirement 'six>=1.9.0,<2.0' with command /opt/stackstorm/virtualenvs/k8s/bin/pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir --disable-pip-version-check --trusted-host=pypi.tuna.tsinghua.edu.cn 'six>=1.9.0,<2.0'.
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG
pip stdout=
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting six<2.0,>=1.9.0
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six
Successfully installed six-1.16.0
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Installing pack specific requirements from "/opt/stackstorm/packs/k8s/requirements.txt"
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Installing requirements from file /opt/stackstorm/packs/k8s/requirements.txt with command /opt/stackstorm/virtualenvs/k8s/bin/pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir --disable-pip-version-check --trusted-host=pypi.tuna.tsinghua.edu.cn -U -r /opt/stackstorm/packs/k8s/requirements.txt.
st2.actions.python.SetupVirtualEnvironmentAction: DEBUG    Virtualenv for pack "k8s" successfully created in "/opt/stackstorm/virtualenvs/k8s"
"
stdout: ''
i think the problem is ths pack six<2.0,>=1.9.0,
pip install this pack in shell must with ''
pip install 'six<2.0,>=1.9.0'
i found a =1.9.0 file in stackstorm home path

sorry， my bad, this is not a bug, my st2.conf is wrong
this is wrong
[actionrunner]
pip_opts = -i https://pypi.tuna.tsinghua.edu.cn/simple,--no-cache-dir,--disable-pip-version-check,--trusted-host=pypi.tuna.tsinghua.edu.cn
correct is
[actionrunner]
pip_opts = -i,https://pypi.tuna.tsinghua.edu.cn/simple,--no-cache-dir,--disable-pip-version-check,--trusted-host=pypi.tuna.tsinghua.edu.cn
in pip_opts, every blank space should be replaced with ,


OAK-10050 - Enable access to the secondary Azure blobstore service en…

…dpoint in Oak segment node store

@smiroslav, could you take a look at the proposed changes, please?


Homepage content builder

For one of our platforms built with Saleor, we need to provide a feature that will allow the staff members easily edit contents of the homepage. I'll try to get more specific requirements soon, but I suppose that we should provide ability the build at least a page that looks like our current homepage in PWA Storefront (according to the mockups, not the current implementation).
I hope that Draftail editor will be flexible enough so that we could use it as the page editor. The format that it outputs is JSON which I guess should be convenient for later rendering.
@Pacu2 We'll appreciate any more specific requirements about what types of content will you need.

We agreed that we should rather delegate this work to some 3rd party CMS system. With current architecture, one could take advantage of headless CMS platforms such as Contentful or GraphCMS.


Program throws SIGSEGV when decoding certain files

Here they are:
output.tar.gz

Thanks for the report. I can reproduce the crash. I'll take a look.

Did you use a fuzzer to generate the bad input or just do it by hand? If the former, what tool did you use?

Fixed in 818601809f82abc0d916facae3a0e1c9078b21d8.

@drichardson it's called american fuzzy lop


New version: Peppy.Osu! version 2024.312.1

Pull request has been created with komac v2.1.1 :rocket:
Microsoft Reviewers: Open in CodeFlow

@wingetbot waivers Add Validation-No-Executables


Fixed title being hidden under header.

Pull request type

Please check the type of change your PR introduces:

[x] Bugfix
[ ] Feature
[x] UI change (please include screenshot!)
[ ] Code style update (formatting, renaming)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build related changes
[ ] Documentation content changes
[ ] Internationalization and localization
[ ] Other (please describe):

What is the current behavior?

Issue Number:

#487

What is the new behavior?

ScrollViewerContent does not expand too much when the application screen area is small.

So, adjusted ScrollViewerContent.Margin when VisualState is NavigationViewMinimal.

Other information

Before
After

Quality check
Before creating this PR, have you:

[x] Followed the code style guideline as described in CONTRIBUTING.md
[x] Verified that the change work in Release build configuration
[x] Checked all unit tests pass

Hello,
Thanks for this contribution. :)
I see that there is a similar bug with the Compact mode:

Any chance we could fix it in this PR too? I admit I didn't investigate what the issue, but please let me know if you want some help with it. :)
Thank you very much again! :D

Hello!
I have fixed the bug in compact mode as I have confirmed that it occurs!

Before
After


Cow: Watch onlineconverter.com

Cow requests the watch of the watch_keyword onlineconverter\.com. See the MS search here and the Stack Exchange search in text, in URLs, and in code.

onlineconverter\.com has been seen in 2 true positives, 9 false positives, and 1 NAA.

Rejected by VLAZ in Charcoal HQ. Reason: 'I don't think it's spam. There are 18 hits for the site already. It's already a well-known (or at least well-SEO'd) long-established site. It's at least 6 years old (oldest hit on SE is from 2018). I've frequently come upon it when searching how to do unit or currency conversions. But it also supports some file type conversions.'