Error when casting local files in 0.9.2

When I try to cast a local file:
catt -d "My Chromecast" cast "$HOME/Media/test.mp4"

I get the following error:
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/catt/http_server.py", line 90, in do_GET
    copy_byte_range(mediafile, self.wfile, first, last)
  File "/usr/local/lib/python3.7/site-packages/catt/http_server.py", line 24, in copy_byte_range
    outfile.write(buf)
  File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socketserver.py", line 799, in write
    self._sock.sendall(b)
BrokenPipeError: [Errno 32] Broken pipe

Hmm, we've had these sorts of problems with local casting before, but apparently not entirely fixed. Could you provide some context, like type of media (codec etc.) and system info?

Sure.
System Info:
$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.14.3
BuildVersion:	18D109

Media Info:
$ mediainfo  "$HOME/Media/test.mp4"
General
Complete name                            : /Users/artbit/Media/test.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 1.95 GiB
Duration                                 : 1 h 42 min
Overall bit rate                         : 2 729 kb/s
Movie name                               : Test
Encoded date                             : UTC 2018-01-06 02:24:20
Tagged date                              : UTC 2018-01-06 02:24:20
Writing application                      : Lavf57.83.100
Comment                                  : Test

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile<EMAIL_ADDRESS>Format settings                          : CABAC / 4 Ref Frames
Format settings, CABAC                   : Yes
Format settings, ReFrames                : 4 frames
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 1 h 42 min
Bit rate                                 : 2 500 kb/s
Width                                    : 1 920 pixels
Height                                   : 856 pixels
Display aspect ratio                     : 2.25:1
Frame rate mode                          : Constant
Frame rate                               : 23.976 (23976/1000) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.063
Stream size                              : 1.78 GiB (92%)
Writing library                          : x264 core 152 r2851M ba24899
Encoding settings                        : cabac=1 / ref=4 / deblock=1:-1:-1 / analyse=0x3:0x113 / me=umh / subme=9 / psy=1 / psy_rd=1.00:0.15 / mixed_ref=1 / me_range=24 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-3 / threads=32 / lookahead_threads=4 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=50 / rc=2pass / mbtree=1 / bitrate=2500 / ratetol=1.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / cplxblur=20.0 / qblur=0.5 / vbv_maxrate=31250 / vbv_bufsize=31250 / nal_hrd=none / filler=0 / ip_ratio=1.40 / aq=3:1.00
Encoded date                             : UTC 2018-01-06 02:24:20
Tagged date                              : UTC 2018-01-06 02:24:20
Codec configuration box                  : avcC

Audio
ID                                       : 2
Format                                   : AAC LC
Format/Info                              : Advanced Audio Codec Low Complexity
Codec ID                                 : mp4a-40-2
Duration                                 : 1 h 42 min
Bit rate mode                            : Constant
Bit rate                                 : 224 kb/s
Channel(s)                               : 6 channels
Channel layout                           : C L R Ls Rs LFE
Sampling rate                            : 48.0 kHz
Frame rate                               : 46.875 FPS (1024 SPF)
Compression mode                         : Lossy
Stream size                              : 164 MiB (8%)
Language                                 : English
Default                                  : Yes
Alternate group                          : 1
Encoded date                             : UTC 2018-01-06 02:24:20
Tagged date                              : UTC 2018-01-06 02:24:20

When I cast without specifying the device, it plays the audio on my Google Home speaker, but when I specify my chromecast device, it throws the broken pipe error.

I've tried a different file, and it seems to be working.
General
Complete name                            : /Users/artbit/Media/test2.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/avc1)
File size                                : 1.45 GiB
Duration                                 : 1 h 32 min
Overall bit rate mode                    : Variable
Overall bit rate                         : 2 250 kb/s
Encoded date                             : UTC 2012-11-20 14:22:22
Tagged date                              : UTC 2012-11-20 14:22:22

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : High@L4
Format settings                          : CABAC / 4 Ref Frames
Format settings, CABAC                   : Yes
Format settings, ReFrames                : 4 frames
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 1 h 32 min
Bit rate                                 : 2 152 kb/s
Maximum bit rate                         : 9 301 kb/s
Width                                    : 1 920 pixels
Height                                   : 1 040 pixels
Display aspect ratio                     : 1.85:1
Frame rate mode                          : Constant
Frame rate                               : 23.976 (24000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.045
Stream size                              : 1.39 GiB (96%)
Writing library                          : x264 core 125 r2200 999b753
Encoding settings                        : cabac=1 / ref=4 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=3 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=8 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=240 / keyint_min=23 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=2pass / mbtree=1 / bitrate=2152 / ratetol=1.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / cplxblur=20.0 / qblur=0.5 / ip_ratio=1.40 / aq=1:1.00
Encoded date                             : UTC 2012-11-20 14:22:22
Tagged date                              : UTC 2012-11-20 14:24:35
Codec configuration box                  : avcC

Audio
ID                                       : 2
Format                                   : AAC LC
Format/Info                              : Advanced Audio Codec Low Complexity
Codec ID                                 : mp4a-40-2
Duration                                 : 1 h 32 min
Bit rate mode                            : Variable
Bit rate                                 : 96.0 kb/s
Maximum bit rate                         : 144 kb/s
Channel(s)                               : 2 channels
Channel layout                           : L R
Sampling rate                            : 48.0 kHz
Frame rate                               : 46.875 FPS (1024 SPF)
Compression mode                         : Lossy
Stream size                              : 63.3 MiB (4%)
Language                                 : English
Encoded date                             : UTC 2012-11-20 14:24:31
Tagged date                              : UTC 2012-11-20 14:24:35

This means that the broken pipe error must be related to something specific to the file I tried in https://github.com/skorokithakis/catt/issues/174#issuecomment-470189238

The crash is almost certainly caused by the chromecast not being able to play your media. I'm embarrassed to admit that we're currently not doing anything to avoid crashing when the chromecast does not support playback of certain local file content. Forgot about that.
@skorokithakis Any ideas?

Hmm, is a closing pipe the only thing that notifies us whether the Chromecast can play the file? That's not much to go on, but we can certainly exit with a "client disconnected, media type might not be supported" error or something similar.

Hmm, is a closing pipe the only thing that notifies us whether the Chromecast can play the file?

I'm afraid so.
We could look inside the header of the media file to determine if casting is possible. But that would mean new dependencies (possibly some that are not pip-installable). It would be useful functionality, but honestly not something I'm very keen on implementing myself.

but we can certainly exit with a "client disconnected, media type might not be supported"

That is certainly preferable to a crash.

Even if we detect that it's not playable (and we'd have to know what each Chromecast device and software can play), there's nothing we can do other than exit with an error. We might as well display one instead of crashing and leave it at that.
It'll be a bit less certain, but the alternative isn't worth the hassle, in my opinion.

It'll be a bit less certain, but the alternative isn't worth the hassle, in my opinion.

I agree.

A thing to note, when I use Google Chrome browser's built-in cast feature (... > Cast > Cast File), the video in question casts correctly to the Chromecast. I don't know if they do any transcoding on the fly, though.

@ArtBIT Try closing the browser (or shutting down the computer) while the video is playing, if they're doing transcoding, the video will stop.

It indeed does stop when I close the browser.

there's nothing we can do other than exit with an error. We might as well display one instead of crashing and leave it at that

@skorokithakis It'd be cool if you could have a go at this.

@theychx Sorry, I just saw this. Will do!

I'm afraid I can't reliably reproduce this, as it doesn't always crash, but I'll push what I have.

Done. You will also have to install gitchangelog and pystache, as I've added changelog generation on commit. I think it looks pretty nifty, but let me know if you don't like something.

@skorokithakis  I'm assuming that it's only when we squash merge that the feat: user: Add ability to make coffee approach is important.
Also, shouldn't gitchangelog and pystache be in requirements_dev.txt?

I just made a commit and the pre-commit hook failed because of gitchangelog. So the extra notation should be used with any commit?

I'm assuming that it's only when we squash merge that the feat: user: Add ability to make coffee approach is important.

That's correct. I don't even add the user: part, just new/chg/fix.

Also, shouldn't gitchangelog and pystache be in requirements_dev.txt?

Yes they should, I will add them now, thanks.

I just made a commit and the pre-commit hook failed because of gitchangelog. So the extra notation should be used with any commit?

How did it fail? It shouldn't have.

That's odd, I just tried and it failed for me too. Retrying worked, hmm.

How did it fail?

The failing hook ran gitchangelog, which when regenerated the changelog, adding your "refuse to install on py2" stuff to it. I just tried restaging my own changes along with the new changelog, and commiting is now succesful.

My "refuse to install" stuff should have already been there, but I now realized why it fails: Whenever there's a new changelog item (from the immediately previous commit), it will fail because it added new entries, so that's normal.

so that's normal

Aren't we doing things in the wrong order then?

Do you want to get on Gitter to talk about this?

yep

@skorokithakis Any reason to keep this open?

Nope!


Hotfix update

Merge hotfixes for version 2.4.1 into develop branch

Only scrutinizer fails, merging.


Junit report count is incorrect in case of scenario outline.

Html report has correct count.

Thanks @Rahul9844, we'll make changes to all reports to use the "expanded" scenario counts. Since Gwen expands all outlines at evaluation time. In the case of skipped or pending outlines we'll use the cumulative examples record counts. This should provide consistent figures.

@Rahul9844, we've implemented the changes to cater for scenario outlines.  The counts in both reports should now match. Please try this out using the snapshot below and let us know how it goes.

gwen-web-2.15.0-2-g308d08a-SNAPSHOT.zip

Tested on gwen-web-2.15.0-2-g308d08a-SNAPSHOT.zip and works as expected. Hence closing it.


Defect:Copious compiler warnings when build libcaf_mpi

Avg response time

Defect/Bug Report

The title of the issue should start with Defect: followed by a
succinct title.

OpenCoarrays Version: 1.9.3-143-g994d436
Fortran Compiler: GCC 7.3
C compiler used for building lib: GCC 7.3
Installation method: CMake direct
Output of uname -a: Darwin east06.paratools.com 16.7.0 Darwin Kernel Version 16.7.0: Mon Nov 13 21:56:25 PST 2017; root:xnu-3789.72.11~1/RELEASE_X86_64 x86_64
MPI library being used: MPICH 3.2
Machine architecture and number of physical cores: x86_64 4 core
Version of CMake: 3.10

Observed Behavior
Many compile time warnings and use of GNU extensions
Expected Behavior
No compile time warnings and no GNU extensions
Steps to Reproduce
Compile the code:
mkdir build
cd build
cmake ..
make VERBOSE=1

It seems that co_reduce-factorial-int8 hangs non-deterministically with different MPI & C compiler options. I have observed hangs with all combinations.

Warnings from empty do loops and non-portable bit-twiddling have been fixed on master. The issue of variable length components not being the last member of a struct persist (There is a GNU extension to allow them as not the last member.)

Related to #554
A recent PR from @neok-m4700 has made a great deal of cleanup also.

This will actually cause co_reduce-factorial-int8 to fail if compiler is clang, so we need to fix this before the next release. I'm guessing that the GNU extensions are to thank for this.

This seems to work in 8.2.0, at least tested with Clang & OpenMPI on macOS. Will test more thoroughly with different tooling.

This is currently resolved. GNU C extensions are used, but, it is possible that these are dictated by upstream. A new issue should be opened for this.


no_std support

It would be nice if the crate were no_std by default, with a cargo feature to enable usage of the standard library (such as to implement traits from std that are not in core).
Similarly, much of the crate can probably avoid using alloc by default, with a cargo feature to enable usage of it.

Relevant: https://github.com/rustsec/advisory-db/pull/1098

Thanks for the reminder. I can prioritize this work. Our OS team have also asked for this.

#1297 adds support for no_std.

I strongly suggest that you don't include the std feature as a default feature. It's very hard to avoid getting default features into your build because every single crate that uses this crate will have to specifically disable their default features, which most people don't do.
Instead, std should be off by default, and then whoever actively needs std can just enable it.

Yep good idea - will do.


Performance of Builder API relative to Algebra API is impacted by fuse() calls

Builder._add_to_context calls fuse for every object that is created inside the builder's context, which can be quite expensive as shown in https://github.com/gumyr/build123d/commit/52a00fb6a77045aa85c95d34b41cffbe4aa51dad (where s/PRIVATE/ADD/ makes the test fail because the Builder API takes ~20x longer than the Algebra API to do the same thing). Probably noteworthy that Builder._add_to_context is basically doing what https://build123d.readthedocs.io/en/latest/algebra_performance.html recommends not to do (prematurely calling fuse, and doing so repeatedly).
I don't know the codebase well enough yet to know if there's an easy solution.
This came up while investigating #383.

I'll look into the potential TechnicalDrawing problem but in general I don't see this - if you have an example it would be very helpful.  The code in BuildCommon that does the fuse is this:
                        self._obj = self._obj.fuse(*typed[self._shape])

so it's a single fuse operation for all of the objects of the same type.
When I try this test:
from build123d import *
from ocp_vscode import *
import timeit

start_time = timeit.default_timer()
with BuildSketch() as test1:
    with GridLocations(10, 10, 40, 40):
        RegularPolygon(6, 8)
print(f"Builder Time: {timeit.default_timer() - start_time:0.3f}s")

start_time = timeit.default_timer()
test2 = Sketch() + GridLocations(10, 10, 40, 40) * RegularPolygon(6, 8)
print(f"Algebra Time: {timeit.default_timer() - start_time:0.3f}s")

show(test1, test2)

these are the times:
Builder Time: 7.356s
Algebra Time: 6.135s

where the Builder is doing more work (like keeping track of new edges, etc) so I expect it would take a little longer.

if you have an example it would be very helpful

My example was linked in my original report (https://github.com/gumyr/build123d/commit/52a00fb6a77045aa85c95d34b41cffbe4aa51dad) but to inline it (and rephrase to match your example):
from build123d import *
from ocp_vscode import *
import timeit

start_time = timeit.default_timer()
with BuildPart() as test1:
    [Box(1, 1, 1) for _ in range(20)]
print(f"Builder Time: {timeit.default_timer() - start_time:0.3f}s")

start_time = timeit.default_timer()
test2 = [Box(1, 1, 1) for _ in range(20)]
print(f"Algebra Time: {timeit.default_timer() - start_time:0.3f}s")

show(test1, test2)

This emits:
Builder Time: 0.149s
Algebra Time: 0.007s

Something I didn't realize until just now putting the above together is that the difference goes away if the test2 line above is replaced with test2 = Part() + [Box(1, 1, 1) for _ in range(20)] which is more comparable to what the Builder API emits, though arguably this is not always/frequently needed when using the Algebra API.

Not sure if silly or serious, but: is it reasonable (compatible w/ Builder's API) to postpone the fuse until .part is called?

In your example @fischman you are comparing creating 20 boxes vs creating + taking the union of 20 boxes.
Here is a different example:
import timeit
from build123d import *
from bd_warehouse.thread import IsoThread

from ocp_vscode import show_object

major_diameter = 6
length = 8

starttime = timeit.default_timer()

with BuildPart() as nut:
    with BuildSketch():
        RegularPolygon(major_diameter * 0.75, 6)
        Circle(major_diameter / 2, mode=Mode.SUBTRACT)
    extrude(amount=length)
nut = nut.part.fuse(IsoThread(major_diameter, 1, length, False, "right", ("chamfer", "fade")))

elapsed_time = timeit.default_timer() - starttime
print(f"Outside Builder: {elapsed_time:.3f}s")

starttime = timeit.default_timer()

with BuildPart() as nut:
    with BuildSketch():
        RegularPolygon(major_diameter * 0.75, 6)
        Circle(major_diameter / 2, mode=Mode.SUBTRACT)
    extrude(amount=length)
    IsoThread(major_diameter, 1, length, False, "right", ("chamfer", "fade"))

elapsed_time = timeit.default_timer() - starttime
print(f"Inside Builder: {elapsed_time:.3f}s")

Outside Builder: 1.812s
Inside Builder: 8.408s


custom CMake projects do not produce a project_description.json (IDFGH-5775)

Environment

IDF version (run git describe --tags to find it): v4.3
Build System: CMake

Problem Description
When using the custom CMake project setup, the project_description.json will not be generated. That file is crucial for other tools like idf.py monitor.
The project_description.json will only be created by the default setup from project.cmake.
It would be nice, if __project_info could be exposed somewhere else, for example in tools/cmake/idf.cmake so that custom CMake projects could include it to setup all necessary meta information.

Hi @EpicKiwi!
Could give more information about the use case? The original is quite old and for v4.3. Are you also faced with this issue on v4.3?
Have you tried it on the master?


glider-dots class is repeated multiple times on the same element

The class name glider-dots is assigned to the same class multiple times instead of one time. This could be replicated in the storybook demo (all examples) by inspecting the HTML of the element with id="dots".
Effects
This does not cause any visible issues but is semantically incorrect and bloats the HTML.
Priority
Low
Workaround
N/A

PRs welcome! I don't really use this project myself so any contribution is welcome ❤


feat(volume/resize): don't allow volume resize in presence of snapshots

If a volume is expanded after taking a snapshot, then the IOs to the new io-units(block ranges) fails because the lba range falls out of bound for replica's parent device(snapshot). Till the issue is fixed, this check ensures we don't try to expand a volume if there is snapshot present. SPDK issue #3108.

bors merge


Restore old behavior for finding line lengths

Use an implicit +1 for the \n in calculations, but continue to split
strings by \n always instead of using readAsLines.

@DanTup - we introduced a subtle bug with the last change. There is another place where we calculate line lengths which was still using the implicit extra character for the newline:
https://github.com/natebosch/dart_language_server/blob/dd516220354da388c0e117bd6bd71e868bec1d44/lib/src/apply_change.dart#L8
After changing that to include a + 1 I was still getting some weird behavior because I think some other calculations might be thrown off.
This is showing me that it's a bit too fragile today, but I think in the short term it should be fine to go back to the old logic. I'll maintain the extra usage of findLineLengths instead of readAsLinesSync since that was really the critical piece to not throw away the \r. What do you think?

After changing that to include a + 1 I was still getting some weird behavior because I think some other calculations might be thrown off.

Ah, yikes! Do you have an example we could use to get a failing test?
I don't think it'll cause any issues, but it feels a little weird that the line lengths are excluding '\n' but including '\r'. Ofc it's your call but I'm happy to take a look at fixing whatever the issue my change introduced was if you agree - if you can give me an example of what went wrong, I could get some tests that fail as a result and then take a look.


Is there a better way to display InfoWindow?

looking at this example and a few things occur to me:

the mechanism for showing the window seems like an anti-pattern. it skips entirely the React management of state and props and just mutates an internal variable. is there a more 'react-y' pattern for this?
i use Immutable.js and pass my marker locations down through props. obviously i can't mutate props, so according to the pattern in the example, I should create an intermediate array of markers between props and render()?  This seems really counter intuitive
Because it's instantiating an InfoWindow with each marker, there's potential to have dozens of instances of the element at any one time. again this seems far less efficient than the normal way (ie, render 1 InfoWindow, and dynamically tell it where to open)

I was looking at instead using a Popover from the MUI library, but that requires a DOM Element to determine the location it should open at
I'm also looking at the Google Maps API, and it looks like you can pass InfoWindow map coordinates.  this would work great, but how do I pass that info to InfoWindow?

After some messing around with it I arrived at this solution which I think will be more performant than the example.
if the devs agree that this is better i can submit a pr for a new example
a method in my map component:
InfoWindow can open at a specific coordinate, so we'll use the coordinate of the clicked marker.
First we control the visibility of the InfoWindow by placing its location in state, then write a toggle method.  Basically, if windowPosition == null, window is closed, else windowPosition == {lat, lng}
toggleInfoWindow = (loc) => {
   // clicking 'x' in the info window will pass null, so if we detect that, reset the position in state
   if (loc == null) {
     this.setState({ windowPosition: null })
     return
   }
   // otherwise get coords of clicked marker and set to state
   let markerLoc = { lat: loc.latLng.lat(), lng: loc.latLng.lng() }
   this.setState({ windowPosition: markerLoc })
 }

then inside our GoogleMap component, we create an <InfoWindow> component:
 <InfoWindow
                  position={this.state.windowPosition}
                  onCloseclick={this.toggleInfoWindow}
                  options={{pixelOffset: new google.maps.Size(0,-30)}}
                  >
  content
</InfoWindow>

note the options prop.  because the InfoWindow is opened @ same point as our marker, if we don't offset it, it will cover the marker and look bad. this option moves the infoWindow up 30 pixels.

@brandonmp <InfoWindow> can of course rendered separated without <Marker>. Yes an position props could do that!
Also, 6.0.0 is released on npm beta tag now. We also have a new demo page. Feel free to try it:
https://tomchentw.github.io/react-google-maps/

Hi @brandonmp, thank you for your example! I was able to use it and got my map to only show one InfoWindow at a time now.
I do have the issue you mention about the InfowWindow being exactly on top of the Marker and I'm struggling to figure out how to use the pixelOffset with this library.

I've imported the following at the top of my file:
import { InfoWindow } from 'react-google-maps';
and I've tried to add the options like this:
<InfoWindow
        defaultPosition={ this.props.position }
        user={ this.props.user }
        options={{pixelOffset: new google.maps.Size(0,-30)}}
        mapHolderRef={ this.props.mapHolderRef } >
   { ... my content }
</InfoWindow>

but I don't have access to google and can't figure out how to access the Size class as per Google's docs. I've also tried importing google-maps directly but that didn't work. I think probably because I use the react-google-maps library everywhere else. How did you get access to the Size class? I can't see it as part of this library?
Feeling a bit stumped and any help would be very appreciated!

Hi @brandonmp, thank you for your example! I was able to use it and got my map to only show one InfoWindow at a time now.
I do have the issue you mention about the InfowWindow being exactly on top of the Marker and I'm struggling to figure out how to use the pixelOffset with this library.

I've imported the following at the top of my file:
import { InfoWindow } from 'react-google-maps';
and I've tried to add the options like this:
<InfoWindow
        defaultPosition={ this.props.position }
        user={ this.props.user }
        options={{pixelOffset: new google.maps.Size(0,-30)}}
        mapHolderRef={ this.props.mapHolderRef } >
   { ... my content }
</InfoWindow>

but I don't have access to google and can't figure out how to access the Size class as per Google's docs. I've also tried importing google-maps directly but that didn't work. I think probably because I use the react-google-maps library everywhere else. How did you get access to the Size class? I can't see it as part of this library?
Feeling a bit stumped and any help would be very appreciated!

I am very new to React and I am also struggling to comprehend the 'loose' documentation that accompanies the majority of various unofficial React Google Maps libraries that are available.
I have a load of markers on my map, which I also only wanted one info window to open at a time. To avoid multiple info windows, I decided not to have them as children of every marker; Rather a single <InfoWindow> as a sibling of <Marker> & child of <GoogleMap>. When a <Marker> is clicked, it's lat, lng is then made stateful & used to position the <InfoWindow>.
As my <InfoWindow> is a separate component I have to introduce an offset so that it doesn't open directly above it's <Marker>. Through A LOT of trial and error I have come to the conclusion that anything that would usually require 'google.map' needs 'window' declared before hand. So for example
`<Markers
animation={window.google.maps.Animation.DROP}

`

Therefore to achieve the offset on an <InfoWindow> try:
`<InfoWindow
options={{pixelOffset: new window.google.maps.Size(0,-40)}}

`

I know this solution address's a now very old query, but I do hope that this will help someone else in future and save a lot of time!

@cfdesign Thank you tremendously. I also encountered the 'google' not defined problem, and your answer  saved me!


[ZEPPELIN-5428] Unify flink configuration between different execution modes

What is this PR for?
This PR is to unify the configuration of flink interpreter. Due to historical reason, some properties are only available for yarn mode, but not for yarn-application mode, this PR is to unify them. Here's the properties we handle in this PR.

flink.tm.memory
flink.jm.memory
flink.yarn.appName
flink.yarn.queue
flink.tm.slot

What type of PR is it?
[Improvement]
Todos

[ ] - Task

What is the Jira issue?

https://issues.apache.org/jira/browse/ZEPPELIN-5423

How should this be tested?

CI pass

Screenshots (if appropriate)
Questions:

Does the licenses files need update? No
Is there breaking changes for older versions? No
Does this needs documentation? No

Will merge if no more comment


[Suggestion] Add a dimension whitelist for aura to be generated

Hello, I would like to make the aura only exists for certain dimension for the sake of modpack design. Is it possible to add such a config option?

Please put this here


webm and tgs stickers are not support

The bot cannot convert sticker in webm or tgs format. Here are the sticker sets that I tried to convert with this bot without success:

https://t.me/addstickers/TheGreedOfManVideo
https://t.me/addstickers/HotCherry

Unfortunately, I am not familiar with nodejs, so I developed a new bot in golang. You can find the source code here.

可以可以，我也更新了一下哈哈


Update to skip merge commits

Thanks for the contribution :)

@aschbacd Could you publish the update to marketplace?

Hi, sorry it took so long. I published a new version now including your change https://github.com/aschbacd/gitlint-action/releases/tag/v1.2.0.


Create .bat file for PSADMIN on desktop

Do this in client provision script with other shortcuts.

These isn't needed anymore with psadmin-plus install.


Refactoring labels

Reason for Change:

Requirements

[ ] squashed commits
[ ] included documentation
[ ] added unit tests and e2e tests (if applicable).

Issue Fixed:

Does this change contain code from or inspired by another project?

[ ] Yes
[x] No

If "Yes," did you notify that project's maintainers and provide attribution?
Special Notes for Reviewers:

/reopen

how reopen this PR ?


Rename library

The name "streams" is overly generic.  It is also taken on PyPI.
We should find a better name.  One option would be to use the dask namespace and call this dask-streams although this makes less sense if the vanilla stream implementation is to be a core feature.

for the record I have emailed the creator of streams. I hope he may respond (and even collaborate if he is interested or has the time)

You could use streamz. Suffixing z is popular with functional programmers.

Naming discussion I think has moved to #35

@llllllllll it is officlaly streamz


Technical Details About Not Using Dynamic Memory Or Other Memory Ballooning Feature

Hello!  Our VMWare team is interested in more technical details/information on what specific problems occur if memory ballooning is used, and if this applies to VMWare, or if this only applies to Hyper-V.  Could additional detail be added either on this page or perhaps a FAQ somewhere?
Thanks!

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

ID: 3e880e6e-9cae-b122-14d9-963eee86d9cc
Version Independent ID: c8ab5d85-f3a4-2c24-d6c6-5940e26aea42
Content: Azure Advanced Threat Protection prerequisites
Content Source: ATPDocs/atp-prerequisites.md
Service: azure-advanced-threat-protection
GitHub Login: @mlottner
Microsoft Alias: mlottner

@aakash-shah Thanks for your question!
The Azure ATP sensor has built-in logic to prevent a downgraded domain controller experience. For that reason, any VM-specific resource handling solutions such as Dynamic Memory or Memory Ballooning should be disabled on a virtual machine running the sensor.
When additional resource management solutions are introduced such as Dynamic Memory or Memory Ballooning, they interfere with the sensor’s resource management assessments, resulting in poor sensor performance and dropped traffic.
The Azure ATP sensor resource manager assumes the allocated memory is fully reserved for the machine at all times. This behavior is true for all virtualization platforms.
I'll update the FAQ to provide more information on this issue. Appreciate your contribution to our community.

#sign-off

#please-close


Modify README.md: Update most occurrences of "Geode" to "Apache Geode".

Update README.md introductory text to match the website intro text (gets rid of "extremely mature," drops mention of Chinese railway).

I think it will be valuable to put a link to the geode website in the README.

+1
I will merge this in.


ENH: support versioning of ophyd objects

This is an important feature for the upcoming AreaDetector plugin PR, which I'll open after this one goes in. Let's hash over the details of this and get it to a good state before that.
This adds two keyword-only arguments to subclasses of ophyd objects, primarily intended for use with Devices:

version: the version itself - no type restrictions
version_of: the class in the hierarchy that version is in reference to

The information on the object then allows for programmatic access of different versions of the class.
The test case below shows the intent well enough, I think:
    class MyDevice(Device, version=1):
        ...
     info = MyDevice._class_info_
    assert info['version'] == 1
    assert info['versions'] == {1: MyDevice}
     # Define a new version of that Device:
    class MyDevice_V2(MyDevice, version=2, version_of=MyDevice):
        ...
     info = MyDevice_V2._class_info_
    assert info['version'] == 2
    assert info['versions'] == {1: MyDevice, 2: MyDevice_V2}
     # Ensure that the original Device has also been updated:
    assert MyDevice._class_info_['versions'] == {1: MyDevice, 2: MyDevice_V2}
     # Define a user device that inherits - but does not define a new version
    class UserDevice(MyDevice_V2):
        ...
     assert UserDevice._class_info_ == {'versions': {1: MyDevice, 2: MyDevice_V2},
                                       'version': 2
                                       }

Codecov Report

Merging #662 into master will decrease coverage by 0.03%.
The diff coverage is 97.43%.

@@            Coverage Diff             @@
##           master     #662      +/-   ##
==========================================
- Coverage   90.73%   90.69%   -0.04%
==========================================
  Files          60       61       +1
  Lines        9236     9274      +38
==========================================
+ Hits         8380     8411      +31
- Misses        856      863       +7

Impacted Files
Coverage Δ

ophyd/tests/test_versioning.py
100% <100%> (ø)

ophyd/device.py
90.54% <100%> (ø)
:arrow_up:

ophyd/ophydobj.py
96.7% <94.73%> (-2.07%)
:arrow_down:

ophyd/signal.py
95.6% <0%> (-0.36%)
:arrow_down:

ophyd/tests/test_signal.py
99.65% <0%> (-0.35%)
:arrow_down:

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 39811f6...aade693. Read the comment docs.

Slick! I have never seen custom kwargs passed in to class info, but this is a compelling place to use that language feature.  Will review in detail later this week but my initial feeling is 👍

Overall :+1:
To @teddyrendahl 's suggestions

yes, that seems good
rename 'version' -> 'ioc_version' ?

As far as naming goes, I don't have much in the way of strong feelings. A few related points:

ioc_version works from the perspective of Device, but not necessarily other ophyd objects
version is generic enough that it wouldn't have to apply to an IOC version if you didn't want it to - a double-edged sword, I suppose
_class_info_ itself is named poorly, what should it be called?
What name should the classmethods have that expose this information to the end user?

Spitballing:

class EpicsMotor(dependency='EpicsMotor', version='2.1.2',  version_of=EpicsMotorBase):

@classmethod
def dependencies(cls):
     return (cls._class_info['dependency], cls._class_info['version'])

Versions should be tuples not strings (it will make sorting / comparison easier later).
ioc_version may be EPICS specific, was going for something that says "the version of thing I am sitting in front of" not "my version".
server_version, device_version, controller_version, other_side_version?

Agreed about versions being tuples, even if it is slightly more unwieldy. Not sure if there could (or should) be magic to automatically convert 'R2.1.2' -> (2, 1, 2).
When you get to this number of arguments:
class MyMotor(EpicsMotor, version_reference='EpicsMotor', version=1, version_of=EpicsMotor)

It almost seems like there should be then another type that encompasses all of this.
vinfo = VersionInfo(version=2, of=EpicsMotor, reference='EpicsMotor')
class MyMotor(EpicsMotor, version=vinfo)

Despite the suggestion, I'm not a fan of this at all...

It's necessary to specify the base class that a version specification is for. That is what version_of indicates, as in the code in this PR.
The "reference" portion came up as @tacaswell and @teddyrendahl indicate that the word "version" itself is too generic, and should have some indicator of what that version means. Is it the IOC version, is it the motor record version, etc.
My personal opinion is that what the version refers to isn't so important, just that the user remains consistent in their versioning of the classes. It should be apparent that if you are versioning a Device tied to a specific IOC, that the version uses the same scheme as the IOC you are basing it on. That being said, I'm not against adding more keywords/information to give meaning to that version. It might be something that's only specified in the base class, even.

Agreed, adding the extra key for dependency/reference is unwieldy. I think most cases you can infer from the class what IOC / module you are versioning against.

I'm fine with tuple being passed directly into the class, I think less magic might be better in some of these cases.

What about external_version instead of version? Kind of verbose, but it is clear that it has nothing to do with the versioning of the Python module without loss of generalization for what you are versioning against.

I like this suggestion, now just thinking about names:
{'version': (2, 0, 0),  'version_base': MyIOC,  'version_of': 'ioc_version'}

What if we want to track the version of more than one thing on the class?

@tacaswell what would be an example of that?

maybe something about how the Resource/datum are structured or something about how it expects to be triggered?  Are there any cases where we may want to track both the IOC version but also something about the version of the hardware underneath (could we extend this to also picking the right version of cam automatically?)?  I'm not sure that there is a good case for any of those, but it seems better to sort that out now than discover in 6mo we really did have a compelling case.
Is there anyway we can avoid having to list the base class twice? Maybe put a class attribute on one of the base classes saying it may be sub-classed in a versioned way and then walk the base-classes until you find that flag?   I think that may allow us to be much terser in the init and allow a path to versioning many things.
Something like
VERSION_ME_MAYBE = object()

class Base:

    def __init_subclass__(cls, ioc_version=None, **kwargs):
        super().__init_subclass__(**kwargs)
        if 'ioc_version' in cls.__dict__:
            cls.extant_versions = {}

        if ioc_version is not None:
            for bc in cls.mro():
                if bc.__dict__.get('ioc_version', None) is VERSION_ME_MAYBE:
                    base_class = bc
                    break
            else:
                raise TypeError("Nothing in MRO has a version")
            cls.ioc_version = ioc_version
            cls.ioc_class = bc

            bc.extant_versions[ioc_version] = cls

class A(Base):
    ioc_version = VERSION_ME_MAYBE

class B(A, ioc_version=1):
    ...

class C(A, ioc_version=2):
    ...

class D(A, ioc_version=3):
    ...

print(A.extant_versions)

Now that I have typed that out, you could probably invert the logic a bit and look for any class member that are VERSION_ME_MAYBE and then automatically pop out the right kwargs and build the right secondary data etc...

For versioning multiple things - how about keeping version simple and requiring the user to pass in a tuple (or namedtuple) with whatever is to be versioned?
For not specifying the base class multiple times, take the complex example of AreaDetector:
class PluginBase(version=...):
    ...
class FilePlugin(PluginBase, version=...):
    ...
class HDF5Plugin(FilePlugin, version=...)
    ...

All of these classes are versioned. However, HDF5Plugin is not a version of FilePlugin. FilePlugin is not a version of PluginBase.
I haven't found a good way to automatically determine which class is being versioned, even in the case of simple inheritance like this, without explicitly stating the base class that defines the first version. Multiple inheritance further muddies the waters.

I'm not sure there's a compelling use case for multiple versions to be tracked, and I don't think this is just because my head is spinning thinking about the complexity it adds to the syntax. In the EPICS/ophyd context, the IOC and the hardware are essentially the same thing. Either the IOC takes care of the hardware differences for you, or there is a different IOC that needs a differently-named class. The main use case here is to reflect that different beamlines and different facilities can have slightly different versions of the same software for controlling the same devices. We can already do this without this per-class version tagging, but this makes it very explicit which version the class is designed to connect to.
For multi-versioned classes, you can always use two subdevices that are properly single-versioned.

I think @ZLLentz 's suggestions are quite reasonable. Any objections to moving in that direction?

For multi-versioned classes, you can always use two subdevices that are properly single-versioned.

I had the same thought. I think this approach would be cleaner and clearer than anything we could come up with my for "multi-version syntax" anyway.

Any objections to moving in that direction?

None. I think we should move ahead now.

VERSION_ME_MAYBE = object()

class Base:

    def __init_subclass__(cls, version=None, **kwargs):
        super().__init_subclass__(**kwargs)
        if 'version' in cls.__dict__:
            cls.extant_versions = set()

        if version is not None:
            for bc in cls.mro():
                if bc.__dict__.get('version', None) is VERSION_ME_MAYBE:
                    base_class = bc
                    break
            else:
                raise TypeError("Nothing in MRO has a version")
            cls.version = version
            cls.ioc_class = bc

            bc.extant_versions.add((version, cls))

class ADIOCVersionBase(Base):
    version = VERSION_ME_MAYBE

class PluginBase(ADIOCVersionBase, version=(2, 3)):
    ...

class FilePlugin(PluginBase, version=(2, 4)):
    ...

class HDF5PluginBase(FilePlugin):
    ...

class TIFFPluginBase(FilePlugin):
    ...

class HDF5Plugin(HDF5PluginBase, version=(2, 5)):
    ...

class HDF5Plugin2(HDF5PluginBase, version=(2, 6)):
    ...

class HDF5Plugin3(HDF5PluginBase, version=(2, 7)):
    ...

class TIFFPlugin(TIFFPluginBase, version=(2, 5)):
    ...

class TIFFPlugin2(TIFFPluginBase, version=(2, 6)):
    ...

class TIFFPlugin3(TIFFPluginBase, version=(2, 7)):
    ...

def get_compatible(target_class, ver):
    for v, klass in target_class.extant_versions:
        if ver == v and issubclass(klass, target_class):
            return klass
    else:
        raise ValueError("No acceptable class")

def get_all_compatible(target_class, ver):
    out = []
    for v, klass in target_class.extant_versions:
        if issubclass(klass, target_class) and ver == v:
            out.append(klass)
    return out

which gives you things like
n [54]: get_all_compatible(FilePlugin, (2, 7))
Out[54]: [__main__.TIFFPlugin3, __main__.HDF5Plugin3]

In [55]: get_all_compatible(FilePlugin, (2, 6))
Out[55]: [__main__.HDF5Plugin2, __main__.TIFFPlugin2]

In [61]: get_compatible(HDF5PluginBase, (2, 10))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-61-75a61862e7c8> in <module>()
----> 1 get_compatible(HDF5PluginBase, (2, 10))

~/src/p/notebook/timetracking/.org/sw.org[*Org Src sw.org[ python ]*] in get_compatible(target_class, ver)

ValueError: No acceptable class

In [62]: get_compatible(HDF5PluginBase, (2, 7))
Out[62]: __main__.HDF5Plugin3

In [63]: get_compatible(HDF5PluginBase, (2, 6))
Out[63]: __main__.HDF5Plugin2

In [64]:


Raw html in markdown is not translated properly

Hi @pablo-abc,
My md text contains raw html, like: <time datetime="19:20">19:20</time>
It is not left as-is in the output, but this: <time datetime="19:20"></time>19:20
It doesn't work for simple tags, like label either; it gets converted to label
I tested it on Marked Demo page and couldn't reproduce the problem.
Using latest versions on Svelte, not SvelteKit.

I've been scratching my head with this for a while. The reason this is happening is two things:

Marked lets you use Markdown syntax in between HTML. So when generating the tokens, it gives separate html tokens for the starting tag and the ending tag. So, for example your time example looks like this after passing through the Lexer:

const tokens = [
    {
        type:"paragraph",
        raw:"<time datetime=\"19:20\">19:20</time>",
        text:"<time datetime=\"19:20\">19:20</time>",
        tokens: [
            {
                type:"html", raw:"<time datetime=\"19:20\">",
                inLink:false,
                inRawBlock:false,
                text:"<time datetime=\"19:20\">"
            },
            {
                type:"text",
                raw:"19:20",
                text:"19:20"
            },
            {
                type:"html",
                raw:"</time>",
                inLink:false,
                inRawBlock:false,
                text:"</time>"
            }
        ]
    }
]

Seeing the tokens previously mentioned, svelte-markdown will try to do this:

{@html "<time datetime=\"19:20\">"}19:20{@html "</time>"}

But Svelte does not allow you to start an html tag in a {@html } block and finish it in another. So when svelte-markdown tries to render this, it fails as you saw previously.

The quickest solution is to treat a whole paragraph as HTML if there's at least one html element within its children. The drawback of this is that you won't be able to mix HTML and markdown in the same paragraph. So you wouldn't be able to write something like this at all:
The **time** is: <time datetime="19:20">19:20</time>

This seems like an acceptable compromise compared to just having broken HTML. I'll do this as a fix for now and add a note in the README explaining that paragraphs can either be HTML or Markdown, but not a mix of both.

Hi
Thanks for the thorough explanation. I agree this compromise is better than the previous broken implementation.

@boczpeter I haven't actually managed to merge this yet, but I found a workaround. You can "force" SvelteMarkdown to render the whole paragraph as HTML by wrapping it whole in

 (or any HTML element tbh). E.g.
# Example

This will be _rendered_ as **markdown**.

This will be rendered as HTML

Yes, it's exactly what I did in my documents.


Fix build against pre-2.9 headers

Removing the "const" specifiers in the previous commit broken
compilation against Impala version <= 2.8. This commit gets this
repository to build against both variants by casting the function
pointer to the required type.

I assume you tested building against <= 2.8 as well as 2.9?

Yeah I tested with impala-udf-dev_2.6.0+cdh5.8.3+0-1.cdh5.8.3.p0.7~trusty-cdh5.8.3_amd64.deb and impala-udf-dev_2.8.0+cdh5.11.0+0-1.cdh5.11.0.p0.13~trusty-cdh5.11.0_amd64.deb

Ups, noticed to late that this already had been reviewed and submitted. Apologies for the noise.


Use wrapper provided by MediaElement.js to listen for player events

Instead of listening for player control and loading events on the target element that we give to MediaElement.js we should listen to the wrapper created by it. This makes no difference for "normal" video sources, but becomes important for more exotic setups like when using HLS, where the original video element is not the one the user sees in the end.

Tested and works!

This PR also fixes #159, Surprisingly HLS works only with safari. Chrome and Firefox need PR #204 for HLS.

Interesting. I guess MediaElement is wrapping the video element even for "normal" videos in Safari (probably for compatibility reasons), which would explain #159. But that wrapped video-Element then supports HLS natively? Weird, but I take it. ¯\_(ツ)_/¯


prevent single compoundVariant

Currently, it is possible (without any TS warning) to use compoundVariants with a single prop:
cva("base", {
  variants: {}
  compoundVariants: [
    {
      size: "big",
      css: "..."
    }
  ]
})

IMO it should go into variants if only one prop like here.
What about adding type-safety to prevent this?

https://github.com/joe-bell/cva/blob/main/.github/ISSUE_TEMPLATE/bug_report.md?plain=1#L11


RHEL version number for reservation

Please can someone check the list of RHEL version which you can apply that reservation to.
It is stating:
Red Hat Enterprise Linux 7.5
Red Hat Enterprise Linux 7.6
Red Hat Enterprise Linux 8.2
Is it correct that version 7.8 is missing or is it just a "mistake" in writing the documentation?
Thanks for clarification.

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

ID: a0ed5d03-9f9e-1c7f-c450-a2f0f5bebd87
Version Independent ID: bde6e4cf-9245-25b5-82df-db7b30ecda99
Content: Red Hat reservation plan discounts - Azure
Content Source: articles/cost-management-billing/reservations/understand-rhel-reservation-charges.md
Service: cost-management-billing
Sub-service: reservations
GitHub Login: @bandersmsft
Microsoft Alias: banders

Thanks again for bringing this to our attention. We have updated the Doc and it will be live once its merged.  We will now proceed to close this thread. If there are further questions regarding this matter, please tag me in your reply. We will gladly continue the discussion and we will reopen the issue.

@MonikaReddy-MSFT Thanks for taking care of this issue.


Added #tool line directive

Adds support for fetching tools via nuget
Example usage
#Tool "ILMerge"
var assemblyPaths = GetFiles("./**/Release/Cake.*.dll");
var primaryAssemblyPath = GetFiles("./**/Release/Cake.exe").FirstOrDefault();
ILMerge(
     "./MergedCake.exe",
     primaryAssemblyPath,
     assemblyPaths,
     new ILMergeSettings { Internalize = true });

Will output something like
Installing 'ilmerge 2.14.1208'.
Successfully installed 'ilmerge 2.14.1208'.

and if verbosity is set to diagnostic it will also output any executables found
Found tool executable: [fullpath]]/Tools/ILMerge/tools/ILMerge.exe

Will take a look at the feedback probably tonight, agree with most;) and then update PR.

Have updated and rebased against latest develop.

Sweet. Will merge ASAP :smile:

Merged


Option to turn off unmaintained module warnings

Currently I am still using the mod Hidden Soundtracks that - while it is unmaintained - works perfectly with PF2E. I have a mild OCD and manually removing the slow yellow notifications every time is really causing me annoyance. I want to remove these warnings through an option ideally.
I asked Dorako of Dorako UI if there was a way to turn these off via CSS and he told me he doesn't know of a way to do it perhaps because these is no special class added to them, so even a partial resolution via a CSS class that allows them to be turned off via Custom CSS mod or other approach will be good enough.
Thanks in advance!

Sorry: if it could be turned off, it wouldn't be in place at all.


Separated request from unirest class

hey @zeeshanejaz we just released v2.0.0 which refactors the classes into separate objects similar to your approach.
would love to hear your feedback on the new release!
thanks.


Allow final item sorting to be adjustable

Provide the current method (default), alphabetical, feed power (high to low), fame bonus (high to low).

Added as custFilter() in init_totals(). Will be trivial to add more filter options later on.

Standard sorting is now the traditional way (w/ custom ordering). All other options supersede the whole sorting system instead of applying just within item groups.
e.g. if you sort by feed power, totals will go from highest fp in upper left to lowest fp in bottom right.

Published in v9.3.0.


Default to the latest factorio server

The container fails to build because 0.12.33 returns an internal server error. Use the latest server build by default.

Thanks that's better than having to track all Factorio version releases.


[StreetCode page/Wow-факти] The photo and signature are highlighted in blue when the user clicks twice on the 'close' button

Environment: All
Reproducible: Always
Build found: 214b2a4
Preconditions

The site is open.
At least one StreetCode with Wow-fact has been created.

Steps to reproduce

Go to the 'StreetCode' page.
Open StreetCode from the list.
Scroll down to the 'Wow-facts' block.
Open it and click twice on the 'close' button.
Open the fact again.

Actual result
The photo and signature are highlighted in blue.
https://github.com/ita-social-projects/StreetCode/assets/135108144/aa7c5ef1-bbc2-496c-be94-21ae5af22c2d
Expected result
The photo and signature aren't highlighted in blue.
User story and test case links
User story #26

I was unable to reproduce the issue. I suggest retesting it and closing the issue if it remains unreproducible.
https://github.com/user-attachments/assets/585b6115-ffc7-4027-ba65-af41f068b2a7

The issue is reproducible on  macOS 13.6.1 with  Chrome Version 128.0.6613.120.
https://github.com/user-attachments/assets/3e146c53-178a-4ce3-90cd-c661f538e68a


Node16 deprecation warning

Github is deprecation Node16, so the action needs to be updated

Github is deprecation Node16, so the action needs to be updated

Thanks @CMeldgaard! Updated to use Node20 and set newer default for the cargo lambda version.


Check code coverage of every package

https://github.com/istio/istio-testing/issues/135
Add a script to check if code coverages of specific packages meet requirements.
Requirements are specified in "codecov.requirement"
Rely on external dependency from istio/toolbox, which is shared through other repos.

This change is

Jenkins job mixer/presubmit passed

Jenkins job istio/mixer-pr-master passed

Jenkins job mixer/presubmit passed

Jenkins job mixer/e2e-smoketest passed

Jenkins job mixer/manager-regression passed

Jenkins job mixer/e2e-smoketest passed

Jenkins job mixer/manager-regression passed

This pr is ready for merge.

Needs an update (out of date with branch). Then I'll merge.

Jenkins job mixer/presubmit passed

Jenkins job mixer/e2e-smoketest passed

Sorry, needs another update.

Jenkins job mixer/presubmit passed

Jenkins job mixer/e2e-smoketest passed

https://github.com/istio/toolbox/issues/2


support sub tags on Transifex

E.g. de and de_DE, if the language files differ.

Is transifex even used any more? Pretty sure not.


proot info: vpid 1: terminated with signal 7

Dockie v0.5.0 LXC PRoot on Termux on Android

pull an alpine image
try to run a guest

proot info: vpid 1: terminated with signal 7

Seems that PRoot is already dealing with this https://github.com/proot-me/proot/issues/190

Happens when using wrong architecture. Setting the DOCKIE_ARCH variable to the appropiate one fixes it.


[AdaptiveCards- Schema Explorer]: In scan mode, Incorrect information is announced by the screen reader for the 'Feedback link'.

Target Platforms
Other
SDK Version
1.5
Application Name
Adaptive Cards
Problem Description
Test Environment:
URL: https://adaptivecards.io/
OS Version: 22H2(OS Build 25247.1000)
Browser Version: Version 110.0.1543.0 (Official build) dev (64-bit)
Screen Reader: Narrator
Pre-requisite:
Turn on the narrator and turn on the scan mode.
Repro Steps:

Open above URL with valid credential.
Turn on the Narrator using ctrl+win+enter key.
Navigate to 'Schema Explorer' link and using arrow keys press enter key to activate it.
Navigate to 'Feedback' link using down arrow and observe the issue.

Actual Result:
While navigating to the 'Feedback' links in scan mode, Screen Reader does convey the irrelevant information. It is announcing as 'Enter list 1 of 2 level 1 bulleted list round bullets dark slate grey feedback'.
Expected Result:
Screen Reader should not convey the irrelevant information for the feedback link and it should announce as 'Link Feedback'.
Note:
Same Issue is repro with NVDA as well.
User Experience:
It will impact the screen reader user if the screen reader does convey the irrelevant information for the links.
MAS Reference:
https://microsoft.sharepoint.com/:w:/r/sites/accessibility/_layouts/15/Doc.aspx?sourcedoc={9C514377-76E5-4CFE-8300-DA3079D3CDC3}&file=MAS 1.3.1 – Info and Relationships.docx&action=default&mobileredirect=true&share=IQF3Q1Gc5Xb-TIMA2jB5083DAcWOZyaXcx7TtNeRlXM4uHk
"Have feedback to share on Bugs ? Please help fill Trusted Tester Bug Feedback (office.com) “.
Screenshots
Card JSON
https://user-images.githubusercontent.com/95913748/208687460-b60257e4-a533-4846-baa1-c006a56c07b1.mp4
NA

Sample Code Language
No response
Sample Code
No response

This issue is not repro, hence closing this issue.


ssrc must admit no value

let objSsrc = {
    id: 12345678,
    attribute: 'foo'
};

obj.media[0].ssrcs.push(objSsrc);

This produces: a=ssrc:12345678 foo:undefined, which is wrong given that attribute value is not mandatory.
RFC 5576 refers to RFC 4566 when it comes to define the attribute syntax (which is generic):

https://tools.ietf.org/html/rfc5576#section-10:

   ssrc-attr = "ssrc:" ssrc-id SP attribute
   ; The base definition of "attribute" is in RFC 4566.
   ; (It is the content of "a=" lines.)

More:
  https://tools.ietf.org/html/rfc5576#section-4.1

4.1.  The "ssrc" Media Attribute

   a=ssrc:<ssrc-id> <attribute>
   a=ssrc:<ssrc-id> <attribute>:<value>

Hm, yes. That's wrong. a=ssrc needs a better regex and format function. I'm a bit busy this week, feel free to submit a PR.

Will take a look.

@ibc
I made a PR #50 which fix this issue.
you may want to have a look and see if it's correct.

reg: /^ssrc:(\d*) ([\w_]*)(?::(.*))?/

Is that ?:: correct? (I mean the double ::)

I'm not sure, just learn this cool regexp from this repo, but it works :smile:
seems (?:XXXXX)? is a regexp indicates a matching group XXXXX may appear or not.
and in this case, XXXXX = :(.*) --- a separator :  with the value part

Ok, it seems that such a ?: makes the matching group not to appear in the matching result (which makes sense because we don't want the : but just the value after it).

guess one of those colons could be escaped \: for readability


CI - Tag-release-publish - Remove node-version and use default value

CI
Workflow "tag-release-publish", use default version of Node.js (#261)
There is already a default value in the shared workflow we use:
https://github.com/DazzlingFugu/.github/blob/master/.github/workflows/js--tag-release-publish.yml

Twin PR with: https://github.com/DazzlingFugu/ember-cli-embedded/pull/310

@DazzlingFugu/emberenos

@DazzlingFugu/emberenos


Check 'Data Connectivity Mode' When Using Dynamic Query

Hi team,
I created a new source with Blank Query and followed other steps shown in this page. But the graph wasn't be updated when I reselected the slicer. Finally I figure out that it is because the default value of Data Connectivity Mode is 'Import', not 'DirectQuery'. Dynamic  m query parameters only take effects when the mode is 'DirectQuery'. I think it's important for a newcomer to PowerBI that this point could be noted in the document.
Thanks

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

ID: dc66475d-11b3-ba33-cde4-9948dc07ea2c
Version Independent ID: 46aeb704-a74f-2064-307f-24660579ef4c
Content: Dynamic M query parameters in Power BI Desktop - Power BI
Content Source: powerbi-docs/connect-data/desktop-dynamic-m-query-parameters.md
Service: powerbi
Sub-service: pbi-data-sources
GitHub Login: @davidiseminger
Microsoft Alias: davidi

Thanks for your comment, @PU-101. This issue has been assigned to the doc author for review.


页面内容放大

你好，我要实现支付页面内容比例放大，该如何操作，现在显示在设备上太小了

The enhancement and simulation plan to address zoom functionality in a Flutter application is well-structured and comprehensive. Below, I will recap the critical steps and ensure that both the Flutter implementation and Python simulation code are fully detailed. We'll also delve into some additional considerations to ensure the solution is robust.
Step-by-Step Plan Recap

Enhancement Implementation: Introduce zoom functionality in a Flutter SDK.
Simulation: Create a Python script to simulate the success rates and provide star ratings for different zoom solutions.

Flutter Code to Implement Zoom Functionality
Firstly, let’s build a basic Flutter widget that enables pinch-to-zoom functionality.
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ZoomablePage(),
    );
  }
}

class ZoomablePage extends StatefulWidget {
  @override
  _ZoomablePageState createState() => _ZoomablePageState();
}

class _ZoomablePageState extends State<ZoomablePage> {
  double _scale = 1.0;
  double _previousScale = 1.0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Zoom Example')),
      body: GestureDetector(
        onScaleStart: (ScaleStartDetails details) {
          _previousScale = _scale;
        },
        onScaleUpdate: (ScaleUpdateDetails details) {
          setState(() {
            _scale = _previousScale * details.scale;
          });
        },
        onScaleEnd: (ScaleEndDetails details) {
          _previousScale = 1.0;
        },
        child: Center(
          child: Transform.scale(
            scale: _scale,
            child: Container(
              color: Colors.blue,
              width: 200,
              height: 200,
              child: Center(child: Text('Pinch to Zoom', style: TextStyle(color: Colors.white))),
            ),
          ),
        ),
      ),
    );
  }
}

Enhancing the Zoom Functionality
We can enhance the zoom functionality further with double-tap-to-zoom and smooth scrolling.
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ZoomablePage(),
    );
  }
}

class ZoomablePage extends StatefulWidget {
  @override
  _ZoomablePageState createState() => _ZoomablePageState();
}

class _ZoomablePageState extends State<ZoomablePage> {
  double _scale = 1.0;
  double _previousScale = 1.0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Zoom Example')),
      body: GestureDetector(
        onScaleStart: (ScaleStartDetails details) {
          _previousScale = _scale;
        },
        onScaleUpdate: (ScaleUpdateDetails details) {
          setState(() {
            _scale = _previousScale * details.scale;
          });
        },
        onScaleEnd: (ScaleEndDetails details) {
          _previousScale = 1.0;
        },
        onDoubleTap: () {
          setState(() {
            _scale = _scale > 1.0 ? 1.0 : 2.0; // Simple toggle between normal and double scale
          });
        },
        child: Center(
          child: Transform.scale(
            scale: _scale,
            child: Container(
              color: Colors.blue,
              width: 200,
              height: 200,
              child: Center(child: Text('Pinch to Zoom', style: TextStyle(color: Colors.white))),
            ),
          ),
        ),
      ),
    );
  }
}

Python Script for Simulation
Now, let’s expand the Python script for simulating success rates and star ratings for various zoom solutions.
import random

class ZoomFeatureEnhancement:
    def __init__(self):
        self.feature = {
            "name": "Zoom Feature",
            "description": "Enables pinch-to-zoom functionality within the Flutter application.",
            "solutions": [
                {"name": "Basic Pinch-to-Zoom", "weight": 0.7},
                {"name": "Double-Tap to Zoom", "weight": 0.6},
                {"name": "Smooth Scrolling Zoom", "weight": 0.8},
                {"name": "Multi-Finger Gestures", "weight": 0.5},
                {"name": "Programmatic Zoom Control", "weight": 0.9},
            ]
        }

    def simulate_success(self, weight):
        # Simulate a success rate based on the weight
        success_rate = random.uniform(0.5, 1.0) * weight
        star_rating = round(success_rate * 5) / 20.0 * 5  # Converting to a 5-star scale
        return success_rate * 100, star_rating  # Converting to percentage success rate

    def display_feature_info(self):
        print("===== Feature Request =====")
        print(f"Name: {self.feature['name']}")
        print(f"Description: {self.feature['description']}")

        print("\n===== Solutions and Simulations =====")
        for solution in self.feature["solutions"]:
            success_rate, star_rating = self.simulate_success(solution["weight"])
            print(f"\nSolution: {solution['name']}")
            print(f"Success Rate: {success_rate:.2f}%")
            print(f"Star Rating: {'⭐' * int(star_rating)} ({star_rating:.1f} stars)")

if __name__ == "__main__":
    enhancement = ZoomFeatureEnhancement()
    enhancement.display_feature_info()

Explanation:

ZoomFeatureEnhancement Class: Contains the zoom feature name, description, and a list of solutions with associated weights.
simulate_success Method: Utilizes random probabilities influenced by solution weights to calculate success rates and star ratings.
display_feature_info Method: Prints feature details and simulated success rates for each solution in a readable format.

Output Example
Running the Python script might yield:
===== Feature Request =====
Name: Zoom Feature
Description: Enables pinch-to-zoom functionality within the Flutter application.

===== Solutions and Simulations =====

Solution: Basic Pinch-to-Zoom
Success Rate: 65.43%
Star Rating: ⭐⭐⭐⭐ (4.0 stars)

Solution: Double-Tap to Zoom
Success Rate: 45.89%
Star Rating: ⭐⭐⭐ (3.0 stars)

Solution: Smooth Scrolling Zoom
Success Rate: 72.45%
Star Rating: ⭐⭐⭐⭐⭐ (5.0 stars)

Solution: Multi-Finger Gestures
Success Rate: 35.22%
Star Rating: ⭐⭐ (2.5 stars)

Solution: Programmatic Zoom Control
Success Rate: 82.13%
Star Rating: ⭐⭐⭐⭐⭐ (5.0 stars)

Note: The success rates and star ratings are simulated and will change each time the script runs.
Conclusion
By implementing the enhancement following the plans and running the simulation, you can evaluate the effectiveness of different zoom solutions. This simulation will aid in making informed decisions to provide the most robust zoom functionality in your Flutter application.


Bulk actions - documentation for bulk actions

This pr adds documentation about new hooks and how to create and register custom bulk actions
Rendered:

https://wagtail--7463.org.readthedocs.build/en/7463/advanced_topics/customisation/custom_bulk_actions.html
https://wagtail--7463.org.readthedocs.build/en/7463/reference/hooks.html#bulk-actions

Could this documentation go in the 'Extending Wagtail' section, rather than Advanced Topics -> Customisation? It seems to me that this is something you're more likely to do while building a Wagtail extension package, rather than when building a website.

@gasman Yeah that definitely makes more sense! The 'Extending' section is not present in the commit history of this branch, so I didn't notice it.

@KIRA009 I've rebased feature/bulk-actions on latest main so it should all be there, if you rebase your branch on feature/bulk-actions you should have the section (https://docs.wagtail.io/en/latest/extending/index.html)

Merged manually in ceb5f4a and parents


Enable ingestion of the exposed metrics by openshift-montoring

This PR enable the ingestion of the velero metrics by openshift monitoring. We are deploying the service and serviceMonitor required for the metrics to be scraped by prometheus. We propose the following metrics for the monitoring and telemetry purposes:
"velero_backup_total"
"velero_restore_total"

Codecov Report

Merging #410 (0153642) into master (7439793) will decrease coverage by 4.92%.
The diff coverage is 0.79%.

@@            Coverage Diff             @@
##           master     #410      +/-   ##
==========================================
- Coverage   40.92%   36.00%   -4.93%
==========================================
  Files           9       10       +1
  Lines        1835     2086     +251
==========================================
  Hits          751      751
- Misses       1037     1288     +251
  Partials       47       47

Impacted Files
Coverage Δ

controllers/monitor.go
0.00% <0.00%> (ø)

controllers/velero_controller.go
0.00% <0.00%> (ø)

controllers/bsl.go
62.56% <100.00%> (ø)

Continue to review full report at Codecov.

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

/retest

Is this cardinality 13 or higher for series count planned to send to telemetry?

@smarterclayton is the cardinality of 13 or lower for each metric, or in total for all metrics?

@smarterclayton never mind you said series, not metrics sorry
IIUC this means that that we can only send 13 series to monitoring. The key distinction here is going to be that when a label is added to the data, you increase the cardinality by 1.

Is this cardinality 13 or higher for series count planned to send to telemetry?

@smarterclayton After re-evaluating our telemetry needs, we have decided to use only two metrics to be ingested by openshift-monitoring: velero_backup_total and velero_restore_total . Both these metrics do not have any kind of label, so I believe the cardinality would be 2.

/retest

/retest

/retest


fix: change logic to upscale amount in input field

The bug was caused by this logic
if (field.value.length > symbol.length && previousTextLength > field.value.length)

If you had a value of length 10, then delete 9 characters this would be evaluated to false  -> field.value.length > symbol.length thus not increasing back the size of the text.
The correct logic is to check if value.length is less or equal to the symbol length, if that is true then you can safely use the maxFontSize, then you either check if you are adding text or deleting outside of the safe boundary and increase/decrease font size accordingly
I also removed this logic from the useEffect since having it in there is usually a code smell, I think is better to implement  this on an event handler.
I'm open to any feedback or changes necessary to merge this PR 😀
https://github.com/hirosystems/wallet/assets/20308945/e4f96c7d-5ea8-4323-97ed-21c03fc8bbb9
fixes #3767

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

@kyranjamie done! Let me know if there are any more changes needed.

thanks for the contribution @ddanielcruzz ! I tested with sip-10 token (with long symbol) and it doesn't look ok.
you can see the behaviour on the video:
https://github.com/hirosystems/wallet/assets/46521087/8210a76d-57eb-4fca-a1d3-bdea0dd54ed1

Thanks for the catch @alter-eggo! I'll take a look later today or tomorrow 😄

@alter-eggo This is fixed with my latest commit :)

tested and it looks good now, thanks @ddanielcruzz !

@ddanielcruzz can you post an updated video here? The one in the description shows the amount field now off center when typing.

@fbwoolf I think that's a different bug as it's present in the prod version too. Here's a side to side comparison, left is prod and right is dev. I can tackle this too if you want 😄
https://github.com/hirosystems/wallet/assets/20308945/beed4e73-cc5a-4535-af1b-21d62986d35d

@ddanielcruzz Thanks, please do! 🙏

@fbwoolf I think that's a different bug as it's present in the prod version too. Here's a side to side comparison, left is prod and right is dev. I can tackle this too if you want 😄

Ok, great, thx for video. That must have been introduced at some pt after I worked on it. I wasn't aware of the bug. If you can fix it, that would be fantastic!

Fixed 😄 @fbwoolf
https://github.com/hirosystems/wallet/assets/20308945/6ae18a54-77de-49c7-a12b-c6cd24129841

Cloned here to merge: https://github.com/hirosystems/wallet/pull/4105, thanks @ddanielcruzz

Thanks @fbwoolf, please let me know if there any other issues I can help with :)

@ddanielcruzz mind reaching out via email at<EMAIL_ADDRESS>to discuss broader opportunities? We've appreciated your contributions so far!


Implements a RegExp for the deploy matcher.

This is backwards compatible as a basic string is also a valid regexp It's applied case-insensitive for the backwards compatibility.
Allows for sst deploy "Stack1|Stack2"
I'm not sure the appropriate way to test this?

Do the running locally instructions from this doc help? https://github.com/sst/v2/blob/master/CONTRIBUTING.md

@jayair I suppose I meant, what's the best way to unit test/automated test this. We've been running this patch in our CI deployments now for a few weeks.

Oh I see. That's different, I'll ask the team to take a look.


enum support

Hi Björn (@HyperDrummer),
I'm surfacing your email question to a ticket so it is public; other people may have the same question.
I haven't implemented enum support. If you would like to assist with this, the first step would be to write down several examples of the starting and ending text that involve transformation of enums, and then to put those into a test file. The bambam project is entirely test driven (BDD to the extent possible), and this is an especially valuable approach for compilers (like bambam). Once you have a failing test in place, we can look at how to implement it. I would suggest starting a new branch so that the master doesn't have the failing test on it.
Best regards,
Jason
You asked:
Imagine these structs:
type MyStruct struct {
Hello []string capid:"0"
World []int    capid:"1"
}
type People struct {
Name     string capid:"0"
LastName string capid:"1"
}
type MType int
const (
PeopleType MType = iota
MyStructType
)
type MsgType struct {
Msg     MType capid:"0"
MsgSize int   capid:"1"
}
For these go structures I want to create a schema with bambam including the code generation.
Ok, now I call bambam and what I end up with ist the following schema:
@0x827b101c9c0b86fb;
using Go = import "go.capnp";
$Go.package("main");
$Go.import("testpkg");
struct MsgTypeCapn {
msg      @0:   Int64;
msgSize  @1:   Int64;
}
struct MyStructCapn {
hello  @0:   List(Text);
world  @1:   List(Int64);
}
struct PeopleCapn {
name      @0:   Text;
lastName  @1:   Text;
}
In the generated code it gets even worse:
func MsgTypeCapnToGo(src MsgTypeCapn, dest *MsgType) *MsgType {
if dest == nil {
dest = &MsgType{}
}
dest.Msg = *MTypeCapnToGo(src.Msg(), nil)
dest.MsgSize = int(src.MsgSize())
return dest
}
which leads to build errors:
./translateCapn.go:37: undefined: MTypeCapnToGo
./translateCapn.go:47: undefined: MTypeGoToCapn
The undefined data types never got generated.
Do you have an idea how to use enums with code generation?
Thanks in advance
Björn

You should used fenced code blocks for code, that way it's easier to read (indentation preserved, mono font, optional highlighting, and content won't get misinterpreted as other markup).
https://help.github.com/articles/github-flavored-markdown/#fenced-code-blocks

Hi Dmitri (@shurcooL), thanks for your comment.  I've appreciated your contributions to the Go community, particularly go-goon which I find invaluable. Are you using bambam?

Hi @glycerine, I'm glad you found some of my work useful!
I found out about this repo via https://github.com/avelino/awesome-go/pull/353, but I am not using it at this time.


Add ase_read example

Signed-off-by: tyamaguchi<EMAIL_ADDRESS>ase.io.readがinitial_chargeを持つxyz fileのreadに失敗するbugに対するwork around

Note that this bug arises even user does not set initial_charges explicitly.
When user repeated write & read with only charge property

xyz write atoms with calculated charge
xyz read --> the prev charge is set as initial_charge
xyz write --> atoms with initial_charge, and calculated charge
xyz read --> cannot read both initial_charge & charge. ERROR.

Note that this bug arises even user does not set initial_charges explicitly.
このパターンについても追加したので確認お願いします


docs: reference for developers

Going through this is exercise left me feeling that we could use more improvement to the structure of documentation. I think a developer FAQ might be useful. Moreso I think that we should move away from GitHub markdown docs and by rule keep everything in github.io docs. This adds some friction to writing new docs but makes the user experience a lot better (search and more robust indexing). Where appropriate we could leave markdown files in the expected places with a link to the corresponding .io doc.
Anyone have any thoughts on this?

I would vote for keeping developer docs in GH MD FWIW, lowering the activation energy for modifying/adding docs will mean more docs.


Make jacoco report to be generated faster in local

Description
Jacoco report only needs unit test to be run. Therefore we exclude yamlRestTest and integTest from dependency so that it can be generated faster during local development.
Issues Resolved
N/A
Check List

[X] Commits are signed per the DCO using --signoff

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

are we going to backport this to 2.x?

Codecov Report

Merging #267 (8438132) into main (49565b2) will not change coverage.
The diff coverage is n/a.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@            Coverage Diff            @@
##               main     #267   +/-   ##
=========================================
  Coverage     85.14%   85.14%
  Complexity      379      379
=========================================
  Files            52       52
  Lines          1185     1185
  Branches         98       98
=========================================
  Hits           1009     1009
  Misses          135      135
  Partials         41       41

are we going to backport this to 2.x?

Yes


How to set global multisample? [not a issue]

sorry, I do not know where to ask questions...(some IRC?)
I just found Texture Multisample, there is something like:
glfwWindowHint(GLFW_SAMPLES, 4);

You can use WindowBuilder().with_multisample(4).build_glium() when creating the display.
To ask questions, you can try #rust-gamedev on irc.mozilla.org.
There's also the gitter, which I never advertised about but that I also follow: https://gitter.im/tomaka/glium

And if you want to change it dynamically, you should create a new WindowBuilder and call rebuild_glium, like in the fullscreen example: https://github.com/tomaka/glium/blob/87b6dcaf1e19b57ebe4d4d9456327af77058c472/examples/fullscreen.rs#L115

Thank you!

I simply add .with_multisampling(4) in triangle, but

What's your platform?

OS X 10.10.3

Multisampling hasn't been implemented for cocoa yet, sorry :(
Relevant issue: https://github.com/tomaka/glutin/issues/145

thank you agian


updates due to changes in log analytics

The workflows on this page have changed and need to be update to reflect changes to lLog Analytics workspace UIs
[Enter feedback here]

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

ID: 56ea7a65-07e2-1af6-9ce2-a1909aedd31b
Version Independent ID: d9a077ff-5241-36ad-524a-33ee850e110f
Content: Collect data from hybrid Windows computer with Azure Monitor - Azure Monitor
Content Source: articles/azure-monitor/learn/quick-collect-windows-computer.md
Service: azure-monitor
GitHub Login: @bwren
Microsoft Alias: bwren

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

Thanks for the heads up. These are the queue to be updated.
#please-close


Documentation: Clicking link to (anchor) "browser defaults" does not work (no effect)

The How it works section of the Forms component documentation contains a "browser defaults" link to an anchor on the same page. While the page does contain a Browser defaults section and this anchor seems valid, clicking that link has no effect here (Google Chrome 60 on Windows 8). Clicking does not trigger any error/warning but does not move the viewport, for a reason which is not obvious to me.

Sorry but it works for me on Win10 and Chrome 60

typo in the relative anchor (missing the "s" at the end)

Was going to say that. Thanks Patrick


Add Ruby middleware for Rack to index.html

Link to project is https://github.com/sqreen/rb-security-txt

Thank you for your patience, you have been added to https://securitytxt.org/projects.


Bug 1801237: *: bump etcd to v3.3.18

details soon

/bugzilla refresh

/bugzilla refresh

/bugzilla refresh

/cherrypick openshift-4.3

FYI
cc @smarterclayton @deads2k @abhinavdahiya @wking @crawford @sttts

etcd came up seems like an issue with online-marketplace community operators..
/retest

/approve
/lgtm


British Columbia, Canada data conditions

Currently broken.  @nvkelso, are we okay with these conditions?  https://www.icisociety.ca/terms-conditions-3/

Yes.

Cool, I'll start the process.

Agree, yes.

On Jun 14, 2017, at 18:11, Ian Dees<EMAIL_ADDRESS>wrote:
Yes.
―
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.


chore(production): bump version of db-migrations

OpenAI key is already added for both staging and production, right?

OpenAI key is already added for both staging and production, right?

yes, thanks for asking


Where is possibility to use proxy? Using setOpt triggers warning

eg. $curl->setOpt('PROXY', '<IP_ADDRESS>:80');
Returns:
PHP Warning:  curl_setopt() expects parameter 2 to be long, string given in /var/dev/web/libs/Curl/Curl.php on line 658
OS: Debian Jessie 8 AMD64
Server environment: XAMPP 5.6.8 / PHP 5.6.8

Hi. You'll pass the same parameters that you would pass to curl_setopt.
$this->setOpt(CURLOPT_PROXY, '<IP_ADDRESS>:80');

Oh, I was though if call is setOpt, CURLOPT can be excluded. Thank you, and sorry for interruption.
Best regards!


sh: 1: ./fusibile: Permission denied

Run depth map fusion & filter
./fusibile -input_folder ./output_1536x1152/scan4/points_mvsnet/ -p_folder ./output_1536x1152/scan4/points_mvsnet/cams/ -images_folder ./output_1536x1152/scan4/points_mvsnet/images/ --depth_min=0.001 --depth_max=100000 --normal_thresh=360 --disp_thresh=0.1 --num_consistent=2.0 -color_processing
sh: 1: ./fusibile: Permission denied

I met this bug too.😥

Yes.  For me,tried to execute a directory instead of a specific executable file
What should I do to fix this error?

you should use ./fusibile/fusibile instead of /fusibile


Limit shell history to the current project

Amazing work vscode team! 💯 👏
Is there a way we can store the shell history for each project separately ? I mean, pressing the up arrow or ctrl+r search should be limited to only the commands I used in current project. It would a huge time saver, if my shell history is limited to just that project. I can run few commands on a project and after reopening it later I still have access to just those commands instead of me browsing through my entire shell history. Will be helpful in debugging as well.
Thanks for your awesome work! 😄

Shell history is 100% handled by the shell right now (eg. bash, tmux, powershell). You may be able to do this by tweaking arguments passed to the shell using the terminal.integrated.<platform>.shellArgs setting if it's supported but no plans to integrate sort of thing into the core.


Kellyroach/upgrade to xcode941

This pull request

Upgrades APLineChart to Xcode 9.4.1 / Swift 4.2
Adds public domain atmosbasement.mp3 to demo app for a more animated likeable demo
Adds an AppIcon and LaunchImage
Renames demo "Example" app to "OMMeterTest" app

Ok.


LEGO: Pull request from lego/hb_835_20170309001019154 to master

LEGO: Pull request from lego/hb_835_20170309001019154 to master with localized lcls

@csigs,
Thanks for your contribution.
To ensure that the project team has proper rights to use your work, please complete the Contribution License Agreement at https://cla.microsoft.com.
It will cover your contributions to all Microsoft-managed open source projects.
Thanks,
Microsoft Pull Request Bot


Ligatures

Hi,
I've spent some time with opentype, using it to load fonts used in txt.js. It was surprisingly easy, but I miss ligatures.
From what I can see in the code, opentypejs uses GPOS tables for kerning values. Isn't the GPOS also the table for ligatures? Anyone working on this now? If not, any pointer for me if I find the time to try and implement it?
Thanks to all developers for an amazing feat - if it wasn't for the obvious proof that it's working, I wouldn't have believed that parsing of binary font data was feasible in javascript

Hi casperno,
I wrote the GPOS code, and I am currently working on the GSUB which stores ligatures and other interesting features. I will submit some pull requests before the end of the month to support GSUB reading and (partial) writing.

Fantastic! Looking forward to it.

Hey @fpirsch that's great news! Let me know if I can help.

#200 Adds full GSUB parsing. Writing simple cases coming soon.

This is amazing! How would you go about using the tables for specific features (like rlig, liga, onum, salt, etc.)? Is that implemented yet? If not, what are your thoughts on implementation?

@fpirsch amazing work!

@Harbs The GSUB data is exposed through the font.tables.gsub object. I'm now working on a Substitution object, made available as font.substitution, carrying all the methods needed to list, search and edit this data (for the most common features).

I'm not sure what other APIs look like. The FTE model is one that makes sense to me.
http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS56773E36-AC97-4047-B9C1-D9DFA9A51F3F.html
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/text/engine/TextElement.html
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/text/engine/ElementFormat.html
Some similar API seems ideal. I like that opentype.js is finer grained than FTE.

@fdb To be clear, I was not suggesting a full FTE-type implementation. I'd love for someone to do my work for me, but I expect to have to do that myself... ;-)
I was rather suggesting some type of object similar to ElementFormat where you could specify features for a run of text and get back Glyph objects which match the feature set.
Something like: Font.stringToGlyphs(string,format) instead of Font.stringToGlyphs(string)
It would make a lot of sense for at least this functionality to be in the core library.

@fdp I'm about to submit a new PR where the API looks like
font.substitution.getLigatures()
font.substitution.addLigature({sub: [42, 42, 45], by: 167})
Glyphs are referenced by id. Using their names would require some more work in the GlyphSet I suppose.
font.gsub could be confusing with the actual GSUB data font.tables.gsub which does not always exist, so I went for font.substitution.
This is a start, it could use some polish later.

I'd rather change the API a bit. Instead of font.substitution.getLigatures() I think font.substitution.getFeature('liga') makes more sense. There's at least three features related to ligatures alone (i.e. rlig, liga, dlig) not to mention the plethora of other GSUB features. It might also make sense to have font.substitution.getFeatures(['liga','rlig']) which would aggregate the subsitutions of multiple features.
Likewise, font.substitution.addLigature({sub: [42, 42, 45], by: 167}) should probably be font.substitution.addSub("liga",{sub: [42, 42, 45], by: 167})
Does this make sense?

@Harbs You're right. I was focused on standard ligatures, but a more generic approach by feature name make more sense. So let's stick to font.substitution.getFeature('liga').
And maybe font.substitution.add("liga",{sub: [42, 42, 45], by: 167}) could do the job ? font.substitution.addSub("liga",{sub: [42, 42, 45], by: 167}) feels like there's a lot of "sub".

Sure. "add" sounds better.
One thing that's going to be important to think about is the order of substitutions. There's lots of complex fonts which have really complex tables where the order is critical for correct rendering of text. I'm not sure the best way to handle that, and "one thing at a time", but I figured it does not hurt to mention the issue... The is really awesome stuff! :-)

My idea was to stay low-level and simply append new substitutions. This leaves the problem of ordering to the application.

The order is programmed into the font. The application has no way of knowing the correct order unless the info is presented in an informative way.
One possible way to solve this problem would be to allow font.substitution.getFeatures(['liga','rlig']) like I mentioned above and the list of substitutions would reflect the table order in the font (not the order of features as requested).

I wonder if CSS3 feature strings could be helpful,
https://www.w3.org/TR/css-fonts-3/#propdef-font-variant

I've updated opentype.js in my project and implemented support for ligatures. THANK YOU! As a typography nerd, this makes me very happy.
The getLigatures does what it says, but returns a result that isn't very fast to use for lookups.  So I've wrote a new function that returns a lookup table, structured much like the opentype font.
Is this something you'd feel comfortable adding to the main project?
Usage:
var ligLookup = fnt.substitution.getLigatureLookup('liga');
var fiGlyph = ligLookup['f']['f].glyph

   Substitution.prototype.ligLookup = null;

            Substitution.prototype.getLigatureLookup = function(feature, script, language) {
                script = script || 'DFLT';
                language = language || 'DFLT';

                if (this.ligLookup)
                    return this.ligLookup;
                var ligLookup = {}
                var lookupTable = this.getLookupTable(script, language, feature, 4);
                if (!lookupTable) {
                    return ligLookup;
                }
                var subtables = lookupTable.subtables;
                for (var i = 0; i < subtables.length; i++) {
                    var subtable = subtables[i];
                    var glyphs = this.expandCoverage(subtable.coverage);
                    var ligatureSets = subtable.ligatureSets;
                    for (var j = 0; j < glyphs.length; j++) {
                        var startGlyph = glyphs[j];
                        var fontGlyphs = this.font.glyphs.glyphs;
                        var firstChr = fontGlyphs[startGlyph].name;
                        ligLookup[firstChr] = {};
                        var ligSet = ligatureSets[j];
                        for (var k = 0; k < ligSet.length; k++) {
                            var lig = ligSet[k];
                            var child = ligLookup[firstChr];
                            var ligCmps = lig.components;
                            for (var l = 0; l < ligCmps.length; l++) {
                                if (child[fontGlyphs[ligCmps[l]].name] == undefined)
                                    child[fontGlyphs[ligCmps[l]].name] = {};
                                if (l < ligCmps.length - 1)
                                    child = child[fontGlyphs[ligCmps[l]].name];
                            }
                            child[fontGlyphs[ligCmps[l - 1]].name].glyph = fontGlyphs[lig.ligGlyph];
                        }
                    }
                }
                this.ligLookup = ligLookup;
                return ligLookup;

            }

Good idea, but I'd take it one step further. Instead of getLigatureLookup, I'd make it "getFeatureLookup" to make it generalized, and it would have a hastable of the previously requested features.

Good thinking. I see that getFeature is implemented this way.
How do you feel about the results being cached in Substitution.prototype.ligLookup?
Should it be cached by the code using it instead? Or is the additional memory footprint negligible?

Hi @Casperno, you're right the getLigatures method is not intended for fast rendering lookups, but for font edition purposes.
IMHO the best lookup structure for this would be the raw font data in font.tables.gsub. I don't think there is a need to build an additional structure. In particular, expandCoverage is handy but not efficient. Instead, we need fast search methods in the raw data.
Of course the fastest way would be to search directly the binary data.

I did not quite get exactly what expandCoverage does. (I was actually trying to figure out the logic inside substitutions today.) Can you explain?

BTW:
I'm not sure I'm reading the code correctly, so I might have missed it, but did not see where ligature lookup sorting was taking place.
 I'm not sure if the sorting should happen when the type 4 tables are initially parsed or at some later point. (It makes the most sense to me to do a one time lazy sorting, the first time the type 4 tables are accessed.)
Thanks.

You're quite right, the sorting is not done in the supplied code. Basically, if a char has ligatures at all, we look forward four characters, try first looking up with all four, then three, then two.
I kept that part out of opentypejs, as it seem more of an layout implementation problem than.

That seems pretty inefficient, but I'm not sure there's a better way.
I'm probably going to implement a caching mechanism for words so I only have to do the lookups on a particular word once.

Another question I'm having trouble figuring out:
Are glyph classes and glyph ranges supported? It seems they would need to be (for GPOS as well), but I couldn't find it.
Any pointers would be very welcome.

FYI:
While brushing up on my OpenType, I came across this post:
http://ansuz.sooke.bc.ca/entry/131
Very useful observations there.
I found that bit towards the end about named lookups very interesting as well. It's important to know where the named lookup is declared for implementation purposes.

@Harbs expandCoverage unifies both coverage table types (list and range) in a single list. Useful for editors, and that's all.
Glyph classes and ranges are parsed, but not used in the rendering (btw, currently the GSUB table is not used at all in the rendering process). font.substitution.add doesn't use them either. If you want to add a substitution with classes or ranges, you'll have to modify directly the font.tables.gsub object.
There is no ordering in opentype. font.substitution.getFeature lists substitutions in the same order they are in the file. And font.substitution.add adds them one by one in the order you provide them.

I'm closing this issue as the first version with ligatures is now working.
The examples are in the tests for now.
If someone have ideas or more advanced need, just open a new issue 😉