Fix 5244: Removed Email Subclasses

Removed Email Subclasses used by the Member class (Member_ChangePasswordEmail and Member_ForgotPasswordEmail).
Added a test for the forgot password email.
Improved the test for the change-password email.
It's not guaranteed that the TestMailer instance will remain the same across a unit-test, made $emailsSent a static member to fix this issue.

Thanks, very good overall! Just a comment on the member variables.

@tractorcow Apparently there was a GitHub outage. Could you re-run the CI to check if tests pass?

OK - I'm not particularly happy with this because it actually makes these emails much more rigid than they used to be.
I'd assume the reason they are their own subclasses is because it allows better customisation, however there's no way here to change their behaviour (ie: no use of config or extension hooks)?
This is more a problem with the injector that should be fixed IMO rather than this (see #4774 where it's been decided that we shouldn't override all child classes). This means it's on the dev to override all subclasses individually if needed.

related: https://github.com/silverstripe/silverstripe-framework/pull/5000

What kind of customizations did you have in mind? The most common one is obviously overriding the template which is still possible.
For me, Emails are pretty much presentational and shouldn't contain any logic, or at least no logic that is specific to the member tasks being discussed here? As a developer you might want to have a more fine grained control when and under what circumstances these Emails are being sent, but this is out of the scope of an Email subclass, isn't it? Same goes for what data is being fed into the Email template… it's something that happens where the Email is instantiated, not in the Email class itself.
We could add an Injector "placeholder", something like this:
Injector:
  Member_ChangePasswordEmail:
    class: Email

And then use Injector::inst()->create('Member_ChangePasswordEmail'); in code. This will still create an instance of Email by default, but could easily be swapped out for something else. As outlined before, I don't see much benefit in doing this, though.
And: Yeah, it seems like the issue #5000 is the same I encountered when writing tests for this fix.

You're right. But that doesn't mean the devs aren't doing it and without providing other means to allow them to, makes it more rigid.
Your placeholder solution compounds the problem in #5000, surely? Unless the injector looks for the class that replaces email when insttantiating this?

All I'm saying is that issue #5000 would be fixed by this PR.
The injector placeholder was just a suggestion to mitigate the drawbacks of having these Email subclasses removed and is not related to issue #5000 at all. Sorry if that was unclear.

And a note regarding Email subclasses: I think these exist, because in earlier versions of SilverStripe (2.2 and prior) didn't have a setTemplate method on Email, so subclassing was the only way of using a separate Template.
The shop module also deprecated Email subclasses in favor of using setTemplate.
My point is: These subclasses are here because of legacy reasons and no longer represent best-practice.
I'll leave it up to you ( @dhensby , @tractorcow anyone else? ) to decide if you want to keep these subclasses or not. Please let me know, so that I can amend this PR, because I think it would contain other useful improvements (such as improving Email testing). Cheers.

@bummzack OK - I've spoken to @kinglozzer and I think it's worth merging
I do think this is more rigid that it was before, but allowing custom templates should do away with most of the customisations people will need.

thanks

Great. From my point of view, issue #5000 could also be closed now. Should I create a separate PR for 3.x to fix the Email testing issue there as well?

On 08.04.2016, at 18:09, Daniel Hensby<EMAIL_ADDRESS>wrote:
@bummzack OK - I've spoken to @kinglozzer and I think it's worth merging
I do think this is more rigid that it was before, but allowing custom templates should do away with most of the customisations people will need.
—
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub

@bummzack yes, please patch 3.x for that issue (even patching 3.2.x would make sense)


polybar dumped core

Describe the issue
Polybar v.3.4.3 crashes at least once a day on arch with bspwm. I don't know why it crashes and can't reproduce, I didn't find with what it can be related.
After a crash I get this message at journalctl :
`Process 1196 (polybar) of user 1000 dumped core.
                                               Stack trace of thread 1196:
                                               #0  0x00007f423e1187af __dynamic_cast (libstdc++.so.6 + 0xa17af)
                                               #1  0x0000563393b18ee7 n/a (polybar + 0x25eee7)
                                               #2  0x0000563393b1aa89 _ZNK7polybar10connection14dispatch_eventERKSt10shared_ptrI19xcb_generic_event_tE (polybar + 0x260a89)
                                               #3  0x0000563393a00c8e _ZN7polybar10controller11read_eventsEv (polybar + 0x146c8e)
                                               #4  0x0000563393a064ca _ZN7polybar10controller3runEbNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE (polybar + 0x14c4ca)
                                               #5  0x00005633939af397 main (polybar + 0xf5397)
                                               #6  0x00007f423dd56002 __libc_start_main (libc.so.6 + 0x27002)
                                               #7  0x00005633939b1c6e _start (polybar + 0xf7c6e)

                                               Stack trace of thread 1263:
                                               #0  0x00007f423e6b0cb7 n/a (libcairo.so.2 + 0x69cb7)
                                               #1  0x00007f423e6c06fa n/a (libcairo.so.2 + 0x796fa)
                                               #2  0x00007f423e676160 n/a (libcairo.so.2 + 0x2f160)
                                               #3  0x00007f423e6ce90a cairo_show_text_glyphs (libcairo.so.2 + 0x8790a)
                                               #4  0x0000563393a21360 _ZN7polybar5cairo7font_fc6renderERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEdd (polybar + 0x167360)
                                               #5  0x0000563393a1c4fd _ZN7polybar8renderer9draw_textERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE (polybar + 0x1624fd)
                                               #6  0x0000563393a1d207 _ZThn120_N7polybar8renderer2onERKNS_7signals6parser4textE (polybar + 0x163207)
                                               #7  0x0000563393a16e10 _ZN7polybar6parser5parseERKNS_12bar_settingsENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE (polybar + 0x15ce>
                                               #8  0x00005633939c3637 _ZN7polybar3bar5parseEONSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb (polybar + 0x109637)
                                               #9  0x00005633939fec9d _ZN7polybar10controller14process_updateEb (polybar + 0x144c9d)
                                               #10 0x0000563393a0442c _ZN7polybar10controller18process_eventqueueEv (polybar + 0x14a42c)
                                               #11 0x00007f423e146b74 execute_native_thread_routine (libstdc++.so.6 + 0xcfb74)
                                               #12 0x00007f423deff422 start_thread (libpthread.so.0 + 0x9422)
                                               #13 0x00007f423de2ebf3 __clone (libc.so.6 + 0xffbf3)

                                               Stack trace of thread 1211:
                                               #0  0x00007f423df05e32 pthread_cond_wait@@GLIBC_2.3.2 (libpthread.so.0 + 0xfe32)
                                               #1  0x00007f423e140c01 __gthread_cond_wait (libstdc++.so.6 + 0xc9c01)
                                               #2  0x0000563393a29bce n/a (polybar + 0x16fbce)
                                               #3  0x00007f423e146b74 execute_native_thread_routine (libstdc++.so.6 + 0xcfb74)
                                               #4  0x00007f423deff422 start_thread (libpthread.so.0 + 0x9422)
                                               #5  0x00007f423de2ebf3 __clone (libc.so.6 + 0xffbf3)

                                               Stack trace of thread 1262:
                                               #0  0x00007f423df06488 pthread_cond_clockwait (libpthread.so.0 + 0x10488)
                                               #1  0x0000563393a6d535 _ZN7polybar7modules6moduleINS0_11date_moduleEE5sleepENSt6chrono8durationIdSt5ratioILl1ELl1EEEE (polybar + 0x1b3535)
                                               #2  0x0000563393a6de6d _ZN7polybar7modules12timer_moduleINS0_11date_moduleEE6runnerEv (polybar + 0x1b3e6d)
                                               #3  0x00007f423e146b74 execute_native_thread_routine (libstdc++.so.6 + 0xcfb74)
                                               #4  0x00007f423deff422 start_thread (libpthread.so.0 + 0x9422)
                                               #5  0x00007f423de2ebf3 __clone (libc.so.6 + 0xffbf3)

                                               Stack trace of thread 1212:
                                               #0  0x00007f423de2405f __poll (libc.so.6 + 0xf505f)
                                               #1  0x00007f423e321c14 n/a (libpulse.so.0 + 0xdc14)
                                               #2  0x00007f423e32f059 pa_mainloop_poll (libpulse.so.0 + 0x1b059)
                                               #3  0x00007f423e339301 pa_mainloop_iterate (libpulse.so.0 + 0x25301)
                                               #4  0x00007f423e3393b1 pa_mainloop_run (libpulse.so.0 + 0x253b1)
                                               #5  0x00007f423e32961e n/a (libpulse.so.0 + 0x1561e)
                                               #6  0x00007f423d3add1c n/a (libpulsecommon-13.0.so + 0x1dd1c)
                                               #7  0x00007f423deff422 start_thread (libpthread.so.0 + 0x9422)
                                               #8  0x00007f423de2ebf3 __clone (libc.so.6 + 0xffbf3)

                                               Stack trace of thread 1250:
                                               #0  0x00007f423de2feac recv (libc.so.6 + 0x100eac)
                                               #1  0x0000563393b0ee1f _ZN7polybar11socket_util15unix_connection7receiveB5cxx11ElPli (polybar + 0x254e1f)
                                               #2  0x0000563393b0efdb _ZN7polybar11socket_util15unix_connection4peekEm (polybar + 0x254fdb)
                                               #3  0x0000563393a5a90c _ZN7polybar7modules12event_moduleINS0_12bspwm_moduleEE6runnerEv (polybar + 0x1a090c)
                                               #4  0x00007f423e146b74 execute_native_thread_routine (libstdc++.so.6 + 0xcfb74)
                                               #5  0x00007f423deff422 start_thread (libpthread.so.0 + 0x9422)
                                               #6  0x00007f423de2ebf3 __clone (libc.so.6 + 0xffbf3)

                                               Stack trace of thread 1254:
                                               #0  0x00007f423df06488 pthread_cond_clockwait (libpthread.so.0 + 0x10488)
                                               #1  0x0000563393ac1035 _ZN7polybar7modules6moduleINS0_14network_moduleEE5sleepENSt6chrono8durationIdSt5ratioILl1ELl1EEEE (polybar + 0x2070>
                                               #2  0x0000563393ac188d _ZN7polybar7modules12timer_moduleINS0_14network_moduleEE6runnerEv (polybar + 0x20788d)
                                               #3  0x00007f423e146b74 execute_native_thread_routine (libstdc++.so.6 + 0xcfb74)
                                               #4  0x00007f423deff422 start_thread (libpthread.so.0 + 0x9422)
                                               #5  0x00007f423de2ebf3 __clone (libc.so.6 + 0xffbf3)

                                               Stack trace of thread 1252:
                                               #0  0x00007f423df06488 pthread_cond_clockwait (libpthread.so.0 + 0x10488)
                                               #1  0x0000563393ac8115 _ZN7polybar7modules6moduleINS0_17pulseaudio_moduleEE5sleepENSt6chrono8durationIdSt5ratioILl1ELl1EEEE (polybar + 0x2>
                                               #2  0x0000563393ac8a71 _ZN7polybar7modules12event_moduleINS0_17pulseaudio_moduleEE6runnerEv (polybar + 0x20ea71)
                                               #3  0x00007f423e146b74 execute_native_thread_routine (libstdc++.so.6 + 0xcfb74)
                                               #4  0x00007f423deff422 start_thread (libpthread.so.0 + 0x9422)
                                               #5  0x00007f423de2ebf3 __clone (libc.so.6 + 0xffbf3)

                                               Stack trace of thread 1255:
                                               #0  0x00007f423df06488 pthread_cond_clockwait (libpthread.so.0 + 0x10488)
                                               #1  0x0000563393ac1035 _ZN7polybar7modules6moduleINS0_14network_moduleEE5sleepENSt6chrono8durationIdSt5ratioILl1ELl1EEEE (polybar + 0x2070>
                                               #2  0x0000563393ac188d _ZN7polybar7modules12timer_moduleINS0_14network_moduleEE6runnerEv (polybar + 0x20788d)
                                               #3  0x00007f423e146b74 execute_native_thread_routine (libstdc++.so.6 + 0xcfb74)
                                               #4  0x00007f423deff422 start_thread (libpthread.so.0 + 0x9422)
                                               #5  0x00007f423de2ebf3 __clone (libc.so.6 + 0xffbf3)

                                               Stack trace of thread 1256:
                                               #0  0x00007f423de2405f __poll (libc.so.6 + 0xf505f)
                                               #1  0x0000563393b0dd71 _ZN7polybar7io_util9poll_readEii (polybar + 0x253d71)
                                               #2  0x0000563393acb4f7 n/a (polybar + 0x2114f7)
                                               #3  0x0000563393acbcd9 n/a (polybar + 0x211cd9)
                                               #4  0x0000563393acc58d n/a (polybar + 0x21258d)
                                               #5  0x00007f423e146b74 execute_native_thread_routine (libstdc++.so.6 + 0xcfb74)
                                               #6  0x00007f423deff422 start_thread (libpthread.so.0 + 0x9422)
                                               #7  0x00007f423de2ebf3 __clone (libc.so.6 + 0xffbf3)

                                               Stack trace of thread 1257:
                                               #0  0x00007f423de2405f __poll (libc.so.6 + 0xf505f)
                                               #1  0x0000563393b0c789 _ZNK7polybar13inotify_watch4pollEi (polybar + 0x252789)
                                               #2  0x0000563393a4c1aa _ZN7polybar7modules14inotify_moduleINS0_14battery_moduleEE11poll_eventsEv (polybar + 0x1921aa)
                                               #3  0x0000563393a4c947 _ZN7polybar7modules14inotify_moduleINS0_14battery_moduleEE6runnerEv (polybar + 0x192947)
                                               #4  0x00007f423e146b74 execute_native_thread_routine (libstdc++.so.6 + 0xcfb74)
                                               #5  0x00007f423deff422 start_thread (libpthread.so.0 + 0x9422)
                                               #6  0x00007f423de2ebf3 __clone (libc.so.6 + 0xffbf3)

                                               Stack trace of thread 1258:
                                               #0  0x00007f423df06488 pthread_cond_clockwait (libpthread.so.0 + 0x10488)
                                               #1  0x0000563393a47d15 _ZN7polybar7modules6moduleINS0_14battery_moduleEE5sleepENSt6chrono8durationIdSt5ratioILl1ELl1EEEE (polybar + 0x18dd>
                                               #2  0x0000563393a41d48 _ZN7polybar7modules14battery_module9subthreadEv (polybar + 0x187d48)
                                               #3  0x00007f423e146b74 execute_native_thread_routine (libstdc++.so.6 + 0xcfb74)
                                               #4  0x00007f423deff422 start_thread (libpthread.so.0 + 0x9422)
                                               #5  0x00007f423de2ebf3 __clone (libc.so.6 + 0xffbf3)

                                               Stack trace of thread 1261:
                                               #0  0x00007f423df06488 pthread_cond_clockwait (libpthread.so.0 + 0x10488)
                                               #1  0x0000563393a47d15 _ZN7polybar7modules6moduleINS0_14battery_moduleEE5sleepENSt6chrono8durationIdSt5ratioILl1ELl1EEEE (polybar + 0x18dd>
                                               #2  0x0000563393a41d48 _ZN7polybar7modules14battery_module9subthreadEv (polybar + 0x187d48)
                                               #3  0x00007f423e146b74 execute_native_thread_routine (libstdc++.so.6 + 0xcfb74)
                                               #4  0x00007f423deff422 start_thread (libpthread.so.0 + 0x9422)
                                               #5  0x00007f423de2ebf3 __clone (libc.so.6 + 0xffbf3)

                                               Stack trace of thread 1260:
                                               #0  0x00007f423de2405f __poll (libc.so.6 + 0xf505f)
                                               #1  0x0000563393b0c789 _ZNK7polybar13inotify_watch4pollEi (polybar + 0x252789)
                                               #2  0x0000563393a4c1aa _ZN7polybar7modules14inotify_moduleINS0_14battery_moduleEE11poll_eventsEv (polybar + 0x1921aa)
                                               #3  0x0000563393a4c947 _ZN7polybar7modules14inotify_moduleINS0_14battery_moduleEE6runnerEv (polybar + 0x192947)
                                               #4  0x00007f423e146b74 execute_native_thread_routine (libstdc++.so.6 + 0xcfb74)
                                               #5  0x00007f423deff422 start_thread (libpthread.so.0 + 0x9422)
                                               #6  0x00007f423de2ebf3 __clone (libc.so.6 + 0xffbf3)`

Was it working before?
No, always crashed. I even reinstalled arch.
To Reproduce
A minimal but complete config with which the problem occurs:
[colors]
background = #1a1a1a
background-alt = #464646
foreground = #dfdfdf
foreground-alt = #555
primary = #5aaaff
secondary = #e60053
alert = #bd2c40

[bar/v1]
width = 100%
height = 29
radius = 0.0
fixed-center = false

background = ${colors.background}
foreground = ${colors.foreground}

line-size = 3
line-color = #f00

border-size = 0
border-color = #00000000

padding-left = 1
padding-right = 2

module-margin-left = 1
module-margin-right = 2

font-0 = FontAwesome:pixelsize=14;1
font-1 = Fira Code:size=10:weight=bold;1
font-2 = iconic:pixelsize=14;1
font-3 = icomoon:pixelsize=14;1
font-4 = Material Icons:pixelsize=14;1
font-5 = Symbols Nerd Font:pixelsize=14;2

modules-left = bspwm mpd
modules-center = xwindow
modules-right = pulseaudio xkeyboard wlan eth BT battery0 battery1 date

tray-position = right
tray-padding = 2

wm-restack = bspwm

cursor-click = pointer
cursor-scroll = ns-resize

[module/xwindow]
type = internal/xwindow
label = %title:0:35:...%

[module/xkeyboard]
type = internal/xkeyboard
blacklist-0 = num lock

label-layout = %layout%
label-layout-underline = ${colors.secondary}

label-indicator-padding = 2
label-indicator-margin = 1
label-indicator-background = ${colors.secondary}
label-indicator-underline = ${colors.secondary}

[module/bspwm]
type = internal/bspwm

ws-icon-0 = 1;
ws-icon-1 = 2;
ws-icon-2 = 3;
ws-icon-3 = 4;
ws-icon-4 = 5;漣
ws-icon-5 = 6;

label-focused = %icon%
label-focused-background = ${colors.background-alt}
label-focused-underline= ${colors.primary}
label-focused-padding = 2

label-occupied = %icon%
label-occupied-padding = 2

label-urgent = %index%!
label-urgent-background = ${colors.alert}
label-urgent-padding = 2

label-empty = %icon%
label-empty-foreground = ${colors.foreground-alt}
label-empty-padding = 2

label-separator = 

[module/wlan]
type = internal/network
interface = wlp2s0
interval = 3.0

format-connected = <label-connected>
format-connected-underline = #9f78e1
label-connected = "%{A1:kitty -e nmtui:}%{A}"

format-disconnected = "睊"

[module/eth]
type = internal/network
interface = enp5s0
interval = 3.0

format-connected-underline = #55aa55
format-connected-prefix = " "
format-connected-prefix-foreground = ${colors.foreground-alt}
label-connected = %local_ip%

format-disconnected =

[module/BT]
type = custom/script
exec = /home/fiplox/.config/polybar/bluetooth.sh
format-underline = #55aa99
tail = true
click-left = /home/fiplox/.config/polybar/bluetooth.sh --toggle &

[module/date]
type = internal/date
interval = 5

date-alt =" %Y-%m-%d"

time ="%H:%M"
time-alt =%H:%M:%S

format-underline = #0a6cf5

label = %time%%date%

[module/pulseaudio]
type = internal/pulseaudio

format-volume = <label-volume> <bar-volume>
label-volume = 

label-volume-foreground = ${root.foreground}

label-muted = 
label-muted-foreground = #666

bar-volume-width = 10
bar-volume-foreground-0 = #55aa55
bar-volume-foreground-1 = #55aa55
bar-volume-foreground-2 = #55aa55
bar-volume-foreground-3 = #55aa55
bar-volume-foreground-4 = #55aa55
bar-volume-foreground-5 = #f5a70a
bar-volume-foreground-6 = #ff5555
bar-volume-gradient = false
bar-volume-indicator = |
bar-volume-indicator-underline = #55aa55
bar-volume-indicator-font = 2
bar-volume-fill = -
bar-volume-fill-font = 4
bar-volume-empty = -
bar-volume-empty-font = 4
bar-volume-empty-foreground = ${colors.foreground-alt}
bar-volume-empty-underline = #55aa55
bar-volume-fill-underline = #55aa55

[module/battery0]
type = internal/battery
battery = BAT0
adapter = AC
full-at = 98

format-charging = <label-charging>
format-charging-underline = #ffb52a

format-discharging = <ramp-capacity> <label-discharging>
format-discharging-underline = ${self.format-charging-underline}

format-full = 
format-full-underline = ${self.format-charging-underline}

label-charging =  %percentage%%
ramp-capacity-0 = 
ramp-capacity-1 = 
ramp-capacity-2 = 
ramp-capacity-3 = 
ramp-capacity-4 = 
ramp-capacity-foreground = ${colors.foreground}

[module/battery1]
type = internal/battery
battery = BAT1
adapter = AC
full-at = 98

format-charging = <label-charging>
format-charging-underline = #ffb52a

format-discharging = <ramp-capacity> <label-discharging>
format-discharging-underline = ${self.format-charging-underline}

label-charging =  %percentage%%
format-full = 
format-full-underline = ${self.format-charging-underline}
ramp-capacity-0 = 
ramp-capacity-1 = 
ramp-capacity-2 = 
ramp-capacity-3 = 
ramp-capacity-4 = 
ramp-capacity-foreground = ${colors.foreground}

[settings]
screenchange-reload = true

Polybar Log
Post everything polybar outputs to the terminal when you run it and the issue occurs below
warn: pulseaudio: using default sink alsa_output.pci-0000_06_00.6.analog-stereo

Environment:

WM: bspwm
Distro: arch
Output of polybar -vvv:
polybar 3.4.3

Features: +alsa +curl +i3 +mpd +network(libnl) +pulseaudio +xkeyboard
X extensions: +randr (+monitors) +composite +xkb +xrm +xcursor
Build type: Release
Compiler: /usr/bin/c++
Compiler flags: -D_FORTIFY_SOURCE=2 -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -Wall -Wextra -Wpedantic -O3 -DNDEBUG
Linker flags: -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now

I dont't know whether this is related, but I also have weird crashes every few days. There's a core dump attached: polybar.dump.gz

Config
;==========================================================
;
;
;   ██████╗  ██████╗ ██╗  ██╗   ██╗██████╗  █████╗ ██████╗
;   ██╔══██╗██╔═══██╗██║  ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗
;   ██████╔╝██║   ██║██║   ╚████╔╝ ██████╔╝███████║██████╔╝
;   ██╔═══╝ ██║   ██║██║    ╚██╔╝  ██╔══██╗██╔══██║██╔══██╗
;   ██║     ╚██████╔╝███████╗██║   ██████╔╝██║  ██║██║  ██║
;   ╚═╝      ╚═════╝ ╚══════╝╚═╝   ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝
;
;
;   To learn more about how to configure Polybar
;   go to https://github.com/polybar/polybar
;
;   The README contains a lot of information
;
;==========================================================

[colors]
background = #e52f343f
background-alt = ${colors.background}
foreground = #dfdfdf
foreground-alt = #5c616c
primary = #5294e2
secondary = #ffb52a
alert = #f27835

[bar/topbar]
; Tell the Window Manager not to configure the window.
; Use this to detach the bar if your WM is locking its size/position.
; Note: With this most WMs will no longer reserve space for
; the bar and it will overlap other windows. You need to configure
; your WM to add a gap where the bar will be placed.
override-redirect = false

; Put the bar at the bottom of the screen
bottom = false

; Prefer fixed center position for the `modules-center` block.
; The center block will stay in the middle of the bar whenever
; possible. It can still be pushed around if other blocks need
; more space.
; When false, the center block is centered in the space between
; the left and right block.
fixed-center = true

; Dimension defined as pixel value (e.g. 35) or percentage (e.g. 50%),
; the percentage can optionally be extended with a pixel offset like so:
; 50%:-10, this will result in a width or height of 50% minus 10 pixels
width = 100%
height = 27

; the percentage can optionally be extended with a pixel offset like so:
; 50%:-10, this will result in an offset in the x or y direction
; of 50% minus 10 pixels
offset-x = 0
offset-y = 0

; Background ARGB color (e.g. #f00, #ff992a, #ddff1023)
background = ${colors.background}

; Foreground ARGB color (e.g. #f00, #ff992a, #ddff1023)
foreground = ${colors.foreground}

; Value used for drawing rounded corners
; Note: This shouldn't be used together with border-size because the border
; doesn't get rounded. For this to work you may also need to enable
; pseudo-transparency or use a compositor like compton.
; Individual top/bottom values can be defined using:
;   radius-{top,bottom}
radius = 0

; Under-/overline pixel size and argb color
; Individual values can be defined using:
;   {overline,underline}-size
;   {overline,underline}-color
line-size = 2
line-color = ${colors.primary}

; Values applied to all borders
; Individual side values can be defined using:
;   border-{left,top,right,bottom}-size
;   border-{left,top,right,bottom}-color
; The top and bottom borders are added to the bar height, so the effective
; window height is:
;   height + border-top-size + border-bottom-size
; Meanwhile the effective window width is defined entirely by the width key and
; the border is placed within this area. So you effectively only have the
; following horizontal space on the bar:
;   width - border-right-size - border-left-size
; border-size can be defined as pixel value (e.g. 35) or percentage (e.g. 50%),
; the percentage can optionally be extended with a pixel offset like so:
; 50%:-10, this will result in 50% minus 10 pixels. The percentage is relative
; to the monitor width or height depending on the border direction.
border-size = 4
border-bottom-size = 2
border-color = #00000000

; Number of spaces to add at the beginning/end of the bar
; Individual side values can be defined using:
;   padding-{left,right}
padding = 1

; Number of spaces to add before/after each module
; Individual side values can be defined using:
;   module-margin-{left,right}
module-margin = 2

; Fonts are defined using <font-name>;<vertical-offset>
; Font names are specified using a fontconfig pattern.
;   font-0 = NotoSans-Regular:size=8;2
;   font-1 = MaterialIcons:size=10
;   font-2 = Termsynu:size=8;-1
;   font-3 = FontAwesome:size=10
; See the Fonts wiki page for more details
font-0 = Roboto:size=9;1
font-1 = FontAwesome5Free:size=10;1
font-2 = FontAwesome5FreeSolid:size=10;1

; Modules are added to one of the available blocks
;   modules-left = cpu ram
;   modules-center = xwindow xbacklight
;   modules-right = ipc clock
modules-left = i3
modules-center = date
modules-right = filesystem cpu temperature memory eth wlan battery pulseaudio

; Position of the system tray window
; If empty or undefined, tray support will be disabled
; NOTE: A center aligned tray will cover center aligned modules
;
; Available positions:
;   left
;   center
;   right
;   none
tray-position = right

; Background color for the tray container
; ARGB color (e.g. #f00, #ff992a, #ddff1023)
; By default the tray container will use the bar
; background color.
;tray-background = #0063ff

; Pad the sides of each tray icon
tray-padding = 1

; Restack the bar window and put it above the
; selected window manager's root
;
; Fixes the issue where the bar is being drawn
; on top of fullscreen window's
;
; Currently supported WM's:
;   bspwm
;   i3 (requires: `override-redirect = true`)
;wm-restack =

; Fallback click handlers that will be called if
; there's no matching module handler found.
scroll-up = i3wm-wsnext
scroll-down = i3wm-wsprev

; Requires polybar to be built with xcursor support (xcb-util-cursor)
; Possible values are:
; - default   : The default pointer as before, can also be an empty string (default)
; - pointer   : Typically in the form of a hand
; - ns-resize : Up and down arrows, can be used to indicate scrolling
cursor-click = pointer

[global/wm]
; Adjust the _NET_WM_STRUT_PARTIAL top value
;   Used for top aligned bars
margin-bottom = 0

; Adjust the _NET_WM_STRUT_PARTIAL bottom value
;   Used for bottom aligned bars
margin-top = 0

[settings]
; The throttle settings lets the eventloop swallow up til X events
; if they happen within Y millisecond after first event was received.
; This is done to prevent flood of update event.
;
; For example if 5 modules emit an update event at the same time, we really
; just care about the last one. But if we wait too long for events to swallow
; the bar would appear sluggish so we continue if timeout
; expires or limit is reached.
;throttle-output = 5
;throttle-output-for = 10

; Time in milliseconds that the input handler will wait between processing events
;throttle-input-for = 30

; Reload upon receiving XCB_RANDR_SCREEN_CHANGE_NOTIFY events
screenchange-reload = true

; Compositing operators
; @see: https://www.cairographics.org/manual/cairo-cairo-t.html#cairo-operator-t
;compositing-background = source
;compositing-foreground = over
;compositing-overline = over
;compositing-underline = over
;compositing-border = over

; Enables pseudo-transparency for the bar
; If set to true the bar can be transparent without a compositor.
pseudo-transparency = false

[module/i3]
type = internal/i3

; Only show workspaces defined on the same output as the bar
;
; Useful if you want to show monitor specific workspaces
; on different bars
;
; Default: false
pin-workspaces = true

; This will split the workspace name on ':'
; Default: false
strip-wsnumbers = true

; Sort the workspaces by index instead of the default
; sorting that groups the workspaces by output
; Default: false
index-sort = true

; Create click handler used to focus workspace
; Default: true
enable-click = true

; Create scroll handlers used to cycle workspaces
; Default: true
enable-scroll = false

; Wrap around when reaching the first/last workspace
; Default: true
wrapping-scroll = false

; Set the scroll cycle direction
; Default: true
reverse-scroll = true

; Use fuzzy (partial) matching on labels when assigning
; icons to workspaces
; Example: code;♚ will apply the icon to all workspaces
; containing 'code' in the label
; Default: false
fuzzy-match = false

; Available tags:
;   <label-state> (default) - gets replaced with <label-(focused|unfocused|visible|urgent)>
;   <label-mode> (default)
format = <label-state> <label-mode>

; Available tokens:
;   %mode%
; Default: %mode%
label-mode = %mode%
label-mode-padding = 2
label-mode-foreground = #000000
label-mode-background = ${colors.primary}

; focused = Active workspace on focused monitor
; Available tokens:
;   %name%
;   %icon%
;   %index%
;   %output%
; Default: %icon%  %name%
label-focused = %name%
label-focused-background = ${colors.background-alt}
label-focused-underline= ${colors.primary}
label-focused-padding = 2

; unfocused = Inactive workspace on any monitor
; Available tokens:
;   %name%
;   %icon%
;   %index%
;   %output%
; Default: %icon%  %name%
label-unfocused = %name%
label-unfocused-padding = 2

; visible = Active workspace on unfocused monitor
; Available tokens:
;   %name%
;   %icon%
;   %index%
;   %output%
; Default: %icon%  %name%
label-visible = %name%
label-visible-background = ${self.label-focused-background}
label-visible-underline = ${self.label-focused-underline}
label-visible-padding = ${self.label-focused-padding}

; urgent = Workspace with urgency hint set
; Available tokens:
;   %name%
;   %icon%
;   %index%
;   %output%
; Default: %icon%  %name%
label-urgent = %name%
label-urgent-background = ${colors.alert}
label-urgent-padding = 2

[module/date]
type = internal/date

; Seconds to sleep between updates
; Default: 1.0
interval = 1

; See "https://en.cppreference.com/w/cpp/io/manip/put_time" for details on how to format the date string
; NOTE: if you want to use syntax tags here you need to use %%{...}
date = " %Y-%m-%d"

; Optional time format
time = " %H:%M:%S"

; Available tags:
;   <label> (default)
format = <label>
format-underline = ${colors.primary}

; Available tokens:
;   %date%
;   %time%
; Default: %date%
label = %date% %{O10} %time%

[module/filesystem]
type = internal/fs

; Mountpoints to display
mount-0 = /

; Seconds to sleep between updates
; Default: 30
interval = 30

; Available tags:
;   <label-mounted> (default)
;   <bar-free>
;   <bar-used>
;   <ramp-capacity>
format-mounted = <label-mounted>

; Available tags:
;   <label-unmounted> (default)
format-unmounted = <label-unmounted>

; Available tokens:
;   %mountpoint%
;   %type%
;   %fsname%
;   %percentage_free%
;   %percentage_used%
;   %total%
;   %free%
;   %used%
; Default: %mountpoint% %percentage_free%%
label-mounted = " %mountpoint%: %free% free"

; Available tokens:
;   %mountpoint%
; Default: %mountpoint% is not mounted
label-unmounted = " %mountpoint%: not mounted"

[module/cpu]
type = internal/cpu

; Seconds to sleep between updates
; Default: 1
interval = 1

; Available tags:
;   <label> (default)
;   <bar-load>
;   <ramp-load>
;   <ramp-coreload>
format = <label>

; Available tokens:
;   %percentage% (default) - total cpu load averaged over all cores
;   %percentage-sum% - Cumulative load on all cores
;   %percentage-cores% - load percentage for each core
;   %percentage-core[1-9]% - load percentage for specific core
label = " %percentage%%"

[module/temperature]
type = internal/temperature

; Seconds to sleep between updates
; Default: 1
interval = 0.5

; Thermal zone to use
; To list all the zone types, run
; $ for i in /sys/class/thermal/thermal_zone*; do echo "$i: $(<$i/type)"; done
; Default: 0
thermal-zone = 0

; Full path of temperature sysfs path
; Use `sensors` to find preferred temperature source, then run
; $ for i in /sys/class/hwmon/hwmon*/temp*_input; do echo "$(<$(dirname $i)/name): $(cat ${i%_*}_label 2>/dev/null || echo $(basename ${i%_*})) $(readlink -f $i)"; done
; to find path to desired file
; Default reverts to thermal zone setting
;hwmon-path = /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input

; Base temperature for where to start the ramp (in degrees celsius)
; Default: 0
base-temperature = 20

; Threshold temperature to display warning label (in degrees celsius)
; Default: 80
warn-temperature = 80

; Whether or not to show units next to the temperature tokens (°C, °F)
; Default: true
units = true

; Available tags:
;   <label> (default)
;   <ramp>
format = <ramp> <label>

; Available tags:
;   <label-warn> (default)
;   <ramp>
format-warn = <ramp> <label-warn>

; Available tokens:
;   %temperature% (deprecated)
;   %temperature-c%   (default, temperature in °C)
;   %temperature-f%   (temperature in °F)
label = %temperature-c%

; Available tokens:
;   %temperature% (deprecated)
;   %temperature-c%   (default, temperature in °C)
;   %temperature-f%   (temperature in °F)
label-warn = %temperature-c%
label-warn-foreground = ${colors.alert}

; Requires the <ramp> tag
; The icon selection will range from `base-temperature` to `warn-temperature`,
; temperatures above `warn-temperature` will use the last icon
; and temperatures below `base-temperature` will use `ramp-0`
ramp-0 = 
ramp-1 = 
ramp-2 = 
ramp-3 = 
ramp-4 = 

[module/memory]
type = internal/memory

; Seconds to sleep between updates
; Default: 1
interval = 1

; Available tags:
;   <label> (default)
;   <bar-used>
;   <bar-free>
;   <ramp-used>
;   <ramp-free>
;   <bar-swap-used>
;   <bar-swap-free>
;   <ramp-swap-used>
;   <ramp-swap-free>
format = <label>

; Available tokens:
;   %percentage_used% (default)
;   %percentage_free%
;   %gb_used%
;   %gb_free%
;   %gb_total%
;   %mb_used%
;   %mb_free%
;   %mb_total%
;   %percentage_swap_used%
;   %percentage_swap_free%
;   %mb_swap_total%
;   %mb_swap_free%
;   %mb_swap_used%
;   %gb_swap_total%
;   %gb_swap_free%
;   %gb_swap_used%

label = " %percentage_used%%"

[module/eth]
type = internal/network

; Name of the network interface to display. You can get the names of the
; interfaces on your machine with `ip link`
; Wireless interfaces often start with `wl` and ethernet interface with `eno` or `eth`
interface = enp0s25

; Seconds to sleep between updates
; Default: 1
interval = 3.0

; Test connectivity every Nth update
; A value of 0 disables the feature
; NOTE: Experimental (needs more testing)
; Default: 0
;ping-interval = 3

; @deprecated: Define min width using token specifiers (%downspeed:min% and %upspeed:min%)
; Minimum output width of upload/download rate
; Default: 3
;udspeed-minwidth = 5

; Accumulate values from all interfaces
; when querying for up/downspeed rate
; Default: false
;accumulate-stats = true

; Consider an `UNKNOWN` interface state as up.
; Some devices like USB network adapters have
; an unknown state, even when they're running
; Default: false
;unknown-as-up = true

; Available tags:
;   <label-connected> (default)
;   <ramp-signal>
format-connected = <label-connected>

; Available tags:
;   <label-disconnected> (default)
format-disconnected = <label-disconnected>

; Available tags:
;   <label-connected> (default)
;   <label-packetloss>
;   <animation-packetloss>
format-packetloss = <animation-packetloss> <label-packetloss>

; All labels support the following tokens:
;   %ifname%    [wireless+wired]
;   %local_ip%  [wireless+wired]
;   %local_ip6% [wireless+wired]
;   %essid%     [wireless]
;   %signal%    [wireless]
;   %upspeed%   [wireless+wired]
;   %downspeed% [wireless+wired]
;   %linkspeed% [wired]

; Default: %ifname% %local_ip%
label-connected = " %local_ip%"

; Default: (none)
label-disconnected = " -"
label-disconnected-foreground = ${colors.secondary}

; Default: (none)
label-packetloss = %local_ip%

; Only applies if <animation-packetloss> is used
animation-packetloss-0 = ⚠
animation-packetloss-0-foreground = ${colors.alert}
animation-packetloss-1 = 
animation-packetloss-1-foreground = ${colors.foreground}
; Framerate in milliseconds
animation-packetloss-framerate = 500

[module/wlan]
type = internal/network

; Name of the network interface to display. You can get the names of the
; interfaces on your machine with `ip link`
; Wireless interfaces often start with `wl` and ethernet interface with `eno` or `eth`
interface = wlp3s0

; Seconds to sleep between updates
; Default: 1
interval = 3.0

; Test connectivity every Nth update
; A value of 0 disables the feature
; NOTE: Experimental (needs more testing)
; Default: 0
;ping-interval = 3

; @deprecated: Define min width using token specifiers (%downspeed:min% and %upspeed:min%)
; Minimum output width of upload/download rate
; Default: 3
;udspeed-minwidth = 5

; Accumulate values from all interfaces
; when querying for up/downspeed rate
; Default: false
;accumulate-stats = true

; Consider an `UNKNOWN` interface state as up.
; Some devices like USB network adapters have
; an unknown state, even when they're running
; Default: false
;unknown-as-up = true

; Available tags:
;   <label-connected> (default)
;   <ramp-signal>
format-connected = <ramp-signal> <label-connected>

; Available tags:
;   <label-disconnected> (default)
format-disconnected = <label-disconnected>

; Available tags:
;   <label-connected> (default)
;   <label-packetloss>
;   <animation-packetloss>
format-packetloss = <animation-packetloss> <label-connected>

; All labels support the following tokens:
;   %ifname%    [wireless+wired]
;   %local_ip%  [wireless+wired]
;   %local_ip6% [wireless+wired]
;   %essid%     [wireless]
;   %signal%    [wireless]
;   %upspeed%   [wireless+wired]
;   %downspeed% [wireless+wired]
;   %linkspeed% [wired]

; Default: %ifname% %local_ip%
label-connected = %local_ip% (%essid%)

; Default: (none)
label-disconnected = " -"
label-disconnected-foreground = ${colors.secondary}

; Default: (none)
;label-packetloss = %essid%
;label-packetloss-foreground = #eefafafa

; Only applies if <ramp-signal> is used
ramp-signal-0 = 

; Only applies if <animation-packetloss> is used
animation-packetloss-0 = ⚠
animation-packetloss-0-foreground = ${colors.alert}
animation-packetloss-1 = 
animation-packetloss-1-foreground = ${colors.foreground}
; Framerate in milliseconds
animation-packetloss-framerate = 500

[module/battery]
type = internal/battery

; This is useful in case the battery never reports 100% charge
full-at = 98

; Use the following command to list batteries and adapters:
; $ ls -1 /sys/class/power_supply/
battery = BAT0
adapter = AC

; If an inotify event haven't been reported in this many
; seconds, manually poll for new values.
;
; Needed as a fallback for systems that don't report events
; on sysfs/procfs.
;
; Disable polling by setting the interval to 0.
;
; Default: 5
poll-interval = 5

; see "man date" for details on how to format the time string
; NOTE: if you want to use syntax tags here you need to use %%{...}
; Default: %H:%M:%S
time-format = %H:%M

; Available tags:
;   <label-charging> (default)
;   <bar-capacity>
;   <ramp-capacity>
;   <animation-charging>
format-charging = <ramp-capacity> <label-charging>

; Available tags:
;   <label-discharging> (default)
;   <bar-capacity>
;   <ramp-capacity>
;   <animation-discharging>
format-discharging = <ramp-capacity> <label-discharging>

; Available tags:
;   <label-full> (default)
;   <bar-capacity>
;   <ramp-capacity>
format-full = <ramp-capacity> <label-full>

; Available tokens:
;   %percentage% (default) - is set to 100 if full-at is reached
;   %percentage_raw%
;   %time%
;   %consumption% (shows current charge rate in watts)
label-charging =  %percentage%%

; Available tokens:
;   %percentage% (default) - is set to 100 if full-at is reached
;   %percentage_raw%
;   %time%
;   %consumption% (shows current discharge rate in watts)
label-discharging =  %percentage%% (%time% left)

; Available tokens:
;   %percentage% (default) - is set to 100 if full-at is reached
;   %percentage_raw%
label-full = %percentage%% (full)

; Only applies if <ramp-capacity> is used
ramp-capacity-0 = 
ramp-capacity-1 = 
ramp-capacity-2 = 
ramp-capacity-3 = 
ramp-capacity-4 = 

[module/pulseaudio]
type = internal/pulseaudio

; Sink to be used, if it exists (find using `pacmd list-sinks`, name field)
; If not, uses default sink
#sink = alsa_output.pci-0000_12_00.3.analog-stereo

; Use PA_VOLUME_UI_MAX (~153%) if true, or PA_VOLUME_NORM (100%) if false
; Default: true
use-ui-max = true

; Interval for volume increase/decrease (in percent points)
; Default: 5
interval = 5

; Available tags:
;   <label-volume> (default)
;   <ramp-volume>
;   <bar-volume>
format-volume = <ramp-volume> <label-volume>

; Available tags:
;   <label-muted> (default)
;   <ramp-volume>
;   <bar-volume>
format-muted = <label-muted>

; Available tokens:
;   %percentage% (default)
;   %decibels% (unreleased)
label-volume = %percentage%%

; Available tokens:
;   %percentage% (default)
;   %decibels% (unreleased)
label-muted =  0%
label-muted-foreground = ${colors.alert}

; Only applies if <ramp-volume> is used
ramp-volume-0 = 
ramp-volume-1 = 
ramp-volume-2 = 

; Right and Middle click (unreleased)
;click-right = pavucontrol &
;click-middle =

; vim:ft=dosini

Alright, I took a look at this core dump myself with gdb. The reason for this crash is a data race between two threads interacting with the same data structure. (Why needs a bar 16 threads?)
The problem is i3_module::m_workspaces (https://github.com/polybar/polybar/blob/master/include/modules/i3.hpp#L75), which is written to in i3_module::update() (https://github.com/polybar/polybar/blob/master/src/modules/i3.cpp#L124) and read from in i3_module::build() (https://github.com/polybar/polybar/blob/master/src/modules/i3.cpp#L191). The build() method creates an rvalue(?) reference to a std::unique_ptr that is stored in a std::vector (why not store the struct directly in the vector?) and uses that reference to obtain the workspace struct later. As the update() method clears the whole vector, that reference to the unique_ptr is a dangling reference which is dereferenced causing the segault.
Unfortunately, the update() and build() member functions are called from two different threads without a locking mechanism. (according to the stack traces of the different threads in gdb)
So the OP uses bspwm instead of i3 which makes my crash not directly related to the original issue. But I would also assume that data races might be the key to find the cause for that crash.

@fiplox Does this only happen if you've bounced the pulseaudio daemon while your polybar is running? I'm having that issue in #2408
Try keeping track of the PID number of /usr/bin/pulseaudio before and after a polybar crash+coredump. I can reproduce this reliably every time.


Feature Request: Any plans for Pact tests generator?

Hey y'all, writing all these tests manually suuuuucks which I'm sure a lot of us can agree upon. Especially when you may have a lot of logic in one API call. Are there any plans for generating some of the boiler plate code from an openAPI Spec?
I also posted this request within the other iOS Pact framework: https://github.com/DiUS/pact-consumer-swift/issues/130

That would be fantastic, indeed.
Personally I am not using PactSwift for my/clients' needs at all lately so am limited in expanding features in PactSwift or even just keeping up with pact-foundation's evolution.
I've got a backlog of cleanup tasks to do before diving back into improvements.
I'm curious though!
Have you had any thoughts about how this would work? I mean, what would developers' experience be?
There's a blog post out there where it describes how they've improved writing pact tests. Unfortunately they didn't make it open source.
Contributions are always welcome.

Read the blog post and I'm using Matcher to it's fullest. However, It would have been nice to match it to a Model of a certain type, rather than a literal string, int, bool, etc.
Eg.
struct MyModel {
var myInt: Int
var myString: String
}
Matcher.somethingLike(MyModel.Type)
The generation would be a little more tricky, but there's already the OpenAPI Code Generator that my team uses to generate our models and API's so a little inspiration could be taken there. I'm not sure exactly how it would work, but something to keep in mind.


Shorten the name of the driver UI service

@akhurana001 @kumare3

👍 , thanks for picking this up @liyinan926


Update office-365-groups-expiration-policy.md

We have tested it in a demo tenant and if a group is created via teams then there is no expiration email triggered instead only a notification shows up in the activity section to renew the group.

@nenonix @JohanFreelancer9 - kindly do the copy editor review for this PR. Thanks.


codegen: Properly mangle bitfield getters.

r? @fitzgen
Fixes #278

 Warning

These commits modify unsafe code. Please review it carefully!

@bors-servo r+

:pushpin: Commit 4cc53ed has been approved by fitzgen

:zap: Test exempted - status


Type refinement isn't detected when value is assigned to a variable first

An example speaks louder than words:
type Err = {
  status: 'Err',
  msg: string,
}

type Ok = {
  status: 'Ok',
  data: number,
}

type Result = Err | Ok

const result: Result = JSON.parse('{"status": "Ok", "data": 5}')

// this works
if (result.status === 'Ok') {
  console.log(result.data * 2)
}

// But this doesn't work!
const status = result.status
if (status === 'Ok') {
  console.log(result.data * 2)
}

The flow error I get is "string type is incompatible with an implicitly returned undefined".


Update the sudo waagent command deprovision from hypen to minus

Update the sudo waagent command deprovision from hypen to minus

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

ID: 9197af94-97c5-9ca2-ff3b-716d2404f0f1
Version Independent ID: 854e5005-7238-f797-c5db-0d055a1508bd
Content: Create an Azure virtual machine offer (VM) from an approved base
Content Source: articles/marketplace/azure-vm-use-approved-base.md
Service: marketplace
Sub-service: partnercenter-marketplace-publisher
GitHub Login: @ebolton-cyber
Microsoft Alias: edewebolton

@santhoshb-msft Thank you for your post. We will review the content and update as appropriate.

@ebolton-cyber & @emuench Raised a PR to fix the typo - https://github.com/MicrosoftDocs/azure-docs-pr/pull/198462 Please review and update the doc as needed.

@ebolton-cyber I have raised a PR and it is assigned to you. Could you please review and merge it with the master branch?

@santhoshb-msft Thanks once again for your valuable feedback. PR has been approved by the content owner and the changes should go live in a day or two.
Since there is no action pending on us, closing this request for now.


Fix serverless content on use managed backups page

Fixed Serverless section due to missing content

Preview:
Use Managed Service Backups

@kathancox when I worked on the epic DOC-6759 it already addressed removing the 'Status' field. I noticed that the Serverless section was displaying incorrectly so this PR just updates that error.

This LGTM to @ashleykwtam, but can you update the PR description and title of the PR as it doesn't reflect the error you're correcting here. It might be better to mark the JIRA in a way that we know that the status field was removed with the prior PR and that it doesn't need work.

Done. Will update the JIRA accordingly, thanks Kathryn!


Add isPolyfilled method

Description
This PR adds a isPolyfilled function to the public methods exposed by the polyfill.
The functions tests if the Popover API has been polyfilled, and it can be used to execute conditional code depending on if the Popover API is polyfilled or is native.
Related Issue(s)
https://github.com/oddbird/popover-polyfill/issues/189

@keithamus @jgerigmeyer I was looking at ways to do automatic testing of the function but from what I see with the current suite of tests it's not possible. Or am I missing something?

Yeah we don't really have unit tests. Frankly I'm not especially concerned about tests for this amount of code. It'll get shaken out during integration.

@jgerigmeyer there was a linting error that I was looking to fix but the PR is already merged. Has it been already fixed (automatically maybe)? Is it OK to leave it as it is?

@jgerigmeyer there was a linting error that I was looking to fix but the PR is already merged. Has it been already fixed (automatically maybe)? Is it OK to leave it as it is?

Yeah that's fine -- I merged it and then pushed a quick fix 👍
Thanks for your contribution!


Implement DMN 1.3 new keywords support

We should be sure that 1.3 specific keywords and functions are supported by:

autocompletion
during save and reopen of diagram

See list of them

https://issues.redhat.com/browse/DROOLS-5016
https://blog.viadee.de/en/this-is-new-in-dmn-1_3

It seems we already have part of the 1.3 new defined functions in autocompletion (https://www.omg.org/spec/DMN/1.3/PDF/changebar). Eg. all RANGES functions are present. I think we should check which functions are missing and eventually add them

@yesamer please have alook on https://github.com/kiegroup/kie-tools/pull/1800 when you have a moment


Rearrange and dock tabs and panel groups in the editor workspace

This should eventually hook up to the Rust editor backend to save the workspace layout but a frontend-only implementation is all this issue requires for now.

Blocked on #225

The main complexity with this is handling when multiple documents are in the screen at once. Currently we rely on active_document() to distribute messages in the backend and have one active tool for the entire editor. When backend responses are generated (i.e. a newly rendered svg), we then have no way to tell which document panel they are for.
Therefore I will assign a Rust tag as this involves quite a lot of refactoring.


[drake_cmake_external] Rebuild eigen,fmt,spdlog from source

Test coverage for RobotLocomotion/drake#16652 and https://github.com/RobotLocomotion/drake/pull/16700.

This change is

drake_cmake_external/CMakeLists.txt, line 92 at r1 (raw file):
Previously, mwoehlke-kitware (Matthew Woehlke) wrote…

How would I test? It seems to need some sort of local changes to pull robotlocomotion/drake#16652?

drake_cmake_external/CMakeLists.txt, line 92 at r1 (raw file):
Previously, jwnimmer-tri (Jeremy Nimmer) wrote…
OK I hadn't be able to get far enough in the build to check that.  With your suggested fixes, I was able to reach the Drake build and point it at the Drake PR.
In my own local test, I got far enough here that Drake started building.  I think if CI is happy here, then that's mostly good enough.
The one thing I'd still ask you to check locally is that the build here is in fact using the custom fmt and spdlog.  You can probably do that by poking at the files, rather than waiting for a full build?

I'm not sure what "poking at files" you had in mind?
It built for me, and I do see:
root@b358281bdc2f:~/drake-external-examples/build# ldd install/lib/libdrake.so | grep -e fmt -e spd
        libfmt.so.6 => /root/drake-external-examples/build/install/lib/libfmt.so.6 (0x00007f7f1c72d000)
        libspdlog.so.1 => /root/drake-external-examples/build/install/lib/libspdlog.so.1 (0x00007f7f1c6a3000)

On a "normal" drake Build, there is no libfmt, and libspdlog comes from /usr/lib. So it seems to be using the user-provided ones? (Note also this was built on a Docker Focal container that has no fmt/spdlog installed.)

@mwoehlke-kitware could you also look at the Jenkins failure here?  Do we have a too-old CMake or something?

Seems likely, based on the error. It looks like CREATE_LINK was added in CMake 3.14.

@mwoehlke-kitware ping -- waiting on your approval / LGTM.

 I suppose, though I have not attempted to build it myself. Do you need me to do that?

I think the CI coverage should suffice on its own.
(Self-:lgtm: to placate reviewable.)


[Style] Make Neumorphism Accordion responsive

What's the style idea?
We need to improve the responsiveness of Neumorphism Accordion. The heading text is not properly fit for small devices.

Checklist

[X] I have checked the existing issues.
[X] I follow Contributing Guidelines of this project.
[X] I am a KWOC'24 contributor.

Code of Conduct

[X] I agree to follow this project's "Code of Conduct".

Hey, could you please assign me this issue, I am student contributor in KWoC, I would like to work on this issue.

Go ahead @ThePhoenix08


Dealing with multiple MDS courses

Our requirements:

Ideally, all in one GitHub Org.
Ideally, all in one VM.
Ideally, all in one deploy of Classy.
Ideally, can only see deliverables pertaining to one course (a system to filter?)
Ideally, TAs cannot see grades from other courses that they are not a TA for.
Not that important but would be nice to get final course grades for each course in a sane way.

What this would look like for a TA:

In the Grades tab, they would only see certain columns
In the Marking tab, they would only see certain options in the Dropdown

Note: there is some hope because student list is the same across all MDS courses (lab sections are the same also)


Add crc64 support

As per title.

This is not quite ready yet, but as I can't run the tests manually because of https://issues.dlang.org/show_bug.cgi?id=17107 , I have to rely on autotester.

Alright this is in better shape now. Tests are green? No idea what circle is unhappy about.

cc @wilzbach

Also, among interesting questions, CRC64 has 2 standards: ECMA and OSI. The algorithm is the same, but the polynomial is different ( 0xD800000000000000 for OSI, 0xC96C5795D7870F42 for ECMA ). ECMA is generally considered better, but maybe we'd like to support both ?

Ok Added support for both CRC64-ECMA and CRC64-ISO, that wasn't significantly harder, and can be leveraged to do CRC32C and other variations as well.

I have no idea why circle is complaining. That'd be great if someone would look at this is less than a week.

There seems to be a dearth of reviews in Phobos right now.
Do you know of anyone who would be qualified to review this code?

@JackStouffer I asked someone who dug into this CRC thing with me to figure it out. He'll be able to assert the validitity of the algorithm, but is not an experimented D coder, so that'd be great to have someone checks that.
Also, I'd be glad if someone could explain me what circle is complaining about.

Also, needs a changelog entry

Sadly I find myself unable to continue this work.
https://issues.dlang.org/show_bug.cgi?id=17236
I was already required to jump though hoops to run the tests, but this is getting out of hands.

Sadly I find myself unable to continue this work.
I was already required to jump though hoops to run the tests, but this is getting out of hands.

As mentioned on the NG I am still not sure what your exact problem is.
In any case, you can always build a module directly if you have a recent DMD compiler, e.g.:
source $(curl https://i.dlang.io | bash -s dmd-nightly -a)

Added doc for N, P and R.
Rebased. I got various merge conflicts for style changes that arguably do not improve the code in any way. Especially the one which puts template constraint on their own line.

@deadalnix Was that person you mentioned able to verify the CRC code correctness?

@ftrader , we need you :)

You can check it matches the test vector from go here: https://golang.org/src/hash/crc64/crc64_test.go

@deadalnix Sorry, I only just saw your comment about verification.
Any chance you can fix the public example issue so this can be pulled?

FWIW, I had a CRC64 (ECMA variant) implementation on top of std.digest lying around. I plugged the unittests from here into my implementation, and everything worked.

OK @CyberShadow confirm that the result are good, which is pretty convincing the algorithm is correct (this is a hash function after all, so you'd expect to get very different results).
So I rebased and I want to get that in good shape so we can merge it.

Looks like circle is happy. Do we move forward with that one ?

Fixed.


LoRA: Extract load_with_lora function

Extract the load_with_lora function for easy use in other files.

Maybe we should consider moving the function out of utils.py. It has becomed too large now,  it might be better to create a new file named lora_utils.py and place it there?

@mzbac Great suggestion. Initially, I tried placing the load_with_lora function in both tuner/lora.py and tuner/utils.py, but encountered a circular dependency issue. When I attempted to resolve this issue, I found that it required significant changes. So, I ended up putting it in the utils.py.
I will reassess the extent of changes needed to solve the circular dependency problem. The worst-case scenario would be creating a new file named tuner/lora_utils.py, which I will try my best to avoid.

@madroidmaq sorry for the delay! I think we can merge this. But could you first rebase to resolve conflicts?

@madroidmaq sorry for the delay! I think we can merge this. But could you first rebase to resolve conflicts?

It's DONE.


Jenkins improve

Improve jenkins configuration

Refer to: https://github.com/jenkinsci/docker/blob/master/README.md#docker-compose-with-jenkins


Add upgrade instructions to the documentation

Add upgrade instructions to the documentation

https://aws-samples.github.io/document-translation/docs/upgrading/


Upgrade fog-openstack to 0.1.7

This PR upgrades the fog-opentack gem to 0.1.7
This change is needed to support host aggregates,
as the 0.1.7 fog-openstack gem fixes several bugs
related to aggregates.

@tzumainn if you are 👍 on this, please comment and re-assign to @blomquisg

:+1: from me - @blomquisg?

@tzumainn is this needed for darga?

@chessbyte I don't think darga needs this. The bug fixes are specific to manipulating host aggregates, and that's a 4.2 feature that's not even committed on master yet.

@miq-bot add_label darga/no


Fix misspelling of syncOverwriteReasonNewerLMT

@JohanLindvall this should be resolved on the main branch. Closing this PR.


Physical keyboard keys event not detected

Steps to reproduce

Attach a physical keyboard with Macbook pro M1
Have a textfield using FlutterFormBuilder
Start typing with a little bit fast speed, having debugger on

Expected results
Keys pressed should be appear in the application
Actual results
Got this Error with having no keys Entered
======== Exception caught by services library ======================================================
The following assertion was thrown during a platform message callback:
A KeyUpEvent is dispatched, but the state shows that the physical key is not pressed. If this occurs in real application, please report this bug to Flutter. If this occurs in unit tests, please ensure that simulated events follow Flutter's event model as documented in `HardwareKeyboard`. This was the event: KeyUpEvent#dbcab(physicalKey: PhysicalKeyboardKey#86a89(usbHidUsage: "0x00070008", debugName: "Key E"), logicalKey: LogicalKeyboardKey#1e0f5(keyId: "0x00000065", keyLabel: "E", debugName: "Key E"), character: null, timeStamp: 296:33:14.409007)
'package:flutter/src/services/hardware_keyboard.dart':
Failed assertion: line 509 pos 16: '_pressedKeys.containsKey(event.physicalKey)'

Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause.

Code sample
Code sample
import 'package:auno/common/widgets.dart';
import 'package:auno/models/product_short_entity.dart';
import 'package:auno/pages/plans/plans_page.dart';
import 'package:auno/providers/products_list_provider.dart';
import 'package:auno/router.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart';

class SearchList extends StatefulWidget {
  const SearchList({Key? key}) : super(key: key);
  static const routeName = '/search_list';
  @override
  _SearchListState createState() => _SearchListState();
}

class _SearchListState extends State<SearchList> {
  String search = "";
  late ScrollController _scrollController;

  List<ProductShortEntity> data = [];
  bool notSearch = true;

  @override
  void initState() {
    _scrollController = ScrollController();
    super.initState();
    data = context.read<ProductsListProvider>().popular;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: body(),
    );
  }

  @override
  Widget body() {
    return SafeArea(
      child: Padding(
        padding: const EdgeInsets.only(
          top: 5,
          right: 5.0,
        ),
        child: Column(
          children: [
            Padding(
              padding: const EdgeInsets.only(left: 16.0),
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  Container(
                    width: MediaQuery.of(context).size.width - 95,
                    height: 50,
                    child: FormBuilderTextField(
                      name: 'search',
                      onChanged: _onSearchChanged,
                      onSubmitted: (value) {
                        setState(() {
                          search = value ?? "";
                          _onSearchChanged(value);
                        });
                      },
                      decoration: MyInputDecoration(
                        hintText: 'Search',
                        prefixIcon: Padding(
                          padding: const EdgeInsets.only(
                              top: 8.0, bottom: 9, left: 10, right: 8),
                          child: SvgPicture.asset(
                            'svg/search.svg',
                            color: const Color(0xff2F384C),
                          ),
                        ),
                        borderRadius: 7,
                        borderColor: const Color(0xffE8E8E8),
                      ),
                    ),
                  ),
                  TextButton(
                    onPressed: () {
                      router.pop();
                    },
                    child: Text(
                      'Cancel',
                      style: TextStyle(
                        color: Theme.of(context).primaryColor,
                        fontFamily: 'OverUsed',
                      ),
                    ),
                  ),
                ],
              ),
            ),
            if (data.length != 0)
              Expanded(
                child: ListView.builder(
                  itemCount: data.length,
                  scrollDirection: Axis.vertical,
                  shrinkWrap: true,
                  // controller: scrollController,
                  itemBuilder: (context, index) {
                    return Column(
                      children: [
                        if (notSearch && index == 0)
                          Container(
                            alignment: Alignment.centerLeft,
                            padding: const EdgeInsets.only(
                                left: 16.0, bottom: 8.0, top: 20),
                            child: Text(
                              'Popular',
                              style: TextStyle(
                                fontFamily: 'OverUsed',
                                fontSize: 16,
                                color: Colors.black,
                                fontWeight: FontWeight.w600,
                              ),
                            ),
                          ),
                        ListTile(
                          onTap: () {
                            // remove focus
                            FocusScope.of(context).unfocus();
                            router.push(PlansPage.routeName,
                                extra: data[index]);
                          },
                          style: ListTileStyle.drawer,
                          title: Text(data[index].name),
                          leading: NetworkImageWithPlaceholder(
                            data[index].flag,
                            circular: true,
                            width: 40,
                            height: 40,
                          ),
                        ),
                      ],
                    );
                  },
                ),
              ),
            if (data.length == 0)
              Container(
                padding: const EdgeInsets.all(8.0),
                alignment: Alignment.center,
                child: Column(
                    mainAxisAlignment: MainAxisAlignment.start,
                    children: [
                      SvgPicture.asset(
                        'svg/Location_Not_Found.svg',
                      ),
                      const SizedBox(height: 20),
                      const Text(
                        'No Results Found',
                        style: TextStyle(
                          color: Colors.black,
                          fontWeight: FontWeight.bold,
                          fontFamily: 'OverUsed',
                          fontSize: 20,
                        ),
                      ),
                      const SizedBox(height: 10),
                      const Padding(
                        padding: EdgeInsets.all(.0),
                        child: Text(
                          "We couldn’t find the destination you’re looking for, Try checking all of our destinations.",
                          textAlign: TextAlign.center,
                          style: TextStyle(
                            color: Colors.black,
                            fontFamily: 'OverUsed',
                            fontSize: 16,
                          ),
                        ),
                      ),
                    ]),
              ),
          ],
        ),
      ),
    );
  }

  searching(String value) {
    List<ProductShortEntity> searchResult = [];
    if (value.isNotEmpty) {
      data.forEach((element) {
        if (element.name.toLowerCase().contains(value.toLowerCase())) {
          searchResult.add(element);
        }
      });
      setState(() {
        data = searchResult;
      });
      return;
    } else {
      setState(() {
        data = data;
      });
    }
  }

  void _onSearchChanged(String? query) {
    notSearch = query == null || query.isEmpty;
    setState(() {
      search = query ?? "";
      data = context.read<ProductsListProvider>().search(search);
    });
    if (data.isNotEmpty) {
      print('data: ${data.first.name}');
    }
  }

  @override
  // bool get withScaffold => true;

  @override
  // bool get withAppBar => false;
  @override
  bool get paginate => true;

  @override
  void dispose() {
    super.dispose();
    // _debounce?.cancel();
  }
}

Screenshots or Video

Screenshots / Video demonstration
[Upload media here]

Logs
Logs
[Paste your logs here]

Flutter Doctor output
Doctor output
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.19.5, on macOS 15.1 24B83 darwin-arm64, locale en-US)
[!] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    ✗ cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
[✓] Xcode - develop for iOS and macOS (Xcode 16.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2023.3)
[✓] Connected device (3 available)
    ! Error: Browsing on the local area network for Munibullah Shah’s iPhone. Ensure the device is unlocked and attached with a cable or associated with the same local area
      network as this Mac.
      The device must be opted into Developer Mode to connect wirelessly. (code -27)
    ! Error: Browsing on the local area network for Munibullah Shah’s iPhone. Ensure the device is unlocked and attached with a cable or associated with the same local area
      network as this Mac.
      The device must be opted into Developer Mode to connect wirelessly. (code -27)
[✓] Network resources

! Doctor found issues in 1 category.

@MunibullahShah
In order to properly address the issue, please provide us only minimal but complete reproducible code sample (ex: main.dart) without third party package implementation.
This might well be a duplicate of https://github.com/flutter/flutter/issues/125975 that you can check.


Create temperature distribution plots

Objectives

Make plots for each month (1d distribution of both ambient temperature and ambient-mirror delta)
Make 3D plot distribution of temperature delta and ambient temperature over time (low priority)

The 1d distribution plots are complete with additional fitted skewed Gaussians on top. I will be working on 3d plots at a later date. I will send an update once that is start and if i run into any difficulties implementing that.

TODO: recreate plots with unfiltered data

Update
Last week I started to attempt to create 3D plots with little success. The plots either showcased the data all bunched up on one access or completely flat, both of which are not to be expected. I was hoping to see a hilly like graph that fluctuates with time.
Tonight after recomputing the distribution data, I was able to get some pretty good 3D plots. One thing that I noticed is that the ambient temperature distribution noticeably fluctuates over time. In the winter, the distribution will be centered as low a 5 Celsius, and during the summer it can be centered as high at 20 Celsius. For the temperature delta, what I have noticed is that the distribution is always centered around 0, regardless of the time. This temperature delta distribution as a standard deviation of about 5 Celsius. However, this distribution tightens during the night.

Update
After talking with Satya on March 4th, I had a few things to add to my distribution plots. These changes are described below:

Add lines at 1.5 degree Celsius for temperature delta distribution plots
Add percentage outside ideal range (left panel)
Add scatter plot (temperature delta vs ambient temperature)
Add colormap dependent on variance of mirror cooling (same intervals for each scatter plot)

An example of one of these updated plots are show below:


traefik works with <IP_ADDRESS> but failed with localhost

Welcome!

[X] Yes, I've searched similar issues on GitHub and didn't find any.
[X] Yes, I've searched similar issues on the Traefik community forum and didn't find any.

What did you do?
Usually, I use stunnel as a proxy to forward to traefik, so I only need to access the localhost address. However, after using the middleware stripPrefix, I found that localhost cannot be accessed, but <IP_ADDRESS> can be accessed. It seems there might be an issue here.
What did you see instead?
None
What version of Traefik are you using?
Version:      3.1.2
Codename:     comte
Go version:   go1.22.5
Built:        2024-08-06T13:37:51Z
OS/Arch:      linux/amd64
What is your environment & configuration?
http:
  routers:
    shotgun-sz:
      entryPoints:
        - http
      service: shotgun-sz
      middlewares:
        - shotgun-sz
      rule: PathPrefix(`/shotgun-sz/`)

  services:
    shotgun-sz:
      loadBalancer:
        servers:
        - url: http://<IP_ADDRESS>:8001
        passHostHeader: true

  middlewares:
    shotgun-sz:
      stripPrefix:
        prefixes:
          - "/shotgun-sz"

If applicable, please paste the log output in DEBUG level

{"ClientAddr":"<IP_ADDRESS>:57966","ClientHost":"<IP_ADDRESS>","ClientPort":"57966","ClientUsername":"-","DownstreamContentSize":11,"DownstreamStatus":502,"Duration":43830099,"OriginContentSize":11,"OriginDuration":43805583,"OriginStatus":502,"Overhead":24516,"RequestAddr":"localhost","RequestContentSize":0,"RequestCount":1,"RequestHost":"localhost","RequestMethod":"GET","RequestPath":"/shotgun-sz/api/ping","RequestPort":"-","RequestProtocol":"HTTP/1.1","RequestScheme":"http","RetryAttempts":0,"RouterName":"shotgun-sz@file","ServiceAddr":"<IP_ADDRESS>:8001","ServiceName":"shotgun-sz@file","ServiceURL":"http://<IP_ADDRESS>:8001","StartLocal":"2024-08-13T23:25:36.604262987+08:00","StartUTC":"2024-08-13T15:25:36.604262987Z","entryPointName":"http","level":"info","msg":"","time":"2024-08-13T23:25:36+08:00"}
{"ClientAddr":"<IP_ADDRESS>:58238","ClientHost":"<IP_ADDRESS>","ClientPort":"58238","ClientUsername":"-","DownstreamContentSize":4,"DownstreamStatus":200,"Duration":75555337,"OriginContentSize":4,"OriginDuration":75522244,"OriginStatus":200,"Overhead":33093,"RequestAddr":"<IP_ADDRESS>","RequestContentSize":0,"RequestCount":2,"RequestHost":"<IP_ADDRESS>","RequestMethod":"GET","RequestPath":"/shotgun-sz/api/ping","RequestPort":"-","RequestProtocol":"HTTP/1.1","RequestScheme":"http","RetryAttempts":0,"RouterName":"shotgun-sz@file","ServiceAddr":"<IP_ADDRESS>:8001","ServiceName":"shotgun-sz@file","ServiceURL":"http://<IP_ADDRESS>:8001","StartLocal":"2024-08-13T23:26:11.512633382+08:00","StartUTC":"2024-08-13T15:26:11.512633382Z","entryPointName":"http","level":"info","msg":"","time":"2024-08-13T23:26:11+08:00"}

Close as duplicate of #11003 .


feat(chats): wire up UI for replies, typing indicator, and attachments

What this PR does 📖

typing indicator: shows in chatbar and sidebar. displays the user's icon rather than the username. multiple typing indicators, such as for group messages, have not yet been implemented.
replies: see pictures
attachments: allow the user to attach and send multiple files. prior to sending, attachments may be removed via the trashcan icon.

Which issue(s) this PR fixes 🔨

Resolve #

Special notes for reviewers 🗒
Additional comments 🎤

there are a few small things left to wire but I think we can safely merge this in when you're ready @sdwoodbury

Just a couple things I found when testing, since this is adding in a lot as it is if it'd be easier to fix this in a new PR just lemme know and I will write up a ticket. Other than these small issues this PR is super cool!! 🎉
(These are on Windows and MacOS)

When the user adds attachments they can't actually send the message unless they type some text into the input box

https://user-images.githubusercontent.com/93608357/221927355-eed33484-4ea0-49ec-8f75-f04c08a8fb1f.mov

When someone is on a smaller monitor or laptop, the message you type up with the attachments can look a bit messy but I do not think this is block worthy of the PR

Awesome fix! 🔥


Feature/Venue Configuration by Invitation

I'm not getting any error but let me push my changes and you can try again.

We are accumulating too many changes here, I suggest to merge this branch and make smaller PRs.


Sprockets::FileNotFound in Apidoco::Apis#show

couldn't find file 'angular/1.8.0/angular' with type 'application/javascript'
// about supported directives.
//
//= require angular/1.8.0/angular  < ------- error
//
//= require apidoco/jquery.min
//= require apidoco/jquery.json-viewer

I added vendor/assets/apidoco/angular/1.8.0/angular.js in my project
It worked

@totoblabla3 Thanks for reporting.


[#8232] Fix the issue that proxy remoting thread pool isolation does not take effect

Which Issue(s) This PR Fixes

Fixes #8232
Brief Description

Register processsors after thread pool initialization.
How Did You Test This Change?

any update?


Should QGL2 get qubits using QubitFactory?

QGL2 gets qubits using QubitFactory. Should it instead use ChannelLibrary.new_qubit()? Or something else?
Fix QGL2 to use the 'right' way to get or create a qubit.
EG:
cl = ChannelLibraries.channelLib;
if cl == null:
  log.warn("Using new memory ChannelLibrary")
  cl = ChannelLibraries.ChannelLibrary(":memory:")
cl.new_qubit()

See pyqgl2/sequences, pyqgl2/test_cl, qgl2/qgl1

Per discussion: you should not create a new qubit within a QGL2 program. So something like the current QubitFactory is in fact correct. (May rename the function at some point.)


Release hybrid when disabling deepslate will not replace it with stone

I do appreciate you fixing the crashing issue with release hybrid but now when I disable deepslate and load into the world it doesn't turn  it to stone:

This seems to be caused by surface rules.

This seems to be caused by surface rules.

Did I need to disable surface rules too? I did not know that I will check rn...

Ok I disabled surface rules and deepslate generation and it is replaced with stone, but now oceans and beaches are generating underground in ancient cities


feat: add asyncapi_url broker arg

Description
Now user can overrides the original broker url in AsyncAPI schema only with asyncapi_url broker argument
It can be extremelly hepful to hide connection credentials in a public documentation
broker = RabbitBroker(
    "amqp://guest:guest@localhost:5672/",
    asyncapi_url="amqp://****:****@localhost:5672/",
)

Also, in the RMQ case, keyword arguments are overrides the original url, so
broker = RabbitBroker(
    "amqp://guest:guest@localhost:5672/",
    host="<IP_ADDRESS>",
)

# amqp://guest:guest@<IP_ADDRESS>:5672/ - the final url

Also, RMQ AsyncAPI protocol now defines automatically from "amqp"/"amqps"
Also, RMQ supports BaseSecurity and SASLPlaintext as a security option for now
Also, mv faststream.broker.security to faststream.security with deprecation notice
Fixes #895, Close #578
Type of change
Please delete options that are not relevant.

[ ] Documentation (typos, code examples, or any documentation updates)
[ ] Bug fix (a non-breaking change that resolves an issue)
[x] New feature (a non-breaking change that adds functionality)
[ ] Breaking change (a fix or feature that would disrupt existing functionality)
[x] This change requires a documentation update

Checklist

[x] My code adheres to the style guidelines of this project (scripts/lint.sh shows no errors)
[x] I have conducted a self-review of my own code
[ ] I have made the necessary changes to the documentation
[x] My changes do not generate any new warnings
[x] I have added tests to validate the effectiveness of my fix or the functionality of my new feature
[x] Both new and existing unit tests pass successfully on my local environment by running scripts/test-cov.sh
[x] I have ensured that static analysis tests are passing by running scripts/static-anaylysis.sh
[x] I have included code examples to illustrate the modifications

@kumaranvpl can you please use the Issue description for detail release notes?
Also, we need to add asyncapi_url to AsyncAPI custom docs in the #811 scope

@kumaranvpl can you please use the PR description to update release note by some details? Peoples should know about changes explicitly, not only by PRs list


Wrong Powershell command in step #6?

Hello,
thanks for the documentation! I updated my Powershell installation and tried to follow the instructions. For Step #6, however, "Set-AzureRmVirtualHub" was not found, so I used "Update-AzureRmVirtualHub" instead. Is that an issue with my Powershell installation or is it something in the documentation?
Best regards

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

ID: 7d9e67fa-4f75-f6e1-4090-a08e026200f1
Version Independent ID: 54dba75e-6136-9cf7-4fe1-9a3179130de6
Content: Create an Azure Virtual WAN virtual hub route table to steer to NVA
Content Source: articles/virtual-wan/virtual-wan-route-table.md
Service: virtual-wan
GitHub Login: @cherylmc
Microsoft Alias: cherylmc

@twitek Thanks for your feedback! We will investigate and update as appropriate.

@twitek you are correct, Update-AzureRmVirtualHub is the correct command.
I have assigned the issue to the content author to evaluate and update as appropriate.

@twitek  Good catch! Updating now.

#please-close (Just waiting for PR to merge)


Use a "password" hidden input() in app.py when asking for the password ?

[ ] When reading input() for password, use a "hidden" input like real password on UNIX ? Useless, but fun to try!

https://docs.python.org/3/library/getpass.html
import getpass
.
.
.
pa = getpass.getpass()

(https://stackoverflow.com/a/18290450/)
I'll let this open, if someone to contributes, this is a good first issue to solve!
Please go ahead, open a pull request!


[rfw] createCoreWidgets prevents tree shaking of icon fonts

Example code:
import 'package:flutter/widgets.dart';
import 'package:rfw/rfw.dart';

void main() {
  final runtime = Runtime()
    ..update(const LibraryName(['core']), createCoreWidgets());

  runApp(
    RemoteWidget(
      runtime: runtime,
      data: DynamicContent(),
      widget: const FullyQualifiedWidgetName(LibraryName(['remote']), 'root'),
    ),
  );
}

Try to build in release mode:
$ flutter build apk

This application cannot tree shake icons fonts. It has non-constant instances of IconData at the following locations:
  - file:///Users/jiahaog/.pub-cache/hosted/pub.dev/rfw-1.0.23/lib/src/flutter/argument_decoders.dart:805:12
Target aot_android_asset_bundle failed: Error: Avoid non-constant invocations of IconData or try to build again with --no-tree-shake-icons.
...

Versioning
This is with package:rfw 1.0.23, Flutter master at a603a17875.

Reproducible using the code sample provided above.

flutter doctor -v
[✓] Flutter (Channel stable, 3.19.0, on macOS 14.3.1 23D60 darwin-arm64, locale en-GB)
    • Flutter version 3.19.0 on channel stable at /Users/nexus/dev/sdks/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision bae5e49bc2 (5 days ago), 2024-02-13 17:46:18 -0800
    • Engine revision 04817c99c9
    • Dart version 3.3.0
    • DevTools version 2.31.1

[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    • Android SDK at /Users/nexus/Library/Android/sdk
    • Platform android-34, build-tools 34.0.0
    • Java binary at: /Users/nexus/Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.7+0-17.0.7b1000.6-10550314)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 15.2)
    • Xcode at /Applications/Xcode-15.2.0.app/Contents/Developer
    • Build 15C500b
    • CocoaPods version 1.14.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2023.1)
    • Android Studio at /Users/nexus/Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 17.0.7+0-17.0.7b1000.6-10550314)

[✓] IntelliJ IDEA Ultimate Edition (version 2023.2.5)
    • IntelliJ at /Users/nexus/Applications/IntelliJ IDEA Ultimate.app
    • Flutter plugin version 77.2.2
    • Dart plugin version 232.10286

[✓] VS Code (version 1.86.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.82.0

[✓] Connected device (4 available)
    • Dean’s iPad (mobile) • 00008103-000825C811E3401E • ios            • iOS 17.3.1 21D61
    • Nexus (mobile)       • 00008020-001875E83A38002E • ios            • iOS 17.3.1 21D61
    • macOS (desktop)      • macos                     • darwin-arm64   • macOS 14.3.1 23D60 darwin-arm64
    • Chrome (web)         • chrome                    • web-javascript • Google Chrome 121.0.6167.184

[✓] Network resources
    • All expected network resources are available.

• No issues found!

[!] Flutter (Channel master, 3.20.0-10.0.pre.42, on macOS 14.3.1 23D60 darwin-arm64, locale en-GB)
    • Flutter version 3.20.0-10.0.pre.42 on channel master at /Users/nexus/dev/sdks/flutters
    ! Warning: `flutter` on your path resolves to /Users/nexus/dev/sdks/flutter/bin/flutter, which is not inside your current Flutter SDK checkout at /Users/nexus/dev/sdks/flutters. Consider adding /Users/nexus/dev/sdks/flutters/bin to the front of your path.
    ! Warning: `dart` on your path resolves to /Users/nexus/dev/sdks/flutter/bin/dart, which is not inside your current Flutter SDK checkout at /Users/nexus/dev/sdks/flutters. Consider adding /Users/nexus/dev/sdks/flutters/bin to the front of your path.
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 4c8e30cc7f (7 hours ago), 2024-02-18 19:58:28 -0500
    • Engine revision 80d6745c6f
    • Dart version 3.4.0 (build 3.4.0-154.0.dev)
    • DevTools version 2.33.0-dev.6
    • If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly to perform update checks and upgrades.

[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    • Android SDK at /Users/nexus/Library/Android/sdk
    • Platform android-34, build-tools 34.0.0
    • Java binary at: /Users/nexus/Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.7+0-17.0.7b1000.6-10550314)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 15.2)
    • Xcode at /Applications/Xcode-15.2.0.app/Contents/Developer
    • Build 15C500b
    • CocoaPods version 1.14.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2023.1)
    • Android Studio at /Users/nexus/Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 17.0.7+0-17.0.7b1000.6-10550314)

[✓] IntelliJ IDEA Ultimate Edition (version 2023.2.5)
    • IntelliJ at /Users/nexus/Applications/IntelliJ IDEA Ultimate.app
    • Flutter plugin version 77.2.2
    • Dart plugin version 232.10286

[✓] VS Code (version 1.86.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.82.0

[✓] Connected device (5 available)
    • Dean’s iPad (mobile)            • 00008103-000825C811E3401E • ios            • iOS 17.3.1 21D61
    • Nexus (mobile)                  • 00008020-001875E83A38002E • ios            • iOS 17.3.1 21D61
    • macOS (desktop)                 • macos                     • darwin-arm64   • macOS 14.3.1 23D60 darwin-arm64
    • Mac Designed for iPad (desktop) • mac-designed-for-ipad     • darwin         • macOS 14.3.1 23D60 darwin-arm64
    • Chrome (web)                    • chrome                    • web-javascript • Google Chrome 121.0.6167.184

[✓] Network resources
    • All expected network resources are available.

! Doctor found issues in 1 category.

cc @Hixie

This is intentional. It's so that you can use the icons in RFW files.

RFW should probably not support icons/icon fonts then.
Icon fonts tend to grow over time, and there is a popular version of one used internally at Google that is >9mb. Not being able to shake out unused icons ends up being a significant runtime hit to memory usage and package distribution size in that case.
For the RFW case, a better architecture would probably be having the server be able to send down some other data for what to draw there, e.g. some path based data describing the outline(s) of the shape and what color to use when drawing it.

RFW itself is agnostic to the issue; for use cases where one wants a fixed small set of icons or when one wants the server to provide the icon data or whatever, one can provide a custom local widget library that doesn't use the iconData argument decoder. This is similar to how different RFW uses will want different sets of local widgets in general, icons are just an extension of that. For many uses of RFW, a 10MB font is a trivial price to pay. For example, permanently installed signage doesn't care what the binary cost is, as it typically has GBs of spare storage; that's why the default widget set includes Icon.
If avoiding bundling icon fonts is a common use case we could have an alternative version of createCoreWidgets that excludes the Icon definition. (We'd have to be careful about how we implement that to make sure the tree shaking works correctly so that it correctly notices that IconData isn't being used.) The trade-off is that it makes getting started with RFW slightly more complicated, but if it's a common then that would be worth it since creating a custom local widget library for a set of core widgets is a bit tedious.


Add version to CLI

Would love some thoughts on how best to fetch the version number to display. Right now it is static and set within the handleVersionCommand function.
Also added the additional command line options to the reference.
This tackles #141.

          1 Warning

:warning:
Any source code changes should have an entry in CHANGELOG.md or have #trivial in their title.

  Generated by :no_entry_sign: Danger

🚫 CI failed with log

@ay8s What about creating a Version model struct, where we expose a current static version accessor and therefore can access this from other parts of the framework. In there we can hardcode the value of the current version.
cc @rahul-malik

@ay8s - Thanks! Can you separate the version into a separate file we can reference from the CLI handling code? It'll make it easier to update / script for release changes.

Just heard you guys are in the middle of a big change so i'll go ahead and make the requested changes

@rahul-malik Thanks Rahul. Ye, we're actually in the process of switching from Mantle to Plank in the main Buffer iOS app along with our newly built Composer. 👍

@ay8s sounds great, let us know if you run into any issues or feature requests

Moved to https://github.com/pinterest/plank/pull/144


Welcome message when Dotsimus gets invited to a new server

This welcome message gets sent after the bot is invited to a server, it shows:

Features of Dotsimus

A nice, polite, welcoming message for members and moderators

Two buttons, one that leads to a learn more page and the other one goes to the homepage of Dotsimus

Tasks

[ ] Listen to guildCreate
[ ] DM the server owner

Send a message in a channel (most bots send the welcome message in the first text channel on a guild)
Instead of this I'd propose to send the message to the owner of the server, just to make sure that they're really familiar with the feature set of the bot, sending it to a general channel might be considered spammy.

Also I'd recommend logging that "We have sent a DM to this person about Dotsimus", so that we don't continuously spam the owner with the same DMs if they happen to invite Dotsimus into different servers.


vm.$set will give error message. But Vue.set will work well.

var cart=new Vue({
    el:".cart",
})

cart.$set("absolute",123);

It will send an error message in the console.  Why can't I use instance.$set to give the instance a new attribution?

The property should have a default value in data. The warning is there so you don't accidentally set a property that shouldn't exist.
var cart = new Vue({
  el:".cart",
  data: {
    absolute: 0
  }
})
cart.$set("absolute",123)

This should work fine.

But in the tutorial, it says

However, there are ways to add a property and make it reactive after an instance has been created.

http://vuejs.org/guide/reactivity.html#Change-Detection-Caveats

Well, it's a warning message, not an error (and won't show up in production).
And the warning explains why it's better to properly initialize your data:

You are setting a non-existent path "absolute" on a vm instance. Consider pre-initializing the property with the "data" option for more reliable reactivity and better performance.

While $set() works, it's better to pre-initialize your data.

OK I see , but the warning message should use the yellow color printed by console.warn........


Add/Update restic func for stats

Change Overview
Update restic with stats and checkRepo func
Add snapshot list parse func
Pull request type
Please check the type of change your PR introduces:

[ ] Work in Progress
[ ] Refactoring (no functional changes, no api changes)
[ ] Trivial/Minor
[ ] Bugfix
[X] Feature
[ ] Documentation

Issues

#XXX

Test Plan

[ ] Manual
[x] Unit test
[ ] E2E

https://github.com/kastenhq/k10/pull/6670 is a draft implementation/use of backupInfo via K10

@vkamra Ready for merge?


Autoplugin and subprojects

I have a root project and many subprojects.
When I do:
sbt root/izpack:create-xml

or
sbt izpack:create-xml

It tries to create target/izpack.xml from src/izpack/izpack.iml, but also it searches for subproject1/src/izpack/izpack.iml and subproject2/src/izpack/izpack.iml.   As I only have one izpack.iml, it fails.
I think it's a bug that has to do with the new 0.13 support.

The same can be said about izpack:createInstaller.

This is the solution:
aggregate in IzPack := false

I think, that the default value should be false.


Conflict decorations in result should not use editor cursor style

The conflict decorations in the result view are read only. That is fine for now.
We should just adjust the cursor style, the current one is the editor cursor and the users will wrongly think that they can copy text from the conflict decoration which is not supported.
We should just use the default cursor arrow. I believe the following css will help
cursor: default
fyi @daviddossett

Unfortunately this is not easy to do, as the view zone is in the background (please don't increase the z-index 😉).
Setting cursor: default has no effect.

Makes sense, thanks for the explanation.
When we have the widget we could decide if clicking on it does something, for example expands the code.

Closing, as the conflict decorations are no longer shown by default.


V0.4 Milestone

Coverage remained the same at 89.848% when pulling b027b9ebeb1ad71a30963bc2620ca76914c2e2ae on V0.4 into 34398e1a078a43ceb3d1d2f6160afc941af7ebf3 on master.

Coverage decreased (-2.5%) to 87.348% when pulling fc888c33134c43e69b017bbc685ea06e8f6a8d1e on V0.4 into 34398e1a078a43ceb3d1d2f6160afc941af7ebf3 on master.

Coverage decreased (-2.5%) to 87.348% when pulling fc888c33134c43e69b017bbc685ea06e8f6a8d1e on V0.4 into 34398e1a078a43ceb3d1d2f6160afc941af7ebf3 on master.

Coverage decreased (-2.5%) to 87.348% when pulling fc888c33134c43e69b017bbc685ea06e8f6a8d1e on V0.4 into 34398e1a078a43ceb3d1d2f6160afc941af7ebf3 on master.


Some math equations render error in comment hint: Support for LaTex

Issue Type: Bug
Some math equations render error in python comment hint. For example in pytorch comment hint.

 We have marked this issue as "needs decision" to make sure we have a conversation about your idea. We plan to leave this feature request open for at least a month to see how many 👍 votes the opening comment gets to help us make our decision.

Thanks a lot!