Adding keep connection alive configuration

function InvokeTestAgentConfigExe([string[]] $Arguments, [string] $Version, [System.Management.Automation.PSCredential] $UserCredential)

Didn't get the logic behind this

Refers to: Tasks/DeployVisualStudioTestAgent/TestAgentConfiguration.ps1:856 in b02ebd8. [](commit_id = b02ebd8da488d7581abda2e7010ab69d8cecaae5, deletion_comment = False)

Approved


False negative: moving traits behind a non-default feature flag

Steps to reproduce the bug with the above code

Clone the repo https://github.com/KittyCAD/modeling-api and check out the branch achalmers/remove-one-enum
Notice that the PR adds a new Cargo feature "diesel", which is not a default feature. It also moves a lot of Diesel trait implementations behind the --features diesel flag, which should be a breaking change.

Actual Behaviour
Cargo semver-checks reports no semver violations
Expected Behaviour
Cargo semver-checks should report a semver violation
Generated System Information
Software version
cargo-semver-checks 0.25.0
Operating system
macOS 13.4.1 (Darwin 22.5.0)
Command-line
/Users/adamchalmers/.cargo/bin/cargo-semver-checks semver-checks --bugreport

cargo version
> cargo -V
cargo 1.74.1 (ecb9851af 2023-10-18)

Compile time information

Profile: release
Target triple: aarch64-apple-darwin
Family: unix
OS: macos
Architecture: aarch64
Pointer width: 64
Endian: little
CPU features: aes,crc,dit,dotprod,dpb,dpb2,fcma,fhm,flagm,fp16,frintts,jsconv,lor,lse,neon,paca,pacg,pan,pmuv3,ras,rcpc,rcpc2,rdm,sb,sha2,sha3,ssbs,vh
Host: aarch64-apple-darwin

Build Configuration
No response
Additional Context
No response

Thanks for the report! This feels more like a shortcoming in our docs / FAQ / GitHub Action than anything else — I'd love your help in resolving it!
When checking, cargo-semver-checks has to choose a combination of features to build rustdoc with. Rustdoc doesn't currently support any way to build JSON that describes which pieces of code are visible under what combination of features, so we can't do a "single pass" check for all feature combinations.
We also cannot afford to check every combination of features by default, since that's 2^n combinations which would rapidly become impractical.
By default, cargo-semver-checks uses a heuristic to enable all features that "don't look private" in order to try to test as much code as possible: https://github.com/obi1kenobi/cargo-semver-checks#what-features-does-cargo-semver-checks-enable-in-the-tested-crates
But as you point out, this is also not a perfect choice since it will miss breakage that happens when only a subset of features is enabled. This is why it allows choosing other feature combinations: cargo semver-checks --default-features should catch the issue you point out.
My question to you is: how can we make this situation better for the next person?
Would you change something in the README / FAQ to convey this better? Perhaps suggest that users whose packages have non-default features run cargo-semver-checks both with only default features and with our heuristic for "all public features"?

Thanks for explaining! I think ideally I'd like semver-checks to build and analyze Rustdoc twice: once with the current behaviour (all features that don't look private) and once with just the default features. I think a lot of Rust programmers use crates with just the default features.
That way, you'd catch the common problem of "this struct used to be visible by default, but now it's only visible if I enable a new Cargo feature for the crate". In my experience this is a common problem for semver in the Rust ecosystem :)

Yeah, totally fair.
The reasons we haven't implemented this yet are questions of ergonomics and UX:

Because most crates don't have any features (default or otherwise), we don't want to run it twice for everyone. Checking for non-default features can be implemented, but it's a bit tricky around edge cases — e.g. what should happen if the "current" and "baseline" versions don't have the same answer for "does the crate have non-default features" ?
The "default features" and the current behavior scans are completely independent, and could run in parallel in separate jobs. The rustdoc build is the "long pole" in our performance profile, and sequentially building it twice would probably be a non-starter for some of the bigger crates and workspaces that use cargo-semver-checks. So perhaps the right answer is to implement this in our GitHub Action? That of course makes the feature detection I described above even more complex...

What do you think?
Btw, I'd love to have KittyCAD as a GitHub sponsor of cargo-semver-checks — and I'd be happy to make solving this problem a top priority if it would push you over the activation energy barrier for that :)

Checking for non-default features can be implemented, but it's a bit tricky around edge cases
Agreed. A good first step might be to only run the check once if the [features] table in Cargo.toml is totally absent -- this would hit most of the crates without features, which is most crates as you say :)

We like sponsoring the open-source tech we rely on! I'm still only experimenting with semver-checks, right now I just run it for curiosity because I'm not actually using semver yet (just publishing some things on crates.io for ease of deployment). But if in the future it becomes part of our workflow, we'll definitely look into sponsoring you :)


Unordered_maps with complex containers

Don't know if this feature already exists but do unordered_maps support structures other than <int,int> like <int,stdgpu::unordered_set>. Similarly can unordered_set support <pair<int,int>> using a hashing function from boost::hash<pair<int, int>> or vectors using your own hashing function for vectors.
This library is excellent btw! Solves so many issues with support for STL like containers for GPU :)

Yes, in principle arbitrary types for the Key and T types of stdgpu::unordered_map container (stdgpu::unordered_setlikewise) are supported. int, int is just one very simple choice in the examples. You can use any type with the corresponding hash function. The only requirement is that the hash function is callable both on the host and the device, i.e. it should have the __host__ __device__ attribute for CUDA code or the portable STDGPU_HOST_DEVICE version.
Nesting containers, i.e. stdgpu::unordered_map<int, stdgpu::unordered_map<int, float>, is not prohibited, but not fully supported as in the C++ standard library due to the more complicated memory handling for GPU code. stdgpu::unordered_map<thrust::pair<int, int>, float> might be better in such cases.


Issue 15080 - extern(C++) classes have wrong static data layout

Unfortunately this will prevent using static class instances in DDMD until we've bumped the host compiler up a few versions.
https://issues.dlang.org/show_bug.cgi?id=15080

LGTM.

Auto-merge toggled on

Thanks!


Background is not updated in other clients..

Client version	v1.2.86
API version	v0.4.35
IMG version	v0.1.10
I changed background (size 99x99) from default to game background... No change in Windows IE11 + Chrome

Still got a problem !!
Client version	v1.2.93
API version	v0.4.35
IMG version	v0.1.10

fixed on https://github.com/N4SJAMK/teamboard-api/commit/e20c295c5229e4296e9d3ac7a1374f29af413a57

Verified as fixed!
Client version	v1.2.97
API version	v0.4.37
IMG version	v0.1.10


Clean Current Workspace before Start

Hi.
I've been running the GATK-SV pipeline with AWS backend and, sometimes, due to some intermittent errors the tasks are aborted half-way trough. Then Cromwell re-launches the task but some files, generated by the previous run, are already there what makes the pipeline to fail. With this in mind, I'm preparing do a change in cromwell that remove all the files (except for the script which gets created for each run/job) from the task folder before it starts and I would like to ask:

if this makes sense?
if there is any problem on doing this. can the same folder be used twice? or does each task has its own “workspace”? or Will this change impact any other downstream jobs as we will remove everything except “script” file?

Thanks in advance

Since this is a cromwell issue, I would direct your questions to cromwell developers. We don't see this issue with GCP, and I believe that is because files from the previous attempt are not carried over to the new VM in GCP as you suggest, but I can't comment on the details of the implementation and I think the cromwell developers would have more insight.

Thanks @epiercehoffman


Redux props into navigator's contentComponent

I am trying to render a header (not being a nav header, just a label above drawer items) for DrawerNavigator that has a greeting with currently logged in user. I am also using the contentComponent property to use a custom View for the drawer. Username comes from Redux but the props that are passed to contentComponent do not contain the redux ones. Am I missing something?
const NavigationDrawer = DrawerNavigator(routes, {
  initialRouteName: 'Dashboard',
  contentOptions: { ... }
  },
  contentComponent: props => (
    <View style={styles.drawer}>
      <NavigationDrawerHeader username={props.username} />
      <DrawerView.Items {...props} />
    </View>
  )
});

const mapStateToProps = (state) => {
  return {
    username: getUsername(state),
  };
};

export default connect(
  mapStateToProps,
)(NavigationDrawer);

The props that contentComponent receive are props used for rendering that component, not the ones you have passed from Redux store to your screen (or even NavigationDrawer).
If you need to read from Redux, you should connect your contentComponent with connect() instead.
Happy to provide further assistance.


Typo fix docs number notation

Hi!
I just stumbled across this project and scrolled through your documentation. Great project!
In the convert number section of the number notation page are the following examples:
0xffee to bin
42 ot oct
2^16 - 1 to hex
I started a repl to try out this example: 42 ot oct
Which resulted in this error:

42 ot oct
error: while type checking
┌─ input:3:1:4
│
1 │ 42 ot oct
│    ^^ unknown identifier

The same example with the typo fixed works fine:

42 to oct

oct(42)
= 0o52    [String]

Thank you!


[Vision API] CancelationToken for Async calls.

Since the VisionServiceClient (C#) have no timeout we should be able to pass a CancelationToken or set a timeout for all calls to the API via the VisionServiceClient.
PS: Because of the downtime today (6.apr 2016) our integration encountered a hang.

This will be considered in a future release.  The request will have timed out eventually on the client side(100 seconds).

This issue was moved to Microsoft/Cognitive-Vision-Windows#2


Adds the option of HiGHS for the LMO in FrankWolfe

This PR adds the option of HiGHS for the Optimizer() in FrankWolfe.
Instead of  o = SCIP.Optimizer() the user could user the model o = HiGHS.Optimizer().
Nothing else changes regarding the user-interface and interaction with the function Boscia.solve()

Thanks for the contribution!


Check for valid app name in init command.

Currently the input for the app name com.foo.bar... is a free-form field and lets developers put in names that will be rejected later on as a strange "manifest failure".  We should check using a regular expression to catch this early on.

It looks like we have some check already.  Maybe it just needs to be updated to match exactly what the platform is expecting.

@creationix I've researched some time ago the limitations for package ID on android & ios and current for Lumin and packed them into one regex.
The example test is here: https://regex101.com/r/Rk4fco/1 .
Please confirm if everything works well, or we have to change some checks to match Lumin requirements


Return correct url if file name does not have extension

Thanks, can you bump the package version and publish?

already done mate ! :)

Oh nice, thanks


The SoundCloud shortcode should be using a button element instead of a div

A "<div>" element is used for the button that loads the SoundCloud player in the SoundCloud shortcode. A "<button>" element would be more appropriate.

Fixed in v1.0.1.


(Background on this error at: http://sqlalche.me/e/14/e3q8)

[ Y] I have checked the wiki
[ Y] I have searched for similar issues

Describe the bug
A clear and concise description of what the bug is.

    "OMDB_API_KEY" VARCHAR(64),
    PRIMARY KEY ("CONFIG_ID"),
    FOREIGN KEY(job_id) REFERENCES job (job_id)

)�J^G^G^W^W^W^A�stabletracktrack^HCREATE TABLE track (
track_id INTEGER NOT NULL,
job_id INTEGER,
[>>>>> DRAG AND DROP LOG FILE HERE <<<<<]

The arm user doesn't appear to own or have write access to the db file.
Can you check the permissions for the db file and post it.
You may need to chmod it to make it writeable/change owner.

Thank you for getting back to so soon. I will check into it and let you know.
From: 1337-server @.>
Sent: Monday, August 9, 2021 8:30 PM
To: 1337-server/automatic-ripping-machine @.>
Cc: thewascokid @.>; Author @.>
Subject: Re: [1337-server/automatic-ripping-machine] (Background on this error at: http://sqlalche.me/e/14/e3q8) (#83)
The arm user doesn't appear to own or have write access to the db file.
Can you check the permissions for the db file and post it.
You may need to chmod it to make it writeable/change owner.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub https://github.com/1337-server/automatic-ripping-machine/issues/83#issuecomment-895660069 , or unsubscribe https://github.com/notifications/unsubscribe-auth/AI32CRTA5R3XSAAQIVD7Z2TT4B6IRANCNFSM5B3DXXKA .
Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675  or Android https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email .  https://github.com/notifications/beacon/AI32CRQKPL6476W4HZPPZXLT4B6IRA5CNFSM5B3DXXKKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOGVRLAJI.gif

I think this issue may be caused by the ARMui service creating the db file, meaning it gets created by root and not the arm user it normally would if you just insert the disc.
I will need to find a way around this.

Thanks for getting back to me. I haven't had any time to troubleshoot the
issue but like you mentioned I believe it is the permissions to access the
database file.
Thanks,
Mike Kanak
(630) 417-9317
On Tue, Aug 10, 2021, 10:04 PM 1337-server @.***> wrote:

I think this issue may be caused by the ARMui service creating the db
file, meaning it gets created by root and not the arm user it normally
would if you just insert the disc.
I will need to find a way around this.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/1337-server/automatic-ripping-machine/issues/83#issuecomment-896463629,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AI32CRVSCPWS3LFBZE6B6DTT4HSEZANCNFSM5B3DXXKA
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email
.

I think I fixed the permission. When I run the program in backup I don’t get any errors but in mkv mode here is the error  get.
[15-08-2021 17:14:41] INFO ARM: makemkv.makemkv Starting MakeMKV rip. Method is mkv
[15-08-2021 17:14:41] DEBUG ARM: makemkv.makemkv Getting MakeMKV disc number
[15-08-2021 17:14:41] ERROR ARM: makemkv.makemkv Call to MakeMKV failed with code:  1 (b'')
[15-08-2021 17:14:41] ERROR ARM: main. A fatal error has occurred and ARM is exiting.  See traceback below for details.
Traceback (most recent call last):
File "/opt/arm/arm/ripper/makemkv.py", line 34, in makemkv
shell=True

File "/usr/lib/python3.7/subprocess.py", line 395, in check_output
**kwargs).stdout

File "/usr/lib/python3.7/subprocess.py", line 487, in run
output=stdout, stderr=stderr)

subprocess.CalledProcessError: Command 'makemkvcon -r info disc:9999  |grep /dev/sr0 |grep -oP '(?<=:).*?(?=,)'' returned non-zero exit status 1.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/arm/arm/ripper/main.py", line 446, in
main(logfile, job)

File "/opt/arm/arm/ripper/main.py", line 256, in main
mkvoutpath = makemkv.makemkv(logfile, job)

File "/opt/arm/arm/ripper/makemkv.py", line 41, in makemkv
raise RuntimeError(err)

RuntimeError: Call to MakeMKV failed with code:  1 (b'')
[15-08-2021 17:14:41] DEBUG ARM: models.eject we unmounted disc/dev/sr0
[15-08-2021 17:14:45] DEBUG ARM: models.eject failed to eject/dev/sr0
From: 1337-server @.>
Sent: Monday, August 9, 2021 8:30 PM
To: 1337-server/automatic-ripping-machine @.>
Cc: thewascokid @.>; Author @.>
Subject: Re: [1337-server/automatic-ripping-machine] (Background on this error at: http://sqlalche.me/e/14/e3q8) (#83)
The arm user doesn't appear to own or have write access to the db file.
Can you check the permissions for the db file and post it.
You may need to chmod it to make it writeable/change owner.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub https://github.com/1337-server/automatic-ripping-machine/issues/83#issuecomment-895660069 , or unsubscribe https://github.com/notifications/unsubscribe-auth/AI32CRTA5R3XSAAQIVD7Z2TT4B6IRANCNFSM5B3DXXKA .
Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675  or Android https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email .  https://github.com/notifications/beacon/AI32CRQKPL6476W4HZPPZXLT4B6IRA5CNFSM5B3DXXKKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOGVRLAJI.gif

Can you check that MakeMKV is properly installed ?
Try running makemkvcon in a terminal or ssh and check the output. Error code 1 usually means it cant find the program, or the arm users doesnt have access to MakeMKV

Here is the response I get. " makemkvcon: error while loading shared
libraries: libmakemkv.so.1: cannot open s
hared object file: No such file or directory
@.***:~#"
On Sun, Aug 15, 2021 at 7:06 PM 1337-server @.***>
wrote:

Can you check that MakeMKV is properly installed ?
Try running makemkvcon in a terminal or ssh and check the output. Error
code 1 usually means it cant find the program, or the arm users doesnt have
access to MakeMKV
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/1337-server/automatic-ripping-machine/issues/83#issuecomment-899132328,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AI32CRW2IPXGPRVJ6KC77Y3T5BI6ZANCNFSM5B3DXXKA
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email
.

--
Thanks
Mike & Marilyn Kanak

Thank you for all your help. I reinstalled makemkv and I think it worked.
👍
Thanks,
Mike Kanak
(630) 417-9317
On Sun, Aug 15, 2021, 7:15 PM Mike Kanak @.***> wrote:

Here is the response I get. " makemkvcon: error while loading shared
libraries: libmakemkv.so.1: cannot open s
hared object file: No such file or directory
@.***:~#"
On Sun, Aug 15, 2021 at 7:06 PM 1337-server @.***>
wrote:

Can you check that MakeMKV is properly installed ?
Try running makemkvcon in a terminal or ssh and check the output. Error
code 1 usually means it cant find the program, or the arm users doesnt have
access to MakeMKV
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/1337-server/automatic-ripping-machine/issues/83#issuecomment-899132328,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AI32CRW2IPXGPRVJ6KC77Y3T5BI6ZANCNFSM5B3DXXKA
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email
.

--
Thanks
Mike & Marilyn Kanak

Great. Ill close this now, just ping if this is still an issue and i can re-open this.


ZEVA - MY Report History bugs

Describe the Bug
This history is almost completely wrong. Double transactions showing, it was never returned. It couldn't be returned by Ford as shown. It doesn't match original snapshot data. Nothing was changed on this report so the history shouldn't have changed.

Expected Behaviour
When viewing a model year report, the history component should show the correct history entries and no duplicate values.
Actual Behaviour
Sometimes a model year report's history will show the same history entry twice.
Developer Checklist

[ ] Decipher if is this an incorrect data issue or potentially a reproducible bug under the right circumstances.
[ ] Either fix the data issue causing this duplicated entry or modify the code to ensure it can't happen while maintaining correct history.

Steps To Reproduce
Steps to reproduce the behaviour:
User/Role:

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

Hey team! Please add your planning poker estimate with Zenhub @AlexZorkin @JulianForeman @tim738745

Still looks like there is an issue here. I don't recall if this report was actually returned (I don't think so). But if it had, the Returned line should probably be tagged to Al Ring (not Dev Ford) then there would need to be a second Signed/Submitted line.

This should be fixed with the latest update and snapshot changes. If it persists let me know and I will look into it again.

there is a missing line here, the second supplier sign & submit
Private Zenhub Image

we will continue this work with card 1902 so can close this card


records: fix missing TestLegacyExport in testsuite

FIX Changes creation_date field definition in tests.  (closes #2214)

Signed-off-by: Jiri Kuncar<EMAIL_ADDRESS>

@tiborsimko what about the commit message?


Sorry, the architecture 'ia32' is not supported by TabNine.

Hi there,
I am using VSCode with Windows 10 x64:

After installing TabNine successfully, I tried to type something at the editor, but nothing happened.
Check the console to find the following error:
[Extension Host] Error setting up request: Error: Sorry, the architecture 'ia32' is not supported by TabNine.

I wonder if the architecture detection algorithm has an error, or why is this?

After deeper debug, I found that I install an x86 version of VSCode though I am using an x64 operating system.


RFC: Allow FTL to support external types by utilising type widening

In the following example did.PortableDID is a type from an external library. Currently we disallow this, but this pattern occurs a lot, particularly when dealing with open standards, etc.
Currently we need to do something like this:
var portableDID = ftl.Secret[map[string]any]("did_web_portable_did")

// Access the DID

func bearerDID(ctx context.Context) did.BearerDID {
	m := portableDID.Get(ctx)
	data, err := json.Marshal(m)
	if err != nil {
		panic(err)
	}
	var d did.PortableDID
	if err = json.Unmarshal(data, &d); err != nil {
		panic(err)
	}
	out, err := did.FromPortableDID(d)
	if err != nil {
		panic(err)
	}
	return out
}

Which is represented in the schema like so:
 secret did_web_portable_did {String: Any}

Gross.
The proposal is that because there's no type safety anyway, we allow external types to be used directly and the FTL type extraction would find a wider type that would still represent the concrete type in Go. In this case it would be a {String: Any}, but for eg. an array of something it might be [Any].
var portableDID = ftl.Secret[did.PortableDID]("did_web_portable_did")

That is, it would still be represented in the FTL schema as {String: Any} but would automatically decode into a strong Go type. This is no less type safe than what we already have, and in some ways is more type safe because at least we have strong typing in Go. In other languages such as Kotlin the same pattern could apply, using the custom external types for that "type".
Once #1285 lands, if type widening occurs a warning would be issued.
This would also apply to request/response types, etc. Basically anywhere FTL types are used.

There is another ticket re. mapping to/from external types


json2yaml line-wraps the output

Part of my JSON file has the following:
{
  "balanceHeld": {
    "description": "Balance of the account held for transferring to other users (in cents)",
    "type": "integer"
  },
}

json2yaml converts this to:
balanceHeld:
  description: Balance of the account held for transferring to other users (in
    cents)
  type: integer

It looks like all long lines are being wrapped at 80 characters or so.  But that line break that's being added in the description property is causing another tool to fail importing, because I don't think wrapping long lines like that results in a valid YAML file.
Could you add a flag to prevent line wrapping? Or output long lines with the "pipe" notation:
balanceHeld:
  description: |
    Balance of the account held for transferring to other users (in
    cents)
  type: integer

I cannot reproduce this with Go 1.4.2 and the latest versions of the dependencies on Linux x86_64. Could you run this script in the repository with a built binary and tell me what it outputs for you?
#!/bin/sh
set -e
cat >wrap.json <<END
{
  "balanceHeld": {
    "description": "Balance of the account held for transferring to other users (in cents)",
    "type": "integer"
  }
}
END
cat >wrap.reference.yaml <<END
balanceHeld:
  description: Balance of the account held for transferring to other users (in cents)
  type: integer

END
./remarshal -if=json -of=yaml -i=wrap.json > wrap.yaml
diff wrap.reference.yaml wrap.yaml && echo same
cp remarshal json2yaml
./json2yaml wrap.json > wrap.yaml
diff wrap.reference.yaml wrap.yaml && echo same
rm json2yaml

I will first admit that I installed the binaries on OSX via brew install remarshal.  Using those prebuilt binaries, the above works.
However, add a bunch more text to the description field in your example, and it does the line wrapping:
#!/bin/sh
set -e
cat >wrap.json <<END
{
  "balanceHeld": {
    "description": "Balance of the account held for transferring to other users (in cents) and then a bunch more text after that",
    "type": "integer"
  }
}
END
cat >wrap.reference.yaml <<END
balanceHeld:
  description: Balance of the account held for transferring to other users (in cents) and then a bunch more text after that
  type: integer

END
./remarshal -if=json -of=yaml -i=wrap.json > wrap.yaml
diff wrap.reference.yaml wrap.yaml && echo same
cp remarshal json2yaml
./json2yaml wrap.json > wrap.yaml
diff wrap.reference.yaml wrap.yaml && echo same
rm json2yaml

Right, I've reproduced it now. This appears to be an upstream bug: https://github.com/go-yaml/yaml/issues/166.
While I could fix the bug upstream, there is another problem with go-yaml: #2. Neither  go-yaml nor BurntSushi/toml seems to have a more a actively maintained alternative that handles the general case of serializing arbitrarily nested map/array data structures via reflection, so rewriting remarshal in another language that has such alternatives may be a better long-term investment. I'll look into it when I have the time.

Thanks for looking into this!
FWIW, in the interest of getting work done today, I found an node package that does what I needed: https://www.npmjs.com/package/json2yaml

Ah, good. This alternative should be useful to whoever else runs into this bug until it is fixed.
JavaScript sure does have well-maintained libraries for YAML and TOML. One strategy I'm considering for a rewrite is to package them in a static binary with Duktape, an embedded JS interpreter. This should be as convenient as the binaries built with Go.

Implemented in v0.5.0. Try
./remarshal.py -if=json -of=yaml '--yaml-style=|' wrap.json


Fix bug with how thermal scattering law data is not written to file

Description
Please include a summary of the change and which issue is fixed if applicable. Please also include relevant motivation and context.
Fixes # (issue)
Checklist

[ ] I have performed a self-review of my own code
[ ] I have made corresponding changes to the documentation (if applicable)
[ ] I have added tests that prove my fix is effective or that my feature works (if applicable)

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

5 of 5 (100.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.001%) to 98.126%

Totals

Change from base Build<PHONE_NUMBER>:
0.001%

Covered Lines:
5708

Relevant Lines:
5817

💛  - Coveralls


Work with typescript

Hi @mj1618,
Any chance you can port the changes you made in serverless-offline-sns to this repo?
Cheers,
darbio

hey @darbio !
Interesting question, would be good to understand your use case.
The idea of serverless-offline-sns is actually to be able to work with localstack as well. So if you just put the URL to localstack as your sns-endpoint then serverless-offline-sns will go to localstack rather than it's own sns server.
Does this sound like it would cover your use case? If so I might decomission this project.

Sorry for the late reply - yes, this works and it makes sense to decommission this project in favour of the single repo.


Function signatures

Thank you for this module. There's something wrong with function signatures or my VS Code setup, as I do not get much information about function arguments:
(function) find_matches_as_indexes: Any
Would you know what's going wrong?

I never really added any type signature documentation, basically. Would you like to submit a PR?

(You are under no obligation to do so, obviously; if you don't it'll get added to the todo list.)

My guess is it needs a .pyi file: https://mypy.readthedocs.io/en/stable/stubs.html

Oh but you'd need to make maturin know about it, which is a bit more work if you've never done it so maybe easier if I just do it.

0.14 should be out soon (later today? otherwise tomorrow) with this included.


Change Ruby users to Bundler users

I'm curious about the reasoning behind this change. Just more technically correct or was there some confusion here?

@ddollar Everyone using foreman is ruby users (or?) and only bundler users who have gemfiles, so it´s just more technically correct.

Not everyone using Foreman is a Ruby user. Some people install via deb, tgz, and other means. Thank you for the pull request but I'd prefer to leave this saying Ruby for now.


"rootPath": "/home/minhnguyen/Development/foo",
    "rootUri": "file:///home/minhnguyen/Development/foo",
    "capabilities": {
        "workspace": {
            "applyEdit": true,
            "workspaceEdit": {
                "documentChanges": true,
                "resourceOperations": [
                    "create",
                    "rename",
                    "delete"
                ],
                "failureHandling": "textOnlyTransactional"
            },
            "didChangeConfiguration": {
                "dynamicRegistration": true
            },
            "didChangeWatchedFiles": {
                "dynamicRegistration": true
            },
            "symbol": {
                "dynamicRegistration": true,
                "symbolKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25,
                        26
                    ]
                }
            },
            "executeCommand": {
                "dynamicRegistration": true
            },
            "configuration": true,
            "workspaceFolders": true
        },
        "textDocument": {
            "publishDiagnostics": {
                "relatedInformation": true,
                "versionSupport": false,
                "tagSupport": {
                    "valueSet": [
                        1,
                        2
                    ]
                }
            },
            "synchronization": {
                "dynamicRegistration": true,
                "willSave": true,
                "willSaveWaitUntil": true,
                "didSave": true
            },
            "completion": {
                "dynamicRegistration": true,
                "contextSupport": true,
                "completionItem": {
                    "snippetSupport": true,
                    "commitCharactersSupport": true,
                    "documentationFormat": [
                        "markdown",
                        "plaintext"
                    ],
                    "deprecatedSupport": true,
                    "preselectSupport": true,
                    "tagSupport": {
                        "valueSet": [
                            1
                        ]
                    }
                },
                "completionItemKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25
                    ]
                }
            },
            "hover": {
                "dynamicRegistration": true,
                "contentFormat": [
                    "markdown",
                    "plaintext"
                ]
            },
            "signatureHelp": {
                "dynamicRegistration": true,
                "signatureInformation": {
                    "documentationFormat": [
                        "markdown",
                        "plaintext"
                    ],
                    "parameterInformation": {
                        "labelOffsetSupport": true
                    }
                },
                "contextSupport": true
            },
            "definition": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "references": {
                "dynamicRegistration": true
            },
            "documentHighlight": {
                "dynamicRegistration": true
            },
            "documentSymbol": {
                "dynamicRegistration": true,
                "symbolKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25,
                        26
                    ]
                },
                "hierarchicalDocumentSymbolSupport": true
            },
            "codeAction": {
                "dynamicRegistration": true,
                "isPreferredSupport": true,
                "codeActionLiteralSupport": {
                    "codeActionKind": {
                        "valueSet": [
                            "",
                            "quickfix",
                            "refactor",
                            "refactor.extract",
                            "refactor.inline",
                            "refactor.rewrite",
                            "source",
                            "source.organizeImports"
                        ]
                    }
                }
            },
            "codeLens": {
                "dynamicRegistration": true
            },
            "formatting": {
                "dynamicRegistration": true
            },
            "rangeFormatting": {
                "dynamicRegistration": true
            },
            "onTypeFormatting": {
                "dynamicRegistration": true
            },
            "rename": {
                "dynamicRegistration": true,
                "prepareSupport": true
            },
            "documentLink": {
                "dynamicRegistration": true,
                "tooltipSupport": true
            },
            "typeDefinition": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "implementation": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "colorProvider": {
                "dynamicRegistration": true
            },
            "foldingRange": {
                "dynamicRegistration": true,
                "rangeLimit": 5000,
                "lineFoldingOnly": true
            },
            "declaration": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "selectionRange": {
                "dynamicRegistration": true
            }
        },
        "window": {
            "workDoneProgress": true
        }
    },
    "trace": "verbose",
    "workspaceFolders": [
        {
            "uri": "file:///home/minhnguyen/Development/foo",
            "name": "foo"
        }
    ]
}

[Trace - 14:10:16] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Default version of Prisma binary 'prisma-fmt': a4ef806349a7b17c41f45735ce4a36322e01c250"
}

[Info  - 14:10:16] Default version of Prisma binary 'prisma-fmt': a4ef806349a7b17c41f45735ce4a36322e01c250
[Trace - 14:10:16] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Extension name @prisma/language-server with version 12.0.53"
}

[Info  - 14:10:16] Extension name @prisma/language-server with version 12.0.53
[Trace - 14:10:16] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Prisma CLI version: 2.12.0-dev.40"
}

[Info  - 14:10:16] Prisma CLI version: 2.12.0-dev.40
[Trace - 14:10:16] Received response 'initialize - (0)' in 470ms.
Result: {
    "capabilities": {
        "definitionProvider": true,
        "documentFormattingProvider": true,
        "completionProvider": {
            "resolveProvider": true,
            "triggerCharacters": [
                "@",
                "\"",
                "."
            ]
        },
        "hoverProvider": true,
        "renameProvider": true,
        "codeActionProvider": {
            "codeActionKinds": [
                "quickfix"
            ]
        },
        "textDocumentSync": 1
    }
}

[Trace - 14:10:16] Sending notification 'initialized'.
Params: {}

[Trace - 14:10:16] Sending notification 'textDocument/didOpen'.
Params: {
    "textDocument": {
        "uri": "file:///home/minhnguyen/Development/foo/services/storage/prisma/schema.prisma",
        "languageId": "prisma",
        "version": 1,
        "text": ""
    }
}

[Trace - 14:10:16] Received request 'client/registerCapability - (0)'.
Params: {
    "registrations": [
        {
            "id": "88a9c164-1293-49b3-a76b-8bc29acef6f6",
            "method": "workspace/didChangeConfiguration",
            "registerOptions": {}
        }
    ]
}

[Trace - 14:10:16] Sending response 'client/registerCapability - (0)'. Processing request took 1ms
No result returned.

[Trace - 14:10:16] Received request 'workspace/configuration - (1)'.
Params: {
    "items": [
        {
            "scopeUri": "file:///home/minhnguyen/Development/foo/services/storage/prisma/schema.prisma",
            "section": "prisma"
        }
    ]
}

[Trace - 14:10:16] Sending response 'workspace/configuration - (1)'. Processing request took 4ms
Result: [
    {
        "prismaFmtBinPath": "",
        "trace": {
            "server": "verbose"
        }
    }
]

[Trace - 14:10:17] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Local prisma-fmt path<EMAIL_ADDRESS>}

[Info  - 14:10:17] Local prisma-fmt path<EMAIL_ADDRESS>[Info  - 14:10:17] Connection to server got closed. Server will restart.
[Trace - 14:10:17] Sending request 'initialize - (0)'.
Params: {
    "processId": 24772,
    "clientInfo": {
        "name": "vscode",
        "version": "1.51.1"
    },
    "rootPath": "/home/minhnguyen/Development/foo",
    "rootUri": "file:///home/minhnguyen/Development/foo",
    "capabilities": {
        "workspace": {
            "applyEdit": true,
            "workspaceEdit": {
                "documentChanges": true,
                "resourceOperations": [
                    "create",
                    "rename",
                    "delete"
                ],
                "failureHandling": "textOnlyTransactional"
            },
            "didChangeConfiguration": {
                "dynamicRegistration": true
            },
            "didChangeWatchedFiles": {
                "dynamicRegistration": true
            },
            "symbol": {
                "dynamicRegistration": true,
                "symbolKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25,
                        26
                    ]
                }
            },
            "executeCommand": {
                "dynamicRegistration": true
            },
            "configuration": true,
            "workspaceFolders": true
        },
        "textDocument": {
            "publishDiagnostics": {
                "relatedInformation": true,
                "versionSupport": false,
                "tagSupport": {
                    "valueSet": [
                        1,
                        2
                    ]
                }
            },
            "synchronization": {
                "dynamicRegistration": true,
                "willSave": true,
                "willSaveWaitUntil": true,
                "didSave": true
            },
            "completion": {
                "dynamicRegistration": true,
                "contextSupport": true,
                "completionItem": {
                    "snippetSupport": true,
                    "commitCharactersSupport": true,
                    "documentationFormat": [
                        "markdown",
                        "plaintext"
                    ],
                    "deprecatedSupport": true,
                    "preselectSupport": true,
                    "tagSupport": {
                        "valueSet": [
                            1
                        ]
                    }
                },
                "completionItemKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25
                    ]
                }
            },
            "hover": {
                "dynamicRegistration": true,
                "contentFormat": [
                    "markdown",
                    "plaintext"
                ]
            },
            "signatureHelp": {
                "dynamicRegistration": true,
                "signatureInformation": {
                    "documentationFormat": [
                        "markdown",
                        "plaintext"
                    ],
                    "parameterInformation": {
                        "labelOffsetSupport": true
                    }
                },
                "contextSupport": true
            },
            "definition": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "references": {
                "dynamicRegistration": true
            },
            "documentHighlight": {
                "dynamicRegistration": true
            },
            "documentSymbol": {
                "dynamicRegistration": true,
                "symbolKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25,
                        26
                    ]
                },
                "hierarchicalDocumentSymbolSupport": true
            },
            "codeAction": {
                "dynamicRegistration": true,
                "isPreferredSupport": true,
                "codeActionLiteralSupport": {
                    "codeActionKind": {
                        "valueSet": [
                            "",
                            "quickfix",
                            "refactor",
                            "refactor.extract",
                            "refactor.inline",
                            "refactor.rewrite",
                            "source",
                            "source.organizeImports"
                        ]
                    }
                }
            },
            "codeLens": {
                "dynamicRegistration": true
            },
            "formatting": {
                "dynamicRegistration": true
            },
            "rangeFormatting": {
                "dynamicRegistration": true
            },
            "onTypeFormatting": {
                "dynamicRegistration": true
            },
            "rename": {
                "dynamicRegistration": true,
                "prepareSupport": true
            },
            "documentLink": {
                "dynamicRegistration": true,
                "tooltipSupport": true
            },
            "typeDefinition": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "implementation": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "colorProvider": {
                "dynamicRegistration": true
            },
            "foldingRange": {
                "dynamicRegistration": true,
                "rangeLimit": 5000,
                "lineFoldingOnly": true
            },
            "declaration": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "selectionRange": {
                "dynamicRegistration": true
            }
        },
        "window": {
            "workDoneProgress": true
        }
    },
    "trace": "verbose",
    "workspaceFolders": [
        {
            "uri": "file:///home/minhnguyen/Development/foo",
            "name": "foo"
        }
    ]
}

[Trace - 14:10:18] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Default version of Prisma binary 'prisma-fmt': a4ef806349a7b17c41f45735ce4a36322e01c250"
}

[Info  - 14:10:18] Default version of Prisma binary 'prisma-fmt': a4ef806349a7b17c41f45735ce4a36322e01c250
[Trace - 14:10:18] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Extension name @prisma/language-server with version 12.0.53"
}

[Info  - 14:10:18] Extension name @prisma/language-server with version 12.0.53
[Trace - 14:10:18] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Prisma CLI version: 2.12.0-dev.40"
}

[Info  - 14:10:18] Prisma CLI version: 2.12.0-dev.40
[Trace - 14:10:18] Received response 'initialize - (0)' in 1781ms.
Result: {
    "capabilities": {
        "definitionProvider": true,
        "documentFormattingProvider": true,
        "completionProvider": {
            "resolveProvider": true,
            "triggerCharacters": [
                "@",
                "\"",
                "."
            ]
        },
        "hoverProvider": true,
        "renameProvider": true,
        "codeActionProvider": {
            "codeActionKinds": [
                "quickfix"
            ]
        },
        "textDocumentSync": 1
    }
}

[Trace - 14:10:18] Sending notification 'initialized'.
Params: {}

[Trace - 14:10:18] Sending notification 'textDocument/didOpen'.
Params: {
    "textDocument": {
        "uri": "file:///home/minhnguyen/Development/foo/services/storage/prisma/schema.prisma",
        "languageId": "prisma",
        "version": 1,
        "text": ""
    }
}

[Trace - 14:10:19] Received request 'client/registerCapability - (0)'.
Params: {
    "registrations": [
        {
            "id": "78c95405-33c9-4d9a-8eec-a5260852b017",
            "method": "workspace/didChangeConfiguration",
            "registerOptions": {}
        }
    ]
}

[Trace - 14:10:19] Sending response 'client/registerCapability - (0)'. Processing request took 0ms
No result returned.

[Trace - 14:10:19] Received request 'workspace/configuration - (1)'.
Params: {
    "items": [
        {
            "scopeUri": "file:///home/minhnguyen/Development/foo/services/storage/prisma/schema.prisma",
            "section": "prisma"
        }
    ]
}

[Trace - 14:10:19] Sending response 'workspace/configuration - (1)'. Processing request took 5ms
Result: [
    {
        "prismaFmtBinPath": "",
        "trace": {
            "server": "verbose"
        }
    }
]

[Trace - 14:10:19] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Local prisma-fmt path<EMAIL_ADDRESS>}

[Info  - 14:10:19] Local prisma-fmt path<EMAIL_ADDRESS>[Info  - 14:10:19] Connection to server got closed. Server will restart.
[Trace - 14:10:19] Sending request 'initialize - (0)'.
Params: {
    "processId": 24772,
    "clientInfo": {
        "name": "vscode",
        "version": "1.51.1"
    },
    "rootPath": "/home/minhnguyen/Development/foo",
    "rootUri": "file:///home/minhnguyen/Development/foo",
    "capabilities": {
        "workspace": {
            "applyEdit": true,
            "workspaceEdit": {
                "documentChanges": true,
                "resourceOperations": [
                    "create",
                    "rename",
                    "delete"
                ],
                "failureHandling": "textOnlyTransactional"
            },
            "didChangeConfiguration": {
                "dynamicRegistration": true
            },
            "didChangeWatchedFiles": {
                "dynamicRegistration": true
            },
            "symbol": {
                "dynamicRegistration": true,
                "symbolKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25,
                        26
                    ]
                }
            },
            "executeCommand": {
                "dynamicRegistration": true
            },
            "configuration": true,
            "workspaceFolders": true
        },
        "textDocument": {
            "publishDiagnostics": {
                "relatedInformation": true,
                "versionSupport": false,
                "tagSupport": {
                    "valueSet": [
                        1,
                        2
                    ]
                }
            },
            "synchronization": {
                "dynamicRegistration": true,
                "willSave": true,
                "willSaveWaitUntil": true,
                "didSave": true
            },
            "completion": {
                "dynamicRegistration": true,
                "contextSupport": true,
                "completionItem": {
                    "snippetSupport": true,
                    "commitCharactersSupport": true,
                    "documentationFormat": [
                        "markdown",
                        "plaintext"
                    ],
                    "deprecatedSupport": true,
                    "preselectSupport": true,
                    "tagSupport": {
                        "valueSet": [
                            1
                        ]
                    }
                },
                "completionItemKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25
                    ]
                }
            },
            "hover": {
                "dynamicRegistration": true,
                "contentFormat": [
                    "markdown",
                    "plaintext"
                ]
            },
            "signatureHelp": {
                "dynamicRegistration": true,
                "signatureInformation": {
                    "documentationFormat": [
                        "markdown",
                        "plaintext"
                    ],
                    "parameterInformation": {
                        "labelOffsetSupport": true
                    }
                },
                "contextSupport": true
            },
            "definition": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "references": {
                "dynamicRegistration": true
            },
            "documentHighlight": {
                "dynamicRegistration": true
            },
            "documentSymbol": {
                "dynamicRegistration": true,
                "symbolKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25,
                        26
                    ]
                },
                "hierarchicalDocumentSymbolSupport": true
            },
            "codeAction": {
                "dynamicRegistration": true,
                "isPreferredSupport": true,
                "codeActionLiteralSupport": {
                    "codeActionKind": {
                        "valueSet": [
                            "",
                            "quickfix",
                            "refactor",
                            "refactor.extract",
                            "refactor.inline",
                            "refactor.rewrite",
                            "source",
                            "source.organizeImports"
                        ]
                    }
                }
            },
            "codeLens": {
                "dynamicRegistration": true
            },
            "formatting": {
                "dynamicRegistration": true
            },
            "rangeFormatting": {
                "dynamicRegistration": true
            },
            "onTypeFormatting": {
                "dynamicRegistration": true
            },
            "rename": {
                "dynamicRegistration": true,
                "prepareSupport": true
            },
            "documentLink": {
                "dynamicRegistration": true,
                "tooltipSupport": true
            },
            "typeDefinition": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "implementation": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "colorProvider": {
                "dynamicRegistration": true
            },
            "foldingRange": {
                "dynamicRegistration": true,
                "rangeLimit": 5000,
                "lineFoldingOnly": true
            },
            "declaration": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "selectionRange": {
                "dynamicRegistration": true
            }
        },
        "window": {
            "workDoneProgress": true
        }
    },
    "trace": "verbose",
    "workspaceFolders": [
        {
            "uri": "file:///home/minhnguyen/Development/foo",
            "name": "foo"
        }
    ]
}

[Trace - 14:10:20] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Default version of Prisma binary 'prisma-fmt': a4ef806349a7b17c41f45735ce4a36322e01c250"
}

[Info  - 14:10:20] Default version of Prisma binary 'prisma-fmt': a4ef806349a7b17c41f45735ce4a36322e01c250
[Trace - 14:10:20] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Extension name @prisma/language-server with version 12.0.53"
}

[Info  - 14:10:20] Extension name @prisma/language-server with version 12.0.53
[Trace - 14:10:20] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Prisma CLI version: 2.12.0-dev.40"
}

[Info  - 14:10:20] Prisma CLI version: 2.12.0-dev.40
[Trace - 14:10:20] Received response 'initialize - (0)' in 1480ms.
Result: {
    "capabilities": {
        "definitionProvider": true,
        "documentFormattingProvider": true,
        "completionProvider": {
            "resolveProvider": true,
            "triggerCharacters": [
                "@",
                "\"",
                "."
            ]
        },
        "hoverProvider": true,
        "renameProvider": true,
        "codeActionProvider": {
            "codeActionKinds": [
                "quickfix"
            ]
        },
        "textDocumentSync": 1
    }
}

[Trace - 14:10:20] Sending notification 'initialized'.
Params: {}

[Trace - 14:10:20] Sending notification 'textDocument/didOpen'.
Params: {
    "textDocument": {
        "uri": "file:///home/minhnguyen/Development/foo/services/storage/prisma/schema.prisma",
        "languageId": "prisma",
        "version": 1,
        "text": ""
    }
}

[Trace - 14:10:20] Sending request 'textDocument/codeAction - (1)'.
Params: {
    "textDocument": {
        "uri": "file:///home/minhnguyen/Development/foo/services/storage/prisma/schema.prisma"
    },
    "range": {
        "start": {
            "line": 29,
            "character": 24
        },
        "end": {
            "line": 29,
            "character": 24
        }
    },
    "context": {
        "diagnostics": []
    }
}

[Trace - 14:10:20] Received request 'client/registerCapability - (0)'.
Params: {
    "registrations": [
        {
            "id": "39fe1c91-ab93-4fe1-8b55-9ef398d9a05b",
            "method": "workspace/didChangeConfiguration",
            "registerOptions": {}
        }
    ]
}

[Trace - 14:10:20] Sending response 'client/registerCapability - (0)'. Processing request took 0ms
No result returned.

[Trace - 14:10:20] Received request 'workspace/configuration - (1)'.
Params: {
    "items": [
        {
            "scopeUri": "file:///home/minhnguyen/Development/foo/services/storage/prisma/schema.prisma",
            "section": "prisma"
        }
    ]
}

[Trace - 14:10:20] Sending response 'workspace/configuration - (1)'. Processing request took 6ms
Result: [
    {
        "prismaFmtBinPath": "",
        "trace": {
            "server": "verbose"
        }
    }
]

[Trace - 14:10:20] Received response 'textDocument/codeAction - (1)' in 46ms.
Result: []

[Trace - 14:10:20] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Local prisma-fmt path<EMAIL_ADDRESS>}

[Info  - 14:10:20] Local prisma-fmt path<EMAIL_ADDRESS>[Info  - 14:10:20] Connection to server got closed. Server will restart.
[Trace - 14:10:21] Sending request 'initialize - (0)'.
Params: {
    "processId": 24772,
    "clientInfo": {
        "name": "vscode",
        "version": "1.51.1"
    },
    "rootPath": "/home/minhnguyen/Development/foo",
    "rootUri": "file:///home/minhnguyen/Development/foo",
    "capabilities": {
        "workspace": {
            "applyEdit": true,
            "workspaceEdit": {
                "documentChanges": true,
                "resourceOperations": [
                    "create",
                    "rename",
                    "delete"
                ],
                "failureHandling": "textOnlyTransactional"
            },
            "didChangeConfiguration": {
                "dynamicRegistration": true
            },
            "didChangeWatchedFiles": {
                "dynamicRegistration": true
            },
            "symbol": {
                "dynamicRegistration": true,
                "symbolKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25,
                        26
                    ]
                }
            },
            "executeCommand": {
                "dynamicRegistration": true
            },
            "configuration": true,
            "workspaceFolders": true
        },
        "textDocument": {
            "publishDiagnostics": {
                "relatedInformation": true,
                "versionSupport": false,
                "tagSupport": {
                    "valueSet": [
                        1,
                        2
                    ]
                }
            },
            "synchronization": {
                "dynamicRegistration": true,
                "willSave": true,
                "willSaveWaitUntil": true,
                "didSave": true
            },
            "completion": {
                "dynamicRegistration": true,
                "contextSupport": true,
                "completionItem": {
                    "snippetSupport": true,
                    "commitCharactersSupport": true,
                    "documentationFormat": [
                        "markdown",
                        "plaintext"
                    ],
                    "deprecatedSupport": true,
                    "preselectSupport": true,
                    "tagSupport": {
                        "valueSet": [
                            1
                        ]
                    }
                },
                "completionItemKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25
                    ]
                }
            },
            "hover": {
                "dynamicRegistration": true,
                "contentFormat": [
                    "markdown",
                    "plaintext"
                ]
            },
            "signatureHelp": {
                "dynamicRegistration": true,
                "signatureInformation": {
                    "documentationFormat": [
                        "markdown",
                        "plaintext"
                    ],
                    "parameterInformation": {
                        "labelOffsetSupport": true
                    }
                },
                "contextSupport": true
            },
            "definition": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "references": {
                "dynamicRegistration": true
            },
            "documentHighlight": {
                "dynamicRegistration": true
            },
            "documentSymbol": {
                "dynamicRegistration": true,
                "symbolKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25,
                        26
                    ]
                },
                "hierarchicalDocumentSymbolSupport": true
            },
            "codeAction": {
                "dynamicRegistration": true,
                "isPreferredSupport": true,
                "codeActionLiteralSupport": {
                    "codeActionKind": {
                        "valueSet": [
                            "",
                            "quickfix",
                            "refactor",
                            "refactor.extract",
                            "refactor.inline",
                            "refactor.rewrite",
                            "source",
                            "source.organizeImports"
                        ]
                    }
                }
            },
            "codeLens": {
                "dynamicRegistration": true
            },
            "formatting": {
                "dynamicRegistration": true
            },
            "rangeFormatting": {
                "dynamicRegistration": true
            },
            "onTypeFormatting": {
                "dynamicRegistration": true
            },
            "rename": {
                "dynamicRegistration": true,
                "prepareSupport": true
            },
            "documentLink": {
                "dynamicRegistration": true,
                "tooltipSupport": true
            },
            "typeDefinition": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "implementation": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "colorProvider": {
                "dynamicRegistration": true
            },
            "foldingRange": {
                "dynamicRegistration": true,
                "rangeLimit": 5000,
                "lineFoldingOnly": true
            },
            "declaration": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "selectionRange": {
                "dynamicRegistration": true
            }
        },
        "window": {
            "workDoneProgress": true
        }
    },
    "trace": "verbose",
    "workspaceFolders": [
        {
            "uri": "file:///home/minhnguyen/Development/foo",
            "name": "foo"
        }
    ]
}

[Trace - 14:10:22] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Default version of Prisma binary 'prisma-fmt': a4ef806349a7b17c41f45735ce4a36322e01c250"
}

[Info  - 14:10:22] Default version of Prisma binary 'prisma-fmt': a4ef806349a7b17c41f45735ce4a36322e01c250
[Trace - 14:10:22] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Extension name @prisma/language-server with version 12.0.53"
}

[Info  - 14:10:22] Extension name @prisma/language-server with version 12.0.53
[Trace - 14:10:23] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Prisma CLI version: 2.12.0-dev.40"
}

[Info  - 14:10:23] Prisma CLI version: 2.12.0-dev.40
[Trace - 14:10:23] Received response 'initialize - (0)' in 2358ms.
Result: {
    "capabilities": {
        "definitionProvider": true,
        "documentFormattingProvider": true,
        "completionProvider": {
            "resolveProvider": true,
            "triggerCharacters": [
                "@",
                "\"",
                "."
            ]
        },
        "hoverProvider": true,
        "renameProvider": true,
        "codeActionProvider": {
            "codeActionKinds": [
                "quickfix"
            ]
        },
        "textDocumentSync": 1
    }
}

[Trace - 14:10:23] Sending notification 'initialized'.
Params: {}

[Trace - 14:10:23] Sending notification 'textDocument/didOpen'.
Params: {
    "textDocument": {
        "uri": "file:///home/minhnguyen/Development/foo/services/storage/prisma/schema.prisma",
        "languageId": "prisma",
        "version": 1,
        "text": ""
    }
}

[Trace - 14:10:23] Received request 'client/registerCapability - (0)'.
Params: {
    "registrations": [
        {
            "id": "217f4c18-d929-4456-aef6-d1684fcd4a80",
            "method": "workspace/didChangeConfiguration",
            "registerOptions": {}
        }
    ]
}

[Trace - 14:10:23] Sending response 'client/registerCapability - (0)'. Processing request took 0ms
No result returned.

[Trace - 14:10:23] Sending request 'textDocument/codeAction - (1)'.
Params: {
    "textDocument": {
        "uri": "file:///home/minhnguyen/Development/foo/services/storage/prisma/schema.prisma"
    },
    "range": {
        "start": {
            "line": 29,
            "character": 24
        },
        "end": {
            "line": 29,
            "character": 24
        }
    },
    "context": {
        "diagnostics": []
    }
}

[Trace - 14:10:23] Received request 'workspace/configuration - (1)'.
Params: {
    "items": [
        {
            "scopeUri": "file:///home/minhnguyen/Development/foo/services/storage/prisma/schema.prisma",
            "section": "prisma"
        }
    ]
}

[Trace - 14:10:23] Sending response 'workspace/configuration - (1)'. Processing request took 2ms
Result: [
    {
        "prismaFmtBinPath": "",
        "trace": {
            "server": "verbose"
        }
    }
]

[Trace - 14:10:24] Received response 'textDocument/codeAction - (1)' in 81ms.
Result: []

[Trace - 14:10:24] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Local prisma-fmt path<EMAIL_ADDRESS>}

[Info  - 14:10:24] Local prisma-fmt path<EMAIL_ADDRESS>[Info  - 14:10:24] Connection to server got closed. Server will restart.
[Trace - 14:10:24] Sending request 'initialize - (0)'.
Params: {
    "processId": 24772,
    "clientInfo": {
        "name": "vscode",
        "version": "1.51.1"
    },
    "rootPath": "/home/minhnguyen/Development/foo",
    "rootUri": "file:///home/minhnguyen/Development/foo",
    "capabilities": {
        "workspace": {
            "applyEdit": true,
            "workspaceEdit": {
                "documentChanges": true,
                "resourceOperations": [
                    "create",
                    "rename",
                    "delete"
                ],
                "failureHandling": "textOnlyTransactional"
            },
            "didChangeConfiguration": {
                "dynamicRegistration": true
            },
            "didChangeWatchedFiles": {
                "dynamicRegistration": true
            },
            "symbol": {
                "dynamicRegistration": true,
                "symbolKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25,
                        26
                    ]
                }
            },
            "executeCommand": {
                "dynamicRegistration": true
            },
            "configuration": true,
            "workspaceFolders": true
        },
        "textDocument": {
            "publishDiagnostics": {
                "relatedInformation": true,
                "versionSupport": false,
                "tagSupport": {
                    "valueSet": [
                        1,
                        2
                    ]
                }
            },
            "synchronization": {
                "dynamicRegistration": true,
                "willSave": true,
                "willSaveWaitUntil": true,
                "didSave": true
            },
            "completion": {
                "dynamicRegistration": true,
                "contextSupport": true,
                "completionItem": {
                    "snippetSupport": true,
                    "commitCharactersSupport": true,
                    "documentationFormat": [
                        "markdown",
                        "plaintext"
                    ],
                    "deprecatedSupport": true,
                    "preselectSupport": true,
                    "tagSupport": {
                        "valueSet": [
                            1
                        ]
                    }
                },
                "completionItemKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25
                    ]
                }
            },
            "hover": {
                "dynamicRegistration": true,
                "contentFormat": [
                    "markdown",
                    "plaintext"
                ]
            },
            "signatureHelp": {
                "dynamicRegistration": true,
                "signatureInformation": {
                    "documentationFormat": [
                        "markdown",
                        "plaintext"
                    ],
                    "parameterInformation": {
                        "labelOffsetSupport": true
                    }
                },
                "contextSupport": true
            },
            "definition": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "references": {
                "dynamicRegistration": true
            },
            "documentHighlight": {
                "dynamicRegistration": true
            },
            "documentSymbol": {
                "dynamicRegistration": true,
                "symbolKind": {
                    "valueSet": [
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        24,
                        25,
                        26
                    ]
                },
                "hierarchicalDocumentSymbolSupport": true
            },
            "codeAction": {
                "dynamicRegistration": true,
                "isPreferredSupport": true,
                "codeActionLiteralSupport": {
                    "codeActionKind": {
                        "valueSet": [
                            "",
                            "quickfix",
                            "refactor",
                            "refactor.extract",
                            "refactor.inline",
                            "refactor.rewrite",
                            "source",
                            "source.organizeImports"
                        ]
                    }
                }
            },
            "codeLens": {
                "dynamicRegistration": true
            },
            "formatting": {
                "dynamicRegistration": true
            },
            "rangeFormatting": {
                "dynamicRegistration": true
            },
            "onTypeFormatting": {
                "dynamicRegistration": true
            },
            "rename": {
                "dynamicRegistration": true,
                "prepareSupport": true
            },
            "documentLink": {
                "dynamicRegistration": true,
                "tooltipSupport": true
            },
            "typeDefinition": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "implementation": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "colorProvider": {
                "dynamicRegistration": true
            },
            "foldingRange": {
                "dynamicRegistration": true,
                "rangeLimit": 5000,
                "lineFoldingOnly": true
            },
            "declaration": {
                "dynamicRegistration": true,
                "linkSupport": true
            },
            "selectionRange": {
                "dynamicRegistration": true
            }
        },
        "window": {
            "workDoneProgress": true
        }
    },
    "trace": "verbose",
    "workspaceFolders": [
        {
            "uri": "file:///home/minhnguyen/Development/foo",
            "name": "foo"
        }
    ]
}

[Trace - 14:10:24] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Default version of Prisma binary 'prisma-fmt': a4ef806349a7b17c41f45735ce4a36322e01c250"
}

[Info  - 14:10:24] Default version of Prisma binary 'prisma-fmt': a4ef806349a7b17c41f45735ce4a36322e01c250
[Trace - 14:10:25] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Extension name @prisma/language-server with version 12.0.53"
}

[Info  - 14:10:25] Extension name @prisma/language-server with version 12.0.53
[Trace - 14:10:25] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Prisma CLI version: 2.12.0-dev.40"
}

[Info  - 14:10:25] Prisma CLI version: 2.12.0-dev.40
[Trace - 14:10:25] Received response 'initialize - (0)' in 932ms.
Result: {
    "capabilities": {
        "definitionProvider": true,
        "documentFormattingProvider": true,
        "completionProvider": {
            "resolveProvider": true,
            "triggerCharacters": [
                "@",
                "\"",
                "."
            ]
        },
        "hoverProvider": true,
        "renameProvider": true,
        "codeActionProvider": {
            "codeActionKinds": [
                "quickfix"
            ]
        },
        "textDocumentSync": 1
    }
}

[Trace - 14:10:25] Sending notification 'initialized'.
Params: {}

[Trace - 14:10:25] Sending notification 'textDocument/didOpen'.
Params: {
    "textDocument": {
        "uri": "file:///home/minhnguyen/Development/foo/services/storage/prisma/schema.prisma",
        "languageId": "prisma",
        "version": 1,
        "text": ""
    }
}

[Trace - 14:10:25] Received request 'client/registerCapability - (0)'.
Params: {
    "registrations": [
        {
            "id": "53102a31-7c6c-466a-8b2a-5d02ec68c72d",
            "method": "workspace/didChangeConfiguration",
            "registerOptions": {}
        }
    ]
}

[Trace - 14:10:25] Sending response 'client/registerCapability - (0)'. Processing request took 0ms
No result returned.

[Trace - 14:10:25] Sending request 'textDocument/codeAction - (1)'.
Params: {
    "textDocument": {
        "uri": "file:///home/minhnguyen/Development/foo/services/storage/prisma/schema.prisma"
    },
    "range": {
        "start": {
            "line": 29,
            "character": 24
        },
        "end": {
            "line": 29,
            "character": 24
        }
    },
    "context": {
        "diagnostics": []
    }
}

[Trace - 14:10:25] Received request 'workspace/configuration - (1)'.
Params: {
    "items": [
        {
            "scopeUri": "file:///home/minhnguyen/Development/foo/services/storage/prisma/schema.prisma",
            "section": "prisma"
        }
    ]
}

[Trace - 14:10:25] Sending response 'workspace/configuration - (1)'. Processing request took 5ms
Result: [
    {
        "prismaFmtBinPath": "",
        "trace": {
            "server": "verbose"
        }
    }
]

[Trace - 14:10:25] Received response 'textDocument/codeAction - (1)' in 59ms.
Result: []

[Trace - 14:10:25] Received notification 'window/logMessage'.
Params: {
    "type": 3,
    "message": "Local prisma-fmt path<EMAIL_ADDRESS>}

[Info  - 14:10:25] Local prisma-fmt path<EMAIL_ADDRESS>[Error - 14:10:25] Connection to server got closed. Server will not be restarted.

So that means the downloading was not the problem, if you do have the file there. Which also means we're back to the beginning without an idea what's causing the issue unfortunately..

I'm trying to think about where it could crash, let's check if the crash is related to the schema file. So can you try this schema:
datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
}

model User {
  hi   Int    @id
  test String
  hdi  Test   @relation(fields: [testId], references: [id])

  testId Int
}

model Test {
  id   Int    @id
  User User[]
}

Thank you for trying out lots of things as well!

Have you always experienced this or was there an earlier version where this did not occur?

Have you always experienced this or was there an earlier version where this did not occur?

I only started using at work about 2 months ago? But I think I've always had issues with it at work. Works fine on my personal Mac.

I'm trying to think about where it could crash, let's check if the crash is related to the schema file. So can you try this schema:
datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
}

model User {
  hi   Int    @id
  test String
  hdi  Test   @relation(fields: [testId], references: [id])

  testId Int
}

model Test {
  id   Int    @id
  User User[]
}

Thank you for trying out lots of things as well!

Happened with this schema as well. Using a newly started VS Code.

Happened with this schema as well. Using a newly started VS Code.

Same here. Perhaps this will help though: I have no problems at all editing a schema.presma file on Windows, it only crashes when using WSL. @carmenberndt Can you replicate this environment perhaps? Windows 10, WSL2, and VSCode connected to WSL with the prisma language server running on WSL instead of on Windows.

I tried to reproduce this using WSL 2, with the extension only installed on WSL: Ubuntu-20.04 and VSCode connected to WSL. I unfortunately could not reproduce the issue this way.

try to delete $HOME/.vscode/extensions/prisma.prisma-2.11.1 and reinstall prisma extension

@ueclick that's what I did before trying to reproduce this.

I tried to reproduce this using WSL 2, with the extension only installed on WSL: Ubuntu-20.04 and VSCode connected to WSL. I unfortunately could not reproduce the issue this way.

Is there any way I can help you with this?

If you can find exact steps (aka a reproduction) that will lead to this issue every time you follow those, this will help a lot. 🙏
I also asked @martzoukos to reproduce this on WSL, but he could not reproduce this either. (Using https://github.com/prisma/prisma-examples/tree/latest/javascript/rest-nextjs and 2.11.1)

If you can find exact steps (aka a reproduction) that will lead to this issue every time you follow those, this will help a lot. 🙏
I also asked @martzoukos to reproduce this on WSL, but he could not reproduce this either. (Using https://github.com/prisma/prisma-examples/tree/latest/javascript/rest-nextjs and 2.11.1)

Would you be willing to do like a screenshare session on Zoom or something?

Hey @NMinhNguyen , that sounds like a good idea. Would you be available for a quick Zoom call in 10 minutes?

Hey @NMinhNguyen , that sounds like a good idea. Would you be available for a quick Zoom call in 10 minutes?

Unfortunately not today as I'm in training but how about any time tomorrow?

@NMinhNguyen can you please ping me at<EMAIL_ADDRESS>so I can set up a meeting for tomorrow?

This issue should be fixed with #640. If you still experience problems when using a Proxy, please comment below, otherwise please create a new issue.

I'm still getting same issue, any updates?


Retrieve templates from functions portal instead of cli

The main benefits:

We get the full list of templates supported in the portal
We can dynamically prompt the user for input parameters
We reduce reliance on the func cli

I also refactored uiUtil into an interface so that I could more easily create unit tests
Fixes #22
Remaining work:
#28 - I only supported the user input types required for the cosmosDBTrigger and left the rest as 'string'
#29 - When selecting a resource, it should show a quick pick with existing connection string App Settings
#30 - some templates don't work with v2 of the func cli. We should filter them out before releasing
#31 - I only display 'Core' templates, but we could optionally display them all

The majority of the code (and all the code in the 'templates' folder) is based around parsing the JSON from the functions portal. See here for a trimmed down version of the JSON for just the TimerTrigger template:
https://gist.github.com/EricJizbaMSFT/5fa5031df110ee488ee0b1f4f880ed9a

Never mind about the gist. I added a README to the 'templates' folder with the same example and a tiny bit of description