GIatsu air conditioning support: No supported fan modes detected

Hi There, first of all, thanks for the fork and all updates, the integration is awesome!
I have some Giatsu Aroma2 air conditioning, shipped with eu-sk105 wifi. I installed the integration in my homeassistant and it works all good, except for two things: there's no fan mode control. in HA card, the fan mode is empty and i cannot control it. And second thing is the display LED. the card appears, but nothing happens in AC when i switch it. In HA log, it is recorded an error "Device is not capable of display control."
Could you guide-me or point me how it is possible to sniff communication from smarthome and get these commands to be implemented? Or of course any other way better suitable? thanks in advance! kind Regards, Fernando

Hi Fernando. Thanks for using the fork.

there's no fan mode control. in HA card, the fan mode is empty and i cannot control it.

I recently added a feature in mill1000/midea-ac-py to only show supported fan modes. These are populated according to the device capabilities. Your device might not report this capability which will require a workaround.

And second thing is the display LED. the card appears, but nothing happens in AC when i switch it. In HA log, it is recorded an error "Device is not capable of display control."

This has been reported before (https://github.com/mill1000/midea-ac-py/issues/21#issue-1871700242). In some cases, it appears there are devices that only support LED control via the remote.

To start I'd like to know what your device's reported capabilities are.  You can either use the msmart-ng command or enable debug logging in Home Assistant.

msmart-ng query --capabilities --auto DEVICE_IP

Can you control the display LED via the OEM application? (e.g. MSmartHome, NetHomePlus, etc)

Hi There Mill1000, thanks for your attention, please find below the results:

note ~ # msmart-ng query --capabilities <IP_ADDRESS>
INFO:msmart.cli:Querying device capabilities.
INFO:msmart.lan:Creating new connection to <IP_ADDRESS>:6444.
^Cnote ~ # msmart-ng query --capabilities --auto <IP_ADDRESS>
INFO:msmart.cli:Discovering <IP_ADDRESS> on local network.
INFO:msmart.cloud:Using Midea cloud server: https://mp-prod.appsmb.com (China: False).
INFO:msmart.lan:Creating new connection to <IP_ADDRESS>:6444.
INFO:msmart.lan:Authenticating with <IP_ADDRESS>:6444.
INFO:msmart.lan:Authenticating with <IP_ADDRESS>:6444.
INFO:msmart.lan:Authentication successful. Expiration: 2023-10-26T21:16:45, Local key: df98dbc7af44ad30c2af7475d91c43a2490095017f56a770ad208dc82437f749
INFO:msmart.cli:Querying device capabilities.
INFO:msmart.cli:{'supported_modes': [<OperationalMode.FAN_ONLY: 5>, <OperationalMode.DRY: 3>, <OperationalMode.COOL: >, <OperationalMode.HEAT: 4>, <OperationalMode.AUTO: 1>], 'supported_swing_modes': [<SwingMode.OFF: 0>, <SwingMode.HORIZONTAL: 3>, <SwingMode.VERTICAL: 12>, <SwingMode.BOTH: 15>], 'supported_fan_speeds': [], 'supports_custom_fan_speed': False, 'supports_eco_mode': True, 'supports_turbo_mode': True, 'supports_freeze_protection_mode': True, 'supports_display_control': False, 'supports_filter_reminder': False, 'max_target_temperature': 30, 'min_target_temperature': 16}

no, i cannot control display leds, only from the remote.

Thanks.

The supported fan modes aren't getting populated, as I suspected.

Hi please find below:
note ~ # msmart-ng query -d --capabilities --auto <IP_ADDRESS>
DEBUG:asyncio:Using selector: EpollSelector
INFO:msmart.cli:Discovering <IP_ADDRESS> on local network.
DEBUG:msmart.discover:Discovery sent to <IP_ADDRESS>:6445.
DEBUG:msmart.discover:Discovery sent to <IP_ADDRESS>:20086.
DEBUG:msmart.discover:Waiting 5 seconds for responses...
DEBUG:msmart.discover:Discovery response from <IP_ADDRESS>: 837000c8200f00005a5a0111b8007a8000000000e47213161a0a1714beaa0200008b0000000000000000018000000000057881b6c1821855bc1853aa2b14c34dc820cce3bcf8e9a84ccb3d138590a2f149abfff629d96387fd301d05d8d4bd4c1a3c2f5b742abfb1c72dcde1b96ebe64f221be7152f0bc8561f4a4c489caf1d7af07247d607980f5ea909c34540b991f4bdfb3e16e33d88768cc4c3d0658937d0bb19369bf0317b24d3a4de9e6a131060e1a3001edbc9df6c4152bcb220d0a116e0220f13f79a255407186f0e7d814fc
DEBUG:msmart.discover:Decrypted data from <IP_ADDRESS>: 6a33a8c02c19000030303030303050303030303030305131383846324244343141333934303030300b6e65745f61635f413339340000870002000000000000000000ac00acac0000000088f2bd41a394150029092122000301000000000000000000000000000000000000000000000000000000000000000000
INFO:msmart.cloud:Using Midea cloud server: https://mp-prod.appsmb.com (China: False).
INFO:httpx:HTTP Request: POST https://mp-prod.appsmb.com/mas/v5/app/proxy?alias=%2Fv1%2Fuser%2Flogin%2Fid%2Fget "HTTP/1.1 200 "
DEBUG:msmart.cloud:API response: {"code":"0","msg":"ok","data":{"loginId":"9e3dedd9-38ec-4979-886f-272925ba"}}
DEBUG:msmart.cloud:Received loginId: 9e3dedd9-38ec-4979-886f-272925ba
DEBUG:msmart.discover:Discovered 1 devices.
INFO:httpx:HTTP Request: POST https://mp-prod.appsmb.com/mas/v5/app/proxy?alias=%2Fmj%2Fuser%2Flogin "HTTP/1.1 200 OK"
DEBUG:msmart.cloud:API response: {"code":0,"msg":"成功","data":{"randomData":"25b1b619aa65e137e54b9034606e1cdc6d6ef02ab9900615af7c4351098ce776","uid":"83947250d2448ffdf02e111c74bad51e","accountId":"1023665078","nickname":"midea","mdata":{"tokenPwdInfo":{"tokenPwd":"647a7f64607b4a40bd3dd6880264a70d","expiredDate":1700950798564,"createDate":1698358798564},"userInfo":{"sourceId":"mj_12345","empId":"5456771537545216","address":"","gender":"0","mobile":"midea@mailinator.com","userDeptInfoList":null,"extras":null,"nameEn":null,"employeeNumber":null,"headPhoto":null,"uid":"83947250d2448ffdf02e111c74bad51e","name":"midea<EMAIL_ADDRESS>DEBUG:msmart.cloud:Received accessToken: T1iavr56yc5c59a0v
DEBUG:msmart.discover:Fetching token and key for udpid '4948bd1726cc71144aa52082b7f0b2a7' (little).
INFO:httpx:HTTP Request: POST https://mp-prod.appsmb.com/mas/v5/app/proxy?alias=%2Fv1%2Fiot%2Fsecure%2FgetToken "HTTP/1.1 200 OK"
DEBUG:msmart.cloud:API response: {"code":"0","msg":"ok","data":{"tokenlist":[{"udpId":"4948bd1726cc71144aa52082b7f0b2a7","key":"9af58052e2b242beb631566ca716580ab11205413f3545278f634b5bb79537c8","token":"CAB5183F5D053A56745CF0572AF3FD716A7EC7A89F233E6F0AA25D1992F11C2A0B5F829B017EE86167982F9472C54EDA34B501A5C1E316B45F5A1133F7425F17"}]}}
INFO:msmart.lan:Creating new connection to <IP_ADDRESS>:6444.
DEBUG:msmart.lan:Connected to <IP_ADDRESS>:6444.
INFO:msmart.lan:Authenticating with <IP_ADDRESS>:6444.
DEBUG:msmart.lan:Sending data to <IP_ADDRESS>:6444:<PHONE_NUMBER>000000cab5183f5d053a56745cf0572af3fd716a7ec7a89f233e6f0aa25d1992f11c2a0b5f829b017ee86167982f9472c54eda34b501a5c1e316b45f5a1133f7425f17
DEBUG:msmart.lan:Received data from <IP_ADDRESS>:6444:<PHONE_NUMBER>0f00204552524f52
DEBUG:msmart.discover:Fetching token and key for udpid '6e0220f13f79a255407186f0e7d814fc' (big).
INFO:httpx:HTTP Request: POST https://mp-prod.appsmb.com/mas/v5/app/proxy?alias=%2Fv1%2Fiot%2Fsecure%2FgetToken "HTTP/1.1 200 OK"
DEBUG:msmart.cloud:API response: {"code":"0","msg":"ok","data":{"tokenlist":[{"udpId":"6e0220f13f79a255407186f0e7d814fc","key":"ca302e53a2094e21a7582101f86bc950096b6fc07d0e49f2a8e13bcaa42d059d","token":"2695B6427D3F25032650E289546812F8F76A7BA915FF58042CEFF6CDF51B69D373F6C7423A1B9DB52E60B30949E1AF8DC216D6DAEA5FADA03CDE741C63DFEB06"}]}}
INFO:msmart.lan:Authenticating with <IP_ADDRESS>:6444.
DEBUG:msmart.lan:Sending data to <IP_ADDRESS>:6444:<PHONE_NUMBER>0000012695b6427d3f25032650e289546812f8f76a7ba915ff58042ceff6cdf51b69d373f6c7423a1b9db52e60b30949e1af8dc216d6daea5fada03cde741c63dfeb06
DEBUG:msmart.lan:Received data from <IP_ADDRESS>:6444:<PHONE_NUMBER>01214e061e9927cf711412cb731e4ee9998f72dfe5298ae460fbe9bb55385043ed6fa4e178594ab640f1ea5d3434d8411ae3ac007ad5aca89c613f3964652be3fa8983
INFO:msmart.lan:Authentication successful. Expiration: 2023-10-27T10:20:00, Local key: 8087f922b2ed1563e4117945960b1715ce9db086acac15b42dc8e78daaaed8da
DEBUG:msmart.base_device:Sending command to <IP_ADDRESS>:6444: aa21ac8d000000000003418100ff03ff000200000000000000000000000003016971
DEBUG:msmart.lan:Sending packet to <IP_ADDRESS>:6444: 5a5a011168002000000000003a0114161a0a1714beaa0200008b0000000000000000000000000000b8436dd15e84d5a4fc6fbf77d2b12486e10c552981b23022cb71ea0fc54dc25ecfa0ce55888ac57fc42a7eacc3285d37d30226fe721ab8b30aa4bc796aad8095
DEBUG:msmart.lan:Sending data to <IP_ADDRESS>:6444: 8370008e2066b8529ccac2da0a607921b9f74a3baef55b08e0e28e374d7eb77ca12e657c8090c7b5d011e598089618befb7233c743b6e34e38897acc871d36d7019a2a8574f1c3abe35e264ca598e0c122af42c05e3b3be113ad9edca452a5b4aef73410a67cbd3cfd28461bd44bc33247ed945fdc0fcdf9dc6650ae5e17572997a7f50b4124a54ac43cbc44b094a1ce1639293cf6c8
DEBUG:msmart.lan:Received data from <IP_ADDRESS>:6444: 8370008e20637fd21d0f1b5f5f81694dbef79ae1abd8e938ed69f2d8e9570ba252b4cf254cd2cf3d656b3372298d401c91ecb0beb8ea8803efd92e6ab0c3caafccfda412b48def9421168a6f8667f51a5b0dd33d58dea9a6ef329b8d03aa880b9d73cc1c61a35450ed5584c74ad8357169a61fd26ba1fc7443f2391ff439b93cb60f731c8fa7d9e138a63f8633d0634d56d6768c2e48
DEBUG:msmart.lan:Received packet from <IP_ADDRESS>:6444: 5a5a01116800208000000000a60214161a0a1714beaa0200008b0000000000000000018000000000f8a6f811eb1c20d297e2cdead74536f390ec91f3cf08df417d5cf5aa1fe024ca302226ce7ff4dcda9aa2ed0b5ffa60e51245f211223e5257dfa928228329ea03
DEBUG:msmart.lan:Received response from <IP_ADDRESS>:6444: aa22ac00000000000303c00187667f7f00308000005c4f00000000000000000069e5d7
DEBUG:msmart.base_device:Response from <IP_ADDRESS>:6444 in 0.590000 seconds.
DEBUG:msmart.device.AC.command:State response payload: c00187667f7f00308000005c4f00000000000000000069
INFO:msmart.cli:Querying device capabilities.
DEBUG:msmart.base_device:Sending command to <IP_ADDRESS>:6444: aa0faca3000000000003b50111022fa7
DEBUG:msmart.lan:Sending packet to <IP_ADDRESS>:6444: 5a5a01115800200000000000110214161a0a1714beaa0200008b000000000000000000000000000008863383a51f6d4436ea7dd0f0c64916915c618b02ed2747fad73f2ffa0db1d39e4b73c530cb32388c4998df4898a1a4
DEBUG:msmart.lan:Sending data to <IP_ADDRESS>:6444: 8370007e2066c990f42eac0873076ac1612a0d89a24add4aed1aab6537b31f95d81d3ae05c452e0ade7fe082ce9456331b0d90a8faee75593c5e2c5cf52eca352b7cd13fcac9bb53a1b9ccd62e2ff8bcf14ff571f6ed35032bf597c6021c93a0f06f724c45dfd000b71a984a36c6784c694139f506347712ca8adcde040365ac289a3d3a35ac
DEBUG:msmart.lan:Received data from <IP_ADDRESS>:6444: 8370008e2063cccb72713cf98c7c5670fe939b097f21340723830350b7d240fad18b30fe6f2e2461551c37309813ce030e277fdf042da59095b565e23b839263fee1702c6cc3e216bf9e40253d7fdc34a17dd4b7308f5db0e7b211428c79b1565e1d9d606c1f1588bd391620acee5cfaf353095bfa86e33b9a265f8c779a4fc2cacd639401d29fc3ab9b761e5b8ed8460c1647b14d57
DEBUG:msmart.lan:Received packet from <IP_ADDRESS>:6444: 5a5a01116800208000000000658214161a0a1714beaa0200008b00000000000000000180000000002ed30f7318deb2150985a069e6df704fc6c5350d624b48edff5254e941e2aad1eb8d98ade0f90bb5f67d9331fb42c16dcb78eb253c394fe87d360612e1448cd9
DEBUG:msmart.lan:Received response from <IP_ADDRESS>:6444: aa29ac00000000000303b5071202010113020101140201011502010116020101170201001a020101dedb
DEBUG:msmart.base_device:Response from <IP_ADDRESS>:6444 in 0.450000 seconds.
DEBUG:msmart.device.AC.command:Capabilities response payload: b5071202010113020101140201011502010116020101170201001a020101
DEBUG:msmart.device.AC.command:Supported capabilities: {'eco_mode': True, 'eco_mode_2': False, 'freeze_protection': True, 'heat_mode': True, 'cool_mode': True, 'dry_mode': True, 'auto_mode': True, 'swing_horizontal': True, 'swing_vertical': True, 'power_stats': False, 'power_setting': False, 'power_bcd': False, 'filter_notice': False, 'filter_clean': False, 'turbo_heat': True, 'turbo_cool': True}
INFO:msmart.cli:{'supported_modes': [<OperationalMode.FAN_ONLY: 5>, <OperationalMode.DRY: 3>, <OperationalMode.COOL: 2>, <OperationalMode.HEAT: 4>, <OperationalMode.AUTO: 1>], 'supported_swing_modes': [<SwingMode.OFF: 0>, <SwingMode.HORIZONTAL: 3>, <SwingMode.VERTICAL: 12>, <SwingMode.BOTH: 15>], 'supported_fan_speeds': [], 'supports_custom_fan_speed': False, 'supports_eco_mode': True, 'supports_turbo_mode': True, 'supports_freeze_protection_mode': True, 'supports_display_control': False, 'supports_filter_reminder': False, 'max_target_temperature': 30, 'min_target_temperature': 16}
( i just changed the AC to the one i tryed Fme mode - but same model same batch)

Thanks.
As I suspected your device doesn't send any fan speed capabilities, so I'll need to add a workaround for this case.
What fan speeds does your device support? Low, Med, High, Auto?

I've got a potential fix in #90
You can test it if you like
pip install git+https://github.com/mill1000/midea-msmart@issue/no_fan_modes

I installed it from the terminal and it looked like everything went as plan.  rebooted and still nothing.  do I need to do a full restart and not just home assistant?  also do I need to remove the application from HACS first?

Can you enable debug logging and post the logs here?

Hi Mill1000,
Tested the code, the AC device now has all the three modes in HA: please find the results :)
Low - OK - AC beeps, goes to low and HA updates with Low speed
Medium - OK, AC beeps, goes to Medium and HA updates accordingly
High - AC beeps, fan goes to high and HA updates to Auto
Auto - AC beeps, fan goes to Auto and HA updates to Auto if not switching from high ( as to HA it was in auto already)
So something wrong with high status detection, although it works.
Thanks! :)

home-assistant_midea_ac_2023-10-31T22-18-20.243Z.log
I turned it on and selected the different modes on fan, preset, etc.  let me know if you want me to do something else

@tabascoz
Uhh..odd. I can't explain that, but I'll look into it. Your device does support a "High" fan setting right?
@franzenel
Your system is still running the released version of msmart-ng, not the branch with the fix.

2023-10-31 17:36:51.171 INFO (MainThread) [custom_components.midea_ac] Starting midea-ac-py. Using msmart-ng version 2023.10.0.

@tabascoz Can you enable debug logging and cycle through each fan mode?

@mill1000 I ran the install again rebooted and did the debugger.  here is the install screen capture

and here is the debugger.
home-assistant_midea_ac_2023-11-01T20-36-02.674Z.log
but it is still saying the same version.  what am I doing wrong?  I do still have the old version installed under HACS.

@franzenel
I mentioned this in another thread: https://github.com/mill1000/midea-ac-py/pull/45#issuecomment-1788070221 but the  Home Assistant command line is not the same as the as the actual container running Home Assistant. The pip command needs to be run within the HA container.

According to this link you need to turn off "protection mode"
Run docker ps to identify the HA container. Likely it's called hass or homeassistant
Run docker exec <containername> -it bash
Run the pip command.

step 3 wouldn't run like you had it.  I tried "docker exec -it  sh"
and now I have it.

works great and thank you for taking the time to help me out.
Thank you very much.

Great! Thanks for your patience as well.
Do all the fan modes work for you?

Yes they all seem to work.
On Wed, Nov 1, 2023 at 21:04 Tucker Kern @.***> wrote:

Great! Thanks for your patience as well.
Do all the fan modes work for you?
—
Reply to this email directly, view it on GitHub
https://github.com/mill1000/midea-msmart/issues/88#issuecomment-1789902255,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABVDV6SIRX7JXDDWT4WOBVDYCLWTVAVCNFSM6AAAAAA6GFZIIKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTOOBZHEYDEMRVGU
.
You are receiving this because you were mentioned.Message ID:
@.***>

Hi Mill1000,
Yes it does have High setting and it works in smarthome app.
Please find the log! thanks once more! ;)
fan.log

Odd.
When the device is commanded to the high fan speed (0x64 -> 100) it returns a fan speed value of 0.
I've isolated the fan speed values for visibility.
 nov 02 15:19:06 note hass[6336]: 2023-11-02 15:19:06.455 DEBUG (MainThread) [msmart.base_device] Sending command to <IP_ADDRESS>:6444: aa24ac88000000000002404387 **64** 7f7f003000000000000000000000000000000000835631
 nov 02 15:19:07 note hass[6336]: 2023-11-02 15:19:07.098 DEBUG (MainThread) [msmart.device.AC.command] State response payload: c00187 **00** 7f7f0030000000674a00000000000000000000
 nov 02 15:19:07 note hass[6336]: 2023-11-02 15:19:07.098 DEBUG (MainThread) [msmart.device.AC.device] Unknown <enum 'FanSpeed'>: 0

Here's a comparison when commanded to medium (0x3c -> 60)
 nov 02 15:19:01 note hass[6336]: 2023-11-02 15:19:01.681 DEBUG (MainThread) [msmart.base_device] Sending command to <IP_ADDRESS>:6444: aa24ac88000000000002404387 **3c** 7f7f003000000000000000000000000000000000807f33
 nov 02 15:19:02 note hass[6336]: 2023-11-02 15:19:02.268 DEBUG (MainThread) [msmart.device.AC.command] State response payload: c00187 **3c** 7f7f0030000000674a00000000000000000000

Can you collect logs while you switch the device to high fan speed via the app or remote?

Got it - weird.... does it reports 0 also when receiving the auto command?
here what i did, cycled on remote cotrol from low->mid->high->auto with 6-8 seconds in between. hope it helps
log2.log

Auto reports 0x66 -> 102 which is expected.

here what i did, cycled on remote cotrol from low->mid->high->auto with 6-8 seconds in between. hope it helps

Sorry I should have specified. That's too fast. The device state is only queried every 15 seconds. So you'll need to wait over 15 seconds per fan state.

sure thing! so did with 30 seconds, please note the AC i am testing is the ip <IP_ADDRESS>, i have 5 other ACs...
pls find below
log3.log

Alright thanks! So what's happening is your device uses 80 for high speed, which I removed in this commit https://github.com/mill1000/midea-msmart/commit/d839872233320fca0d8fee15fa0bd60b081b51f7
But upon reviewing some of the reference code it looks like 80 is the correct value for "high", and 100 is for "strong".
From the Lua:
https://github.com/mill1000/midea-msmart/blob/210d02ef551345c43ca2e40873a9d6080c1297b8/reference/T_0000_AC_00000Q1B_2023072401.lua#L241
From the plugin
if (windSpeed === "Mute") {
    return 20;
} else if (windSpeed === "Low") {
    return 40;
} else if (windSpeed === "Mid") {
    return 60;
} else if (windSpeed === "High") {
    return 80;
} else if (windSpeed === "Strong") {
    return 100;
} else if (windSpeed === "Auto") {
    return 102;
} else {
    return 102;
}


DigitalReader last_pressed and last_triggered

Refactor handler debounce code to use recommended ticks_diff()
Rename DigitalReader.last_pressed to better DigitalReader.last_rising_ms
Added wrappers last_pressed and last_trigger to the Button and DigitalInput classes.
Updated README docs

This addresses the first part of #60 with the last_pressed() etc methods. A future PR will address the falling edge handler.

I realized that last_pressed() and last_triggered() would be more useful returning the "duration" since the last press/trigger instead of the timestamp. This helps avoid duplicating code to calculate duration in user scripts, which is how it would be used.
Docs updated here: https://awonak.github.io/EuroPi/generated/europi.html#europi.Button.last_pressed

That is a very good point. I would argue that if a script calls last_pressed() and does not have handler defined, then that is a user programming error. However, last_pressed() could certainly be called before the handler function has been called, with last_rising_ms still containing the default value of 0.
Currently, when the default value is 0, last_pressed() gives the present ticks_ms(), which itself is an arbitrary value and does not accurately represent the duration since last pressed.
If the default value of last_rising_ms is set to ticks_ms() at init time, then script code will interpret that as detecting a rising edge event when the script starts. For example, the Polyrhythm Sequencer show_menu_header() method would run when the script first starts. Not a bad thing in this example, but you could imagine some behavior running at startup that is undesirable.
Another potential solution is to set the default last_rising_ms = None instead of 0 and refactor the last_pressed() method to return None if the rising edge has not yet been detected. This requires a little more code to use the method. Here's an example how a snippet from polyrhythm_seq.py script's show_menu_header() would be refactored:
def show_menu_header(self):
    # Returns None if unpressed, otherwise returns the duration since last press.
    last_pressed = b1.last_pressed()
    if last_pressed and last_pressed < MENU_DURATION:
        oled.fill_rect(0, 0, OLED_WIDTH, CHAR_HEIGHT, 1)
        oled.text(f"{self.pages[self.page]}", 0, 0, 0)

I'll think about this some more and graciously welcome any other suggestions.

Another proposal, last_pressed() returns duration or throws an error if it has not yet been pressed.
# europi.py
class NoEventsDetected(Exception):
    pass

...

def _duration_since_last_rising(self):
    """Return the duration in milliseconds since the last trigger."""
    if self.last_rising_ms is None:
        raise NoEventsDetected
    return time.ticks_diff(time.ticks_ms(), self.last_rising_ms)

# polyrhythm_seequencer.py

...

def show_menu_header(self):
    try:
        if b1.last_pressed() < MENU_DURATION:
            oled.fill_rect(0, 0, OLED_WIDTH, CHAR_HEIGHT, 1)
            oled.text(f"{self.pages[self.page]}", 0, 0, 0)
    except NoEventsDetected:
        pass

The second solution looks much better to me! I think it's best to consider this a programming error and make the user aware of it rather than make it more difficult to use the method properly (your first example in the polyrhythm script)

I have updated the code and docs to match the second proposal which throws an exception prior to handler being first called.
https://github.com/Allen-Synthesis/EuroPi/blob/a64d9a04b2acb3914943b21eee1852ef98d2c479/software/README.md#button
If this seems like too much wrapper code, then we can revert back to last_pressed() simply returning ticks_ms of last pressed or None prior to being pressed and let the script author decide how to handle this themselves.

Reverted back to simply returning ticks_ms of the last button press, or 0 prior to being pressed.
https://github.com/Allen-Synthesis/EuroPi/blob/3e5012a675af13fef86545fe9d6441f025dfd27f/software/README.md#button
I think this is much cleaner and less error prone.

Is this one (and the IRQ refactor) ready to go now? All seems to be working great when I run it!


Trigger failures in store plugins when no data is received

Add catch-all functionality to cause store plugins to error out if they detect no data inbound from stdin to actually store on the filesystem.
This will help counteract situations where target plugins exit non-zero but do not provide any data to be backed up to stdout

I think this is as simple as interposing a | tee >(head -c1 > $some_tmpfile) into the pipeline here: https://github.com/starkandwayne/shield/blob/master/bin/shield-pipe#L102
And then checking to make sure that $some_tmpfile is not zero-length (it should have exactly one byte in it).
I'll take a crack at this later today / tomorrow.


feat: heimdallibrary (expose decompiler as library)

What was wrong?
No access the decompiler within external rust code.
What was changed?

Exposed the decompiler as a module (use heimdall::decompile;)
Exposed CLI flags as methods in a builder pattern (DecompileBuilder::new(BYTECODE).decompile();)

This just wraps the existing DecompilerArgs inside the builder for a nice interface.

Added an example to showcase use as library (cargo run --example decompile)
Added simple test using the bytecode from test: benchmark_decompile_simple.
Added basic docs for the builder

doctest set to no_run because the bytecode is truncated in the doc example: "7312/* snip */04ad"

Examples
Minimal use
const SOURCE: &'static str = "7312/* snip */04ad";

DecompileBuilder::new(SOURCE)
    .decompile();

Use of all builder (flag) methods:
const SOURCE: &'static str = "7312/* snip */04ad";

DecompileBuilder::new(SOURCE)
    .default(false)
    .include_sol(false)
    .output("my_contract_dir")
    .rpc("https://<IP_ADDRESS>:8545")
    .skip_resolving(true)
    .verbosity(5)
    .decompile();

Unchanged
The decode method was not exposed because, unlike the decompile method, no files are emitted.
It seemed less likely to be useful in the context of a library
Formatting
I did not run cargo fmt, as this produced changes across the codebase.
Linting
Clippy is happy, with some silencing with #[allow(dead_code)] on the builder pattern methods
(which are not technically called).

I have also inadvertently included some whitespace trimming, my apologies


add split limit

The latest version still does not completely solve the split bug of overly wide images.
Take a look at this example: KRR_27.zip
The width of the first image in this file is 1392 and the height is 600
If this setting is enabled, the xhtml duplicate bug appears again.
-autosplitdoublepage -hascover=false -keepdoublepageifsplit=false
The bug here is: if the width of the first picture is greater than the height, -hascover=false and -keepdoublepageifsplit=false cannot coexist.
After enabling  -hascover=false and -keepdoublepageifsplit=false at the same time, 3 img_0 pictures will be generated, and xhtml bugs will occur at the same time.
In addition to this bug, I also want to completely solve the problem of images that are too wide. The existing split methods should be improved and become smarter.
Since the H/W ratio of manga is usually 1.4 ~ 1.55 (A4, B6...), so the W/H ratio of manga double pages that need to be divided is usually 1.29 ~ 1.428
The reason for the split error is that the splitted image still satisfies that the width is greater than the height.
The root cause is that the W/H ratio of the original image is greater than 2
But we know that the W/H ratio of a double page that needs to be divided is absolutely impossible to be greater than 2.
These bug images with an aspect ratio greater than 2 should not be split, as these images will not contain the main content of the comic, just a banner or cover.
So the correct way to split the mode should be to only split pictures with W/H ratio greater than 1 and less than 2 (actually it should be more strict, such as 1.8 or 1.9). Images larger than the split limit should be automatically rotated.
This split limit can be determined by the user just like the crop limit.
I use go-comic every day, so I frequently submit issues recently to find a perfect solution for kindle comics.

When I split this kind of large image, each of the split still have W>H. Which is not the case if it's a double page. This may indicate the image is a large band.
You first image visually looks like a double page. But we have 692 px after cutting in half, which result in W>H.
For the cover, usually when there is no clear cover from the source, we should disable the hascover.
This will take the first picture as a cover, and duplicate it.
When the hascover is activated, there is no duplicate of the cover.
First, I will try to this the issue with space once and for all. Got some idea, but I need to experiment it. Thanks for the example here, it will help me debug.
As for split double page, I think in case of "portrait only", we could activate the autorotate on the split pages, this way it will be easier to read. It should feet when the W > 2*H (or W>H after split).
When you want to disable the split of a large band, it mean you see it on the kindle, without any zoom then. So except if you are using the zoom panel, sometimes it may be difficult to read.
I would suggest to cut and rotate each split instead.
I will play with this file.
Don't worry to be active on bug reporting, you are helping making this tools better.
In the pipe:

webtoon support
make the epub generator as a library, usuable outside this tools

Hi,
I've made a quick fix with 291c8983a455c878a91e2c2a49b2563bfe970243
It fix the issue with double space, but it's perfectible:

title should use full page if double page
cover is not in the center on the thumbnail

I will take a few days to test the existing two-page comics.
Thank you for your update.

There is an error in the '-aspect-ratio' of 291c898 version.
Before that, if we add '-aspect-ratio x.x', the 2 pictures in landscape mode will be centered.

If we do not add '-aspect-ratio x.x', the 2 pictures will be displayed on the edge

Now the picture cannot be centered. The picture is always displayed on the edge in landscape mode, whether or not the '-aspect-ratio' is added.


JSET issue

Hello,
First.I follow the orders,localhost:9851/jset+a+b+1+1
Then,I follow the orders again,localhost:9851/jget+a+b
Returned the following results：{"ok":true,"value":"{\"1\":\"1\"}","elapsed":"0s"}.
Among them, the backslash escapes is much more at a time？

@GameFreedom JSON you provided is a valid. Could you provide additional information about issue you have?

And BTW http endpoint is deprecated right now and will be disabled by default in future releases.

@GameFreedom This is the correct behavior.
The "JSET a b 1 1" command will create the JSON document:
{"1":"1"}

In order to store this value as a string in Tile38, it must be escaped:
"{\"1\":\"1\"}"

You must then retrieve this value as an unescaped string using the JSON library for your programming language.

@GameFreedom I'm closing this issue for now, but feel free to reopen if you have further questions on the output format.


HELM-359: migrating helm unit tests to react

This is also part of HELM-355 Convert Flow Datasource to React
feat: added initial test for flow datasources and along included a few fixes for the react flow datasource
fix: toBits, combineIngressEgress and onlyIngress, onlyEgress, negativeIngress and negativeEgress, withSuffix, withPrefix, swapIngressEgress
combineIngressEgress

Negative
Egress, toBits

JIRA (Issue Tracker): http://issues.opennms.org/browse/HELM-359
JIRA (Issue Tracker): http://issues.opennms.org/browse/HELM-355
Continuous Integration: CircleCI

closing as I ended up separating this jira into test per datasource and any other test affected by this migration.


[WFCORE-5725] Upgrade to Byteman 4.0.18

https://issues.redhat.com/browse/WFCORE-5725

Just running the Windows job again, in my aggregate PR it also stalled at the same location so just checking if it is a conincidence.


Add SOCK_NONBLOCK option to UDP sockets.

Only affects udp_server, which is not yet used.

Can one of the admins verify this patch?

This is ok to test.

Test this please.


Updating snes-icon to have a lighter color for the top buttons.

This fixes #42. The top row of the US SNES controller buttons are a lighter color.

This should probably coincide with #27

I'll merge this PR for now.
if you change the color with #27 , let's change it later. 🙏
Is it all right? 🤔

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


docs: icons component

Description

Added icon component documentation.
Removed old icons documentation and added a link to version6 in case its needed.
Added a category filter
Sorted the icon array
Added @dialpad/dialtone-icons

Pull Request Checklist

[x] Ask the contributors if a similar effort is already in process or has been solved.
[x] Review the contribution guidelines.
[x] Use staging as your pull request's base branch. (All PRs using production as its base branch will be declined).
[x] Ensure all gulp scripts successfully compile.
[x] Update, remove, or extend all affected documentation.
[x] Ensure no private Dialpad links or info are in the code or pull request description (Dialtone is a public repo!).

Obligatory GIF (super important!)

Sweet, let's move this on!


Spelling of marginalization throughout the code and documentation

The spelling of marginalization alternates throughout the code and documentation. Right now all the documentation and paper is marginalisation with an ‘s’ but the code is marginalization with a ‘z’ and therefore following the set-up list and running the code does not work directly. Here are the issues I had:

Run the marginalisation on the demo data from the template:
$ python marginalisation.py

The file is called marginalization.py with a z
Once the code is run under the right spelling this error occurs

File "marginalization.py", line 32, in
from exoticism.config import CONFIG_INI
ModuleNotFoundError: No module named 'exoticism'

And it gets no further than this.
I suggest we go through and change it all - I have put out a twitter poll to see what people suggest for our choice
https://twitter.com/StellarPlanet/status/1244920506609958915?ref_src=twsrc^tfw

@hrwakeford This is taken care of in the notebook PR #8!


Hardcoded value for Gitlab url instead of using environment variable

Preflight Checklist

[X] I agree to follow the Code of Conduct that this project adheres to.
[X] I have searched the issue tracker for a feature request that matches the one I want to file, without success.

Describe the bug
I am using Gitlab on-premise instance. I configured the global environment variable DRAWIO_GITLAB_URL="https://gitlab.mycompany". When I click on Share button under the user name, it redirects me to gitlab.com instead of my instance.
Authorization and accesing files from my instance are working well.
To Reproduce
Steps to reproduce the behavior:

Go to 'drawio instance'
Click on 'Share'
It redirects to https://gitlab.com/myuser/myproject/-/project_members instead of https://gitlab.mycompany/myuser/myproject/-/project_members

Expected behavior
https://gitlab.mycompany/myuser/myproject/-/project_members
draw.io version (In the Help->About menu of the draw.io editor):

draw.io version [e.g. 14.2.7]

Additional context
I searched the file which generates sharing link. I found it here: GitLabFile.js
This contains hardcoded value instead of using the variable DRAWIO_GITLAB_URL

Thanks for the report. This will be fixed in the next release.

Thanks for the report. This will be fixed in the next release.


Cancellation token cannot be provided for methods that are not marked async

A Parameter injection is not supported for void methods is raised when you have a setup or test method in the form
[SailfishMethod]
public Task Run(CancellationToken ct) => RunTheTest(ct)

The message is confusing as the return type isn't void. Looking at the code, it assumes that if the async attribute isn't present it's a void return type.
It is also unclear which method is being talked about.
Perhaps it should look to see if the method return Task instead of looking for the async attribute. This is likely more reliable as I suspect the async attribute will be present for ValueTask  as well, which will cause the code to fail when casing to Task.
The message could be clarified to say The 'Run' method in 'MyTestClass' must have a return type of 'Task' if it has parameters

Hey Rob! :D
Hmm, yes this impl is a bit silly. A clearer msg will be good - and I'm reconsidering the decision to discriminate between sync and async methods when allowing the ct to be injected, so I think the way forward on this is to clean up the invocation reflection a bit (consolidate and handle ValueTask), update the exception messages as you suggest, and then allow cancellation token injection into any lifecycle method.
https://github.com/paulegradie/Sailfish/pull/141
I appreciate you dude.
Note: Beware of breaking changes when upgrading. Went through an instability period in the library between 1.3-1.6. Going forward there will be fewer breaking changes and a ChangeLog.


Move SAS-related functionality to the sas package

SAS functionality has been moved out of internal/exported to the sas
package.  All type aliases to the former types have been removed.
Removed "SAS" prefix from funcs and types in the sas package.
URL parsing has been moved out of internal/exported to the blob package.

[ ] The purpose of this PR is explained in this or a referenced issue.
[ ] The PR does not update generated files.

These files are managed by the codegen framework at Azure/autorest.go.

[ ] Tests are included and/or updated for code changes.
[ ] Updates to CHANGELOG.md are included.
[ ] MIT license headers are included in each file.

@JeffreyRichter I couldn't find the free-standing func for creating a SAS URL in track 1.5.  Do you know where it is?

@JeffreyRichter I couldn't find the free-standing func for creating a SAS URL in track 1.5. Do you know where it is?

It's a method on this struct: https://github.com/Azure/azure-storage-blob-go/blob/a95cc9323b2c1273a3e088be4a520d4a95a40dd8/azblob/sas_service.go#L12
Method: https://github.com/Azure/azure-storage-blob-go/blob/a95cc9323b2c1273a3e088be4a520d4a95a40dd8/azblob/sas_service.go#L45


Enable localization support for File Picker

Moved from https://github.com/OfficeDev/office-ui-fabric-react/issues/5029 as we have the other picker related issues here.
@samyaktelsang commented on May 29

In lieu of an effort to improve globalization/localization of the products that we build, 0365 and SharePoint enable us to localize our files and custom fields.

However, while using a FilePicker class, there isn't an option to provide the button's display name. It resorts to a default text such as "Choose File" in Chrome or "Upload" on Edge.
I find that this makes it hard for developers to localize text based on the users AAD context or O365 language preference settings.
If we were allowed to set the button's display name/text ourselves, then it would enable us to localize the strings in a definition file as we have standardized across our project.
Are there any plans of ensuring we can select the text that shows up on the button while using a FilePicker component ourselves? If not, could we please ensure that we can in an effort to improve globalization/localization of the products/solutions that we build.
We're tracking this issue and hope to support it soon.

Thank you @KevinTCoughlin . Appreciate you incorporating this feature request into your backlog.

As part of a repository clean up effort we are closing older issues. If this issue remains, please: open a new issue, reference this issue, and provide any additional details that may help in resolution. Thank you for your understanding as we work to improve our responsiveness.


How can i render the env when training?

How can i render the env when training?

How can i render the env when testing, better to save as a gift?

Hi @Wendyuf,
There is a notebook in the examples folder where you can see how to animate an environment given a list of states. You can then save the animation as a GIF for instance.
Please let me know if you have any questions regarding this.
https://github.com/instadeepai/jumanji/blob/main/examples/load_checkpoints.ipynb

Hi @Wendyuf, There is a notebook in the examples folder where you can see how to animate an environment given a list of states. You can then save the animation as a GIF for instance. Please let me know if you have any questions regarding this. https://github.com/instadeepai/jumanji/blob/main/examples/load_checkpoints.ipynb

Thank you, it helps

Great! In this case, I will close the issue. But please reopen if you have questions.


stress test golden optimization

We need a good real-life test case or two.

I've tagged things as TO OPTIMIZE

see #45


jquery.sap.(ends|starts)WithIgnoreCase replacement API wrong in documentation

OpenUI5 version: 1.63
Browser/version (+device/version): N/A
Any other tested browsers/devices(OK/FAIL): N/A
URL (minimal example if possible):  https://sapui5.hana.ondemand.com/1.63.0/#/topic/a075ed88ef324261bca41813a6ac4a1c
User/password (if required and possible - do not post any confidential information here): N/A
Steps to reproduce the problem:

Go to provided documentation URL:  https://sapui5.hana.ondemand.com/1.63.0/#/topic/a075ed88ef324261bca41813a6ac4a1c
If the URL does not work, it is under the Essentials->Modules and Dependencies->Adapting to the Modularization of the Core->Legacy jQuery.sap Replacement category.
Search for replacement API for jQuery.sap.endsWithIgnoreCase or jQuery.sap.startsWithIgnoreCase
See that it's wrong.

What is the expected result?
I expect the replacement API to be something like:
sMyString.toLowerCase().endsWith(sMyOtherString.toLowerCase())
What happens instead?
The replacement is shown as (missing the first toLowerCase()):
sMyString.endsWith(sMyOtherString.toLowerCase())
Any other information? (attach screenshot if possible)

Hi @jbragiel,
thank you for the bug report. I created an internal incident with number<PHONE_NUMBER> to track the progress of the fix for this issue.
Best regards,
Jiawei

Hello,
I am closing the issue as it is fixed.
Best regards,
Tereza


Vue Devtools displays component name <Anonymous Component>

All component transformed without name
May I know what could be the cause?

ah it's production mode 😓
.env
NODE_ENV=production


use roll std from locationd

@adeebshihadeh Looks like proc replay is passing here when it should fail? Comparison with nan always passes?

@adeebshihadeh Looks like proc replay is passing here when it should fail? Comparison with nan always passes?

Fixed in 9941c99f7c1d807acd440f29b4de3493b6e11e50


[SPARK-35958][CORE] Refactor SparkError.scala to SparkThrowable.java

What changes were proposed in this pull request?
Refactors the base Throwable trait SparkError.scala (introduced in SPARK-34920) an interface SparkThrowable.java.
Why are the changes needed?

Renaming SparkError to SparkThrowable better reflect sthat this is the base interface for both Exception and Error
Migrating to Java maximizes its extensibility

Does this PR introduce any user-facing change?
Yes; the base trait has been renamed and the accessor methods have changed (eg. sqlState -> getSqlState()).
How was this patch tested?
Unit tests.

Test build #140478 has started for PR 33164 at commit ef5db1e.

Test build #140478 has finished for PR 33164 at commit ef5db1e.

This patch fails RAT tests.
This patch merges cleanly.
This patch adds no public classes.

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/140478/

Kubernetes integration test unable to build dist.
exiting with code: 1
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/44990/

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/44990/

Test build #140482 has started for PR 33164 at commit ec89069.

Kubernetes integration test starting
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/44994/

Kubernetes integration test status success
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/44994/

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/44994/

Test build #140482 has finished for PR 33164 at commit ec89069.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds the following public classes (experimental):
      throw new IllegalArgumentException(s\"Cannot find error class '$errorClass'\"))

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/140482/

Test build #140533 has started for PR 33164 at commit ec111f4.

Kubernetes integration test unable to build dist.
exiting with code: 1
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/45046/

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/45046/

Test build #140533 has finished for PR 33164 at commit ec111f4.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/140533/

Test build #140539 has started for PR 33164 at commit 5db91e5.

Kubernetes integration test starting
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/45052/

Kubernetes integration test status success
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/45052/

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/45052/

Test build #140539 has finished for PR 33164 at commit 5db91e5.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/140539/

Test build #140715 has started for PR 33164 at commit f359e48.

Kubernetes integration test starting
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/45226/

Kubernetes integration test status success
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/45226/

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/45226/

Test build #140715 has finished for PR 33164 at commit f359e48.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/140715/

Test build #140729 has started for PR 33164 at commit d6f93b7.

Kubernetes integration test starting
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/45239/

Kubernetes integration test status success
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/45239/

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/45239/

Test build #140729 has finished for PR 33164 at commit d6f93b7.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/140729/

Test build #140761 has started for PR 33164 at commit c2f0b86.

Kubernetes integration test starting
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/45272/

Kubernetes integration test starting
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/45273/

Test build #140762 has started for PR 33164 at commit 048adf6.

Kubernetes integration test status success
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/45272/

Kubernetes integration test status success
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/45273/

Kubernetes integration test starting
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/45274/

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/45272/

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/45273/

Test build #140761 has finished for PR 33164 at commit c2f0b86.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/140761/

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/45274/

Test build #140762 has finished for PR 33164 at commit 048adf6.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/140762/

Looks good to me 2. the test failures in yarn cluster look unrelated.

thanks, merging to master/3.2!


Add documentation for ServiceMonitor.exe

In the base IIS image, we use ServiceMonitor.exe to monitor the we3svc service. We need to document this.

cc @pan-wang

@shirhatti The ServiceMonitor.exe seems like a better solution than the Wait-Service.ps1 script from https://github.com/Microsoft/Virtualization-Documentation/tree/master/windows-server-container-tools/Wait-Service. Right?
Is there any source code on GitHub available for the tool?
Can others use it to monitor another Windows Service in their Docker images?

@StefanScherer Currently you can ServiceMonitor.exe to monitor other WIndows Service in your Docker images, however that is not a scenario we have extensively tested.
We are very strongly leaning towards releasing the source for ServiceMonitor on GitHub, but I don't have any concrete dates to share just yet. And yes, the IIS team intends for it to be a better solution than Wait-Service.ps1 😄

@shirhatti Thank you!

 Add docs for ServiceMonitor.exe

@shirhatti any update on making the source for ServiceMonitor available? It would be great to standardise on one tool for this, and if it had its own repo we could extend it (e.g. adding a web server to the ServiceMonitor so we could check service status from outside the container).

@sixeyed Nothing yet, but hang tight. I promise it's on the way.

@shirhatti Any update?

See https://github.com/Microsoft/IIS.ServiceMonitor


How to use with remix

I am having hardtime getting this to work without hardcoding API Token. I understand that this should be use inside app/root.tsx, but given the fact of how remix works, unless you hardcode the token, there's nothing that listed here helps with fetching the token from an .env file. Is there any other places to init the storyblok beside app/root.tsx

Expected Behavior
this should be able to be somewhere than the root, right?
storyblokInit({
  accessToken: 'token',
  use: [apiPlugin],
  components: {},
});

Current Behavior
The only place that storyblokInit() could be used in app/root.tsx
Steps to Reproduce

Install remix npx create-remix@latest
Install storyblok/react package
Add storyblokInit() to root.tsx

//app/root.tsx
...
import { apiPlugin, storyblokInit } from '@storyblok/react';
import { ComponentList } from './components/ComponentList';

storyblokInit({
  accessToken: process.env.STORYBLOK_TOKEN,
  use: [apiPlugin],
  components: ComponentList,
});
...
//The rest of the root file
const MainStyles = ( {children} :{children: ReactNode}) => {
  return (
    <html lang="en" className="h-full">
      <head>
        <Meta />
        <Links />
      </head>
      <body className="h-full">
        {children}
        <ScrollRestoration />
        <Scripts />
        <LiveReload />
      </body>
    </html>
  );
};

export default function App() {
  return (
    <MainStyles>
      <Navigation />
      <Outlet />
      <Footer />
    </MainStyles>
  );
}

Make a .env file with STORYBLOK_TOKEN
Run the project with npm i and npm run dev. Go to localhost:3000, open browser console and see process is not defined

Hi @anakinsolo thanks for sharing your thoughts.
If you want to use an env variable, you can follow this approach:
https://remix.run/docs/en/1.14.0/guides/envvars#browser-environment-variables
About using storyblokInit in a different location, the idea is that function is executed only once for the whole app. That's why we call that function on the root.jsx file

Hi @anakinsolo thanks for sharing your thoughts.
If you want to use an env variable, you can follow this approach: https://remix.run/docs/en/1.14.0/guides/envvars#browser-environment-variables
About using storyblokInit in a different location, the idea is that function is executed only once for the whole app. That's why we call that function on the root.jsx file

Hi, thank you for the info. I actually did try the solutions in that link prior to asking in here, none of them worked.

Hi @anakinsolo!
I did a test on this repository and it's working correctly for me. Can you check if this approach works for you?
https://github.com/fgiuliani/remix-smashing-workshop

Hi @anakinsolo! I did a test on this repository and it's working correctly for me. Can you check if this approach works for you? https://github.com/fgiuliani/remix-smashing-workshop

Hi @fgiuliani , thank you for your help. It doesn't work

I changed your token to my token. It's the same error. Yesterday I had to move both the storyblokInit() and the getStoryblokAPI() to the loader and it worked. But that means I can only use it for getting data from the API, and not other rendering features of the module.

Hi @anakinsolo. Maybe some debugging is needed, as the error doesn't look related to the code of the repository I shared (there is no loader involved on the root file). And, in the example I shared, it's working correctly 🤔

Hi @anakinsolo. Maybe some debugging is needed, as the error doesn't look related to the code of the repository I shared (there is no loader involved on the root file). And, in the example I shared, it's working correctly 🤔

Hi @fgiuliani, in that repo, the $.jsx has a loader(), which uses storyblokApi to call the get() method. And I think the actual error was thrown here
export const useStoryblokApi = (): StoryblokClient => {
  if (!storyblokApiInstance) {
    console.error(
      "You can't use getStoryblokApi if you're not loading apiPlugin."
    );
  }

  return storyblokApiInstance;
};

For why if (!storyblokApiInstance) is true, I think it fails here
export const storyblokInit = (pluginOptions: SbReactSDKOptions = {}) => {
  const { storyblokApi } = sbInit(pluginOptions);
  storyblokApiInstance = storyblokApi;

  componentsMap = pluginOptions.components;
};

which was call in the root.jsx
storyblokInit({
  accessToken: process.env.STORYBLOK_API_TOKEN,
  use: [apiPlugin],
  components,
});

But here, the process.env.STORYBLOK_API_TOKEN fails to return any token

It's pretty strange, as it's working correctly for me 🤔
Maybe a silly question, but did you rename .env.example to .env?

It's pretty strange, as it's working correctly for me thinking Maybe a silly question, but did you rename .env.example to .env?

@fgiuliani , yeah, I am absolutely sure that I did

It's pretty strange, as it's working correctly for me thinking Maybe a silly question, but did you rename .env.example to .env?

Hi @fgiuliani , let's say it works in your test. But I noticed that you do not have a server.js file. And in my repo, I have one https://github.com/anakinsolo/storyblok-demo/tree/test-single-page, which is for usage in vercel. Do you think that could be the reason why I had the process not defined in the first place?

Hi @anakinsolo. Did you try running the repository I shared with you without changing anything? Is it working?
I don't have a server.js because I didn't deploy this project, I'm running it locally only. Not sure if that's causing the issue 🤔
One difference I see between your project and the one I shared is that you are calling the storyblokInit function inside a loader:
https://github.com/anakinsolo/storyblok-demo/blob/test-single-page/app/root.tsx#L22
When in my project, it's not:
https://github.com/fgiuliani/remix-smashing-workshop/blob/main/app/root.jsx#L25

Hi @anakinsolo. Did you try running the repository I shared with you without changing anything? Is it working?
I don't have a server.js because I didn't deploy this project, I'm running it locally only. Not sure if that's causing the issue 🤔
One difference I see between your project and the one I shared is that you are calling the storyblokInit function inside a loader: https://github.com/anakinsolo/storyblok-demo/blob/test-single-page/app/root.tsx#L22
When in my project, it's not: https://github.com/fgiuliani/remix-smashing-workshop/blob/main/app/root.jsx#L25

Hi, I tried again your solution, cloned the repo to another computer and it shows on the browser now. But I do not thing that it works correctly, as it has this error in the browser console
Uncaught ReferenceError: process is not defined
    at root.jsx:26:16

That error prevents me from using for example useEffect() hook
That's why I had to try to use the function inside the loader()

@anakinsolo that's interesting. Because if the approach doesn't work at all and the process is not defined "always", the content shouldn't be displayed. But the connection to the Storyblok space is happening and the content is being retrieved. Maybe the statement is running more than once? Something to investigate related to Remix way of working? 🤔

@fgiuliani yes, I was thinking it's something Remix related. Basically, it might be something related to the way Remix bundle their JS into server and client files. But since I am pretty new and I do not know how it works under the hood, I just ask around for help.
But unfortunately, most of the time it's either there are people who use Remix but do not use Storyblok or vice versa

@anakinsolo I have created a starter Remix Storyblok Tailwind that you can find here https://github.com/alexadark/storyblok-remix-tailwind-starter Then env vars are working and you can see all the implementation in the root.jsx file These are the important parts Check if we are on the server or client
const isServer = typeof window === "undefined";

//We need to check if we are on the server or client to get the correct env variable
const accessToken = isServer
  ? process.env.STORYBLOK_PREVIEW_TOKEN
  : window.env.STORYBLOK_PREVIEW_TOKEN;

Pass the token to storyblok init
storyblokInit({
  accessToken,
  use: [apiPlugin],
  components,
});

Return ENV for the client from the root loader
export const loader = async () => {
  return json({
    env: {
      STORYBLOK_PREVIEW_TOKEN: process.env.STORYBLOK_PREVIEW_TOKEN,
    },
  });
};

Put ENV on window - This is how we hand off the values from the server to the client. Make sure to put this before
<script
          dangerouslySetInnerHTML={{
            __html: `window.env = ${JSON.stringify(env)}`,
          }}
        />
        ```
 That's it and all should work!
 Hope it helps!

Hi,
Thank you for reply. This is interesting to see. Is there any case where the accessToken is called from server?

I remember that @anakinsolo was trying out with TypeScript approach.
If you get ReferenceError: env is not defined, you can find the solution to this issue.
Here's the TypeScript version of the super minimum starter with Storyblok & Remix if you want to fork and try the TS version.

@anakinsolo Storyblok Content Deliver API is related to the accessToken (i.e. preview API key token), and it is for interacting securely with our API from a client-side web application.
So, I would say usually called from client-side.
FYI, technically, const accessToken = process.env.STORYBLOK_API_TOKEN; loads content, but it disables the real-time editing feature from what I tested.
const accessToken = process.env.STORYBLOK_API_TOKEN;

storyblokInit({
  accessToken,
  use: [apiPlugin],
  components,
});

export const loader = async () => {
  return json({
    env: {
      STORYBLOK_API_TOKEN: process.env.STORYBLOK_API_TOKEN,
    },
  });
};

const accessToken = window.env.STORYBLOK_API_TOKEN; returns ReferenceError for window.

@alexadark @schabibi1 Hi, thanks for helping both of you. I can get it to work and have the preview showing in storyblok now. There is still small issue though. Because of typescript, I think.

@anakinsolo How does it change if you add app/types/index.d.ts file in this directory with the code below?
/* eslint-disable no-var */

declare global {
  var env: any;
  var STORYBLOK_API_TOKEN: string;
}

export { };

@anakinsolo How does it change if you add app/types/index.d.ts file in this directory with the code below?
/* eslint-disable no-var */

declare global {
  var env: any;
  var STORYBLOK_API_TOKEN: string;
}

export { };

ah yea, thanks for the comment. I did the exact same thing a couple of days after I posted the previous question


nominatim search functionality

Offer the possibility to browse the map by nominatim (name of places).

Can you elaborate? I don't understand your need.

When you create a theme, you can choose nominatim or photon.
.
So user will use what you choose for search (Ctrl+F)

Yep.
Actually I had'nt seen that the functionality was already there.

Sorry for the inconvenience :)


Single command syntax

I would love to address the problem, that there is no way right now to create a single command executable. The easiest way for doing this IMO is to define DefaultCommand which will be called if there is nothing else in the Registry.
But I'd love to suggest another approach. Let's think of the reasoning for using dry-cli. I believe that the developer is looking for some  gem to him drop-in syntax just to make a single command to do exactly one thing without many options.
And I really like the way how Sinatra does it.
Examples
hellonamer
# /usr/bin/env ruby
require 'dry/cli'

argument :name, required: true, desc: "The name of the person to greet"
argument :age, desc: "The age of the person to greet"

run do |name:, age:|
  result = "Hello, #{name}."
  result = "#{result} You are #{age} years old." unless age.nil?

  puts result
end

And then just run
$ chmod +x hellonamer
$ ./hellonamer Homer

If that is not enough, you are still free to use all the features with a registry, subcommands and sub-subcommands, running Dry::CLI::Base instance
require "dry/cli/base"
module Commands
  extend Dry::CLI::Registry

  class Hello < Dry::CLI::Command
    def call(*)
    end
  end
end

Commands.register "hi", Commands::Hello
Dry::CLI::Base.new(Foo::CLI::Commands).call

WDYT?

This is a good idea. Two things though:

We could have require "dry/cli/global" to make it clearer that you require DSL that affects global namespace
Dry::CLI::Base => Dry::CLI::Core because that's the naming convention we have in many places


Update for open-source GenX and bug fixes

Outputs should now be compatible with the open-source version of GenX. Many bug fixes, updated example systems, etc.

Codecov Report

Merging #147 (c939e05) into master (c7a39c6) will increase coverage by 6.55%.
The diff coverage is 19.55%.

:exclamation: Current head c939e05 differs from pull request most recent head 8114b1c. Consider uploading reports for the commit 8114b1c to get more accurate results

@@            Coverage Diff             @@
##           master     #147      +/-   ##
==========================================
+ Coverage   12.29%   18.83%   +6.55%
==========================================
  Files          18       18
  Lines        2743     3101     +358
==========================================
+ Hits          337      584     +247
- Misses       2406     2517     +111

Impacted Files
Coverage Δ

powergenome/GenX.py
0.00% <0.00%> (ø)

powergenome/extract_pudl_data.py
0.00% <0.00%> (ø)

powergenome/fuels.py
0.00% <0.00%> (ø)

powergenome/resource_clusters.py
13.43% <0.00%> (-0.16%)
:arrow_down:

...owergenome/run_powergenome_multiple_outputs_cli.py
0.00% <0.00%> (ø)

powergenome/time_reduction.py
0.00% <0.00%> (ø)

powergenome/nrelatb.py
6.48% <7.25%> (-0.11%)
:arrow_down:

powergenome/external_data.py
13.85% <15.00%> (-1.54%)
:arrow_down:

powergenome/price_adjustment.py
25.00% <23.81%> (-11.36%)
:arrow_down:

powergenome/util.py
38.66% <28.57%> (+10.27%)
:arrow_up:

... and 12 more

Continue to review full report at Codecov.

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


poule: add rebuild/* to rebuild all at once

Add a rebuild/* label to trigger rebuilds of all known configurations for a given pull request.
Signed-off-by: Arnaud Porterie (icecrime<EMAIL_ADDRESS>

LGTM
in the future, do we want to enable real globbing ? rebuild/win* to rebuild win2lin and WindowsRS1 ?

@vieux We would need to extend the rebuild operation in poule, but that could be useful indeed. In general, some amount of templating would be good to avoid the many repetitions in the configuration today


make existing gpio_pin_configure_dt() to configure interrupt  seamlessly from DT info, if interrupt related config found

Is your enhancement proposal related to a problem? Please describe.
Not a problem, but rather an enhancement/suggestion
Describe the solution you'd like
I think it is doable and nice to have that the existing gpio_pin_configure_dt()  configures interrupt.
as long the DT_FLAGS are agreeing and bits are not unique to their sole function
This will allow such possibility in device tree definition :
  gpios = <&gpioe 7 (GPIO_ACTIVE_HIGH | GPIO_INT_EDGE_BOTH)>

Describe alternatives you've considered
current way of doing is explicitly running gpio_pin_interrupt_configure_dt()  upon gpio_pin_configure_dt() and passing the level information from source code
Additional context
A checking can take place in gpio_pin_configure_dt() on DT_FLAG , if interrupt level flag is found this API could help to configure interrupts. I felt this would allow the user to config edge level without touching the source code.

The GPIO interrupt flags such as GPIO_INT_EDGE_BOTH are not DT flags but rather flags set up by the driver. While this may seem like an odd limitation, configuring the interrupt flags is really a driver task and should not be done in the hardware description (DTS). It is the driver registering for GPIO interrupts that knows how the nature of the device generating those interrupts.


Created and updated docs for 1.25-14

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

/lgtm


Issue Loading StateIO Data

I am trying to load StateIO Data copying the instructions in the Staterior readme. When I type the code: OneRegionDomesticUse_2012 <- loadStateIODataFile("State_Summary_DomesticUse_2012"), I am met with the error message "Please confirm State_Summary_DomesticUse_2012 is correctly spelled. You should be able to find the correctly spelled file on https://edap-ord-data-commons.s3.amazonaws.com/index.html?prefix=stateio/. If it's not found there, please open an issue at https://github.com/USEPA/stateior/issues/new and inform package maintainers."
I am hoping to access the most recent IO data for the state of California. Any assistance would be greatly appreciated
Sincerely,
Alaitz Aritza<EMAIL_ADDRESS>

Hi the version you are using is slightly outdated - the data have been migrated in the most recent versions. I have updated the installation instructions (#38)
Please install using the following to get the most up to date version of the package.
install.packages("devtools")
devtools::install_github("USEPA/stateior")
library(stateior)

Excel versions of the 2020 state EEIO models are available here: https://catalog.data.gov/dataset/useeio-state-models-v1-0-for-2020
The report will be published shortly.
At this time the state models are not yet available on the API but we plan to add them.

I downloaded the excel sheet for the state of California but it is not
clear to me how I can find the information I am after, e.g. total ghg
emissions from consumption in California, or total freshwater withdrawals
associated with consumption and production in california respectively.
Could you please point me to where I can find this information?
Thank you,
Alaitz
On Thu, Feb 8, 2024 at 2:26 PM Ben Young (ERG) @.***>
wrote:

Excel versions of the 2020 state EEIO models are available here:
https://catalog.data.gov/dataset/useeio-state-models-v1-0-for-2020
The report will be published shortly.
At this time the state models are not yet available on the API but we plan
to add them.
—
Reply to this email directly, view it on GitHub
https://github.com/USEPA/stateior/issues/35#issuecomment-1934122664, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/BF6CM42G64JT4W7OYKNYJKTYSTHAHAVCNFSM6AAAAABC3XJNV2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSMZUGEZDENRWGQ
.
You are receiving this because you authored the thread.Message ID:
@.***>

--
See my recent works at: https://sites.google.com/view/alaitzaritza

I downloaded the excel sheet for the state of California but it is not clear to me how I can find the information I am after, e.g. total ghg emissions from consumption in California, or total freshwater withdrawals associated with consumption and production in california respectively. Could you please point me to where I can find this information? Thank you, Alaitz

Thank you for your interest. What you're asking for are calculation results and not found directly in the data. This is more appropriate as a discussion topic in useeior which is the tool immediately producing the State EEIO models or by contacting our team at<EMAIL_ADDRESS>


Emscripten Package Issue

I was following the instructions' on @wolfv 's great post and hit the following issue:
pixi run build-emscripten-wasm32-pkg  ./recipes/recipes_emscripten/qhull
# Cannot solve the request because of: No candidates were found for emscripten_emscripten-wasm32 3.1.45.*.

Looks like theres a pixi init that is needed.

Confirming that once pixi init is done, I can build ( or at least the build is in progress )

Same error.
Also cannot build the example package, regex

# https://emscripten-forge.org/development/local_builds/
# this only needs to be done once
pixi run setup

# this builds the package
pixi run build-emscripten-wasm32-pkg recipes/recipes_emscripten/regex

looks like the emscripten version is newer than the output.  Seems that updating this version in the conda_build_config.yaml yields progress.  Updating that allows the builds to proceed.
c_compiler_version:
  - if: emscripten
    then:
      - 3.1.58    // <---- was 3.1.45

Aaaaand built! Great!

Looks like emscripten is in the processs of being upgraded. Just bad timing on my part.

@zachcp actually the update to emscripten 3.1.58 should not yet be visible to users.
There was a tiny problem that the local builds of the compiler package where already using 3.1.58 (the version in the recipe was already the new one, I change the version in the recipe back to 3.1.45, now local builds should work as expected)

@wolfv we could prevent these issues by also uploading the compiler packages for osx-arm64.

Yes, it should be quite straightforward to build them in CI (especially since Github actions has the osx-arm64 runners these days).

Yes, it should be quite straightforward to build them in CI (especially since Github actions has the osx-arm64 runners these days)

we should run this workflow also for mac https://github.com/emscripten-forge/recipes/blob/main/.github/workflows/build_recipes.yaml but only build the packages from the 'recipes/recipes' dir (and not 'recipes/recipes_emscrtipten' dir)
and then only upload the packages if they are for osx-arm64 (there are also noarch pkgs in recipes/recipess)


Create a good documentation of this project, which can give access to more people to use the chat via Whatsapp.

i have done it but not accepted the request to merge yet

i have done it but not accepted the request to merge yet

can you share here?

Sure one sec,
WhatsappGPT
Chat with GPT from whatsapp or make it autoreply for your specific contacts

Setup
git clone https://github.com/danielgross/whatsapp-gpt.git

Once you have clone cd whatsapp-gpt and now we have to make sure there is GO and Python.

Install Go you can find the guide below

Next Python Requirements
pip install flask

Next Playwright
pip install playwright

After installation of playwright
playwright install

Now you are good to go 😋

How to run

Run the main.go first
go run main.go

Run server now
python3 server.py

note: Make sure to scan the QR code that is created or else the whole things is joke 🤡
Go Installation - (Linux)
note: always check for the latest versions, the version numbers shown here will fall out of date quickly.
Installing Go on Ubuntu:
Step 1. Grab yourself a binary release from here: https://golang.org/dl/
You'll want to use one from the Stable versions, you probably want one which is in bold, for Ubuntu it's xxx-linux-amd64.tar.gz
wget https://storage.googleapis.com/golang/go1.4.linux-amd64.tar.gz;

Step 2. Install
sudo tar -C /usr/local -xzf go1.4.linux-amd64.tar.gz;

Step 3. Decide where your packages will live
unless your name is also peter you might want to change that bit!
mkdir /home/peter/.go;

Step 4. Configure Environment
On Ubuntu you can edit ~/.bashrc to set your PATH, at the bottom add:
change the path below to match the one you created in step 3!
 Run that script
Every new terminal will run the above scripts when it starts; to apply it to the current terminal window we just:
source ~/.bashrc

Step 6. Test
$ go version
go version go1.4 linux/amd64

Full install instructions can be found here: https://golang.org/doc/install

i have done it but not accepted the request to merge yet

can you share here?

Btw i liked the base code so i made a copy and made a separate repo to maintain and add few more stuffs into it like hotword, custom action and so on


[main] Upgrade to latest dependencies

Cron -knative-prow-robot
/cc knative-sandbox/channel-wg-leads
/assign knative-sandbox/channel-wg-leads
Produced by: knative-sandbox/knobots/actions/update-deps
Details:
bumping knative.dev/eventing 7e80074...9e66fc9:
  > 9e66fc9 Adding all resources for NOOP migrator (# 5694)
  > ef48133 KReference mapping experimental feature (# 5599)
  > 407f3cb Update community files (# 5739)
bumping knative.dev/control-protocol 23e55dc...1d339f4:
  > 1d339f4 upgrade to latest dependencies (# 107)
  > 86f6569 Update community files (# 108)

/lgtm
/approve


Add the rest of the CLBG scenarios?

Hello, the maintainer of the Computer Language Benchmark Game is not always able to update the numbers regularly -- he posted in their forum recently it may be a few months. Would you consider adding to this repo the benchmarks from there that you don't already have?
For example, I work on .NET, we shipped .NET 6 and I'm curious to see updated numbers for regex redux.
Also, it seems likely easier to offer submissions here, than over there.

If this is something you're interested in, perhaps I could offer some changes towards this.

Sure I'm open to adding new problems, and you are more than welcome to contribute!
Please note that programs are slightly modified before being imported. It uses file input instead of stdin (e.g. knucleotide). And output is made readable and smaller(e.g. mandelbrot) to avoid measuring overhead of unbuffered stdout

FYI, I've added c# impl of regex-redux as well as some others in https://github.com/hanabi1224/Programming-Language-Benchmarks/pull/205

That's great. regex redux was the missing one I noticed. Curious to see how we fare.
Do you have thoughts about potentially including Preview versions of platforms? Eg in Feb we should have a .NET 7 preview 1. Amongst other things it will compile regexes at build time. It might be interesting to compare side by side.

including Preview versions of platforms

There is bench_csharp_preview.yaml for dotnet 6 when it was in preview, I'd like to turn it back on for net 7 when the preview is out.


feat: Post pending screens

Asana task: [Perm config] Post pending screens to S3
This PR connects the server to the client when posting pending screens. Screens configured in the client are added/updated/deleted from the pending config after clicking "Review Screens". This work depends on local_pending.json existing in your local screens repo. You can also verify S3 logic by switching pending_screens_config_fetcher: Screenplay.PendingScreensConfig.Fetch.Local to pending_screens_config_fetcher: Screenplay.PendingScreensConfig.Fetch.S3 in dev.exs.

@hannahpurcell I added a few comments and changed some variable names to help code readability. Let me know if you need comments added anywhere specific.


 I use the sklearn interface.
No issues before b51c7be with the same code.

@ekerazha can you paste an example code that how you call sklearn interface?
And how you use categorical_feature? by indices or feature_name?

@guolinke I use indeces:
        model = lgb.LGBMRegressor(objective='regression',
                                 n_estimators=5000,
                                 learning_rate=0.05,
                                 nthread=8,
                                 max_bin=8000,
                                 num_leaves=1000,
                                 colsample_bytree=0.6)
        model.fit(X_train,
                 y_train,
                 eval_set=[(X_val, y_val)],
                 early_stopping_rounds=10,
                 categorical_feature=[1, 3, 5, 7, 9])

I double checked that categorical columns use integer values.
Everything works fine if I use the python-package interface before b51c7be, while it's broken since b51c7be.

@ekerazha , one other thing is, the index of feature is start from 0. so is it 2nd, 4th, 6th, 8th and 10th col  are categorical features ?

@guolinke It starts from 0.
0, 2, 4, 6, 8 are not categorical.
If I take the current LightGBM code and I replace the python-package content with the python-package code before b51c7be, it works fine. Commit b51c7be has broken something inside python-package.

@ekerazha OK, i finally find out why, forget to set max_bin in sklearn interface.
Thanks!


Wrong Mac OS App icon name

When icon flag is set on the command line and building for OSX (I did not test any other platform for now), the icon is copied as atom.icns while in the Info.plist the CFBundleIconFile key points to electron.icns, resulting in the wrong icon being displayed for the bundled app.
For reference, I am running electron-packager v7.4.0 (the latest to date), electron v1.2.8 and build on OSX 10.11.6.
Here is the command line I use for packaging:
electron-packager ./builds --platform=darwin --arch=x64 --icon=./builds/media/img/app.icns --prune --asar --out=/Users/[user]/Desktop/
Thanks for that very useful tool!

Hi, thanks for filing an issue. Unfortunately, I can't reproduce this. These are the steps I used:

git clone https://github.com/electron/electron-quick-start && cd electron-quick-start
npm install --save-dev electron-packager
wget https://github.com/electron-userland/electron-packager/raw/master/test/fixtures/monochrome.icns
$(npm bin)/electron-packager . --icon=monochrome.icns --out=/tmp/test-icon
To make sure that CFBundleIconFile points to electron.icns: grep -r --binary-files=without-match -A1 CFBundleIconFile /tmp/test-icon
To make sure that monochrome.icns and electron.icns are the same: md5sum monochrome.icns /tmp/test-icon/electron-quick-start-darwin-x64/electron-quick-start.app/Contents/Resources/electron.icns (the two 32 character hex strings should be the same)

Could you please provide a minimal testcase and command line that reliably reproduces this problem?

Since the original issue reporter has not responded to the request for additional information in about two weeks, I'm going to assume that they either found the answer in another manner or decided not to pursue this issue. If I'm incorrect, they can respond with answers to the questions posed, and I'll reopen.


Remove local feature branch if it's in the same state as remote

For now, if we have local and remove feature branch, than only remote will be deleted after feature finished and we need to delete a local one by ourself.
It would be more convenient if alex deleted a local branch as well. But in some cases we have in local branch something that was not on remote. So alex should delete local branch only if it's in the same state as remote.

v1.0.6


Fixed PortForwardServiceTest and Added ClusterAccessTest

Fixed PortForwardServiceTest by changing the expectation in MockServer
Added test for ClusterAccess class
#1107

ok to test

add to whiltelist

add to whitelist

Merged

@nicolaferraro thank you Nicola

Thanks @nicolaferraro


gh-pages: Master/latest updates

Redirect to latest stable by default
Display warning text if you're looking at master

@Bradamant3 updated, ptal


tensorflow (0.12.0) doesn't work with libcudart.so.8.0.44

Hi，
I'm using cuda-8.0 on centos7.3, and I install tensorflow(0.12.0)  with pip.
when I tried to import tensorflow, it report "ImportError: libcudart.so.8.0: cannot open shared object file: No such file or directory".
I'm sure libcudart.so.8.0 does exist. tensorflow-0.12.0 should works with cuda-8.0 according the docs.
# python -c 'import tensorflow'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/tensorflow/__init__.py", line 24, in <module>
    from tensorflow.python import *
  File "/usr/lib/python2.7/site-packages/tensorflow/python/__init__.py", line 60, in <module>
    raise ImportError(msg)
ImportError: Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/tensorflow/python/__init__.py", line 49, in <module>
    from tensorflow.python import pywrap_tensorflow
  File "/usr/lib/python2.7/site-packages/tensorflow/python/pywrap_tensorflow.py", line 28, in <module>
    _pywrap_tensorflow = swig_import_helper()
  File "/usr/lib/python2.7/site-packages/tensorflow/python/pywrap_tensorflow.py", line 24, in swig_import_helper
    _mod = imp.load_module('_pywrap_tensorflow', fp, pathname, description)
ImportError: libcudart.so.8.0: cannot open shared object file: No such file or directory

Error importing tensorflow.  Unless you are using bazel,
you should not try to import tensorflow from its source directory;
please exit the tensorflow source tree, and relaunch your python interpreter
from there.
# ll  /usr/local/cuda/lib64/libcudart.so*
lrwxrwxrwx. 1 root root     16 Dec 20 16:22 /usr/local/cuda/lib64/libcudart.so -> libcudart.so.8.0
lrwxrwxrwx. 1 root root     19 Dec 20 16:22 /usr/local/cuda/lib64/libcudart.so.8.0 -> libcudart.so.8.0.44
-rwxr-xr-x. 1 root root 415432 Dec 20 16:22 /usr/local/cuda/lib64/libcudart.so.8.0.44
# pip list|grep tensorflow
tensorflow (0.12.0)
tensorflow-gpu (0.12.0)

TensorFlow only has official Ubuntu support.
For CentOS, we have not tested our pip packages.
Possible issues that come to my mind, did you check your LD_LIBRARY_PATH, does it include the directory /usr/local/cuda/lib64/ ?
If not, could you try adding that folder to your LD_LIBRARY_PATH and try again?

@gunan
Thanks. it's LD_LIBRARY_PATH's problem.
Any plan official support TensorFlow on CentOS?

Not in our short term plans, but things may change.
I am glad that we were able to resolve your problem.


Fix gows

do not need to close req.Body manually. It will close by server.
use atomic.AddInt32 since it may be race condition
return error if the file can not be read.

The third change might make gows be slowly but other languages possibly handle exception. So gows have to check the error for the fair.

Thanks for this :pray: I added a comment


N16: Dotrix

#365

@kvark yes, why not

Merged manually in https://github.com/rust-gamedev/rust-gamedev.github.io/commit/1a9f94736401f4f401ace10984003f40c8798fb4 , thanks!


Description of ClaimEquals precondition incorrect

This documentation says:

Claim equals - Specifies that the actions should be performed if the specified claim exists, and its value is equal to the specified value. The check performs a case-sensitive ordinal comparison. When checking Boolean claim type, use True, or False.

However, if the claim does not exist, then the precondition is ignored and the orchestration step is executed regardless
For example, if the claim greeting does not exist, the BuildGreeting technical profile is run anyway, in contradiction to the documentation.
        <OrchestrationStep Order="4" Type="ClaimsExchange">
          <Preconditions>
            <Precondition Type="ClaimEquals" ExecuteActionsIf="false">
              <Value>greeting</Value>
              <Value>Hello There!</Value>
              <Action>SkipThisOrchestrationStep</Action>
            </Precondition>
          </Preconditions>
          <ClaimsExchanges>
            <ClaimsExchange Id="BuildGreeting-Exchange" TechnicalProfileReferenceId="BuildGreeting" />
          </ClaimsExchanges>
        </OrchestrationStep>

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

ID: a5387e5e-299b-4c41-e84a-44e98a2c02bf
Version Independent ID: 45b8bc9e-1eb2-d7ce-e990-f653e8eb4fbe
Content: UserJourneys
Content Source: articles/active-directory-b2c/userjourneys.md
Service: active-directory
Sub-service: b2c
GitHub Login: @msmimart
Microsoft Alias: mimart

@rollandjb The changes have been made in public doc and will go live soon.

Dear @rollandjb , thanks for the feedback. I'm updating the article with the relevant information. A new version will publish later today, and this GitHub issue will be closed automatically (before the doc is published). If you have any questions or need further information, please open new GitHub issue.

Thank you!


New version: AdGuard.dnsproxy version 0.72.0

Pull request has been created with WinGet Updater :rocket:
Microsoft Reviewers: Open in CodeFlow

/azp run

/azp run

Automatic Validation ended with:

Executable C:\Users\validator\AppData\Local\Microsoft\WinGet\Links\dnsproxy.exe returned exit code: 1
Executable C:\Users\Validator\AppData\Local\Microsoft\WinGet\Links\dnsproxy.exe returned exit code: 1

(Automated response - build 886.)


Investigate Terraform sync mismatch

Please investigate why we are seeing the following and what it will take to get to 0 change-count
Alert Terraform Changes
Current Terraform Plan Changes in prod env
change-count: 5

Current Terraform Plan Changes in staging env
change-count: 4

Synced staging and prod terraform code, now the issues are down to 2 in staging and 2 in prod, last 2 issues are generated from null_resource admin function app from GitHub action


fixed arm64 docker image build

fix arm64 docker image
#11138

Can you judge the arch in Makefile instead of defining it manually? This is more user-friendly.

Can you judge the arch in Makefile instead of defining it manually? This is more user-friendly.

arch is judged by docker  Multi-platform images not by me .
in Makefile , defined docker PLATFORMS , arguments like  TARGETARCH in dockerfile is available automatically inside your Dockerfile and can be leveraged by the processes running as part of your build.
`
docker: PLATFORMS =
docker: LOAD_OR_PUSH = --load
docker.push: PLATFORMS = --platform linux/amd64,linux/arm64
docker.push: LOAD_OR_PUSH = --push
.PHONY: docker docker.push
docker docker.push:
$(DOCKER_RULE)
define DOCKER_RULE
docker buildx create --use --driver docker-container --name skywalking_satellite > /dev/null 2>&1 || true
docker buildx build $(PLATFORMS) $(LOAD_OR_PUSH)
--no-cache --build-arg VERSION=$(VERSION)
-t $(HUB)/skywalking-satellite:v$(VERSION)
-f docker/Dockerfile
--provenance=false
.
docker buildx rm skywalking_satellite || true
endef
`


ruff server does not respect exclude configuration

At the moment, ruff server does not yet respect exclude configuration, either in the editor configuration or in workspace configuration. This may cause unexpected behavior when editing an excluded file.

I also see a problem with [tool.ruff.lint.per-file-ignores] not being respected.

Yeah that's not wired up yet, thanks -- filing separately here: https://github.com/astral-sh/ruff/issues/11185

I think this should now be working, since we set the filename.


feat: 🎸 fake browser support session storage

solved https://github.com/aklinker1/webext-core/discussions/45

Hello @aklinker1.
Since the session storage needs to raise the version of @types/webextension-polyfill to 0.10.5,
we also need to mock the new methods unrelated to the session storage, otherwise caused the type check to fail.
Should I do that in this PR?


Use Pin in def of OpCode.

@George-Miao What do you think of this PR? Will it look safer if we define the trait with Pin?

LGTM


target-redshift wrongly transforming single-quote to double-quote

Describe the bug
Hi,
I'm using Meltano to integrate Jira data into our Redshift datawarehouse.
Tap used for get data:

https://hub.meltano.com/extractors/tap-jira--singer-io/

I have a column from Jira's Changelogs entity that is a Json array and below you can see an example of one:
[{"field": "summary", "fieldtype": "jira", "fieldId": "summary", "from": null, "fromString": null, "to": null, "toString": "A'Test Company"}]
When I run meltano --log-level=debug run tap-jira target-redshift what is written in the table is:
[{"field": "summary", "fieldtype": "jira", "fieldId": "summary", "from": null, "fromString": null, "to": null, "toString": "A"Test Company"}] with ", instead of ', which makes my pipeline to break.
To debug the issue:

Check if was tap-jira issue: ran meltano invoke tap-jira > json.txt, which correctly wrote row "A'Test Company"

ran meltano invoke tap-jira > json.txt, which correctly wrote row "A'Test Company"

I've looked into the code repo and I found this, that might be causing the problem:
https://github.com/TicketSwap/target-redshift/blob/d1048dd1ccd3f816c7df4f0fc6a64b0031ab0859/target_redshift/sinks.py#L213
To Reproduce
Steps to reproduce the behavior:

meltano install tap-jira
meltano install target-redshift
configure both tap and target
run: meltano --log-level=debug run tap-jira target-redshift

Expected behavior
The expected behavior would be the exact same row outputed from tap, be inserted on redshift.
Desktop (please complete the following information):

OS: macOS 14.2 (23C64)
Browser: Chrome

Additional context
This is actually making my pipelines to break and I'd be really appreciated if this can be taken into account ASAP.
Thanks in advance.

@tobiascadee any interest in a PR to address this?

Once I am caught up with work I can also take a look myself


Add fix for Defcoin

pycodestyle is failing; please fix that
electrumx/lib/coins.py:3682:1: W293 blank line contains whitespace


Ability to use Captions as Markers

It would be beneficial and awesome if we can use Captions as Markers.
The tool would have 2 modes. The default would be markers. In captions mode, the tool will ignore and bypass all markers and parse captions as markers. All GIFs or Still will be exported from the starting timecode of each caption.

This option could be used:
OPTIONS:
  --Marker-Mode <markers,captions> (default: markers)

In the recent DAWFileKit refactors, it's not easy to parse captions. So this should be pretty easy to add.

@orchetect
There are numerous FCP users who uses Captions as Makers. Since you are able to add multiple "lanes" of Captions, it offer additional layers of flexibility for users.

Would we want a flag to opt-in to simply convert captions into markers? Or is it still important to have the exclusive captions or markers behavior you described earlier in the thread?

Or is it still important to have the exclusive captions OR markers (but not both) behavior you described earlier in the thread?

I think this makes the most sense.
OPTIONS:
  --Marker-Mode <markers, captions, both> (default: markers)
With Marker Data,
We can have Dropdown selection in the General Setting Panel.

Since captions can be created in multiple languages, it's possible to have more than one caption at the same timecode. In that case should we just use the first caption for that timecode?
If users are using captions as markers then they are unlikely to be using them as actual closed captions and won't be using multiple languages.

Now that I think of it, the same question could be asked about markers themselves. If we parse more than one marker for any given timecode, should just the first marker be used and any overlapping ones discarded? In that case, we'd apply the same rule for captions, since we will be essentially converting captions to markers.

I believe we have already address this issue? #9 https://github.com/TheAcharya/MarkersExtractor/issues/9#issuecomment-1367801537

In that case should we just use the first caption for that timecode?

How about this? MarkersExtractor will only look for caption track that have this "Markers" name.

MarkersExtractor will ignore another other caption track? That way, users can have Real captions for language and they can also have an additional caption track call "Markers"? They can only have 1 captions track with "Markers". Furthermore FCP does not allow users to create a captions track with the same name.

What do you think?

If we parse more than one marker for any given timecode [...]

we have already address this issue

Of course - makes sense. My brain is cooked after two weeks of refactoring and forgot about that.

MarkersExtractor will only look for caption track that have this "Markers" name.
That way, users can have Real captions for language and they can also have an additional caption track call "Markers"?

That's a good idea. However, there's no need to constrain it to an arbitrary hard-coded name like "Markers".
I would suggest default behavior when converting captions to markers is to just use all captions. After converting to markers, they will unique their IDs the same way markers already do. Then at least if the user wants that, they have it.
If the user then wants to specify a specific caption role name then we can provide a CLI flag for that:
--caption-role Markers

That's a good idea. However, there's no need to constrain it to an arbitrary hard-coded name like "Markers".
I would suggest default behavior when converting captions to markers is to just use all captions. After converting to markers, they will unique their IDs the same way markers already do. Then at least if the user wants that, they have it.

Noted! Makes sense.
Since MarkersExtractor's default behaviour always extracts markers, users would require some tiny setup before they want to use caption as markers. I can write up some recommended methods in the user guide.

If the user then wants to specify a specific caption role name then we can provide a CLI flag for that:
--caption-role Markers

We can have a field in General Settings for users to enter the name of Caption Role.

tiny setup before they want to use caption as markers

At most it would be two steps.

Opt-in to using captions.
--markers-source <markers, captions, markersAndCaptions> (default: markers)

If you want to filter converted captions, supply the optional flag. It has no effect if captions are not enabled in the first step.
--caption-role MyMarkersRoleName

I can write up some recommended methods in the user guide

Sure, always useful to help guide users.

If I understand correctly,
--caption-role would only be active or usable if captions or  markersAndCaptions in --markers-source ?

Yes exactly. --caption-role would not implicitly convert captions to markers.

Question -
For  --markers-source <markers, captions, markersAndCaptions>, would setting captions or markersAndCaptions have any impart or conflict with --id-naming-mode?
Also in both captions or markersAndCaptions mode, if captions have identical values, there would be -number  suffix appended at the end of the name?

The first half of this is now implemented and unit tested, and will be in 0.2.7:

--markers-source <markers, captions, markersAndCaptions>

The second part still will be implemented soon:

--caption-role <role>.

I realized that since captions are treated by FCP as global to the main timeline, it's not "possible" for them to be out of bounds.

Yes, Since caption have their own dedicated "lane" in the timeline unlike markers.

Also, because captions are anchored to a clip, they actually have a Clip Type (Asset, Sync, Compound, Multicam, Title, etc.) just like markers do.

https://support.apple.com/guide/final-cut-pro/vere399dab5e/mac
Captions are always connected clips. Captions can also be connected to other connected clips.

Since captions are a new "marker" type for the manifest, they also get an icon image. I assigned the standard marker image for now, but if you want to come up with a different color for chapters we can add it.

I will design one specific for caption type by tomorrow.

Done.
Updated Marker Set.
Caption's filename is marker-caption.png.
markers.zip

Are you sure the caption marker will be visible on whatever platforms you're using it?

Are you sure the caption marker will be visible on whatever platforms you're using it?

I have made a new version.
marker-caption.png.zip
Looks better now?

New caption icon will be in 0.2.8.

Since there is overlap with the caption role filter and general marker filters, I have suggested a unified approach in #57.

Will close this for now.


about ImageUploadEditor

Photos uploaded to  another FTP server by  the site, FTP on a return path as the field value when the edited image can be accessed through a path . How to achieve this function

You need to write a custom behavior for such. See FileUploadBehavior and modify to your needs.

ok,   According to your guidance I realized I wanted the effect . thank you .But now there are new questions, Row attributes must correspond to the fields and the corresponding table, how to add additional fields in the database is not in Row

Wrong, add a field in the Row, but the table does not

See mapping guide

In serenity-guide.pdf ?
I have not found.
I will increase the field, but I want to be there Row, table no,

I'm sorry for my carelessness, I have not found The ClientSide Attribute


✨Show a dot in the close (red) button if the file has been edited

Description
Show a dot in the close (red) button if the file has been edited and not yet saved.
File has been opened but not edited:

Show normal red close button

Some edits have been made to the file:

Show red close button with a circular black dot inside it

File has been saved:

Show normal red close button, circular black dot disappears

Alternatives Considered
No response
Additional Context
Similar behavior is implemented in many apps, e.g. Sublime Text (refer to screenshots)
Screenshots

Possibly Helpful Reference:

https://stackoverflow.com/questions/1406846/how-do-you-change-the-state-of-the-window-close-button-in-cocoa

Would this be applicable if only the currently selected tab is not saved or if any open tabs at all are not saved? Alternatively, we could avoid this altogether, and only do this if in single file mode.

Difficult to say because Xcode saves a file automatically when in a project environment. But we should definitely add this to the single file mode.

@richardtop I expanded the scope of this issue to also includes tabs (see issue description).
@lukepistrol our single file mode will be slightly different...

Update: unsaved indicators in editor tabs have been merged with #1441. The window control unsaved indicator should be in soon per #1437.

Closing. Merged with #1457.


Clean up repo

For instance: is it still current: https://github.com/indiehosters/documents/blob/master/data-format.md ?

@michielbdejong ??

you can update the docs for how things work with your images. a lot of the docs can probably be moved into a 'historical/' folder or similar, to show that we're no longer updating them regularly.