[Question] Time Series Bag of Features (TSBF) is it possible to implement using SKTime ?

This is not really a bug, but rather a question
I read about Time Series Bag of Features (TSBF) in the The great time series classification bake off review paper and it seemed to perform as good as Time Series Forest (TSF)
So I was wondering if it could be implemented using the utilities that we have in SKTime right now, maybe using a pipeline or something.
@TonyBagnall , Do you have any suggestions regarding the feasibility of doing so ?

hmm, well I implemented it in Java in 2014 or so, and it was a bit tricky iirc. It starts off like TSF with added features, but then does some other stuff. I liased with the author but could not recreate results, so it may be buggy. It was much slower than TSF and not more accurate, so we left it as it is and didnt bother porting it over. Possible to do so, but dont think it would add a huge amount of value to sktime.
https://github.com/uea-machine-learning/tsml/blob/master/src/main/java/tsml/classifiers/interval_based/TSBF.java
my comments (written over 5 years ago ....)
PARAMETERS
minimum interval length: wmin=5;
bin size for codebook generation in phase 2:   binsize=10
VARIABLES
number of intervals per subseries
numIntervals=(int)((zLevel*seriesLength)/wmin);
number of subseries:
numSub=  (seriesLength/wmin)-numIntervals;

Subsequences are sampled and partitioned into intervals for feature extraction.
number of subseries numSub= floor(m/wmin)-d
each subseries is of random length ls
each subseries is split into d segments
mean, variance and slope is extracted for each segment

For i=1 to number of  subsequences
select start and end point s1 and s2
for each time series t in T
generate intervals on t_s1 and t_s2
generate features (mean, std dev and slope) from intervals
add to new features for t
nos of features per sub series=3*d+4
    nos features per series = numSub*(3*d+4)

This forms a new data set that is identical to TSF except for the global features.

"Each subsequence feature set is labeled with the class of the time series and
each time series forms the bag."
I think it works by building a random forest on the labelled transformed subseries and use the
class probability estimates from the forest.
A classifier generates class probability estimates.
Histograms of the class probability estimates are generated (and concatenated) to summarize the subsequence
information.
Global features are added.
A final classifier is then trained on the new representation to assign each time series.

hmm, well I implemented it in Java in 2014 or so, and it was a bit tricky iirc. It starts off like TSF with added features, but then does some other stuff. I liased with the author but could not recreate results, so it may be buggy. It was much slower than TSF and not more accurate, so we left it as it is and didnt bother porting it over. Possible to do so, but dont think it would add a huge amount of value to sktime.
https://github.com/uea-machine-learning/tsml/blob/master/src/main/java/tsml/classifiers/interval_based/TSBF.java
my comments (written over 5 years ago ....)
PARAMETERS
minimum interval length: wmin=5;
bin size for codebook generation in phase 2:   binsize=10
VARIABLES
number of intervals per subseries
numIntervals=(int)((zLevel*seriesLength)/wmin);
number of subseries:
numSub=  (seriesLength/wmin)-numIntervals;

Subsequences are sampled and partitioned into intervals for feature extraction.
number of subseries numSub= floor(m/wmin)-d
each subseries is of random length ls
each subseries is split into d segments
mean, variance and slope is extracted for each segment

For i=1 to number of  subsequences
select start and end point s1 and s2
for each time series t in T
generate intervals on t_s1 and t_s2
generate features (mean, std dev and slope) from intervals
add to new features for t
nos of features per sub series=3*d+4
    nos features per series = numSub*(3*d+4)

This forms a new data set that is identical to TSF except for the global features.

"Each subsequence feature set is labeled with the class of the time series and
each time series forms the bag."
I think it works by building a random forest on the labelled transformed subseries and use the
class probability estimates from the forest.
A classifier generates class probability estimates.
Histograms of the class probability estimates are generated (and concatenated) to summarize the subsequence
information.
Global features are added.
A final classifier is then trained on the new representation to assign each time series.

@TonyBagnall Thank you so much for the explanation and all the details. And of course for the very fast reply.
Well I think in this respect, I must agree it wouldn't make sense to have it implemented as it is no added value.

@TonyBagnall Thank you so much for the explanation and all the details. And of course for the very fast reply.
Well I think in this respect, I must agree it wouldn't make sense to have it implemented as it is no added value.


Add Dev tools

This pull request add dev-tools to the basic example.
I hope this will help to fix #61.

@geowarin I created another PR based on this one that attempts to solve #61. Check it out here: #73

Looks great, thanks, I needed to do this soon but this helps a lot. @kjbekkelund  I may go ahead and merge this so we can keep discussing solutions.

Hi @jlongster, I amended my branch according to your remarks.
@kjbekkelund, sorry I rebased and push forced so you might need to repair your branch :confounded:

@jlongster Absolutely — this should be merged! :)
@geowarin No prob, my branch was just to get a discussion going on how to solve the devtools problem :)

Ok I'll go ahead and merge it and look into it today.


Remove '$ref' statements in the SubmarinerConfig schema

These are added by the generator tool but are not supported by K8s.

/cc @vthapar @aswinsuryan

/lgtm
/approve


Move specs for arithmetic primitives to std_spec

Moves all of the compiler specs for the arithmetic primitives to the standard library test suite. See https://github.com/crystal-lang/crystal/pull/11229#issuecomment-922387167.
These specs are controlled by the primitives spec tag. make std_spec will not run those specs by default, unless primitives_specs=1 is also specified. Manually running those specs with bin/crystal spec is unaffected (of course, this only makes sense when .build/crystal exists).
Currently, those specs are not guarded by macros, so they are always built. In the unlikely case new primitive methods are added, an extra compare_versions guard against the next minor release should suffice.

One new spec is failing:
expect_raises(OverflowError) { Float32::INFINITY.to_u128 }

It is supposed to be fixed by #11230.


exceptions_as_failures for find_data_row_failures parameter option

When calling tdf.find_data_row_failures() there should be an optional argument for eating the exception thrown by the row predicate, and instead calling rows that throw an exception inside the row predicate as a row failure. This is an easy coding use of safe_apply. On Enframe, this is the way to look for data row failures, so that there isn't an unhandled exception thrown when looking for row predicate failures.

Actually, I think thats nutso.... how about having a general wrapper that simply insures that any row_predicate exception throws are themselves failed rows.... that seems more natural.

Fixed above


Update readme.md

Add link to project tutorial video in the Example section

Thanks for taking the time to make this tutorial, looks great!


Add a Projects Page

🚀 Feature
A Project page that will include all our projects from Github or any extra.
Try to use the default options we provided:

For colors & fonts must have a look in settings.css in the CSS directory.
Create different files for the project page, i.e, css project.css & html project.html.
Maintain the files & folder structure properly.

Hy @imniladri! Can you assign this task to me?

Hey Dude,
please me assign me to this topic?

Will assign another if it's not done by the previous one.


Failed to register layer: re-exec error: exit status 1: output: ProcessBaseLayer C:\ProgramData\Doc... The system cannot find the path specified.

Expected behavior
Install hellow-world-nginx on windows container
Actual behavior
Got the following error
Information about the Issue
Windows 10 1709 Pro
Docker Edge 17.12.0-cd-rc2
Steps to reproduce the behavior

Fresh install Docker Edge on Windows 10
Switch to windows container
Install the image hellow-world-nginx
Got the error in the title

Error Mesage:
Failed to register layer: re-exec error: exit status 1: output: ProcessBaseLayer C:\ProgramData\Docker\windowsfilter\78750ef5234649fdd82a8196492ea79807656b686c3af09011dce93dabedb828: The system cannot find the path specified.

Can you repeat this via powershell and provide the output here?  There's a chance that this is more of a docker/for-win issue.


Overhaul of Travis CI setup, and other things.

The notification bit won't work yet because I have to remake the secure config variable.


Sprite with shader that modifies COLOR ignores modulate property

Godot version
d696bd1
System information
W10
Issue description
When you add a simple shader that changes COLOR, modulate property is ignored. It was fine in 3.x
Steps to reproduce

Add Sprite2D node
Apply this shader

shader_type canvas_item;

void fragment() {
	COLOR = texture(TEXTURE, UV);
}

Try changing modulate property

Minimal reproduction project
No response
EDIT:
Reduz suggested that it might be intended, because the way it works has changed. In that case, it's a documentation issue about how it can be achieved now.

Modulation also seems to not work with polygon2d and line2d nodes, in most/all configurations that I can tell. For instance no change when textured (the tooltip says modulate applies to textures), untextured, or when using vertex colors.
Though the most sense of having this (aside from textured polygons) is for vertex colors due to their complexity, which would really benefit here for instance if you wanted something grayscale like a cloud to be recolored for different effects (potions, clouds, team colors, having a library to re-use simple art in different situations etc) which does work in 3.3.2.
So hopefully this isn't intended, at least without something to replace it (like a palette system so you can alter colors and they change all vertices with that index, especially if there was a way to add+control color mixing). With clip children (when fixed+no blending, see 49198) it might be something that could be wrangled into something dynamic as-needed by someone clever... but that isn't quite as quick and easy as modulate is.

Somewhat different, but issue #25120 is related. Because in previous versions (3.1 beta 1 and before) you could have vertex colors along with vertices that still use the color property instead. Which was useful in a similar-but-different way. Not that I think it was possible to have much control over which vertices had vertex color and which ones used the color property (but if your colors were vaguely in the same area, it might work).

Modulation also seems to not work with polygon2d and line2d nodes, in most/all configurations that I can tell. For instance no change when textured (the tooltip says modulate applies to textures), untextured, or when using vertex colors.

https://github.com/godotengine/godot/pull/49863 will likely fix this issue.
But the problem @KoBeWi has here is different, it is unlikely to be fixed by this PR.

Still occurring in Godot 4 alpha 3.
In Godot 3 multiplication with modulation color happened implicitly unless MODULATE was used explicitly in shader code.
meanwhile, MODULATE was removed from the fragment built-ins entirely - presumably intentionally as the docs already reflect the change.
Fragment built-ins in stable docs
Fragment built-ins in latest docs

Reduz suggested that it might be intended, because the way it works has changed. In that case, it's a documentation issue about how it can be achieved now.

I haven't been able to figure out "the new way" to get the modulation color to work with shaders. If anyone knows more, enlightenment would be appreciated.

it now works like this:
shader_type canvas_item;

void fragment() {
	COLOR = texture(TEXTURE, UV) * COLOR;
}

would be nice to hear a confirmation as for whether it is intended like that.

It works in the original overly-simplified example case, but for any other shader that actually does something with colors this will break.

Extra details on comment https://github.com/godotengine/godot/issues/64996#issuecomment-1229508497

I took a look into this today. Unfortunately it appears the current behaviour is intended and will be quite difficult to change.
Old behaviour
In Godot 3.x MODULATE was its own built in variable. It was passed into the shader as either a uniform or a vertex attribute. If it wasn't used then COLOR was multiplied by MODULATE in the fragment shader after the user fragment function runs. If MODULATE was used then it was up to the user to multiply it in.
Similarly COLOR represented the incoming color from the vertex function which was always the vertex color as modified by the vertex function (usually just passed through). If the user did not use COLOR in the fragment function then the fragment shader would multiply it by the texture's color (texture(TEXTURE, UV)).
New Behaviour
MODULATE is gone and instead COLOR is multiplied by the modulate value on the CPU before passing it to the shader (unless vertex colors are used, then it is multiplied in the vertex shader before being exposed to the user). Basically it i done this way so that we can easily render sprites that have different MODULATE colors without changing much state (in GLES3 it allows us to batch items).
So now COLOR in the vertex shader represents COLOR * MODULATE and MODULATE is gone completely.
In the fragment shader COLOR is always multiplied by the texture's color (texture(TEXTURE, UV)) before the user fragment function.
Discussion
This means we have two problems:

You can't access MODULATE or COLOR on their own
You can't even access MODULATE * COLOR on its own unless you create a varying.

Number 1 could be solved but the options come with tradeoffs:
option 1: Compress COLOR and MODULATE into vec2s and pass them in separately. So instead of vec4(COLOR * MODULATE) we would have vec4(vec2(COLOR), vec2(MODULATE)). In the shader they could be accessed as COLOR and MODULATE still they would just be quantized to 16 bits. This would be fine for most colors as the default color picker only exposes 8 bits per channel colors anyway. But it may cause problems if users use "raw" colors that go well outside the 0-1 range.
option 2: We could change the way batching works and pass some data in on a per-batch basis (right now all necessary data is packed into 128 bytes per item). This would require implementing batching in the Vulkan renderer.
Number 2 can be solved by doing what was done in 3.x. I.e. only multiply in the texture value if COLOR is unused in the fragment function. This behaviour was very confusing for beginners as they often expected COLOR to contain the texture color.

@clayjohn  Thanks a lot for this explanation! Just ran into a problem today where I would not be able to animate the modulate property to make a sprite fade in/out that had a mask shader.
After reading your explanation I just had to change the shader to do:
COLOR.a *= vmask.a;

As a workaround to make the shader behave the same way it used to in Godot 3.x, as in our case we were not using the MODULATE built in variable.

yea I've also been able to restore 3.x functionality in all of my affected shaders by doing something similar than eh-jogos (as I've mentioned a couple of months back). most of the time, it's fade effects using the alpha channel of modulate. so from my perspective all that's missing here is proper documentation.

it would be nice to have separate access to modulate in some way. For example, one of the shaders I'm using maps the rgb channels of the texture onto 3 arbitrary colors. I can of course use TEXTURE to get the source colors, but it would be nice to be able to modulate the resulting colors as well. (Obviously I can't just use COLOR here because it will create unexpected results- instead of tinting the colors, it will just interfere with the mapping.)

What is the reason this is considered 4.x rather than 4.0, considering that this worked fine in 3.x? I read this comment by @clayjohn and I understand that architecturally from an implementation standpoint this is "by design". However, from a usability perspective, it looks like a bug to me.
One workaround for 4.0 could be to show a warning next to the modulate colour picker in case a shader is configured to warn the user about the impact. (I spent 3 hours yesterday trying to figure out why the modulate does not apply only to realise it is unique to Godot 4)

@Zireael07 there is a difference between "renderer design" and "UX design" - from a user perspective it is broken. The user does not understand necessarily the internals of a renderer, at least Godot currently does not make it clear to the user that there is a problem. If the renderer does not support something but the user still tries to configure it, at least there should be some sort of warning to the user that they are doing something wrong.

Knowing how it works in 4.0, I adjusted my old shaders and was able to successfully fix most of them. However in one shader I absolutely needed the modulate to be separate, so what I did was just passing it as a color parameter. Is this the intended way now? Maybe MODULATE could be available as a built-in parameter? (and would only be passed to the shader if used)

Phrased differently: what is the purpose of having the modulate property when a shader is configured and it won't have any effect?

The modulate does have effect. It's part of the COLOR. The shader from your original issue could probably work like this:
COLOR = vec4(texture(TEXTURE, UV).rgb, COLOR.a);

The modulate does have effect. It's part of the COLOR.

Thank you for clarifying this.

Maybe MODULATE could be available as a built-in parameter? (and would only be passed to the shader if used)

I would very much like that. The problem I'm currently facing is, that I want to offset the UV coordinate in the fragment shader with help of 2D noise, followed by a texture(TEXTURE, UV + noise) lookup to create a 'wobble' effect. But at the same time, a tween can change the alpha component of modulate to fade the sprite in and out.
Because COLOR contains the original texture alpha multiplied by modulate alpha, I can't separate them. But I need modulate alpha alone, to multiply it with the new value from the lookup above to get a correct value.
I could pass modulate in as another uniform, but that's such a terrible hack.

Totally agreed. Having a modulate built in parameter would allow you to simply just multiply color by modulate, instead of passing in modulate every time it is changed

In the fragment shader COLOR is always multiplied by the texture's color (texture(TEXTURE, UV)) before the user fragment function.

Always? Is this not a complete waste of a texture read if the user doesn't need that particular value?

Also got this issue today with my custom shader to increase brightness.
I found the following workaround (besides adding a custom parameter "modulate", assuming the point is to benefit from the integrated hierarchical modulate system):
Since COLOR = MODULATE * texture(TEXTURE, UV), we should re-divide it by texture(TEXTURE, UV) to get MODULATE:
vec4 tex = texture(TEXTURE, UV);
float modulate = COLOR / tex;
# Work with tex to compute wanted color `col`, then at the end of fragment():
COLOR = col * modulate;

At first I was worried by 0 / 0 on RGB and A, but since modulate works by multiplication, a value of 0 will stay at 0 eventually so the result was correct. I don't know if this will work with all shaders though.

I found a "workaround", by making the parent a canvas group, you can change the modulation of the object by adjusting the modulation of that canvas group.

The shader didn't seem to like this but it did point me in the right direction, this works for rgba:
void fragment() {
	vec4 tex = texture(TEXTURE,UV);
	vec4 modulate = COLOR - tex;
        //color changing code on tex goes here
	COLOR = tex + modulate;
}

If this is more efficient than adding MODULATE back in I don't see the problem as long as it's clear methods like this exist.

I don't know shaders that well. In Godot 3.x I used a shader to change a sprite to white.
void fragment() {
    COLOR = texture(TEXTURE, UV);
    COLOR.rgb = vec3(1,1,1);
}

Then used the inspector modulate property to change it's color. Is this no longer possible?

If we now have to use a shader parameter to do this, it effects all material instances, forcing to duplicate the material.

If we now have to use a shader parameter to do this, it effects all material instances, forcing to duplicate the material.

Indeed, I'm checking Local to Scene on my character scene so each inherited scene and instance has its own material properties.

I would also love if MODULATE was a built in variable passed to the shader.
Although the solution suggested by oxixxixo works, in the case you are adding a border or outline, the outline does not set it's alpha to the desired one, being fully opaque.
Having a MODULATE built in would let us set it's alpha as the outline color alpha, thus, fixing the issue.

I found that you can get the vertex's modulate without the texture color by doing this:
varying flat vec4 modulate;
void vertex() {
	modulate = COLOR;
}

Then you can access modulate in the fragment function.

As a beginner in shaders, I must admit that I don't fully grasp all the intricate implications of this concept. Nevertheless, I can say that the previous version, 3x, was considerably more user-friendly in this aspect. It allowed me to effortlessly apply shaders to any node and reliably adjust or manipulate them. I also found myself perplexed when modulation ceased to function properly after applying a shader in the current version. It seems that the process is no longer as straightforward as it used to be.

Is this issue in limbo? If something is going to change again, it would be nice to know the "final" syntax as soon as possible.

@djrain this issue most likely would need to be reworded by @KoBeWi - rather it being an actual bug, the behaviour changed in Godot 4 (due to the way how materials work now), meaning that this is not a bug but a feature. All it requires is an update in documentation (and possible UX improvements in future to avoid confusion for people coming from Godot 3.x)

Regardless of whether this is a bug or a feature, the issue that I (and presumably others here) have is that certain shaders which depended on MODULATE being an separate parameter in Godot 3 seemingly cannot be ported to Godot 4 without workarounds.
In my oppinion a good resolution to this would be:
a) A clear statement from the developers on if the current situation in Godot 4 is final.
b) Documentation of the recommended migration path for Godot 3 shaders that depended on MODULATE. (This is also requested in the edit to the original post by KoBeWi.)

I'm wondering if this solution (https://github.com/godotengine/godot/issues/49781#issuecomment-1543250039) would allow to port all the shaders ..?

One solution to this for moments where vertex color is also involved would be to expose pre-multiplied vertex color and instance color as separate variables. Not sure if that would work though.

I'm not sure what the advantage of changing the behavior was.  What do users gain from the lack of ability to modulate a sprite when a shader is applied?

Due to this new behavior, I'm quite sure some shaders can't really be ported at all. Here's a example of one that waves a 2D texture that worked fine in 3.*, but now it can't take into account the sprite's modulate value without getting cut off in the edges:

Wave Shader

shader_type canvas_item;

const float MODULUS = 1000.0;

uniform vec2 speed;
uniform vec2 waves;
uniform vec2 strength;

uniform float interval;

void fragment() {
	float time = TIME;
	if (interval > 0.0) {
		time = floor(time / interval);
	}

	// Use modulo to lower the total value and avoid precision errors.
	time = mod(time, MODULUS);

	vec2 distortion;
	distortion.x = sin(time * speed.y + UV.y * waves.y * PI) * strength.y;
	distortion.y = sin(time * speed.x + UV.x * waves.x * PI) * strength.x;

	vec4 result = texture(TEXTURE, UV + distortion * TEXTURE_PIXEL_SIZE);
	COLOR.rgb = result.rgb;
}

@YeldhamDev in what way does getting the modulate in the vertex function not work here? Modifying it that way seems to make it work fine, I don't see anything getting cut off.

@WeaverSong Just tried again, and yep, now it seems to work. I think I forgot to multiply the alpha value, my bad.

I'm wondering if this solution (#49781 (comment)) would allow to port all the shaders ..?

It seems that the workaround above gives access to the modulate value of the canvas_item.
However, I think that the previous MODULATE variable for shaders in Godot 3.x was not exactly the modulate value of the canvas_item but rather the final modulate value (obtained after also applying the potential CanvasModulate nodes) (refered to "Final modulate color" in the 3.5 doc). It was for instance used to achieve effects like this.
I don't know if it is possible to access this final modulate value in Godot 4.x shaders.

This issue is really, really annoying. It means that every shader needs to be customized to work with this vs Godot 3 where "it just works".
Also, not having access to MODULATE is bad on it's own.
It was a way of having simple "per-instance uniform" in a canvas shader without per-instance uniform.
Of course we now have access to per-instance uniforms, so this has become less of an issue, but there is also the point mentioned in the comment above - the final modulate.

Of course we now have access to per-instance uniforms, so this has become less of an issue, ...

Worth noting that per-instance uniforms don't work in 2D currently (https://github.com/godotengine/godot/issues/62943), so we only have per-instance uniforms in 3D projects.

shader_type canvas_item;
uniform vec4 color = vec4(1, 0, 0, 1);

void fragment() {
	COLOR = texture(TEXTURE, UV) * color;
}

@yueqianjian this is really not the solution that people in this issue are looking for. It requires to make the material unique. The UX is completely different. The issue isn't "I can't tint my sprite" the issue is "I had a workflow that worked great for me and now I don't have it anymore"

I'm attempting a fix, can someone provide a small MRP? Just a project with a shader that makes use of Modulate and a screenshot of expected (godot3) vs actual result

You can copy the shader from the OP, attach it to some Sprite2D and change modulate to any color other than white.

Alright, I tried but my approach doesn't work. Unsurprisingly clay was right and the way objects in 2D are drawn right now cannot be changed to accomodate for this with any low effort hack.
It is probably more worthwile to pursue per-instance uniforms together with n2 solution proposed by clay, but that's of course a lot of work.

vec4 c = texture(TEXTURE, UV);
vec4 modulate = COLOR / c;

Not the prettiest, but appears to work fine and if COLOR it's just modulate*texture premultiplied, this should do.

vec4 c = texture(TEXTURE, UV);
vec4 modulate = COLOR / c;

Not the prettiest, but appears to work fine and if COLOR is just modulate*texture premultiplied, this should do.

This is not sufficient. First, it can result in divide-by-zero, which is undefined behavior. Second, there are issues with floating point precision with this method that result in a loss of data and potential color distortion. Also, this may not work as expected for some things, like StyleBoxFlat, which outputs to both TEXTURE and COLOR.

Of note slugfiller and I are working on restoring the modulate. It's a bit more complex than it looks like due to the memory space we have for per-instance uniforms in shaders which are already used to the max, so they need to be reimplemented. But we're on it ^^

It's a bit off the topic, but using the visual shader does work. I used this video to fix the shader in this other one.


pull request for e2e test at 12/07/2016 16:56:03

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


Error building nunaliit2-gpx-jaxb

Getting an error building on Ubuntu 18.04. Error attached.
nunaliit_build_error_20190227.txt

This was due to Ubuntu sneaking openjdk-11-jre onto my system during an upgrade. javac -version reported java version 1.8.0 (openjdk-8) but mvn -version reported it was using java 10.0 (openjdk-11).
A quick apt purge openjdk-11-jre-headless solved this build issue.


Undocumented use of the BoldFont option?

Description
BoldFont = options seems to work, but the documentation does not mention about it. Is this working as intended, or should not work properly?
Add info or delete as appropriate:
I see that there are people do use this option, e.g., here.
Minimal example demonstrating the issue
\documentclass{article}
\usepackage{unicode-math}
\setmathfont{XITSMath-Regular.otf}[
  BoldFont = XITSMath-Bold.otf,
]
\begin{document}
\[
  a = b
\]
\end{document}

does this work the same as the following?
\documentclass{article}
\usepackage{unicode-math}
\setmathfont{XITSMath-Regular.otf}
\setmathfont{XITSMath-Bold.otf}[range={bfup->up,bfit->it}]
\begin{document}
\[
  a = b
\]
\end{document}

Further details
Only the latter use-case is described in the documentation.

BoldFont works with \mathversion[bold], in cases where all the math formula should be bold not only the alphabetic symbols.

@khaledhosny Thank you for the reply! Are you saying that the bold font specified by BoldFont is only used when  the \mathversion{bold} is invoked, and will not be used with commands like \symbf?

Exactly (and \boldmath which a shortcut for \mathversion{bold}). \symbf switch to the Unicode bold math alphabets, so works only on characters that have encoded bold versions.

\documentclass{article}
\usepackage{unicode-math}
\setmathfont{XITSMath-Regular.otf}
\setmathfont{XITSMath-Bold.otf}[version=bold]
\begin{document}
	\[ a = b \]

	\[ \symbf{a = b} \]

	\[ \symbfit{a = b} \]

\mathversion{bold}
	\[ a = b \]
\end{document}

I was going to open some new issue but will cuckoo here. (for reasons explained at the end, I may be not os eager for my issue to be solved).
The bold math version default appears to not be coherent.
\documentclass{article}
\usepackage{fontspec}
\setmainfont{TeX Gyre Termes}
\usepackage{unicode-math}
\setmathfont{XITS Math}
\begin{document}
\makeatletter
\meaning\mv@normal

\meaning\mv@bold

\clearpage
$a \mathrm{a} \mathbf{a}$

\mathversion{bold}

$a \mathrm{a} \mathbf{a}$

\thispagestyle{empty}
\showoutput
\end{document}
% Local variables:
% TeX-engine: xetex
% End:

(my system has symlinks targeting the texmfdist/fonts to help xetex find fonts)
We see in math version normal:
\install@mathalphabet \mathrm {\select@group \mathrm \M@TU \TU/TeXGyreTermes(0)/m/n }
\install@mathalphabet \mathbf {\select@group \mathbf \M@TU \TU/TeXGyreTermes(0)/b/n }

versus in math version bold
\install@mathalphabet \mathrm {\select@group \mathrm \M@OT1 \TU/XITSMath(1)/b/n }
\install@mathalphabet \mathbf {\select@group \mathbf \M@OT1 \OT1/cmr/bx/n }

This makes for very surprising behavior of \boldsymbol.
Now discovering the BoldFont option in this issue I obtain in math version bold, using
\setmathfont{XITSMath-Regular.otf}
\setmathfont{XITSMath-Bold.otf}[version=bold]

the following:
\install@mathalphabet \mathrm {\select@group \mathrm \M@OT1 \TU/XITSMath-Bold.otf(1)/m/n }
\install@mathalphabet \mathbf {\select@group \mathbf \M@OT1 \OT1/cmr/bx/n }

and is \TU/XITSMath-Bold.otf(1)/m/n  really different from \TU/XITSMath(1)/b/n ?
Also I don't know if the \M@OT1 pieces are worrrying.
My pre-conception (maybe from having done mathastext for pdflatex ten years ago) is that any change to \mv@normal must be paired if possible with a change in \mv@bold so this why I feel the \mv@bold is wrong.
On the other hand it gives a me a trick to solve some problems with hat accent. Try
\[\hat{a}_r, \mathrm{\hat{a}_s}, \mathbf{\hat{a}_t}, \boldsymbol{\hat{a}_u},
\boldsymbol{\mathrm{\hat{a}_s}}\]

(in normal math version)

So here I am abusing the fact that in the bold math version the effect of \mathrm will be for input a to become MATHEMATICAL BOLD SMALL A, which is upright.  And the hat is correctly positioned.
With lualatex things look better (which surprised me, I will explain next why):

I was very surprised but turns out my real-life original had
\usepackage{polyglossia}
\setmainlanguage{english}

which causes the following output:
xelatex:

lualatex


Newsletter 30 - January 2022

Newsletter 30: January 2022
tags: newsletter
Editors: @17cupsofcoffee, @ozkriff, and @AngelOnFira
Another month has gone by, so it's time to put together the Rust Gamedev newsletter with January news!
If you want to help writing the newsletter:

Read CONTRIBUTING.md.
Grab some of the "🆓 free" sections by leaving a comment like "I'd like to work on {section_name_1} and {section_name_2}".

The links in brackets (like "1, 2, 3") are suggestions of links to include in the section. Feel free to add more!
Mentions in brackets (like "🆓 free (@ozkriff?)") are just a suggestion of who could pick the work up - it's not an obligation, and other people are welcome to take those sections.
Extra sections not listed in the plan are welcomed - just leave a comment and open a PR!

Write a short overview:

Use provided links as a starting point.
Try to maintain a consistent style with the rest of the newsletter and run markdownlint (lint errors will fail the CI build).
Insert line breaks (softbreak) at 80 chars, please.
Leave a comment or DM me on Discord if you have any issues.

Send a PR to the source branch (example: #336)

Mention this issue in your PR's description to link it all together.

As with the last few newsletters, we're trying to delegate the writing workload where we can - to quote @AngelOnFira from a few months ago:

We're also going to be transitioning to having authors or volunteers write about their own content, rather than the editing team doing it all at the end 💯 This means if you want to see your work in the newsletter, you have to write it yourself! If you're not able to write about your work, feel free to comment and I can assign it 🆓 free. We're working on taking some of the load off the editing team where we can with this. Best to keep this sustainable!
Also, we want to make sure contributing to the newsletter feels open to anyone who wants to write a section about their project. If you have anything you can write about, just add a comment to this issue and I'll add it to the todo list 😄

Current Schedule
The soft deadline for all section PRs is the 8th of Feb. PRs will usually be accepted as long as they are ready before the newsletter's release, but the earlier the better :)

⚠ The most important formatting/style rules from CONTRIBUTING.md:

Only one image (<300kb) or GIF (<2.5mb) before the text, with an optional caption and mandatory alt text for accessibility.
All the rendered text should be under 1000 characters (including spaces and punctuation) and under 6 paragraphs (without any subsections, etc).
No bold/italic/etc formatting - only links and one plain list without nesting per section (multiple lists are allowed if your project consists of multiple parts that aren't independent enough for their own sections).
Third-person perspective.
80 characters per line and no other markdownlint warnings on CI.

Please use these templates as a starting point:
Games/apps/libraries:
### [Game name]

![alt text](img)
_optional image label_

[Game name] ([GitHub], [Discord], [Twitter]) by [@nickname]
is... {short project description in one sentence}.

{An overview of the recent updates with links to more details}.

_Discussions: [/r/rust_gamedev](link), [Twitter](link), [etc](link)_

[Game name]: http://example.com

Articles/blog posts/videos/etc:
### [Article name]

![alt text](img)
_optional image label_

[@nickname] published an [article] about...
{overview what the resource is about}.

_Discussions: [/r/rust_gamedev](link), [Twiter](link), [etc](link)_

[Article name]: http://example.com

Current Structure & Status
Below is a list of our current planned structure for the newsletter, and the status of each PR (which we'll try to keep updated).
This is not an exhastive list - if you have your own project that you want to write about, just make a comment on this issue and open a PR!

[ ] Rust GameDev Meetup (1) - 🚧WIP by @AngelOnFira
[ ] Game Updates

[ ] Veloren - 🚧WIP by @AngelOnFira
[ ] Not Snake (1) - 🆓free (@ramirezmike?)
[ ] Molecoole (1) - 🆓free (@Hilku?)
[ ] Flesh (1, 2, 3) - 🆓free (@Im-Oab?)
[ ] Wordlet (1) -  🆓free (@scottluptowski?)
[ ] country-slice (1, 2, 3) - 🆓free (@anopara?)
[ ] Hydrofoil Generation Sailing (1, 2. 3, 4) - 🆓free (@kunos?)
[ ] BITGUN (1, 2. 3, 4) - 🆓free (@darthdeus?)
[ ] System Fault (1) - 🆓free (@lightsoutgames?)
[ ] Lantern (1) - 🆓free (@qatoqat?)
[ ] Fish Fight (1, 2, 3, 4) - 🆓free (@erlend-sh?)
[ ] Starframe (1) - 🆓free (moletrooper?)
[ ] Kataster (1) - 🆓free (@Bobox214?)
[ ] Cake Thieves (1, 2) - 🆓free (@getech8?)
[ ] Idu (1) - 🆓free (@johann2?)
[ ] sugarcane (1, 2) - 🆓free (@macmv?)

[ ] Learning Material Updates

[ ] Making Game Go Fast on Windows (1) - 🆓free (@MasonRemaley?)
[ ] How Bevy uses Rust traits for labeling (1, 2) - 🆓free (@killercup?)
[ ] Refactoring from Legion to Bevy (1) - 🆓free (@justinryanh?)
[ ] Extreme Bevy (1) - 🆓free (@johanhelsing?)
[ ] Writing a Tiny Rust Game Engine for Web (1) - 🆓free (@kettle11?)
[ ] Extending states in Bevy (1) - 🆓free
[ ] writing an AH Scanner in Rust (1) - 🆓free (@trimoq?)
[ ] maz.digital's bevy articles (1, 2, 3) - 🆓free (@RomainMazB?)

[ ] Engine Updates

[ ] godot-rust (1, 2) - 🆓free (@Bromeon?)
[ ] tetra (1, 2, 3) - 🚧WIP by @17cupsofcoffee
[ ] fyrox/rg3d (1) - 🆓free (@mrdimas?)
[ ] Rusty Engine v0.3 and v0.4 (1, 2, 3) - 🆓free (@CleanCut?)
[ ] Arcana (1) - 🆓free (@zakarumych?)
[ ] bevy v0.6 (1, 2) - 🆓free (@cart?)
[ ] three-d  v0.10 (1, 2) - 🆓free (@asny?)

[ ] Tooling Updates

[ ] Fun Notation 0.5 (1) - 🆓free (@yjpark?)
[ ] gbrs (1, 2) - 🆓free (@adamsoutar?)
[ ] nodus (1) - 🆓free (@r4gus?)

[ ] Library Updates

[ ] dimforge (1, 2, 3) - 🆓free (@sebcrozet?)
[ ] EmbarkStudios/poll-promise (1) - 🆓free (@emilk?)
[ ] ezinput (1, 2) - 🆓free (@eexsty?)
[ ] bevy_backroll v0.3 (1) - 🆓free (@james7132?)
[ ] bevy_asset_loader 0.7 and 0.8 (1) - 🆓free (@NiklasEi?)
[ ] edict (1, 2, 3) - 🆓free (@zakarumych?)
[ ] bevy_game_template (1, 2, 3) - 🆓free (@NiklasEi?)
[ ] bevy_smud (1) - 🆓free (@johanhelsing?)
[ ] PetitSet (1) - 🆓free (@alice-i-cecile?)
[ ] big-brain v0.10 (1) - 🆓free (@zkat?)

[ ] Discussions (1) - 🚧WIP by @17cupsofcoffee
[ ] Jobs

[ ] Gameplay Engineer (Rust) - Creative Play - Embark Studios (1)

Final steps:

[ ] Other News - by @17cupsofcoffee
[ ] Final review - by everyone
[ ] Publish - by @17cupsofcoffee
[ ] Post on /r/rust, /r/rust_gamedev, /r/gamedev, URLO, twitter.com/rust_gamedev - by @17cupsofcoffee
[ ] Add comment links - by @17cupsofcoffee
[ ] Add a draft of the n31 - by @17cupsofcoffee

I'd like to write about my erupt-bootstrap Vulkan init library.

Missed last month, but I can do an update on the release of Harvest Hero Origins! 👍

I'll do the section for Rusty Engine 4.0.
One observation about the top comment: The soft deadline for all section PRs is the 8th of Jan. -> a deadline in the future would probably be more effective. 😉

One observation about the top comment: The soft deadline for all section PRs is the 8th of Jan. -> a deadline in the future would probably be more effective. 😉

you saw nothing 🥷
(thanks for the heads up!)

Will do Hydrofoil Generation.

Will do Refactoring from Legion to Bevy

Wrote godot-rust 🤖🦀

I'll take bevy!

I'll take bevy_backroll!

I'll take nodus

Rusty Engine 4.0 done in https://github.com/rust-gamedev/rust-gamedev.github.io/pull/914

I'll write about Not Snake!

I added the current development status of Flesh. #916

I'm not sure petitset is worth including right now; it's extremely specialized and only incidentally related to gamedev. I'll do a write-up for leafwing-input-manager though.

I'd like to write about about my ezinput lib.

I'll cover Edict

I'll take "writing an AH Scanner in Rust"

⏰ Reminder: the soft deadline for this month's newsletter is tomorrow!
If you'd like to write a section, please try to get the PR submitted in the next 24 hours if you can (or let us know if you need more time).

@17cupsofcoffee I'll be able to write short entries for bevy_smud and extreme_bevy in a couple of hours if it's not too late.

The release PR is now up for everyone to review: https://github.com/rust-gamedev/rust-gamedev.github.io/pull/941

Planning to submit the PR tonight announcing Graphite's imminent alpha release.

@Keavon Sorry, I hit merge on the release PR before seeing this 😩
How soon do you think you'll be able to submit your PR? I can hold off on the announcements if it's coming soon, but I'd really like to get stuff done before it gets too late in my timezone.

I've reverted the release for now.

Ah, sorry to hold you up, didn't mean to cause you trouble. These time zones are hard to think through (it's only 3 PM here in the US-Pacific, on the 8th).
I am working on writing it now so I expect it will take an hour or two (the length limit makes it kinda slow to write). I'll do my best to be quick with it!

@Keavon: No problem - I may have to leave the release till tomorrow in that case, as it's nearly midnight where I am and it'll take me a bit of time to do the social media posts that go with it.


Update zinc to 1.4.4

Updates org.scala-sbt:zinc from 1.4.0-M1 to 1.4.4.
GitHub Release Notes - Version Diff
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

Ignore future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "org.scala-sbt", artifactId = "zinc" } ]

labels: library-update, semver-pre-release

Incompatible API


Apply existential any to protocol for Swift 6

Apply existential any to protocol for Swift 6

https://github.com/swiftlang/swift-evolution/blob/main/proposals/0335-existential-any.md

After any is introduced, warnings will be added to guide programmers toward the new syntax. Finally, these warnings can become errors, or plain protocol names can be repurposed, in Swift 6.

I refactored by apply .enableUpcomingFeature("ExistentialAny")
let package = Package(
    name: "Kingfisher",
    platforms: [.iOS(.v13), .macOS(.v10_15), .tvOS(.v13), .watchOS(.v6)],
    products: [
        .library(name: "Kingfisher", targets: ["Kingfisher"])
    ],
    targets: [
        .target(
            name: "Kingfisher",
            path: "Sources",
            swiftSettings: [
                .enableUpcomingFeature("ExistentialAny")
            ]
        )
    ]
)

Perfect changes! Thank you!


add vhs to arkade get

Description

This PR adds vhs to arkade get
Motivation and Context

[x] I have raised an issue to propose this change, which has been given a label of design/approved by a maintainer (required)
Fixes: #927

How Has This Been Tested?

Running locally arkade get vhs.
If updating or adding a new CLI to arkade get, run:
> go build && ./hack/test-tool.sh vhs
+ ./arkade get vhs --arch arm64 --os darwin --quiet
+ file /home/nikhilsharmawe/.arkade/bin/vhs
/home/nikhilsharmawe/.arkade/bin/vhs: Mach-O 64-bit arm64 executable, flags:<|DYLDLINK|PIE>
+ rm /home/nikhilsharmawe/.arkade/bin/vhs
+ echo

+ ./arkade get vhs --arch x86_64 --os darwin --quiet
+ file /home/nikhilsharmawe/.arkade/bin/vhs
/home/nikhilsharmawe/.arkade/bin/vhs: Mach-O 64-bit x86_64 executable
+ rm /home/nikhilsharmawe/.arkade/bin/vhs
+ echo

+ ./arkade get vhs --arch x86_64 --os linux --quiet
+ file /home/nikhilsharmawe/.arkade/bin/vhs
/home/nikhilsharmawe/.arkade/bin/vhs: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, Go BuildID=uEpPGWWW3vVrEq1Z00Uk/-q4NEqjZA3iKhY__sy9j/f1nk3H9zrNh8v8QsmDsV/DgzZqprnlH9_70-WQRto, stripped
+ rm /home/nikhilsharmawe/.arkade/bin/vhs
+ echo

+ ./arkade get vhs --arch aarch64 --os linux --quiet
+ file /home/nikhilsharmawe/.arkade/bin/vhs
/home/nikhilsharmawe/.arkade/bin/vhs: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, Go BuildID=8CIwyELnf_nP3EHm9R3u/izScT2p5SrKtBkCYeCoW/JcPj3SV8QUNWCrlhFDxL/ENMl1m_p7qC_sWzVU2Mi, stripped
+ rm /home/nikhilsharmawe/.arkade/bin/vhs
+ echo

+ ./arkade get vhs --arch x86_64 --os mingw --quiet
+ file /home/nikhilsharmawe/.arkade/bin/vhs.exe
/home/nikhilsharmawe/.arkade/bin/vhs.exe: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows
+ rm /home/nikhilsharmawe/.arkade/bin/vhs.exe
+ echo

Types of changes

[ ] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)

Documentation

[x] I have updated the list of tools in README.md if (required) with ./arkade get --format markdown
[ ] I have updated the list of apps in README.md if (required) with ./arkade install --help

Checklist:

[x] My code follows the code style of this project.
[x] My change requires a change to the documentation.
[x] I have updated the documentation accordingly.
[x] I've read the CONTRIBUTION guide
[x] I have signed-off my commits with git commit -s

[ ] I have tested this on arm, or have added code to prevent deployment

@NikhilSharmaWe

If updating or adding a new CLI to arkade get, run:

We need that output please.
Alex

@alexellis Could you please review?

We still need the output from go build && ./hack/test-tool.sh TOOL_NAME in the PR description please
And the PR will need a rebase - https://www.youtube.com/watch?v=8j0H6urZ-bU

@alexellis Rebased the PR and updated the PR description.


Auto mcp w/o MC

You should also update README.md, because it also describes MC processing with auto_MCP, e.g.: https://github.com/cta-observatory/magic-cta-pipe/blob/40d483d637f1a363e55472dedfe55a470afd520d/magicctapipe/scripts/lst1_magic/README.md?plain=1#L36

I checked all the changed files in here, and also zoomed over other modified files from Torino_auto_MCP branch to see if anything else should be removed, but except of updates in readme file I think you did it all already

Fixed the readme (also for tel_ids in the config file, which is the other open PR)

There are a couple of conflicts now. I'm trying to solve them

Oh yes thanks I will fix it now. In the mean time, there were some troubles with the merging with master (some 'conflicts' were not reported as conflicts but automatically solved in the wrong way). But they should be fixed now


Crate grex did not build

Crate name: grex
Build failure link: https://docs.rs/crate/grex/0.3.1/builds/210840
Additional details:
The problem is dependent crate matrixmultiply v0.2.3.
The error is array lengths can't depend on generic parameters.
This bug has been reported already in bluss/matrixmultiply#50.
Seems to be a problem with the current Rust nightly as reported in rust-lang/rust#67743.

Ping me when this gets fixed upstream and I can manually schedule a rebuild. This is hard to fix in general, see #464 and #506

I'll do. It is really unfortunate that you cannot use an older nightly or stable Rust for building the docs. This would solve the problem instantly.

Using stable is unfortunately not possible, as docs.rs uses (a lot of) unstable features to build documentation. Using another nightly is... doable, but complicated :(


a training detail of ILN

Hi Bin Yang,
I have a question regarding model training. In ILN, the query rays are defined by the vertical angle range of the lidar and the number of lines. However, unlike your approach of uniform downsampling (which changes the vertical angle range), ILN samples data with different resolutions while keeping the same vertical angle.
Specifically, I explain this with the following code:
if(down_sample):
    lidar_in = copy.copy(lidar_out)
    lidar_in['channels'] = np.int16(lidar['channels'] / downsample_rate[0])
    v_res = (lidar['max_v'] - lidar['min_v']) / (lidar['channels'] - 1)
    lidar_in['min_v'] = lidar_out['min_v'] + v_res * (downsample_rate[0] - 1) # change the min vertical angle
    lidar_in['points_per_ring'] = np.int16(lidar_out['points_per_ring'] / downsample_rate[1])
else:
    lidar_in = copy.deepcopy(self.lidar_out)
    lidar_in['channels'] = int(config['res_in'].split('_')[0])
    lidar_in['points_per_ring'] = int(config['res_in'].split('_')[1])

coord = generate_laser_directions(self.lidar_out)
coord = torch.unsqueeze(torch.tensor(normalization_queries(self.coord, self.lidar_in)), 0)

As you can see, when creating new query rays using downsampling, the minimum vertical angle needs to be changed. In ILN's experimental setup, it only requires changing the number of lidar lines (e.g., from 64 to 16). Ignoring this aspect might lead to incorrect neighborhood selection and weight prediction. I would like to know if you considered this in your training of ILN?
Thank you for your patience and I look forward to your response.

Hi,
thank you for your questuion.
yes, as ILN is not a pixel-wise super-resolution method, we have considered using the same downsampling way is not suitable. So for all those training, we used the implementation from their source code. Only changes is the data loader for our custom dataset (loading 64 beam dataset). For any other pre-processing steps including data augmentation and transformations,  we used the default settings of the individual approach.
Best,
Bin

Thank you very much for your response. I would like to confirm a point: when creating the query rays for ILN, did you consider the change in minimum vertical angle caused by downsampling? The ILN source code does not take this into account, as it is only trained on virtual datasets. I trained ILN on two datasets (CARLA and KITTI) and found that the accuracy I achieved was significantly higher than what was reported in your paper, so I suspect there might be some differences in implementation details.
Apologies for any inconvenience caused. Looking forward to your response.

Hi, thank you for your questuion.
yes, as ILN is not a pixel-wise super-resolution method, we have considered using the same downsampling way is not suitable. So for all those training, we used the implementation from their source code. Only changes is the data loader for our custom dataset (loading 64 beam dataset). For any other pre-processing steps including data augmentation and transformations, we used the default settings of the individual approach.
Best, Bin

Thank you very much for your response. I would like to confirm a point: when creating the query rays for ILN, did you consider the change in minimum vertical angle caused by downsampling? The ILN source code does not take this into account, as it is only trained on virtual datasets. I trained ILN on two datasets (CARLA and KITTI) and found that the accuracy I achieved was significantly higher than what was reported in your paper, so I suspect there might be some differences in implementation details.
Apologies for any inconvenience caused. Looking forward to your response.

Hi, thank you for your questuion.
yes, as ILN is not a pixel-wise super-resolution method, we have considered using the same downsampling way is not suitable. So for all those training, we used the implementation from their source code. Only changes is the data loader for our custom dataset (loading 64 beam dataset). For any other pre-processing steps including data augmentation and transformations, we used the default settings of the individual approach.
Best, Bin

Do you mean the difference in FoV of two datasets? If yes, we have changed the sensor configuration for KITTI dataset, also for DurLAR. As you said, ILN has actually only trained on synthetic dataset. For other details in the code, we did not add further modiftications. Do you obtain the improvement on both datasets? Because at least in CARLA, I don't think we have trained in a wrong way.  In supplementary, we have also trained ILN with different upsampling rates and we actually get even much better results compared to the original paper.

No, I am referring to the difference in FoV o fdifferent resolutions on the same dataset. ILN creates the vertical angle of each scan line by using
np.linspace(start=lidar['min_v'], stop=lidar['max_v'], num=lidar['channels'])

However, uniform downsampling will change the size of min_v. I have drawn a simple diagram, with the upper part showing the downsampling method used in your paper, and the lower part showing the separate sampling method adopted by ILN."

Thank you very much for your response. I would like to confirm a point: when creating the query rays for ILN, did you consider the change in minimum vertical angle caused by downsampling? The ILN source code does not take this into account, as it is only trained on virtual datasets. I trained ILN on two datasets (CARLA and KITTI) and found that the accuracy I achieved was significantly higher than what was reported in your paper, so I suspect there might be some differences in implementation details.
Apologies for any inconvenience caused. Looking forward to your response.

Hi, thank you for your questuion.
yes, as ILN is not a pixel-wise super-resolution method, we have considered using the same downsampling way is not suitable. So for all those training, we used the implementation from their source code. Only changes is the data loader for our custom dataset (loading 64 beam dataset). For any other pre-processing steps including data augmentation and transformations, we used the default settings of the individual approach.
Best, Bin

Do you mean the difference in FoV of two datasets? If yes, we have changed the sensor configuration for KITTI dataset, also for DurLAR. As you said, ILN has actually only trained on synthetic dataset. For other details in the code, we did not add further modiftications. Do you obtain the improvement on both datasets? Because at least in CARLA, I don't think we have trained in a wrong way. In supplementary, we have also trained ILN with different upsampling rates and we actually get even much better results compared to the original paper.

No, I am referring to the difference in FoV of different resolutions on the same dataset. ILN creates the vertical angle of each scan line by using
np.linspace(start=lidar['min_v'], stop=lidar['max_v'], num=lidar['channels'])

However, uniform downsampling will change the size of min_v. I have drawn a simple diagram, with the upper part showing the downsampling method used in your paper, and the lower part showing the separate sampling method adopted by ILN.

Thank you very much for your response. I would like to confirm a point: when creating the query rays for ILN, did you consider the change in minimum vertical angle caused by downsampling? The ILN source code does not take this into account, as it is only trained on virtual datasets. I trained ILN on two datasets (CARLA and KITTI) and found that the accuracy I achieved was significantly higher than what was reported in your paper, so I suspect there might be some differences in implementation details.
Apologies for any inconvenience caused. Looking forward to your response.

Hi, thank you for your questuion.
yes, as ILN is not a pixel-wise super-resolution method, we have considered using the same downsampling way is not suitable. So for all those training, we used the implementation from their source code. Only changes is the data loader for our custom dataset (loading 64 beam dataset). For any other pre-processing steps including data augmentation and transformations, we used the default settings of the individual approach.
Best, Bin

Do you mean the difference in FoV of two datasets? If yes, we have changed the sensor configuration for KITTI dataset, also for DurLAR. As you said, ILN has actually only trained on synthetic dataset. For other details in the code, we did not add further modiftications. Do you obtain the improvement on both datasets? Because at least in CARLA, I don't think we have trained in a wrong way. In supplementary, we have also trained ILN with different upsampling rates and we actually get even much better results compared to the original paper.

I see. For that, we did not adjust the min_v after downsampling. We use the same configuration for high and low resolution data from the same dataset

Thank you for your patient response. I think this explains why only ILN is unable to match the characteristic line pattern of the LiDAR on the ground.

Thank you for your patient response. I think this explains why in your result, there is only ILN unable to match the characteristic line pattern of the LiDAR on the ground.

No problem and thank you for the discussion. By the way, I'm not sure whether that's the main reason for the reconstruction result of ILN. The line patterns are not shifted but upsampled repeatedly, and we found the case can be observed overall in the scene, especially in regions that are far from the sensor origin, which is due to the sparsity of points.

感谢您的耐心回复。我认为这解释了为什么在您的结果中，只有 ILN 无法匹配地面上 LiDAR 的特征线模式。

没问题，感谢您的讨论。顺便说一句，我不确定这是否是ILN重建结果的主要原因。线型没有移动，而是反复上采样，我们发现在场景中可以观察到这种情况，尤其是在远离传感器原点的区域，这是由于点的稀疏性。

I think I can explain this phenomenon briefly: ILN finds the four nearest neighboring points on the image by querying the ray. Suppose there are three adjacent scan lines on the ground, $ijk$, with corresponding distances $r_i < r_j < r_k$. If a query ray originally between the $i$ and $j$ scan lines is incorrectly moved to between $j$ and $k$, the interpolation algorithm cannot be optimized, because the interpolation algorithm is a convex combination of the neighboring distances, i.e., between $r_j$ and $r_k$. In reality, the ground truth lies between $r_i$ and $r_j$. The final result is that the network optimizes it to $r_j$, and the visual effect is that the same scan line is repeatedly upsampled.

Thank you for your patient response. I think this explains why in your result, there is only ILN unable to match the characteristic line pattern of the LiDAR on the ground.

No problem and thank you for the discussion. By the way, I'm not sure whether that's the main reason for the reconstruction result of ILN. The line patterns are not shifted but upsampled repeatedly, and we found the case can be observed overall in the scene, especially in regions that are far from the sensor origin, which is due to the sparsity of points.

I think I can explain this phenomenon briefly: ILN finds the four nearest neighboring points on the image by querying the ray. Suppose there are three adjacent scan lines on the ground, ijk, with corresponding distances ri<rj<rk. If a query ray originally between the i and j scan lines is incorrectly moved to between j and k, the interpolation algorithm cannot be optimized, because the interpolation algorithm is a convex combination of the neighboring distances, i.e., between rj and rk. In reality, the ground truth lies between ri and rj. The final result is that the network optimizes it to rj, and the visual effect is that the same scan line is repeatedly upsampled.

Thank you for your patient response. I think this explains why in your result, there is only ILN unable to match the characteristic line pattern of the LiDAR on the ground.

No problem and thank you for the discussion. By the way, I'm not sure whether that's the main reason for the reconstruction result of ILN. The line patterns are not shifted but upsampled repeatedly, and we found the case can be observed overall in the scene, especially in regions that are far from the sensor origin, which is due to the sparsity of points.

I draw a diagram for it. The red line is corresponding to the situation i explained in this comment.

I think I can explain this phenomenon briefly: ILN finds the four nearest neighboring points on the image by querying the ray. Suppose there are three adjacent scan lines on the ground, ijk, with corresponding distances ri<rj<rk. If a query ray originally between the i and j scan lines is incorrectly moved to between j and k, the interpolation algorithm cannot be optimized, because the interpolation algorithm is a convex combination of the neighboring distances, i.e., between rj and rk. In reality, the ground truth lies between ri and rj. The final result is that the network optimizes it to rj, and the visual effect is that the same scan line is repeatedly upsampled.

Thank you for your patient response. I think this explains why in your result, there is only ILN unable to match the characteristic line pattern of the LiDAR on the ground.

No problem and thank you for the discussion. By the way, I'm not sure whether that's the main reason for the reconstruction result of ILN. The line patterns are not shifted but upsampled repeatedly, and we found the case can be observed overall in the scene, especially in regions that are far from the sensor origin, which is due to the sparsity of points.

I draw a diagram for it. The red line is corresponding to the situation i explained in this comment.

Thank you for the detailed explanation! The diagram is also intuitive to understand. Learnt a lot :)


Invalid device pointer. Aborting!

Hi there,
well, as the title says... buid was succesful, udev rules are in place, etc. but then I'm getting that message whenever I try to run ./procon_driver
I don't have an original Nintendo pro controller, but one of those so-called clones (the company is called Chereeki, I think... go figure !). Such nintendo pro controller clone works flawlessly in Yuzu, for example, but I cannot make it work in Steam Linux, hence I thought I could use your driver.
But after the invalid device pointer message, I take it that the clone isn't answering exactly as your driver is expecting, and thus I'm out of luck, am  I not ?
thanks !

i got the same error but running with sudo fixed it.

i got the same error but running with sudo fixed it.

Same!


fix(roomcard): hide long display names on roomcard

fix #1557
Before:

After:

is it better to hide instead of word break thing?

Do we prefer one over the other?

I think word break so it doesn't hide legit long descriptions

Cool, I'll update this tomorrow with that change.
Can I just clarify what you mean by

word break thing

?
Do we want ... at the end of the truncated value?
Do we want see more?
If we do want a see more, how will it expand? Down, across, scroll?
This has made me think, what if we adopt something similar to the way spotify displays text that is too wide for the screen where it marquees?
https://i.gyazo.com/76a39555b1cf12a35331537f06fbaa97.mp4

oh you know what, I was thinking this was the description, but this is just someone with a really long name. I think I'm cool with just hiding it,


Can't install using PlatformIO due to missing version field

When I attempt platformio lib install Nanopb I get an AssertionError:

assert set(["name", "version"]) <= set(tmpmanifest.keys())
AssertionError

NanoPB's library.json file is missing a 'version' field which is causing it to not be able to be installed by the PlatformIO Library Manager (version 3.18).

Does it work better now?
For some reason http://docs.platformio.org/en/stable/librarymanager/config.html#version says version number is not required if repository is specified.

I know I saw that as well and I was very confused. Maybe it's because the
tag names are prefixed with 'nanopb' so that platformio can't infer the
version number?
On Fri, Nov 18, 2016 at 21:37 Petteri Aimonen<EMAIL_ADDRESS>wrote:

Does it work better now?
For some reason
http://docs.platformio.org/en/stable/librarymanager/config.html#version
says version number is not required if repository is specified.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/nanopb/nanopb/issues/222#issuecomment-261695121, or mute
the thread
https://github.com/notifications/unsubscribe-auth/ACLkDBaCyiA5bj_PbmzBTs7Mh1PsAjdBks5q_osqgaJpZM4K3Eh9
.

Yes it installs version 0.3.8-dev now. Unfortunately this fix won't work for anyone wanting to use a previous version. For my project I've only had time to test with 0.3.6 so I've gone ahead and forked that tag, patched the version, and listed my own repository as the dependency. I think this would work as a workaround for anyone else in the same situation.

Hmm, I wonder if it would work if one made duplicate tags out of the old versions?
I have now pushed tags "0.3.6" and "0.3.7" if you want to try it out.

Thanks for the duplicate tags, I see them and can install Nanopb using a repo url referencing the tag:
platformio lib install https://github.com/nanopb/nanopb.git\#0.3.6

Unfortunately I cannot install Nanopb from the PlatformIO registry using a command like
platformio lib install<EMAIL_ADDRESS>// Note: this command will work with 0.3.8-dev

I think this might be due to the possibility that the PlatformIO library crawler has not re-indexed the repo since the change. At this point though I am satisfied that I can reference the library and version by url.

Fix released in nanopb-0.3.8.


Skinning Chrome style (2023 refresh)

What feature or improvement do you think would benefit Files?
I am amazed at how slick looks the new Chrome 2023 refresh.
The tabs and address bar flat clean style, and the reactivity/smoothness of the tabs when you move it in/out of a window or within the current window.
Would be could if it was possible to get Files to have different styles.
Requirements
Ability to skin, change the visual assets.
Files Version
3.0.3
Windows Version
Windows 11 Pro 23H2 22635.2700
Comments
No response

For tabs to be smooth Microsoft would have to update them in WinUI and for theming follow the instructions at https://files.community/docs/configuring/custom-themes

@Yabino thanks for the feedback, you can build from source and customize the UI to fit your taste.

Well, I'm only a basic end user. It's too deep for me to dive in the code. Thanks anyway!


first iteration for the opencollective footer banner

we should add an e2e test for it that checks that it's serving properly.


serve.json schema should include the serveConfigurations property

Category

[ ] Question
[ ] Typo
[x] Bug
[ ] Additional article idea

Expected or Desired Behavior
The schema referenced in serve.json scaffolded using v1.3.4 should correctly document the serveConfigurations property.
Observed Behavior
The schema referenced in serve.json doesn't reference the serveConfigurations property, making it inconvenient for developers to change the entries to their specific needs.
Steps to Reproduce
View the contents of https://dev.office.com/json-schemas/core-build/serve.schema.json and see that it doesn't reference the serveConfigurations property.

Thanks for reporting this. We have had some issues on getting the json schema file updated at the dev.office.com and are working on this right now. We should have this sorted out in a day or two.

Still not referenced. Any News about this one?

Is this Bug got fixed? asking it because we are also getting same issue which was reported by @waldekmastykarz

I'm getting this warning
SPFx 1.8.2 which has schema URL https://developer.microsoft.com/json-schemas/core-build/serve.schema.json but dev.office.com appears identical


Include unsupported key ID name in error message

Includes the submitted key ID name in the error message that a user gets when using an unsupported key ID name.

Maybe we can eventually also include the key name that is actually supported.

Done in https://github.com/dfinity/chainkey-testing-canister/pull/4/commits/c8727615048057ba0c14407b2d914ad7110c9026


Players can't open crates

When a player left-clicks to view the contents of the box, it does nothing.
I think this is because the spawn is protected by a WorldGuard region, because outside the spawn it works.
The "use", "chest-access" and "interact" options are in ALLOW

The spawn protection is already at 0

I have found the problem, it's because players are in adventure mode.


Build fbximporter on mac

AB#160954

The "Load and iterate" test is now only executed on Windows, due to the Windows specific memory tests. However, in-between the memory tests there is a test that should also be executed on Mac and Linux, which prints test related information to the terminal. Hence, it would be better to exclude only the Windows memory tests on other systems than Windows, not the entire test. For example:
TEST_CASE("Load and iterate", "[FBX sdk]")
{
#ifdef _WIN32
    VS_MEM_CHECK
#endif
    std::cout << std::string("Using file path: ") << get_test_model_file_path() << std::endl;
#ifdef _WIN32
    _CrtMemState s1, s2, s3;
    _CrtMemCheckpoint(&s1);
#endif
    FbxInfo fbx_info(get_test_model_file_path(), false);
    std::cout << fbx_info.print_info();
#ifdef _WIN32
    _CrtMemCheckpoint(&s2);
    _CrtMemDifference(&s3, &s1, &s2);
    _CrtMemDumpStatistics(&s3);
#endif
}

or
#ifdef _WIN32
TEST_CASE("Load and iterate", "[FBX sdk]")
{
    VS_MEM_CHECK
    std::cout << std::string("Using file path: ") << get_test_model_file_path() << std::endl;
    _CrtMemState s1, s2, s3;
    _CrtMemCheckpoint(&s1);
    FbxInfo fbx_info(get_test_model_file_path(), false);
    std::cout << fbx_info.print_info();
    _CrtMemCheckpoint(&s2);
    _CrtMemDifference(&s3, &s1, &s2);
    _CrtMemDumpStatistics(&s3);
}
#else
TEST_CASE("Load and iterate", "[FBX sdk]")
{
    FbxInfo fbx_info(get_test_model_file_path(), false);
    std::cout << fbx_info.print_info();
}
#endif


Task34

SourceCode/2024/Basics-April2024/anil/Task34/project.json
Performer.xaml
* Log Message display name is defined many times. Try to define it only once and reuse throughout the workflow.
* Names of activities should give a clear indication of how they are being used. For example, instead of "Get Transaction Item", consider something like "Retrieve Transaction Details".
* Variable add_result does not respect the set pattern. Make sure all variables follow the naming convention.
* Variable sub_result does not respect the set pattern. Make sure all variables follow the naming convention.
* Flowchart is used in a secondary layer. Consider moving it to the top layer for better maintainability and readability.
* Potential infinite loop detected in the Flowchart starting with activity Get Transaction Item. Add a termination condition or document the purpose of the loop.

Score: 4/5
Subtraction.xaml
* Log Message not used in workflow Subtraction. Consider adding log messages to help understand the flow path and identify errors.
* Argument In_num1 does not respect the set pattern. Make sure all arguments follow the naming convention.
* Argument In_num2 does not respect the set pattern. Make sure all arguments follow the naming convention.
* Argument sub_result does not respect the set pattern. Make sure all arguments follow the naming convention.
* Activity Assign has a default name. Try to add a more descriptive title to help understand what the activity does.

Score: 4/5
Dispatcher.xaml
* Log Message not used in workflow Dispatcher. Consider adding log messages to help understand the flow path and identify errors.
* Activity For Each Row in Data Table has a default name. Try to add a more descriptive title to help understand what the activity does.
* Activity Add Queue Item has a default name. Try to add a more descriptive title to help understand what the activity does.

Score: 3/5
Addition.xaml
* Log Message not used in workflow Addition. Consider adding log messages to help understand the flow path and identify errors.
* Argument In_num1 does not respect the set pattern. Make sure all arguments follow the naming convention.
* Argument In_num2 does not respect the set pattern. Make sure all arguments follow the naming convention.
* Argument add_result does not respect the set pattern. Make sure all arguments follow the naming convention.
* Activity Assign has a default name. Try to add a more descriptive title to help understand what the activity does.

Score: 4/5
NoFile
* Your organization requires your project to have an Automation Hub URL defined. Add the missing information in Project Settings.

Score: 1/5
Total Score: 16/20

@anil0972
Task -31
Code verified.
Task -32
Code verified.
Task -33
Code verified.
Task -34
Code verified.


Mosaic 2x2 stats table

This PR intends to resolve https://github.com/VEuPathDB/web-eda/issues/1384.
As a first step, a groundwork for typing the new Mosaic 2x2 stats table (backend response) is made. Since backend response should be established for this work, this PR is branched out from Jeremy's nice PR (https://github.com/VEuPathDB/web-eda/pull/1608) (update/2x2-params-1575 branch). So, for now, the base branch is set to update/2x2-params-1575 but it may be changed to main branch later if update/2x2-params-1575 is merged.
It seems to work fine to see correct stats table props with this PR, so perhaps we just need to make a table (with requested styles) and map the props to corresponding table cells. Just in case, I am leaving a screenshot of the requested table format in the following:

Mosaic 2x2 Stats table is now implemented. Screenshots for both with or without facet variables are attached in the following:

without facet variable

with facet variable

Looking into this now, but in the meantime we should update this code now that we have the stats tab.

Looking into this now, but in the meantime we should update this code now that we have the stats tab.

Thanks @jernestmyers By the way, can you please elaborate what the update means?

Yes, we currently don't render "Please select all *required parameters" in the 2x2 stats tab because of this code.
So we just need to remove the comment and the isTwoByTwo conditions like so:
showRequiredInputsPrompt = { !areRequiredInputsSelected }

I'm going to approve, but I do have some other thoughts for possible improvement.

When should we create a new component file? Our viz implementation files get rather large and complex. Would it help to break things off into their own file? In this case, couldn't TwoByTwoStats be its own component? This could be a topic at the next frontend dev meeting.
I'm left wondering if there's a more DRY way to render both mosaic tables, though it may not be worth the debt since the styling could be tricky.
I prefer the more uniform spacing that the mockup displays for the actual data than what's currently implementing. The center (95% CI) column's data feels a little jumbled because it is so close to the Value column's data. I think we should add some space between the Value and 95% CI columns in a way that tries to match the space between 95% CI and P-value.

Overall, very nice work!

@jernestmyers Thank you for your detailed comments. For your #1, yes I tend to agree that the stats table may become a separate component out of Mosaic Viz, but I will leave it as a technical debt :). For #2, yes that specific styling prevents from minimizing DRY. Finally, yes I noticed that too. It is because value and P-value are right-aligned while CI is center-aligned. Perhaps your suggestion may work by having some space. Will test it. 👍

@jernestmyers I have added some space for 95% CI and I think that it looks better than before: a screenshot is attached in the following.


code to read splits in the devkit, with tests

@AndreiBarsan sorry, could you please remind me how this is different from #27?

I think #27 just referred to storing the splits somehow, and I guess we settled on the bucket because they are a bit too big for the repo/package, right?
This PR would cover the actual loading of splits. Once #35 lands both should be solved!

I guess we settled on the bucket because they are a bit too big for the repo/package, right?

Yep! Storing as text was taking 400+ MB, too much for a git repo IMO.

This PR would cover the actual loading of splits. Once https://github.com/pit30m/pit30m/pull/35 lands both should be solved!

Gotcha, thanks!


"Real" continuous scanning

I have a need to detect only barcodes that have been visible to the camera for a certain time.
For this use case it would be useful if we could get a mode where continuous scanning would deliver a continuous stream of events, not only one event for each barcode. What I would like is a steady flow of events, even when the camera is still seeing the same barcode. That way one could determine if a barcode has been visible for a consecutive amount of time or if it just flipped by the camera quickly.
I guess one (ugly) solution would be to use single scan mode and each time a barcode is scanned start a timer that would perform a scan after X amount of time, and if the same barcode is still visible the app would assume that it has been present between the first and second scan.
Another solution would be to have a setting in the plugin, where a barcode has to be visible to the plugin at least X amount of time to be considered a "hit", although it seems that a continuous mode that delivers a steady flow of events to the app would be more versatile.
A third option would be if the plugin implemented both a "enter" and "leave" event, so the app could determine how long the barcode was visible.

Hi @magnus-lpa ,
Thanks for using the plugin. I guess the single event is applicable to android only as iOS will give a continuous stream of scanned barcode/QR have you tried it on iOS also? I'll try some fixes for the android part and will update you on this.


More gateway fixes.

Can you describe what's going on here?

I added some comments in the source to help explain to people reading it next time.
After the last fix, I noticed that walls stopped being built, so I added some logging and noticed that it was trying to build within 1 square of an exit, diagonally. So, most of this is to fix that. There's some aesthetic changes for mixing walls and ramparts that can potentially result in a completely walled off exit, but I suspect that given how long this has gone without working, that risk isn't much of an issue.

Did you do a visual on the walls that show up? Any chance you can screenshot the visual and show it?

http://prntscr.com/j5else


Groups management

Management of groups and links with users

Thank you for this contribution! I can see a lot of work went into this one. Only slight changes are required to conclude this

I sent the suggested fixes!

Thank you! Your contribution is appreciated and will be included in v 0.2a shortly


[T2A3][T16-A2]Chan Khai Ern Edwin

Ready for Review

Sorry for the delay, been delayed by CNY stuffs

closing this PR as there is nothing much to review!


Keycloak integration - Peer detail does not show Username

After integrating Keycloak with Netbird, everything works fine but i have an issue of the username does not show on the peer detail (check the screenshot).

I've followed the keycloak integration documentation based from netbird.
I'm using keycloak with Active Directory integration.
Thank you.

me too

Hey @gcheewah & @wuchang1123
The user email should be shown there. This information comes from the IDP.  We implemented only the Auth0 IDP integration to fetch user data. Even thought the OIDC integration works with Keycloak, the IDP API integration with Keycloack is yet to be implemented.
Would you like to contribute? Here is a simple interface and Auth0 implementation:
https://github.com/netbirdio/netbird/blob/main/management/server/idp/idp.go#L12
https://github.com/netbirdio/netbird/blob/main/management/server/idp/auth0.go#L23

Hey @gcheewah & @wuchang1123
The user email should be shown there. This information comes from the IDP. We implemented only the Auth0 IDP integration to fetch user data. Even thought the OIDC integration works with Keycloak, the IDP API integration with Keycloack is yet to be implemented.
Would you like to contribute? Here is a simple interface and Auth0 implementation: https://github.com/netbirdio/netbird/blob/main/management/server/idp/idp.go#L12
https://github.com/netbirdio/netbird/blob/main/management/server/idp/auth0.go#L23
As a workaround, we could put Keycloak userID there. Would it suffice?

Yes, userID should be sufficient.
Will check out the auth0 as well.
Thanks.

See docs https://docs.netbird.io/selfhosted/identity-providers#step-9-add-manage-users-role-to-netbird-backend for details on how to configure idp management integration, supporting name/email fetch from the IDP.


Scalastyle fixes

What changes were proposed in this pull request?
Fix scalastyle
How was this patch tested?
Run ./dev/scalastyle

Merging NOCR since so simple and passed tests

+1, I noticed this as well


feat: optimize manually picked peaks

addresses #63

Should we add those properties xOptimized, yOptimized (and other variables ???).
It also has impact on autoPeakPicking.
I think it could make sense to use those optimized values.

@lpatiny thinking about this, the most compatible change seems to be use the behavior we have atm in the PR given that the old default was to return "optimized" values when the optimized flag was used and to return non-optimized ones by default

Codecov Report

Merging #67 (31dc7f5) into master (f4c3ecf) will increase coverage by 0.36%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##           master      #67      +/-   ##
==========================================
+ Coverage   85.59%   85.95%   +0.36%
==========================================
  Files          21       21
  Lines         576      591      +15
  Branches      187      201      +14
==========================================
+ Hits          493      508      +15
+ Misses         82       81       -1
- Partials        1        2       +1

Impacted Files
Coverage Δ

src/util/peakPicking.ts
100.00% <100.00%> (ø)

src/jsgraph/getNormalizationAnnotations.ts
7.14% <0.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 f4c3ecf...31dc7f5. Read the comment docs.


Lanes: sometimes not shown at all

Lanes are in the Response:
https://gist.github.com/daniel-j-h/a59ec9c402930ff533261f5c98aef552
But not showing up in the UI:
http://map.project-osrm.org/?z=17&center=33.005087%2C-96.731476&loc=33.003234%2C-96.731363&loc=33.006675%2C-96.733879&hl=en&alt=0

(btw the intersection a bit east is great for testing lanes)

Actually there are no turn:lanes on the route except of this part of Claster Road (BTW with no lanes=4 tag) but U-turn maneuver here is on the next traffic lights point on the way with no turn:lanes. So IMHO all looks right (except missing data on the ways)


Use pprint for the CMF DNA

With pprint you can create Python interpretable strings, which in turn can be saved to the hard drive as *.py files. This enables to import them easily again if needed.
For importing those files see:
https://stackoverflow.com/questions/17123719/importing-lists-from-multiple-files-using-a-for-loop-in-python
For general explanation see "Automate the boring stuff with python" page 185

or use json files?


Collapsable dropdown palette categories

This PR contains the relevant commits from #3159 by @jennet-zamanova rebased onto master. Her base branch had drifted enough from master than this was a much easier way to resolve merge conflicts.
Authorship should be changed to Jennet on merge if possible.
The StackPanel used in the component palette is changed to a new class using the DisclosurePanel class to allow category panels to be closed when clicked as well as opened. This is a commonly requested feature for the palette panel because the User Interface category is large enough that other component categories are often not visible.
Closes #3159

Note that this will have to be manually merged at the command line to retain authorship.

Converting to draft, both so that it won't be committed without the attribution fixed and because it should probably be merged after the selectable ui branch along with the css changes to make the new palette panel match the Neo layout

@AppInventorWorkerBee OK to test


codec/audio: fix ChannelLayoutIter.best()

Somehow the condition cur.channels() > cur.channels() slipped in which will
always be false. The correct condition is cur.channels() > acc.channels().

I'm sorry, I don't know how that happened. :sob:

It's okay, I should have noticed it :panda_face:


How to calculate an expression for each row of a large  data table without affecting performance

I want to calculate an expression for each row of a data table and add a new column to the data table based on the result got.

To improve performance I suggest follow these recommendations:

Use variables dictionary instead of concatenation IDictionary<string, EvaluatorValue> variables
Tune your custom functions: dont allocate extra memory, etc
If possible store FormulaNodes somewhere and pass to evaluator it instead of string formula.

This is a general recommendarions, for more specific I need more details, if possible - examples

In a data table, a formula column allows you to perform calculations based on values from other columns. Let's say you have a data table with columns "Quantity" and "Price," and you want to add a formula column for "Total" (Quantity multiplied by Price). The formula in the "Total" column multiplies the corresponding values in the "Quantity" and "Price" columns.
How to perform this operation using our engine

If we work with numbers only so only these recommendations:

use single evaluator object
Use variables dictionary IDictionary<string, EvaluatorValue> variables
If possible store FormulaNodes somewhere and pass to evaluator it instead of string formula

3 is a really optional you can go with defaults (string formula).
So design can be like:
loop by rows
from the row take two variables Quantity and Price
send to formula
store in a Total column
snippet:
    static void Main()
    {
        var ns = CreateNoString();

        // store a single instance (or one per thread)
        var variables = new Dictionary<string, EvaluatorValue>();

        // fetch data from the row
        var quantity = 14;
        var price = 123.675;

        // update dictionary
        variables["Quantity"] = quantity;
        variables["Price"] = price;

        // calculate total
        var total = ns.CalcNumber("Quantity * Price", variables); // 1731,45
    }

So you have variables like A2 B2, they should be in a dictionary. Also you have to store all cell formulas with linking to cells somewhere to understand what formula should be reruned.
For example
formula: "A2B2"
I store this CellFormula
After changing A2 or B2 you should say "Hey, I updated A2 has anybody listen to this cell?"
our Total cell with formula (A2B2) will take this notification
take values from A2 and B2
put into dictionary
send to evaluator
update Total cell value
OR, if this is too difficult just run for every formula and update all formulas after any changing ¯_(ツ)_/¯

Sure, if I were you I would add Interface into the row IVariablesContainer (if you can extend DataRow) and use row as is

    // calculate total
    var total = row["total"] =ns.CalcNumber("quantity * price", row); ;

without iterating you should implement some notification service, or maybe MediatR can be usefull here

I meant we can use it for notifications when some cell is changes we need to notify all cells with formula that uses it. Perhaps that's a bad solution, yes. But with notifications we don't need to run through the all rows.
I don't have a sample because I just imagine what can we do


Singular folder names rather than plural

consider aligning with standard gitflow naming and use singular rather than plural folder names e.g. bugfix, release and feature rather than bugfixes, releases and features. more letters, longer branch names, more typing = :(

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

ID: 330532da-d568-b010-a154-62afb1844e4a
Version Independent ID: 4efad37d-4ec2-033e-51b1-b9f588e675c6
Content: Require branches to be created in folders
Content Source: docs/repos/git/require-branch-folders.md
Product: devops
GitHub Login: @steved0x
Microsoft Alias: sdanie

this is a small quick change I think so not sure why it has gone stale?

Makes sense, branches should be for a single thing


Removed Xml doc generation from debug target.

Pull Request Test Coverage Report for Build 65468

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 71.687%

Totals

Change from base Build 65465:
0.0%

Covered Lines:
4512

Relevant Lines:
6294

💛  - Coveralls

:heavy_check_mark: No Binary Compatibility issues for Microsoft.Bot.Builder.dll
:heavy_check_mark: No Binary Compatibility issues for Microsoft.Bot.Builder.AI.Luis.dll
:heavy_check_mark: No Binary Compatibility issues for Microsoft.Bot.Builder.AI.QnA.dll
:heavy_check_mark: No Binary Compatibility issues for Microsoft.Bot.Builder.ApplicationInsights.dll
:heavy_check_mark: No Binary Compatibility issues for Microsoft.Bot.Builder.Azure.dll
:heavy_check_mark: No Binary Compatibility issues for Microsoft.Bot.Builder.Dialogs.dll
:heavy_check_mark: No Binary Compatibility issues for Microsoft.Bot.Builder.TemplateManager.dll
:heavy_check_mark: No Binary Compatibility issues for Microsoft.Bot.Configuration.dll
:heavy_check_mark: No Binary Compatibility issues for Microsoft.Bot.Connector.dll
:heavy_check_mark: No Binary Compatibility issues for Microsoft.Bot.Schema.dll


How can I create diagonal dashed lines (a linear gradient fill?) inside of bar charts in

The Problem
I am trying to fill the bar charts with diagonal dashed lines like in this image:

This is part of our accessibility requirements.
I can get the charts as per the specs, but can't figure out how to add the dashed lines in the bar charts. This is what I have so far.

Here is the code I have for it:
 <VictoryStack
        animate={{ duration: 500 }}
        height={60}
        padding={{ left: 15, top: 0, bottom: 30, right: 15 }}
        horizontal
        style={{ data: { width: 24 } }}>
        <VictoryBar
          style={{ data: { fill: Colors.score.detractors } }}
          data={[{ x: 1, y: detractor }]}
          cornerRadius={
            passive === 0 && promoter === 0
              ? {
                bottomLeft: 10,
                bottomRight: 10,
                topLeft: 10,
                topRight: 10,
              }
              : { bottomLeft: 10, bottomRight: 10 }
          }
          labels={() => `${detractor}%`}
          labelComponent={
            <VictoryLabel
              x={45}
              dy={25}
              textAnchor="end"
              verticalAnchor="start"
              style={labelStyle}
            />
          }
        />

        <VictoryBar
          animate={{ duration: 500 }}
          style={{ data: { fill: Colors.score.passives } }}
          data={[{ x: 1, y: passive }]}
          cornerRadius={
            detractor === 0 && promoter === 0
              ? {
                bottomLeft: 10,
                bottomRight: 10,
                topLeft: 10,
                topRight: 10,
              }
              : detractor === 0
                ? { bottomLeft: 10, bottomRight: 10 }
                : promoter === 0
                  ? { topLeft: 10, topRight: 10 }
                  : {}
          }
          labels={() => `${passive}%`}
          labelComponent={
            <VictoryLabel
              x={200}
              dy={25}
              textAnchor="end"
              verticalAnchor="start"
              style={labelStyle}
            />
          }
        />

        <VictoryBar
          animate={{ duration: 500 }}
          style={{ data: { fill: Colors.score.promoters } }}
          data={[{ x: 1, y: promoter }]}
          cornerRadius={
            passive === 0 && detractor === 0
              ? {
                bottomLeft: 10,
                bottomRight: 10,
                topLeft: 10,
                topRight: 10,
              }
              : { topLeft: 10, topRight: 10 }
          }
          labels={() => `${promoter}%`}
          labelComponent={
            <VictoryLabel
              dx={0}
              dy={25}
              textAnchor="end"
              verticalAnchor="start"
              style={labelStyle}
            />
          }
        />
      </VictoryStack>

This is for just one of the stacked bar charts in the image, but the others are pretty much the same.
I've also asked this question in StackOverflow, but no luck so far.

@bityogi you will want to use an svg pattern fill. It will be similar to using a gradient fill like in this example: https://formidable.com/open-source/victory/docs/faq/#how-can-i-use-gradient-fills-in-victory


leetspeak dictionary does not catch 8 = B

Trou8ador! is given a score of 2, entropy of 33

8->b actually is recognized by the l33t matcher already. The issue is "Troubador" is an uncommon spelling -- "Troubadour" does appear in zxcvbn's dictionary.


Build failure on macOS

Build fails on macOS Monterey (ARM).

xxx@xxx maxcso-1.13.0 % make
c++ -c -W -Wall -Wextra -std=c++11 -Izopfli/src -I7zip -DNDEBUG=1 -Ilibdeflate -Wno-unused-parameter -Wno-unused-variable -pthread -O2 -o src/buffer_pool.o src/buffer_pool.cpp
In file included from src/buffer_pool.cpp:2:
src/buffer_pool.h:5:10: fatal error: 'uv.h' file not found
#include "uv.h"
^~~~~~
1 error generated.
make: *** [src/buffer_pool.o] Error 1

libuv installed with brew as directed.

Does it help to change #include "uv.h" to #include <uv.h>?
maxcso ought to compile fine on M1, but if something is causing it to compile as Intel to run under Rosetta, that could be another explanation.
-[Unknown]

Is libuv even installed on the system?

I have libuv installed with the same error.

New error with the above fix:
max.schaefer@mini:~/Downloads/maxcso$ make
make: pkg-config: Command not found
make: pkg-config: Command not found
make: pkg-config: Command not found
make: pkg-config: Command not found
make: pkg-config: Command not found
make: pkg-config: Command not found
c++ -c -W -Wall -Wextra -std=c++11 -I/Users/max.schaefer/Downloads/maxcso/zopfli/src -I/Users/max.schaefer/Downloads/maxcso/7zip -DNDEBUG=1 -I/Users/max.schaefer/Downloads/maxcso/libdeflate -Wno-unused-parameter -Wno-unused-variable -pthread    -O2 -o obj/src/buffer_pool.o /Users/max.schaefer/Downloads/maxcso/src/buffer_pool.cpp
In file included from /Users/max.schaefer/Downloads/maxcso/src/buffer_pool.cpp:2:
In file included from /Users/max.schaefer/Downloads/maxcso/src/buffer_pool.h:5:
In file included from /opt/homebrew/Cellar/libuv/1.48.0/include/uv.h:71:
/opt/homebrew/Cellar/libuv/1.48.0/include/uv/unix.h:46:10: fatal error: 'uv/threadpool.h' file not found
#include "uv/threadpool.h"
         ^~~~~~~~~~~~~~~~~
1 error generated.
make: *** [obj/src/buffer_pool.o] Error 1

@maxexcloo You need pkg-config installed.

Somehow missed that completely! Will give that a go, thanks 🙏