Bokeh improvements

This PR will include various improvements for the bokeh backend. First of all it now has proper support for blanking out frames with the empty option, which also allows downsampling to be applied without having to process all the data first. I still want to switch the VLine and HLine implementation to use BoxAnnotations to address zorder and other issues, so the PR isn't quite ready yet.
Note that while all the changes related to changing the BokehPlot get_data method to support an empty option might seem like overkill simply to get callbacks working it's also the first step to being able to reuse plots in an Overlay, which will eventually provide a major optimization.

It all sounds good and I don't see any huge blocks of new code to consider. You have a much better understanding of the current limitations of our Bokeh support so I am happy to let you merge whenever you think it is ready.
For VLine and HLine`, I've noticed that something you can see the ends of the lines when extents change (e.g in a DynamicMap``). If there much harm ( performance issues perhaps?) extending the lines say 100x the known extents to be safe? If Bokeh does effective clipping, I don't see why we need to try to set the extents of these lines to exactly what is visible.

I've implemented the HLine and VLine using the new Bokeh BoxAnnotation (can replace it with LineAnnotation once bokeh 0.11 is released). This means it's extents always cover the full range of the plot and will always be on top of all the other Elements. With that implemented the PR is ready for merge.


Add Ctrl-R for reverse search in console

I use Ctrl-R a lot for reverse search in the REPL. It would be great to add this to the Juno console.
Or am I missing some equivalent functionality?

No, we don't really have something like that (I think, not exactly sure what Ctrl-R does).
Also, dup of https://github.com/JunoLab/atom-ink/issues/105.

Thanks. Typing the first letter and using up arrow works, although will
take some getting used to.
On Sun, Jun 25, 2017 at 1:58 PM, Sebastian Pfitzner <
<EMAIL_ADDRESS>wrote:

Closed #360 https://github.com/JunoLab/atom-julia-client/issues/360.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/JunoLab/atom-julia-client/issues/360#event-1137844580,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AALtTvs5kLltprT4gR5zEAf2luJfoEppks5sHsnkgaJpZM4OEt9g
.

--
Dr. David P. Sanders
Profesor Titular "B" / Associate Professor
Departamento de Física, Facultad de Ciencias
Universidad Nacional Autónoma de México (UNAM)
dpsanders@g <EMAIL_ADDRESS>/ Twitter: @DavidPSanders
https://twitter.com/DavidPSanders
http://sistemas.fciencias.unam.mx/~dsanders / GitHub: dpsanders
https://github.com/dpsanders
Cubículo / office: #414, 4o. piso del Depto. de Física
Tel.: (+52 55) 5622 4965


"Download your Twitter Data"

Are you aware of the download function at the very bottom of this page?
It seems like it does most of what you're trying to achieve with grain without running into any API limits.
If you additionally download retweet media and replies the set should be rather complete.

@hyperfekt thanks for sharing that download link. Do you happen to know how long that that has been available?

I do not, I only discovered the option myself just recently.

@hyperfekt I was not. This is far better than the Tweet archive. I'm working on a follow up post to point people in the right direction, as well as a set of protocol buffers for parsing the JavaScript files.

The follow up post is complete. I'm now working on the new set of protocol buffers.

You can follow along on the twitter-data branch

hello @kyleconroy, many thanks for this project.
I'm trying to find out if this can be used to parse downloaded twitter data. Can it?
I've downloaded both the "archive" and the "data" from twitter, but only the archive have an html viewer, sadly.
What do you say?


stdenv: change texinfo bootstrap handling; texinfo, bash: simplify expressions

Motivation for this change

stdenv change: see commit message.
others: simpler is better.

Things done

[X] Writing this from a system with these patches applied.
[X] Fits CONTRIBUTING.md.

/cc @Ericson2314

Looks okay to me. I assume 4.13a doesn't work with common.nix?
One concern I have with the "generic" style is that it's not always clear how to add stuff to them. For instance, what do we do when we want to add a known vulnerability or mark as broken a specific version of texinfo? I think overrideAttrs would probably work as well as adding an optional argument to common.nix but it's not exactly obvious how to do it. I had to do this with Mono recently and still not sure whether it was the right way to go about it:
https://github.com/NixOS/nixpkgs/pull/39344/files
Definitely not a reason not to merge this because it's used elsewhere - just a concern with this style.

Success on x86_64-linux (full log)
Attempted: bash, stdenv, texinfo
Partial log (click to expand)
shrinking /nix/store/95y4xlq412kmp5qrcn8ri7sm47cj88fl-findutils-4.6.0/libexec/code
shrinking /nix/store/95y4xlq412kmp5qrcn8ri7sm47cj88fl-findutils-4.6.0/libexec/bigram
gzipping man pages under /nix/store/95y4xlq412kmp5qrcn8ri7sm47cj88fl-findutils-4.6.0/share/man/
strip is /nix/store/d1prcspbh2qsviipvnaxizcj8l3g7fpw-bootstrap-tools/bin/strip
stripping (with command strip and flags -S) in /nix/store/95y4xlq412kmp5qrcn8ri7sm47cj88fl-findutils-4.6.0/libexec  /nix/store/95y4xlq412kmp5qrcn8ri7sm47cj88fl-findutils-4.6.0/bin
checking for references to /build in /nix/store/95y4xlq412kmp5qrcn8ri7sm47cj88fl-findutils-4.6.0...
shrinking RPATHs of ELF executables and libraries in /nix/store/0zxyp7s97nlhz5vlwkmx4qcn870bgy29-findutils-4.6.0-info
strip is /nix/store/d1prcspbh2qsviipvnaxizcj8l3g7fpw-bootstrap-tools/bin/strip
checking for references to /build in /nix/store/0zxyp7s97nlhz5vlwkmx4qcn870bgy29-findutils-4.6.0-info...
building '/nix/store/yqz1cs8amflddj2x44j9081ciq9vh5cs-stdenv-linux.drv'...

Yes, the older texinfo is a bit too different to be merged with this expression and I didn't want to make common.nix complicated.
I agree that merging for the sake of merging is not useful, but then expressions almost coincide and you frequently have to update all of them at once I think it's worth merging them.

I think overrideAttrs would probably work as well as adding an optional argument to common.nix but

You can also inspect the version in common.nix. E.g.
{
  inherit version;
  name = "name-${version}";
  meta = {
    knownVulnerabilities = lib.versionOlder version whatever ["CVE-whatever" ];
  }
}

But I do feel that overrideAttrs is preferrable for stuff like that, since its very version-specefic.

Failure on aarch64-linux (full log)
Attempted: bash, stdenv, texinfo
Partial log (click to expand)
cannot build derivation '/nix/store/9rxd4vadq9phracax87yr2fc1rqii4vk-gnutar-1.30.drv': 2 dependencies couldn't be built
cannot build derivation '/nix/store/w0yv7xq6bwss4vxd30mblh4fixgyv9av-lzip-1.20.drv': 2 dependencies couldn't be built
cannot build derivation '/nix/store/1n6dfh61v8v0x2p7hisfzdrvpm7ncc32-binutils-wrapper-2.30.drv': 4 dependencies couldn't be built
cannot build derivation '/nix/store/b9xgicjhkj81d69i4lmvxldc0z7r8xiw-diffutils-3.6.drv': 3 dependencies couldn't be built
cannot build derivation '/nix/store/cnblzq5c9a37xxb16nyq06hx3splic3w-ed-1.14.2.drv': 2 dependencies couldn't be built
cannot build derivation '/nix/store/6k0km0ki04pbbdap6f2753anlfharwca-findutils-4.6.0.drv': 2 dependencies couldn't be built
cannot build derivation '/nix/store/73m8kwcy34cplxj9kdz025ymcndj07dw-gcc-wrapper-7.3.0.drv': 5 dependencies couldn't be built
cannot build derivation '/nix/store/zl4x9fa11sfrr7ncs0bfsm68hjylmyj4-patch-2.7.6.drv': 2 dependencies couldn't be built
cannot build derivation '/nix/store/rssddc8xsirpjfplk47dbnpfq350vl6d-stdenv-linux.drv': 26 dependencies couldn't be built
error: build of '/nix/store/f0v8bjw4cwr4mgqgx5j2ysfpdsb3y44l-texinfo-6.5.drv', '/nix/store/rssddc8xsirpjfplk47dbnpfq350vl6d-stdenv-linux.drv', '/nix/store/zlnk2cynwbvx4h4ql6mw1lw4biwx1p4v-bash-4.4-p19.drv' failed

The build on arch times out.

Failure on x86_64-linux (full log)
Attempted: bash, stdenv, texinfo
Partial log (click to expand)
cannot build derivation '/nix/store/34g6vv5c3b3pxhygp6b3kjry24i19v1x-gnutar-1.30.drv': 2 dependencies couldn't be built
cannot build derivation '/nix/store/pdgnl984y92aaxm46wyjk4jga5s21fa2-lzip-1.20.drv': 2 dependencies couldn't be built
cannot build derivation '/nix/store/d489ld8w9c9zq2y9dvsk5dhlxml0hqyx-binutils-wrapper-2.30.drv': 4 dependencies couldn't be built
cannot build derivation '/nix/store/8cafkqbig756m94q9a9mp5n3v2m1fn5n-diffutils-3.6.drv': 3 dependencies couldn't be built
cannot build derivation '/nix/store/15p639q67vfbpipbhscbp7q7vk44wyli-ed-1.14.2.drv': 2 dependencies couldn't be built
cannot build derivation '/nix/store/bg5gfx7p87vx4y805sgi5l8hg5zvfidc-findutils-4.6.0.drv': 2 dependencies couldn't be built
cannot build derivation '/nix/store/kc0q8391swsb09kglkgsvqcjv2c5q030-gcc-wrapper-7.3.0.drv': 5 dependencies couldn't be built
cannot build derivation '/nix/store/bis5sw94b4ikh4fpwk0r3mzr75fnw3ly-patch-2.7.6.drv': 2 dependencies couldn't be built
cannot build derivation '/nix/store/7n0md6dvgmq3105n2rz17k2kc18h8kj3-stdenv-linux.drv': 24 dependencies couldn't be built
error: build of '/nix/store/2v21i25lhz9xw7i0nxg7ch33fb0zhrkh-texinfo-6.5.drv', '/nix/store/7n0md6dvgmq3105n2rz17k2kc18h8kj3-stdenv-linux.drv', '/nix/store/klf44h39spflryb9d87dz4xi3d3hkn7y-bash-4.4-p19.drv' failed

this results in the main pkgs.texinfo derivation depending on a perl that still links against the bootstrap-tools, causing the closure of every system to use an extra ~113mb

I can confirm. That's unfortunate. Reverting a809fdc8e1b0c1d49d40815d9bac0de27ddab5f1 fixes it, but it's a mass-rebuild.

@cleverca22 Please try #44932, I think it fixes it, but still saves one texinfo rebuild.


Ability to set multiple default file types in Windows 11

Description of the new feature / enhancement
Allow the user to set an app to be the default for multiple file types at once
Scenario when this would be used?
As an example - install VLC and want it to take over being the default media player for all the different file types it supports.
At present in Windows 11 you would need to click on every single file extension (of which there are a huge number!) and set it to VLC. In previous versions of Windows you could just set the app to be default for all the extensions it supports - this would be a great PowerToy to return that functionality.
Supporting information
Easy for Windows 10 or Mac - https://www.hellotech.com/guide/for/how-to-make-vlc-default-player-windows-10-mac
Example for web browsers - https://www.theverge.com/22630319/microsoft-windows-11-default-browser-changes

In Windows 11 you can enter a file type here:

Does that help?
/needinfo

Unfortunately not as there are so many file types supported by some apps (eg VLC, web browsers). Previously versions let the app set itself as default for the file types it supported so you didn't have to do each one individually. It's a massive pain how it is now.

yes, but it looks like you can type in a file type (not extension), like "video", and select MSWINDOWSVIDEO (default for this file type is Movies & Tv):

Maybe if you set VLC here it would cover all the video file types? I didn't try it, I don't have VLS installed. /needinfo

@stefansjfw thanks for the reply - sorry been away for a few days.
I tried this out as it looked promising but unfortunately it doesn't seem to help. After you click on the 'external' icon you get a pop-up which only seems to offer Movies & TV (even though VLC is installed) and doesn't let you pick an application on your PC, only open Windows Store and even there it only offers you one option (the existing one!)
Entering video and picking MSWINDOWSVIDEO:

If you click through to the Store:

Second this. It is extremely annoying not to have an ability of "batch" file type association, like: all image types or all video types in Windows 11, unlike in Windows 10. Won't it be implemented?

 The original dialogue within control panel let you bulk select ALL extensions and then press okay - not do every extension one by one like how it is now.

second this,
like i want to have something like the install dialogue of 7zip but where you can say use program XYZ assign to .jpg .png. .gif .webm .tiff .apng in one big swoop

I want this feature but it's not happening. Microsoft don't want you customize the OS by your needs, they want you to subdue to their needs and surrender.

I want this feature but Microsoft don't want you customize the OS by your needs, they want you to subdue to their needs and surrender.


Initial support for frr and ovn_bgp-agent at EDPM

This PR is adding the base support for deploying, configuring and running both FRR and OVN BGP Agent in the compute nodes

recheck

recheck

recheck


Store BQM biases in a single data structure

We now used views for bqm.linear, bqm.adjacency, bqm.quadratic. This way we can keep all the biases in a single bqm._adj dict-of-dicts.
We also added functionality for keeping bias and interaction data see #186 though this is not fully implemented yet.
This supersedes some of the functionality in #312  which will need to be rebased.

This is now a backwards compatibility break as we have removed the OrderedBQM object.

Codecov Report

Merging #323 into master will decrease coverage by 0.92%.
The diff coverage is 88.1%.

@@            Coverage Diff             @@
##           master     #323      +/-   ##
==========================================
- Coverage   92.78%   91.85%   -0.93%
==========================================
  Files          40       40
  Lines        2244     2344     +100
==========================================
+ Hits         2082     2153      +71
- Misses        162      191      +29

Impacted Files
Coverage Δ

dimod/binary_quadratic_model.py
96.14% <100%> (-1.56%)
:arrow_down:

dimod/views.py
84.39% <84.05%> (-1.33%)
:arrow_down:

dimod/io/json.py
96.26% <0%> (+0.93%)
:arrow_up:

Continue to review full report at Codecov.

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

So, following up on our previous conversation, we could speed things up by storing the variables in _adj as upper triangular matrix, sorting on the hash. We then would keep only a single reference to each of the biases which would eliminate the need for the Bias class. This would speed things up, but we would lose the per-bias data field. I'll run some experiments before merging.

Right, upon further investigation, storing upper triangular means we can't in general do fast discover on interactions for bqm.adj


When switching graphs, timeframe should not change

Description
It would be useful, to keep the chosen timeframe when switching a graph. If I choose 6h timeframe, then switch the graph, I would expect to still see the 6h results, but I only get 1h again.

Reasons
It's confusing that the user has to change the timeframe each time when they switch the graph. This option should be shared between all graphs.

Attachments

We will keep this behaviour for now


52 syllable verse not identified

I am working with this verse:
"विकौतुका विगतविकल्पविप्लवाः\nयथा स्थिता हरिहरपद्मजादयः|\nनरोत्तमा समधिगतात्मदीपका:\nतथा स्थिता जगति विशुद्धबुद्धयः||"
Yoga Vasistha II.12.19
which has the following 13x4 syllabic pattern (calculated by chandas module)
['LGLGLLLLLGLGG', 'LGGGLLLLLGGLG', 'LGGGLLLLGGGLG', 'LGGGLLLLLGLGG']
Chandas is unable to identify the meter. I thought this might be jagati due to the word occurring in the verse, but jagati has a 12x4 pattern. Apparently the Atijagati is a meter with 52 syllables, but the patterns for these meters or for the above verse are not in the metrical_data/jsons. Any insights appreciated.

Looks like project is dead, closing issue.


Added option to settings to custom set a column width for Git Blame 🙉

thanks @wouterds for the PR. this looks good. However the gutter view used to be resizable and it seems thats been broken for some time. See discussions in #64 and dupes of it mentioned there. Would you be able to investigate this? could use the help attacking these issues and making git-blame better!

going to merge this in and update to resolve #64. will work on the draggable width independently.

Cool, thanks!
Didn't saw the previous issue with the resizable gutter. Maybe I'll look into it when I have some time :+1:.

@wouterds Would you consider making the default slightly larger? I've been using 350 which allows you to see the full date and last name (most of the time).


IA-503 refetch form onConfirm

Changes

refetch form onConfirm so the isFormModified control variable compares up to date data

Tests pass locally

didn't know of refetch. It's probably better to use invalidate query if we reuse this query elsewhere? But this works so not really blocking for me at this point Note that you can also update the result directly from what you receive from the server if you don't want to make another request: https://react-query.tanstack.com/guides/updates-from-mutation-responses

didn't know of refetch. It's probably better to use invalidate query if we reuse this query elsewhere? But this works so not really blocking for me at this point Note that you can also update the result directly from what you receive from the server if you don't want to make another request: https://react-query.tanstack.com/guides/updates-from-mutation-responses

Nice one with the mutation response. I updated the code to use that i.o refetch


Optimize persistence of writes to be performed asynchronously

Right now, the client has to wait on each write to be sent to persistence from the participant.

There are two approaches, one is keep track of written key-ranges at client, another is at TRH.

resolved with https://github.com/futurewei-cloud/chogori-platform/pull/176

This optimization is not resolved with current tr/twim implementation, as in current implementation, the server only respond client after a write is persisted, there is no respond early for receiving the write(and put in indexor) and allow next operations for the transaction, while get respond again on the persistence later to get ready for commit.


New process to update version in DeployerApplication

https://github.com/spring-cloud/spring-cloud-cli/blob/d88b39625128db8c853b0dbbbdfcfe584a8a4d43/spring-cloud-launcher/spring-cloud-launcher-deployer/src/main/java/org/springframework/cloud/launcher/deployer/DeployerApplication.java#L45
Change from a constant to resource load from classpath.
Investigate maven plugin substitute version in the resource.

Also an issue in SpringCloudBomAstTransformation


Warning 9 in ocaml code eventually produced by Cstubs_structs.write_c

It seems that the ocaml code produced by the C code itself produced by Cstubs_structs.write_c can trigger warning 9.
For instance:
File "ffi/generated_types.ml", line 7, characters 12-34:
Error (warning 9): the following labels are not bound in this record pattern:
spec, fields
Either bind these labels explicitly or add '; _' to the pattern.

where the corresponding code in ffi/generated_types.ml is:
[...]

let rec field : type t a. t typ -> string -> a typ -> (a, t) field =
  fun s fname ftype -> match s, fname with
  | Struct ({ tag = "wlr_backend"} as s'), "events.new_output" ->
    let f = {ftype; fname; foffset = 40} in
    (s'.fields <- BoxedField f :: s'.fields; f)
 [...]

Thanks!


Shorten meta description to under 160 chars for SEO

Too long. 187 chars: 'Veteran-founded and led, Operation Code is a national 501(c)(3) non-profit organization on a mission to support military, veterans and military families coding and learn web technologies.'

I got this, give me a few mins for a pull.

Could you mind telling me where this is? I can't seem to find where.

sorry, @braxtonfair, I didn't refresh to see your desire to take this one.

@benhastings It's no problem.

Resolved by #543


fix: error opening file when window.width is not lua number

fixes #789. One comment is that if the width is invalid, normally neo-tree still works and doesn't throw an error. However, since I added this fix, errors only appear if you happen to open a file when there's no other windows (which only happens rarely). This is a bit inconsistent and might confuse users, should we bother at all?

errors only appear if you happen to open a file when there's no other windows (which only happens rarely). This is a bit inconsistent and might confuse users, should we bother at all?

I would say that in this context, we should just set width to the default value of 40 and not throw any errors. If we are going to validate the value, it should really be done in the setup method.

I updated the commit so it matches nui's size handling more and sets the default value of 40. There's still things that don't quite match, such as if the width is very small and if the width is invalid. Because of this, I'm thinking maybe instead of doing a vsplit, we could just switch the current window to the file, then toggle the tree. Then, we don't have to try to match the width handling to nui.

we could just switch the current window to the file, then toggle the tree. Then, we don't have to try to match the width handling to nui.

That won't work. A lot of people get really finicky about seeing the window open and close. There's also the issue of the built-in window stealing prevention and having to keep the cursor and scroll in the same positions.
I think what you have here is good.


ngPluralize is not working when you use HTML entities

When I use ngPluralize for french text I getting parse error:
    <ng-pluralize count="personCount"
                 when="{'0': 'Sélectionnez des articles pour plus d'options',
                          'one': '1 person is 'viewing.',
                        'other': '{} people are viewing.'}">

This bug is connected with #13269 however may be there could be more simpler fix?
Plunker to reproduce: http://plnkr.co/edit/WfubVRInfBqJiUX7u8zp?p=preview

even when this is not idea, there is no way for Angular to know when the original text had a ' or a ' as this transformation is done by the browser. There are two ways to solve this issue:
Use \' instead of ' as in
<ng-pluralize count="personCount"
  when="{'0': 'Sélectionnez des articles pour plus d\'options',
    'one': '1 person is \'viewing.',
    'other': '{} people are viewing.'}"
>

Use the expanded version
<ng-pluralize count="personCount"
  when-0="Sélectionnez des articles pour plus d'options"
  when-one="1 person is 'viewing."
  when-other="{} people are viewing."
>

Other than this and given that there is no way to actually do what it is requested, then this is not actionable and can be closed


it does not handle http.StatusTooManyRequests properly

Provisioning failed due to the rate limit:
Error: error creating cluster: Error "000001": Too Many Requests (http status 200, url "https://app-api-dkropachev.ext.lab.scylla.cloud/account/100000/cluster")

tf file:
resource "scylladbcloud_cluster" "aws" {
  name       = "AWS-statuspage-test"
  cloud      = "AWS"
  region     = "us-east-1"
  node_count = 3
  node_type  = "t3.micro"
  cidr_block = "<IP_ADDRESS>/24"
  enable_dns = true
}

resource "scylladbcloud_cluster" "gcp" {
  name       = "GCP-statuspage-test"
  cloud      = "GCP"
  region     = "us-east1"
  node_count = 3
  node_type  = "n2-highmem-2"
  cidr_block = "<IP_ADDRESS>/24"
  enable_dns = true
}

output "cluster_id_aws" {
  value = scylladbcloud_cluster.aws.id
}

output "cluster_id_gcp" {
  value = scylladbcloud_cluster.gcp.id
}

terraform {
  required_providers {
    scylladbcloud = {
      source = "registry.terraform.io/scylladb/scylladbcloud"
    }
  }
}

variable "token" {
  type = string
}

variable "api_endpoint" {
  type = string
  default = "https://cloud.scylladb.com/api"
}

provider "scylladbcloud" {
  token = var.token
  endpoint = var.api_endpoint
}

How to run:
TF_VAR_api_endpoint="https://x.x.x.x.com" TF_VAR_token="x-x-x-x-x" terraform apply -auto-approve

Prior PR #90 did not fix the issue.
It was designed on assumption that nodejs server returns same error codes are siren-api, which it does not do, it always return 200.

@dkropachev Can we close this one?

Closing for now, if there is anything more, please create new one.


StompMessage->compile()

please pay attention
https://github.com/NaikSoftware/StompProtocolAndroid/issues/77

Yes, I saw your update on that issue; it hasn't even been 20 minutes since you posted it. If you want me to remove the double-newline, then that is something that would be relevant to this repo; otherwise, this issue isn't very useful here...

Okay well I fixed your problem anyway, check out the latest release. 😄 🎉

@Aslan125 Can I get confirmation that your problem is solved? I don't know what your specific configuration is, so I can't really test it myself. If it's not solved, then this needs more discussion.

Closing due to no response


Using CustomAmiId when calling run_job_flow incorrectly throws ValidationException for all EMR versions between 5.10.0 & 5.31.0

Right now the check in run_job_flow to see if a CustomAmiId is valid is done with default python string comparison instead of in a manner which would respect semantic versioning.
So "emr-5.7.0" is always considered greater than any value between "5.1..."(like 5.10.0) & "5.6..."(like 5.60.0) which is incorrect behavior
Reproducible like such:
import boto3
from moto import mock_emr

run_job_flow_args = dict(
    Instances={
        "InstanceCount": 3,
        "KeepJobFlowAliveWhenNoSteps": True,
        "MasterInstanceType": "c3.medium",
        "Placement": {"AvailabilityZone": "us-east-1a"},
        "SlaveInstanceType": "c3.xlarge",
    },
    JobFlowRole="EMR_EC2_DefaultRole",
    LogUri="s3://mybucket/log",
    Name="cluster",
    ServiceRole="EMR_DefaultRole",
    VisibleToAllUsers=True,
    ReleaseLabel="emr-5.31.0", # Semantically greater than 5.7.0 and EMR actually supports CustomAmiId
    CustomAmiId="ami-1234567"
)

@mock_emr
def reproduce_issue():
    client = boto3.client("emr", region_name="us-east-1")
    client.run_job_flow(**run_job_flow_args)

Thanks for raising this @PanJoseph! Marking it as a bug

This is now fixed as of moto >= 1.3.16.dev138


add missing fi

fixes the build scripts

Introduced by https://github.com/AdoptOpenJDK/openjdk-build/pull/1615


fix: prefix order

'position: sticky' should be listed after 'position: -webkit-sticky'

Can you update the snapshot? Thanks

My apologies for this messy pull request. I made the change through GitHub's UI, and with my brain on autopilot opened a pull request before testing the changes locally. It should all be fine now. I didn't expect such a minor change like this one to cause so many notifications and trouble 😅

It seems that the test fails because it merged my updated snapshot with the old one, instead of only using the new one? If I check my latest commit I do not see any lines being added without the old ones being removed. Is there something I need to do better or should I open a new pull request?

Codecov Report

Merging #565 (86fc0f1) into main (0d7e121) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main     #565   +/-   ##
=======================================
  Coverage   88.08%   88.08%
=======================================
  Files          56       56
  Lines        4810     4810
  Branches     1034     1034
=======================================
  Hits         4237     4237
  Misses        310      310
  Partials      263      263

Impacted Files
Coverage Δ

src/lib/utilities/static.ts
100.00% <ø> (ø)

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 0d7e121...86fc0f1. Read the comment docs.


Update runtime to new spec/ impl

Summary of changes
Changes introduced in this pull request:

Update runtime interface

Has changed a lot since I touched last lol. Hard to guess the exact usage or when the runtime will need to be mutable, and I will think a bit more into the exact usage but this will probably just act as a template to be updated when needed

The actors spec/ shared module is A LOT better than the spec was before, and although it might be painful to switch over now, the work can be very contained and easily worked on in parallel with coordination
Please give opinions on the API, I will think through more but this was just a quick pass so we can have something to quickly work off of
Reference issue to close (if applicable)

Closes #180
Other information and links

LGTM! Looks like you missed some of the methods in the runtime though such as ValidateImmediateCallerAcceptAnyOfTypes

LGTM! Looks like you missed some of the methods in the runtime though such as ValidateImmediateCallerAcceptAnyOfTypes

Chatted in person but to answer I am basing off of the specs-actors, which this doesn't exist anymore


matrix input file for heatmap

it follows the matrix text file format needed for R
I didn't put in in a modules/ folder but feel free to organise more adequately.

Thanks for this - see my other comment; is this a standard output from a tool?


Documentation for file argument of the callback function

Hello!
Thank you for this great module!
However, what is the file argument of the callback function passed to named()? It's not mentioned in the docs and there is no examples of how to use it.
Could you please extend the docs a bit? Thanks!

Well, I now see that this is the Vinyl File.
However, it's always interesting to learn how things work (especially Gulp ecosystem and it's vinyl things), but for new users it would really be cool to add some more docs pointing to the correct API description (also probably because JS in untyped).


Improve the handling of meeting participants in the schedule module

The to field is currently just presumed to be a list of emails in order for the user to just enter names we have to be able to extract the correct email for each specified meeting participant (if it is not an email).
In the beginning this can just be implemented by using fuzzy to determine the correct email corresponding to the name.

Me and @Blinningjr is currently implementing this


Rate limiting issues with users_list call

We're seeing issues starting up services due to rate limiting by slack on the users listing calls.
The current retry behaviour is fairly aggressive and retries 10 times with an initial delay of 0.2 seconds.
Slack send a Retry-After header when rate-limiting and suggest their rate limiting is minutely, but that header is not accessible using the api_call method on the slackclient library (at least in v1, I haven't checked v2).
Ideally this would respect that header and retry after a minute or so.
Logs
On startup:
2020-11-19T13:38:46 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 0.20s (attempt 1 of 10)
2020-11-19T13:38:46 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 0.20s (attempt 1 of 10)
2020-11-19T13:38:46 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 0.40s (attempt 2 of 10)
2020-11-19T13:38:46 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 0.40s (attempt 2 of 10)
2020-11-19T13:38:47 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 0.60s (attempt 3 of 10)
2020-11-19T13:38:47 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 0.60s (attempt 3 of 10)
2020-11-19T13:38:48 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 0.80s (attempt 4 of 10)
2020-11-19T13:38:48 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 0.80s (attempt 4 of 10)
2020-11-19T13:38:49 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 1.00s (attempt 5 of 10)
2020-11-19T13:38:50 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 1.00s (attempt 5 of 10)
2020-11-19T13:38:50 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 1.20s (attempt 6 of 10)
2020-11-19T13:38:51 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 1.20s (attempt 6 of 10)
2020-11-19T13:38:51 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 1.40s (attempt 7 of 10)
2020-11-19T13:38:52 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 1.40s (attempt 7 of 10)
2020-11-19T13:38:53 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 1.60s (attempt 8 of 10)
2020-11-19T13:38:55 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 1.80s (attempt 9 of 10)
2020-11-19T13:38:57 - default/backend/050d686b89ce41e98c5aeac3e42fea29 - WARNING:root:Retrying request to users.list after error ratelimited. Backing off 2.00s (attempt 10 of 10)

During this time it seems the server is not available, which with large backoffs also result in our healthcheck killing the starting service after some timeout.

On further investigation, it seems this is only on startup, prior to the server starting, due to INCIDENT_BOT_ID not being set. We've now set this and it has helped alleviate this issue as it avoids that initial lookup.


webpack is required for rspack builder

Environment
- Operating System: Windows_NT
- Node Version:     v22.7.0
- Nuxt Version:     3.14.0
- CLI Version:      3.15.0
- Nitro Version:    2.10.3
- Package Manager<EMAIL_ADDRESS>- Builder:          rspack
- User Config:      default
- Runtime Modules:  -
- Build Modules:    -

Reproduction
A minimal Nuxt app is enough.
package.json:
{
    "devDependencies": {
        "@nuxt/rspack-builder": "^3.12.2",
        "nuxt": "^3.14.0"
    },
    "scripts": {
        "build": "nuxt build"
    },
    "packageManager"<EMAIL_ADDRESS>}

nuxt.config.ts:
export default defineNuxtConfig({
    builder: 'rspack'
})

app.vue:
<template>
    <NuxtLayout>
        <NuxtPage />
    </NuxtLayout>
</template>

pages/index.vue:
<template>
    <div>
        Hello!
    </div>
</template>

Note that I dont have webpack installed on my machine.
Describe the bug
When running nuxt build, the process throws error, say that it cant import webpack in webpackbar's file.
I have tried patching the import to @rspack/core but no luck.
Additional context
N/A.
Logs
Nuxt Build Error: Cannot find package 'webpack' imported from D:\[...]\node_modules\webpackbar\dist\index.mjs

  at packageResolve (node:internal/modules/esm/resolve:839:9)
  at moduleResolve (node:internal/modules/esm/resolve:908:18)
  at defaultResolve (node:internal/modules/esm/resolve:1038:11)
  at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:554:12)
  at ModuleLoader.resolve (node:internal/modules/esm/loader:523:25)
  at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:246:38)
  at ModuleJob._link (node:internal/modules/esm/module_job:126:49)

for now, you'll need to install webpack as well (it's a peer dep of that library) and we'll look to resolve it upstream

webpack is needed for webpackbar as it extends webpack.ProgressPlugin. If rspack has similar one we can make it optional dep.

If rspack has similar one we can make it optional dep.

Yes, it's built-in.

Awesome! (do you mind to open an upstream issue? 🙏🏼 )

Basic support is available in v7

Basic support is available in v7

Any chance you forgot to remove the plugin.ts file? From what I can see, that file doesn't have any use anymore.


Link to Body Tracking SDK was wrong (was pointing to the Sensor SDK)

@timhutton : Thanks for your contribution! The author(s) have been notified to review your proposed change.


Request: If possible, allow External Storage to fill the storage it's attached to using that block's whitelist.

I've just tried to use an External Storage on a Storage Drawers 'Drawer Controller' and it worked well enough by depositing blocks put into the Grid into the Drawers before the disks as well as pulling from the drawers first when pulling out of the Grid.
The behavior I'd like to see though is the External Storage filling the storage from the disks as much as possible to keep that external storage full.
For example, I have a room full of storage drawers from the Storage Drawers mod and I link them all with the Drawer Controller. I would like the Refined Storage system to fill those drawers using the External Storage attached to the Drawer Controller. Keep the pulling from storage function, but place any system blocks into the storage bin/chest/drawer to fill it as much as possible.
In the end I'm looking for a Storage Drawers room to be stocked with the excess blocks stored in the Refined Storage system without having to link an Exporter to each drawer with that block whitelisted inside each Exporter. When I pull items from the drawers, I'd like to keep them stocked using the Drawer Controller pulling from the External Storage.

Remove all your disks and use the disk manipulator to fill the external connection as much as possible.

You would have to cycle through each disk at least once every time I pull an item from the external storage making any other item on those disks unavailable to the network. Not to mention how tedious it would be manually placing each disk into a manipulator, at most, 3 at a time. Even with a stack upgrade and 3 speed upgrades this takes a long time. That is not a viable solution to the idea I was asking for, but thanks for the response.

It does not take that long of time, I transfered biggest store from Reborn Storage just fine. Sure it takes some time. And I believe that you can pipe in/out the storage discs, not sure on that one tho.


🐛 | I2C & Shutdown collision

Bug
I have connected a PN532 to GPIO 2 & 3 via I2C.
If I connect GPIO 3 to the shutdown button and activate it in gpio_settings.ini, the RFID reader no longer works.
Can someone help?
What I did
I edited the gpio_settings.ini
What happened
RFID Reader does not work anymore
Software
Base image and version
2.1.1 - 70f989b - master
on  buster
Branch / Release
master
Installscript
scripts/installscripts/buster-install-default.sh
Hardware
RaspberryPi version
3 B+
RFID Reader
PN532
Other notable hardware
/home/pi/.config/phoniebox/gpio_settings.ini

Do I understand correctly that the reader and the shutdown button both use GPIO 3?
That won’t work.
But you can use the shutdown button on an available GPIO pin, check here for free pins: https://github.com/MiczFlor/RPi-Jukebox-RFID/wiki/Using-GPIO-hardware-buttons#pin-numbering-on-the-rpi
Then you need to update gpio_settings.ini and restart the service sudo systemctl restart phoniebox-gpio-control
See here also for used pin configurations (but you can change them):
https://github.com/MiczFlor/RPi-Jukebox-RFID/wiki/Hardware-Pinout-Overview

Thats correct because I read here: https://github.com/MiczFlor/RPi-Jukebox-RFID/wiki/Hardware-Pinout-Overview
:fixed GPIO if wake up is required can be used in conjunction with I2C devices
Because if I use another PIN for Shutdown I can´t wake the RPi up

Hi again,
here is my Solution:
https://imgur.com/oFYLv1n
https://imgur.com/iVSS4io
Shutdown-Pin is GPIO13


fix: unable to connect ledger nano S on Ubuntu

Description

closes: #1039

The latest version for github.com/cosmos/ledger-cosmos-go is v0.13.0. The latest version breaks some interfaces so I bump up with v0.12.2(the second latest one) which is enough to fix the issue.

Motivation and context

#1039

How has this been tested?

I tested with a nano S plus ledger on both Ubuntu 20.04 and Mac

Screenshots (if appropriate):
Checklist:

[x] I followed the contributing guidelines and code of conduct.
[x] I have added a relevant changelog to CHANGELOG.md
[ ] I have added tests to cover my changes.
[ ] I have updated the documentation accordingly.
[ ] I have updated API documentation client/docs/swagger-ui/swagger.yaml

os-go v0.13.0

From v0.13.0, interface SECP256K1's SignSECP256K1 function has changed.
v0.13.0 introduces feat!: Add SIGN_MODE_TEXTUAL
In order to use v0.13.0, some of code that use SignSECP256K1(), must be changed for compile.
SECP256K1 interface {
		SignSECP256K1([]uint32, []byte) ([]byte, error) // v0.12.2
		SignSECP256K1([]uint32, []byte, byte) ([]byte, error) // v0.13.0
}

Do you think It is better to change the code to adapt v0.13.0 from PR #1027

@zemyblue, Do you think It is better to change the code to adapt v0.13.0 from PR #1027.

Yes, but I think we cannot use v0.13.0 in this case.
I want to know why v0.13.0 can't.


chmod +- doesn't honor umask

+-=<symbolic> should check umask if ugoa is not present.
Is there any library function that returns this information? From a quick glance the only way is to call libc::umask()

Currently, I think libc::umask() is the only way.


Query Cost Estimation

This is the initial draft for cost estimation for queries. Ideally this should be in the optimizer module but for the time being i have added the changes to the executor module, For example when you use the explain command now the command along with returning the query plan will also return the estimated number of rows which are accessed.
HLL Diagram


WIP: Provided NuGet package information.

Fixes #14855
Internal Review
Added a short new section for adding the latest Microsoft.AspNetCore.Authentication.Google NuGet package.

Closing this PR.  Will create a new PR since a few other documents are involved and to avoid this getting messy.


possible to exclude conmem?

For parallel execution on slurm, bcbio uses -r conmem=4 by default, even when the option is not specified in bcbio_nextgen.py command. The auto-generated controller job script (SLURM_controllerABunchOfNumbers) has a parameter like #SBATCH --mem=4000.
For some reason, the cluster we are using doesn't like --mem, and the scheduler will not accept jobs with that parameter. Is it possible to exclude conmem, so the job script won't have the --mem parameter? @roryk
Thanks,
-liang

Hi Liang,
Thanks, sorry for the problem. That is a weird policy.
We have that set because by default lots of folks have their scheduler to have an unreasonably low default memory set. Unfortunately, --mem will be necessary for most of the jobs that bcbio spawns, so fixing it just for the controller won't help much since all of the engine jobs won't work as well. It would be a good idea to talk to the admins and ask why --mem is disabled; that is a pretty important parameters to be setting for running jobs, otherwise we can't control the amount of memory used. Let me know what they say, I'm curious to hear the reason why. We might be able to work around it if there is a parameter that is similar to what --mem does that they do allow.

Thanks Rory.
I manually edited cluster_helper/cluster.py, so the resulting controller and engine jobs have disabled parameter ( commented out #SBATCH --mem=).
Unfortunately, after this worked around, we faced another issue. The cluster only allows job submission from login nodes... Since we are submitting the bcbio_nextgen.py task as a job, it will run on a compute node, and the controller job submission will fail.
Do you know if there is a workaround for such restriction?
-Liang

Hi Liang,
The main bcbio job does not do very much processing, so you theoretically could run it on the login node and it will submit all of the jobs from the login node, but that isn't a super good solution since you're doing something you're not supposed to be doing from the login node.
You could try that and see if it works, but I'm guessing that you are going to run into other problems because --mem isn't respected.

Roryk,
Just tried starting bcbio on login node. And realized the cluster had disabled array jobs... (talking about stampede2 in TACC). They provide an alternative, but not something standard. Not sure if it's easy/worth to include in cluster_helper.
I might have to run bcbio in local mode, on one compute node, to handle small dataset.
Thanks for the discussion. Feel free to close this issue.

Hi Liang,
Sorry that bcbio doesn't cover this case-- cluster_helper covers a lot of different setups but supporting this one would be hard. On the upside, it looks like stampede2 has some pretty nice machines with a good amount of cores on them so hopefully a local run will get your work done in a reasonable amount of time. Thanks for following up!


ShowBreadcrumb does not output trace in release build / nuget install

We would like to use ShowBreadcrumb to diagnose some performance problems probably caused by excessively deep recursion into our objects (we have previously used it successfully like this).
However, there's a minor stumbling-block: BaseComparer.AddBreadCrumb contains the following code:
        if (config.ShowBreadcrumb)
                Debug.WriteLine(sb.ToString());

The problem is that a release build (and hence the Nuget package) compiles Debug.WriteLine away to nothing, so this doesn't work unless you pull the source and build your own Debug build (which is what we did last time we needed this feature).
Is there another way to use ShowBreadcrumb in a release/nuget install, or should this line actually say Trace.WriteLine(sb.ToString) so that the call stays active in the release build?
If this is a bug, would you like a (trivial) PR?

Will,
I am very busy but I will definitely change this in the next release.   I mainly use the ShowBreadCrumb myself for debugging large object graphs when there are comparison problems.
Thanks,
Greg

Thanks Greg - unfortunately because the library is a PCL, you can't merely use Trace.WriteLine, which makes it slightly more of a pain to sort out than it would otherwise be.

Done.  Nuget package 4.01 is available now

Thanks very much for looking at this, but it doesn't actually seem to work in the new Nuget release.
The source changes look fine, but don't seem to have made it through to the binaries - there's no additional output and the decompiled code doesn't have the Trace call:
    protected string AddBreadCrumb(ComparisonConfig config, string existing, string name, string extra, string index)
    {
      if (config == null)
        throw new ArgumentNullException(nameof (config));
      bool flag1 = !string.IsNullOrEmpty(index);
      if (name == null)
        throw new ArgumentNullException(nameof (name));
      bool flag2 = name.Length > 0;
      StringBuilder stringBuilder = new StringBuilder();
      stringBuilder.Append(existing);
      if (flag2)
      {
        stringBuilder.AppendFormat(".");
        stringBuilder.Append(name);
      }
      stringBuilder.Append(extra);
      if (flag1)
      {
        int result = -1;
        stringBuilder.AppendFormat(int.TryParse(index, out result) ? "[{0}]" : "[\"{0}\"]", (object) index);
      }
      int num = config.ShowBreadcrumb ? 1 : 0;
      return stringBuilder.ToString();
    }

I am wondering if there was a build problem - the assembly version is still 3.9 and might have been built as a debug version:

I will look at in a few days.  The semi-automatic build process that I have for for Compare .NET Objects is not as advanced as my other libraries.  There could be a problem.

Rebuilt.  Try it now.

Thanks Greg - unfortunately it still doesn't work, on a .NET 4.6 project.
If I build the source myself in VS (release build), then I get a Trace.WriteLine() in the right place in BaseComparer.   But in the Nuget version (which is dated 21 Dec, so it's definitely the latest) I don't.
Sorry not to have better news :-(

@willdean Honestly I have no idea why.

Nor do I and I spent some time messing around in VS to see if I could see why, but I don't really know how you build it all - do you run msbuild by hand from the command line?

@GregFinzer I will help with this, but I need to understand how you build the nuget package.  It doesn't seem that everything you use to do that is in Github (e.g. no nuspec), and I can't repro the problem if I just build the DLL in VS.

@willdean Thanks.  Can you tell if the output is maybe a debug build instead of a release build?  I will look at my build tool over the weekend.  It is a custom application that uses MSBuild on the console.  I will get you the parameters that it is using.

Will,
I looked at the code for the build tool and also looked at the log, and it is doing a release build for each version of the .NET Framework:  Example:
Shell C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe Compare-NET-Objects.csproj /t:Rebuild /p:Configuration=Release;TargetFrameworkVersion=v4.5.2 /p:DefineConstants="NET40;NET45;NET452"
Attached is the full log.
CompareNetObjects4_4BuildLog.txt

@GregFinzer Sorry for the terribly long delay on this - it became an issue for me again tonight, so I took another look and have finally got to the bottom of it - though I can't give you a PR because the problem appears to be in the build script which is not in the repo.
The issue is that the /p:DefineConstants="NET40;NET45;NET452" option on the command line replaces the constants  defined in the csproj file.  This loses, crucially, the TRACE constant - without which the Trace.WriteLine in AddBreadCrumb is removed at compile time.  It's hard to spot this, because if you look in the project settings in VS (or in the csproj file), the TRACE constant is set - it's only when msbuild is invoked with that command-line option that it gets removed.
So if you can change your build script to say /p:DefineConstants="NET40;NET45;NET452;TRACE" (and the equivalent for all the other platforms I guess) then we should be laughing.
Thanks,
Will

@willdean Good information!  Thanks so much. It will be a while until I can take a look at this.

Fixed:
https://github.com/GregFinzer/Compare-Net-Objects/releases/tag/4.54.0
https://www.nuget.org/packages/CompareNETObjects/4.54.0


Icons are randomized

When i trie to generate my Icons there are random and the names are sometimes not correct.
I generate my Icons via fantasticon --debug -o font --normalize --prefix mytriox --selector .mytriox-icon --name mytriox-icon img/icon/
Normally:
icon1.svg = ... icon1
But now:
icon1.svg = ... icon2

Same issue here. When adding a new svg, the ordering of the old unicodes changes.

Not sure if it is the problem, but maybe using codepoints parameter which is previously generated file helps.
.fantasticonrc.js file:
module.exports = {
inputDir: './assets/resources/img/icons',
outputDir: './public/icons',
fontTypes: ['woff', 'woff2'],
assetTypes: ['ts', 'css', 'json', 'html'],
normalize: true,
descent: 45,
codepoints: require('./public/icons/icons.json'), // Fix icon unicodes when adding new (for pseudo elements)
};


Commit 46d6de3 breaks CSS

@Aceeri After switching out ./ for / in commit 46d6de3, the CSS on the website broke completely. Looks like it's trying to pull the CSS from amethyst.github.io/css/main.css, which should be amethyst.github.io/website/css/main.css.
See this screencast for further explanation.

There is a bigger issue. If we move the post.tpl to having ./ instead of / then the blog css will not work. ./ in web related stuff is not good.

Hmm, so I'm guessing we can't make the URLs relative to /website/ then? This might break local viewing through http-server I would think.

Yeah. Maybe we can create a script to redirect to amethyst.rs when you go to amethyst.github.io/website.

Looks like fixing the DNS records on CloudFlare (issue #12) resolves this issue.


Output is reset when changing system output audio setting

This issue is also present in the original code. Have you some idea to fix this?
Steps:
Choose any output device in the app and start play through.
In system settings, change the default output.
Result:
App output is somehow modified and this error is reported:
2020-09-24 09:41:43.291301+0200 CAPlayThroughSwift[2042:41314]  got an error from the plug-in routine, Error:<PHONE_NUMBER> (stop)
CAPlayThrough-swift/CAPlayThroughSwift/CAPlayThrough.swift:75ù
Thanks :)

Fixed by using kAudioUnitSubType_HALOutput instead of kAudioUnitSubType_DefaultOutput
outDesc.componentSubType = kAudioUnitSubType_HALOutput; //kAudioUnitSubType_DefaultOutput


Inline completion brace completion API callback

The brace completion API for inline completions is called after a prediction is returned from the inlineCompletionProvider. As the provider, we don't have information as to what changes were made with the prediction post brace completion. This negatively impacts our telemetry accuracy. We analyze our telemetry to show better and more useful predictions to the user.  Below are some examples:

When we send a completion such as }, we have telemetry collected as a completion was shown to the user. But actually, this prediction is not shown to the user because brace completion filters it out since it's an unbalanced brace.
We monitor number of characters in completion vs accept rate (number of completions accepted / number of completions shown). When brace completion makes changes to a prediction returned by us, we don't have accurate measurements on how many characters were actually shown.

A callback with what completion was shown to user post brace completion would be incredibly helpful for our telemetry accuracy. Alternatively, the ability to call brace completion within the inlineCompletionProvider would also work.
cc @hediet

@isidorn do you have some ideas here?

A callback with what completion was shown to user post brace completion would be incredibly helpful

This sounds very specific... We would only add this to the proposed API for this specific use-case.

Alternatively, the ability to call brace completion within the inlineCompletionProvider would also work.

This would cause many extension host <-> renderer roundtrips...

Another idea I have is to add an arg in HandleDidShowCompletion which will be set to the insertText after brace completion.

Thats a good idea!

Yes, I like that approach since it's the most subtle.
fyi @jrieken

Awesome, thank you! I found a bug in handleDidShowCompletion, it would be great if we can get it resolved along with this change, it will really augment the accuracy of our telemetry.

Verification steps:

Go to the monaco playground
Click "save"
Chose a recent version of the monaco editor (>dev.20230421)
Place the cursor after a line that contains // -------- in line 79, type and delete a single character
Verify that "Did show item" shows up in the log with the actual insert text when an inline completion item is shown
Verify that the actual insert text has balanced brackets.

The text shown in the inline completion in the editor matches the "actual" text shown in the console.


Bug: The enemy are only attacking the character I am controlling

The enemy is only attacking the character I am controlling and not the other character present.

this bug has been fixed


[Distributed inference] How to effectively perform it with torch and webdataset

Is there a guide discussing how to use webdataset with PyTorch to run distributed inference (single node multi GPU works)?

Did anybody manage to find some useful resources for this?

Hi @sayakpaul,  Did you find any solution to this?

Depends on the application. If you want to do bulk distributed inference, there are two simple approaches:
(1) write a simple shard-to-shard transformation and run that in parallel
(2) perform inference itself in parallel and write to a new set of shards
I usually do (1) because it's the easiest to parallelize and restart. That is, I write something like:
def shard_inference(source_shard, dest_shard):
    source = WebDataset(source_shard, ...)
    dest = TarWriter(dest_shard, ...)
    for sample in source:
        sample["result.json"] = ... inference ...
        dest.write(sample)
    dest.close()
    source.close()

def main():
	...

You can then run many copies of that shard-to-shard command line program in parallel.
For (2), you can use your favorite multiprocessing framework (I like to use Ray) and just parallelize the inference itself:
pool = ray.Pool(...)

@ray.distributed(cpu=4, gpu=1)
def inference_on_sample(sample):
    result = dict(sample, output=inference(sample))
    return result

def shard_inference(source_shard, dest_shard):
    source = WebDataset(source_shard, ...)
    dest = TarWriter(dest_shard, ...)
    for output in pool.map_unordered(inference_on_sample, source):
        dest.write(output)
    dest.close()
    source.close()

You can also use Ray or Python multiprocessing to parallelize the shard_inference function in approach (1).
Yet another approach is to use Ray's inference engine with Webdataset as the data source; or you can use any of the PyTorch inference frameworks and either use WebDataset or wids.ShardListDataset as input.

Thanks for your elaborate reply! Would it be possible to include a simple and end-to-end example in docs about this? I think this is good and practical use case.

@tmbdev  hi Tom, thanks for the answer! I have a similar question, under single node 8 GPU setup, how to run distributed inference and make sure every sample can be inferred? I have the following code, however I observe the output by each GPU are highly overlapping with each other: dataset = (             wds.WebDataset(                 tarurl,                 nodesplitter=wds.split_by_worker,                 shardshuffle=True,                 resampled=False,             )             .shuffle(1000)             .decode()             .to_tuple("metadata.json")             .map(xxx)             .to_tuple(xxx)             .map_tuple(xxx)             .batched(self.batch_size, partial=False)             .with_length(self.dataset_size)             .repeat(2) loader = (             wds.WebLoader(                 dataset,                 batch_size=None,                 shuffle=False,                 num_workers=8             )             .unbatched()             .shuffle(1000)             .batched(self.batch_size)             .with_epoch(max(self.dataset_size // (self.batch_size * 8), 1))         )
Thank you so much!


Add beginning of "Wall Pipe" Puzzle

There's the beginning of the wall pipe.

And the holes where to drop the objects.

We'll want to have a place somewhere far away where one player can see the wall, and then other players to actually put the items in the right place.

Finished the pipe decoration

Completed the puzzle options.

The letters that work are (from top left to bottom right): L, N, U, I.
The letters that are there as red herring are: T, K, O.

Visual explanation of the answer:

In order to make it powered by client side only, I edited the hole thingy model to be a checkpoint and have a spawn position in the middle. Hopefully we can script it in a way that if the item is dropped in the checkpoint trigger area, the item is attached to the spawn point of the block. This way people can have a clue that dropping the item there is potentially doing something.

There is no official way of detecting if a player is inside of a trigger. A trigger is just a set of surfaces and an event is raised when a player crosses any of the surfaces. Leaving the trigger does not raise annother event.
Additionally, landmarks only have a position, no information about size or shape. So the only way to detect if a player is inside of it, is to do some custom overlap detection. Simplest case: ML::Distance(Landmark.Position, Player.Position) < C_TriggerDistance.
Another workaround would be to have to trigger: The main trigger an another one that wraps around the main trigger and then keep track of which one was triggered last by the player in question. But this would need a lot of work in mapping and waypoint tracking, so also not that good of a solution.

@Ze-Rax: using a trigger distance from the spawn point would be indeed a good practical solution!


Empty outline on newly opened files

Steps to reproduce:

Open a pegjs file
See that the outline is empty:

Only after editing something it gets initialized:

Expected: show all symbols directly after opening
After debugging a bit I found out it was introduced in #33 because validateTextDocument always delays the AST parsing but in the meantime onDocumentSymbol gets called which can't find the cached AST

OK, I've found this.  Worked around it by ensuring we have waited for parsing to finish before replying to the request that the editor sends.
There's an outside chance that they way I solved it will leave the outline unchanged after you rename something, so if you happen to see that, re-open this.


Splitting classes in multiple cpp files produces undefined symbol error when calling from PHP

Hi
Apologies at the onset as I am not an experienced C++ developer, so I might be overlooking something very simple.
I am trying to compile a php extension with multiple cpp files. Each file contains one class, and every class has its definition in the header file (gt.h). The code below is the bare minimum I could strip down to for demonstrating the problem I am having.
Code compiles fine and it generates an .so file, but calling the extension class from php always produces "undefined symbol" error. The error remains the same when I have a class defined within a namespace.
First the environment:
OS: Debian 10.9
Compiler: g++ (Debian 8.3.0-6) 8.3.0
PHP: 7.3.27-1~deb10u1
PHP-CPP: 2.1.4

Makefile
NAME				=	gt

PHP_VER				= 	$(shell php-config --version | awk -F. '{print $$1 FS $$2}')
INI_DIR				=	/etc/php/${PHP_VER}/mods-available

EXTENSION_DIR		=	$(shell php-config --extension-dir)

EXTENSION 			=	${NAME}.so
INI 				=	${NAME}.ini

COMPILER			=	g++
LINKER				=	g++

COMPILER_FLAGS		=	-Wall -c -O2 -std=c++11 -fpic -o
LINKER_FLAGS		=	-shared
LINKER_DEPENDENCIES	=	-lphpcpp

RM					=	rm -f
CP					=	cp -f
MKDIR				=	mkdir -p

SOURCES				=	$(wildcard *.cpp)
OBJECTS				=	$(SOURCES:%.cpp=%.o)

#
#	From here the build instructions start
#	Added extra bits in the install target to set the symlinks required on debain systems
#

all:					${OBJECTS} ${EXTENSION}

${EXTENSION}:			${OBJECTS}
						${LINKER} ${LINKER_FLAGS} -o $@ ${OBJECTS} ${LINKER_DEPENDENCIES}

${OBJECTS}:
						${COMPILER} ${COMPILER_FLAGS} $@ ${@:%.o=%.cpp}

install:
						${CP} ${EXTENSION} ${EXTENSION_DIR}
						${CP} ${INI} ${INI_DIR}
						$(shell ln -s ${INI_DIR}/${INI} /etc/php/${PHP_VER}/cli/conf.d/30-${INI})
						$(shell ln -s ${INI_DIR}/${INI} /etc/php/${PHP_VER}/fpm/conf.d/30-${INI})

clean:
						${RM} ${EXTENSION} ${OBJECTS}

# custom target for removing all traces of extension installation
uninstall:
						${RM} ${EXTENSION_DIR}/${EXTENSION}
						${RM} ${INI_DIR}/${INI}
						${RM} /etc/php/${PHP_VER}/cli/conf.d/30-${INI}
						${RM} /etc/php/${PHP_VER}/fpm/conf.d/30-${INI}

main.cpp
#include <phpcpp.h>
#include <iostream>
#include "gt.h"

extern "C" {

    PHPCPP_EXPORT void *get_module()
    {
        // static(!) Php::Extension object that should stay in memory
        // for the entire duration of the process (that's why it's static)
        static Php::Extension gt("gt", "1.0");

        // add M2C class
        Php::Class<M2C> m2c("M2C");

        // register the parse_data method
        m2c.method<&M2C::parse_data> ("parse_data");

        // add the class to the extension
        gt.add(std::move(m2c));

        // return the extension
        return gt;
    }
}

gt.h
#include <phpcpp.h>
class M2C : public Php::Base
{
public:
    M2C();
    virtual ~M2C();
    Php::Value parse_data();
};

m2c.cpp
#include <phpcpp.h>
#include <iostream>

using namespace std;

class M2C : public Php::Base
{
public:

    M2C() = default;
    virtual ~M2C() = default;

    Php::Value parse_data()
    {
        Php::out << "example output" << std::endl;
        Php::out.flush();
        return 0;
    }
};

test.php
<?php
// Test php extention functionality.
$test = new M2C();
$test->parse_data();
?>

The strange part is if I put in all the class code in main.cpp file, the extension  generated produces no error when called from PHP.
If I do not use a class, then using separate files is also not a problem, which makes me think there is some configuration I am missing.
The error that I receive is:
php test.php
PHP Warning:  PHP Startup: Unable to load dynamic library 'gt.so' (tried: /usr/lib/php/20180731/gt.so (/usr/lib/php/20180731/gt.so: undefined symbol: _ZTV3M2C), /usr/lib/php/20180731/gt.so.so (/usr/lib/php/20180731/gt.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Fatal error:  Uncaught Error: Class 'M2C' not found in /root/gpe/test.php:3
Stack trace:
#0 {main}
  thrown in /root/gpe/test.php on line 3

I have already seen https://github.com/CopernicaMarketingSoftware/PHP-CPP/issues/354 and https://github.com/CopernicaMarketingSoftware/PHP-CPP/issues/463, but cannot still find a solution to my problem.
Full set of files is attached.
temp.zip

I have already seen https://github.com/CopernicaMarketingSoftware/PHP-CPP/issues/354 and https://github.com/CopernicaMarketingSoftware/PHP-CPP/issues/463, but cannot still find a solution to my problem.

I forgot to add the error while calling the extension from PHP:
PHP Warning:  PHP Startup: Unable to load dynamic library 'gt.so' (tried: /usr/lib/php/20180731/gt.so (/usr/lib/php/20180731/gt.so: undefined symbol: _ZTV3M2C), /usr/lib/php/20180731/gt.so.so (/usr/lib/php/20180731/gt.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Fatal error:  Uncaught Error: Class 'M2C' not found in /root/gpe/test.php:3
Stack trace:
#0 {main}
  thrown in /root/gpe/test.php on line 3

All the source files are attached
temp.zip

Your source make no sence. You declare the class 2x. Once in gt.h second in m2c.cpp
Try this in gt.h:
#include <phpcpp.h>
class M2C : public Php::Base
{
public:
    M2C() {};
    virtual ~M2C() {};
    Php::Value parse_data();
};

and this in m2c.cpp
#include <phpcpp.h>
#include <iostream>
#include "gt.h" //maybe you shoud rename gt.h to m2c.h(pp)

Php::Value M2C::parse_data()
{
        Php::out << "example output" << std::endl;
        Php::out.flush();

        return 0;
}


ChildWindow not showing up in designer

Liking the ease of controlling child windows... especially opening and closing them. But I'm not sure if I'm doing something wrong or what but the MetroWindow shows up just fine in the designer.
But any ChildWindow view I create just show up as a blank region in the designer which makes it hard to add content to the view.
Is there any way to get the child windows showing up so I can see what I'm doing?

Designer Support
Apparently if you set the IsOpen attribute on the child window to 'True'  then it shows up in the designer.
That seems pretty odd. Is that the way it's supposed to be?

and while the IsOpen="True" is set, the dialog doesn't show up from the normal ShowChildWindowAsync() until you turn it to False again.

as a hack... you can bind it to a property that is FALSE by default and then use a FallbackValue as TRUE like such
 IsOpen="{Binding IsOpenHack, FallbackValue=True}"
and then the dialog will show up in both the designer and at runtime.
However it's a hack. Surely this isn't the way it's supposed to work.

Hi @eiredrake,
I use normally a UserControl as content,  so I have a good designer view.
Happy coding
Tim

Do you mean putting a user control inside the content of the child window? Yeah I'm trying that now... without the IsOpen property there's nothing in the designer.

No I mean adding a new UserControl as a file and use that inside the childwondow.
please use gitter instead of issues for your questions. Join the chat: https://gitter.im/punker76/MahApps.Metro.SimpleChildWindow
thank you for your understanding.


Shell expansion and globbing made easier?

I frequently use the function sh_expand (listed below at the bottom) to allow shell environment variables, globbing, ~ expansion inside the sh module. With this function, the bash command
ls -l ~/.bash*  $SHELL $XAUTHORITY

can be repllicated with
sh.ls(sh_expand("-l", "~/.bash*", "$SHELL", "$XAUTHORITY")).

Is it possible to make it easier to use this without explicitly calling sh_expand each time? I was thinking of something on the lines of bake which would automatically apply sh_expand or even a global setting in the sh module that would apply it automatically every time.
My definition of sh_expand is as follows:
from glob import glob
from os.path import expandvars, expanduser

def sh_expand(*v):
    def expand_one_arg(s):
        s_expand = expandvars(expanduser(s))
        if "*" in s_expand:
            return glob(s_expand)
        else:
            return [s_expand]

    return [item for s in v for item in expand_one_arg(s)]

It's not a crazy request but I personally think it is not in line with sh's goals. sh executes programs and doesn't do fancy shell things like argument-splitting or glob expansions. We leave that to the user. It is inconvenient, but it keeps sh doing one thing and one thing well.


Python example is wrong

The Python example is wrong, the requests.post line is not well-formed and does not send the payload.

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

ID: f49fe54c-0b45-e457-6a53-d94306479036
Version Independent ID: 3c48e6c6-a387-6b8b-ed7b-af155324f82e
Content: Tutorial: send email with Logic Apps - Azure App Service
Content Source: articles/app-service/tutorial-send-email.md
Service: app-service
GitHub Login: @cephalin
Microsoft Alias: cephalin

@ericgarza70 Thank you for bringing this to our notice, our team will look into it and get back to you at the earliest.

@ericgarza70 Thanks for bringing this to our attention. Your feedback has been shared with the content owner for further review.

@cephalin Any inputs on what sample/snippet this example is reffering to?
Ref: https://stackoverflow.com/questions/65138110/sending-an-email-from-python-django-app-with-azure-logic-apps

Fixed by https://github.com/MicrosoftDocs/azure-docs/pull/73863. #please-close

@cephalin I'm afraid the doc is not fully fixed yet. The Route::post function hyperlink in this snippet still points to the php sample code. Could you please check?


Having option to specify the output file

Currently -o is being used to the set the programming language to which the file has to be converted to.
In the Release 0.1, -o is being used to specify the output file name.
I think it would be good to use another option to set the file conversion language.

Thank you for the suggestion, i have made the changes, and the PR #4 fixes this issue


Files not found on NuttX update

This looks like shell variable expansion going wrong. Are we missing the flag to enable this in NSH?
To repro, set SYS_AUTOSTART and reboot:
param set SYS_AUTOSTART 3033

Then this will be in the boot log:
[i] FIXED WING
mixer: file not found
mixer: can't load mixer: /etc/mixers/
mixer: failed to load mixer
[i] Error loading mixer: /etc/mixers/

Fixed


[Excel] (Custom Functions) Update custom functions tutorial

Addressing customer issue #2777.

Docs Build status updates of commit 0388f69:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs/tutorials/excel-tutorial-create-custom-functions.md
:white_check_mark:Succeeded
View

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 the docs.microsoft.com contributor guidesPost your question in the Docs support channel

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

File
Status
Preview URL
Details

docs/tutorials/excel-tutorial-create-custom-functions.md
:white_check_mark:Succeeded
View

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 the docs.microsoft.com contributor guidesPost your question in the Docs support channel

Docs Build status updates of commit 205c11b:
:x: Validation status: errors
Please follow instructions here which may help to resolve issue.

File
Status
Preview URL
Details

:x:Error

Details

[Error-PullRequestMergeConflict] Cannot sync git repo to specified state. Please make sure the pull request is mergeable.

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 the docs.microsoft.com contributor guidesPost your question in the Docs support channel

Docs Build status updates of commit 5702bf1:
:warning: Validation status: warnings

File
Status
Preview URL
Details

docs/tutorials/excel-tutorial-create-custom-functions.md
:warning:Warning
View
Details

docs/tutorials/excel-tutorial-create-custom-functions.md

Line 180, Column 1: [Warning-code-block-indented] Indented code blocks aren't allowed. Use a Markdown code block surrounded by triple backticks (```).

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 the docs.microsoft.com contributor guidesPost your question in the Docs support channel

Docs Build status updates of commit 422db63:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs/tutorials/excel-tutorial-create-custom-functions.md
:white_check_mark:Succeeded
View

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 the docs.microsoft.com contributor guidesPost your question in the Docs support channel

The changes look good although this does make me wonder from a larger perspective if we want to write some other functions to explain what is happening since this is simply people running already existing code at this point. Idk what your perspective is - thoughts?

@mscharlock Could you approve this PR to fix the error in the tutorial, and then I'll track this suggestion as a work item in the custom functions backlog? I agree with your perspective but think it's larger task that will need planning and thought.


Android Gradle Build Failure?

Describe the bug
Receiving the following when trying to run react native on device
FAILURE: Build failed with an exception.

* Where:
Build file<EMAIL_ADDRESS>line: 53

* What went wrong:
A problem occurred evaluating project ':stripe_stripe-react-native'.
> Could not find method buildFeatures() for arguments [build_6svqzkt1jhqpls20ts85az2r6$_run_closure1$_closure8@605d9a76] on extension 'android' of type com.android.build.gradle.LibraryExtension.

To Reproduce
Steps to reproduce the behavior:
Install npm package
Run react-native run-android --deviceId=
Expected behavior
Build succeeds
Smartphone (please complete the following information):

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

Additional context
implementation 'com.stripe:stripe-android:16.10.0'
"@stripe/stripe-react-native": "^0.1.2",

Duplicate https://github.com/stripe/stripe-react-native/issues/203#issuecomment-839710098


drivers: designware spi: uint8_t is not enough for fifo_depth

https://github.com/zephyrproject-rtos/zephyr/blob/b12eb78f35cecfda1e80cb37564d97b8a424f53b/drivers/spi/spi_dw.h#L35
According to https://www.synopsys.com/dw/doc.php/iip/DW_apb_ssi/4.04a/doc/DW_apb_ssi_databook.pdf:

FIFO depth can be 256, which will overflow an 8-bit unsigned int field.

Please use our bug template when reporting bugs. You need to edit this issue to include the needed information from https://github.com/zephyrproject-rtos/zephyr/blob/main/.github/ISSUE_TEMPLATE/bug_report.md

Please use our bug template when reporting bugs. You need to edit this issue to include the needed information from https://github.com/zephyrproject-rtos/zephyr/blob/main/.github/ISSUE_TEMPLATE/bug_report.md

issue edited


Simplify NULL handling in type system

Problem: Right now, all the operators/functions in codegen assume non-null inputs, and rely on the codegen::Value class to wrap operators in "null-aware" wrappers to handle NULL inputs. This was okay as long as all calls go through codegen::Value. But, with the introduction of function expressions, this is no longer the case as these expressions directly call into the type system. Exposing the null logic externally is a bad idea; moreover, the functions themselves know how to handle NULLs.
Solution: Provide base classes that perform the same NULL-handling logic, deferring to derived classes to perform non-null-aware logic. This encapsulates NULL logic to the operator, which makes a lot more sense.
Details: In this PR, we introduce four base classes for casting, comparison, unary, and binary operators. The base performs common NULL handling in the evaluation method, and call into derived implementations. Base classes can also elide the NULL-check if it knows the input is not null-able; but, even this can be overridden.

Coverage increased (+0.02%) to 75.39% when pulling d35f513ed0a97b2b9c36b32e91c6a6d08bd4f3a4 on pmenon:type-system into ba1bfd57abb090a18bcbdee8b6c26b32f156c34b on cmu-db:master.

Coverage increased (+0.01%) to 75.384% when pulling d35f513ed0a97b2b9c36b32e91c6a6d08bd4f3a4 on pmenon:type-system into ba1bfd57abb090a18bcbdee8b6c26b32f156c34b on cmu-db:master.

Coverage decreased (-0.05%) to 75.332% when pulling 3b3dc72fc1601c4eb4ef30d0ecbfdc4403ee94e7 on pmenon:type-system into c8b6b93371f76ba2b9c7bd692e1450c186bd8ef9 on cmu-db:master.

Coverage decreased (-0.05%) to 75.336% when pulling 3b3dc72fc1601c4eb4ef30d0ecbfdc4403ee94e7 on pmenon:type-system into c8b6b93371f76ba2b9c7bd692e1450c186bd8ef9 on cmu-db:master.

Coverage decreased (-75.4%) to 0.0% when pulling db0fc02a563b025be1eebdaee5a99e7466e8da18 on pmenon:type-system into 0afeb623628b96570abe9556a73205a4d66cfa2b on cmu-db:master.

Coverage decreased (-75.4%) to 0.0% when pulling e7d1e5817a384506c37baebfa05168978881f7ba on pmenon:type-system into 0afeb623628b96570abe9556a73205a4d66cfa2b on cmu-db:master.

Coverage increased (+0.2%) to 75.656% when pulling 31ee438763a0564cf7b8e75c7cf5092b6e4319cd on pmenon:type-system into 0afeb623628b96570abe9556a73205a4d66cfa2b on cmu-db:master.

Coverage increased (+0.2%) to 75.854% when pulling 5e0d01bd964606949d27a154b505653a3f4ed182 on pmenon:type-system into 8ecce2dac275a4d57d5f9d73169203486af0db15 on cmu-db:master.

Looks good! It should be merged ASAP.

I will merge when the build passes.

Coverage increased (+0.2%) to 75.86% when pulling d7c9298697b998506180c2ed5259295a2650eeca on pmenon:type-system into 2d4cea09ba79287c97f91b9f655f77db8f5b6603 on cmu-db:master.


Do not redirect XHR that would fail due to CORS bug in Firefox

This PR disables gateway redirect for cross-origin XHRs.

It fixes all the websites broken by CORS false-positive bug in Firefox (samples below).

It is a "lesser evil". There will be no gateway redirect for such requests, but at least "IPFS-enabled" websites that do cross-origin requests to different gateways will work.

I believe we want the same behavior on all browsers, so we conform to the Firefox limitation in Chrome as well.

Also a "lesser evil". Different handling on different browsers would be a nightmare for a developer, who assumes it "works the same everywhere".

The full context is in https://github.com/ipfs-shipyard/ipfs-companion/issues/436#issuecomment-378254294 including a link to the upstream bug.

Samples
Examples of sites broken in v2.3.0 by the bug:

https://ipfs.github.io/public-gateway-checker/
http://node2.e-mesh.net/hls/stream.html?gw=https://hardbin.com/ipfs (reported by @darkdrgn2k)
(open Console to see CORS error)

Open Questions
I'd appreciate some quick feedback, before this gets merged and released:

Is it OK to artificially limit Chrome just for sake of uniformity?
Should we log a warning to the console on every skipped XHR, or is it too much?

Since this is a severe limitation on what single page applications on ipfs will be able to do in for example an offline situation I think logging a warning every time this happens is a good idea. I think both firefox and chrome provide ways to silence those logs if the are expected.

If we use the isFirefox runtime check and issue a warning (only for Firefox) we wouldn't have to restrict for Chrome (and potentially others). It wouldn't add a great deal of complexity and there's precedent for that sort of thing already in the code base.
In combination with the log line the altered behaviour in Firefox remains visible and the restriction can be removed easily when the issue is fixed. Meanwhile by leaving in the functionality for Chrome you ensure the code that is doing it continues to work as expected.

@alanshaw I initially did that, but I got worried about providing different redirect rules for different vendors, which feels like a bad developer experience.
So your suggestion is to limit this workaround to Firefox only and and be very explicit that it is a temporary workaround for an upstream bug limited to Firefox?

Alright, switched to this PR to apply the workaround only when in Firefox runtime.
I feel this makes it very safe to merge and release to beta, as it restores broken functionality for Firefox users and does not change anything for Chrome.

For anyone interested in this fix, it just got shipped to stable channel as v2.3.1


Design QA - Please, make the full box title area clickeable, not just the arrow:

Right now, user can only click on the arrow to expand the box. Could we make the full area containing the title clickable?

done


db: Restore sqlite support

Fix bug on sqlite with nullable columns
Add sqlite testing to run_local_tests
Add CI job for testing with sqlite

Signed-off-by: Dov Murik<EMAIL_ADDRESS>
I will rebase this PR on top of #51 after that is merged.

All tests pass except lint (clippy), which warns about needless-borrows in unrelated code.

Let's merge #53 first (fixes the clippy/lint warnings), and then I'll rebase this.

BTW the fix for the nullable fields was to convert (try_get) the DB value to Option<i64> instead of i64, which will properly convert the NULL to None. See https://docs.rs/sqlx/latest/sqlx/mysql/types/index.html#nullable .

Rebased on top of main; now CI is green.


Serialization overhaul

The save/load code has a lot of direct calls to the XML code in NAS2D. There is a plan to update the NAS2D XML code from TinyXML1 (with local modifications and renames) to TinyXML2. Such an upgrade will break a lot of existing code. We should try to minimize the number of direct calls to XML code to ease the transition.
References:

https://github.com/lairworks/nas2d-core/issues/211
https://github.com/lairworks/nas2d-core/issues/797

As much of the save/load code needs to save and restore arbitrary data, much of it works with XmlElement objects. Instead, we could potentially have objects return a Dictionary of data that needs to be saved, or to accept a Dictionary of data to process when loading.
Reference: https://github.com/lairworks/nas2d-core/blob/master/NAS2D/Dictionary.h
We could have methods that convert Dictionary objects to/from XmlElement nodes. For loading code, the ParserHelper methods can be used to validate the presence of required fields. It can also be used to detect extra unknown fields.
Reference: https://github.com/lairworks/nas2d-core/blob/master/NAS2D/ParserHelper.h
Using these objects may allow for simplifications in the loading code. It should also allow the XML references to be lifted to a higher level and reduced in number.

I'm game for using a Dictionary type object. Without looking too deep into the Dictionary class, can std::tuple's be used? Because in most cases I can see basic key/value pairs but I'm wondering about the elements that have multiple attributes. Would it make sense to use a std::tuple for this or could it still be done with key/value pairs?
I suppose that's all down to the implementation details but I'm totally in favor of doing it this way. Not having to deal directly with XML processing would simplify so many things.

The underlying code uses stringTo<T> from StringUtils.h. That method doesn't currently support conversion to collection types.
We could potentially upgrade stringTo. Though the other solution is to parse strings outside of that method, with manual calls to split for std::vector type results.

All except one use of the XML attributes method has been replaced with uses of Dictionary. That goes a long way towards decoupling from the specific of the current XML implementation.
The TileMap::serialize method probably needs to be split. Right now it takes in an XmlElement to attach things to, and it generates several to attach. Other methods generate a single new XmlElement object to return, which the caller is required to attach somewhere. Splitting the TileMap::serialize method into individual parts (view parameters, mines, tiles), would allow each section to return a single element, and match the style of the other methods.

Now that attributes have been largely dealt with, some consideration needs to be given to the linkEndChild calls. Perhaps we can abstract away the tree like structure. Indeed, such a structure would apply to other formats too, such as JSON, or YAML. It wouldn't apply so well to an INI file though.
Another approach we could take is to flatten the saved game file structure a bit. That may make a lot of sense in some cases. I don't know that it would apply everywhere though.
One downside of a structural change from flattening the saved game data, is the affects it would have on saved game file compatibility. This can be partially mitigated by providing an upgrade path where certain versions of the game can load old files and re-save them in a new format. Though I'm hesitant to put too much effort into that when we are still reasonably far from a v1 release.

I wouldn't be too worried about compatibility yet considering it is tough to play for more than an hour tops right now with the current content.
I had thought splitting tilemap serialization into smaller functions was a good idea as well.

I've been looking back at this. We've removed most direct uses of XmlAttribute and replaced them with more generic Dictionary objects. That worked out well for decoupling from XmlAttribute, where they both represent flat structures.
We still have a fair bit of code in OPHD that directly uses XmlElement objects. These are non-flat structures, and so don't abstract well to Dictionary objects. I think we need something more, that can represent a hierarchy of data. For a single level we've been able to get away with a std::map of Dictionary, but for deeper data nesting we need a new data type with proper recursive support. Without that it will be difficult to decouple from XmlElement.
In terms of XmlElement specific operations, most of them are navigating to a specific unique sub-element, or to iterate over a collection of similar sub-elements. For any given level, we can get a Dictionary of attributes. We also have a bit of verification code, checking for the existence of sub-elements, or that no unexpected sub-elements exist.

I've noticed rather repetitive error reporting code, that reports a file line number and column that lead to a parse error. Potentially we could abstract away that error reporting too.
Currently most parse code is driven by data format specific functions, which make calls into XML handling objects. This means when that custom code detects an error, it must also include custom error reporting code. Instead, we could potentially invert things, and have a generic parse function that takes a parse method as a parameter, and can call that method with a new data type roughly representing an XmlElement object. The parse method can either return parsed data, or throw, in which case the generic parse method can attach file position information to the exception. This removes the burden of duplicating error reporting code everywhere.

Example:
const auto parsedData = parseFile("filename.xml", parseFunction);

auto parseFunction(const DataStore& genericRecursiveDataStoreObject)
{
  // ...

  if (isError)
  {
    throw std::runtime_error("Something very specific and bad happened");
  }

  return data;
}

Error parsing "filename.xml": Something very specific and bad happened (line 7, column 4)

Or maybe an error occurs while parsing a sub-object instead. Example:
auto parseFunction(const DataStore& genericRecursiveDataStoreObject)
{
  // ...
  const auto subData = genericRecursiveDataStoreObject["subObjectSectionName"].parse(subObjectParseFunction);
  // ...
}

auto subObjectParseFunction(const DataStore* genericRecursiveDataStoreObject)
{
  // ...
  if (isError)
  {
    throw std::runtime_error("Problem parsing SubObject");
  }
  // ...
}

Error parsing "filename.xml": Problem parsing SubObject (line 12, column 8)

Continuing the above idea, to do automatic error reporting, the parsing needs to be wrapped in generic library methods that handle the actual XML data. That means passing callbacks into this methods so they can parse the data into arbitrary data structures.
To implement such generic library methods, they will need a templated return type, as they won't know what specific data structure will be parsed. They will also need a parsing function parameter, with that return type, which could be a templated callable object.
It may be tempting to use std::function for the parsing function, as it will have a fixed parameter list, but then there would be no way to handle the arbitrary return type.
One downside to using a templated method, is the implementation would need to be placed in the header file, and any code used by the implementation would need corresponding #include lines, also placed in the header file.

Alternatively, we could design an API with no return type, and leave extracting the data to some other means. Presumably a lambda could capture an object it needs to feed the data to, and writing that data could become part of the parse function. That seems like a little bit less clean of a concept though.
const auto parseFunction = [&object](const DataStore& genericRecursiveDataStoreObject) {
  object.data = ... // Parse and assign some data
};

parseFile("filename.xml", parseFunction);

As another possible alternative, maybe the throw can be a library method that's part of the API. Pass it an error message, and it will attach appropriate file location information, suitable for the current section of the file.
const auto rootSection = parseXml("filename.xml");

const auto version = VersionString{rootSection.get("version")};
if (version < "1.0.0") {
  rootSection.throw("Expected version 1.0.0 or greater. File version: " + version);
}

const auto dataSection = rootSection["data"];
// ...
if (...) {
  dataSection.throw("Missing required attribute: size");
}

Possible error outputs:

Error parsing "filename.xml": Expected version 1.0.0 or greater. File version: 0.9.9 (line 1, column 1)

Error parsing "filename.xml": Missing required attribute: size (line 2, column 4)

I think I may want to explore this last possibility, as it may be the most natural to many programmers, avoids putting implementation in templated methods in header files, and still provides support for generic parsing error messages.

Reported file positions in error messages might have limited granularity, perhaps indicating the section, rather than a specific attribute or sub element. For instance, there might be a "root" XmlElement, and all errors directly in that section would be reported with the line and column number of the start of the "root" XmlElement, rather than say, the position of an extra unexpected attribute on the "root" XmlElement.