Genome Size Estimation

Hi,
As mentioned in the Supplementary Notes and Figures 1.3.2 Genome Size Estimation, the haploid genome size is estimated by: "This estimate is revised by summing the total number of k-mers, except presumptive sequencing errors identified as in section 1.3.1, and dividing by the 2*λ, the estimated coverage for homozygous k-mers".
If I understand it correctly, λ is the mean of a distribution, the estimated coverage for homozygous k-mers; and in the genomescope profile, kcov is the estimated coverage for heterozygous kmers.
Could you explain how genomescope estimates haploid genome size, specifically why dividing by 2 times of the estimated coverage for homozygous k-mers?
Best,
Quan

Hi Quan,
Thank you for writing. I think there is a bit of confusion over the
variable names and how they relate to each other. The first thing to note
is λ and kcov refer to the same value, just that we use λ in the written
document and kcov in the code. The modeling tries to identify 4 peaks
centered at λ, 2λ, 3λ, and 4λ. These 4 peaks correspond to the mean
coverage levels of the unique heterozygous, unique homozygous, repetitive
heterozygous and repetitive homozygous sequences, respectively. So when it
estimates the haploid genome size, it divides by the 2λ, which is the
average homozygous coverage, not "2 times the estimated coverage for
homozygous k-mers" as you write.
The other confusing aspect is what is meant by haploid genome size versus
diploid genome size. We consider the haploid genome size to mean the span
of one complete set of haploid chromosomes and the diploid genome size to
be the span of both haploid copies (total DNA content in one diploid cell).
In particular, in a human cell, the haploid genome size is about 3Gbp and
the diploid genome size is about 6Gbp. If you sequence a total of 300Gbp
for a human genome, that would be about 150Gbp (50x coverage) of the
maternal haplotype and about 150Gbp (50x coverage) of the paternal
haplotype. But since the heterozygosity rate in humans is so low, the main
peak in the distribution would be centered around 100x. However,
GenomeScope will still try to fit the 4 peaks, so should set the
heterozygous kmer coverage λ equal to 50x, and thus the homozygous coverage
to 2*λ = 100x. From this GenomeScope will compute the haploid genome size
as the total amount of sequence data (300GB) divided by the homozygous
coverage (100x) to report 3Gbp as expected. Kmers with higher coverage are
naturally scaled as well: kmers that occur 200 or 300 times in the kmer
profile (and thus are 2 or 3 copy repeats in the diploid genome, 4 or 6
times in the haploid sequences) are still scaled by 100x to contribute 2 or
3 copies to the estimate. Finally, note that if the two haplotypes have
significantly different lengths, then the reported haploid genome size will
be the average of the two.
Hope this helps!
Mike
On Thu, Oct 13, 2016 at 1:04 AM, danshu<EMAIL_ADDRESS>wrote:

Hi,
As mentioned in the Supplementary Notes and Figures 1.3.2 Genome Size
Estimation, the haploid genome size is estimated by: "This estimate is
revised by summing the total number of k-mers, except presumptive
sequencing errors identified as in section 1.3.1, and dividing by the 2*λ,
the estimated coverage for homozygous k-mers".
If I understand it correctly, λ is the mean of a distribution, the
estimated coverage for homozygous k-mers; and in the genomescope profile,
kcov is the estimated coverage for heterozygous kmers.
Could you explain how genomescope estimates haploid genome size,
specifically why dividing by 2 times of the estimated coverage for
homozygous k-mers?
Best,
Quan
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/schatzlab/genomescope/issues/1, or mute the thread
https://github.com/notifications/unsubscribe-auth/AAL988pu7YpaR5V8jSYgxNQUucAiWuUXks5qzbvGgaJpZM4KVfUf
.

Hi Mike,
Thanks for your explanation. The reason that I asked this question is that the genome size estimated by Genome scope is about half of that summing all kmers and dividing by 2*λ.
I used dsk to count kmers and genomescope use jellyfish to count kmers. This should be the cause of the difference since jellyfish by default will not count kmers with frequencies higher than 10000.
Thanks,
Quan

Yes, the genome size calculation is pretty straightforward. The hardest
part is deciding which Kmers are caused by sequencing errors - at
reasonable coverage levels this is usually pretty easy for GenomeScope to
figure out as kmers with low coverage that dont fit the expect model. Oh,
and be careful with kmers that have extremely high coverage - we see that
these are often artifacts (like phiX spike in sequence) or in the case of
plant genomes, mitochondrial sequences. This inflated our original
Arabidopsis estimate by several tens of megabases until we corrected for it.
Cheers,
Mike
On Thu, Oct 13, 2016 at 11:01 PM, danshu<EMAIL_ADDRESS>wrote:

Hi Mike,
Thanks for your explanation. The reason that I asked this question is that
the genome size estimated by Genome scope is about half of that summing all
kmers and dividing by 2*λ.
I used dsk to count kmers and genomescope use jellyfish to count kmers.
This should be the cause of the difference since jellyfish by default will
not count kmers with frequencies higher than 10000.
Thanks,
Quan
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/schatzlab/genomescope/issues/1#issuecomment-253697837,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAL98wP1ScxkR02i3b9L3ckc6qGecP70ks5qzvB2gaJpZM4KVfUf
.

Dear Mike,
Thanks for your advice. In my case, these extremely high coverage kmers seem to come from tandem repeats.
Best,
Quan


Add support for production contracts

[ ] Update the SDK
[ ] Modify the /rate and /analytics endpoints to check if ENVIRONMENT=prod and set the network to arbitrum
[ ] Add funds to the Payer 0x30E6D104C87AEf61C9ca861e84Fa4723d224d52c

Stale, will revisit after testnet


Vault cannot access to mounted configuration file

Vault cannot access to configuration file mounted by n3d
Env: AlmaLinux 8.9 x86_64

Fixed in https://github.com/MahammadAgayev/n3d/compare/main...patch/vault-conf


Dev Home PI: Create a new BarWindowViewModel with a new BarWindow instance

Summary of the pull request
Bug: PI crashes when a user closes the 1st BarWindow and then restarts PI ->click on process list button.
Problem: Toggling expand window status. We try to collapse an already collapsed window.
Detailed description of the pull request / Additional comments
Since we have BarWindowViewModel as a singleton, when a new BarWindow is created, it reuses the exiting instance of BarWindowViewModel. It is possible the user closed the initial instance of BarWindow in the expanded state. Now when a new instance is started and the user wants to expand the bar, the viewmodel thinks it is already expanded, and tries to collapse it. Also, viewmodel is not in its default state.
Fix: Create a new BarWindowViewModel with every BarWindow instance, so it is in its default state.
Other fixes:

Add a new PIInsightsService, which can be referenced and updated from various view models.
Remove ToggleExpandedContentVisibility from ProcessChooser, since NavigateTo handles expanding the window.

Validation steps performed

Launched PI
Expanded the window
Closed PI
Launched PI again
Click on process chooser or Insights button
Made sure PI doesn't crash
Also, added new logs and insights
Confirmed the unread insights count is updated
Read a few insights and confirmed the unread insights count are correct.

What is an insight?  I see it used in this PR but I have no idea what it refers to.

What is an insight? I see it used in this PR but I have no idea what it refers to.

We have an Insights page in PI, this is a page where we give out more information/analysis of any failure for an app. For example, if an app is trying to use a file, but the file is locked and used by another process. We add an insight mentioning that the file is locked and currently in use by process ABC.

Does this PR account for the case an extension is uninstalled?


dockerfile for whiteblock

PR Description
Made a dockerfile that's compatible with the whiteblock platform. Can also be used with nonce.

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


font scaling affecting location assertion

to reproduce: set font scaling to a non-default value. try 200-300%.

go to hotspot > assert location
drop the pin on a map, proceed to next step
pin moves to a different location.

video on discord: https://discord.com/channels/404106811252408320/733699201887764511/907302163234058301
confirmed with user that if he removes font scaling, the location doesn't move "as much".
questions to consider: is it the svg? can we use lock the icon resolution?

Any workaround for this? This happens to, I'm trying to set location but it always move on the following screens


Enhance application-id usage in kafka streams binder

When multiple input bindings are present on the same processor, the binder forces the user to specify application id on each of the bindings. This could be error prone (typo for ex) and redundant. Ideally, the binder should infer that information somehow.

After digging through this issue for a bit, the binder doesn't actually force the application to specify application.id on all the bindings on a processor. However, the binder expects that the application provides the application.id on the first binding on the processor as part of the configuration. For instance, let's assume we have the following processor:
@StreamListener
@SendTo("rated-movies")
KStream<Long, RatedMovie> rateMoviesFor(@Input("avg-table") KTable<Long, Double> ratings,
		@Input("movies") KTable<Long, Movie> movies)

this application is required to provide an application.id as below:
spring.cloud.stream.kafka.streams.bindings.avg-table.consumer.application-id=my-application-1

It's ok to add another config like this, but this alone won't work. It must provide a config for avg-table as that appears as the first input in the method:
spring.cloud.stream.kafka.streams.bindings.movies.consumer.application-id=my-application-1

Closing this issue as this is not really a bug and there is not much value in making such a change in the binder to receive application.id from arbitrarily chosen inputs by the application.


feat: add IsLocalizedModule.isBaseChange

Port of leanprover-community/mathlib#17973
Follow up work:

add IsPushout when M is a CommRing.

This theorem has slightly strange hypotheses. is_localized_module S f should already give M' the structure of a module over localization S, although perhaps this is hard to state without creating typeclass problems? I guess if you have a use for this lemma (rather than the lemma where you create the module (localization S) M' and is_scalar_tower R (localization S) M' from the other hypotheses) then I guess we should have it.

Originally posted by @kbuzzard in https://github.com/leanprover-community/mathlib/pull/17973#pullrequestreview-1520243319

Indeed. When I was first PRing this (it was awhile ago) I did write some form of instance [IsLocalizedModule S f] : SMul (Localization S) M', but this was quite troublesome due to typeclass inference and functions. Instead, if necessary the module structure can always be created manually using LocalizedModule.lift.

bors r+

bors r+


kirki version 3.0.33 seems to disable Live Preview

Issue description:
After upgrading Wordpress to Version 4.9.7, now even when all other plug-ins are deactivated if kirki 3.0.33 is activated I am unable to use live preview. I get the following option only:

Version used:
(Did you try using the develop branch from github? There's a chance your issue has already been adressed there)
No
Using theme_mods or options?
Problem occurs either with my usual enabled or all disabled.
Code to reproduce the issue (config + field(s))

still relevant?
#2026

Closing this as it doesn't seem to be an issue with the latest versions and there have been no similar reports.


Support reading Python versions from tool.uv

https://github.com/astral-sh/uv/pull/4335 adds support for Python version files, but we should also support a section in the pyproject.toml with more structured data.

for projects with multiple languages/tools, it's possible to have the python version in a .tool-versions file which is very similar in spirit to .python-versions, I don't think uv  currently supports this and I can't find an existing issue. I suppose this is more of a feature request, though.
e.g.:
https://asdf-vm.com/manage/configuration.html#tool-versions
https://mise.jdx.dev/configuration.html#tool-versions

@TommasoAmici would you mind opening a dedicated issue for supporting that?

sure! https://github.com/astral-sh/uv/issues/6574


feat: provide mock-no-trigger option IBF-pipeline AB#7068

@gulfaraz I couldn't test this by actually running the pipeline, because the Glofas API was failing (see post here )
But the change should be pretty straight-forward, and maybe when you get to this the API is working again.
PS: I realize that in mock-setting you shouldn't be needing to call the API at all, so that could be improved, but I don't have the time for that now.

@gulfaraz I was able to test this now and it works as expected.

@jannisvisser these changes only work with https://github.com/rodekruis/IBF-system/commit/52206139aa729255e16638af70fccc32cf1f86f2 and https://github.com/rodekruis/IBF-system/pull/684
Approving as we're merging all these changes today.


Add lovejs to possible targets

Since lovejs is a supported target, add it to the list. Added it roughly alphabetically.

Yes, this was missing. Thank you!


feat: how to support a new model tutorial

Pr name should start by docs: ...

I don't understand the details of the documentation, but from what I understand, I find it very clear. The diagrams and examples are self-explanatory.
On the other hand, the organization of the documentation must be addressed.
Here we have a first tutorial in the get started section.
I think we have two options.

Either this tutorial is part of a get started, then we can leave it in place as long as we make it part of the topic, with a Tutorial sub-section if we have more than one.

Ex. :
# Page tree
nav:
  - Home: index.md
  - Get Started:
      - Try kernl: get-started/start.md
      - Tutorial:
        - How to support a new model: get-started/support-new-model.md

Either we create a dedicated Tutorial topic or section, as we will have enough tutorials.

In this case, in my opinion, it is necessary to delete a topic and it is necessary to move the documentation to the right directory (the old directory renamed to tutorial).
# Page tree
nav:
  - Home: index.md
  - Get Started:
      - Try kernl: get-started/start.md
  - Tutorial:
      - How to support a new model: tutorial/support-new-model.md


Are noto TTF files rendering specific unicode ranges, and if yes, is there a map?

Hello,
First thanks for releasing those awewsome free fonts!
I have this little project to display all fonts in a webpage, obviously my system doesn't have all fonts.
I'm using unicode ranges from the Blocks.txt from the unicode.org website.
Is there somewhere data that describes which codepoint range of unicode are rendered by which noto TTF font file?
Regards,
Jonas

Unfortunately, we don't have such a data file.
We're in the middle of a transition for the fonts so there is no document currently describing the exact coverage of each font.  The only such files are the planning files, for example the planned coverage for phase 3 (we're about 3/4 finished with that) is in data/noto_cmap_phase3.xml.
We don't cover strictly by blocks, though most fonts generally line up with the script-specific blocks that you'd expect.  Notable exceptions, for example, are LGC and Symbols, which cover multiple blocks and ranges.
There are tools that you can use to generate coverage information, though you'd then have to parse that output to figure it out.  generate_coverage_data.py will take files and/or directories and examine the fonts there, building a 'coverage' xml file that shows for each font the ranges of codepoints it covers.  noto_font_coverage.py writes information that is organized in the opposite fashion, mapping from codepoints to the fonts that cover them.  It however looks only at the noto fonts at their locations in your local noto repos.  coverage.py takes a list of fonts and writes the cmap of each font in a number of different formats that you can select from.
All of these tools require that you have nototools set up and installed, with the accompanying additional tools.  There are docker files that help automate this process.
Fundamentally all these tools use fontTools to open the file and extract the cmap.  If you have ttx installed you can use it to dump cmaps of individual fonts and do what you want with that information.


To override transitive dependencies to 28.0.0 version

Fixes #75
This change updates com.android.support:design to 28.0.0 and introduces;
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:support-media-compat:28.0.0

@samtstern  @kroikie Please have a look.
I hope this should not break anything else (As I am not sure why we kept resolutionStrategy to 27.1.1).

@RahulKesharwani this LGTM, thank you!


Colors in pattern don't work

The colors do not work in the pattern, the text remains white.

version beta-25

For now, it is rewritted.


Why migration:run throws error in production environment?

Hi there.
I think that migration should be the same on the production and development environment.
It is better approach to keep same schema definition between production and development.
But ./ace migration:run throws exception on NODE_ENV=production without --force flag.
https://github.com/adonisjs/adonis-lucid/blob/master/src/Commands/Run.js#L33
Why throws error in production environment?
Sorry for my English.

True, it is not safe to run migrations in production, as migrations can override data in your existing table. Ace disables it by default and if you are sure that you want to run migrations than you can always use the --force flag

@thetutlage Thank you for your prompt response.
Please tell me good practice on production.

Use --force flag? (not safe)
Run the SQL(eg. CREATE TABLE ..., ALTER TABLE ...) manually?
Something else?

Use the force flag, there is nothing wrong with it. It is there to make sure you are not running migration:run by mistake, which may end up in loosing important. As long as you know what you are doing you can use --force and it's all good.

@thetutlage Thank you!


Is it possible to realise a new dataloader without lmdb in your framework?

Hi,
Thank you for providing a powerful tool. But sometime the input data maybe is not pictures, Is it possible to realise a new dataloader without lmdb in your framework and which part of your framework need to be changed expect dataload?

Yes, it supports.
BTW,
We will upgrade MMSR to MMEditing (in the same repo), which consists of SR, inpainting, matting and generation tasks.
And MMSR will be deprecated and no longer exist.
Your suggestions will be updated in MMEditing.


Update run.sh

This is a fix for when not using the default port 22 (ssh-keyscan would fail otherwise as it assumes 22)

I see this repo is pretty stale, but I came to the exact same code before I noticed a pull already existed. Would love to see this pulled into the original project rather than having to create a fork.

Sorry folks for the wait, let me merge this.


Add Irpachuza

If Magic Bounce still works while the bouncer is asleep, then yes.
Sent from my iPhone

On Feb 16, 2023, at 12:14 AM, Alexander B. @.***> wrote:

@MathyFurret commented on this pull request.
In data/mods/ssb/abilities.ts:

@@ -99,6 +99,19 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
},
},

// Irpachuza
mimeknowsbest: {

desc: "Uses a random screen/protect move on switch in.",

name: "Mime knows best",

onStart(target) {

	const randomMove = [

		"Light Screen", "Reflect", "Protect", "Detect", "Barrier", "Spiky Shield", "Baneful Bunker",

		"Safeguard", "Mist", "King's Shield", "Magic Coat",

	];

	this.actions.useMove(this.sample(randomMove), target);

should this be bypassing sleep/etc?
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you modified the open/close state.


Extending ztest to allow test spawning, refactor counter to use test spawning

PR contains changes in 3 areas:

extending util.h with macro NUM_VA_ARGS_LESS_2
extending ztest with test spawning. The idea is that there is a list of instances on which same test has to be performed (e.g. device instances). So far, a solution was to do single test function which was iterating over the list of objects. This approach has some drawbacks: failure terminates full tests, some instances may not support all features thus test should be skipped for those instances. There is no option to communicate that if all instances are tested in single test function. Proposed solution is using preprocessor  to create set of functions based on provided list of objects.
refactoring counter test to use new ztest feature

Example:
 #define DEVICE_LIST DT_TIMER_0_LABEL, DT_TIMER_1_LABEL, DT_TIMER_2_LABEL,
 const char *devlist[] = { DEVICE_LIST }

void foo(u32_t idx) {
 	const char *name = devlist[idx];
 	test_foo_on_instance(name);
 }

ztest_unit_tests_from_list_create(foo, DEVICE_LIST)

void test_main(void)
{
	ztest_test_suite(test_foo ,
		ztest_unit_tests_from_list(foo, DEVICE_LIST)
	);
	ztest_run_test_suite(test_foo);
}

Preprocessor will resolve to:
 #define DEVICE_LIST DT_TIMER_0_LABEL, DT_TIMER_1_LABEL, DT_TIMER_2_LABEL,
 const char *devlist[] = { DEVICE_LIST };

void foo(u32_t idx) {
 	const char *name = devlist[idx];
 	test_foo_on_instance(name);
}

void test_foo_0(void) {
 	foo(0);
}
void test_foo_1(void) {
 	foo(1);
}
void test_foo_2(void) {
 	foo(2);
}

void test_main(void)
{
        ztest_test_suite(test_foo ,
            ztest_unit_tests_(test_foo_0),
            ztest_unit_tests_(test_foo_1),
            ztest_unit_tests_(test_foo_2)
        );
        ztest_run_test_suite(test_foo);
}

@nordic-krch  sounds like a good idea, do you want to rebase and fix CI issues?


References and Foreign Key Constraints not being applied

I'm setting up a reference in Fluent between two tables here. In Postgres, this sets up a FKC so that I can't create a post if the user doesn't exist, as defined in this test. However, on MySQL this isn't setting up any FKC and the test fails.
This is the SQL the migration produces:
2020-04-29T15:23:19+0100 debug: database-id=mysql CREATE TABLE `BlogPost`(`postID` BIGINT PRIMARY KEY AUTO_INCREMENT, `title` VARCHAR(255) NOT NULL, `contents` VARCHAR(255) NOT NULL, `author` BIGINT NOT NULL REFERENCES `BlogUser` (`userID`) ON DELETE NO ACTION ON UPDATE NO ACTION, `created` DATETIME(6) NOT NULL, `lastEdited` DATETIME(6), `slugUrl` VARCHAR(255) NOT NULL, `published` BOOL NOT NULL, CONSTRAINT `d9fbf3c95bb905bc68d282cb6b0ac0415401fdc4` UNIQUE (`slugUrl`)) []

Hmm looks like the REFERENCES statement is getting serialized correctly
`author` BIGINT NOT NULL REFERENCES `BlogUser` (`userID`)

MySQL must need some special formatting there.

Yeah, I'm seeing that as well, but when looking at the database keys, it's not setting up any foreign keys when it should for MySQL at the same time - at least according to this post


Feature/65-Fix-tests-Dialogue-Manager

This PR deals with extending the dialogue manager tests and refactoring some complex functions. The dialogue flow is left unchanged.


Fixed: incompatible type for argument 1 of 'UnloadTexture'

I am encountering following issue when building raygui on Raspbery PI zero (natively or cross-compiling).

Here's a fix.
I did not have the chance to test it on another architecture.

@pitpit Thanks for the fix!


Centralize harded code message

Hello,
Centralize harded code message.
ticket : #3349

Codecov Report

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

@@            Coverage Diff             @@
##           master    #3409      +/-   ##
==========================================
- Coverage   48.98%   45.05%   -3.94%
==========================================
  Files         102      113      +11
  Lines        9903    12563    +2660
==========================================
+ Hits         4851     5660     +809
- Misses       4207     6049    +1842
- Partials      845      854       +9

Flag
Coverage Δ

#linux
48.98% <ø> (ø)
:arrow_up:

#windows
40.27% <ø> (?)

Impacted Files
Coverage Δ

errdefs/errors.go
100% <ø> (ø)
:arrow_up:

snapshots/native/native.go
43.04% <0%> (-9.99%)
:arrow_down:

cio/io.go
46.47% <0%> (-8.53%)
:arrow_down:

metadata/snapshot.go
47.52% <0%> (-8.26%)
:arrow_down:

archive/tar.go
43.79% <0%> (-7.07%)
:arrow_down:

metadata/containers.go
47.97% <0%> (-6.62%)
:arrow_down:

content/local/writer.go
58.65% <0%> (-5.55%)
:arrow_down:

content/local/store.go
49.52% <0%> (-5.29%)
:arrow_down:

metadata/images.go
57.57% <0%> (-4.99%)
:arrow_down:

archive/tar_opts.go
28.57% <0%> (-4.77%)
:arrow_down:

... and 64 more

Continue to review full report at Codecov.

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

Not LGTM
These are unique errors. Centralizing them makes them really hard to track down. Centralizing errors should only be used when API has caller dependencies.

I undrestand @stevvooe  thanks for the explanation.


Add cool mode cammando for Aircooler

Add in hw_websocket_payload.py
def turn_on_cool(self) -> str:
    return json.dumps(
        {
            "device": self._device.identifier,
            "type": "json_patch",
            "patch": [{"op": "replace", "path": "/state/cool", "value": True}],
        }
    )

def turn_off_cool(self) -> str:
    return json.dumps(
        {
            "device": self._device.identifier,
            "type": "json_patch",
            "patch": [{"op": "replace", "path": "/state/cool", "value": False}],
        }
    )

and in hw_websocket.py
def turn_on_cool(self) -> None:
    self._send_message(self._payloads.turn_on_cool())

def turn_off_cool(self) -> None:
    self._send_message(self._payloads.turn_off_cool())

I have also made a change for climate.py

https://github.com/dennis1804/homewizard-climate-hass/issues/12

During testing I noticed the following error line:
ERROR:websocket:error from callback <bound method HomeWizardClimateWebSocket._on_message of <homewizard_climate_ws.ws.hw_websocket.HomeWizardClimateWebSocket object at 0x7fee2f17cc10>>: invalid literal for int() with base 10: 'low'
Despite the error, it works. But changing in climate_device_state.py by fan_speed(line 15) int to str and by fan_speed(line 43) changing to '' or 'low' you no longer get the error.


Submission failed permanently - invalid plan

Hi,
I'm trying to get started with Librato on my Rails 4.2 app (Ruby 2.3) on Heroku. I just added the Heroku addon and installed the gem, following all the steps in the readme. When I deployed though, I started seeing these errors in my logs. I'm not sure what to make of it. A quick search on Google turned up nothing useful. Not sure if this is a bug or if I just missed something in the setup.
For what it's worth, I'm only seeing these log entries on my staging app, which is on a hobby dyno. My production app is on a 1x dyno and I haven't seen any of these errors yet.
2016-05-06T16:16:27.804076+00:00 app[web.1]: E, [2016-05-06T16:16:27.803961 #8] ERROR -- : [librato-rails] submission failed permanently: #<struct Faraday::Env method=:post, body="{\"error\":\"Invalid plan\",\"request_time\":1462551387}", url=#<URI::HTTPS https://metrics-api.librato.com/v1/metrics>, request=#<Faraday::RequestOptions timeout=30, open_timeout=20>, request_headers={"User-Agent"=>"librato-rails/1.3.0 (ruby; 2.3.0p0; x86_64-linux)", "Content-Type"=>"application/json", "Authorization"=>"Basic YXBwMzMxMzMwMjhAaGVyb2t1LmNvbToxOGQzZWRhZTZjZGFjNzJiNzY3NTgyNWUwMzJmMWUyYThhMDBlNWZmYzQxMGMwYzliZDFhM2NiZDRkYzA3OGUw"}, ssl=#<Faraday::SSLOptions verify=true>, parallel_manager=nil, params=nil, response=#<Faraday::Response:0x007f2ae9fe8420 @on_complete_callbacks=[], @env=#<Faraday::Env @method=:post @body="{\"error\":\"Invalid plan\",\"request_time\":1462551387}" @url=#<URI::HTTPS https://metrics-api.librato.com/v1/metrics> @request=#<Faraday::RequestOptions timeout=30, open_timeout=20> @request_headers={"User-Agent"=>"librato-rails/1.3.0 (ruby; 2.3.0p0; x86_64-linux)", "Content-Type"=>"application/json", "Authorization"=>"Basic YXBwMzMxMzMwMjhAaGVyb2t1LmNvbToxOGQzZWRhZTZjZGFjNzJiNzY3NTgyNWUwMzJmMWUyYThhMDBlNWZmYzQxMGMwYzliZDFhM2NiZDRkYzA3OGUw"} @ssl=#<Faraday::SSLOptions verify=true> @response=#<Faraday::Response:0x007f2ae9fe8420 ...> @response_headers={"content-type"=>"application/json", "date"=>"Fri, 06 May 2016 16:16:27 GMT", "server"=>"nginx", "content-length"=>"70", "connection"=>"Close"} @status=403 @custom={:request_body=>"{\"gauges\":[{\"name\":\"rails.sql.queries\",\"value\":0},{\"name\":\"rails.sql.selects\",\"value\":0},{\"name\":\"rails.sql.updates\",\"value\":0},{\"name\":\"rails.request.total\",\"value\":0},{\"name\":\"rails.request.slow\",\"value\":0},{\"name\":\"rails.request.method.get\",\"value\":0},{\"name\":\"rails.request.status.302\",\"value\":0},{\"name\":\"rails.request.status.3xx\",\"value\":0},{\"name\":\"rack.request.total\",\"value\":0},{\"name\":\"rack.request.slow\",\"value\":0},{\"name\":\"rack.request.status.302\",\"value\":0},{\"name\":\"rack.request.status.3xx\",\"value\":0},{\"name\":\"rack.request.method.get\",\"value\":0},{\"name\":\"rails.request.status.200\",\"value\":0},{\"name\":\"rails.request.status.2xx\",\"value\":0},{\"name\":\"rack.request.status.200\",\"value\":0},{\"name\":\"rack.request.status.2xx\",\"value\":0},{\"name\":\"rack.request.status.206\",\"value\":0},{\"name\":\"rails.sql.inserts\",\"value\":0},{\"name\":\"rails.request.method.post\",\"value\":0},{\"name\":\"rack.request.method.post\",\"value\":0},{\"name\":\"rack.processes\",\"value\":1}],\"source\":\"staging-app\"}"}>>, response_headers={"content-type"=>"application/json", "date"=>"Fri, 06 May 2016 16:16:27 GMT", "server"=>"nginx", "content-length"=>"70", "connection"=>"Close"}, status=403>

Thanks!

@danielbonnell It looks like you signed-up for the "development" level addon. Unfortunately, that plan level doesn't allow for sending custom metrics. You should be getting the standard Heroku router metrics, but anything submitted via the librato-rails gem is considered "custom" and will be rejected by the API (Note the "Invalid plan" message in the response body).
If you're interested in testing out the Rails metrics you could upgrade your add-on plan to the Nickel level which does include custom metrics. Heroku bills for the addons down to the second so it would be pretty inexpensive to upgrade to Nickel for a few hours, play around with the librato-rails gem, and then downgrade again if you wanted.
Feel free to reach out to us via<EMAIL_ADDRESS>with any further questions. Thanks.

That makes sense. Thanks for the clarification!


source code link incorrectly to global.html on en-US/docs/WebAssembly/Using_the_JavaScript_API

Request type

[ ] Please close this issue, I accidentally submitted it without adding any details
[ ] New documentation
[x] Correction or update

Details

URL https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API
In Globals source code URL seems to be incorrect
please look into it

The globals source code link works for me.


Is a DSVM required?

Consider documenting the steps to run the notebooks on a vanilla Ubuntu VM

@jiata should we close this issue? I see a PR was linked and merged...


Poor error messaging in embedded example

Originally reported as https://github.com/rust-lang/rust/issues/23965

To be fixed by https://github.com/rust-lang/rust-www/issues/180 hopefully.


Can not set both key and value

General description of bug:
It is not possible to change both the key of a module and the value of it.
For example setting both --CPU-key "somethingelse" and --set CPU=somethingelse only results in CPU: somethingelse.

Does the issue occur across multiple terminal emulators? Y
Does the issue occur across multiple shells? Y (pwsh, cmd)

Output of fastfetch --version:
fastfetch 1.11.0 (x86_64)

Output of fastfetch --load-config devinfo:
Error: couldn't find config: devinfo

Output of fastfetch --load-config devinfo-verbose:
Error: couldn't find config: devinfo-verbose

Output of fastfetch --list-features:
threads
vulkan
zlib
opencl
libcjson

./fastfetch -s cpu --cpu-key abc --cpu-format def


[Discuss] Merge the comments of a single PR

Is your feature request related to a problem? Please describe.
When we submit multiple comments to a PR, osschat will send each comment one by one. This will cause the WeChat group to be received too many notification.
Describe the solution you'd like
[enhancement]

There are more decisions that need to be made to merge comments.
For example, how long should we wait for another comment when we received one comment before we send it to the WeChat room? 1 minute? 3 minute?
How can we implement this feature, for example, how to design a manageable storage structure to deal with those comments?
I'd like to accept a PR for this feature if there's anyone like to submit one, and we can continue discussing based on the PR.


Update the solution

Update the solution to new version for MongoDB.Driver and AspNet.Identity 2.0
I hope, these modification are usefull for who whants to use new version of mongoDb driver and new version of identity.

I also implement IUserEmailStore, IUserPhoneNumberStore and IUserTwoFactorStore


Remove Daytona

Delete section on Daytona theming

@brickgeorge,
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

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs/extensibility/ux-guidelines/colors-and-styling-for-visual-studio.md
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

@brickgeorge There are still a few references to Daytona on the page. There is a Daytona row in the table and also a sentence in the "Web UI colors" section

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs/extensibility/ux-guidelines/colors-and-styling-for-visual-studio.md
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


Trim whitespace

Noticed some trailing whitespace in one file while browsing around the code. Not important but thought I'd do a quick PR just to tidy it up.

Thanks!


Enhanced Game Restart Logic and GUI Introduction

This update introduces several key improvements to ClashRoyaleBuildABot
1. Enhanced Game Restart Logic:

The bot now intelligently handles scenarios where reward screens or menus might appear after a match, waiting for a specific duration before attempting to detect the "Battle" button.
If the button remains undetected, the game is automatically restarted using ADB commands to ensure uninterrupted gameplay.

2. New GUI (Graphical User Interface):

A new GUI has been added to the bot, optimized for Windows 11 terminals.
The GUI functions smoothly on Windows 10 as well, with a few minor visual differences.
Settings customization and further optimizations are planned for future updates.
The GUI provides improved text clarity, and in DEBUG mode, previously hidden information can be viewed without impacting performance.

Have Fun! :)

This is awesome man. Great work :D
I'm tempted to go back and try and fix the various machine learning components now, I haven't looked at the code properly for a very long time.

When this is done I'll make sure the demo video makes it to the README

Enhance Logging with Loguru Integration
This 3 changes replaces the basic print statements with Loguru.
This enhancement provides:

Structured Logging: Logs are organized with timestamps, levels (e.g., INFO, DEBUG, ERROR), and clear messages for easier debugging and analysis.

Customizable Log Files: Log files are now saved in the clashroyalebuildabot/logs directory with timestamps, making it easier to track bot activity over time.

Additional optimizations are planned for this evening to further streamline the code while maintaining its current efficiency.

I've separated your code into windows_main.py so that Mac/Linux users still have something to run.
@all-contributors please thank @Leviaria for code, examples and tutorials.

I've separated your code into windows_main.py so that Mac/Linux users still have something to run.
https://github.com/all-contributors please add @Leviaria for code, examples and tutorials.

I've separated your code into windows_main.py so that Mac/Linux users still have something to run.
@all-contributors please add @Leviaria for code, examples and tutorials.


hangs on DELETE

Your description here
Doina a DELETE - server gives 200 or 204 - but the new plugin just keeps reading response
Expected outcome
just show 200/204 status and stop reading repsonse
Actual outcome
hanging around
Versions
App: <IP_ADDRESS>-stable
Chrome: 49.0.2623.112
Platform: Windows (7)
Steps to reproduce

CALL delete on http://xxx/app/rest/builds/id:yyy
with header authorization: Basic zzzzz
with header Content-Type: text/plain (not required - dows nto work eighter way)

Hi,
Thanks for an issue report. I've created an issue report in the library that supports sockets in the app.
Before the update I can only suggest adding Connection: close header to the request. Then the connection will be closed and the library report a success.


No GPS

Hello, are you receiving GPS on qgroundcontrol?

Yes….  Is there a problem?

On 1. Apr 2020, at 21:55, d4nidroid<EMAIL_ADDRESS>wrote:
Hello, are you receiving GPS on qgroundcontrol?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub https://github.com/The1only/rosettadrone/issues/7, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABS7SLCEYSRLLYUGYZIEU23RKOL2NANCNFSM4LZQCA7A.

yes I see 0 GPS

Got 17 satellites, and I got velocity and position...
This is Mavic 2 Pro
I only uses the QGC 3.5.6 as the 4.x got crappy video…

On 1. Apr 2020, at 21:55, d4nidroid<EMAIL_ADDRESS>wrote:
Hello, are you receiving GPS on qgroundcontrol?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub https://github.com/The1only/rosettadrone/issues/7, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABS7SLCEYSRLLYUGYZIEU23RKOL2NANCNFSM4LZQCA7A.

You are outside right? Sorry just had to ask…

On 1. Apr 2020, at 22:27, Droneslife<EMAIL_ADDRESS>wrote:
yes I see 0 GPS
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub https://github.com/The1only/rosettadrone/issues/7#issuecomment-607472649, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABS7SLGDQNVE4XVO6A67BMDRKOPR7ANCNFSM4LZQCA7A.

yes I can see 16 sat on the cellphone but on the QGC no sat so maybe is the version I will change because video also crappy grey

Do you se 16 satellites in the Rosettadrone 2 software, ok
And you got the right IP and PORT and the system says connected??
And you got a Mavic 2 Pro ?

On 1. Apr 2020, at 22:41, Droneslife<EMAIL_ADDRESS>wrote:
yes I can see 16 sat on the cellphone but on the QGC no sat so maybe is the version I will change because video also crappy grey
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub https://github.com/The1only/rosettadrone/issues/7#issuecomment-607479188, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABS7SLEK2CN7UMXHR2MALQDRKORJDANCNFSM4LZQCA7A.

Yea , the gray video is a problem. On the 3.5.6 the video got no gray problems and it has almost no latency.
There is something we need to understand there, as I get gray with my gStreamer also…

On 1. Apr 2020, at 22:41, Droneslife<EMAIL_ADDRESS>wrote:
yes I can see 16 sat on the cellphone but on the QGC no sat so maybe is the version I will change because video also crappy grey
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub https://github.com/The1only/rosettadrone/issues/7#issuecomment-607479188, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABS7SLEK2CN7UMXHR2MALQDRKORJDANCNFSM4LZQCA7A.

PS: I am in contact with the QGC guy’s to fix the video issue.

On 1. Apr 2020, at 22:41, Droneslife<EMAIL_ADDRESS>wrote:
yes I can see 16 sat on the cellphone but on the QGC no sat so maybe is the version I will change because video also crappy grey
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub https://github.com/The1only/rosettadrone/issues/7#issuecomment-607479188, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABS7SLEK2CN7UMXHR2MALQDRKORJDANCNFSM4LZQCA7A.

im not on 3.5.6 and same grey color on the video

oh ok after a while it looks better just some minutes

You got video issues on 3.5.6 ???

On 1. Apr 2020, at 23:20, Droneslife<EMAIL_ADDRESS>wrote:
im not on 3.5.6 and same grey color on the video
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub https://github.com/The1only/rosettadrone/issues/7#issuecomment-607495152, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABS7SLE7347DBR4FR67YEKTRKOVYDANCNFSM4LZQCA7A.

what do you use on video bitrate and video encoding speed?

I do not transkode, just forward from DJI, the speed you can sett in the Rosettadrone app.
Might be I should transcode using gStreamer. The code is there, I just dont whant the added delay.
Best regard
Terje Nilsen
9Tek AS
Norway

apr. 2020 kl. 23:43 skrev Droneslife<EMAIL_ADDRESS>

what do you use on video bitrate and video encoding speed?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

They say we should use QGC 4.05, for the video issue, it’s a bug and they will backport.
Best regard
Terje Nilsen
9Tek AS
Norway

apr. 2020 kl. 23:43 skrev Droneslife<EMAIL_ADDRESS>

what do you use on video bitrate and video encoding speed?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

ok! thx I will try again, Sr what is the file on the project where you add more flight modes and joystick?

DroneModel is the file that does all that. Together with MavlinkReceiver ...
Let me know if you make something we all may need.
Best regard
Terje Nilsen
9Tek AS
Norway

apr. 2020 kl. 05:32 skrev Droneslife<EMAIL_ADDRESS>

ok! thx I will try again, Sr what is the file on the project where you add more flight modes and joystick?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

PS: Joystick you add on the QGC, you can then fly with a Joystick connected to the PC, this is already implemented. Also reading the DJI controller stick on the QGC/Dronekit  is implemented.

Thanks!! other question is the geo fence working?

Not tested, but is should.
Best regard
Terje Nilsen
9Tek AS
Norway

apr. 2020 kl. 09:19 skrev Droneslife<EMAIL_ADDRESS>

Thanks!! other question is the geo fence working?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

Sometimes it's hard to init the GPS. Not related to Rosetta.


Initial SMP implementation

Provide an initial SMP implementation.  This is hard-coded to start up 4 CPUs, as in the test configuration, but is enough to validate that the SMP startup logic works.
Signed-off-by: Dan Cross<EMAIL_ADDRESS>

Hey Mike, Cory...Could I please trouble either or both of you for a peek at this code?

Looks pretty good Dan!
Not going to lie, I got a little confused by the math at the start of setup_sipi_page() which is effectively the math behind APSTART in the assembler. Better that this were separated.
I wonder about the uses of leak().  For the stacks it sorta makes sense, but it feels reasonable that maybe the others could or should be recovered?  I don't know. Hard to reason given that theon is expected to be ephemeral itself, but then the question still stands, are the stacks expected to be discoverable across cores somewhere (for debug), and if so is that tied to these initial AP bootstrap resources that themselves are ephemeral?  I guess I'm assuming a broadcast SIPI would not be used for subsequent upboots, but I'm not sure that matters to the question.
I tried running this quickly locally to see how that'd work.  I haven't booted this in a while.  Currently for me this seems to get hung up after printing regions: before this commit and gets further along but dies printing out ELF for "devices" $(Segment@HPA( which suggests something funny is going on?  I haven't dug in.

Looks pretty good Dan!

Thanks, Mike!

Not going to lie, I got a little confused by the math at the start of setup_sipi_page() which is effectively the math behind APSTART in the assembler. Better that this were separated.

Oh sure, I can change that around and try to clarify it. Would it help to make all the arithmetic in terms of byte pointers, or would it help to extract that to a function all its own, or something else entirely? I've done the former for now, and also added a lot of explanatory comments. Let me know what you'd like, though.

I wonder about the uses of leak(). For the stacks it sorta makes sense, but it feels reasonable that maybe the others could or should be recovered? I don't know. Hard to reason given that theon is expected to be ephemeral itself, but then the question still stands, are the stacks expected to be discoverable across cores somewhere (for debug), and if so is that tied to these initial AP bootstrap resources that themselves are ephemeral? I guess I'm assuming a broadcast SIPI would not be used for subsequent upboots, but I'm not sure that matters to the question.

So I think there are two separable issues here.
First, this code specifically, which is hard-coding 4 CPUs and leaking their stacks just for the purposes of testing and demonstrating that we can do something in the immediate term, but that's obviously not reasonable and will have to be fixed. For the time being I've added some comments to fn cpus() in main.rs saying as much.
The second issue is essentially what you've raised: to what extent at stacks discoverable from other CPUs? For isolation reasons, ideally "not at all", but for effective debugging, we've got to have something; I confess I haven't given too much thought to this. It occurs to me that leaking the stacks (and the CPU list) is somewhat orthogonal: that's just Rust machinery to keep the Box and Vec drop code from reclaiming the memory, but we're retaining pointers to both: the EntryCPU array we've dropped a pointer to in the SIPI page retains a pointer to the Vec, and each entry retains a pointer to the (top) of the stack, so we could get access to all of that data again.
We'll have to retain a list of all CPUs in the system in the global segment eventually, and we could certainly store the physical address of each CPU's scheduler stack in there, which seems like a reasonable way to support poking at that memory when we do something for debugging.

I tried running this quickly locally to see how that'd work. I haven't booted this in a while. Currently for me this seems to get hung up after printing regions: before this commit and gets further along but dies printing out ELF for "devices" $(Segment@HPA( which suggests something funny is going on? I haven't dug in.

Huh, weird. I'm guessing you're starting it via, cargo xtask qemukvm ? I haven't seen that, but I'm sure it's something I'm messing up.
Oh that reminds me; that's another thing: once we submit this we can't run it with QEMU except under KVM, since it needs the x2APIC.

Would it help to make all the arithmetic in terms of byte pointers, or would it help to extract that to a function all its own, or something else entirely?

I'm sorta ambivalent. I liked the pointer arith with the usize * but I did look at it and have a quick moment to wonder what was happening.  Frankly I think it is clearly than the 8 and 16 byte offsets.
Re: the page 7, I guess seeing the math right there mixed in with the HPA page slice construction got me mixed up.  The new comments add a lot to clear things up. Reading the original code I was left wondering "why page 7" and I guess that is somewhat arbitrary, though there aren't that many options I guess.

via, cargo xtask qemukvm ?

Yeah. I was doing cargo xtask qemu at first and realized quickly that didn't work.
I did a little bit of debug to see what was up.  Looks maybe like a trap storm or some such?

fwiw I think the stack got smashed, sadly due to using the default debug build.
Running info registers repeatedly while hung I see the RIP fluctuate throughout trap(), but also I see it sometimes as<PHONE_NUMBER>000008 which is clearly not correct. Not sure where this is coming from but it explains what the cpu is doing.  Looking at the stack however, it looks like it isn't smashed, the RIP looks like its in a good spot relative to the bootstack page, however:
(qemu) x/512xg 0xffff8000001a4000
ffff8000001a4000: 0xffff8000001a7650 0x000000000000000e
theon heap^
ffff8000001a4010: 0x0000000000000000 0x0000000000000000
ffff8000001a4020: 0x00ff8000001a41f0 0xffff800000171ed5
------------------------------------------^
_ZN4core3ptr9const_ptr33_$LT$impl$u20$$BP$const$u20$T$GT$13is_aligned_to17hdde12cb5b1a00deaE:
calling:
_ZN4core3ptr9const_ptr33_$LT$impl$u20$$BP$const$u20$T$GT$13is_aligned_to12runtime_impl17h80808c6ee66b3582E

ffff8000001a4030: 0xffff8000001a4160 0x0000000000000008
bootstack
ffff8000001a4040: 0xffff8000001a41f0 0xffff8000001a4c78
bootstack bootstack
ffff8000001a4050: 0x0000000000000001 0xffff800000198fae
----------------------------------------UNKNOWN^^   Above HEAP?

ffff8000001a4060: 0x0000000000000000 0xffff800000198fae
ffff8000001a4070: 0x0000000000000001 0xffff800000198fae
ffff8000001a4080: 0xffff800000198fae 0xffff800000171ba5
_ZN4core3ptr9const_ptr33_$LT$impl$u20$$BP$const$u20$T$GT$13is_aligned_to17h186dbae12c942f3eE

ffff8000001a4090: 0x0000000000000008 0x0000000000000001
ffff8000001a40a0: 0xffff800000198fae 0x0000000000000008
ffff8000001a40b0: 0x0000000000000001 0xffff800000171a8f
_ZN4core3ptr9const_ptr33_$LT$impl$u20$$BP$const$u20$T$GT$10is_aligned17h3456a7a0f7787080E

ffff8000001a40c0: 0xffff8000001a41f0 0xffff800000180768
bootstack _ZN4core10intrinsics23is_aligned_and_not_null17hb8cd0a2694775395E
ffff8000001a40d0: 0xffff8000001a41f0 0xffff800000198fae
ffff8000001a40e0: 0x0000000000000001 0xffff800000198fae
ffff8000001a40f0: 0x0000000000000001 0xffff800000198fae
ffff8000001a4100: 0x0000000000000001 0x0000000000000001
ffff8000001a4110: 0x0000000000000001 0xffff800000171aaf
ffff8000001a4120: 0xffff800000198fae 0xffff800000180628
ffff8000001a4130: 0xffff800000198fae 0x0100000000000000
ffff8000001a4140: 0xffff800000198fae 0xffff8000001a41f0

I'm sorta expecting these to all be zeroes, or at best maybe some control structure at the base of bootstack (I didn't see this anywhere however).
Running things again however with cargo xtask qemukvm --release gets me all the way until the intended panic.  Not sure the messages are outputting the way we expect them to here, but at least we know what my issue is now...
Sadly, if I replace the intended panic!() at the end of theon with a loop { relax() } instead of halting (so I can inspect memory), I see almost the same stack crash on the --release build:
(qemu) x/512xg 0xffff800000126000
ffff800000126000: 0x0000000000000000 0x0000000000000000
ffff800000126010: 0x0000000000000000 0x0000000000000000
ffff800000126020: 0x0000000000000000 0x0000000000000000
ffff800000126030: 0x0000000000000000 0x0000000000000000
ffff800000126040: 0x0000000000000000 0x0000000000000000
ffff800000126050: 0x0000000000000000 0x0000000000000000
ffff800000126060: 0x0068000000000000 0xffff800000120000
ffff800000126070: 0x0000000000000000 0xffff800000120000
ffff800000126080: 0x0000000000000001 0xffff800000120001
ffff800000126090: 0x0000000000000013 0xffff800000102ee0
ffff8000001260a0: 0x0000000000000000 0x0000000000000001
ffff8000001260b0: 0xffff800000118870 0xffff80000012003f
ffff8000001260c0: 0x000000000000001b 0x000000050000000f
ffff8000001260d0: 0xffff800000103040 0x0000000000000008
ffff8000001260e0: 0x0000000000000008 0xffff800000102ca0
ffff8000001260f0: 0xffff8000001200ba 0x0000000000000020
ffff800000126100: 0xffff8000001200fa 0x0000000000000014
ffff800000126110: 0x0000000500000014 0xffff800000120110
ffff800000126120: 0x0000000000000002 0xffff800000120112

this also looks like garbage codegen from the string formatting?
(gdb) disassemble 0xffff800000102ee0
Dump of assembler code for function _ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h38ffe86ed05baea5E:
   0xffff800000102ee0 <+0>:     ret
(gdb) disassemble 0xffff800000118870
Dump of assembler code for function _ZN4core3fmt17pointer_fmt_inner17h47a9a4d82d2d3b13E:

I wonder what ways exist to shrink the stack usage for the formatting/json serialization?  Feels like a potentially unbounded problem without knowing more.

sigh now I see the stack is 8192.  Let me play a little more with this.

Hmm.  Yeah so it is definitely blowing the stack and stomping all over other things in the bss in the debug build.  With the release build I see the stack get dirty several hundred bytes into the second 4k page.
While playing with this, I thought it was interesting that the BSP hlting early via the panic really messed up the synchronization of the APs re that poor mans spinlock.  Compare the following which is my release build terminating with a BSP panic:
    ProgramHeader {                                                                                p_type: "PT_LOAD",                                                                                p_flags: 0x5,                                                                                p_offset: 0x1000,                                                                                p_vaddr: 0xfffff00000000000,                                                                                p_paddr: 0xfffff00000000000,                                                                                p_filesz: 0x8,                                                                                p_memsz: 0x8,
        p_align: 0x1000,
    },
    ProgramHeader {
        p_type: "PT_GNU_STACK",
        p_flags: 0x6,
        p_offset: 0x0,
        p_vaddr: 0x0,
        p_paddr: 0x0,
        p_filesz: 0x0,
        p_memsz: 0x0,
        p_align: 0x0,
    },
]
starting APs
le
3PoA NfIrCo:m
*
*H*e*l*l*o* *f*ro*m* *2
]H*e [l lCou tf rHoemr e1
 *************
PanicInfo {
    payload: Any { .. },
    message: Some(
        main: trapstubs = 0xffff8000001137d0,
    ),
    location: Location {
        file: "theon/src/main.rs",
        line: 177,
        col: 5,                                                                                },                                                                                can_unwind: true,                                                                                }
******************************************                                                                                System halted.

vs if I put a spin loop on an atomic to create a loop the compiler won't optimize away doing this instead of the panic!():
    // XXX: This will never return.
    static S: AtomicBool = AtomicBool::new(false);
    while S.compare_exchange(true, false, Ordering::SeqCst, Ordering::Acquire).is_err() {
        arch::cpu::relax();
    }

I get ordered output from the APs:
        p_memsz: 0x0,
        p_align: 0x0,
    },
]
starting APs
Hello from 3
Hello from 2
Hello from 1

fwiw I think the stack got smashed, sadly due to using the default debug build.

Sigh. The joys of kernel programming.... (The sound you hear is me over here cursing about the stack usage of the fmt stuff).

Running info registers repeatedly while hung I see the RIP fluctuate throughout trap(), but also I see it sometimes as<PHONE_NUMBER>000008 which is clearly not correct. Not sure where this is coming from but it explains what the cpu is doing. Looking at the stack however, it looks like it isn't smashed, the RIP looks like its in a good spot relative to the bootstack page, however:

This makes some sense to me: the stacks are adjacent in the bump allocator, so if the formatting stuff is descending down into another 4K page, it's smashing the stack of the CPU before it. I can totally see that causing a core to jump off into la-la land.

[snip]
I'm sorta expecting these to all be zeroes, or at best maybe some control structure at the base of bootstack (I didn't see this anywhere however).
Running things again however with cargo xtask qemukvm --release gets me all the way until the intended panic. Not sure the messages are outputting the way we expect them to here, but at least we know what my issue is now...

Yeah, the BSP is almost deliberately racy with the APs.

Sadly, if I replace the intended panic!() at the end of theon with a loop { relax() } instead of halting (so I can inspect memory), I see almost the same stack crash on the --release build:
(qemu) x/512xg 0xffff800000126000
ffff800000126000: 0x0000000000000000 0x0000000000000000
ffff800000126010: 0x0000000000000000 0x0000000000000000
ffff800000126020: 0x0000000000000000 0x0000000000000000
ffff800000126030: 0x0000000000000000 0x0000000000000000
ffff800000126040: 0x0000000000000000 0x0000000000000000
ffff800000126050: 0x0000000000000000 0x0000000000000000
ffff800000126060: 0x0068000000000000 0xffff800000120000
ffff800000126070: 0x0000000000000000 0xffff800000120000
ffff800000126080: 0x0000000000000001 0xffff800000120001
ffff800000126090: 0x0000000000000013 0xffff800000102ee0
ffff8000001260a0: 0x0000000000000000 0x0000000000000001
ffff8000001260b0: 0xffff800000118870 0xffff80000012003f
ffff8000001260c0: 0x000000000000001b 0x000000050000000f
ffff8000001260d0: 0xffff800000103040 0x0000000000000008
ffff8000001260e0: 0x0000000000000008 0xffff800000102ca0
ffff8000001260f0: 0xffff8000001200ba 0x0000000000000020
ffff800000126100: 0xffff8000001200fa 0x0000000000000014
ffff800000126110: 0x0000000500000014 0xffff800000120110
ffff800000126120: 0x0000000000000002 0xffff800000120112

this also looks like garbage codegen from the string formatting?

Is that on the BSP? That's kinda weird.... My guess is that the BSP stack is actually adjacent in the BSS to the bump allocator (or, at least, not far from it: goblin will allocate some stuff, but it's probably small compared to the formatting machinery). It could well be that one of the APs is clobbering the BSP stack, causing the BSP to jump off into infinity.

I wonder what ways exist to shrink the stack usage for the formatting/json serialization? Feels like a potentially unbounded problem without knowing more.
Hmm. Yeah so it is definitely blowing the stack and stomping all over other things in the bss in the debug build. With the release build I see the stack get dirty several hundred bytes into the second 4k page.

This is something of a known issue. Let me ask some folks around here what they do about it for e.g. Hubris. In the meantime, I've expanded all the stacks to 32KiB, which "ought to be enough for now." (Famous last words...).

While playing with this, I thought it was interesting that the BSP hlting early via the panic really messed up the synchronization of the APs re that poor mans spinlock. Compare the following which is my release build terminating with a BSP panic:
[snip]
vs if I put a spin loop on an atomic to create a loop the compiler won't optimize away doing this instead of the panic!():
    // XXX: This will never return.
    static S: AtomicBool = AtomicBool::new(false);
    while S.compare_exchange(true, false, Ordering::SeqCst, Ordering::Acquire).is_err() {
        arch::cpu::relax();
    }

I get ordered output from the APs:
        p_memsz: 0x0,
        p_align: 0x0,
    },
]
starting APs
Hello from 3
Hello from 2
Hello from 1

Much nicer. :-)
I had kind of wanted to see the panic, mostly just to differentiate against some other failure, but there's no good way to make the BSP participate in the synchronization protocol the APs use to serialize their output (spinning on that atomic). Certainly, having the BSP spin forever will prevent it from racing with the APs during print, though.
Another interesting thing I just ran into locally in release mode is an AP escaping from its hlt jail and hitting the panic!() at the end of apmain. What I think is going on is that it's getting the second IPI from startaps() after it has halted, and that's kicking it out of the inactive state and causing it to continue execution. It strikes me that it is not entirely clear what the processor does when it receives a SIPI and is not in the "wait-for-SIPI" state; the SDM and AMD refs indicate that the AP should start executing the AP startup code (even a second time) but that's not what I've generally observed. Regardless, it seems best to follow the docs and not send a second SIPI if the AP is executing.
What all of this suggests to me is that the BSP should really be blocked waiting on the APs to finish initializing, and we should be more circumspect about how we send SIPIs. In particular, it would probably be best to have a counter that the BSP spins on, waiting for all APs to finish starting, and also share an array of booleans or something with the APs so that they can mark that they are awake very early in the boot sequence, so we avoid sending them the second IPI. I think the broadcast INIT and broadcast first-SIPI are fine, but then we should loop over all the APs, checking whether they've started booting, and only SIPI again if they have not. I'll make that change; it'll be more robust anyhow.

Ok, I've made the changes mentioned above. PTAL

[snip]

I wonder what ways exist to shrink the stack usage for the formatting/json serialization? Feels like a potentially unbounded problem without knowing more.
Hmm. Yeah so it is definitely blowing the stack and stomping all over other things in the bss in the debug build. With the release build I see the stack get dirty several hundred bytes into the second 4k page.

This is something of a known issue. Let me ask some folks around here what they do about it for e.g. Hubris. In the meantime, I've expanded all the stacks to 32KiB, which "ought to be enough for now." (Famous last words...).

The close the loop on this.... I checked in with Cliff Biffle about this. His comment surprised me a bit, but debug builds are known to dramatically increase both stack usage and code size. The gist of it is that Debug sort of assumes "infinite-sized computers." While a bit tongue-in-cheek, the sentiment is accurate: no optimization at all yields excessive stack utilization.
The recommendation is to set:
[profile.dev]
opt-level = 1

in Cargo.toml, which seems reasonable. We'll still get debuggable code, but it won't be excessively inefficient. I'll make that change and send it out in a separate PR.

BTW: Just for kicks I pumped up the number of CPUs Hypatia sees to 288 locally, which was the maximum I could get qemu to support. They all seemed to come up reliably.

FYI I think this is PR is still open maybe because you are using the repo directly and refreshed your smp branch?  Not sure if this is your intended desire.

FYI I think this is PR is still open maybe because you are using the repo directly and refreshed your smp branch? Not sure if this is your intended desire.

Oh, I just wanted to make sure you were ok with my last round of updates before submitting. Sorry if that wasn't clear!


chore(ci): add deploy script for gh-pages demo

:tada: This PR is included in version 1.0.4 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


GPU version gives nan value

Hi. First thank you for your code.
I  have a problem GPU version warp-transducer.
I applied gpu version warp-transducer to your E2E-ASR code. (with minor adjust)
At this case, loss became "nan" after several steps.
Is there any requirement in cuda or another problem?
thank you
pytorch 1.0.1
ubuntu 18
cuda 10

@adonisues
I used PyTorch 1.0 with CUDA 9.0
CUDA10 may not support.

I am using the latest pytorch 1.0 with CUDA 9.0, same problem with nan loss after several steps. I think there may be some bugs inside the kernel code gpu_rnnt_kernel.h. If I replace this file with the one from the mxnet repo (https://github.com/HawkAaron/mxnet-transducer/blob/master/rnnt_include/detail/gpu_rnnt_kernel.h), the loss seems to be normal

Please rebuild it with cmake -DUSE_NAIVE_KERNEL=on .., there are truly some bugs inside gpu_rnnt_kernel.h, I will fix it asap.

The bug is fixed.

Thank you for your fix. It works well.
But there is a typo  at "/warprnnt_pytorch/init.py", line 79"
"labels = torch.cat([label[:i] for label, i in zip(labels, ylen)], dim=0)" : ylen ==> label_lens
And this line make labels 1D tensor if batch size is 1, so error occurs at certify_inputs.
By the way, I have a question about the included softmax.
Is there any reason you use your own softmax for GPU version instead of nn.functional.log_softmax ?

The bug is fixed.

Thanks for the fix.
in the new warprnnt_pytorch/init.py, RNNTLoss seems to miss the backward function causing autograd to throw a "NotImplementedError". BTW, does the new commit also fix the bug in gpu_rnnt_kernel.h, i.e., the bug in the non-naive computation of alphas and betas? Thanks

Thanks for your bug report, it works well now.
BTW, the GPU version has some tricks on GPU memory consuming, it only store two values for each prediction (blank and label).  I have moved log_softmax before loss function call.

Hello GPU version is working now.
But CPU version is not working when batch size > 1.
It makes Segmentation fault.

CPU version works well now.


Remove SkyDNS now that OpenShift & upstream have DNS support baked in

Refer to this link for build results (access rights to CI server needed):
https://fabric8-ci.fusesource.com/job/fabric8-quickstarts-master-pullreq/277/
Test FAILed.

Refer to this link for build results (access rights to CI server needed):
https://fabric8-ci.fusesource.com/job/fabric8-quickstarts-master-pullreq/278/
Test PASSed.


No textures provided

In the floating_robotiqenv.py file when creating the FloatingRobotiqEnv object, the texture files are required, unfortunately, the arti_mani/assets/textures folder doesn't exist and there are no textures inside the provided dataset. Could you provide the missing files?

I commit the all files.
Reference:

Textures: https://www.robots.ox.ac.uk/~vgg/data/dtd/
Random RGBD background images:
SUN-RGBD: https://rgbd.cs.princeton.edu/,
SceneNetRGBD: https://robotvault.bitbucket.io/scenenet-rgbd.html


update for typings v2

the ambient option is no longer available.

I signed it!

this installs the incorrect typings i believe?

We are no longer using typings as we have a local typings file for Firebase 3.0. In the future the Firebase SDK will ship the typings in the npm module and we'll use that.
Thank you for taking the time to send a PR though!


[FEATURE] typehints for static methods

related to #409 - this is my console command to create a helper file with all the static methods.
How to

call from composer - generates the file in the package root folder:

composer generate-ide-helper

call from composer binary (vendor/bin/money-console):

vendor/bin/money-console generate:money-static:helper

--path=[path|package root] - define a custom path to store the helper file
--indent=[int|4] - define the amount of spaces to use for indent
--currencies=[full classname] - the classname to a custom currencies class. can be used multiple times

vendor/bin/money-console generate:money-static:helper --path=./ --indent=2 --currencies=App\Currencies\Class1 --currencies=App\Currencies\Class2

The output is very verbose and I think catches all exceptions in a good way.

$ ./money-console generate:money-static:helper
Generate Money\Money static method helper class
Target-File:
[...]/money/_ide_helper.money.php
Currencies-Classes:
Money\Currencies\ISOCurrencies
Money\Currencies\BitcoinCurrencies
Found-Currencies:
179
helper class successfully written

The generated file is ignored at the moment because otherwise the package will everytime come with an Other decleration of class Money exists warning in the IDE. I can remove the file from the ignore list if wanted - but I think that this isn't a good idea.
If you want to have this file in the repo it would be an idea to use travis and push the file with markup into the doc folder. For this I can add a second command that generates the .rst file.

This is the generated file including both default currencies classes (ISOCurrencies, BitcoinCurrencies).
_ide_helper.money.php
<?php
namespace Money;

class Money
{
    public static function AFN($amount) {
        return new self($amount, new Currency('AFN'));
    }

    public static function EUR($amount) {
        return new self($amount, new Currency('EUR'));
    }

    public static function ALL($amount) {
        return new self($amount, new Currency('ALL'));
    }

    public static function DZD($amount) {
        return new self($amount, new Currency('DZD'));
    }

    public static function USD($amount) {
        return new self($amount, new Currency('USD'));
    }

    public static function AOA($amount) {
        return new self($amount, new Currency('AOA'));
    }

    public static function XCD($amount) {
        return new self($amount, new Currency('XCD'));
    }

    public static function ARS($amount) {
        return new self($amount, new Currency('ARS'));
    }

    public static function AMD($amount) {
        return new self($amount, new Currency('AMD'));
    }

    public static function AWG($amount) {
        return new self($amount, new Currency('AWG'));
    }

    public static function AUD($amount) {
        return new self($amount, new Currency('AUD'));
    }

    public static function AZN($amount) {
        return new self($amount, new Currency('AZN'));
    }

    public static function BSD($amount) {
        return new self($amount, new Currency('BSD'));
    }

    public static function BHD($amount) {
        return new self($amount, new Currency('BHD'));
    }

    public static function BDT($amount) {
        return new self($amount, new Currency('BDT'));
    }

    public static function BBD($amount) {
        return new self($amount, new Currency('BBD'));
    }

    public static function BYN($amount) {
        return new self($amount, new Currency('BYN'));
    }

    public static function BZD($amount) {
        return new self($amount, new Currency('BZD'));
    }

    public static function XOF($amount) {
        return new self($amount, new Currency('XOF'));
    }

    public static function BMD($amount) {
        return new self($amount, new Currency('BMD'));
    }

    public static function INR($amount) {
        return new self($amount, new Currency('INR'));
    }

    public static function BTN($amount) {
        return new self($amount, new Currency('BTN'));
    }

    public static function BOB($amount) {
        return new self($amount, new Currency('BOB'));
    }

    public static function BOV($amount) {
        return new self($amount, new Currency('BOV'));
    }

    public static function BAM($amount) {
        return new self($amount, new Currency('BAM'));
    }

    public static function BWP($amount) {
        return new self($amount, new Currency('BWP'));
    }

    public static function NOK($amount) {
        return new self($amount, new Currency('NOK'));
    }

    public static function BRL($amount) {
        return new self($amount, new Currency('BRL'));
    }

    public static function BND($amount) {
        return new self($amount, new Currency('BND'));
    }

    public static function BGN($amount) {
        return new self($amount, new Currency('BGN'));
    }

    public static function BIF($amount) {
        return new self($amount, new Currency('BIF'));
    }

    public static function CVE($amount) {
        return new self($amount, new Currency('CVE'));
    }

    public static function KHR($amount) {
        return new self($amount, new Currency('KHR'));
    }

    public static function XAF($amount) {
        return new self($amount, new Currency('XAF'));
    }

    public static function CAD($amount) {
        return new self($amount, new Currency('CAD'));
    }

    public static function KYD($amount) {
        return new self($amount, new Currency('KYD'));
    }

    public static function CLP($amount) {
        return new self($amount, new Currency('CLP'));
    }

    public static function CLF($amount) {
        return new self($amount, new Currency('CLF'));
    }

    public static function CNY($amount) {
        return new self($amount, new Currency('CNY'));
    }

    public static function COP($amount) {
        return new self($amount, new Currency('COP'));
    }

    public static function COU($amount) {
        return new self($amount, new Currency('COU'));
    }

    public static function KMF($amount) {
        return new self($amount, new Currency('KMF'));
    }

    public static function CDF($amount) {
        return new self($amount, new Currency('CDF'));
    }

    public static function NZD($amount) {
        return new self($amount, new Currency('NZD'));
    }

    public static function CRC($amount) {
        return new self($amount, new Currency('CRC'));
    }

    public static function HRK($amount) {
        return new self($amount, new Currency('HRK'));
    }

    public static function CUP($amount) {
        return new self($amount, new Currency('CUP'));
    }

    public static function CUC($amount) {
        return new self($amount, new Currency('CUC'));
    }

    public static function ANG($amount) {
        return new self($amount, new Currency('ANG'));
    }

    public static function CZK($amount) {
        return new self($amount, new Currency('CZK'));
    }

    public static function DKK($amount) {
        return new self($amount, new Currency('DKK'));
    }

    public static function DJF($amount) {
        return new self($amount, new Currency('DJF'));
    }

    public static function DOP($amount) {
        return new self($amount, new Currency('DOP'));
    }

    public static function EGP($amount) {
        return new self($amount, new Currency('EGP'));
    }

    public static function SVC($amount) {
        return new self($amount, new Currency('SVC'));
    }

    public static function ERN($amount) {
        return new self($amount, new Currency('ERN'));
    }

    public static function ETB($amount) {
        return new self($amount, new Currency('ETB'));
    }

    public static function FKP($amount) {
        return new self($amount, new Currency('FKP'));
    }

    public static function FJD($amount) {
        return new self($amount, new Currency('FJD'));
    }

    public static function XPF($amount) {
        return new self($amount, new Currency('XPF'));
    }

    public static function GMD($amount) {
        return new self($amount, new Currency('GMD'));
    }

    public static function GEL($amount) {
        return new self($amount, new Currency('GEL'));
    }

    public static function GHS($amount) {
        return new self($amount, new Currency('GHS'));
    }

    public static function GIP($amount) {
        return new self($amount, new Currency('GIP'));
    }

    public static function GTQ($amount) {
        return new self($amount, new Currency('GTQ'));
    }

    public static function GBP($amount) {
        return new self($amount, new Currency('GBP'));
    }

    public static function GNF($amount) {
        return new self($amount, new Currency('GNF'));
    }

    public static function GYD($amount) {
        return new self($amount, new Currency('GYD'));
    }

    public static function HTG($amount) {
        return new self($amount, new Currency('HTG'));
    }

    public static function HNL($amount) {
        return new self($amount, new Currency('HNL'));
    }

    public static function HKD($amount) {
        return new self($amount, new Currency('HKD'));
    }

    public static function HUF($amount) {
        return new self($amount, new Currency('HUF'));
    }

    public static function ISK($amount) {
        return new self($amount, new Currency('ISK'));
    }

    public static function IDR($amount) {
        return new self($amount, new Currency('IDR'));
    }

    public static function XDR($amount) {
        return new self($amount, new Currency('XDR'));
    }

    public static function IRR($amount) {
        return new self($amount, new Currency('IRR'));
    }

    public static function IQD($amount) {
        return new self($amount, new Currency('IQD'));
    }

    public static function ILS($amount) {
        return new self($amount, new Currency('ILS'));
    }

    public static function JMD($amount) {
        return new self($amount, new Currency('JMD'));
    }

    public static function JPY($amount) {
        return new self($amount, new Currency('JPY'));
    }

    public static function JOD($amount) {
        return new self($amount, new Currency('JOD'));
    }

    public static function KZT($amount) {
        return new self($amount, new Currency('KZT'));
    }

    public static function KES($amount) {
        return new self($amount, new Currency('KES'));
    }

    public static function KPW($amount) {
        return new self($amount, new Currency('KPW'));
    }

    public static function KRW($amount) {
        return new self($amount, new Currency('KRW'));
    }

    public static function KWD($amount) {
        return new self($amount, new Currency('KWD'));
    }

    public static function KGS($amount) {
        return new self($amount, new Currency('KGS'));
    }

    public static function LAK($amount) {
        return new self($amount, new Currency('LAK'));
    }

    public static function LBP($amount) {
        return new self($amount, new Currency('LBP'));
    }

    public static function LSL($amount) {
        return new self($amount, new Currency('LSL'));
    }

    public static function ZAR($amount) {
        return new self($amount, new Currency('ZAR'));
    }

    public static function LRD($amount) {
        return new self($amount, new Currency('LRD'));
    }

    public static function LYD($amount) {
        return new self($amount, new Currency('LYD'));
    }

    public static function CHF($amount) {
        return new self($amount, new Currency('CHF'));
    }

    public static function MOP($amount) {
        return new self($amount, new Currency('MOP'));
    }

    public static function MKD($amount) {
        return new self($amount, new Currency('MKD'));
    }

    public static function MGA($amount) {
        return new self($amount, new Currency('MGA'));
    }

    public static function MWK($amount) {
        return new self($amount, new Currency('MWK'));
    }

    public static function MYR($amount) {
        return new self($amount, new Currency('MYR'));
    }

    public static function MVR($amount) {
        return new self($amount, new Currency('MVR'));
    }

    public static function MRO($amount) {
        return new self($amount, new Currency('MRO'));
    }

    public static function MUR($amount) {
        return new self($amount, new Currency('MUR'));
    }

    public static function XUA($amount) {
        return new self($amount, new Currency('XUA'));
    }

    public static function MXN($amount) {
        return new self($amount, new Currency('MXN'));
    }

    public static function MXV($amount) {
        return new self($amount, new Currency('MXV'));
    }

    public static function MDL($amount) {
        return new self($amount, new Currency('MDL'));
    }

    public static function MNT($amount) {
        return new self($amount, new Currency('MNT'));
    }

    public static function MAD($amount) {
        return new self($amount, new Currency('MAD'));
    }

    public static function MZN($amount) {
        return new self($amount, new Currency('MZN'));
    }

    public static function MMK($amount) {
        return new self($amount, new Currency('MMK'));
    }

    public static function NAD($amount) {
        return new self($amount, new Currency('NAD'));
    }

    public static function NPR($amount) {
        return new self($amount, new Currency('NPR'));
    }

    public static function NIO($amount) {
        return new self($amount, new Currency('NIO'));
    }

    public static function NGN($amount) {
        return new self($amount, new Currency('NGN'));
    }

    public static function OMR($amount) {
        return new self($amount, new Currency('OMR'));
    }

    public static function PKR($amount) {
        return new self($amount, new Currency('PKR'));
    }

    public static function PAB($amount) {
        return new self($amount, new Currency('PAB'));
    }

    public static function PGK($amount) {
        return new self($amount, new Currency('PGK'));
    }

    public static function PYG($amount) {
        return new self($amount, new Currency('PYG'));
    }

    public static function PEN($amount) {
        return new self($amount, new Currency('PEN'));
    }

    public static function PHP($amount) {
        return new self($amount, new Currency('PHP'));
    }

    public static function PLN($amount) {
        return new self($amount, new Currency('PLN'));
    }

    public static function QAR($amount) {
        return new self($amount, new Currency('QAR'));
    }

    public static function RON($amount) {
        return new self($amount, new Currency('RON'));
    }

    public static function RUB($amount) {
        return new self($amount, new Currency('RUB'));
    }

    public static function RWF($amount) {
        return new self($amount, new Currency('RWF'));
    }

    public static function SHP($amount) {
        return new self($amount, new Currency('SHP'));
    }

    public static function WST($amount) {
        return new self($amount, new Currency('WST'));
    }

    public static function STD($amount) {
        return new self($amount, new Currency('STD'));
    }

    public static function SAR($amount) {
        return new self($amount, new Currency('SAR'));
    }

    public static function RSD($amount) {
        return new self($amount, new Currency('RSD'));
    }

    public static function SCR($amount) {
        return new self($amount, new Currency('SCR'));
    }

    public static function SLL($amount) {
        return new self($amount, new Currency('SLL'));
    }

    public static function SGD($amount) {
        return new self($amount, new Currency('SGD'));
    }

    public static function XSU($amount) {
        return new self($amount, new Currency('XSU'));
    }

    public static function SBD($amount) {
        return new self($amount, new Currency('SBD'));
    }

    public static function SOS($amount) {
        return new self($amount, new Currency('SOS'));
    }

    public static function SSP($amount) {
        return new self($amount, new Currency('SSP'));
    }

    public static function LKR($amount) {
        return new self($amount, new Currency('LKR'));
    }

    public static function SDG($amount) {
        return new self($amount, new Currency('SDG'));
    }

    public static function SRD($amount) {
        return new self($amount, new Currency('SRD'));
    }

    public static function SZL($amount) {
        return new self($amount, new Currency('SZL'));
    }

    public static function SEK($amount) {
        return new self($amount, new Currency('SEK'));
    }

    public static function CHE($amount) {
        return new self($amount, new Currency('CHE'));
    }

    public static function CHW($amount) {
        return new self($amount, new Currency('CHW'));
    }

    public static function SYP($amount) {
        return new self($amount, new Currency('SYP'));
    }

    public static function TWD($amount) {
        return new self($amount, new Currency('TWD'));
    }

    public static function TJS($amount) {
        return new self($amount, new Currency('TJS'));
    }

    public static function TZS($amount) {
        return new self($amount, new Currency('TZS'));
    }

    public static function THB($amount) {
        return new self($amount, new Currency('THB'));
    }

    public static function TOP($amount) {
        return new self($amount, new Currency('TOP'));
    }

    public static function TTD($amount) {
        return new self($amount, new Currency('TTD'));
    }

    public static function TND($amount) {
        return new self($amount, new Currency('TND'));
    }

    public static function TRY($amount) {
        return new self($amount, new Currency('TRY'));
    }

    public static function TMT($amount) {
        return new self($amount, new Currency('TMT'));
    }

    public static function UGX($amount) {
        return new self($amount, new Currency('UGX'));
    }

    public static function UAH($amount) {
        return new self($amount, new Currency('UAH'));
    }

    public static function AED($amount) {
        return new self($amount, new Currency('AED'));
    }

    public static function USN($amount) {
        return new self($amount, new Currency('USN'));
    }

    public static function UYU($amount) {
        return new self($amount, new Currency('UYU'));
    }

    public static function UYI($amount) {
        return new self($amount, new Currency('UYI'));
    }

    public static function UZS($amount) {
        return new self($amount, new Currency('UZS'));
    }

    public static function VUV($amount) {
        return new self($amount, new Currency('VUV'));
    }

    public static function VEF($amount) {
        return new self($amount, new Currency('VEF'));
    }

    public static function VND($amount) {
        return new self($amount, new Currency('VND'));
    }

    public static function YER($amount) {
        return new self($amount, new Currency('YER'));
    }

    public static function ZMW($amount) {
        return new self($amount, new Currency('ZMW'));
    }

    public static function ZWL($amount) {
        return new self($amount, new Currency('ZWL'));
    }

    public static function XBA($amount) {
        return new self($amount, new Currency('XBA'));
    }

    public static function XBB($amount) {
        return new self($amount, new Currency('XBB'));
    }

    public static function XBC($amount) {
        return new self($amount, new Currency('XBC'));
    }

    public static function XBD($amount) {
        return new self($amount, new Currency('XBD'));
    }

    public static function XTS($amount) {
        return new self($amount, new Currency('XTS'));
    }

    public static function XXX($amount) {
        return new self($amount, new Currency('XXX'));
    }

    public static function XAU($amount) {
        return new self($amount, new Currency('XAU'));
    }

    public static function XPD($amount) {
        return new self($amount, new Currency('XPD'));
    }

    public static function XPT($amount) {
        return new self($amount, new Currency('XPT'));
    }

    public static function XAG($amount) {
        return new self($amount, new Currency('XAG'));
    }

    public static function XBT($amount) {
        return new self($amount, new Currency('XBT'));
    }
}

@sagikazarmark have you changed the styleci settings? I haven't changed these files and there are also no changes in master branch.
Should I ignore them or create a new PR to fix these issues?

@sagikazarmark Do you get what is happening here? Can you make sure this will be merged?

Haven't had the chance to try it, but I like the idea of having a generated something that causes the IDE to show proper typehints. IMO it's much more than adding them to Money.
This script generates a file which is not autoloaded, but read by IDEs, so they can properly show typehints for magic ISO currency constructors.
As said I haven't reviewed it properly, but I would say it's not a blocker, so if we can't make it into 3.1, that's not a huge problem. I will try to pick it up this week.

It generated a helper php file for all passed in "Currencies" classes. This helper file does not have any effect on runtime cause it's not autoloaded. But most (every?) IDEs read all php files in project directory - that's why it also detects this helper file and can display all static methods listed in it for autocomplete.
The user/dev just has to execute the command (see first comment) and has this file, if wanted or available also with all custom Currencies.
It is the solution for the, wanted, PHP Doc Tags in the Money class itself.

@willemstuursma As you mentioned yesterday that you would like to see this land, could you reply and say if this is what you are looking for?

@willemstuursma As you mentioned yesterday that you would like to see this land, could you reply and say if this is what you are looking for?

To be quite frank, I would prefer all out of the box supported currencies (ISO + XBT) to be configured as magic methods in the phpdoc for the Money class.
I a library consumer, I don't really spend any time in the Money class and as a Money developer, I can always collapse the comments using my IDE.
Having a helper script is better than nothing, but not the best solution for library consumers.

What if we were to move the phpdoc with the method definitions into a trait or interface that is used exclusively for this?

@willemstuursma so you want something like:
repo code
class Money {
    use MoneyStaticHelperDoc;
}

trait MoneyStaticHelperDoc {}

CI/local Command override
/**
 * @method ...
 */
trait MoneyStaticHelperDoc {}

Cause of the fact that this is already here I would be fine to extend this and add a second symfony command. So every user/dev can use his favorite way.
If I got your idea right I will test if it works in PhpStorm and if it does I will create a second command.

@Gummibeer I'd prefer an auto generated file that is part of the repository - so no set up needed, and scripts only needed for re-generating the file if new currencies are added.
I'd also move the __callStatic() method into the trait, so I'd name it something like Money\Money\StaticHelperMethodsTrait.

Ok, but if it is autogenerated you have to commit/Push it from TravisCI or anyone who Changes something related has to generate it!?
But in all cases we need a second command.

@frederikbosch I think it's an acceptable compromise in this case. It's ugly for sure, but let's think of it this way: if there wasn't __callStatic (which is - let's be honest - also not really nice) you would have to generate all that code.
In fact, I think we could even move that callStatic function to the generated trait as well. That way all ISO static nastiness is moved out of money (on the implementation level). But that's just an idea.
I did a little research and without writing an actual idea plugin (which just blows a mind) we probably can't achieve dynamic methods without this. Unfortunately this are is barely covered by JetBrains and Google.

☝  I created a separate PR with my experiments based on your code @Gummibeer . Any input is welcome there.


Expression vtable missing under ld or gold

After #71, Zircon cannot be built using ld or gold. For some reason, they cnanot find the vtables generated in expr.cpp.o. It is possibly an issue with them determining the key function, but since both lld and mold work it is puzzling.

Resolved by #97


HTTP 200 infers GrpcStatus::Unknown in access log filter

When filtering traffic that contains both REST and Grpc messages, the access log filter's behavior of inferring GrpcStatus::Unknown from HTTP 200 OK seems wrong, as it will capture all successful REST traffic.
https://github.com/envoyproxy/envoy/blob/74e348720af8d157bbdb00b629ac7c6022606fc8/source/common/access_log/access_log_impl.cc#L237-L239
It looks like the implementer expected the Grpc utility to return nullopt if there wasn't a clear translation from HTTP to Grpc status. I'd recommend the utility call be wrapped to behave that way.

@lita @adilhafeez

Agreed I think this is a bug. cc @crockeo who originally did this feature. cc @snowp @dio also.

The 200 -> UNKNOWN mapping is what gRPC suggests: https://github.com/grpc/grpc/blob/master/doc/http-grpc-status-mapping.md but we should probably not be trying to infer a gRPC code for non-gRPC responses?

Yeah if there was a setting or a way to not log if the header/trailer doesn't exist, that would be ideal.

@snowp is right and it is what gRPC suggests.
You can combine the  GrpcStatusFilter (which is questioned here) and HeaderFilter with content-type to be application/grpc to get log of gRPC part, and then the inverted HeaderFilter for the REST part?

Thanks @lizan and @snowp it looks like there is a workaround here. @kb000 if there are any doc updates that would have helped you here PRs super appreciated.


Can't destroy node pools in 0.9.3-rc.5

Now that I can create the node pools in the example, this is what happens when I try to destroy them (as per https://coreos.com/kubernetes/docs/latest/kubernetes-on-aws-destroy.html):
Machine:k8s-cluster user$ kube-aws node-pools destroy
Error: Error parsing node pool config: open node-pools//cluster.yaml: no such file or directory

I'm doing this in the root of the folder containing all of the assets, as seen here:
Machine:k8s-cluster user$ ls
cluster.yaml		kubeconfig		stack-template.json
credentials		node-pools		userdata

Here's the relevant version info:
kube-aws version v0.9.3-rc.5

Let me know if I'm doing something wrong!

Currently the command needs the option --node-pool-name to do something. So the right command would be:
$ kube-aws node-pools destroy --node-pool-name foo
If the command should support the destruction of all node pools created when there is none specified as the documentation suggest is something the source code does not do so we should fix the source code or the documentation.
IMHO I would say that since there is no confirmation message when you use the destroy command such a destructive operation for not specifying additional required parameters by mistake could be too dangerous. I would add a --all flag if we want to support deletion of all node-pools and fix the documentation accordingly.

@neoandroid Thanks, this was super-helpful.  Hope the maintainers get a chance to update the documentation so others don't get tripped up.

@numair @neoandroid Thanks for your info!
It is fixed in master.
https://github.com/coreos/kube-aws/commit/713f18b045fad9bf03c8a120791248c4eae064fe


New build pipeline will not support build swagger.json

@mairaw @jimmyca15
Is this page still needed? https://docs.microsoft.com/en-us/IIS-Administration/api/iis.administration
We will not support build swagger.json in our V3 build pipeline. If this page is not needed now, please help to approve this PR.
If this page is needed, we have two options and please let me know which one do you prefer:

Revert the build pipeline to V2, the impact is that OPS build will about 10 times slower than V3.
Use our current rest pipeline to transfer this swagger.json to multiple yaml files, each file will just contains operation and the page will look like this one: https://docs.microsoft.com/en-us/rest/api/netapp/netappresource/checkfilepathavailability?branch=master. The impact is that you may need to create an onboard request here and you can also refer to this topic.

Let me know if you have any questions.
cc @live1206

Docs Build status updates of commit ffd1478:
:warning: Validation status: warnings

File
Status
Preview URL
Details

IIS-Administration/api/toc.md
:warning:Warning

Details

IIS-Administration/api/iis.administration.swagger.json
:white_check_mark:Succeeded

IIS-Administration/api/toc.md

Line 17, Column 3: [Warning-file-not-found] Invalid file link: 'iis.administration.swagger.json'.

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
Note: Your PR may contain errors or warnings unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel

This would be a question for @shirhatti

Docs Build status updates of commit bac105d:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

IIS-Administration/api/iis.administration.swagger.json
:white_check_mark:Succeeded

IIS-Administration/api/toc.md
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel

@shirhatti Kindly ping. Would you help to have a check about this PR?
cc @live1206

@shirhatti I see that new PRs are now failing. Can you review this?

Can we do a manual migration of content? This content updates extremely infrequently

Given how infrequently this content updates, I'd rather have a failing build and lose the ability to update than yank out existing content that is still valid.

I think staying in V2 might be ok for you given it doesn't update that often. That way you could continue to use as-is if I understood correctly.

Can I close this PR then?

I think this PR might need to be changed to roll back the engine to V2? I see all new PRs are failing. @yishengjin1413?