Version flag outputs to stderr instead of stdout

Issue:
When using --version flag Chatterino outputs version info to stderr instead of stdout. Most other programs output their version info to stdout (like git for example). In Chatterino's case I need to redirect stderr to stdout to catch the output in a variable. Probably not intended?
Reproduce:
┌─[is2511@mainPC]─[~]
└──╼ $V=`chatterino --version 2>&1`; echo "Var: $V"
Var: Chatterino 2.3.2 (commit 80506a862)
┌─[is2511@mainPC]─[~]
└──╼ $V=`chatterino --version`; echo "Var: $V"
Chatterino 2.3.2 (commit 80506a862)
Var:

OS and Chatterino version:
OS: Linux mainPC 5.10.0-6parrot1-amd64 #1 SMP Debian 5.10.28-6parrot1 (2021-04-12) x86_64 GNU/Linux
Chatterino: Chatterino 2.3.2 (commit 80506a862)

We're using native Qt category logging, which uses stderr instead of stdout.
I believe I had a discussion in Twitch chat about version information using Qt categorized logging after we've introduced it (in #2206) and I personally think that it shouldn't use those categories, but I thought it didn't matter at all - now I see that maybe it's worth fixing :+1:

Does it matter?

Does it matter?

I mean yeah, for scripting and stuff. Beginners would struggle to figure out this issue. It's inconvenient. Worth a fix imo.

Does it matter?

I mean yeah, for scripting and stuff. Beginners would struggle to figure out this issue. It's inconvenient. Worth a fix imo.

If there's any standard we're missing let me know and I'll consider it a bug, for now I'm just considering this to be intended behaviour. "scripting and stuff" doesn't cut it to make a change for me.

If there's any standard we're missing let me know

Are you aware of any other application that also outputs version information to stderr instead of stdout?

necro bump:
Basically, I didn't want to make an exception for --version. I'm doing it anyway since trying to redirect all output loses us Qt's "system logger" logic


Remove processor_path_lzw from TYPO3 v12 additional.php

Is there an existing issue for this?

[X] I have searched the existing issues

Output of ddev debug test
No response
Expected Behavior
Consider removing processor_path_lzw from the additional configuration TYPO3 template for v12 and higher.
The setting was removed for TYPO3 v12: https://docs.typo3.org/c/typo3/cms-core/main/en-us/Changelog/12.0/Breaking-97797-GFXSettingProcessor_path_lzwRemoved.html
I guess the setting does not harm anything in TYPO2 v12 if it will stay there, but maybe there is an easy way to use different templates per TYPO3 version.
Actual Behavior
In TYPO3 v12 setups the option exisits in config/system/additional.php
Steps To Reproduce
No response
Anything else?
No response

@gilbertsoft what do you think about this?

@gilbertsoft what do you think about this?

Yeah, valid of course. Will take care, but does not harm at the moment. Thanks for the hint @peter-neumann-dev .

Per above:

I guess the setting does not harm anything in TYPO2 v12 if it will stay there, but maybe there is an easy way to use different templates per TYPO3 version.

I'm going to go ahead and close this for now, happy to continue the conversation here or elsewhere.


feat: accept -repeat 2 input

a lot of times cutechess users would do -repeat 2 instead of -repeat, this patch now treats both of them as the same instead of throwing a parsing error
already tested it, works 👍

hmm how do i check if argv[i] is a number?

bool is_number(const std::string &s) {
    return !s.empty() && std::find_if(s.begin(), s.end(), [](unsigned char c) { return !std::isdigit(c); }) == s.end();
}

is_number(argv[i])
hmm this doesnt seem to work if i just specify -repeat without any additional inputs

void parseRepeat(int &i, int argc, char const *argv[], ArgumentData &argument_data) {
    try {
        parseValue(i, argc, argv, argument_data.tournament_options.games);
        if(!is_number(argv[i])) throw std::runtime_error("");
    } catch (const std::exception &e) {
        argument_data.tournament_options.games = 2;
    }
}

Ah might have to be i +1. what is argv of i there?

Ah might have to be i +1. what is argv of i there?

ah yes, argv[i] seems to be "-repeat"

fixed 👍


Formatter: Improve handling of syntax errors

The current user-facing messaging for syntax errors encountered during formatting are not friendly and are significantly worse than the linter's. The error should be normalized into a message instead of using the debug representation of ParseError
e.g.
Line number not included (existing issue):
error: Failed to format commands/liberrors.py: source contains syntax errors: ParseError { error: UnrecognizedToken(Name { name: "THE_INVALID_FILE" }, None), offset: 208, source_path: "<filename>" } 157 files left unchanged
Cell number not included in notebook errors
error: Failed to format course/videos/domain_adaptation.ipynb: source contains syntax errors: ParseError { error: UnrecognizedToken(Rpar, None), offset: 70, source_path: "<filename>" }
The previous error is much nicer via the linter
error: Failed to parse course/videos/domain_adaptation.ipynb:cell 9:1:71: Unexpected token ')'

I can fix these.

It'd also be nice to exit with a specific code if we only fail due to syntax errors rather than some sort of other failure :) that way we can report it nicely in the ecosystem checks instead of treating it as a failed run of Ruff.


Problem with Sherlock Holmes

When you enter sherlock holmes either the image doesn't appear or the Time crashes. I am using Google Chrome Browser on Desktop.
Seems like the problem is with Trakt images not being able to show up. When I tried to access the image http://image.tmdb.org/t/p/w342/624zSip1AETVlHSeisv6GOutxdV.jpg it shows up Error 1001

hmmm, everything seems working now, @tacticurv. How about close it, @alexcican?


Resistors of voltage divider for battery measurement

I am wondering why those resistors have the value 232R.
Does it really matter or does this have a special reason?
Or can I take also 220R or 270R?

As long as both have the same value its fine. The lower the value the more power is wasted. Don't know why I chose those in the past and not a few kilos.

Ya ok so for the time the battery is measured current flows and is basically wasted... As far as I can see about 9mA for 500ms.
So 100k like the others used on the opamp circuit would also be fine? Should then be about 21uA.

Just tested with my V2 dev devices, works like a charm, measurement are equal. so I am just using 100k now...

It's a trade off.
Higher value resistors mean lower power draw, but they are more susceptible to noise, causing a fluctuating or inaccurate measurement. Also with higher value resistors one need to wait a short while for the internal ADC capacitors to charge up before doing the measurement.
With lower value voltage divider resistors, the ADC cap charges up quicker, and it's less susceptible to noise, but the power draw is higher.
What one would normally do is to connect the Bat-/GND side of the divider to a low side switch (PMOS), or just to a GPIO pin. In idle mode switch the MOSFET off, pull the GPIO high, or make the GPIO high impedance. That way there is no current flowing when you are not making a measurement. Only when a measurement is done, switch the voltage divider on, wait a millisecond or two, then do the measurement, before switching it off again. In this case one can use smaller resistors to get a more accurate reading, while not wasting power in idle mode. The trade off is a higher component count (if you use a MOSFET), or a extra GPIO used.
Some info here: https://electronics.stackexchange.com/questions/546121/placement-of-mosfets-in-switchable-voltage-divider-for-voltage-measurements

Thanks for further explaining, that is how it is done on the LoFence, BAT GND is on an GPIO and switched on when measuring the battery power.
I switched to 100k on my current V2 prototypes and two are in the wild now and performing pretty well, so I think I'll stick to 100k.
The measurement time is 500ms, I did not change that from the original firmware because it seemed appropriate.
Thinking about it a bit further you mentioned charging time of the ADC caps, but the imeplemtation uses ADC in free running mode and reading the value when the ADC triggers and as far as I understood the datasheet that happens when a measurement is complete, so does this really matter? If the caps charge slower does and individual measurement of the ADC not just take a little longer and using hight resistors results in fewer triggers or the ISR method during the measurement period?
But with noise you are right but it seems to have very little influence in this case...

BTW the main reason I asked was because 232R is a strange value and has a bad availability at the assembler and also costs a lot more...


Set default values to a secure value - API

All default values should comply with a security baseline, e.g. NIST 800
The build-in policies of Azure can be used as a reference.
The task would be to scan over each of the following policies and make sure, that the module is per default complying to them.
The following policies are the NIST 800 ones:
\built-in-policies\policyDefinitions\API for FHIR\HealthcareAPIs_EnableByok_Audit.json
\built-in-policies\policyDefinitions\API for FHIR\HealthcareAPIs_PrivateLink_Audit.json

I just migrated this issue from CARML. However, as the module is orphaned, triaging it may take a while...

Hey @arnoldna, thanks for checking. I guess that means this issue can be closed 'As not planned' ?

Currently not planned.


Frontmatter Parsing (gatsby-mdx support)

Issue opened to keep an eye on this as it develops. It may ultimately be a feature in Gatsby-MDX.
https://github.com/ChristopherBiscardi/gatsby-mdx/issues/352

This conversation is still ongoing but I've yet to see any working solutions mentioned elsewhere. Continuing to keep an eye on it as I'm thinking the current way is probably causing slow build times.
Discussion:
https://github.com/gatsbyjs/gatsby/issues/18570


Demo Application

Build a demo application based on http://rackerlabs.github.io/canon/demos and Mailgun's Canon usage. This will help us identify differences and gaps between Canon and our Bootstrap skin.

Curious how far along is this? I just started up the dev enivro for the first time and was expecting some pages like this in there. I just see a basic lorem ipsum text page.

I think there's something at /demo but it is a but out of date. I'll try and get docs and demo in the next few weeks.


Implemented handling of current intensity values at national level

Fixes #9

Changes made - just need to fix the parsing for National

Changes made - just need to fix the parsing for National
It is a bit annoying the way clap handle the default value, sorry for getting you into this 😞

I get why it needs a value that is Display, as it's showing the default value in the help message...but it doesn't make much sense to me (but I'm a noob) that clap is parsing the default value's display()/string again.
Although they mention this in the docs somewhere IIRC  - something about display value needing to "survive the round trip" (I'm paraphrasing) - but I can't find the place where I see this right now.
Just odd, in an ideal world default_value_t would just skip the parsing altogether and use the provided value (that was my interpretation of how it worked, but clearly not!)

thanks for the review and suggestions @xoen


When I run the xdp example, I report an error : libbpf: Kernel error message: virtio_net: Too few free TX rings available

My example runs in the Ubuntu virtual machine， and compile is ok.
I search from google ，get an answer ： Number of queues on the tap device needs to be 2 * Nvcpu。
But，I donot know how to set。

I think you should try something like ethtool -L eth1 rx N tx N before tring your code again, where N is 2*Nvcpu, eg. 2 if you have 1 core allocated to the VM: ethtool -L eth1 rx 2 tx 2

can you share your code, when loading XDP prog, it need the interface name (which you can get from "IP address") and load mode (that is defined in xdp::Flags)


Does the current existing code support non-teacherforcing training?

I am trying to implement reinforcement learning (e.g. REINFORCE or self-critical) that needs sampling from the model. Different from RNN/LSTM, because of self-attention, a currently generated word depends on all the previously generated words that I believe such an operation consume a lot of memory (leads to OOM) through both for loop and tf.while_loop (such as the one in beam_search).
I wonder does the current existing code support non-teacher forcing training?

It does not currently.


Add ng-bootstrap

Hi I am interested to add ng-bootstrap.
I also tried as well to add it. I am really interested to contribute in this amazing project.

@sadiqhabib Thanks for your message!
If you'd like to contribute ng-bootstrap support you generally would have to add ng-bootstrap as an optional dependency and implement a new component and a new template to the DynamicFormsBootstrapUIModule. Please also see CONTRIBUTION GUIDE.

I Created new branch according to  CONTRIBUTION GUIDE now I am trying to import ng-bootstrap inside ui-ngbootstrap module. But now I am getting problem to lint this module.
ui-ngbootstrap/src/ui-ngbootstrap.module.ts[4, 27]: ' should be "
'lint:modules' errored after 2.07 s
Error in plugin 'gulp-tslint'
Message:
    Failed to lint: ui-ngbootstrap/src/ui-ngbootstrap.module.ts [4, 27]: ' should be ".

Can you please tell me where is the problem.
Thank you

@sadiqhabib Please don't add a new module. You better extend the current ui-bootstrap package by adding

DynamicFormNGBootstrapComponent
DynamicFormsNGBootstrapUIModule
ng-bootstrap as optional dependency to package.json

Your lint error is self-explaining: you're using single quotes instead of double quotes.

@udos86 Thank you for guiding me. Now I added files as you defined above. But now I an getting problem to start example. it is related to template parsing but until now i did not edit any template. Can you please tell me what I am doing wrong.
Thank you

@sadiqhabib Sorry, from afar it's impossible to tell what's wrong. Remember that after building the modules via npm run build:modules you also need to import your new NgModule into the AppModule in order to run it in the example.


v7 Having a seed that is not an integer on a dimension causes crash.

crash-2019-05-25_17.10.24-server.txt
I have a dimension that is loaded on world creation and the configs for that world have a world seed "PixelmonHollows".
 If I change the seed to "1" I no longer get a crash. This happens whether I have writeDisabled on or not.
This issue only seems to occur for dimensions. If I create a world that has a non integer seed it loads fine.

Thanks for reporting, fixed in v7_r25 :).


Not being prompted for the admin download so i cant pair my controllers

I need the admin version of the service to pair my controllers but its not Prompting me for it please help

right click on "PSMoveService.exe" and select "run as administrator"


Option to disable default event popup

Is there any option to disable default event add and event details popups ?

Opening add/edit modal in considered a "cell action". So does this solves your case? https://codesandbox.io/s/custom-cell-action-n02dv
Opening a details popups has no controll from outside right now, unless the event is disabled

ok


Can I make login with this lib?

When I say loggin, I'm speaking about user login, and not with a bot. Like using my token instead the bot's token

No, and won't be supported

No, and won't be supported

When I say loggin, I'm speaking about user login, and not with a bot. Like using my token instead the bot's token

That would be against TOS.

When I say loggin, I'm speaking about user login, and not with a bot. Like using my token instead the bot's token

That would be against TOS.

@thetayloredman Today exist a lib that can do this and I guess is totally legal.
discord.js
https://discord.js.org/#/
But use JS and I'm dart developer, is more easy to me make things with dart then js...

@thetayloredman Today exist a lib that can do this and I guess is totally legal.
discord.js
https://discord.js.org/#/
But use JS and I'm dart developer, is more easy to me make things with dart then js...

@Katekko no, logging as user is against TOS and always will be. Anyways keep conversation in topic. That's not place for that.

@Katekko no, logging as user is against TOS and always will be. Anyways keep conversation in topic. That's not place for that.


Existing User Should Not be able to Request Access

Describe the bug
An existing user is currently allowed to request access to a different organization.
To Reproduce
Steps to reproduce the behavior:

Click "Request Access"
Complete the form with the email address of an existing user.
The request is completed. It should be blocked.

Expected behavior
Error message: "It appears you already have an account. If you have forgotten your password, click 'Forgot Password' on the Login page."
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):

OS: [e.g. iOS]
Browser [e.g. chrome, safari]
Version [e.g. 22]

Smartphone (please complete the following information):

Device: [e.g. iPhone6]
OS: [e.g. iOS8.1]
Browser [e.g. stock browser, safari]
Version [e.g. 22]

Additional context
Add any other context about the problem here.

Closed by https://github.com/CrisisCleanup/crisiscleanup-3-api/commit/414947c992009a72988bc5fdc622d8aa9c163654

This is not complete.

Go to https://app.dev.crisiscleanup.io/request_access
Target email is<EMAIL_ADDRESS>Email if new user is<EMAIL_ADDRESS>(note case)
The request should be blocked, but is allowed.

Also note: a request to<EMAIL_ADDRESS>(note case) fails, because the search is apparently case sensitive. The search should not be case sensitive.
When comparing email addresses, make them both lower case, and trim them. Adding a trailing space (which is default behavior for many cell phone keyboards) also leads to a failure.

One important amendment. An existing user should be able to request access to a DIFFERENT organization. If approved, it is treated as a transfer, which is apparently the existing behavior. I have to double-check this is the case on staging.

Quick question, are you writing tests for each issue?

Closed by https://github.com/CrisisCleanup/crisiscleanup-3-api/commit/639c37686a4b681fe6d29c6f7284da63df8ca2c7

This issue is not quite complete, because error handling is incorrect.

Go to https://app.dev.crisiscleanup.io/request_access
Request access to<EMAIL_ADDRESS>as<EMAIL_ADDRESS>Complete the form.
You get a 500 error, "Uh, oh..." This is incorrect. You should get an error, "This email address already has an account. To move organizations, log in and click Profile under your name. Then click the 'Change or Move Organizations'."
Now do exactly the opposite. Request access to<EMAIL_ADDRESS>as<EMAIL_ADDRESS>Complete the form.
Although you should get the same "This email address already has an account..." error, instead you get the error, "This account has an invitation pending."
This is wrong for two reasons: 1. A pending invitation should NOT preclude someone from requesting access. 2. The user has an existing account, and should not have any pending invitations.

We should also limit Request Access tries to three before imposing a wait limit of 5 minutes.

@aarontitus Can you try again without using demo user (admin demo is fine) as per our discussion in #709 ?

Although you should get the same "This email address already has an account..." error, instead you get the error, "This account has an invitation pending."
This is wrong for two reasons: 1. A pending invitation should NOT preclude someone from requesting access. 2. The user has an existing account, and should not have any pending invitations.

The pending invitation was pre-existing behavior. Because I was also testing with admindemo and such, I am going to delete invitations for them so you can test with a clean slate (just in case0.
So would you like me to remove the invitation pending check? This would effectively allow a user to send multiple requests to the same user/org.

@BradenM

The system SHOULD check for any existing entries in user_invitations_requests. If the person has requested an invitation, they should not be allowed to request another invitation. Is that the check that is currently happening? If so, then we should update the error message to read, "You have already requested access to an existing user. They must reject your request before you may make another request." I will update the localizations.
An invitation should not preclude a new user requesting access to another user. This appears to be the case. No problem.
However, if Alice invites Bob, then Carl invites Bob, then Bob requests access from Dan: Bob should have two invitations and one request_invitation. When Bob activates one of the invitations, then the other two invitations/ request_invitations should be marked as rejected by Bob.

Currently, if Alice invites Bob, then Carl invites Bob, Bob only has one invitation in the database marked as "created_by" Alice, but updated_by Carl, and for Carl's organization. This part needs to be fixed.

Ah, gotcha.
Okay, users should now be able to receive multiple invitations, and any outstanding invitations are rejected once they accept one.
See Video
Note that although it isnt portrayed well, the second invite's accepted status is changed from NULL -> False
For request invitations, I updated it to allow a user to make multiple requests as long as they are to different users. If they try to make a request to the same user (before it has been rejected/accepted), they will receive the 'pending invite' error.
See Video
If you want to update the "pending invitation" localization, its here:
https://github.com/CrisisCleanup/crisiscleanup-3-api/blob/9f3b93f8e633afc402b42740707ad5373b4586fa/crisiscleanup/users/serializers.py#L523-L527

@BradenM The only concern I have with allowing users to request multiple invitations to the same organization (but different users) is that their names will appear multiple times in the "Current Requests" section of "Invitation Management"
Possible Solutions:

Allow users to make multiple requests to different users within the same organization, but only show one in "Invitation Management," then invalidate all of them as soon as one is accepted.
Do not allow users to make multiple requests unless the requests are to users from different organizations.
Do not allow users to make multiple requests as along as a pending, unresolved request_access exists.

Which do you prefer?

Ah good catch. I will add a check to ensure the users are in different organizations.

@BradenM This is still not complete.
I attempted to request access to<EMAIL_ADDRESS>(organization_id = 12) AS<EMAIL_ADDRESS>(organization_id = 89). This results in a success message, but did not result in any pending requests. However, it should have resulted in a failure message for two reasons:

<EMAIL_ADDRESS>already has an account. Consequently, this should fail.
After thinking about it further, it does not matter that the request came from a user in different organizations. If the user wants to change organizations, they need to log in and go through the entire process to change organizations. They are not authenticated, so a malicious user could (in theory) move users without permission. Also, the process to move organizations is quite complex and cannot be done here.

Closed by API#311

@BradenM This is not complete. In the original use case:

Click "Request Access"
Complete the form with the email address of an existing user.
The request is completed. It should be blocked.
Returns the error, "You have already requested access to an existing user. They must reject your request before you may make another request." It should read,
"It appears you already have an account. If you have forgotten your password, click 'Forgot Password' on the Login page."
By the way, I spent WAY too long trying to track down the error message, which I know is not translated. Where is it? Is it on one of your local branches?

3.) The request is completed. It should be blocked.

Unsure what you mean by this. In the image, it appears the request is not being completed and the error message is showing?
Just tried it to double check and it seems to be working fine (that is, NOT creating a new request.)

Returns the error, "You have already requested access to an existing user. They must reject your request before you may make another request." It should read,
"It appears you already have an account. If you have forgotten your password, click 'Forgot Password' on the Login page."
By the way, I spent WAY too long trying to track down the error message, which I know is not translated. Where is it? Is it on one of your local branches?

:grimacing: Well... it actually is translated... and it comes from the Api, which is likely why you couldn't find it.
Here is exactly where the error message is translated:
https://github.com/CrisisCleanup/crisiscleanup-3-api/blob/master/crisiscleanup/users/serializers.py#L628-L634
Translation key: "info.no_request_access_existing_account"
Since it seems the localization key was the only issue, I've opened a separate issue here: API#351


rejects.toThrow compares only against the message, not the error object

🐛 Bug Report or Feature Request
Unable to match on the object of the error of the rejected promise.
To Reproduce
await expect(axios(badUrl)).rejects.toThrow()

Expected behavior
Being able to access the error object and match on its objects.
await expect(axios(badUrl)).rejects.toThrow( (error) => error.reponse.status === 404)

Essentially I want to do this but without ES Lint yelling at me:
 try {
      await axios(url);
    } catch (error) {
      expect(error.response.status).toBe(404);
    }

Hey @dankolesnikov!
This is not a bug with Jest.
There are multiple ways you could access the error object in an async test:
For example..
test('should catch 404', async () => {
  expect.assertions(1);
  await axios('https://google.com/test404').catch((error) => {
    expect(error.response.status).toBe(404);
  });
});

Or...
test('should catch 404 (2)', async () => {
  expect.assertions(1);
  try {
    await axios('https://google.com/test404');
  } catch (error) {
    expect(error.response.status).toBe(404);
  }
});

Note that the expect.assertions(1) is important when testing promises and/or making assertions inside a catch block. Jest has a nice documentation page on async testing where you can read more about this.
But you should also think about what is your responsibility to test. Generally, a good rule is not to write tests that verify the internal workings of external libraries. Because in this case, axios already have tests themselves verifying that it rejects the promise when a server returns a 404 or similar error response.
In the future, I would recommend asking for help on stackoverflow before creating an issue on GitHub. There are many more people who can help there. And it also makes the answer more easily available to others who might have the same or similar questions.
✌

I agree that one can work around this but the jest expect package appears to throw away the thrown error, keeping only the message. This leads to counter-intuitive behavior like the OP's or .toEqual(new MyHttpException(500, "b0rked")) accepting new MyHttpException(999, "b0rked")

It looks like the prob is that anything that is instanceof Error gets oversimplified:
class Orphan {
    constructor(public status: number, public message: string) {}
}

class Child extends Error {
    constructor(public status: number, message: string) {super(message);}
}

const o1a1 = new Orphan(1, "a");
const o1a2 = new Orphan(1, "a"); // o1a2 == o1a1
const o2a = new Orphan(2, "a");  // o2a.status != o1a1.status

const c1a1 = new Child(1, "a");
const c1a2 = new Child(1, "a");  // c1a2 == c1a1
const c2a = new Child(2, "a");   // c2a.status != c1a1.status

test("pass async Orphan equals Orphan", () => {expect(o1a1).toEqual(o1a2);})
test("fail async Orphan equals Orphan", () => {expect(o1a1).toEqual(o2a);})
test("pass async Child equals Child", () => {expect(c1a1).toEqual(c1a2);})
test("fail async Child equals Child", () => {expect(c1a1).toEqual(c2a);})

should pass, fail, pass, fail, but instead the fourth passes.

Hello, I was facing the same problem. I solved it using the .toMatchObject method, which compares the whole object received. For custom errors it fits well, what do you guys think?
Try the following example:
class MyCustomError extends Error {
  constructor(public message: string, public customProperty: string) {
    super(message)
  }
}

test('Custom errors', async () => {
  const err = Promise.reject(new MyCustomError('Some Error', 'some value for my property'))
  await expect(err).rejects.toMatchObject({ message: 'Some Error', customProperty: 'other value for my property' })
})

It returns:
expect(received).rejects.toMatchObject(expected)

- Expected  - 2
+ Received  + 1

  Object {
-   "customProperty": "other value for my property",
-   "message": "Some Error",
+   "customProperty": "some value for my property",
  }

Nice! I played around with it a bit more and it turns out you need toMatchObject something which is NOT an Error:
const err = Promise.reject(new MyCustomError('Some Error', 'some value'))
await expect(err).rejects.toMatchObject(new MyCustomError('Some Error', 'other value')) // passes
await expect(err).rejects.toMatchObject({ message: 'Some Error', customProperty: 'other value' }) // fails

I recall this being because TS compiles Errors to something odd (at least before ES2015). I remember commenting on an issue or an SO to that effect but can't find it now.
I expanded my earlier tests (and fixed some labels) using your technique:
// Orphans and Children from two comments back
test(" pass       Orphan==Orphan",      () => {expect(o1a1).toMatchObject(o1a2);})
test(" fail       Orphan==Orphan",      () => {expect(o1a1).toMatchObject(o2a);})
test(" pass       Child ==Child ",      () => {expect(c1a1).toMatchObject(c1a2);})
test("!fail       Child ==Child ",      () => {expect(c1a1).toMatchObject(c2a);})
test(" fail       Child ==Child'",      () => {expect(c1a1).toMatchObject(Object.assign({}, c2a));})
test(" fail str(Child)==str(Child)",    () => {expect(JSON.stringify(c1a1)).toEqual(JSON.stringify(c2a));})
test(" pass async Child==Child ", async () => {await expect(Promise.reject(c1a1)).rejects.toMatchObject(c1a2);})
test("!fail async Child==Child ", async () => {await expect(Promise.reject(c1a1)).rejects.toMatchObject(c2a);})
test(" fail async Child==Child'", async () => {await expect(Promise.reject(c1a1)).rejects.toMatchObject(Object.assign({}, c2a));})

  ✓  pass       Orphan==Orphan (3 ms)
  ✕  fail       Orphan==Orphan (5 ms)
  ✓  pass       Child ==Child
  ✓ !fail       Child ==Child  (1 ms)
  ✕  fail       Child ==Child' (1 ms)
  ✕  fail str(Child)==str(Child) (2 ms)
  ✓  pass async Child==Child  (1 ms)
  ✓ !fail async Child==Child
  ✕  fail async Child==Child' (1 ms)

The '!'s flag the non-intuitive lack of failure caused but TSs special treatment of Errors and its subclasses.


How about a release ?

Hi,
I noticed, the current code is far behind the one already released in beta.
May be do a release ?

@pdt256 I noticed the endpoint url for testing is a bit different for the registered service : https://wsbeta.fedex.com/web-services/ vs https://gatewaybeta.fedex.com/web-services/
Do you have any idea if endpoint is changed or not ?


hotfix: tag name for version v0.23.1

Description
Cannot install latest stable using tap. Git fails to find master tag.
Type of Change

[x] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] Dependency update (updates to dependencies)
[ ] Documentation update (changes to documentation)
[ ] Repository update (changes to repository files, e.g. .github/...)

Checklist

[ ] My code follows the style guidelines of this project
[ ] I have performed a self-review of my own code
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have added or updated the in code docstring/documentation-blocks for new or existing methods/components

Branch Updates
LizardByte requires that branches be up-to-date before merging. This means that after any PR is merged, this branch
must be updated before it can be merged. You must also
Allow edits from maintainers.

[x] I want maintainers to keep my branch updated

I'll merge this, but it will revert itself on the next update.


Updated model runner with new PA interface

May we change the default to a smaller one such as 5000? Currently it consumes a lot of memory(~500G) which may span numa node:
https://github.com/ilya-lavrenov/openvino.genai/blob/00ff935d98a4afe1efd6d7da8238c50505020ede/text_generation/causal_lm/cpp/continuous_batching/apps/throughput_benchmark.cpp#L180

I think it's even better to provide KV space in GBs like in vLLM.
While actual number of KV blocks is compute based on total size and size of KV block


Custom Sort String (LeetCode)

Details
order and str are strings composed of lowercase letters. In order, no letter occurs more than once.
order was sorted in some custom order previously. We want to permute the characters of str so that they match the order that order was sorted. More specifically, if x occurs before y in order, then x should occur before y in the returned string.
Return any permutation of str (as a string) that satisfies this property.
Link to the problem: https://leetcode.com/problems/custom-sort-string/
I would like to use Java language to solve this problem.

/assign


Bug🐞🐞🐞 on /app/sales-invoice

investigate why "Submit this document to confirm" message shows twice (after creation only) and fix.

New Bug!!
- Sales invoice xxx not found.

Other Bug in sales invoice!!!
- Sales invoice not found
>>> on updating sales invoice
https://github.com/zaviagodev/frappe/issues/128

Found this issue again after migrating the script to apps.hosting @Muzmal

found 2 errors on submit Sales invoice @09:25am (BKK time)

--Both error above resolved✅--

Cannot save document after shipping feature have implemented. (happened yesterday around 5.30pm)


Distribution Support Request: Alpine 3.11 arm64

Details of the Distribution

Name of the Distribution: Alpine
Version of the Distribution: 3.11
Package Types

[ ] Deb
[ ] RPM
[x] Tar.gz
Snap - Please file issue in https://github.com/powershell/powershell-snap.  This issues type is unrelated to snap packages with a distribution neutral.

Processor Architecture (One per request): arm64
[x] Required - An issues has been filed to create a Docker image in https://github.com/powershell/powershell-docker: https://github.com/PowerShell/PowerShell-Docker/issues/443
The following is a requirement for supporting a distribution without exception.

[x] The version and architecture of the Distribution is supported by .NET Core.

The following are requirements for supporting a distribution.
Please write a justification for any exception where these criteria are not met and
the PowerShell committee will review the request.

[x] The version of the Distribution is supported for at least one year.
[x] The version of the Distribution is not an interim release or equivalent.

Progress - For PowerShell Team ONLY

[ ] Docker image created
[ ] Docker image published
[ ] Distribution tested
[ ] Update packages.microsoft.com deployment
[ ] Lifecycle updated
[ ] Documentation Updated

You can request for next version based on .Net 5.0 https://github.com/dotnet/core/blob/master/release-notes/5.0/5.0-supported-os.md
Also why do you reference Ubuntu for life support cycle?

Also why do you reference Ubuntu for life support cycle?

Not aware of that, what makes you say that?

The version of the Distribution is not an interim release or equivalent.

This contains a link to Ubuntu site.

This contains a link to Ubuntu site.

That is part of the issue template, I didn't change that.

Please add a link to Alpine support cycle.

https://endoflife.date/alpine

@adityapatwardhan Please investigate the work to get the native components working in this scenario.

@TravisEz13 can you tell what is currently lacking to progress this and https://github.com/PowerShell/PowerShell/issues/14667?
I've cross-compiled PowerShell to Alpine arm64 and was able to build it natively. Maybe I could help speed up some tasks.
https://github.com/panekj/PowerShell/tree/alpine-arm

I need an Alpine arm64 build.
@panekj Can you explain how you built it on Alpine arm64? I'd rather just do it myself while waiting for a release.

Can you explain how you built it on Alpine arm64?

I've cross-compiled PowerShell to Alpine arm64 and was able to build it natively.


updated wording

updated wording
corrected scaling for intensity

Current dependencies on/for this PR:

main

PR #4   👈

This stack of pull requests is managed by Graphite.


Next.js app router

Will there be an example on how to use this with the new app directory?

You can check the nextjs example for reference, it's not open-next dependent. Having said that, check out the end-to-end test PR, it has a basic project: https://github.com/sst/open-next/pull/178/files#diff-424d6b2cbf402c1bda2aec8c13c88514d1444156b932c4d50aabf529f656d00a

You can check the nextjs example for reference, it's agnostic of any platform. Having said that, check out the end-to-end test PR, it has a basic project: https://github.com/sst/open-next/pull/178/files#diff-424d6b2cbf402c1bda2aec8c13c88514d1444156b932c4d50aabf529f656d00a

Thank you


Mount readonly EFI partition to /run/elemental/efi

Mount EFI partition in running system to /run/elemental/efi.
This enable us to move the boot-assessment grub configuration files into the ESP.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (0bf2c64) 73.76% compared to head (b0b7633) 73.79%.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1905      +/-   ##
==========================================
+ Coverage   73.76%   73.79%   +0.02%
==========================================
  Files          71       71
  Lines        7749     7757       +8
==========================================
+ Hits         5716     5724       +8
  Misses       1612     1612
  Partials      421      421

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Protocol state

This should address https://github.com/open-traffic-generator/models/issues/151
View the proposed changes using the redocly API viewer
Code should looks like
import snappi
api = snappi.api(location='http://<IP_ADDRESS>:80')
config = api.config()
p1, p2 = config.ports.port(name='p1').port(name='p2')
d = config.devices.device(name='device', container_name=p1.name)[-1]
e = d.ethernet
e.name = 'ether'
e.mac = '00:01:00:00:00:01'
i4 = e.ipv4
i4.name = 'IPv4'
i4.address = '<IP_ADDRESS>'
i4.gateway = '<IP_ADDRESS>'
b4 = i4.bgpv4
b4.name = 'Bgpv4'
api.set_config(config)

# Current model we start all protocols at the time of start transmit
transmit_state = api.transmit_state()
transmit_state.state = transmit_state.START
api.set_transmit_state(transmit_state)
time.sleep(2)

proto_state = api.protocol_state()
proto_state.names = ['Bgpv4']
proto_state.state = proto_state.STOP
api.set_protocol_state(proto_state)

I think we might also need a per port/global  per protocol start/stop.
e.g.  Say we have 1 port with 1000 devices each having one bgp peer and one isis router/session.
And as a first step , I want to start only all the BGP peers .
If we were to use this API, dont we have to fill in the names of all the BGP peers. ( Since looks like ISIS routers will also be using same API and sending empty string will cause all ISIS routers to be started as well ) .

Don't know if we need to solve 1000 routers use-case right now.  Also, how likely is it that one would want to start all BGP but not all ISIS routers?
If the case is that then can you propose an API that we solves it?

Don't know if we need to solve 1000 routers use-case right now. Also, how likely is it that one would want to start all BGP but not all ISIS routers?
If the case is that then can you propose an API that we solves it?

To start all interfaces and bgp sessions in ports p1 and p2
proto_state = api.globalProtocolState()
proto_state.names = ['BGP','INTERFACES']
proto_stat.port_names= ['p1','p2']
proto_state.state = proto_state.START  ( or .STOP  to stop selected protocols on selected ports )
api.set_global_protocol_state(proto_state)
To start all protocols on all ports
proto_state = api.globalProtocolState()
proto_state.names = []
proto_stat.port_names= []
proto_state.state = proto_state.START  ( or .STOP  to stop all protocols on all ports )
api.set_global_protocol_state(proto_state)
To start only BGP on all ports
proto_state = api.globalProtocolState()
proto_state.names = ['BGP']
proto_stat.port_names= []
proto_state.state = proto_state.START  ( or .STOP  to stop all protocols on all ports )
api.set_global_protocol_state(proto_state)

@apratimmukherjee Approach seems ok.  Some specific questions:

What if I only want to start 'bgp1' and 'bgp2', while I also have 'bgp3' configured.  Again, not sure if we need to support such case and add it to the model right away or not, but would be good to have some kind of clarity on our preferred approach.
Is proto_state.names more appropriately named as proto_state.protocols and proto_state.names used for the specific instances (ie "BGP1", "my-isis3", etc.)?

where are we with this PR?  hasn't got response since early August.  @apratimmukherjee any comment to Ankur's question?  we should incorporate this along with the new protocols model changes to not introduce another round of breakage in behavior.

Agree.  This needs to go in along with the model restructuring.  Once we are at 0.6.1, we cannot do backwards incompatible changes anymore.

where are we with this PR? hasn't got response since early August. @apratimmukherjee any comment to Ankur's question? we should incorporate this along with the new protocols model changes to not introduce another round of breakage in behavior.
Sorry , missed this. I think it is difficult to mix global stop/start with control for individual protocols and start/stop of specific peers or isis/ospf routers. e.g in protocol list you have BGP and ISIS , in proto_state.names we have bgp peer1, bgp peer 3  and in port list we have p1,p2  then will it mean that all isis and 2 bgp routers ?  What if bgp peer1 and bgp peer 3 is on p3 ?  We end up having three sets of data , protocols , ports and specific routers/peers. For me specific peers/routers are probably handled better in a separate API which looks like above. Global protocol  state start/stop can have only protocols/ports and peer/router specific  protocol_state API has only specific peers/routers  and state.  Implementation can choose to support one or both APIs . We can start with any one of them. Start All looks easier to implement. Start specific peer/router is much more complex since we need to start just that and  its children .  Also start /stop /start for specific or peers/routers means that the port will probably first have to store a copy of the full setconfig data so not sure if it can be implemented very quickly. Currently we just transfer the SetConfig data to the daemon and it cleans that on next stop , so next start means we have to hold on to a copy of the SetConfig data. We can implement that but will need some time to create the heirarchial config database.

@ANISH-GOTTAPU @Rangababu-R @ashutshkumr plans to drive this forward?

Closing because this is and opening https://github.com/open-traffic-generator/models/pull/169

tried a test recently for a port monitor scenario, i have 3 ports in test on 2 of them protocols are up and on third one protocols are down on purpose, (bgp not the link) i need to start the traffic with bgp up on 2 ports and down on the third port but i cannot do that because is waiting for all protocols to be up.
how can we star traffic with protocols down ?


[#2090] fix(client): Replace LinkedList with CopyOnWriteArrayList to store the sending status

What changes were proposed in this pull request?
Replace LinkedList with CopyOnWriteArrayList to store the sending status
Why are the changes needed?
Fix: #2090
Does this PR introduce any user-facing change?
No.
How was this patch tested?
CI

CopyOnWriteArrayList is suitable case that read is more, write is less.

CopyOnWriteArrayList is suitable case that read is more, write is less.

I know, I think this scene is suitable.

@xianjingfeng Do you think Collections.synchronizedList could be better?
As ShuffleWriteClientImpl#recordFailedBlocks add all the failed blocks to the list, if we replace to CopyOnWriteArrayList, the recordFailedBlocks performance will get worse as each add will cause new list & copy.
  void recordFailedBlocks(
      FailedBlockSendTracker blockIdsSendFailTracker,
      Map<ShuffleServerInfo, Map<Integer, Map<Integer, List<ShuffleBlockInfo>>>> serverToBlocks,
      ShuffleServerInfo shuffleServerInfo,
      StatusCode statusCode) {
    serverToBlocks.getOrDefault(shuffleServerInfo, Collections.emptyMap()).values().stream()
        .flatMap(innerMap -> innerMap.values().stream())
        .flatMap(List::stream)
        .forEach(block -> blockIdsSendFailTracker.add(block, shuffleServerInfo, statusCode));
  }

I'm not sure this is a read is more, write is less scenario. @zuston If I support Partition split leverage blockIdsSendFailTracker, do you think the problem getting worse that now?

Why not using the synchronized to ensure the safety of race condition ? @xianjingfeng I also concern the performance degression when using the CopyOnWrite

Do you think Collections.synchronizedList could be better?

It not thread-safe when iterating over it. @maobaolong

Why not using the synchronized to ensure the safety of race condition ?

For the job that finally runs successfully, there is at most one element in the list, so I think this performance impact is acceptable.  If you use synchronized, we need to pay attention to thread-safe issues when maintaining this part of the code later. synchronized is ok for me too.

https://github.com/xianjingfeng/incubator-uniffle/commit/35d0cb485c35dbb3bd6b798e2a04091062be3996 This is a solution with synchronized, which I don't think is a good solution. If you think it's OK, I will use this solution. @jerqi @zuston @maobaolong

It not thread-safe when iterating over it.

@xianjingfeng Thanks to share this.
And the following trick can resolve the iterator safe issue.
List<Object> list = Collections.synchronizedList(new ArrayList<>());
synchronized (list) {
    Iterator<Object> iterator = list.iterator();
    while (iterator.hasNext()) {
        // ...
    }
}

For the job that finally runs successfully, there is at most one element in the list, so I think this performance impact is acceptable

I'm just implementing a partition-split feature leverage on blockIdsSendFailTracker, which can invoke the add method frequently than before.
If the existing state add  is invoked in low frequent, I'm ok for this PR and I will resolve the performance down issue in that PR.

Changed to use Collections.synchronizedList @maobaolong @jerqi @zuston


Chore/testing catchup

test albums
- complete tests for album and image creation
- complete tests for pages where album is viewed
- should still do tests on the form and index.html
which is where album is created/ edited
commit 86c3076081787024154bcd22649d99d6e14d10f3
Author: jpwilson<EMAIL_ADDRESS>Date:   Wed Oct 6 17:26:48 2021 -0500
new tests for album
- created basic test for image and album creation
- still need to test the form and templates

commit 23ac8bcb29e5211e8e588dce59b4d34af595661d
Author: jpwilson<EMAIL_ADDRESS>Date:   Wed Oct 6 17:14:46 2021 -0500
clean up tests
- Fix homepage tests (separate into logged in and logged out
    - this should have been done when the LoginRequiredMixin was added
- Create a test album and test its title


Base64EncodedData initializer taking an array slice shouldn't have a label

Base64EncodedData initializer taking an array slice shouldn't have a label.
- public init(data: ArraySlice<UInt8>)
+ public init(_ data: ArraySlice<UInt8>)

API breaking, do for 1.0.

Hi, I'd be happy to take on the task of making this change.

Sure! If you could add the new one, but keep the existing one for now and mark it as deprecated, and we'll clean up the deprecated one for 1.0 later.


Fix intermittent issue where gain may never adjust

I've found in cases where AM reception can disappear and reappear if I hold the radio wrong, gain can get stuck at 0dB and never adjust until the radio is rebooted. The early return appears to be what caused it for me.
I was curious to find out if there was a race condition from running every 10ms but yielded nothing more.

Change included with this commit:
https://github.com/OneOfEleven/uv-k5-firmware-custom/commit/87d1cf7c8685ea9d87cc9964b3f45c2fd8783d82
Thanks for integrating this. I hope others find it helpful.


[Fix][UI Next][V1.0.0-Alpha] fix queue display bug in tenant modal

close #9048

Codecov Report

Merging #9064 (204afa2) into dev (8bb6971) will increase coverage by 0.01%.
The diff coverage is n/a.

@@             Coverage Diff              @@
##                dev    #9064      +/-   ##
============================================
+ Coverage     39.75%   39.77%   +0.01%
- Complexity     4262     4263       +1
============================================
  Files           808      808
  Lines         32551    32545       -6
  Branches       3649     3646       -3
============================================
+ Hits          12941    12944       +3
+ Misses        18381    18376       -5
+ Partials       1229     1225       -4

Impacted Files
Coverage Δ

...dolphinscheduler/remote/future/ResponseFuture.java
81.96% <0.00%> (-1.64%)
:arrow_down:

...e/dolphinscheduler/remote/NettyRemotingClient.java
53.52% <0.00%> (+2.81%)
:arrow_up:

...heduler/api/service/impl/TaskGroupServiceImpl.java
66.97% <0.00%> (+3.49%)
:arrow_up:

Continue to review full report at Codecov.

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


robustats fails to install

pip install gives the error
ImportError: cannot import name 'Log' from 'distutils.log' (/tmp/pip-build-env-hd80agp5/overlay/lib/python3.11/site-packages/setuptools/_distutils/log.py)
reproduce this by:
docker run -it python bash
pip install robustats
Full log in reproduce_pip_install_error.txt
This is probably related to https://github.com/pypa/setuptools/issues/3693

Hey. The error that you get it related to the setuptools library, not the robustats library.

@FilippoBovo I am getting the same issue :
numpy.distutils is deprecated since NumPy 1.23.0, as a result
of the deprecation of distutils itself. It will be removed for
Python >= 3.12. For older Python versions it will remain present.
It is recommended to use setuptools < 60.0 for those Python versions.
For more details, see:
https://numpy.org/devdocs/reference/distutils_status_migration.html
What are the required actions or necessary changes to make this package work with NumPy > v1.23?

@FilippoBovo I am getting the same issue :
numpy.distutils is deprecated since NumPy 1.23.0, as a result
of the deprecation of distutils itself. It will be removed for
Python >= 3.12. For older Python versions it will remain present.
It is recommended to use setuptools < 60.0 for those Python versions.
For more details, see:
https://numpy.org/devdocs/reference/distutils_status_migration.html
What are the required actions or necessary changes to make this package work with NumPy > v1.23?

I have the same problem

Hey, @tmct. I'm unable to keep this library updated. If you need it for your projects, I suggest you to fork the library and maintain your fork.

That's no problem at all - we've replaced our usage of the library with our own weighted median that looks a lot like these. Thanks anyway.


[Post view] [BE] Post deletion API route

Context
Background information relevant to the ticket
Requirements
What you need to implement
Acceptance Criteria
PM

[ ] Product-specific requirements

EM

[ ] Engineering-specific requirements

Designer

[ ] Design-specific requirements

delete API endpoint need to be made? @katsukixyz


Alt+F4 doesn't close powertoys Settings app

Alt+F4 should close the app

Sorry, but it works for me. What version are you using? Any idea why it would not work for you? No Fn key needed? Just thinking out loud...

I can actually recreate this on 0.23.2.
Double clicked on systray to bring up settings.  It seems to work if you don't engage the island (aka titlebar).  second you give focus to the island, it breaks.

Maybe related to this? https://github.com/microsoft/microsoft-ui-xaml/issues/2408

This is annoyting bug

I'm guessing this is not fixed with the new style?

This is still an issue with the new style. Just verified it.

This is an xaml island issue, upgrading to unpackaged winui3 app will solve this.

Still an issue. I have no idea what an "island" is (in computer science), but I can confirm in Win10 21H1 build 19043 that if I just click the tray icon, waits for it to open, alt-tab to the window (which for some reason don't get focus) and then alt-F4, then it closes. If I click in the window with the mouse, alt-F4 is ignored. Even minimizing and then alt-tabbing again, alt-F4 is still ignored.

https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/xaml-islands. Here we're referring to 1 framework hosting another UX framework.  It is how we're getting a modern UX but ability to do lower level stuff that we need access to.
Ultimately, Win10 will still have the issue until we roll the entire settings app to WinUI 3 app which is a requirement for ARM64.  We need 3.1 to provide multi-window and elevation

Ultimately, due to that, we could just dup this against that.  https://github.com/microsoft/PowerToys/issues/6715

This should be fixed with the transition to WinUI 3 work that @ stefansjfw is working on this iteration

just verified this is working correctly now

This got implemented in the 0.58 update.


register error

on mac
auth.listener: Error while trying to register new user blossom Error     at w.<anonymous> (index.browser.min.js:2:487493)     at Generator.throw (<anonymous>)     at a (index.browser.min.js:2:485144) _callee4$ @ auth.listener.ts:117

This issue is not relevant anymore.


Changed array notation from php 5.4 [] syntax to Array() syntax to ma…

Changed array notation from php 5.4 [] syntax to Array() syntax to maintain backward compatibility with 5.3

lowercase array(

Please squash this change into the first commit. If that's too much trouble I can change it on my end.

I'll do that shortly. First time using github so just finding my way around.
From: Steve Clay<EMAIL_ADDRESS>Sent: 30 October 2015 12:40
To: mrclay/minify<EMAIL_ADDRESS>Cc: KimTheFirst<EMAIL_ADDRESS>Subject: Re: [minify] Changed array notation from php 5.4 [] syntax to Array() syntax to ma… (#482)
Please squash this change into the first commit. If that's too much trouble I can change it on my end.
—
Reply to this email directly or view it on GitHub https://github.com/mrclay/minify/pull/482#issuecomment-152512908 .

fixed with #485


Add API Endpoints

It doesn't add much value to the current user experience, but I'd like to take a look at implementing an API through this application. Simple things like:

Get all survivor data for a given season
Get last eliminated survivor
Post or put a survivor into the DB
Get updates from the latest episode? Who was eliminated, who got an idol, etc.

Things like that. This would actually be useful functionality for my website to consume, rather than produce (e.g. auto-update the DB after an episode airs, rather than manually update the DB), but if you need something sometimes you build it yourself.

I haven't done any research, but I've heard of Django DRF, & also Django Ninja. Going to look into the latter first, as it seems newer.


Add screenshot button

Builds on #38 (sry)
Fixes #31

Thank you, @bertsky ! I've used the 'camera-device' icon from the operating system instead of '*'.


Too many reloads

ps -ef seems to show nginx workers get reloaded every time when DNS TTL expires. People would normally set TTL low but this would cause lots of unnecessary reloads even if there is no change. Is it possible to add a check so that if the results from the new lookup matches existing, just update the timer and ignore the new lookup results?

sounds like segment fault

Checked the error_log and that is indeed the case. Filled with those errors:
2016/03/17 21:18:11 [alert] 4378#0: worker process 4403 exited on signal 11
2016/03/17 21:18:17 [alert] 4378#0: worker process 4404 exited on signal 11
2016/03/17 21:18:17 [alert] 4378#0: worker process 4408 exited on signal 11
2016/03/17 21:18:18 [alert] 4378#0: worker process 4409 exited on signal 11
2016/03/17 21:18:27 [alert] 4378#0: worker process 4410 exited on signal 11
2016/03/17 21:18:28 [alert] 4378#0: worker process 4413 exited on signal 11
It seems related to the other module I downloaded from github. Here is how to reproduce:

Download nginx-1.9.12.tar.gz  (I am using Centos 6)
Download the health check module: https://github.com/yaoweibin/nginx_upstream_check_module and apply the patch check_1.9.2+.patch
Download the upstream dynamic servers module: https://github.com/GUI/nginx-upstream-dynamic-servers
configure and compile nginx
./configure --add-module=nginx-upstream-dynamic-servers --add-module=nginx_upstream_check_module
Install and test.

For testing, I added below to the nginx.conf http block:
resolver <IP_ADDRESS>;
upstream pool1 {
  server www.yahoo.com resolve weight=10;
  keepalive 1024;
  check interval=3000 rise=1 fall=2 timeout=1000 type=http default_down=false;
  check_keepalive_requests 360;
  check_http_send "HEAD / HTTP/1.1\r\nHost: www.yahoo.com\r\n\r\n";
  check_http_expect_alive http_2xx http_3xx;
}
server {
  listen 9999 default_server;
  server_name test ;
  location / {
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_set_header Host $http_host;
    proxy_pass http://pool1;
  }
}

Started nginx and I can see the error_log showing crashing every second or two.

Hi @gfrankliu
can you check if this branch solves the problem?
The nginx-upstream-dynamic-servers module was loosing reference to other modules when trying to reinitiate the upstream configuration.

Thanks @wandenberg
It is getting better now. I did:
./configure --add-module=nginx-upstream-dynamic-servers --add-module=nginx_upstream_check_module --with-ipv6

and the config:
    resolver <IP_ADDRESS> ipv6=off;
    upstream pool1 {
      server www.yahoo.com resolve weight=10;
      keepalive 1024;
      check interval=3000 rise=1 fall=2 timeout=1000 type=http default_down=false;
      check_keepalive_requests 360;
      check_http_send "HEAD / HTTP/1.1\r\nHost: www.yahoo.com\r\n\r\n";
      check_http_expect_alive http_2xx http_3xx;
    }

Now it is crashing with different errors if I access the site:
2016/03/21 03:14:14 [error] 2158#0: connect() to [2001:4998:58:c02::a9]:80 failed (101: Network is unreachable)
2016/03/21 03:15:22 [alert] 2157#0: worker process 2158 exited on signal 11
2016/03/21 03:15:22 [error] 2172#0: connect() to [2001:4998:58:c02::a9]:80 failed (101: Network is unreachable)
2016/03/21 03:15:22 [error] 2172#0: disable check peer: [2001:4998:58:c02::a9]:80
2016/03/21 03:15:57 [alert] 2157#0: worker process 2172 exited on signal 11
2016/03/21 03:16:11 [error] 2177#0: connect() to [2001:4998:58:c02::a9]:80 failed (101: Network is unreachable)
2016/03/21 03:17:03 [alert] 2157#0: worker process 2177 exited on signal 11
2016/03/21 03:17:05 [error] 2181#0: connect() to [2001:4998:58:c02::a9]:80 failed (101: Network is unreachable)

I think it is related to https://github.com/GUI/nginx-upstream-dynamic-servers/issues/12
Then I tried without --with-ipv6
./configure --add-module=nginx-upstream-dynamic-servers --add-module=nginx_upstream_check_module

and the config
    resolver <IP_ADDRESS>;
    upstream pool1 {
      server www.yahoo.com resolve weight=10;
      keepalive 1024;
      check interval=3000 rise=1 fall=2 timeout=1000 type=http default_down=false;
      check_keepalive_requests 360;
      check_http_send "HEAD / HTTP/1.1\r\nHost: www.yahoo.com\r\n\r\n";
      check_http_expect_alive http_2xx http_3xx;
    }

Every request to the site still crashes:
2016/03/21 03:32:30 [alert] 4533#0: worker process 4534 exited on signal 11
2016/03/21 03:32:40 [alert] 4533#0: worker process 4543 exited on signal 11

Hi @gfrankliu
I will focus on ipv6 issue later.
Considering only the ipv4 I think there isn't anything I can do to solve the integration problem with ngx_http_upstream_check_module module on nginx-upstream-dynamic-servers side.
As far as I could follow the problem, seems that it only initialize the peer shm pointer on this line and the uniq way to reach this line in through the ngx_http_upstream_check_init_process function.
So, any change on peers list after the worker is running will raise into a problem.
You can suggest to the owner of the module to make the initialization of peer shm pointer on ngx_http_upstream_check_add_peer function.
I didn't tested it but I guess this will solve the problem.
Another suggestion is to reset the peers list every time the peer.init_upstream function is called.

I have opened issue https://github.com/yaoweibin/nginx_upstream_check_module/issues/89 but got no reply so far.
See my comment https://github.com/GUI/nginx-upstream-dynamic-servers/issues/12 regarding IPv6. I think the IPv6 addresses was added by nginx during the very first DNS queries. Though all later DNS queries didn't do AAAA query for IPv6 address, it had already been added, and giving "damage".

It seems there are some new update to the code, so I cloned https://github.com/GUI/nginx-upstream-dynamic-servers.git and tested again:

./configure --add-module=nginx-upstream-dynamic-servers --add-module=nginx_upstream_check_module --with-ipv6
This still fails due to the first DNS query getting AAAA record though "resolver" has "ipv6=off" as discussed in https://github.com/GUI/nginx-upstream-dynamic-servers/issues/12
Even though second DNS query only gets A record, the AAAA from the first dns query stuck in the upstream list, and every time when I curl against nginx, the worker will crash. nginx seems to try to hit that IPv6 addresses from the very first dns query.

If I compiled without ipv6:
./configure --add-module=nginx-upstream-dynamic-servers --add-module=nginx_upstream_check_module
It seems no longer crash when I curl against nginx. I can see the responses from yahoo.

    resolver <IP_ADDRESS>;
    upstream pool1 {
      server www.yahoo.com resolve weight=10;
      keepalive 1024;
      check interval=3000 rise=1 fall=2 timeout=1000 type=http default_down=false;
      check_keepalive_requests 360;
      check_http_send "HEAD / HTTP/1.1\r\nHost: www.yahoo.com\r\n\r\n";
      check_http_expect_alive http_2xx http_3xx;
    }

I then added a second server in the upstream block:
server www.google.com resolve weight=5;
Now nginx worker crashes again every time when I curl a request to nginx.

@gfrankliu as I said before the crash you are having isn't from the nginx-upstream-dynamic-servers.
The problem is on nginx_upstream_check_module that was not designed to have the server/IP list updated.
You will have the same problem compiling the nginx without the ipv6 support.
As I wrote on my last answer on #12, the IPs list are not "updated" it is "replaced" after each change the module detects on DNS answer, so for example, if the list returns one ipv4 and one ipv6 on the first query, and only a ipv4 on the second, the module will change the servers list to have only the ipv4 on it.


Add topic tags

I suggest adding the topics airfoil, cfd in the About section, as explained at https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/classifying-your-repository-with-topics

Thank you.  I added about topics.


Making using the contextual classes on links clearer.

Clean up any confusion using the .badge classes on a link.

Thanks for mention that ... its helpful for us

Eeek, there you go.


Discussion

I am pleased to say that we now have a parallel fork of Atom, which plans to speed up the process of development and improvements. We will release the builds under the atom-community name. The contributions will eventually become available in the upstream atom builds.
https://github.com/atom-ide-community/atom
You can check the projects to see more details about the plan: https://github.com/atom-ide-community/atom/projects
In this repository, we use projects as our backlog and a way to track the changes we make. This will help us allowing the enhancements to be considered for the upstream repository. For example, we plan to include atom-ide packages to our atom-community builds by default.
https://github.com/atom-ide-community/atom/projects

There are a couple of ways we can handle patches.

Treat our work as a series of patches or changes that we continually rebase on upstream master
Have long-lived branches here, which we merge upstream master into continually

(And for completeness sake: if we ever needed to hard fork, we could stop tracking upstream entirely. But I'd really like to avoid doing that, because upstream are our friends in my opinion, and it "reduces the team size" drastically if we have to try to keep Atom running on our own/cut upstream out of the process. And all that without the expertise of long-standing Atom maintainers.)
I'm not sure I strongly prefer either approach.
The long-lived "branches" approach makes us a bit friendlier to contributors here, but we are going to probably run into some really gnarly merges over time.
If we keep our repo rebased on upstream master it makes it easy to focus on upstreaming our work. At the cost of history at our fork being a bit nonsensical, or at least hard to follow. Since we're changing the commit history all the time with rebases. This also raises the question of how/if we keep older states of our fork around. If we use branches/tags for this, it will produce lots of branches/tags and be cluttered (hard to sort through). If we don't the work history for this project is very short-lived, so current maintainers need to be very careful how they merge/rebase stuff.

Short summary: Having long-lived branches here leaves a legible history, but keeping the history legible comes at the cost of potentially difficult merges going forward. Rebasing constantly is simpler for us, but makes it messier or even impossible to look back at this fork's past work.
If anyone has thoughts on this, I'd be interested to hear it.

Having said all that, I'm leaning toward long-lived branches that we merge upstream master into. Keeps the history readable, and I think we can handle the merge conflicts... rebasing isn't immune to merge conflicts either.

Off-topic: It's getting late where I am, so I'm going to sleep. Will take a look at all this tomorrow if I get the chance.

Thank you for the answers. I will reply, once we get more people in.

Added the pull bot to make pull requests from upstream. We should use rebase as long as there are no conflicts. I will need to approve the pull requests it makes, so a human review will happen.

@lkashef @darangi if you have thoughts about this fork, I am also all ears/interested to know what you would have to say.

@aminya I think we can't necessarily expect our pull requests to be gotten to in any particular order. Also, our commit history will have strange stuff like merging their upstream master into our master -- if we open a PR from our master, they would have to accept all of the strange merge commits and essentially this is like them becoming a downstream of us. I don't think it makes much sense unless they "squash and merge" our PRs, which is something I haven't seen them doing.
I think we should give upstream just the commits containing the changes for the PR we are proposing, directly on top of their master branch, and then accept whatever their commit history is into ours by merging (their master --> out upstream_master --> merge into our master).
Open to discussing it more. Just that the underlying git software needs to be capable of it, whatever it is.

@lkashef @darangi if you have thoughts about this fork, I am also all ears/interested to know what you would have to say.
@aminya I think we can't necessarily expect our pull requests to be gotten to in any particular order. Also, our commit history will have strange stuff like merging their upstream master into our master -- if we open a PR from our master, they would have to accept all of the strange merge commits and essentially this is like them becoming a downstream of us. I don't think it makes much sense unless they "squash and merge" our PRs, which is something I haven't seen them doing.

Draft pull requests cannot be merged until marked as ready. We should only mark the first one in the sequence, and that is the only one they can merge.

I think we should give upstream just the commits containing the changes for the PR we are proposing, directly on top of their master branch, and then accept whatever their commit history is into ours by merging (their master --> out upstream_master --> merge into our master).
Open to discussing it more. Just that the underlying git software needs to be capable of it, whatever it is.

The commit history is not important here. The point is to improve the code itself. Although rebasing will keep the history clean.

I'd like to point out something: we can't post more than one PR from our master branch at the same time -- All PRs from the same branch will point to the same commit (the one at the tip).
I think your plan is technically sound, if reviewers at upstream review our PRs promptly and merge them with little/no delay... which considering human factors and the recent pace of the upstream repo is sort of unrealistic in my view. And it verges on bad contributor/maintainer ettiquette to presume our faster rate of development/PRs will be welcome. It is still a maintenance burden to review our PRs, regardless of whether the code contributions are a welcome sight or not.
I don't think we can assume ahead of time that any of our work will be upstreamed, period. Much less in a timely manner. NONE of this is to disparage upstream maintainers, who have my utmost respect. We should have realistic expectations, and a flexible workflow, if we are going to work somewhat independently of upstream but still try to communicate back.
It's easy to just go our own way, at our own speed, but that implies a harder fork than I've been picturing. Short of a hard fork, or a more one-way relationship where we take code we like from upstream and add stuff on top, we need to bake "waiting for review" into our process.

I'd like to point out something: we can't post more than one PR from our master branch at the same time -- All PRs from the same branch will point to the same commit (the one at the tip).

We will make separate branches. That's how we want to release! See the upstream branches, each one is a version:
https://github.com/atom/atom/branches We will do the same. One pull request for each release.

I there we can have stuff that only we want, such as the pullbot config, without posting it in our PRs to upstream?

I will remove the pullbot config. It is saved in the bot when committed for the first time. If there were more things like that, we need to write some code to automate making pull requests instead of doing things the regular way, but I do not think this situation will arise.

I have updated many of the atom/npm packages that are in the atom organization or widely used by atom packages. We should also integrate those into our atom builds. I should register them under a new name for doing that.
A list of those that I remember now:
atom/packages:

status-bar https://github.com/atom/status-bar/pull/236
line ending selector https://github.com/atom/atom/pull/20542
tree-view (tests remaining): https://github.com/atom/tree-view/pull/1341

npm:

underscore-plus: https://github.com/atom/underscore-plus/pull/21
atom-select-list https://github.com/atom/atom-select-list/pull/28
space-pen: https://github.com/aminya/space-pen
atom-space-pen-views https://github.com/atom/atom-space-pen-views/pull/23
etch (WIP): https://github.com/atom/etch/pull/82

We also need to integrate useful community packages as I mentioned in https://github.com/atom-ide-community/atom/projects/4

@DeeDeeG Are you able to edit the projects in https://github.com/atom-ide-community/atom/projects?

No.
I would need to be given some more permissions in this repo's settings, or in the atom-ide-community org settings.

Things I can't do: Edit other people's comments/PRs, open/close other people's issues/PRs, modify anything in the atomcommunity Azure DevOps organization, probably some other stuff.

This should be fixed now.

I'm busy enough with getting this repo started, and I easily lose focus, so that I'm reluctant to modify projects and other meta stuff outside of issues/PRs. Might change if we have larger tasks that are clearly structured, but it's all a little on-the-fly/ad-hoc until things get more situated.
I do like to backtrack and document things after the fact, but a roadmap is a lot to ask for IMO this early on. We are just paving the paths of how we do this thing at the moment.

Yes, once we close #1, we can actually start releasing.

I have a bunch of permissions around the repo now, thanks. :heart:

Moving off-topic conversation from #1 to here.
From https://github.com/atom-ide-community/atom/issues/1#issuecomment-656511353:

the control is in the hands of the community and not the upstream team, which now only has few developers

Yes, that I agree with. It seems you are right. We need freedom, or else, why fork?
A compromise: I will do my best to maintain clean branches of my work (or any work here that upstream probably wants) at my fork. That can be my personal project.
Here at this fork, I will not protest anymore if there are radical changes. Some consideration of "keeping rebases or merges of upstream back to us easy" is prudent and forward-looking, but another reasonable priority can be "not getting stuck." I'll follow your lead on the direction this takes, honestly.
I do have some PRs I did upstream that i'd like to merge here, though. Mostly https://github.com/atom/atom/pull/20856.

I am going to personally look to stop working on CI in favor of features and stuff in the core app.
My priorities for CI:

Simple config (keeps the maintainers of the config from getting confused)
Improvements to CI should be upstreamable, or we should be aware up-front that we are committing to maintaining changes if/when they need fixing)
Reliable.
Doesn't do anything weird that we didn't expect or take up too much of the project's resources.

Upstream's CI laregely checks those boxes for me. I just want to get upstream's CI config working here and move on to working on features.

I am going to personally look to stop working on CI in favor of features and stuff in the core app.

Yes. That is what is important. I will finish CI changes after we merge our open PRs. I do not want us to spend more time on the CI. We have done most of the things that could help us.
Other than those that merged already, we have 5 left:

CI-only improvements:
#46 increases reusability of the steps and makes them parallelizable.
#33 increases the chance of using the cache even if we modify package.json.
#43 cache npm cache
Test improvements:
#31 Speeds up tests (windows and macOS) by a huge amount.
Using latest build facilities:
#44 uses the latest Windows image for building Atom
Easing development:
#10 allows starting atom development right away

After these finished, I will put my focus on bundling packages with atom-community. For the first release, we should at least integrate one package to make atom-community exciting for the users. Saying that we have improved CI does not make any difference to the end-user. I plan to integrate x-terminal and then minimap-plus as our first packages. If you see other repositories on this organization, I have made improvements in those too.

they are interested in the changes.

At the time Mazen commented, the title of that PR was "Parallelize Windows CI", so I intepreted that comment as narrowly being interested in taking the tests that had been running in one job on Windows, and splitting them up into multiple jobs, jut like it's done on macOS.
Upstream is more conservative than us on infrastructure changes, especially from outside contributors. So I had assumed they would have wanted that in whatever minimal-changes way it could be sent upstream as a patch. Without asking for clarification, I suppose I can't say for sure.
Heavy use of templates isn't required in order to split up the tests, for example. So they presumably don't want to accept that and parallelization in one PR.

Upstream CI is not reliable

And neither is ours. The same tests must pass here as there, and they time out. We cannot fix that, as far as I know, without finding a way to ensure individual tests can complete faster. (Which requires troubleshooting slowness in the testing process overall. I also get timeouts locally, not just in CI.)
Though it would be nice for the test run/test job to exit instantly when any required test fails.

They have to run a CI 11 times until it passes.

That was an extreme outlier case. It's in no way representative of the norm for upstream. They usually have to rerun one, two, or perhaps three times. Four or five in a bad case. 11 was a total outlier.
And so would we, if our tests timed out 11 times. Paralellization of Windows x64 reduces the chances of this significantly. So that's good. But I don't expect it will make CI fail infrequently at this fork. Just much faster to finish tests in three parallel jobs, rather than serially in one job, on a good clean run. And also much, much faster to finish the "Re-run failed jobs" follow-up runs. That's good, but let's keep this benefit in perspective. Our CI will need re-runs still, even with this change.
(I don't know if you noticed, but I have been manually re-running failing builds at our fork, to make sure we have fundamentally working code and CI still. But I don't mean to hide the fact that our CI needs re-runs.)

Should we start adding release notes, even for developer-facing changes or CI changes?
Our target audience is honestly those who want to tinker more deeply with Atom and its infrastructure at the moment. Maybe these changes are relevant to our target demographic. Just a thought.

What do you mean by release notes? For the final releases? If so, we will do it.

I mean the last bit of all the PR templates asks for Release Notes. If we turn "auto draft releases" on, then I think those are scraped and added to the draft release for you.

This is really encouraging! Thank you for taking this job on.
There are some outstanding but low-hanging issues with ide-typescript which could give a lot of added value with little effort if they were maintained:

https://github.com/atom/ide-typescript/pull/156
https://github.com/atom/ide-typescript/pull/160

What do you think is the outlook on maintaining ide-typescript or a fork under atom-ide-community?
Thank you again for breathing new life into my favourite editor.

@bennypowers Hi Benny! Why don't you use atom-typescirpt? Actually you can use atom-ide-javascript which sets up typescript as well.
We will look into those PRs, but the packages I mentioned are up to date and under active development.

Treat our work as a series of patches or changes that we continually rebase on upstream master
Have long-lived branches here, which we merge upstream master into continually

Was there ever a resolution to the merging strategy?  @DeeDeeG

@jeff-hykin This was discussed here: https://github.com/atom-ide-community/atom/issues/28, and we came to essentially the same conclusion.
Practically speaking: We have been using plain merges (the kind that generates a merge commit -- no rebase or squash) to bring in updates from upstream master branch lately, and plan to continue to do so.

Speaking from (moderate) experience, I think continually merging in upstream master is the way to go.

Exactly. That's what we found. Rebasing (any force-push) makes a lot of problems for our pull requests.

@jeff-hykin This was discussed here: #28, and we came to essentially the same conclusion.

Great to hear! Sorry I looked for the conclusion but didn't see one.

Also just as an FYI, I'm here because I'm interested parallel work: creating a refresh of Atom. I've used VS Code for many years and contributed a decent bit (I maintain their C++ syntax), but after exploring the VS Codebase and seeing how unmaintainable it is, I've switched back to Atom for good.
A standard IDE interface would be part of the refresh, which is why I'm mentioning this here. I'm curious if you guys are opposed or interested in a re-branded Atom (not an extension, but also not a hard fork).
The main goal is standardization; How can an IDE debugger use a terminal, when it doesn't know which terminal(s) you have? How can a theme customize terminal-colors when there is no standard for a terminals (and no standard terminal)? Even beyond extension-interactions, I think the lack of standardization is killing community maintenance. Looking at terminals themselves; there's platformio (a fork), teminus (a fork of that), terminal-tab using Xterm.js (a fork of term.js used by platformio), and the most up-to-date is a fork of terminal-tab: iv-terminal. Yet platformio is the most common. The community can't update/maintain iv-terminal if they don't even know it exists, and new coder's won't know to pick it over platformio.
However, part of the refresh is UI layout changes, different default settings, extensions, and a reduction of node-gyp dependencies.

That sounds beyond my skill level, personally.  I am invested in making Atom's infrastructure sustainable, and updating dependencies, mostly. Even when that takes substantial care, updating uses of dependencies' APIs, substantial re-writes of sections of code, whatever it takes. I'm interested in keeping Atom modern and just "alive" and current. (Part of my calculation is that upstream is still interested in working on features, but a lot of their work hours are caught up in basic maintenance. I want to ease the burden for maintenance tasks and free up work hours for features and other concerns.) I'm self-taught and not an expert, but I can figure out a fair amount of Atom if I get an evening or two to stare at the code and do research, and read the PRs and past discussion that led to the current code and designs.
That said, part of the work we're doing is to pave the bumps in the road for forks of Atom. A project is healthier when downstream contributors can fork you, run the infrastructure that supports you, and make changes/propose them back to upstream when needed.
If upstream hasn't merged one of our PRs yet aiming to improve the forking experience, we will have the answers for any of the problems we've solved. (For example, we have CI 100% working, if you count remaining open PRs to fix Release Branches and Nightly). Ideally we will have those manual interventions needed written as documentation, and where possible stuff should "just work" at upstream and forks with no intervention, and we will do that if and where there's a readily apparent way to do so. But also, we're so far quite happy to answer the volume of questions we've been getting, which has been low in these early days.
None of what we're doing is proprietary, from the code to the ethos. There is plenty of room for more than one, and even many players in this space. Where there is something of interest to this fork and another fork, I know I'd be interested in that, and out of encouraging the health of the ecosystem, I'd like to put effort into working together. Whether that needs to happen in this repo or another one is IMO kind of down to something more specific than you've mentioned, feature by feature.
I might lean against changing the UI, personally, or adding a lot of features to core, but I think I'm the more conservative about changes among the two of us who have been mainly working on this fork at the moment. And if it can be justified and discussed to come to a consensus, I can be swayed on things. But more specifics would be good before I would want to say yea or nay.
tl;dr I'm open to anything, but there's only so far my expertise will go and so far I can think to go with features and drastic changes before I get a bit skeptical or concerned about it. But I would encourage and support efforts to fork upstream, us, or use code from both upstream and us as a base for new features. We still aim to coordinate with upstream where possible, so I think the right person to ask about a given piece of tech can be looped in to the discussion. If not, hopefully the state we're leaving the ecosystem in is vital enough, and pleasant enough to work on top of, so forking is a fruitful endeavor despite us/without having to ask us anything :P.

Also just as an FYI, I'm here because I'm interested parallel work: creating a refresh of Atom. I've used VS Code for many years and contributed a decent bit (I maintain their C++ syntax), but after exploring the VS Codebase and seeing how unmaintainable it is, I've switched back to Atom for good.
A standard IDE interface would be part of the refresh, which is why I'm mentioning this here. I'm curious if you guys are opposed or interested in a re-branded Atom (not an extension, but also not a hard fork).
The main goal is standardization; How can an IDE debugger use a terminal, when it doesn't know which terminal(s) you have? How can a theme customize terminal-colors when there is no standard for a terminals (and no standard terminal)? Even beyond extension-interactions, I think the lack of standardization is killing community maintenance. Looking at terminals themselves; there's platformio (a fork), teminus (a fork of that), terminal-tab using Xterm.js (a fork of term.js used by platformio), and the most up-to-date is a fork of terminal-tab: iv-terminal. Yet platformio is the most common. The community can't update/maintain iv-terminal if they don't even know it exists, and new coder's won't know to pick it over platformio.
However, part of the refresh is UI layout changes, different default settings & extensions, and a reduction of node-gyp dependencies.

Thanks for the interest. VsCode is taking a closed approach in their codebase and extensions. They don't allow any extension to add any UI which keeps the extensions mostly simple. However, Atom gives the real power of improving the environment to the developers. That's why I think Atom is the superior choice for me.
See these issues. People are seeking simple freedom for adding toolbar, float windows, etc. The things that can be added "very simply" in Atom.
https://github.com/microsoft/vscode/issues/41309
https://github.com/microsoft/vscode/issues/10121
We think we can easily cover the VsCode API by adding wrapper functions, and we have started the atom-vscode package. Since VsCode does not allow adding any UI, having such a compatibility layer will allow any extension to work without adjusting much of the code!
https://github.com/atom-ide-community/atom-vscode
There are plans for standardization. It is undergoing in atom-ide-language-client and atom-ide-base.
I have started with improving the old packages. We can achieve so much just by optimizing and modernizing the JavaScript packages. See this list for example https://github.com/atom-ide-community/atom/issues/4#issuecomment-653903375.
In addition, for the hot parts of the code that we cannot optimize in JavaScript, I plan to use AssemblyScript or Rust to convert them to WASM. I will upload some template packages later.
Regarding the modernization of the native modules, replacing @atom/nsfw with nsfw 2 is in my todo lists (#76 ). I think there are so many modern native modules that we can use right away. We just need to update the API a bit.
Multi-threading is my other big thing. Many things can run in parallel without affecting the main GUI thread. #74
By the way, regarding Terminals, X-terminal is the Atom's best terminal right now and I plan to include in our Atom builds.

Oh I 200% agree with you @aminya about VS Code, I hate their philosophy and I have never stared the repo because of it. When I say standards I only mean defaults or "correct"  ways, but fully maintaining the proactively-hackable nature of Atom.

We think we can cover the VS Code API

That would be a game changer! I hadn't even considered that. Sadly, I don't think it will be easy though, the API is quite large. Some actions use tools that don't exist in Atom by default. But it is doable and a large number of them can be done quite easily.
That's great to hear about Javascript package updates, I've been planning on doing the same.
I 100% agree with the move to WASM. I was actually the first person to get the Tree Sitter running in VS Code with WASM 😅. I want to compile the fuzzy-native to wasm and bundle all the language packs into one repo.

By the way, regarding Terminals, X-Terminal

Thanks! I missed that one.

Also good to hear from you @DeeDeeG Being skeptical is fair, and being open is more than enough for me. Atoms UI style is great IMO and I want to keep that, but some things (like URI handling having an entire tab for 1 setting) don't make much sense at all.

Just for context, the atom-ide-community org here on GitHub has been around for a while, significantly longer than this forked copy of Atom core. There are a lot of passionate and talented people who have been active with that. @aminya and I recently decided to fork atom core and were invited to have access to do so under this org.
I hope that's stating it accurately. Point being, this whole thing is bigger than atom-ide-community/atom. I am active at the forked Atom core (this repo) but others have been digging deeper into the code and writing/re-writing extensions, IDE-related features, etc. for some time now, so they know more about all that than I do.
Whatever happens, I personally want to see that Atom core is in good health and active.

Closing this issue in favor of the brand-new feature of Github, "discussions".
https://github.com/atom-ide-community/atom/discussions/267


Incorrect payment allocation bug

Critical Changes
Changes
Issues Closed
New Metadata
Deleted Metadata

@jbrandolinisf Any thoughts on this PR?


Import error on Windows in py3-ortools 6.4.4495

I've updated py3-ortools in windows 10 from version 6.3.4431 to 6.4.4495 in python 3.6.2 and I cannot import the new version:
from ortools.linear_solver import pywraplp
...
ImportError: DLL load failed: The specified module could not be found.
During handling of the above exception, another exception occurred:
...
ModuleNotFoundError: No module named '_pywraplp'

The same error happens when importing the constraint_solver from ortools.constraint_solver import pywrapcp
The older version worked correctly

I think I updated the compiler from vs2015 to vs2017.
Can you check that you have the redistributable libraries for visual studio
2017 installed?
Laurent Perron | Operations Research |<EMAIL_ADDRESS>| (33) 1 42 68 53
00
2017-09-20 23:33 GMT+02:00 Federico Caselli<EMAIL_ADDRESS>
I've updated py3-ortools in windows 10 from version 6.3.4431 to 6.4.4495
in python 3.6.2 and I cannot import the new version:
from ortools.linear_solver import pywraplp...ImportError: DLL load failed: The specified module could not be found.
During handling of the above exception, another exception occurred:...ModuleNotFoundError: No module named '_pywraplp'
The same error happens when importing the constraint_solver from
ortools.constraint_solver import pywrapcp
The older version worked correctly
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/google/or-tools/issues/487, or mute the thread
https://github.com/notifications/unsubscribe-auth/AKj17YfZSVZ4MD5I4HHnZlKksoLD0Kp4ks5skYSagaJpZM4PegX8
.

Hi, I did not have visual c++ 2017 installed. I've installed from here https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads version 14.11.25325.0, but the problem is still present
I've rebooted after installing the redistributable as requested ( 😒 ) and uninstalled and reinstalled py3-ortools, but the same problem is still there.
Version 6.3 continues to work.
BTW I do not have VSC++ 2015 installed, the only other redistributable I have is, only the 2013 (12.0.30501.0),

I could build a full delivery locally on my windows machine.
Hopefully, everything will be fixed in the next release.
It that release, the dll was mixed and the delivered modules was linked against python 3.5.

Thanks @lperron
I'll update the package once it's available and report back if it solves the issue

I just uploaded it.
Please note that I removed the py3 prefix.
So pip install ortools should work and pull release 6.5
Thanks
Laurent Perron | Operations Research |<EMAIL_ADDRESS>| (33) 1 42 68 53
00
2017-10-02 16:15 GMT+02:00 Federico Caselli<EMAIL_ADDRESS>
Thanks @lperron https://github.com/lperron
I'll update the package once it's available and report back if it solves
the issue
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/google/or-tools/issues/487#issuecomment-333547298,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AKj17emXdXveNuRqyN5emmKH8vRJSmc6ks5soO__gaJpZM4PegX8
.

Version 6.5.4527 is working fine on my system.
Thanks!
As a side note, version is now correctly printed now

Good news :-)
Thanks
Laurent Perron | Operations Research |<EMAIL_ADDRESS>| (33) 1 42 68 53
00
2017-10-02 16:42 GMT+02:00 Federico Caselli<EMAIL_ADDRESS>
Closed #487 https://github.com/google/or-tools/issues/487.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/google/or-tools/issues/487#event-1274164739, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AKj17UIMLilNxhHEJSSFiuAj1IamiUdiks5soPZHgaJpZM4PegX8
.