Missing Steps to generate the client secret for the Client ID registered in ADFS.

In the Document https://docs.microsoft.com/en-us/azure/active-directory-b2c/identity-provider-adfs?pivots=b2c-user-flow#configure-ad-fs-as-an-identity-provider.
After step 8 (for For Client ID, enter the application ID that you previously recorded.) there is no step on how to generate the client  secret for the Client ID registered in ADFS.
Note : Client secret is a mandatory field to update while adding the "+ New OpenID Connect Provider"

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 0e9d8807-22ec-2e19-45f4-974c3c600591
Version Independent ID: 0f6b3876-de54-3295-1947-098eab5be265
Content: Add AD FS as an OpenID Connect identity provider by using custom policies - Azure AD B2C
Content Source: articles/active-directory-b2c/identity-provider-adfs.md
Service: active-directory
Sub-service: b2c
GitHub Login: @kengaderdus
Microsoft Alias: kengaderdus

@Sabhagat-MS
Thanks for your feedback! I've assigned this issue to the author who will investigate and update as appropriate.

Dear @Sabhagat-MS
Thank you for your patience.
If the only request scope is openid, a secret is optional. We've that information in the procedure.
The same info is available in Set up sign-up and sign-in with generic OpenID Connect using Azure Active Directory B2C
Thanks.


Rename setable vars to contain role name as prefix

Hey @pescobar I have renamed the variables that are user setable to contain the role name as prefix ubuntu_pro_ so that we don't run into issues with enabled_services and disabled_services.

thanks @i-mtz !
should I create a new tag or do you want to test master first?

Let me test first, I'm just working on the compute node repos at the moment so should not take much time.


Package: Generate .appsody-config.yaml when creating the project

Checklist:

[x] Read the Code of Conduct and Contributing Guidelines.

[x] Followed the commit message guidelines.

[x] Stack adheres to Appsody stack structure.

Related Issues:
Fixes #215

Please also delete .appsody_config file from python-flask stack as that is a new stack that got merged recently


Fix and test docker & hiroku

Currently docket build and automatic deploy to hiroku is broke.
I also need to setup production staging and dev branches since we’re starting to be useful enough to deploy.

Docker is working great. Closing this. We can open a separate one for hiroku if needed.


Charts UX

fix UX problems as mentioned by Nic

I think this looks really great. Good job, man! It's a lot more user friendly and simpler.
My only suggestions are:
-change "the past week" to "Past week" and "the past year" to "Past year"
-indicate to the user somehow that they can click on each emotion to exclude it from the graph
-I don't know if its possible, but there should be a graph already loaded on the page without needing the user to select options. Its good that the options have default presets, but the graph doesn't actually show until they're clicked.


Review Join GitHub Public Beta User Feedback

User Need
As a Operations Engineering Team
I want to review user feedback from PublicBeta
so that we can understand the users experience with the application and improve the service.
Value
Help with deciding how to Improve the application
Functional Requirements (What):

Review user feedback

Non-Functional Requirements (How):

TBD (will discuss approach with Bryan)

Acceptance Criteria:

[ ] Report on finding from Beta
[ ] Feedback to Team
[ ] We can identify improvements to improve Join GitHub
[ ] We can create new user stories for the associated work

Notes:
<!-- Here's a brief explanation of each field:

Previous [Private Beta Report](https://docs.google.com/document/d/1uVWhTU2NQUSECay9Zi5mX9YxFhHCyAHwSxUdCpwsWIw/edit?usp=sharing)

Reviewed Feedback. Summary of finding and next steps:

Users want SSO
We still have high volumes of request via slack

Actions:

GH Decommissioning will help with a general move to SSO for all users on all orgs. Testing of PoC ongoing
Find out why users are still coming to the Ask Channel. Conduct further surveys.


fix:allow users to identify search is enabled in country dropdown

Description

[!TIP]
Add a TL;DR when the description is longer than 500 words or extremely technical (helps the content, marketing, and DevRel team).
Please also include relevant motivation and context. List any dependencies that are required for this change. Add links to Notion, Figma or any other documents that might be relevant to the PR.

Fixes #Issue Number
or
Fixes Issue URL

[!WARNING]
If no issue exists, please create an issue first, and check with the maintainers if the issue is valid.

Automation
/ok-to-test tags=""
:mag: Cypress test results

[!CAUTION]
If you modify the content in this section, you are likely to disrupt the CI result for your PR.

Communication
Should the DevRel and Marketing teams inform users about this change?

[ ] Yes
[ ] No

Description
Bug : Country dropdown bug
I have raised this PR In-order to allow user to know that , they can search for countries in the country dropdown in CurrencyInputWidget and PhoneInputWidget
Screenshots
a small cursor is blinking before the selected value

Summary by CodeRabbit

New Features

Enhanced dropdown control with improved state management for focus and blur events.
Added new event handlers to better manage property updates and styling.

@saiprabhu-dandanayak can you mention which issue u r working on for this pr?

@marks0351 , https://github.com/appsmithorg/appsmith/issues/34074 this is the issue , i also mentioned it in PR description .

@saiprabhu-dandanayak thanks.
I would suggest you to pick up an issue from our list of good first issues. Also pls do comment on the issue that you want to contribute, to assign the issue to you so that someone in our team is aware of it and can help you run our internal processes to validate a contribution.
For more info pls do check our contribution guide.
cc: @somangshu

@saiprabhu-dandanayak thanks. I would suggest you to pick up an issue from our list of good first issues. Also pls do comment on the issue that you want to contribute, to assign the issue to you so that someone in our team is aware of it and can help you run our internal processes to validate a contribution. For more info pls do check our contribution guide.
cc: @somangshu

@marks0351 , can i know the above mentioned pr is not relavant for the isssue i mentioned is there any other way to do that .


single dwt algorithm location (source code)

I have an existing wavelet denoising function written in python using pywt. Due to some performance requirements  we have moved most of the code over in Rust. One of the last remaining code is the discreet wavelent transform (bior3.9).
My issue is. I am noticing a small difference in my implementation of the wavelets compared to pywavelets results. I have been trying to understand how the wavelet decomposition is implemented in pywavelet. but I cannot seem to find the source code. can any please guide me to the source code where the actual convolution of the wavelet and signal is computed.
thanks in advance.
P.S. I was able to follow till
with nogil:
            retval_a = c_wt.double_dec_a(&data[0], data_size, wavelet.w,
                                <double *>cA.data, output_len, mode)
            retval_d = c_wt.double_dec_d(&data[0], data_size, wavelet.w,
                            <double *>cD.data, output_len, mode)

but I am unable to locate c_wt.double_dec_a implementation.
in case anyone is curious here is the rust implementation
fn wavelet_denoising(data: &mut PyArray1<f64>)-> PyResult<PyObject>{
    let gil = Python::acquire_gil();
    let py = gil.python();

    let dec_lo = vec![-0.0006797443727836989, 0.002039233118351097, 0.005060319219611981, -0.020618912641105536, -0.014112787930175844, 0.09913478249423216, 0.012300136269419315, -0.32019196836077857, 0.0020500227115698858, 0.9421257006782068, 0.9421257006782068, 0.0020500227115698858, -0.32019196836077857, 0.012300136269419315, 0.09913478249423216, -0.014112787930175844, -0.020618912641105536, 0.005060319219611981, 0.002039233118351097, -0.0006797443727836989];
    let dec_hi = vec![-0.0, 0.0, -0.0, 0.0, -0.0, 0.0, -0.0, 0.0, -0.1767766952966369, 0.5303300858899106, -0.5303300858899106, 0.1767766952966369, -0.0, 0.0, -0.0, 0.0, -0.0, 0.0, -0.0, 0.0];
    let rec_lo = vec![0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1767766952966369, 0.5303300858899106, 0.5303300858899106, 0.1767766952966369, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0];
    let rec_hi = vec![-0.0006797443727836989, -0.002039233118351097, 0.005060319219611981, 0.020618912641105536, -0.014112787930175844, -0.09913478249423216, 0.012300136269419315, 0.32019196836077857, 0.0020500227115698858, -0.9421257006782068, 0.9421257006782068, -0.0020500227115698858, -0.32019196836077857, -0.012300136269419315, 0.09913478249423216, 0.014112787930175844, -0.020618912641105536, -0.005060319219611981, 0.002039233118351097, 0.0006797443727836989];

    let dec_len = 20;
    let dec_offset = 0;
    let mut data = data.as_array_mut().to_vec();
    let data_len = data.len() as f64;
    let dwt_max_level : usize = (data_len/(dec_len as f64 -1.0)).log2().floor() as usize;
    let wvlt = wavelet::Wavelet{
        length: dec_len, offset: dec_offset , dec_lo: dec_lo, dec_hi: dec_hi, rec_lo: rec_lo,rec_hi: rec_hi
    };
    data.transform(Operation::Forward,&wvlt,5);
    let (data_bool, sigma) = mad_based_outlier(&data[480..].to_vec());
    let uthresh = (sigma/0.6744897501960817) * ((2.0* (data.len() as f64).ln()).sqrt());
    let mut d1: Vec<f64> = data[0..60].to_vec();
    let mut d2: Vec<f64> = data[60..].iter().map(|x| (x/x.abs()) * (x.abs()- uthresh).max(0.0)).collect::<Vec<f64>>();
    let mut data: Vec<f64> = d1.into_iter().chain(d2.into_iter()).collect();

    data.transform(Operation::Inverse,&wvlt,5);
    Ok(data.to_object(py))
}

and equivalent python code
def wavelet_smooth(x, wavelet="bior3.9", level=1, title=None):
    coeff = wavedec(x, wavelet)
    sigma = mad(coeff[-level])
    uthresh = sigma * np.sqrt(2 * np.log(len(x)))
    coeff[1:] = (threshold(k, value=uthresh, mode="soft") for k in coeff[1:])
    y = waverec(coeff, wavelet)
    return y

Is this for a proprietary implementation? (If so that is fine, just curious to know what all PyWavelets is being used for).
double_dec_a gets created by some templating. The code underlying float_dec_a and double_dec_a is here:
https://github.com/PyWavelets/pywt/blob/b65662ff4f7c33064d584e4b5ffec92bcffd19b2/pywt/_extensions/c/wt.template.c#L318
whereas the actual templating is done via #define / #undefine statements as in:
https://github.com/PyWavelets/pywt/blob/master/pywt/_extensions/c/wt.c
double_dec_a ends up calling another templated function to do the actual convolution:
https://github.com/PyWavelets/pywt/blob/b65662ff4f7c33064d584e4b5ffec92bcffd19b2/pywt/_extensions/c/convolution.template.c#L127
The convolution code ends up being a little hard to read mainly do to all the various boundary handling modes and the fact that it handles edge cases where the filter may be longer than the data, etc.

This is being used in cancer research in a prototype being built in my lab. nothing proprietary.
If you are just curious regarding use case:
My lab is building a prototype which uses fluorescence generated by ultra-fast lasers to detect brain tumor during surgery. We use pywavelets for denoising the signal from the tissue (mostly getting rid of thermal and shot noise prior to averaging multiple pulses)

Thanks for the reply!

My lab is building a prototype which uses fluorescence generated by ultra-fast lasers to detect brain tumor during surgery.

Okay, so you need real-time processing during surgery to guide the procedure? What is the typical image size and frame rate you need to process (I assume this is 2D + time data)? Contact me via email if you want to discuss further, as I don't want to clutter the issues page with an extended discussion here. (I have some prototype GPU-based implementations of various transforms and denoising algorithms that could potentially be of use. I have started looking at means to obtain funding to turn this in to a better maintained public package like PyWavelets, but that is still at the planning stage and part of why I was interested in potential downstream uses for such a package.)


Description meta tag

Provide a description for search engines, they tend to like it.

Coverage increased (+0.04%) to 90.57% when pulling 5ed8eb3d668a1d8c6eaa9dc310e6901c37626ed5 on MartijnCuppens:meta-tag into e825be7c5920a1eb24562c4e027e4997b86f5861 on mochajs:master.

No problem, thanks for the tip!

Thanks!


When is executing action immediately

I don't think I'm using this wrong?
Pseudo:
public BaseValidator<T> {
  protected void AddRule() {
    // only when p.IsTrue
  }
}
public InheritedValidator<T> {
  ctor : base() {
    When(p => p.IsTrue, () => AddRule());
  }
}

MVC is creating instances of my validators (for MVC stuff) and I step through the code and AddRule is being called for every new instance. The code inside the predicate function is never hit, so I have no idea why my action is being executed. It should only be executing the Action when the predicate returns true, right?
Using 5.1 (MVC4).

This behaviour is correct.
All rules are created when the validator is instantiated - even those
wrapped in a When call. The condition you specify is then attached to these
rules.
The rules themselves won't execute unless the condition is met.
On Saturday, May 30, 2015, Kamran Ayub<EMAIL_ADDRESS>wrote:

I don't think I'm using this wrong?
Pseudo:
public BaseValidator {
protected void AddRule() {
// only when p.IsTrue
}
}
public InheritedValidator {
ctor : base() {
When(p => p.IsTrue, () => AddRule());
}
}
MVC is creating instances of my validators (for MVC stuff) and I step
through the code and AddRule is being called for every new instance. The
code inside the predicate function is never hit, so I have no idea why my
action is being executed. It should only be executing the Action when the
predicate returns true, right?
Using 5.1 (MVC4).
—
Reply to this email directly or view it on GitHub
https://github.com/JeremySkinner/FluentValidation/issues/74.

Okay, I just realized that (looking at source). But, the rules are being run and the predicate is still never called (have a breakpoint on it).

Here's a more complete example:
public ProfileValidator : AbstractValidator<Profile> {

    private IRuleOptions<Profile, string> _emailRules;
    private userService;

	ctor(userService) {
    	// initial rules
    	_emailRules = RuleFor(p => p.Email).NotNull();
	}

	protected void EnsureEmailIsUnique() {
	    _emailRules
	        .Must(userService.IsEmailUnique)
	        .WithMessage("That email is already in use")
	        .When(p => !String.IsNullOrWhiteSpace(p.Email));
	}
}

public EditProfileValidator : ProfileValidator {

	ctor(currentUser)
	  When(p => p.Email != currentUser.Email, EnsureEmailIsUnique);
	}
}

In my case, I'm seeing the uniqueness rule execute even though the email is the same (not changed). And the predicate for When is never being hit.

Ok that doesn't sound right. If you could put together a unit test that
reproduces the problem then I'll take a look at it.
Thanks
On Saturday, May 30, 2015, Kamran Ayub<EMAIL_ADDRESS>wrote:

Here's a more complete example:
public ProfileValidator : AbstractValidator {
private IRuleOptions<Profile, string> _emailRules;
private userService;

ctor(userService) {
    // initial rules
    _emailRules = RuleFor(p => p.Email).NotNull();
}

protected void EnsureEmailIsUnique() {
    _emailRules
        .Must(userService.IsEmailUnique)
        .WithMessage("That email is already in use")
        .When(p => !String.IsNullOrWhiteSpace(p.Email));
}

}
public EditProfileValidator : ProfileValidator {
ctor(currentUser)
  When(p => p.Email != currentUser.Email, EnsureEmailIsUnique);
}

}
In my case, I'm seeing the uniqueness rule execute even though the email
is the same (not changed). And the predicate for When is never being hit.
—
Reply to this email directly or view it on GitHub
https://github.com/JeremySkinner/FluentValidation/issues/74#issuecomment-107059640
.

Sure, I can do that.

I don't think this is an issue. The issue was mine. When I tried to write tests, they were all passing. Until I added my bad regex match rule, then tests started to fail... because my regex was bad. Closing!

Great, glad you got it working.
On Saturday, May 30, 2015, Kamran Ayub<EMAIL_ADDRESS>wrote:

Closed #74 https://github.com/JeremySkinner/FluentValidation/issues/74.
—
Reply to this email directly or view it on GitHub
https://github.com/JeremySkinner/FluentValidation/issues/74#event-317944430
.


Nicer landing page

Would it be worth to put some effort into making a nicer landing page (https://guide.esciencecenter.nl/index.html)? Or at least one with somewhat more clear information as to what one can find in the guide, for who the guide is (us, RSEs, PI’s, project members? all?), how one can give input/suggestions, and what the goal of the guide is?

Yes, definitely!
Note that this is the introduction chapter of a book, rather than the front page of a website.

Definitely a great idea. PRs welcome! Since 6,5 years is quite stale as far as issues go, I will close this one now ;)


Update Contributing

Closes https://github.com/casesandberg/react-color/issues/266
@Prinzhorn does this provide enough information to get you started?

I guess. I got the docs running and can change code. That's all I needed.


Pending Queuesize for a Subscriber

check_activemq queuesize-subscriber -clientId -subscribtionname ...
Mix from queuesize and subscriber check.
@r41d let us talk first

implemented as subscriber_pending


Missing API documentation - HasJsonContentType

I couldn't find a new .NET 5 API, HasJsonContentType, in this repo or by searching in docs.microsoft.com
https://github.com/dotnet/aspnetcore/blob/6de6ba907271a652e77c98a262e7ab6409c27930/src/Http/Http.Extensions/src/HttpRequestJsonExtensions.cs#L151
The other new APIs in this file are also missing.
Are new APIs not being added, or could it be that some shipping APIs are being missed?

Being fixed here - https://github.com/dotnet/api-catalog-infra/pull/18


importer: make email validation consistent with backend

Please add a changeset for the importer package and the CLI 😄


pkg/helm: only inject ownerrefs into namespace-scoped resources

Description of the change:
Update helm-operator's custom rendering engine to skip owner reference injection for resources that are cluster-scoped.
Motivation for the change:
#1815

Add a line to the CHANGELOG if it's a bug fix?


Sparkle on a new line doesn't relocate inline chat

Testing #199158
Steps:

open a file with 5 empty lines
set cursor to line 1
click on sparkle -> inline chat shows
click on line 5 in the editor (moving the cursor to line 5)
click on sparkle
🐛 nothing happens

I expected inline chat:

to move down (how would that affect an already open inline chat with text in it?)...
or maybe a new one?

Hi @TylerLeonhardt thank you for writing the issue. The reason this happens is because when an inline chat is already open, triggering the 'inlineChat.start' command does nothing in VS Code. I think the appropriate fix in this case would be not to show a sparkle if an inline chat is already open because the inline chat can not appear elsewhere where it is closed. Unfortunately we currently do not have a mechanism to detect if the inline chat is open from an extension. I will think about what we can do here.

I don't think we need extensions to know whether the inline chat is visible. The lightbulp-sparkle is managed in the renderer.
If we decide to not show the sparkle when inline chat is open, we would not request any code actions in that case, or filter out the ai-code action.
But first we need to agree if it's ok to not show the sparkle, but still show the lightbulb. In the end, the sparkle is just a special kind of light bulb.


Add ability to get Simbad info from Simbad database based on link name

link name is in the form of a @ followed by a number
Add a button that uses the index query and this link name to launch a browser for info

done


quote_underscores argument unrecognized

Using version 4.6.1 it appears that the quote_underscores argument is no longer recognized by the tree write and as_string methods.
For example using:
print(tree.as_string('newick', quote_underscores=False))
I get:
TypeError: Unrecognized or unsupported arguments: {'quote_underscores': False}

Hi @davidrasm-
The functionality is still available, but the kwarg has changed to unquoted_underscores (which you would want to set True in this case). It looks like there was supposed to be a mechanism to give you a more helpful error message
'quote_underscores' is no longer supported: Use 'unquoted_underscores' instead
but it didn't dispatch because of a typo in legacy kwarg recognition. Fixed in c31c1d9!
You can find details about the kwarg options for newick as_string here: https://dendropy.readthedocs.io/en/main/schemas/newick.html?highlight=newick#tree-as-string


Source maps support

Any plans on supporting source maps?

The lexer already marks all tokens with their original location (both char and line/col), as it is used for analysis / annotations and the highlighter. I have limited knowledge of source maps, but from what I understand it should be relatively easy to support.

This feature is definitely needed for any serious project. Debugging unfortunately happens so often!

It's not that bad actually. The JavaScript it generates is rather clean and
easy to debug. But yes, it's definitely a feature we want to implement.
On lør. 22. aug. 2015 at 12.04 Marvin Roger<EMAIL_ADDRESS>wrote:

This feature is definitely needed for any serious project. Debugging
unfortunately happens so often!
—
Reply to this email directly or view it on GitHub
https://github.com/somebee/imba/issues/1#issuecomment-133674604.

That's right, the generated JS is clean, but when your debugger tells you that there is an error at x line, you lost some time to find the corresponding imba line. :)

@marvinroger Preliminary support for sourcemaps has been added and released with v0.12.0. The sourcemap is embedded directly in the compiled files if you include --source-map-inline in imba watch/compile. Make sure the imba-file is accessible from the browser (correctly relative to the compiled file). I've tested it in Chrome and it seems to work well. Still a few mappings missing, but it should be pretty usable :)

Great! Thanks, you guys are very fast. :)


Geoip in ELK

I used IP2Location and geoIP plugins for my logstash. but it didnt work correctly. I dont know, config it correctly .
Due to the fact that there is a plugin for both logstash and elasticsearch, I was confused as to which one I should use.
I have MaxMind databases, but please give me a correct and precise guide to activate geoip

Unfortunately, I encounter an error when using the databases directly in the logstash. use database path in logstash pipeline!

Is this an Apache Traffic Sever (ATS) issue or are you looking for logstash help?


Logrotate postrotate script incorrect for upstart hosts

Cookbook version
8.1.8
Chef-client version
Demonstrated with 12.21.4 and 13.5.3
Platform Details
Ubuntu Trusty (14.04 LTS)
Ubuntu Xenial (16.04 LTS) with upstart-sysv
Scenario:
Rotating chef-client logs requires restarting a running daemon to reopen the log file.  This is typically done via a postrotate script that reloads or restarts the chef-client service using native service control tools (e.g. init scripts, sysctl, etc).
The recipe chef-client::config will configure a job in logrotate.d that does this- however, on systems using Upstart, the postrotate script incorrectly specifies an init script for reloading the service:
"/var/log/chef/client.log" {
  weekly
  rotate 12
  compress
  postrotate
    /etc/init.d/chef-client reload >/dev/null || :
  endscript
}

This despite explicitly declaring init_style as upstart for the node.  The debug logs in a test-kitchen run suggest that the init_style attribute is correctly set:
    "chef_client": {
      "config": {
        "chef_server_url": "chefzero://localhost:8889",
        "validation_client_name": "chef-validator",
... output trimmed ...
      },
      "init_style": "upstart",
      "run_path": "/var/run/chef",
      "cache_path": "/var/cache/chef",
      "backup_path": "/var/lib/chef",
      "log_rotation": {
        "options": [
          "compress"
        ],
        "prerotate": null,
        "postrotate": "/etc/init.d/chef-client reload >/dev/null || :"

Steps to Reproduce:

Create a cookbook that depends on chef-client
Create an attributes file that sets the init_style to upstart:
node.default['chef_client']['init_style'] = 'upstart'
Create a default recipe that includes the service and config recipes:
include_recipe "chef-client::service"
include_recipe "chef-client::config"
Converge an Ubuntu 14.04 client
Examine contents of /etc/logrotate.d/chef-client

Expected Result:
The postrotate script in /etc/logrotate.d/chef-client uses initctl to reload the service:
  postrotate
    initctl reload chef-client >/dev/null || :
  endscript

Actual Result:
The postrotate script in /etc/logrotate.d/chef-client uses an init script to reload the chef client:
  postrotate
    /etc/init.d/chef-client reload >/dev/null || :
  endscript

The logrotate config file correctly uses sysctl on systemd hosts (e.g. Xenial).  However, when I revert a Xenial host back to upstart (via installation of the upstart-sysv package), I'm getting the same behavior (i.e. the postrotate action is /etc/init.d/chef-client).
I am able to work around this by adding an attribute for Upstart based systems that explicitly declares the correct postrotate action:
  chef_client:
    log_rotation:
      postrotate: initctl restart chef-client >/dev/null || :

But it seems to me that the expected behavior for the cookbook would be to install the upstart script when init_style is set to upstart.
Thanks for looking at this.

Upon further review, this may not be a problem with the cookbook, rather the computed OHAI value for init_package in Trusty.  A bug has been filed indicating that the default mechanism for calculating this attribute is inadequate for Trusty:

init_package should report upstart, but it reports init. the contents of /proc/1/cmdline is not enough for determining the init system:

This is slated to be improved in Ohai 14.  I'll leave it to the maintainers how to handle this issue: I'm fine either way and as this is largely an upstream bug, I'm happy to work around it locally until Ohai 14 or until we've upgraded all our Trusty hosts.

I see this bug even forcing updating the init_style in my cookbook:
chef (12.21.20)> node['chef_client']['init_style']
 => "sysytemd"
chef (12.21.20)> node['chef_client']['log_rotation']['postrotate']
 => "/etc/init.d/chef-client reload >/dev/null || :"

Taking a look it appears to be order of operations with the attributes: https://github.com/chef-cookbooks/chef-client/blob/v9.0.2/attributes/default.rb#L171 if you are doing this then you likely need to also update the post_rotate as well. If you are wondering why we are doing this there are essentially 2 reasons:

transition from runit to (upstart|systemd) depending on the node platform version.
ohai detection of init subsystems is at best buggy

I will report back if that solves my issue.

Yup resetting it explicitly in the same place I am checking the platform fixes it. I will look to see if there is a relatively low impact to the cookbook change in order to fix this.

Ya the way to fix this is to make these not node attributes and make them (attributes|properties) in a (lwrp|custom resource).

@atombaby We've checked with cookbook v11.4.0  and verified that content of /etc/logrotate.d/chef-client is same as expected.
In order to verify we've followed the steps as depicted description.

In Ubuntu 16.04 installed upstart-sysv
Included run list

include_recipe "chef-client::service"
include_recipe "chef-client::config"

After chef-client run content of /etc/logrotate.d/chef-client

azure@dh-ubu16-azure:~/chef-repo/.chef$ cat /etc/logrotate.d/chef-client
# This file was generated by Chef for dh-ubu16-azure.itym0qvvov0ulf4kbnwt4pkehb.xx.internal.cloudapp.net.
# Do not modify this file by hand!

"/var/log/chef/client.log" {
  weekly
  rotate 12
  compress
  postrotate
    initctl reload chef-client >/dev/null || :
  endscript
}

Ohai version
azure@dh-ubu16-azure:~/chef-repo/.chef$ ohai -v
Ohai: 13.5.0

Please check with latest cookbook and let us know if there is anything.
Closing as it is working as expected with latest cookbook.


curl fall back to wget

The current use of "curl" in this script breaks on Synology NAS.
This PR adds to the config which download app (curl or wget) to use based on a file that is specific to Synology.
That said, the very first version I had made was adding a "curl check" and if it failed, then it would fall back to wget. Somehow I think this solution is still better since it can handle other odd curl on NAS or other Linux distribution.
Let me know what you think.
Note: it's not possible to completely silence wget with arguments. At least not on Synology unless using a redirect aka 2>/dev/null

Thanks for your PR, I'll take a look at it calmly because I don't agree with Adrian Kumpf's latest move with Teslamate.


Embed resx resources in cli

It looks like the resources aren't embedded in the cli app. When you run it, the following error is thrown.
Unhandled Exception: System.Resources.MissingManifestResourceException: Could not find any resources appropriate for the specified culture or the neutral culture.  Make sure "Microsoft.Json.Schema.JsonSchemaValidator.ValidatorResources.resources" was correctly embedded or linked into assembly "Microsoft.Json.Schema.Validation.Cli" at compile time, or that all the satellite assemblies required are loadable and fully signed.
   at System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(String fileName)
   at System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo culture, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackCrawlMark& stackMark)
   at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture, Boolean createIfNotExists, Boolean tryParents, StackCrawlMark& stackMark)
   at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
   at System.Resources.ResourceManager.GetString(String name, CultureInfo culture)
   at Microsoft.Json.Schema.Validation.CommandLine.ValidatorResources.get_Banner() in D:\github\rtaket\jschema\src\Json.Schema.Validation.Cli\ValidatorResources.Designer.cs:line 68
   at Microsoft.Json.Schema.Validation.CommandLine.Program.Banner() in D:\github\rtaket\jschema\src\Json.Schema.Validation.Cli\Program.cs:line 171
   at Microsoft.Json.Schema.Validation.CommandLine.Program.Run(Options options) in D:\github\rtaket\jschema\src\Json.Schema.Validation.Cli\Program.cs:line 29
   at Microsoft.Json.Schema.Validation.CommandLine.Program.<>c.<Main>b__0_0(Options options) in D:\github\rtaket\jschema\src\Json.Schema.Validation.Cli\Program.cs:line 23
   at Microsoft.Json.Schema.Validation.CommandLine.Program.Main(String[] args) in D:\github\rtaket\jschema\src\Json.Schema.Validation.Cli\Program.cs:line 21

@michaelcfanning @rtaket FYI I had previously fixed this same error in the Validator CLI app (see PR #40). Thanks for taking care of it here!


Cannot create groups in OU's

Hi,
When i specify the OU to create the group, it does not honor it and eventually does not create the group.
When using 0.5.1 it does not work. If i downgrade to the windows_ad cookbook version to exactly 0.4.4 it does work.
windows_ad_group "MYGROUP" do
action :create
domain_name node[:ad][:domain][:fqdn]
ou "MYOU"
end

The debug log indicates that it has been created but it is actually not.
* windows_ad_group[MYGROUP] action create

Any comment ?

@airom Sorry much have missed this, can you provide the debug log?

@derekgroh Thank you for your response.
Here is the debyg log
$ berks update
Resolving cookbook dependencies...
Fetching 'myad' from source at .
Fetching cookbook index from https://supermarket.chef.io...
Using chef_handler (1.3.0)
Using windows (1.39.2)
Using myad (0.1.0) from source at .
Using windows_ad (0.5.1)

$ kitchen converge -l debug
-----> Starting Kitchen (v1.7.2)
D      [Vagrant command] BEGIN (vagrant --version)
D      [Vagrant command] END (0m0.21s)
D      [Vagrant command] BEGIN (vagrant plugin list)
D      [Vagrant command] END (0m0.99s)
D      Berksfile found at /Users/myuser/source/myad/Berksfile, loading Berkshelf
D      Berkshelf 4.3.2 library loaded
D      winrm requested, loading winrm gem (["~> 1.6"])
D      winrm is loaded.
D      winrm-fs requested, loading winrm-fs gem (["~> 0.4.1"])
D      winrm-fs is loaded.
-----> Converging <default-windows-2012r2>...
       Preparing files for transfer
D      Creating local sandbox in /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/default-windows-2012r2-sandbox-20160421-31186-hewo1c
       Preparing dna.json
D      Creating dna.json from {:run_list=>["recipe[myad::windows_modules]", "recipe[myad::domain]"]}
       Resolving cookbook dependencies with Berkshelf 4.3.2...
D      Using Berksfile from /Users/myuser/source/myad/Berksfile
       Removing non-cookbook files before transfer
       Preparing data_bags
D      Using data_bags from /Users/myuser/source/myad/test/fixtures/databags
       Preparing environments
D      Using environments from /Users/myuser/source/myad/test/fixtures/environments
       Preparing secret
D      Using secret from /Users/myuser/source/myad/test/fixtures/databags/databag_secret_key
       Preparing validation.pem
D      Using a dummy validation.pem
       Preparing client.rb
D      Creating client.rb from {:node_name=>"default-windows-2012r2", :checksum_path=>"\#{ENV['TEMP']}\\kitchen\\checksums", :file_cache_path=>"\#{ENV['TEMP']}\\kitchen\\cache", :file_backup_path=>"\#{ENV['TEMP']}\\kitchen\\backup", :cookbook_path=>["\#{ENV['TEMP']}\\kitchen\\cookbooks", "\#{ENV['TEMP']}\\kitchen\\site-cookbooks"], :data_bag_path=>"\#{ENV['TEMP']}\\kitchen\\data_bags", :environment_path=>"\#{ENV['TEMP']}\\kitchen\\environments", :node_path=>"\#{ENV['TEMP']}\\kitchen\\nodes", :role_path=>"\#{ENV['TEMP']}\\kitchen\\roles", :client_path=>"\#{ENV['TEMP']}\\kitchen\\clients", :user_path=>"\#{ENV['TEMP']}\\kitchen\\users", :validation_key=>"\#{ENV['TEMP']}\\kitchen\\validation.pem", :client_key=>"\#{ENV['TEMP']}\\kitchen\\client.pem", :chef_server_url=>"http://<IP_ADDRESS>:8889", :encrypted_data_bag_secret=>"\#{ENV['TEMP']}\\kitchen\\encrypted_data_bag_secret", :environment=>"cheftest"}
D      [WinRM] negotiate::http://<IP_ADDRESS>:5985/wsman<{:user=>"vagrant", :pass=>"vagrant", :no_ssl_peer_verification=>true, :disable_sspi=>false, :basic_auth_only=>false}> ($chef_omnibus_root = "$env:systemdrive\opscode\chef"
$msi = "$env:TEMP\chef-true.msi"
$chef_metadata_url = "https://www.chef.io/chef/metadata?p=windows&m=x86_64&pv=2008r2"
$pretty_version = "install only if missing"
$version = "true"

Function Check-UpdateChef($root, $version) {
  if (-Not (Test-Path $root)) { return $true }
  elseif ("$version" -eq "true") { return $false }
  elseif ("$version" -eq "latest") { return $true }

  Try { $chef_version = (Get-Content $root\version-manifest.txt  -ErrorAction stop | select-object -first 1) }
  Catch {
    Try { $chef_version = (& $root\bin\chef-solo.bat -v) }
    Catch { $chef_version = " " }
  }

  if ($chef_version.split(" ", 2)[1].StartsWith($version)) { return $false }
  else { return $true }
}

Function Get-ChefMetadata($url) {
  Try { $response = ($c = Make-WebClient).DownloadString($url) }
  Finally { if ($c -ne $null) { $c.Dispose() } }

  $md = ConvertFrom-StringData $response.Replace("`t", "=")
  return @($md.url, $md.sha256)
}

Function Get-SHA256($src) {
  Try {
    $c = New-Object -TypeName System.Security.Cryptography.SHA256Managed
    $bytes = $c.ComputeHash(($in = (Get-Item $src).OpenRead()))
    return ([System.BitConverter]::ToString($bytes)).Replace("-", "").ToLower()
  } Finally { if (($c -ne $null) -and ($c.GetType().GetMethod("Dispose") -ne $null)) { $c.Dispose() }; if ($in -ne $null) { $in.Dispose() } }
}

Function Download-Chef($url, $sha256, $dst) {
  Try {
    Log "Downloading package from $url"
    ($c = Make-WebClient).DownloadFile($url, $dst)
    Log "Download complete."
  } Finally { if ($c -ne $null) { $c.Dispose() } }

  if ($sha256 -eq $null) { Log "Skipping sha256 verification" }
  elseif (($dsha256 = Get-SHA256 $dst) -eq $sha256) { Log "Successfully verified $dst" }
  else { throw "SHA256 for $dst $dsha256 does not match $sha256" }
}

Function Install-Chef($msi) {
  Log "Installing Chef Omnibus package $msi"
  $p = Start-Process -FilePath "msiexec.exe" -ArgumentList "/qn /i $msi" -Passthru -Wait
  $p.WaitForExit()

  if ($p.ExitCode -ne 0) { throw "msiexec was not successful. Received exit code $($p.ExitCode)" }

  Remove-Item $msi -Force
  Log "Installation complete"
}

Function Log($m) { Write-Host "       $m`n" }

Function Make-WebClient {
  $proxy = New-Object -TypeName System.Net.WebProxy
  $proxy.Address = $env:http_proxy
  $client = New-Object -TypeName System.Net.WebClient
  $client.Proxy = $proxy
  return $client
}

Function Unresolve-Path($p) {
  if ($p -eq $null) { return $null }
  else { return $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($p) }
}

$chef_omnibus_root = Unresolve-Path $chef_omnibus_root
$msi = Unresolve-Path $msi

if (Check-UpdateChef $chef_omnibus_root $version) {
  Write-Host "-----> Installing Chef Omnibus ($pretty_version)`n"
  if ($chef_metadata_url -ne $null) {
    $url, $sha256 = Get-ChefMetadata "$chef_metadata_url"
  } else {
    $url = $chef_msi_url
    $sha256 = $null
  }
  Download-Chef "$url" $sha256 $msi
  Install-Chef $msi
} else {
  Write-Host "-----> Chef Omnibus installation detected ($pretty_version)`n"
}
)
D      [WinRM] opening remote shell on http://<IP_ADDRESS>:5985/wsman
D      [WinRM] remote shell DEBE1D30-FEE2-4410-8CB6-1F83A1B00147 is open on http://<IP_ADDRESS>:5985/wsman
D      creating hash for file $env:TEMP/default-windows-2012r2-long_script.ps1
D      Running check_files.ps1
D      @{
D        "d6775db06103908f0154c1cb3b8153a7" = @{
D          "target" = "$env:TEMP/default-windows-2012r2-long_script.ps1";
D          "src_basename" = "default-windows-2012r2-long_script.ps1";
D          "dst" = "$env:TEMP/default-windows-2012r2-long_script.ps1"
D        }
D      }
D      Parsing CSV Response
D      "chk_exists","src_md5","dst_md5","chk_dirty","verifies","target_is_folder"
"False","d6775db06103908f0154c1cb3b8153a7",,"True","False","False"

D      Uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/kitchen-long-script20160421-31186-1js29vt/default-windows-2012r2-long_script.ps1 to encoded tmpfile $env:TEMP\b64-d6775db06103908f0154c1cb3b8153a7.txt
D      Finished uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/kitchen-long-script20160421-31186-1js29vt/default-windows-2012r2-long_script.ps1 to encoded tmpfile $env:TEMP\b64-d6775db06103908f0154c1cb3b8153a7.txt (4.148 KB over 1 chunks) in (0m0.03s)
D      Running decode_files.ps1
D      @{
D        "$env:TEMP\b64-d6775db06103908f0154c1cb3b8153a7.txt" = @{
D          "dst" = "$env:TEMP/default-windows-2012r2-long_script.ps1"
D        }
D      }
D      Parsing CSV Response
D      "src_md5","tmpzip","verifies","tmpfile","dst_md5","dst"
"d6775db06103908f0154c1cb3b8153a7",,"True","C:\Users\vagrant\AppData\Local\Temp\b64-d6775db06103908f0154c1cb3b8153a7.txt","d6775db06103908f0154c1cb3b8153a7","C:\Users\vagrant\AppData\Local\Temp/default-windows-2012r2-long_script.ps1"

D      Uploaded 1 items dirty_check: (0m1.65s) stream_files: (0m0.03s) decode: (0m1.63s)
-----> Installing Chef Omnibus (install only if missing)

       Downloading package from https://packages.chef.io/stable/windows/2012r2/chef-client-12.9.38-1-x64.msi

       Download complete.

       Successfully verified C:\Users\vagrant\AppData\Local\Temp\chef-true.msi

       Installing Chef Omnibus package C:\Users\vagrant\AppData\Local\Temp\chef-true.msi

       Installation complete

D      [WinRM] negotiate::http://<IP_ADDRESS>:5985/wsman<{:user=>"vagrant", :pass=>"vagrant", :no_ssl_peer_verification=>true, :disable_sspi=>false, :basic_auth_only=>false}> (
$dirs = @("$env:TEMP\kitchen\clients", "$env:TEMP\kitchen\cookbooks", "$env:TEMP\kitchen\data", "$env:TEMP\kitchen\data_bags", "$env:TEMP\kitchen\encrypted_data_bag_secret", "$env:TEMP\kitchen\environments", "$env:TEMP\kitchen\roles")
$root_path = "$env:TEMP\kitchen"

Function Delete-AllDirs($dirs) {
  $dirs | ForEach-Object {
    if (Test-Path ($path = Unresolve-Path $_)) { Remove-Item $path -Recurse -Force }
  }
}

Function Unresolve-Path($p) {
  if ($p -eq $null) { return $null }
  else { return $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($p) }
}

Function Make-RootPath($p) {
  $p = Unresolve-Path $p
  if (-Not (Test-Path $p)) { New-Item $p -ItemType directory | Out-Null }
}

Delete-AllDirs $dirs
Make-RootPath $root_path
)
       Transferring files to <default-windows-2012r2>
D      creating hash for directory $env:TEMP\kitchen
D      Populating files
D      === All files added.
D      creating hash for file $env:TEMP\kitchen
D      creating hash for directory $env:TEMP\kitchen
D      Populating files
D      +++ Adding chef_handler/README.md
D      +++ Adding chef_handler/attributes/default.rb
D      +++ Adding chef_handler/files/default/handlers/README
D      +++ Adding chef_handler/libraries/helpers.rb
D      +++ Adding chef_handler/libraries/matchers.rb
D      +++ Adding chef_handler/metadata.json
D      +++ Adding chef_handler/providers/default.rb
D      +++ Adding chef_handler/recipes/default.rb
D      +++ Adding chef_handler/recipes/json_file.rb
D      +++ Adding chef_handler/resources/default.rb
D      +++ Adding myad/README.md
D      +++ Adding myad/attributes/default.rb
D      +++ Adding myad/metadata.json
D      +++ Adding myad/recipes/default.rb
D      +++ Adding myad/recipes/domain.rb
D      +++ Adding myad/recipes/windows_modules.rb
D      +++ Adding windows/README.md
D      +++ Adding windows/attributes/default.rb
D      +++ Adding windows/files/default/handlers/windows_reboot_handler.rb
D      +++ Adding windows/libraries/feature_base.rb
D      +++ Adding windows/libraries/matchers.rb
D      +++ Adding windows/libraries/powershell_helper.rb
D      +++ Adding windows/libraries/powershell_out.rb
D      +++ Adding windows/libraries/registry_helper.rb
D      +++ Adding windows/libraries/version.rb
D      +++ Adding windows/libraries/windows_architecture_helper.rb
D      +++ Adding windows/libraries/windows_helper.rb
D      +++ Adding windows/libraries/windows_package.rb
D      +++ Adding windows/libraries/windows_privileged.rb
D      +++ Adding windows/libraries/wmi_helper.rb
D      +++ Adding windows/metadata.json
D      +++ Adding windows/providers/auto_run.rb
D      +++ Adding windows/providers/batch.rb
D      +++ Adding windows/providers/certificate.rb
D      +++ Adding windows/providers/certificate_binding.rb
D      +++ Adding windows/providers/feature_dism.rb
D      +++ Adding windows/providers/feature_powershell.rb
D      +++ Adding windows/providers/feature_servermanagercmd.rb
D      +++ Adding windows/providers/font.rb
D      +++ Adding windows/providers/http_acl.rb
D      +++ Adding windows/providers/pagefile.rb
D      +++ Adding windows/providers/path.rb
D      +++ Adding windows/providers/printer.rb
D      +++ Adding windows/providers/printer_port.rb
D      +++ Adding windows/providers/reboot.rb
D      +++ Adding windows/providers/registry.rb
D      +++ Adding windows/providers/shortcut.rb
D      +++ Adding windows/providers/task.rb
D      +++ Adding windows/providers/zipfile.rb
D      +++ Adding windows/recipes/default.rb
D      +++ Adding windows/recipes/reboot_handler.rb
D      +++ Adding windows/resources/auto_run.rb
D      +++ Adding windows/resources/batch.rb
D      +++ Adding windows/resources/certificate.rb
D      +++ Adding windows/resources/certificate_binding.rb
D      +++ Adding windows/resources/feature.rb
D      +++ Adding windows/resources/font.rb
D      +++ Adding windows/resources/http_acl.rb
D      +++ Adding windows/resources/pagefile.rb
D      +++ Adding windows/resources/path.rb
D      +++ Adding windows/resources/printer.rb
D      +++ Adding windows/resources/printer_port.rb
D      +++ Adding windows/resources/reboot.rb
D      +++ Adding windows/resources/registry.rb
D      +++ Adding windows/resources/shortcut.rb
D      +++ Adding windows/resources/task.rb
D      +++ Adding windows/resources/zipfile.rb
D      +++ Adding windows_ad/README.md
D      +++ Adding windows_ad/libraries/cmd_helper.rb
D      +++ Adding windows_ad/libraries/matchers.rb
D      +++ Adding windows_ad/metadata.json
D      +++ Adding windows_ad/providers/computer.rb
D      +++ Adding windows_ad/providers/contact.rb
D      +++ Adding windows_ad/providers/domain.rb
D      +++ Adding windows_ad/providers/group.rb
D      +++ Adding windows_ad/providers/group_member.rb
D      +++ Adding windows_ad/providers/ou.rb
D      +++ Adding windows_ad/providers/user.rb
D      +++ Adding windows_ad/recipes/contoso.rb
D      +++ Adding windows_ad/recipes/contoso_replica.rb
D      +++ Adding windows_ad/recipes/default.rb
D      +++ Adding windows_ad/resources/computer.rb
D      +++ Adding windows_ad/resources/contact.rb
D      +++ Adding windows_ad/resources/domain.rb
D      +++ Adding windows_ad/resources/group.rb
D      +++ Adding windows_ad/resources/group_member.rb
D      +++ Adding windows_ad/resources/ou.rb
D      +++ Adding windows_ad/resources/user.rb
D      === All files added.
D      creating hash for directory $env:TEMP\kitchen
D      Populating files
D      +++ Adding cheftest/domain.json
D      +++ Adding databag_secret_key
D      === All files added.
D      creating hash for file $env:TEMP\kitchen
D      creating hash for file $env:TEMP\kitchen
D      creating hash for directory $env:TEMP\kitchen
D      Populating files
D      +++ Adding cheftest.json
D      === All files added.
D      creating hash for file $env:TEMP\kitchen
D      Running check_files.ps1
D      @{
D        "76cdb2bad9582d23c1f6f4d868218d6c" = @{
D          "target" = "$env:TEMP\winrm-upload\tmpzip-76cdb2bad9582d23c1f6f4d868218d6c.zip";
D          "src_basename" = "cache";
D          "dst" = "$env:TEMP\kitchen\cache"
D        };
D        "9936e851303beada925804deb2f2cec9" = @{
D          "target" = "$env:TEMP\kitchen";
D          "src_basename" = "client.rb";
D          "dst" = "$env:TEMP\kitchen"
D        };
D        "d40e5d70904ebc101025921b6be3d83c" = @{
D          "target" = "$env:TEMP\winrm-upload\tmpzip-d40e5d70904ebc101025921b6be3d83c.zip";
D          "src_basename" = "cookbooks";
D          "dst" = "$env:TEMP\kitchen\cookbooks"
D        };
D        "2d8ff584f6fa690990eb66024023686d" = @{
D          "target" = "$env:TEMP\winrm-upload\tmpzip-2d8ff584f6fa690990eb66024023686d.zip";
D          "src_basename" = "data_bags";
D          "dst" = "$env:TEMP\kitchen\data_bags"
D        };
D        "d63dcef19c56e935a952ce485a4ed724" = @{
D          "target" = "$env:TEMP\kitchen";
D          "src_basename" = "dna.json";
D          "dst" = "$env:TEMP\kitchen"
D        };
D        "96d316033c6aa81ccba16dc5d0e6e989" = @{
D          "target" = "$env:TEMP\kitchen";
D          "src_basename" = "encrypted_data_bag_secret";
D          "dst" = "$env:TEMP\kitchen"
D        };
D        "cc2fc782a6892bbd6761637db6313d96" = @{
D          "target" = "$env:TEMP\winrm-upload\tmpzip-cc2fc782a6892bbd6761637db6313d96.zip";
D          "src_basename" = "environments";
D          "dst" = "$env:TEMP\kitchen\environments"
D        };
D        "49abb94825cb80b9a9cd59e5f76daf4a" = @{
D          "target" = "$env:TEMP\kitchen";
D          "src_basename" = "validation.pem";
D          "dst" = "$env:TEMP\kitchen"
D        }
D      }
D      Parsing CSV Response
D      "chk_exists","src_md5","dst_md5","chk_dirty","verifies","target_is_folder"
"False","cc2fc782a6892bbd6761637db6313d96",,"True","False","False"
"False","49abb94825cb80b9a9cd59e5f76daf4a",,"True","False","True"
"False","9936e851303beada925804deb2f2cec9",,"True","False","True"
"False","2d8ff584f6fa690990eb66024023686d",,"True","False","False"
"False","76cdb2bad9582d23c1f6f4d868218d6c",,"True","False","False"
"False","d40e5d70904ebc101025921b6be3d83c",,"True","False","False"
"False","96d316033c6aa81ccba16dc5d0e6e989",,"True","False","True"
"False","d63dcef19c56e935a952ce485a4ed724",,"True","False","True"

D      Uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/tmpzip-20160421-31186-xllo13.zip to encoded tmpfile $env:TEMP\b64-76cdb2bad9582d23c1f6f4d868218d6c.txt
D      Finished uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/tmpzip-20160421-31186-xllo13.zip to encoded tmpfile $env:TEMP\b64-76cdb2bad9582d23c1f6f4d868218d6c.txt (0.028 KB over 1 chunks) in (0m0.12s)
D      Uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/default-windows-2012r2-sandbox-20160421-31186-hewo1c/client.rb to encoded tmpfile $env:TEMP\b64-9936e851303beada925804deb2f2cec9.txt
D      Finished uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/default-windows-2012r2-sandbox-20160421-31186-hewo1c/client.rb to encoded tmpfile $env:TEMP\b64-9936e851303beada925804deb2f2cec9.txt (1.084 KB over 1 chunks) in (0m0.04s)
D      Uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/tmpzip-20160421-31186-lyxg3u.zip to encoded tmpfile $env:TEMP\b64-d40e5d70904ebc101025921b6be3d83c.txt
D      Finished uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/tmpzip-20160421-31186-lyxg3u.zip to encoded tmpfile $env:TEMP\b64-d40e5d70904ebc101025921b6be3d83c.txt (171.604 KB over 22 chunks) in (0m0.48s)
D      Uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/tmpzip-20160421-31186-7ivfbi.zip to encoded tmpfile $env:TEMP\b64-2d8ff584f6fa690990eb66024023686d.txt
D      Finished uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/tmpzip-20160421-31186-7ivfbi.zip to encoded tmpfile $env:TEMP\b64-2d8ff584f6fa690990eb66024023686d.txt (6.288 KB over 1 chunks) in (0m0.07s)
D      Uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/default-windows-2012r2-sandbox-20160421-31186-hewo1c/dna.json to encoded tmpfile $env:TEMP\b64-d63dcef19c56e935a952ce485a4ed724.txt
D      Finished uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/default-windows-2012r2-sandbox-20160421-31186-hewo1c/dna.json to encoded tmpfile $env:TEMP\b64-d63dcef19c56e935a952ce485a4ed724.txt (0.092 KB over 1 chunks) in (0m0.03s)
D      Uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/default-windows-2012r2-sandbox-20160421-31186-hewo1c/encrypted_data_bag_secret to encoded tmpfile $env:TEMP\b64-96d316033c6aa81ccba16dc5d0e6e989.txt
D      Finished uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/default-windows-2012r2-sandbox-20160421-31186-hewo1c/encrypted_data_bag_secret to encoded tmpfile $env:TEMP\b64-96d316033c6aa81ccba16dc5d0e6e989.txt (7.284 KB over 1 chunks) in (0m0.08s)
D      Uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/tmpzip-20160421-31186-cv5wi8.zip to encoded tmpfile $env:TEMP\b64-cc2fc782a6892bbd6761637db6313d96.txt
D      Finished uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/tmpzip-20160421-31186-cv5wi8.zip to encoded tmpfile $env:TEMP\b64-cc2fc782a6892bbd6761637db6313d96.txt (0.388 KB over 1 chunks) in (0m0.08s)
D      Uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/default-windows-2012r2-sandbox-20160421-31186-hewo1c/validation.pem to encoded tmpfile $env:TEMP\b64-49abb94825cb80b9a9cd59e5f76daf4a.txt
D      Finished uploading /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/default-windows-2012r2-sandbox-20160421-31186-hewo1c/validation.pem to encoded tmpfile $env:TEMP\b64-49abb94825cb80b9a9cd59e5f76daf4a.txt (2.236 KB over 1 chunks) in (0m0.03s)
D      Running decode_files.ps1
D      @{
D        "$env:TEMP\b64-76cdb2bad9582d23c1f6f4d868218d6c.txt" = @{
D          "dst" = "$env:TEMP\kitchen\cache";
D          "tmpzip" = "$env:TEMP\winrm-upload\tmpzip-76cdb2bad9582d23c1f6f4d868218d6c.zip"
D        };
D        "$env:TEMP\b64-9936e851303beada925804deb2f2cec9.txt" = @{
D          "dst" = "$env:TEMP\kitchen/client.rb"
D        };
D        "$env:TEMP\b64-d40e5d70904ebc101025921b6be3d83c.txt" = @{
D          "dst" = "$env:TEMP\kitchen\cookbooks";
D          "tmpzip" = "$env:TEMP\winrm-upload\tmpzip-d40e5d70904ebc101025921b6be3d83c.zip"
D        };
D        "$env:TEMP\b64-2d8ff584f6fa690990eb66024023686d.txt" = @{
D          "dst" = "$env:TEMP\kitchen\data_bags";
D          "tmpzip" = "$env:TEMP\winrm-upload\tmpzip-2d8ff584f6fa690990eb66024023686d.zip"
D        };
D        "$env:TEMP\b64-d63dcef19c56e935a952ce485a4ed724.txt" = @{
D          "dst" = "$env:TEMP\kitchen/dna.json"
D        };
D        "$env:TEMP\b64-96d316033c6aa81ccba16dc5d0e6e989.txt" = @{
D          "dst" = "$env:TEMP\kitchen/encrypted_data_bag_secret"
D        };
D        "$env:TEMP\b64-cc2fc782a6892bbd6761637db6313d96.txt" = @{
D          "dst" = "$env:TEMP\kitchen\environments";
D          "tmpzip" = "$env:TEMP\winrm-upload\tmpzip-cc2fc782a6892bbd6761637db6313d96.zip"
D        };
D        "$env:TEMP\b64-49abb94825cb80b9a9cd59e5f76daf4a.txt" = @{
D          "dst" = "$env:TEMP\kitchen/validation.pem"
D        }
D      }
D      Parsing CSV Response
D      "src_md5","tmpzip","verifies","tmpfile","dst_md5","dst"
"d63dcef19c56e935a952ce485a4ed724",,"True","C:\Users\vagrant\AppData\Local\Temp\b64-d63dcef19c56e935a952ce485a4ed724.txt","d63dcef19c56e935a952ce485a4ed724","C:\Users\vagrant\AppData\Local\Temp\kitchen/dna.json"
"cc2fc782a6892bbd6761637db6313d96","C:\Users\vagrant\AppData\Local\Temp\winrm-upload\tmpzip-cc2fc782a6892bbd6761637db6313d96.zip","True","C:\Users\vagrant\AppData\Local\Temp\b64-cc2fc782a6892bbd6761637db6313d96.txt","cc2fc782a6892bbd6761637db6313d96","C:\Users\vagrant\AppData\Local\Temp\kitchen\environments"
"76cdb2bad9582d23c1f6f4d868218d6c","C:\Users\vagrant\AppData\Local\Temp\winrm-upload\tmpzip-76cdb2bad9582d23c1f6f4d868218d6c.zip","True","C:\Users\vagrant\AppData\Local\Temp\b64-76cdb2bad9582d23c1f6f4d868218d6c.txt","76cdb2bad9582d23c1f6f4d868218d6c","C:\Users\vagrant\AppData\Local\Temp\kitchen\cache"
"2d8ff584f6fa690990eb66024023686d","C:\Users\vagrant\AppData\Local\Temp\winrm-upload\tmpzip-2d8ff584f6fa690990eb66024023686d.zip","True","C:\Users\vagrant\AppData\Local\Temp\b64-2d8ff584f6fa690990eb66024023686d.txt","2d8ff584f6fa690990eb66024023686d","C:\Users\vagrant\AppData\Local\Temp\kitchen\data_bags"
"96d316033c6aa81ccba16dc5d0e6e989",,"True","C:\Users\vagrant\AppData\Local\Temp\b64-96d316033c6aa81ccba16dc5d0e6e989.txt","96d316033c6aa81ccba16dc5d0e6e989","C:\Users\vagrant\AppData\Local\Temp\kitchen/encrypted_data_bag_secret"
"d40e5d70904ebc101025921b6be3d83c","C:\Users\vagrant\AppData\Local\Temp\winrm-upload\tmpzip-d40e5d70904ebc101025921b6be3d83c.zip","True","C:\Users\vagrant\AppData\Local\Temp\b64-d40e5d70904ebc101025921b6be3d83c.txt","d40e5d70904ebc101025921b6be3d83c","C:\Users\vagrant\AppData\Local\Temp\kitchen\cookbooks"
"9936e851303beada925804deb2f2cec9",,"True","C:\Users\vagrant\AppData\Local\Temp\b64-9936e851303beada925804deb2f2cec9.txt","9936e851303beada925804deb2f2cec9","C:\Users\vagrant\AppData\Local\Temp\kitchen/client.rb"
"49abb94825cb80b9a9cd59e5f76daf4a",,"True","C:\Users\vagrant\AppData\Local\Temp\b64-49abb94825cb80b9a9cd59e5f76daf4a.txt","49abb94825cb80b9a9cd59e5f76daf4a","C:\Users\vagrant\AppData\Local\Temp\kitchen/validation.pem"

D      Cleaned up src_zip /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/tmpzip-20160421-31186-xllo13.zip
D      Cleaned up src_zip /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/tmpzip-20160421-31186-lyxg3u.zip
D      Cleaned up src_zip /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/tmpzip-20160421-31186-7ivfbi.zip
D      Cleaned up src_zip /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/tmpzip-20160421-31186-cv5wi8.zip
D      Uploaded 8 items dirty_check: (0m2.54s) stream_files: (0m0.93s) decode: (0m3.89s)
D      Transfer complete
D      [WinRM] negotiate::http://<IP_ADDRESS>:5985/wsman<{:user=>"vagrant", :pass=>"vagrant", :no_ssl_peer_verification=>true, :disable_sspi=>false, :basic_auth_only=>false}> (
$env:PATH = [System.Environment]::GetEnvironmentVariable("PATH","Machine")

& $env:systemdrive\opscode\chef\bin\chef-client.bat --local-mode --config $env:TEMP\kitchen\client.rb --log_level auto --force-formatter --no-color --json-attributes $env:TEMP\kitchen\dna.json --chef-zero-port 8889)
       Starting Chef Client, version 12.9.38
       Creating a new client identity for default-windows-2012r2 using the validator key.
       resolving cookbooks for run list: ["myad::windows_modules", "myad::domain"]
       Synchronizing Cookbooks:
         - myad (0.1.0)
         - windows (1.39.2)
         - windows_ad (0.5.1)
         - chef_handler (1.3.0)
       Installing Cookbook Gems:
       Compiling Cookbooks...
       Converging 27 resources
       Recipe: myad::windows_modules
         * log[@@@@@@@@@@@ MY DOMAIN IS contsco @@@@@@@@@@@@@@@@] action write

         * log[@@@@@@@@@@@@@@@@@ PowerShell modules import @@@@@@@@@@@@@@@@@@@@@] action write

         * windows_feature[RSAT-AD-PowerShell] action install

         * windows_feature[AD-Domain-Services] action install

         * windows_feature[RSAT-AD-Tools] action install (up to date)
         * windows_feature[RSAT-ADDS] action install

         * windows_feature[RSAT-AD-AdminCenter] action install (up to date)
         * execute[net user "administrator" "Password1!"] action run
           - execute net user "administrator" "Password1!"
       Recipe: myad::domain
         * log[@@@@@@@@@@@@@@@@@ build/Join Domain contsco.local @@@@@@@@@@@@@@@@@@@@@@@@] action write

         * windows_ad_domain[contsco.local] action create

D      [WinRM] retrying receive request after timeout
         * powershell_script[create_domain_contsco.local] action run
           - execute "C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NonInteractive -NoProfile -ExecutionPolicy Bypass -InputFormat None -File "C:/Users/vagrant/AppData/Local/Temp/chef-script20160421-608-1pcd6xu.ps1"
         * log[@@@@@@@@@@@@@@@@@@@ Create groups/OUs based on ENV @@@@@@@@@@@@@@@@@@@] action write

D      [WinRM] opening new shell since the current one was deleted
D      [WinRM] opening remote shell on http://<IP_ADDRESS>:5985/wsman
D      [WinRM] remote shell 84323F3E-AA88-462E-9634-D956CFC907B7 is open on http://<IP_ADDRESS>:5985/wsman
         * windows_ad_ou[APP] action createStarting Chef Client, version 12.9.38
       resolving cookbooks for run list: ["myad::windows_modules", "myad::domain"]
       Synchronizing Cookbooks:
         - windows (1.39.2)
         - windows_ad (0.5.1)
         - chef_handler (1.3.0)
         - myad (0.1.0)
       Installing Cookbook Gems:
       Compiling Cookbooks...
       Converging 27 resources
       Recipe: myad::windows_modules
         * log[@@@@@@@@@@@ MY DOMAIN IS contsco @@@@@@@@@@@@@@@@] action write

         * log[@@@@@@@@@@@@@@@@@ PowerShell modules import @@@@@@@@@@@@@@@@@@@@@] action write

         * windows_feature[RSAT-AD-PowerShell] action install (up to date)
         * windows_feature[AD-Domain-Services] action install (up to date)
         * windows_feature[RSAT-AD-Tools] action install (up to date)
         * windows_feature[RSAT-ADDS] action install (up to date)
         * windows_feature[RSAT-AD-AdminCenter] action install (up to date)
         * execute[net user "administrator" "Password1!"] action run
           - execute net user "administrator" "Password1!"

         Using an LWRP provider by its name (WindowsFeatureDism) directly is no longer supported in Chef 12 and will be removed.  Use Chef::ProviderResolver.new(node, resource, action) instead. at 1 location:
           - C:/Users/vagrant/AppData/Local/Temp/kitchen/cache/cookbooks/windows/resources/feature.rb:32:in `initialize'
         Using an LWRP provider by its name (WindowsFeaturePowershell) directly is no longer supported in Chef 12 and will be removed.  Use Chef::ProviderResolver.new(node, resource, action) instead. at 1 location:
           - C:/Users/vagrant/AppData/Local/Temp/kitchen/cache/cookbooks/myad/recipes/windows_modules.rb:19:in `block (2 levels) in from_file'

       Chef Client finished, 18/27 resources updated in 51 seconds
$$$$$$ C:/opscode/chef/embedded/lib/ruby/2.1.0/x64-mingw32/dl.so: warning: already initialized constant DL::RUBY_FREE
$$$$$$ C:/opscode/chef/embedded/lib/ruby/gems/2.1.0/gems/net-ssh-3.1.1/lib/net/ssh/authentication/pageant.rb:16: warning: previous definition of RUBY_FREE was here
$$$$$$ DL is deprecated, please use Fiddle
D      Cleaning up local sandbox in /var/folders/8y/mm9ws3td7nzf4wxxqj00srrj3tkj7l/T/default-windows-2012r2-sandbox-20160421-31186-hewo1c
       Finished converging <default-windows-2012r2> (8m55.00s).
-----> Kitchen is finished. (8m57.35s)
D      [WinRM] closing remote shell DEBE1D30-FEE2-4410-8CB6-1F83A1B00147 on http://<IP_ADDRESS>:5985/wsman
D      [WinRM] closing remote shell 84323F3E-AA88-462E-9634-D956CFC907B7 on http://<IP_ADDRESS>:5985/wsman
D      [WinRM] remote shell 84323F3E-AA88-462E-9634-D956CFC907B7 closed

@airom RuboCop errors, addressed with v0.5.3 release #89 #90
Will attempt to get it uploaded to Supermarket later today.

@derekgroh  Thank you!

@derekgroh I used the cookbook out of the github with the v0.5.3 tag and worked. Thank you again.
Are you planning to upload it to Supermarket?

@airom Done, sorry for the delay


online access to old WordPress media gallery

Turns out, it's time for us to add image captions to published posts (sortable by oldest first) from 2018 and on.
I think that our old WP image gallery lives in a big JSON bundle in your backups, whether on your machine locally or in the cloud somewhere.
Is there any super-fast way to throw that up online somewhere for Donny and me to reference? Since old WPengine archive is down, now.

wp_ghost_export.json
Here's the JSON of all posts that I imported, but that does not include images.
However let me know if it does have the captions you're looking for. If not, I can dig up that full WP backup!


Server is currently offline.

When trying to start a new server I get this:
We were unable to connect to the main server, there may be network issues currently. This message will disappear when we are able to connect, you do not need to refresh.
When I now try and make a new server this pops up:
The GSD daemon running on the server is not on or is blocked by your firewall. Please make sure it is accessible before creating a server.
Any fixes?

 It should say "open" for each port. If not, then you have a firewall problem like the error said.

Apparently after 2 minutes the message popped up again:
We were unable to connect to the main server, there may be network issues currently. This message will disappear when we are able to connect, you do not need to refresh.
And when running npm start this appears:
[INFO] Loading plugin bungeecord.js
[INFO] Loading plugin gmod.js
[INFO] Loading plugin minecraft.js
[INFO] Loading plugin tf2.js
[INFO] restify listening at http://<IP_ADDRESS>:8003
[ERROR] FTP Server error
^Cmanager@MCDaemon1:/srv/gsd$ [INFO] Detected hard shutdown!
[INFO] Killing all running java processes on the server!
[INFO] All shutdown parameters complete. Stopping...

Okay, disregard that.

I added a group for the ftp that they have to be in to have access to ftp. though I haven't assigned the new users to that group. could that be causing it?
What user is running the server? Is the each "server user"?

Did some testing and It's probably the ftp being broken...
I tried running parts of the install again and this propped up:
root@MCDaemon1:/srv/gsd# npm install
npm WARN package.json<EMAIL_ADDRESS>No repository field.

More testing:
root@MCDaemon1:/srv/gsd# netstat -tulpn | grep :21
tcp        0      0 <IP_ADDRESS>:21              <IP_ADDRESS>:*               LISTEN      19048/node
udp        0      0 <IP_ADDRESS>:21943           <IP_ADDRESS>:*                           19048/node
root@MCDaemon1:/srv/gsd#
Does this mean that 2 programs are running on port 21?
Anyhow. I killed the proccess with "sudo kill -9 19048"(the PID)
and ran npm start, now it's just showing
[INFO] Loading plugin bungeecord.js
[INFO] Loading plugin gmod.js
[INFO] Loading plugin minecraft.js
[INFO] Loading plugin tf2.js
[INFO] restify listening at http://<IP_ADDRESS>:8003
and I can't write any command, I'm guessing it's in some console mode?(how do I exit without gilling the npm?)

Ctrl + C is the SIGINT command, you are crashing npm every time you use it:
^Croot@MCDaemon1:/srv/gsd# [INFO] Detected hard shutdown!
You need to run the command in a program like screen if you want it to remain running in the background. You cannot enter raw commands into the console window for GSD, thats not how it works.

Alright, will stop crashing it and run it in screen instead, thanks.
I tried running creating a new server and this appeared in the console:
[ERROR] Cound not execute command! useradd -m -d /home/servers/mc-temp_iajmm6d -s /bin/false mc-temp_iajmm6d
[ { [Error: ENOENT, mkdir '/home/servers/mc-temp_iajmm6d']
errno: 34,
code: 'ENOENT',
path: '/home/servers/mc-temp_iajmm6d' } ]
I'm guessing it could be a problem with permissions. What user gets assigned to running these commands? I'm guessing the one used to install it, so in my case "manager".

Does /home/servers exist?

Apparently I didn't have that directory. I created it and ran sudo npm start
After pressing start on the panel this appears:
fs: missing callback Error: ENOENT, open '/home/servers/mc-temp_iajmm6d/server.properties'
Segmentation fault (core dumped)
npm ERR<EMAIL_ADDRESS>start: node gsd.js
npm ERR! Exit status 139
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>start script.
npm ERR! This is most likely a problem with the GameServerDaemon package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node gsd.js
npm ERR! You can get their info via:
npm ERR!     npm owner ls GameServerDaemon
npm ERR! There is likely additional logging output above.
npm ERR! System Linux 3.16.0-30-generic
npm ERR! command "/usr/bin/node" "/usr/bin/npm" "start"
npm ERR! cwd /srv/gsd
npm ERR! node -v v0.10.37
npm ERR! npm -v 1.4.28
npm ERR! code ELIFECYCLE
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /srv/gsd/npm-debug.log
npm ERR! not ok code 0
root@MCDaemon1:/srv/gsd#
and here's the npm-debug.log file: http://hastebin.com/inerepesiz.log

You need to just reinstall the entire program, and start with fresh servers in PufferPanel. These bugs are not normal, and seem to be caused by either corrupted files, or some really un-intended use of the system.

Alright, will reinstall it. GSD... What would I use instead then? and how do I uninstall the program / GSD without having to reinstall the whole server?

Here's the documentation for v0.8.0: http://www.pufferpanel.com/v0.8.0/docs/getting-started

I might have read some other documentation. will just reinstall all of.
Thanks for all the help!

Well, v0.8.0 is not officially out yet, so have caution while using it. v0.7.6 (http://www.pufferpanel.com/v0.7.6/docs/how-to-install) is probably what you were following, which uses GSD instead of Scales.

There is no upgrade from 0.7.6 to 0.8.0 anyways, so at this point you are better off installing 0.8 since we don't have any major changes left before release. At this point we are just beta testing it, and fixing any minor bugs or display things that crop up.

@DaneEveritt If there are minor updates to 0.8, will we have to completely reinstall to get them? Or can we just run a command to get them?

To update, you need to run:
cd /var/www/pufferpanel/
git fetch
git merge origin/master
*For Scales:
cd /srv/scales/
git fetch
git merge origin/master

What @Dylan3304 said is correct, keep an eye on the Tools Repo to make sure there aren't any SQL updates as well (there shouldn't be though).

@DaneEveritt, I'm curious on how to apply the SQL migrations... Any input on that?

Manually. Its not an official release yet, so if you install it and there are changes it's up to you to make those changes. :+1:

No, like little dev SQL migrations. Like the commit you made yestersay on the tools repo. Best what to apply that @DaneEveritt?

You'll have to just manually update your database to match. I'm not providing little update anippets for those things, regardless there most likely will not be any updates to the SQL structure.


Unhelpful comment when the chem equ editor is used

If you type in the wrong equation in the Chem equ editor, using it for a nuclear equ, then if anything is incorrect you get the abrupt comment
incorrect
Your answer contains invalid syntax!
Please try again.
It is just that the answer is not the correct one though. The syntax may be fine but the answer is not correct. This makes it seem like there is something wrong with the approach rather than one of the values is incorrect.

Good catch. What phrasing would you rather see?

It actually is invalid syntax, from the point of view of the parser in the checker; it fails to parse the \betaparticle I think? It would be worth seeing what question this was on, but I saw this go by in the logs yesterday:
==================================================
Syntax error
Syntax error
gcse_ch6_52_q4|5ef70778-145e-4b19-8af1-cf6e2e295ced
--------------------------------------------------
Target string: '{}^{90}_{38}Sr  -> ^{0}_{-1}\betaparticle +  {}^{90}_{39}Y'
Test string: '{}^{90}_{38}Sr  -> \betaparticle +  {}^{90}_{39}Y'
Parse Expressions
instead expected token classes are [error, LPAREN, LSQUARE, NUMBER, SUP, SUB, ELEMENT, ELECTRON, FRACTION]
instead expected token classes are [error, LPAREN, LSQUARE, NUMBER, SUP, SUB, ELEMENT, ELECTRON, FRACTION]
Parsed target: 'ERROR'
Parsed test: 'ERROR'
ERROR: Trusted string contains error!
        "{}^{90}_{38}Sr  -> ^{0}_{-1}\betaparticle +  {}^{90}_{39}Y"
        "ERROR"
Equality:
        Equal: false
        Weakly equivalent: false
        Contains Error: true
==================================================

and the "Contains Error" bit is the bit that leads to that response . . .

Yes, 52.4 is one typical question on this issue of the beta. There are several representations of the beta particle.
^{0}_{-1}\betaparticle  used here and in question were you count up the numbers on the subscript and superscript.
\betaparticle used generally in textbooks,
\betaparticle^-1 more widely used in textbooks,
In the questions, you have to do the counting, but it is not clear that you have to write the over-embellished form of the beta wit the numbers attached. It is not stated anywhere. This is rather for beginners. But that is who we have, so we may have to accept all three varieties of beta. This requires a "consultation". As does the unhelpful wording.
Another issue was raised in conjunction with this, which is that if the order of the produced particles is interchanged, the answer is marked incorrect. This may not be a different issue; as has been raised.

OK, so this has less to do with the equation editor and more with the checker, right?


Ensure Winner's Gallery continues to display properly.

The winner's gallery collects data from a few different database tables:

user
profile
application
scholarship
winners

To ensure that we can continue to showcase the users over the years of the app running, but still clear the database of users to eliminate bloating per each run of a scholarship, we'll need to either:

take care to remove user data, but leave the data in the different database tables that match one of the scholarship winners.
establish a separate data repository (separate table or add to the winner's table or maybe even a separate SQLite db that captures the data for each year of winners?)

@angaither @mikefantini @sbsmith86

@weerd we should create an artisan command to remove all the data. but anyone who is marked as a winner, that user record, and corresponding data should stay.
I can help you out with writing this query if ya want

Okie doke :+1:


[WIP] vw__ sql refactor

This is with an eye to ensuring that derived tables always use current CCG membership, as part of #739.

As expected the fixture changes in ca592cd cause a bunch of unrelated test failures.  I'm not sure whether it's going to be worth updating these tests, or using a separate set of fixtures for these tests.

@sebbacon This is ready for review.

What is the impact of this bug (changing to only using current practice membership?)

The bug affects analyse queries where the denominator is "total list size" or "STAR PUs" and which aggregate by CCG.  (That is, where the "highlighting" field is set to "a CCG or CCGs".)
At the moment, for a given month the data for the numerator includes all practices currently in the CCG, the denominator includes all practices in the CCG in that month.
Once this fix is deployed and create_views has been re-run, both the numerator and the denominator will include all practices currently in the CCG.
I don't know how much this will change the data.  We can probably work it out by recalculating vw__ccgstatistics (into a new table) and comparing row-by-row.  I'll do this now.

I uploaded the new SQL to /tmp/ccgstatistics_2.sql, and ran the following to insert the CCG statistics into a new table called vw__ccgstatistics_2:
>>> from gcutils.bigquery import Client
>>>
>>> client = Client('hscic')
>>> table = client.get_table('vw__ccgstatistics_2')
>>>
>>> with open('/tmp/ccgstatistics_2.sql') as f:
...     sql = f.read()
...
>>> substitutions = {'this_month': '2018-02-01'}
>>>
>>> table.insert_rows_from_query(sql, substitutions=substitutions)

I then ran the following query to compare the contents of vw__ccgstatistics and vw__ccgstatistics_2:
SELECT
  t1.date,
  t1.pct_id,
  t1.name,
  t1.total_list_size,
  t2.total_list_size,
  t1.total_list_size / t2.total_list_size AS ratio
FROM
  hscic.vw__ccgstatistics AS t1
INNER JOIN
  hscic.vw__ccgstatistics_2 AS t2
ON
  t1.date = t2.date
  AND t1.pct_id = t2.pct_id
WHERE
  t1.total_list_size != t2.total_list_size
ORDER BY
  ratio

This found 775 differing rows (out of 12,568 ) and a CSV of the differences is attached.  I will look at this next week.
results-20180517-163853.csv.txt

These are notes.  See the next comment for a summary.
  Of these, 4 are closed (the 3 Manchesters, and Gateshead) so can be ignored.
So there are problems with the data for 19 / 213 open CCGs, for analyse queries where the denominator is "total list size" or "STAR PUs" and which aggregate by CCG.
Of these, in most cases the difference in total list size, between the old and new ways of calculating, is small.
Here are the CCGs where the difference is greater than 5% either way.  (I know that averaging an average is a bad idea, but I think we're OK here because the standard deviations are small.)

name
ratio_mean
ratio_std

NHS MORECAMBE BAY CCG
0.449367
0.003558

NHS BIRMINGHAM SOUTH AND CENTRAL CCG
0.864575
0.066428

NHS LINCOLNSHIRE WEST CCG
0.919236
0.000000

NHS BRADFORD CITY CCG
0.942683
0.002877

NHS NORWICH CCG
0.945823
0.001102

NHS SOUTH NORFOLK CCG
1.056124
0.001119

NHS NORTH CUMBRIA CCG
1.601136
0.010778

This was generated with the following:
df = pd.read_csv('846.csv')
ccgs = df[['code', 'name']].drop_duplicates().set_index('code')
ccgs['ratio_mean'] = df.groupby('code')['ratio'].mean()
ccgs['ratio_std'] = df.groupby('code')['ratio'].std()
ccgs[(ccgs['ratio_mean'] < 0.95) | (ccgs['ratio_mean'] > 1.05)].sort_values('ratio_mean')

Morecambe Bay CCG clearly gained a lot of practices between 2017_03 and 2017_06:
$ grep -rwc 01K | sort
2015_20/epraccur.csv:24
2016_02/epraccur.csv:24
2016_06/epraccur.csv:24
2016_09/epraccur.csv:26
2016_12/epraccur.csv:26
2017_03/epraccur.csv:26
2017_06/epraccur.csv:64
2017_08/epraccur.csv:65
2017_12/epraccur.csv:65
2018_03/epraccur.csv:65
2018_05/epraccur.csv:65

And North Cumbria lost a lot at the same time:
$ grep -rwc 01H | sort
2015_20/epraccur.csv:111
2016_02/epraccur.csv:111
2016_06/epraccur.csv:111
2016_09/epraccur.csv:112
2016_12/epraccur.csv:112
2017_03/epraccur.csv:112
2017_06/epraccur.csv:74
2017_08/epraccur.csv:73
2017_12/epraccur.csv:73
2018_03/epraccur.csv:73
2018_05/epraccur.csv:73

This was caused be a reorganisation of these two CCGs.  See here and #527.
From the time series charts, it's very obvious that something's up here:

For the others, the change in practices is much less dramatic, and looks more like gradual evolution over time.  For example, Birmingham South and Central:
$ grep -rwc 04X | sort
2015_20/epraccur.csv:95
2016_02/epraccur.csv:95
2016_06/epraccur.csv:97
2016_09/epraccur.csv:97
2016_12/epraccur.csv:98
2017_03/epraccur.csv:100
2017_06/epraccur.csv:109
2017_08/epraccur.csv:110
2017_12/epraccur.csv:110
2018_03/epraccur.csv:110
2018_05/epraccur.csv:110

So to answer:

What is the impact of this bug (changing to only using current practice membership?)

For 19 currently-open CCGs, we've been showing incorrect historical data in analyse queries where the denominator is "total list size" or "STAR PUs" and which aggregate by CCG.  Specifically, we have calculated the value of the denominator based on historical CCG composition, while we have calculated the value of the numerator based on current CCG composition.
This is particularly serious for Morecambe Bay and North Cumbria, where about half the practices from North Cumbria moved to Morecambe Bay in 2017_04.

For 17 other CCGs, the difference in list size is between 86% (Birmingham South and Central) and 106% (South Norfolk).
@sebbacon Can we discuss how to communicate this on the site?

Thanks. I'm going to put this on the agenda for the next DataLab day.

In the meantime, are you happy for me to merge?


Trigger events on shared application mgt operations and add new service to return shared app data

Purpose
$Subject

PR builder started
Link: https://github.com/wso2/product-is/actions/runs/4137658181

PR builder completed
Link: https://github.com/wso2/product-is/actions/runs/4137658181
Status: success

PR builder started
Link: https://github.com/wso2/product-is/actions/runs/4217106601

PR builder completed
Link: https://github.com/wso2/product-is/actions/runs/4217106601
Status: success


fix(@angular/ssr): use wildcard server route configuration on the '/' route when the app router is empty

The changes were merged into the following branches: main, 19.0.x


"Misiunea noastra", "De ce sa ajuti" and "Intalniri" links don't redirect correspondinglu

URL: https://oportunitatisicariere.ro/
Browser: Edge
Device: PC
STEPS TO REPRODUCE:
S1. Open the URL https://oportunitatisicariere.ro/ with Edge browser
S2. Click on the Misiunea noastra link from the navbar
S3. Click on De ce sa ajuti link  from the navbar
S4 Click on the Intalniri link from the navbar
EXPECTED RESULTS:
All the links should redirect on the correct section.
ACTUAL RESULTS:
The links don't redirect correctly.

The production was updated.
Can you please check @DeedeeDL  one more time and confirm if redirect links is working as expected?
thx
the expected results from frontend side are:

Retested. Passed.


Fixes issue #21: "Add license to readme"

[ ] Fixes issue #IssueNo : "Name of issue here"
[x] Other checks

Reason for pull request:
"Why was this pull request created"
Description of changes or additions:
"Insert description of changes made in this pull request here"
Screenshots:
"Insert screenshots here if available"

@nimishgo Thanks!


Bug - phone number , email validation in add an account

When you add an account , in the contact information validation of email need to be fixed.Also need to know the length of numbers for phone number

I don't think that validation of phone length make sense since in different countries you have different format.
Email could be validated.

The email field is now validated. Closing.


lldpd: 1.0.16 -> 1.0.17

Automatic update generated by nixpkgs-update tools. This update was made based on information from https://repology.org/project/lldpd/versions.
meta.description for lldpd is: 802.1ab implementation (LLDP) to help you locate neighbors of all your equipments
meta.homepage for lldpd is: https://lldpd.github.io/
Updates performed

Version update

To inspect upstream changes
Impact

Checks done (click to expand)

built on NixOS
The tests defined in passthru.tests, if any, passed
found 1.0.17 with grep in /nix/store/fd57rxi7vh0mq54qdys1xzvc21wyjlh9-lldpd-1.0.17
found 1.0.17 in filename of file in /nix/store/fd57rxi7vh0mq54qdys1xzvc21wyjlh9-lldpd-1.0.17

Rebuild report (if merged into master) (click to expand)

1 total rebuild path(s)

1 package rebuild(s)

First fifty rebuilds by attrpath
lldpd

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/fd57rxi7vh0mq54qdys1xzvc21wyjlh9-lldpd-1.0.17 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A lldpd https://github.com/r-ryantm/nixpkgs/archive/465abd47ea592fbe0507ae828acbde342c41b901.tar.gz

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/fd57rxi7vh0mq54qdys1xzvc21wyjlh9-lldpd-1.0.17
ls -la /nix/store/fd57rxi7vh0mq54qdys1xzvc21wyjlh9-lldpd-1.0.17/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

1 package built:

lldpd

Maintainer pings
cc @fpletz for testing.

Includes the fix for CVE-2023-41910.


Add a layout.yaml check for testing Hoist PR's

We currently do a basic syntax check via Travis. We should do a layout check like Openstack Infra does.

https://github.com/BonnyCI/hoist/pull/96

This issue was moved to BonnyCI/projman#25


Edits in contribution tutorials concerning latest workflow changes

Since #1724 and #1715 it is mandatory for a workflow on GTN to have the correct tags and annotation. I hope this is more clear now in the documentation for future contributors.

@bedroesb thanks!!
the tags and annotation can also be added in the workflow editor on Galaxy, that might be a bit more user-friendly way? maybe you could mention both options?

That's great idea!

Hi, is there something I need to do here?

@simonbray one of the computational chemistry workflows was renamed, as a code-owner you got pinged. If this is fine for you just approve :)

@simonbray Originally I disabled the workflow folder with the workflow since the workflow contains tools from the testtoolshed. But because of #1664 there were suddenly 2 workflow folders. Are there any plans to update the tools so they are not from the testtoolshed?

@bedroesb, I created a PR for one of the workflows: https://github.com/galaxyproject/training-material/pull/1766.
As for the NAMD tools used in the md-simulation-namd tutorial, I am not sure if there is any plan to get them into the main toolshed. Maybe @chrisbarnettster can comment on this.

I think now that adding the tags and annotation is better in the workflow editor anyway instead of editing it later in a text editor... This PR can not yet be merged because I also added the planemo workflow linting., but this is not yet merged on the planemo side #https://github.com/galaxyproject/planemo/pull/998

@bedroesb how do we proceed here? Waiting for the new linting before we merge this one?

@bgruening I personally think that this can be merged, and the changes that will be made by the new linting can than overwrite the parts that are needed? Or the opposite around is also fine for me. The documentation changes will stay anyway.

Looks good to me, thanks @bedroesb


Indicator setup form: I can't save changes to indicators without linked results

Notes:

Can't reproduce the issue on Production -- it seems to be a Papaya problem.
This problem only appears to affect saved indicators with no results

To reproduce the issue

Be logged in as SuperUser or someone with High permissions for the Tolaland program called "QA Program --- No Results Here"

Visit the program page: https://tola-activity-dev2.mercycorps.org/program/612/#/

Without editing anything, click the Save changes button right away. Note the lack of response. Compare that with production where you get a success message even though you haven't changed anything.

Now try editing any field and clicking Save changes... I get no response at all.

I assume I'm editing an indicator, e.g changing its name?

@axoplasm For me, it didn't matter what field I edited, I couldn't save.

Ken has fat fingers

It's also harder to type with an adorable baby in the crook of one arm.

QA - PASSED

Clicking save changes on an indicator without making any changes provides a successful save message
Editing fields / names/ etc and clicking save provides a successful save message

Looks like this one is fixed, can't reproduce any longer following the steps.


Mock the verification button in Credential Details modal to check if a credential has been revoked

The button can have three states:

Unknown (right now a question mark)
Error (exclamation mark)
Valid (check mark)
Revoked (X mark)

https://github.com/roots-id/rootswallet/blob/main/src/screens/CredentialDetailScreen.tsx

Since we have Redux now, we can keep some state that will allow this mock to be more meaningful.  I'm going to create another issue that allow you to generate a credential for a contact.  and you will have the option of revoking the credential. So that for this issue, when you check revocation, you will be checking redux for the state of the credential (revoked or not)


[Bug] Unable to SSH to a Linux system created from Service Workbench. Getting error Permission denied (publickey,gssapi-keyex,gssapi-with-mic). Not sure how to resolve it.

Describe the bug
A clear and concise description of what the bug is.
To Reproduce
Steps to reproduce the behavior:

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

Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Versions (please complete the following information):

Release Version installed [e.g. v1.0.3]
Is the deployment from a forked version of the repository?

Additional context
Add any other context about the problem here.

Not sure what template that I need to fill out. I still have the same error.

close the issue since we don't receive further response


Add possibility to set default attribute and element values

The current system of creating property methods in the DataHelper which come with built-in validation is quite nice, though some better documentation would help newcomers :) However, one thing we absolutely need is a way to specify default values for elements. This would make data entry much easier and user-friendly.
The ideal system for me would be to keep the create_attribute functionality as it is (i.e. we don't create foo.x with a default value on element creation), but only substitute in the default values when serializing. @sami-m-g I would appreciate some help with software architecture here, as all the DataHelper methods are static - which is good! - I don't think we can add default values in DataHelper.create_attribute without really ugly hacks.
Maybe one option would be to create a dictionary __defaults for each element class, e.g.
class Validation(etree.ElementBase):
    __defaults = {
        "proofReadingDetails": "Done to the best of the author's ability, but not well enough to override a default value",
        "otherDetails": "None provided"
    }

Then all serialization would require recursive traversal of all element class to substitute in default values where no attribute values are present. I don't love this but don't see anything better.
Another complication is that some defaults are programmatic, e.g. the default Validation.proofReadingValidator would be the first (or last?) author listed in another element. So maybe we just need a finalize_for_serialization function on each element class? This would give us flexibility.

@cmutel, so you mean we only fill in default values when writing the final XML file? What value does this provide over just filling in the values on element creation?
Furthermore, we do have a current functionality for default values. Currently it works on reading only, but we should simply build on that to add writing capability.
Finally, for programmatic defaults, unless it's a small set of pre-defined options, I would rather simply let the users use the Defaults class for setting their own rules. We may decide on adding a couple more helper methods, maybe utilize lxml.xpath as well.

I don't have a preference as to when it happens, or even how, but something like 20% of Ecospold 1 can always be default, and maybe another 10% can be defined in a config file (e.g. author details). The ideal system would be simple and transparent, so if we need to provide a Defaults class, it should be easy to read and understand, and be used by default.
@sami-m-g Maybe you could write a quick prototype in pseudocode?

@cmutel
How about something like this:
class DefaultableElementBase(etree.ElementBase):     def _init(self) -> None:         # Iterate over class properties and set defaults for Nones         # Using Defaults._property_name_ or Defaults[_class_name_]._property_name_

@sami-m-g Sounds good. Here are some reasonable defaults:

dataset.timestamp: lambda function for now
dataset.validCompanyCodes: "CompanyCodes.xml"
dataset.validRegionalCodes: "RegionalCodes.xml"
dataset.validCategories: "Categories.xml"
dataset.validUnits: "Units.xml"
dataset.generator: "pyecospold" with version set dynamically
referenceFunction.localName: Copy of referenceFunction.name
referenceFunction.infrastructureProcess: True
dataSetInformation.impactAssessmentResult: False
dataSetInformation.timestamp: lambda function for now
dataSetInformation.version: 1.0
dataSetInformation.internalVersion: 1.0

Not sure if this is covered elsewhere, but we also need to be set some element values based on the state of the dataset, e.g. referenceFunction.datasetRelatesToProduct, referenceFunction.amount, and referenceFunction.unit can be determined by iterating through the exchanges, administrativeInformation.dataEntryBy can come from a config file. So maybe it is cleaner to have a prepare_for_serialization method where we can set defaults and these computed values?

@cmutel
For generator: "pyecospold" with version set dynamically, do you mean our library version or the schema version as in 1 or 2? Can you kindly elaborate?
For foo.timestamp: lambda function for now, do we really want to handle the hassle of handling lambdas and strings as different config values? I assume the default for timestamp won't change frequently -otherwise it's not that much of a "default"- so the user would better go for something like:
# Include whatever imports needed
# Set value for default_timestamp
# Set the Defaults.property_name or Defaults[class_name].property_name to default_timestamp

What do you think?
For referenceFunction.localName: Copy of referenceFunction.name I would have suggested something but since you mention that "some element values based on the state of the dataset" maybe we can simply actually do the utility function you are suggesting -possibly just modifying core.save_file- and include that one in it.

@cmutel - On second thought, we might want to just stick with your suggestion of having it as a different function for if user wanted to fill in defaults without/ before saving.

For generator: "pyecospold" with version set dynamically, do you mean our library version or the schema version as in 1 or 2? Can you kindly elaborate?

pyecospold.__version__

foo.timestamp

You are right, dynamic defaults is complexity without power. Let's set these at the same time as the other dynamic attributes.

On second thought, we might want to just stick with your suggestion of having it as a different function for if user wanted to fill in defaults without/ before saving.

Really not sure here, explicit is better than implicit but calling the same function each time can become annoying. I would +0 on having a separate function instead of overriding save_file, but either is fine.

Resolved through 966f641 and 3d2b875.


Training request: Pangenome analysis with Roary

Recently a user asked about a tutorial for using Roary on Galaxy: Ghelp post.

ping @Slugger70 and team?

Hey there @bgruening, I think we may need to update Roary as part of this. If we contact the Galaxy team at the Quadram institute (Andrew Page's group) they may be able to give us some guidance here as well. (Andrew originally wrote Roary.)

@bgruening @gallardoalba We have an old training that we wrote for an old project. This could be a good start for a new one. http://sepsis-omics.github.io/tutorials/modules/roary-galaxy/

Good call :) ping @andrewjpage

Any obvious updates one would make when bringing that tutorial into the GTN? I might have someone to work on it, but I don't know the area well enough to know what might be useful to include


the tabFocusMode option/config removed in v0.6

How to set this >= v0.6?
It can still be toggled from the commands pallet / CTRL + M - but I need it as default on for many scenarios.
It is a very handy option for small snippets of text/code in a form. I am queries to why this handy option was removed (no notes in the commits or changelog)? Hope to see it back or an alternative :)
Read only mode will make this true by default.

The tabFocusMode was an option driving the context key editorTabMovesFocus used basically by the tab and shift+tab keybindings. You can emulate this on your side via editor.createContextKey('editorTabMovesFocus', true)

thanks - works after setting it very late in the init/create process.. old option was more elegant though :) i see that it was moved to InternalEditorOptions for some reason

FYI v1.8.x: it seems like tabFocusMode is back again and the above should be disregarded (as it does not work)


exposed functions don't need to be unsafe

@homunkulus r+

:pushpin: Commit b5d9ae5 has been approved by japaric

:hourglass: Testing commit b5d9ae5 with merge b5d9ae5...

:sunny: Test successful - travis


Split Layers

This script is similar to Carl Vine's Explode to Layers script, but instead of exploding it splits chords into 2 layers based on a split point in the chord. In the process I made some modifications to libary functions as well:

layer.copy() now optionally clones articulations to the target layer
note_entry.make_rest() is a new function that calls FCNoteEntry::MakeRest but does all the necessary cleanup first. I have not changed any existing code to use it because as far as I can tell it isn't needed in the context in which the existing code is calling FCNoteEntry::MakeRest.

layer.copy(... clone_articulations) is a great idea. Otherwise, although instructions in the script are easy to follow, I find the nomenclature in the dialog confusing: "Split After (From Top)". Instead perhaps: "Split at (# notes from the top)". Rest of the script is of course fine.

I made a change along the line you suggested. Let me know if it helps.

Yes that's good. Just became aware that layer.copy() doesn't retain notehead changes - possibly a change, including many other potential NoteMods, for another day! (Pandora's box opened by articulations).


SD-6895: Refactor literallycanvas-core for AreaSelect and Dot tools

SD-6895: Refactor literallycanvas-core for AreaSelect and Dot tools

Looks good. Can you give an overview of why you changed what you changed? Just something simple to understand why.

@gschmidt-nuance literallycanvas branch was span off the master branch after Vincari forked the branch. So we have to refactor a few core files to make it work with ComplyMD customized tools such as DOT and AreaSelect.

Add "customData" attribute to Shape so that SCAPD builder can save the customized data such which tool is used and selected area names etc.
Add "fillColor" attribute to Shape and Render so that AreaSelect tool can change the fill color of the DiagramPath.


[Enhancement] application Icon

Over time the standard application icon gets really annoying.
There should be a possibility to set a custon icon in QT, right?

Yes. A question remains before doing it: I think it would be much better to redo the icons in .svg format, to give them a crisper look. And the standing icon, if better done, could be the application icon, no?
I like to keep in mind, also, the Google guidelines for icons. The whole thing is worth a read, in my opinion.
That's a bunch of icons that are more suited to inside the application (could be nice to improve the user interface). They are very flat (which is indeed one of the guidelines), but this is ok for an in-app icon, not so much for a logo...
Also, do you have a good tool to draw svg?

OK, as I thought, this is for the window. For the taskbar or whereever the OS displays the app, you need a OS-dependent solution.
I haven't worked with svg files, but my icons and vector graphics I created with inkskape. If I wanted to create a windows .ico file, I also needed GIMP

It is a pity that there is no paltform-independent way of asking Qt to put an application icon...
I plan to do a mock-up (traditional ink and paper) of a new version in the coming weeks, that would respect the Google guidelines mentioned. Feel free to do another one! Then we could try and Inkscape it.

I've created a pull request: #32

The PR is now merged


Update devtest-lab-faq.md

Fixed typo

@TomArcher,
Thanks for your contribution as a Microsoft full-time employee or intern. You do not need to sign a CLA.
Thanks,
Microsoft Pull Request Bot

@TomArcher : Thanks for your contribution to the Azure documentation! The author, @tomarcher, has been notified to review your proposed change.