Blitzortung no longer works after updating Home Assistant

Hello,
My Blitzortung no longer works after updating Home Assistant to the latest revision 2022.4.5.  I was on a revision from 2021.11.1.  All I get now is 0 in the counter and Unknown in the distance and Azimuth with lightning all around my location (within 100KM).   I reverted back to the 2021.11.1 backup; however, no luck in getting it working again.
Was there something I missed during the update?  I see other like issues on this board, but no answers on what to fix.  Can someone help me get it back working again?
Thanks,
Dave

@mrk-its
the developers from Blitzortung seem to have changed their WebSocket.

before the latest change, it's been tcp/3000 to send/receive data - now it's using plain HTTPS (443).
they changed the required initial JSON response, which the client must send to {"a":542}
they started obfuscating/encoding the data, see this example:
{"time":1649868278408932900,"latĆ33.447719ělonĆ-94.3ĕ602ěalğ:Ě"polĆĽmdsĆĥ34ěmcgĆ25Ŋ"stĞuņļěregiĬĠěsiŎ:[ĀŔaŏ155ěĂĄŇ4ŉ9őĪĞĠ7Ĳ746ūĪş:-80.521ƇĸĺĆ1183šŕtŗƌ2},ŧŕŏŲĽůą:Ĥ72ĒŒĝĻ36.Ż810ƥƀ-ƭ8.ďƎŲƊĻĈ88ƑŖŘ4Ɨƙũć75ƝăƟż31ż1ŶĻ45Ĳ3706ƐĜưĔģ8ő97ƸŇ66ƽƓŘƈǁœƚćƻƼāǈǢĳ9žĜŷ:3ǒǣ26ĐſĭƁ79ĲżĘĩ"Ĺƹ7ǤǪƾŇǩŨŏ5ħŮǰƠ6İġȆƦŏƩčǝ9Țǚ2.Ķǝ4ķȇƋ:ǮŨǦƕȏǫƭčȔŰƠĦŴ2ȨțǷȂ0ħġǎǙǿƱēƅęǗǘȈƌ4ǌǥƔ:ƖƘȌƌ1ĦȴǉĐƭŐǏŇǒĳ6ȒȋīɃƻ.ƈĤ1ɉȪ2ĔɎǧ0Ȱǃėɛǯȵ4đ5ĵǠǵĻǻƴĨĕǘɣĮƬƪŲɩŒɊćǘȭɏǀɒȐɐ0ǴƞŇİɹ5ȚǶĤģ7ĳȾǾĮƭĢƬǊȋʊƈ0Ȇʍƿɱȑ2ǇȵǆĖėɢǶĳɦȗČǮʃȀƳǟǟƨǡǷǋɮȎʐȱǣʱƟ5ƍĉɹɜǷŹĘŉŭɂĮĐĲȾǖǮʨėˆćɑǂȑɕɗĆƆȁ3ʠɼĠȣɌĨʂưƍƄȠĥǣ˃ƏŒʬˇˣćƮȨʕ:őƭĥ˖ȻġģƮĊ̆˲ƍƅ9Ǽĉ˃ɷȨ˻ɐʮɐǸɁ́ő53ČɁ̇Ƚċ˪ȡɃĦƅȹǖʉȪƲˠǨˈǃǌˍ˦̂ǑɹȊˑ̟.ƬĎŴʡȀŹɌċđ˃̮ȌȮˡ̘ǻɭɵˌŻǻ˪ˑɷģĤʓȺǚȂġɬĕ˃ďɻ̖̰˽ėǸ̵ʙȒʙʚǐƄŽɌ͍ʽƱ̎̐ďŽ͆ƨ˖̖ʏ˽ʩǘ́ĵǋĵƥʷȂȁő0˱̧ǹƢċɁʊ9̕ƒɏˢɓʋż̵ĵđ0ŵˬƠıǆ5ČɻͰ˙Žƭē͞ǆˠΓʑɕĶΗɩ΋ʼʛĢďǝ̟̀-̨˕Ĥ̬ĻƬ̯ΫȱŴ̛ȕǗˍʙȺʛƩĨƭŬθȁĲΏȸ͞Ǒπ̘˰ͽυȧǆͯʛ1ĲŐđʼưŻ.ΏĨǼ̓ƍϖ̱ƛǗΗʙčȓΜŲɦǻƮ̦˘ɞȾŴɪƹȳ͈ɏ͢ΔϷϙȵǣƜʰ͓ϟƆĶɍ˗ȀıƎʪΏͶʌΑǧρɲʁ̵Ż̟ƣ΂ƹͬĉƣθŽ̩ƨ˥ȩĻ͠Иŏϗ̐Ȇ́ȊΚʪ̆ʛ΄ˍƃƯ̧Ź6ʰǲ͞пˠͺΔƎƆ̵ʥĘʞ͓Ʃ΅ƎϹȀϟǔφ˝ȪɖЁʭϭɐɬ˖́ȟǗİ̺ŹʞƨЕАƱƇϦŲȁνƕ͸ЮƠϗďˋĆ8͐ƻωĻƆƴ̃уѨƍĢȊϡ΍Ȫ˔Ϊ͋ǔɻ́ĕǆƶ͓ǒȧƢьҀȹƪċψ˸Ľ͹}]ědeĝyĆƩ3}

in the Javascript polling file, found on the Blitzortung map (map.blitzortung.org), you can find the decode function, which successfully unshifts/converts the characters and will give back the cleartext data:
{"time":1649868278408932900,"lat":33.447719,"lon":-94.393602,"alt":0,"pol":0,"mds":4734,"mcg":254,"status":0,"region":3,"sig":[{"sta":2155,"time":4434954,"lat":37.374615,"lon":-80.52121,"alt":1183,"status":12},{"sta":2430,"time":4472404,"lat":36.748104,"lon":-108.271843,"alt":1688,"status":4},{"sta":1750,"time":4631461,"lat":45.337063,"lon":-89.485497,"alt":466,"status":12},{"sta":1888,"time":4639915,"lat":35.662678,"lon":-79.346909,"alt":176,"status":4},{"sta":2571,"time":4694339,"lat":26.688599,"lon":-82.028542,"alt":8,"status":12},{"sta":1068,"time":4779522,"lat":39.071331,"lon":-108.500633,"alt":1414,"status":2},{"sta":1177,"time":4781025,"lat":45.396576,"lon":-88.124413,"alt":289,"status":10},{"sta":2925,"time":4845607,"lat":26.219933,"lon":-81.743134,"alt":13,"status":4},{"sta":2015,"time":4945659,"lat":44.473907,"lon":-103.814636,"alt":1209,"status":4},{"sta":2520,"time":5032296,"lat":39.169868,"lon":-78.979736,"alt":331,"status":4},{"sta":1660,"time":5116456,"lat":37.90345,"lon":-78.307068,"alt":129,"status":12},{"sta":2517,"time":5279307,"lat":32.41193,"lon":-110.994766,"alt":834,"status":4},{"sta":1042,"time":5410475,"lat":33.404495,"lon":-111.596764,"alt":482,"status":2},{"sta":2351,"time":5453861,"lat":39.098309,"lon":-77.522064,"alt":108,"status":12},{"sta":1451,"time":5455676,"lat":38.818295,"lon":-77.419884,"alt":108,"status":12},{"sta":2689,"time":5742630,"lat":48.444012,"lon":-89.332893,"alt":277,"status":12},{"sta":2935,"time":5957599,"lat":40.614189,"lon":-111.962761,"alt":1365,"status":4},{"sta":1203,"time":6031604,"lat":39.795403,"lon":-75.672981,"alt":92,"status":2},{"sta":1346,"time":6084054,"lat":44.505867,"lon":-78.611008,"alt":250,"status":2},{"sta":1702,"time":6137298,"lat":43.278538,"lon":-77.345444,"alt":81,"status":12},{"sta":1951,"time":6351592,"lat":46.191055,"lon":-79.392952,"alt":245,"status":12},{"sta":1933,"time":6425089,"lat":41.325848,"lon":-74.921967,"alt":411,"status":12},{"sta":2463,"time":6596871,"lat":43.126049,"lon":-75.307953,"alt":168,"status":12},{"sta":2603,"time":6643020,"lat":41.520214,"lon":-74.180992,"alt":133,"status":12},{"sta":2933,"time":7438244,"lat":10.66424,"lon":-61.523617,"alt":7,"status":2},{"sta":1969,"time":7605095,"lat":49.751804,"lon":-77.620399,"alt":262,"status":4},{"sta":1852,"time":8149073,"lat":46.795189,"lon":-71.376358,"alt":77,"status":4},{"sta":2285,"time":8596394,"lat":37.733692,"lon":-121.943794,"alt":125,"status":4},{"sta":1270,"time":8742882,"lat":52.254162,"lon":-113.762581,"alt":903,"status":2},{"sta":2377,"time":9350184,"lat":45.427273,"lon":-122.798592,"alt":80,"status":4}],"delay":6.3}
for me this fixed my Node-Red setup. I just stumbled upon those issues by Googling and wanted to spread the word.
GL&HF!

alphachris,
Thanks for pointing this out to author mrk-its; however, I am a novice on all of this.  Can you expand upon exactly what you did in Node-Red Blitzortung Integration to fix the situation?
Thanks,
Dave

alphachris
I looked at mrk-its code and he is using MQTT to get the data. It seems to me that you are using HTTPS. For ark-its to change over is not going to be as simple you indicate. I also looked at the source on map.blitzuntorg.org and I did not see the code you reference. I don't know if Blitzuntorg has secured their MQTT requiring an id and password but reviewing their documentation they only want folks who have sensors reporting to them to have access to the data. And they don't make it easy to get sensor and join.
So I take it you are getting your information outside of Home Assistant. It would be very nice if you shared your code.

I looked at mrk-its code and he is using MQTT to get the data.
I doubt that, except my understanding of this HA plugin is wrong. I legit cannot imagine Blitzortung will provide lightning data via Mosquitto.
in the repository, find the following file: ws_client/ws_client/client.py
you can see that traditional WebSocket is being used to poll the data. MQTT is just being used to publish the data to a desired MQTT topic AFTER the data has been received by the listening WebSocket client.

My first point mentions that the WebSocket destination changed; see line 58 in client.py:
uri = "wss://ws{}.blitzortung.org:3000/".format(random.randrange(5) + 1)
should be now:
uri = "wss://ws{}.blitzortung.org/".format(random.randrange(5) + 1)

I also looked at the source on map.blitzuntorg.org and I did not see the code you reference
try to find in the file https://map.blitzortung.org/JavaScript/index.js a function called "decode"

the function looks like this:
function decode(b) {     var a, e = {},         d = b.split(""),         c = d[0],         f = c,         g = [c],         h = 256;     o = h;     for (b = 1; b < d.length; b++) a = d[b].charCodeAt(0), a = h > a ? d[b] : e[a] ? e[a] : f + c, g.push(a), c = a.charAt(0), e[o] = f + c, o++, f = a;     return g.join("") }
this should be implemented into the existing script, otherwise the data will only be received scrambled (see my first reply).
since I'm not a HomeAssistant user myself (mainly using Node-Red to implement home automation by myself) I cannot help fixing the problem. I just stumbled upon this Github issue while troubleshooting and wanted to share my findings to you guys so someone with sufficient knowledge in HA scripting can open a pull-request.

Alphachris
I think you may be able to help. Both Dave and I are ham radio operators. Dave first found out that he could obtain lightning strike distance via Blitzuntorg and node-red. I personally use it because I thought it was the only way to do it. In my node-red flow under HA I use MQTY+T to send a message to other node-red servers that a lightning strike is within 10 km.
So if you have a node-red flow that is bringing back to strike coordinate and possible boiling down the distance, I would be so grateful. I find the overhead of using HA is much more that straight Node-red. And I think, but can't speak for Dave, that he would also like to see your flow.

[{"id":"07aa18e05459f621","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"e8923d3119f9de10","type":"websocket in","z":"07aa18e05459f621","name":"","server":"","client":"bea4993f.85f4d8","x":790,"y":380,"wires":[["bb38d5607155fdac"]]},{"id":"2570533c0ddd961a","type":"websocket out","z":"07aa18e05459f621","name":"","server":"","client":"bea4993f.85f4d8","x":800,"y":320,"wires":[]},{"id":"6c3aabd78a8dbe6b","type":"inject","z":"07aa18e05459f621","name":"","props":[{"p":"payload"}],"repeat":"30","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"{\"a\":542}","payloadType":"str","x":830,"y":240,"wires":[["2570533c0ddd961a"]]},{"id":"64ce0bfa9e1942bb","type":"function","z":"07aa18e05459f621","name":"","func":"function arePointsNear(checkPoint, centerPoint) {\n    var ky = 40000 / 360;\n    var kx = Math.cos(Math.PI * centerPoint.lat / 180.0) * ky;\n    var dx = Math.abs(centerPoint.lng - checkPoint.lng) * kx;\n    var dy = Math.abs(centerPoint.lat - checkPoint.lat) * ky;\n    return Math.sqrt(dx * dx + dy * dy);\n}\n\nvar strike = { lat: msg.payload.lat, lng: msg.payload.lon };\n\n// set latitute + longitude accordingly\nvar home = { lat: 22.222222, lng: 11.111111 };\n\nvar n = arePointsNear(strike, home);\n\n// '10' = km radius, replace with whatever km radius you'd like\nif(n <= 10) {\n    // return distance to strike if strike is in defined radius\n    return {payload: n};\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":560,"wires":[[]]},{"id":"e0a0fa6ae9f41024","type":"json","z":"07aa18e05459f621","name":"convert JSON","property":"payload","action":"","pretty":false,"x":870,"y":500,"wires":[["64ce0bfa9e1942bb"]]},{"id":"bb38d5607155fdac","type":"function","z":"07aa18e05459f621","name":"","func":"function decode(b) {\n    var a, e = {},\n        d = b.split(\"\"),\n        c = d[0],\n        f = c,\n        g = [c],\n        h = 256;\n    o = h;\n    for (b = 1; b < d.length; b++) a = d[b].charCodeAt(0), a = h > a ? d[b] : e[a] ? e[a] : f + c, g.push(a), c = a.charAt(0), e[o] = f + c, o++, f = a;\n    return g.join(\"\")\n}\n\nreturn {\n    payload: decode(msg.payload)\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":440,"wires":[["e0a0fa6ae9f41024"]]},{"id":"bea4993f.85f4d8","type":"websocket-client","path":"wss://ws7.blitzortung.org/","tls":"621bc3fe.d747dc","wholemsg":"false","hb":"0","subprotocol":""},{"id":"621bc3fe.d747dc","type":"tls-config","name":"","cert":"","key":"","ca":"","certname":"","keyname":"","caname":"","servername":"","verifyservercert":false}]
this is my flow. good luck & have fun!

alphachris
Dynamite. Thank you too much. Any chance you are also a ham?

Any chance you are also a ham?

curious to find out more about it, but low on time unfortunately. So for now, no.

@alphachris,
Wow, this is great!!!!  Now I can use just a Pi-zero for my application to disconnect my antennas when lightning is near!  HA required a Pi4 to run the HA app.
Many Thanks,
Dave

well, glad it worked/helped both of you!!
In case you're curious about my use-case: I'm using near lightning strikes (<=10km radius) amongst wind and rain data from my weather station (polling via USB interface from receiver, publishing data to MQTT) to determine when to retract the electronic awning on my balcony when I'm not at home. Custom flows created in Node-RED because I wanted to avoid the overhead of installing HA. Works great.
Never actually thought about this also being useful for HAM radio amateurs, but yeah, definitely makes sense. I'm assuming you're using some kind of relay/actuator to actually "disconnect" them, right?

@alphachris
Yes, I built a unit that opens the antenna ports on my Ham Radio Equipment anytime there is lightning within 10mi or 16km and reconnects when no lightning has been around for at least 29 minutes.   Below is the link that I need to update;
https://www.thingiverse.com/thing:4634806
Thanks,
Dave

@alphachris Yes, I built a unit that opens the antenna ports on my Ham Radio Equipment anytime there is lightning within 10mi or 16km and reconnects when no lightning has been around for at least 20 minutes. Below is the link that I need to update; https://www.thingiverse.com/thing:4634806
Thanks, Dave

Thanks for sharing! Same idea, different use case though.
Cheers!

@alphachris  sorry, really a HA noob here, but if I change line 58 will the Home Assistant custom component start working.
@K5OZ it stopped working in my home assistant dashboard, but it seems the history shows count and distance on the graph
Big storm forcasted for tonight, maybe it will work, I'll try changing line 58.

@alphachris sorry, really a HA noob here, but if I change line 58 will the Home Assistant custom component start working.
@K5OZ it stopped working in my home assistant dashboard, but it seems the history shows count and distance on the graph
Big storm forcasted for tonight, maybe it will work, I'll try changing line 58.

Any luck?

I can't seem to find the ws_client on my Pi. How do you find it? I found some files in custom_components.

@alphachris

the developers from Blitzortung seem to have changed their WebSocket.

before the latest change, it's been tcp/3000 to send/receive data - now it's using plain HTTPS (443).
they changed the required initial JSON response, which the client must send to {"a":542}
they started obfuscating/encoding the data, see this example:
GL&HF!

Thanks for this really detailed explanation what happened, I'll try to make this plugin working again.

Thanks for this really detailed explanation what happened, I'll try to make this plugin working again.

Thanks so much for taking the time to look at it, it's really appreciated.

@mrk-its

Thanks for this really detailed explanation what happened, I'll try to make this plugin working again.

Any progress yet?

Most likely yes. Delete blitzing from the panel then add it back in. That should bring in the new version.
Marty
Sent from my iPhone

On May 31, 2022, at 12:10 PM, harry747400 @.***> wrote:

It's been working since the end of April.
not for me it hasn't. it still says "unavailable". did i end up with an old version?
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you commented.

Most likely yes. Delete blitzing from the panel then add it back in. That should bring in the new version.

i tried that, but it didn't help. they still say "unavailable" :-(

I can't seem to find the ws_client on my Pi. How do you find it? I found some files in custom_components.

Hello,
I'm also not able to find the ws_client directory to check the client.py file.
I've installed v1.1.0 but still not working.
Can you help me ?
Thanks

I am not familiar with the file.
Maybe you should get another SD card and start from scratch.
Marty

On Jun 3, 2022, at 6:22 AM, Simon @.***> wrote:
I can't seem to find the ws_client on my Pi. How do you find it? I found some files in custom_components.
Hello,
I'm also not able to find the ws_client directory to check the client.py file.
I've installed v1.1.0 but still not working.
Can you help me ?
Thanks
—
Reply to this email directly, view it on GitHub https://github.com/mrk-its/homeassistant-blitzortung/issues/49#issuecomment-1145865138, or unsubscribe https://github.com/notifications/unsubscribe-auth/AB2EZ2VMY244TJCNXMNOHZLVNHTIFANCNFSM5TLRX7SQ.
You are receiving this because you commented.

I am afraid I do not know where it is located. I did explore the files at one time looking to make a modification to where he gets the data. I suspect it is installed on the Pi when you add the integration.
You know I installed Blitzuntorg using HACS. I assume you are doing the same. That’s why I suggest deleting the app and adding it back in. I also assume your HA files are the current or one prior version.

On Jun 3, 2022, at 8:10 AM, Simon @.***> wrote:
I'm talking about this file: https://github.com/mrk-its/homeassistant-blitzortung/blob/master/ws_client/ws_client/client.py https://github.com/mrk-its/homeassistant-blitzortung/blob/master/ws_client/ws_client/client.py
Do you know where it is in HA ?
—
Reply to this email directly, view it on GitHub https://github.com/mrk-its/homeassistant-blitzortung/issues/49#issuecomment-1145948230, or unsubscribe https://github.com/notifications/unsubscribe-auth/AB2EZ2WPGEBFGHRNNN2WFTLVNH73JANCNFSM5TLRX7SQ.
You are receiving this because you commented.

Try this.
Go to settings and select Devices and Services. Check the service on HACS to see if Bliztotung is there. Delete Blitztortung from the integration panel. Then check the services on HACS again and see if it is gone. Reboot your device. Then go to settings and select Devices and select add and integration and add the Blitzuntorg back in and set up the entities for it.
Marty

On May 31, 2022, at 12:34 PM, harry747400 @.***> wrote:
Most likely yes. Delete blitzing from the panel then add it back in. That should bring in the new version.
i tried that, but it didn't help. they still say "unavailable" :-(
—
Reply to this email directly, view it on GitHub https://github.com/mrk-its/homeassistant-blitzortung/issues/49#issuecomment-1142420781, or unsubscribe https://github.com/notifications/unsubscribe-auth/AB2EZ2UCGCFBYWPK7NQW7O3VMZETJANCNFSM5TLRX7SQ.
You are receiving this because you commented.

Mariusz Kryński (Mrk-its);
Please look at issue #70.
Thanks,
Dave
K5oz
From: Mariusz Krynski @.>
Sent: Thursday, April 21, 2022 11:33 AM
To: mrk-its/homeassistant-blitzortung
@.>
Cc: David Hartley @.>; Mention
@.>
Subject: Re: [mrk-its/homeassistant-blitzortung] Blitzortung no longer works
after updating Home Assistant (Issue #49)
@alphachris https://github.com/alphachris
the developers from Blitzortung seem to have changed their WebSocket.

before the latest change, it's been tcp/3000 to send/receive data -
now it's using plain HTTPS (443).
they changed the required initial JSON response, which the client
must send to {"a":542}
they started obfuscating/encoding the data, see this example:
GL&HF!

Thanks for this really detailed explanation what happened, I'll try to make
this plugin working again.

Reply to this email directly,
<https://github.com/mrk-its/homeassistant-blitzortung/issues/49#issuecomment
-1105447385> view it on GitHub, or
<https://github.com/notifications/unsubscribe-auth/AFCOUQMFNTWOJLTRGYUT43TVG
F7ILANCNFSM5TLRX7SQ> unsubscribe.
You are receiving this because you were mentioned.
<https://github.com/notifications/beacon/AFCOUQJDF23H5NNDPYEZQCLVGF7ILA5CNFS
M5TLRX7S2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOIHR4TWI
.gif> Message ID: <
@.>
@.>

This is working, or at least it was

Issue 49 yes. This is a new issue. Place the socket url in your browser and it say you need to upgrade. There was a firmware update in November. So they have changed the connection requirements.MartySent from my iPhoneOn Jan 13, 2023, at 5:34 PM, avd706 @.***> wrote:
This is working, or at least it was
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you commented.Message ID: @.***>


Please add Rocky Linux 9 support details to article

Please add Rocky Linux 9 support details to Linux - Supported Operating System table.

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

ID: bd3dca2f-629d-36e9-f0f0-8c7e64cc04ab
Version Independent ID: f40ee991-6cb8-1eee-9a35-ebc5833d7c7f
Content: Azure Monitor Agent overview - Azure Monitor
Content Source: articles/azure-monitor/agents/agents-overview.md
Service: azure-monitor
Sub-service: agents
GitHub Login: @guywi-ms
Microsoft Alias: guywild

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

@kharidukranthi Rocky Linux 9 not officially supported by the Microsoft, according to the doc. But the system is extremely similar to Red Hat Enterprise Linux, and RHEL 9 is ready supported, so it should work.

@kharidukranthi We will now close this issue. If you still have questions, please reply and we will gladly continue the discussion.

I understand your point but not everyone will be aware of that. when we have rockey 9 in existence but dont mention anything about in supported OS table is a problem. I feel it would be a good idea to mention rokey9 and mention what agent is supported and what agent is not supported. Regards, Kranthi Kumar Kharidu +1-571-758-8795.
…
On Thu, Mar 30, 2023 at 1:21 AM SadiqhAhmed-MSFT @.> wrote: @kharidukranthi https://github.com/kharidukranthi Rocky Linux 9 not officially supported by the Microsoft, according to the doc. But the system is extremely similar to Red Hat Enterprise Linux, and RHEL 9 is ready supported, so it should work. — Reply to this email directly, view it on GitHub <#107369 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALPCVUA3XBATP6LHSPZ47ETW6UJ6TANCNFSM6AAAAAAWMAGJFE . You are receiving this because you were mentioned.Message ID: @.>

Appreciate your valuable feedback. As mentioned, Rocky Linux 9 is not officially supported by Microsoft. Which is why it is not listed under supported OS list. Once we announce support for rocky Linux 9, it will be documented.
Hope this clarifies!

Awesome! Thank you for the update.


[2/3] Cleanup argument parsing for some widgets + refactor of window switcher

mainly because the current thing upsets me :(
Maybe useless but I dont think it could hurt much
@Nooo37 what do you think?
sorry for the mess q-q
And I still havent done any of kasper's widgets
Basic usage
function (args)
local helpers = require(tostring(...):match(".*bling") .. ".helpers")
local options = helpers.util.retrieveArguments({
"<Module Name>"
{ "other" },
color = "#fff",
other = "aaa"
}, args)
end

So itll automatically pick up arguments from args,
and from beautiful.modulename_key
or from beautiful.modulename.key
any keys in the ignore list (the first nested table) wont be picked up from beautiful but only from the command line arguments

Reworked most of the window switcher besides moving over the argument parsing, It now:

Uses task_preview internally
Uses tasklist's widget template
Renamed a few of the mislabbled bits
Has a couple more options

Conflicts with #147

Now only app launcher is left but that's too much for me to even want to try

TODO: Documentation for all the things

Closing till I figure out what I was doing here - Future me


Recommend documentation systems for engagement w/ other institutions

Review/research various documentation systems for other institutions to be able to use to learn about PASS and how to implement for their institution.
Acceptance criteria:
Present several recommendations for documentation systems to use for the team to then discuss/decide upon
Reference:
https://github.com/eclipse-pass/main/issues/539

https://docs.google.com/presentation/d/1zb6J2hf6DfXqf9Wuu_F229OawUyYeGE0/edit?usp=drive_link&ouid=102870018102164937184&rtpof=true&sd=true

After looking at all the different systems, we need to define a set of criteria for making a selection: https://github.com/eclipse-pass/main/issues/843


Accept only limited number of protocols for URL launching

The new clickable-url detection thinks that strings like std::marker::Send are a link and can be opened with a browser. This seems like a false positive to me.
Is there some regex that can be tightened up a bit?

So std::marker should be a valid IPv6 url, but I think std::marker::Send is not, because having two :: makes their positioning unclear. I'll see if I can open a bug for the crate, though it won't fix all the false positives it should help with some.

Another alternative: safelist known protocols. Perhaps manually to start (with http/https/git/mailto/ftp), and then maybe through some xdg utils.

Looking at the regex which URxvt uses, I'd probably also recommend news://, file:// and www. as valid URL starts. The only problem with this is that www. is not a valid URL.
The complete regex can be found here:
https://github.com/exg/rxvt-unicode/blob/0767fe71f667f5be4e8967ca6ea27e2b14c19daf/src/perl/matcher#L95
Maybe using the URL crate to verify links is not necessary? I'm sure we could try going without, otherwise we'd probably have to either prepend http(s):// when the potential URL starts with www. or just ignore www.alacritty.io as a valid URL.
The more I think about this, the more I like the idea of just accepting a limited amount of protocols. I think we've already got a fairly big collection in this issue, so I doubt people would run into a lot of problems. And we could always expand that when users run into problems. I'd recommend against making these a configuration option though.

Note that I just saw that even stuff like event: is a valid URL. Which is fair, because it is. But I don't think it should ever be accepted. So before a point release, I'd like to refine the URL clicking behavior.

Using Url::parse makes it easy for us to check if a a protocol is in a vec of safelisted ones with a small change to src/term. Dropping the dependency on url to do something like if buf.starts_with('http://') || buf.starts_with('https://') || buf.starts_with('mailto://')... or something similar would work too, but once we start parsing parts / adding a regex I'd err on re-using the work done on url. Everything after that first line in the rxvt regex makes me feel :/
Its easy to add protocols, harder to remove. How about we start with a small number and be open to new contributions for more? Another benefit is that it would be low hanging fruit for new contributors to add more protocols.

http
https
mailto
news
file
git
ssh
ftp

Could we make the 'www.' matching discussion a separate issue? It feels like it opens a can of worms regarding [:word:].[:tld] matching for convenience and I'd rather be conservative for now.

@jedahan Everything you said seems sound and sane to me. I fully support taking that approach.
Adding support for www. could potentially be done with a heuristic (if starts with www => add http(s)), but since it's not actually a URL protocol, that seems better fit for a separate issue.


Xdr view page cannot decode valid transaction meta

Xdr view page cannot decode the valid transaction meta below.
XDR:
[encoded data, 6288 characters]

Ref: https://discord.com/channels/897514728459468821/1214178563587309659

What I see in laboratory:

Decoding the same xdr works fine in the soroban-cli:
$ echo -n '[encoded data, 6288 characters]' \
    | soroban lab xdr decode --type TransactionMeta --output json-formatted

Output:
{
  "v3": {
    "ext": "v0",
    "tx_changes_before": [
      {
        "state": {
          "last_modified_ledger_seq": 50642155,
          "data": {
            "account": {
              "account_id": "GAOTYOCNRJ7KRH3YDVTUYDRBRNIAYZKRIBJ3XALROUL3XBUTFW4SLGZD",
              "balance": 532141401,
              "seq_num":<PHONE_NUMBER>25766687,
              "num_sub_entries": 4,
              "inflation_dest": null,
              "flags": 0,
              "home_domain": "",
              "thresholds": "01000000",
              "signers": [],
              "ext": {
                "v1": {
                  "liabilities": {
                    "buying": 0,
                    "selling": 0
                  },
                  "ext": {
                    "v2": {
                      "num_sponsored": 0,
                      "num_sponsoring": 0,
                      "signer_sponsoring_i_ds": [],
                      "ext": {
                        "v3": {
                          "ext": "v0",
                          "seq_ledger": 50642153,
                          "seq_time":<PHONE_NUMBER>
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "ext": "v0"
        }
      },
      {
        "updated": {
          "last_modified_ledger_seq": 50642155,
          "data": {
            "account": {
              "account_id": "GAOTYOCNRJ7KRH3YDVTUYDRBRNIAYZKRIBJ3XALROUL3XBUTFW4SLGZD",
              "balance": 532141401,
              "seq_num":<PHONE_NUMBER>25766688,
              "num_sub_entries": 4,
              "inflation_dest": null,
              "flags": 0,
              "home_domain": "",
              "thresholds": "01000000",
              "signers": [],
              "ext": {
                "v1": {
                  "liabilities": {
                    "buying": 0,
                    "selling": 0
                  },
                  "ext": {
                    "v2": {
                      "num_sponsored": 0,
                      "num_sponsoring": 0,
                      "signer_sponsoring_i_ds": [],
                      "ext": {
                        "v3": {
                          "ext": "v0",
                          "seq_ledger": 50642155,
                          "seq_time":<PHONE_NUMBER>
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "ext": "v0"
        }
      }
    ],
    "operations": [],
    "tx_changes_after": [
      {
        "state": {
          "last_modified_ledger_seq": 50642155,
          "data": {
            "account": {
              "account_id": "GAOTYOCNRJ7KRH3YDVTUYDRBRNIAYZKRIBJ3XALROUL3XBUTFW4SLGZD",
              "balance": 532141401,
              "seq_num":<PHONE_NUMBER>25766688,
              "num_sub_entries": 4,
              "inflation_dest": null,
              "flags": 0,
              "home_domain": "",
              "thresholds": "01000000",
              "signers": [],
              "ext": {
                "v1": {
                  "liabilities": {
                    "buying": 0,
                    "selling": 0
                  },
                  "ext": {
                    "v2": {
                      "num_sponsored": 0,
                      "num_sponsoring": 0,
                      "signer_sponsoring_i_ds": [],
                      "ext": {
                        "v3": {
                          "ext": "v0",
                          "seq_ledger": 50642155,
                          "seq_time":<PHONE_NUMBER>
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "ext": "v0"
        }
      },
      {
        "updated": {
          "last_modified_ledger_seq": 50642155,
          "data": {
            "account": {
              "account_id": "GAOTYOCNRJ7KRH3YDVTUYDRBRNIAYZKRIBJ3XALROUL3XBUTFW4SLGZD",
              "balance": 533242897,
              "seq_num":<PHONE_NUMBER>25766688,
              "num_sub_entries": 4,
              "inflation_dest": null,
              "flags": 0,
              "home_domain": "",
              "thresholds": "01000000",
              "signers": [],
              "ext": {
                "v1": {
                  "liabilities": {
                    "buying": 0,
                    "selling": 0
                  },
                  "ext": {
                    "v2": {
                      "num_sponsored": 0,
                      "num_sponsoring": 0,
                      "signer_sponsoring_i_ds": [],
                      "ext": {
                        "v3": {
                          "ext": "v0",
                          "seq_ledger": 50642155,
                          "seq_time":<PHONE_NUMBER>
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "ext": "v0"
        }
      }
    ],
    "soroban_meta": {
      "ext": "v0",
      "events": [],
      "return_value": {
        "bool": false
      },
      "diagnostic_events": [
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "fn_call"
                  },
                  {
                    "bytes": "d982c22dcbcf2026575af17e1e1954ccc23c4bc21a5711c1409b1c4694ee962b"
                  },
                  {
                    "symbol": "add_prices"
                  }
                ],
                "data": {
                  "vec": [
                    {
                      "map": [
                        {
                          "key": {
                            "symbol": "asset"
                          },
                          "val": {
                            "vec": [
                              {
                                "symbol": "Other"
                              },
                              {
                                "symbol": "EUR"
                              }
                            ]
                          }
                        },
                        {
                          "key": {
                            "symbol": "asset_u32"
                          },
                          "val": {
                            "u32": 7
                          }
                        },
                        {
                          "key": {
                            "symbol": "price"
                          },
                          "val": {
                            "i128": {
                              "hi": 0,
                              "lo":<PHONE_NUMBER>00000000
                            }
                          }
                        },
                        {
                          "key": {
                            "symbol": "source"
                          },
                          "val": {
                            "u32": 0
                          }
                        },
                        {
                          "key": {
                            "symbol": "timestamp"
                          },
                          "val": {
                            "u64":<PHONE_NUMBER>
                          }
                        }
                      ]
                    },
                    {
                      "map": [
                        {
                          "key": {
                            "symbol": "asset"
                          },
                          "val": {
                            "vec": [
                              {
                                "symbol": "Other"
                              },
                              {
                                "symbol": "EURT"
                              }
                            ]
                          }
                        },
                        {
                          "key": {
                            "symbol": "asset_u32"
                          },
                          "val": {
                            "u32": 9
                          }
                        },
                        {
                          "key": {
                            "symbol": "price"
                          },
                          "val": {
                            "i128": {
                              "hi": 0,
                              "lo":<PHONE_NUMBER>00000000
                            }
                          }
                        },
                        {
                          "key": {
                            "symbol": "source"
                          },
                          "val": {
                            "u32": 0
                          }
                        },
                        {
                          "key": {
                            "symbol": "timestamp"
                          },
                          "val": {
                            "u64":<PHONE_NUMBER>
                          }
                        }
                      ]
                    },
                    {
                      "map": [
                        {
                          "key": {
                            "symbol": "asset"
                          },
                          "val": {
                            "vec": [
                              {
                                "symbol": "Other"
                              },
                              {
                                "symbol": "TRY"
                              }
                            ]
                          }
                        },
                        {
                          "key": {
                            "symbol": "asset_u32"
                          },
                          "val": {
                            "u32": 15
                          }
                        },
                        {
                          "key": {
                            "symbol": "price"
                          },
                          "val": {
                            "i128": {
                              "hi": 0,
                              "lo":<PHONE_NUMBER>000000000
                            }
                          }
                        },
                        {
                          "key": {
                            "symbol": "source"
                          },
                          "val": {
                            "u32": 0
                          }
                        },
                        {
                          "key": {
                            "symbol": "timestamp"
                          },
                          "val": {
                            "u64":<PHONE_NUMBER>
                          }
                        }
                      ]
                    },
                    {
                      "map": [
                        {
                          "key": {
                            "symbol": "asset"
                          },
                          "val": {
                            "vec": [
                              {
                                "symbol": "Other"
                              },
                              {
                                "symbol": "XLM"
                              }
                            ]
                          }
                        },
                        {
                          "key": {
                            "symbol": "asset_u32"
                          },
                          "val": {
                            "u32": 24
                          }
                        },
                        {
                          "key": {
                            "symbol": "price"
                          },
                          "val": {
                            "i128": {
                              "hi": 0,
                              "lo":<PHONE_NUMBER>000000000
                            }
                          }
                        },
                        {
                          "key": {
                            "symbol": "source"
                          },
                          "val": {
                            "u32": 0
                          }
                        },
                        {
                          "key": {
                            "symbol": "timestamp"
                          },
                          "val": {
                            "u64":<PHONE_NUMBER>
                          }
                        }
                      ]
                    },
                    {
                      "map": [
                        {
                          "key": {
                            "symbol": "asset"
                          },
                          "val": {
                            "vec": [
                              {
                                "symbol": "Other"
                              },
                              {
                                "symbol": "yBTC"
                              }
                            ]
                          }
                        },
                        {
                          "key": {
                            "symbol": "asset_u32"
                          },
                          "val": {
                            "u32": 28
                          }
                        },
                        {
                          "key": {
                            "symbol": "price"
                          },
                          "val": {
                            "i128": {
                              "hi": 0,
                              "lo":<PHONE_NUMBER>000
                            }
                          }
                        },
                        {
                          "key": {
                            "symbol": "source"
                          },
                          "val": {
                            "u32": 0
                          }
                        },
                        {
                          "key": {
                            "symbol": "timestamp"
                          },
                          "val": {
                            "u64":<PHONE_NUMBER>
                          }
                        }
                      ]
                    },
                    {
                      "map": [
                        {
                          "key": {
                            "symbol": "asset"
                          },
                          "val": {
                            "vec": [
                              {
                                "symbol": "Other"
                              },
                              {
                                "symbol": "BTCLN"
                              }
                            ]
                          }
                        },
                        {
                          "key": {
                            "symbol": "asset_u32"
                          },
                          "val": {
                            "u32": 4
                          }
                        },
                        {
                          "key": {
                            "symbol": "price"
                          },
                          "val": {
                            "i128": {
                              "hi": 12,
                              "lo":<PHONE_NUMBER>485410608
                            }
                          }
                        },
                        {
                          "key": {
                            "symbol": "source"
                          },
                          "val": {
                            "u32": 0
                          }
                        },
                        {
                          "key": {
                            "symbol": "timestamp"
                          },
                          "val": {
                            "u64":<PHONE_NUMBER>
                          }
                        }
                      ]
                    },
                    {
                      "map": [
                        {
                          "key": {
                            "symbol": "asset"
                          },
                          "val": {
                            "vec": [
                              {
                                "symbol": "Other"
                              },
                              {
                                "symbol": "EURC"
                              }
                            ]
                          }
                        },
                        {
                          "key": {
                            "symbol": "asset_u32"
                          },
                          "val": {
                            "u32": 8
                          }
                        },
                        {
                          "key": {
                            "symbol": "price"
                          },
                          "val": {
                            "i128": {
                              "hi": 0,
                              "lo":<PHONE_NUMBER>00000000
                            }
                          }
                        },
                        {
                          "key": {
                            "symbol": "source"
                          },
                          "val": {
                            "u32": 0
                          }
                        },
                        {
                          "key": {
                            "symbol": "timestamp"
                          },
                          "val": {
                            "u64":<PHONE_NUMBER>
                          }
                        }
                      ]
                    },
                    {
                      "map": [
                        {
                          "key": {
                            "symbol": "asset"
                          },
                          "val": {
                            "vec": [
                              {
                                "symbol": "Other"
                              },
                              {
                                "symbol": "TRYB"
                              }
                            ]
                          }
                        },
                        {
                          "key": {
                            "symbol": "asset_u32"
                          },
                          "val": {
                            "u32": 16
                          }
                        },
                        {
                          "key": {
                            "symbol": "price"
                          },
                          "val": {
                            "i128": {
                              "hi": 0,
                              "lo":<PHONE_NUMBER>000000000
                            }
                          }
                        },
                        {
                          "key": {
                            "symbol": "source"
                          },
                          "val": {
                            "u32": 0
                          }
                        },
                        {
                          "key": {
                            "symbol": "timestamp"
                          },
                          "val": {
                            "u64":<PHONE_NUMBER>
                          }
                        }
                      ]
                    },
                    {
                      "map": [
                        {
                          "key": {
                            "symbol": "asset"
                          },
                          "val": {
                            "vec": [
                              {
                                "symbol": "Other"
                              },
                              {
                                "symbol": "IDRT"
                              }
                            ]
                          }
                        },
                        {
                          "key": {
                            "symbol": "asset_u32"
                          },
                          "val": {
                            "u32": 11
                          }
                        },
                        {
                          "key": {
                            "symbol": "price"
                          },
                          "val": {
                            "i128": {
                              "hi": 125,
                              "lo":<PHONE_NUMBER>306048000
                            }
                          }
                        },
                        {
                          "key": {
                            "symbol": "source"
                          },
                          "val": {
                            "u32": 0
                          }
                        },
                        {
                          "key": {
                            "symbol": "timestamp"
                          },
                          "val": {
                            "u64":<PHONE_NUMBER>
                          }
                        }
                      ]
                    },
                    {
                      "map": [
                        {
                          "key": {
                            "symbol": "asset"
                          },
                          "val": {
                            "vec": [
                              {
                                "symbol": "Other"
                              },
                              {
                                "symbol": "TZS"
                              }
                            ]
                          }
                        },
                        {
                          "key": {
                            "symbol": "asset_u32"
                          },
                          "val": {
                            "u32": 17
                          }
                        },
                        {
                          "key": {
                            "symbol": "price"
                          },
                          "val": {
                            "i128": {
                              "hi": 20,
                              "lo":<PHONE_NUMBER>808967680
                            }
                          }
                        },
                        {
                          "key": {
                            "symbol": "source"
                          },
                          "val": {
                            "u32": 0
                          }
                        },
                        {
                          "key": {
                            "symbol": "timestamp"
                          },
                          "val": {
                            "u64":<PHONE_NUMBER>
                          }
                        }
                      ]
                    }
                  ]
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": "d982c22dcbcf2026575af17e1e1954ccc23c4bc21a5711c1409b1c4694ee962b",
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "error"
                  },
                  {
                    "error": {
                      "auth": "invalid_action"
                    }
                  }
                ],
                "data": {
                  "vec": [
                    {
                      "string": "failed account authentication with error"
                    },
                    {
                      "address": "GDKPTOMVZUNZGVSA65R7WIICFHXJR4UVFN2XPOQOQ5CLVAQWWBO6XEFF"
                    },
                    {
                      "error": {
                        "value": "unexpected_type"
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": "d982c22dcbcf2026575af17e1e1954ccc23c4bc21a5711c1409b1c4694ee962b",
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "error"
                  },
                  {
                    "error": {
                      "auth": "invalid_action"
                    }
                  }
                ],
                "data": {
                  "string": "escalating error to VM trap from failed host function call: require_auth"
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": "d982c22dcbcf2026575af17e1e1954ccc23c4bc21a5711c1409b1c4694ee962b",
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "log"
                  }
                ],
                "data": {
                  "vec": [
                    {
                      "string": "VM call trapped with HostError"
                    },
                    {
                      "symbol": "add_prices"
                    },
                    {
                      "error": {
                        "auth": "invalid_action"
                      }
                    }
                  ]
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "host_fn_failed"
                  },
                  {
                    "error": {
                      "auth": "invalid_action"
                    }
                  }
                ],
                "data": "void"
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "read_entry"
                  }
                ],
                "data": {
                  "u64": 14
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "write_entry"
                  }
                ],
                "data": {
                  "u64": 0
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "ledger_read_byte"
                  }
                ],
                "data": {
                  "u64": 15860
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "ledger_write_byte"
                  }
                ],
                "data": {
                  "u64": 0
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "read_key_byte"
                  }
                ],
                "data": {
                  "u64": 824
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "write_key_byte"
                  }
                ],
                "data": {
                  "u64": 0
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "read_data_byte"
                  }
                ],
                "data": {
                  "u64": 512
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "write_data_byte"
                  }
                ],
                "data": {
                  "u64": 0
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "read_code_byte"
                  }
                ],
                "data": {
                  "u64": 15348
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "write_code_byte"
                  }
                ],
                "data": {
                  "u64": 0
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "emit_event"
                  }
                ],
                "data": {
                  "u64": 0
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "emit_event_byte"
                  }
                ],
                "data": {
                  "u64": 0
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "cpu_insn"
                  }
                ],
                "data": {
                  "u64": 7144172
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "mem_byte"
                  }
                ],
                "data": {
                  "u64": 2060917
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "invoke_time_nsecs"
                  }
                ],
                "data": {
                  "u64": 846332
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "max_rw_key_byte"
                  }
                ],
                "data": {
                  "u64": 64
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "max_rw_data_byte"
                  }
                ],
                "data": {
                  "u64": 368
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "max_rw_code_byte"
                  }
                ],
                "data": {
                  "u64": 15348
                }
              }
            }
          }
        },
        {
          "in_successful_contract_call": false,
          "event": {
            "ext": "v0",
            "contract_id": null,
            "type_": "diagnostic",
            "body": {
              "v0": {
                "topics": [
                  {
                    "symbol": "core_metrics"
                  },
                  {
                    "symbol": "max_emit_event_byte"
                  }
                ],
                "data": {
                  "u64": 0
                }
              }
            }
          }
        }
      ]
    }
  }
}

@leighmcculloch Does this output look correct? It seems similar to soroban-cli output.

Does this output look correct?

It looks like a subset of the XDR, yup! 👏🏻


Support for Consumer lag metric

Summary
For kafka based source pipelines, it would be great if a metric like consumer lag would be supported. This would give insight to the current lag of the pipeline and give a better picture of the current state.
Use Cases
Monitoring the current state of the system.

Message from the maintainers:
If you wish to see this enhancement implemented please add a 👍 reaction to this issue! We often sort issues this way to know what to prioritize.

Aren't you able to get the consumer lag from the Kafka metrics? The consumer group and its delay should be there.


Improve notifications handling

Improved a bit the Apprise notification handling:

made curl silent so we don't see the ugly progess bar in the logs anymore
adapted the notification type parameter (depends on this PR: https://github.com/djmaze/apprise-microservice/pull/8)
refactored code to extract the notification sending in a separate function to reduce code duplication
added a log entry to indicate whether the notification was successful or not with the curl result

Can we merge it now that the other one is merged?

Hey, any updates? :)


Gestalt Levelling 2x

Description of the bug
I had a playthrough with multiple successful gestalt characters near the beginning of the year, but I can't get it to work now. I have tried from a new character now, and via respec, but no matter what, gestalt skips the target level and goes straight to the next one. For example, a lvl 1 character trying to select additional levels via the checkbox, results in that class skipping level 1 and going straight to 2. So oracles lose mystery selection, paladins skip their first smite and lay on hands, and go straight to selecting a mercy.
I have also tried leaving level 1 no gestalt, and trying at level 2. This still skips a level. I have also tried manually delevelling the gestalt via the party menu in toybox, but this only fixes it temporarily. For example, if I go Oracle 1 at level 1, then Paladin 1 at level 2, go to toybox and select Paladin as my gestalt, it lets me level up to level 2 again, as expected. Oracle levels normally, Paladin skips to level 3. So, I delevel paladin to 0 in menu, it gives me the correct level 2 feats. But now if I level to 3, paladin skips to 4 again. It seems gestalt is doubling the level in the gestalt class. I have not explicitly tested, but I assume at level 10, I would have oracle 10 and paladin 20. Or maybe it's just got some floating +1 and will always add a level to what is expected, so it skips 1 level, and if you don't fix it would progress normally after that? No idea.
Steps To Reproduce

Create or respec a character using the respec mod
Select a gestalt class via checkbox
Select you primary class by highlighting a class other than the checkboxed class
Checkboxed class skips level 1 and goes straight to level 2

Expected Behavior
No response
Log Files
No response
Save File
No response
Screenshots
No response
Settings
No response
Toybox Version
1.5.4.c
Operating System
No response
What game are you using Toybox on?
Pathfinder Wrath of the Righteous
Game Version
No response
Anything else?
No response

Well, you are a couple versions out of date, so please update your Toybox and see if the issue still persists.
If it does, we'll likely want a save file and your Toybox settings.

I actually figured out the problem! I was going crazy, so I dug into the mod manager files and found it had two versions of toybox installed (even though only one was showing up in game). So every time I tried to gestalt it seemed each version was adding a level, thus the 2x level bug. Apologies for wasting your time.


Euro Truck Simulator 2

Just tried ets2 and I can't find out how to launch game in openxr. If I add -openvr it always launches via steamvr anyway, and open composite doesn't even see the game for some reason. If I don't use -openvr on properties, game starts on monitor. I've seen ETS2 on the compability list, so this should be possible but how?

Hello, your issue is with OpenComposite not OpenXR Toolkit, you'll have to ask their developers: https://gitlab.com/znixian/OpenOVR/-/tree/openxr


GUIDELINES

Comment or Requests on GUIDELINES

Great @triaslucia !
About your comments:

It is a very good Idea and I agree. If we have from the very beginning the answer of the interviewee about his need to stay anonymous, only after that the collaborator will know that he can use a specific protocol and the related toolkit.

We talked about that with Hadi form the Syrian Archive and he recommend us to have two different protocols depending if the source (in our case activist) want to stay anonymous or not.

Yes of course can we change it. We just follow a basic interview structure, so you can fix it 👍

You are free to edit, we all can see when you change something. If you go to the file you can see the history and the changes that somebody does.

@triaslucia  GUIDELINES on line 32, seperate users into written Interview, Audio, and Video and provide specific Resources to each.


How to increase the priority of some cipher for TLSv1.3?

I try to change the priority of cipher:
openssl ciphers -s -v TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:EECDH+CHACHA20:EECDH+AESGCM | column -t

but I always receive
TLS_AES_256_GCM_SHA384         TLSv1.3  Kx=any   Au=any    Enc=AESGCM(256)             Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256   TLSv1.3  Kx=any   Au=any    Enc=CHACHA20/POLY1305(256)  Mac=AEAD
TLS_AES_128_GCM_SHA256         TLSv1.3  Kx=any   Au=any    Enc=AESGCM(128)             Mac=AEAD
ECDHE-ECDSA-CHACHA20-POLY1305  TLSv1.2  Kx=ECDH  Au=ECDSA  Enc=CHACHA20/POLY1305(256)  Mac=AEAD
ECDHE-RSA-CHACHA20-POLY1305    TLSv1.2  Kx=ECDH  Au=RSA    Enc=CHACHA20/POLY1305(256)  Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2  Kx=ECDH  Au=ECDSA  Enc=AESGCM(256)             Mac=AEAD
ECDHE-RSA-AES256-GCM-SHA384    TLSv1.2  Kx=ECDH  Au=RSA    Enc=AESGCM(256)             Mac=AEAD
ECDHE-ECDSA-AES128-GCM-SHA256  TLSv1.2  Kx=ECDH  Au=ECDSA  Enc=AESGCM(128)             Mac=AEAD
ECDHE-RSA-AES128-GCM-SHA256    TLSv1.2  Kx=ECDH  Au=RSA    Enc=AESGCM(128)             Mac=AEAD

How I can set TLS_CHACHA20_POLY1305_SHA256 on the first position?
Thank you in advance

The first thing to understand is that TLSv1.3 ciphersuite configuration is different to configuring ciphersuites for TLSv1.2 and below. See the "-ciphersuites" option on this man page:
https://www.openssl.org/docs/man1.1.1/man1/ciphers.html
The two lists of ciphersuites (TLSv1.3 ciphersuites and TLSv1.2 and below ciphersuites) are joined together internally by OpenSSL. The TLSv1.3 ciphersuites always go first. In practice this makes no difference at all because the two lists of ciphersuites are mutually exclusive. If TLSv1.3 gets negotiated a TLSv1.3 ciphersuite will always be selected. If TLSv1.2 or below get negotiated then a TLSv1.2 or below ciphersuite will always be selected.

For everyone who is reading this issue: OpenSSL 1.1 uses an independent, new interface to set ciphersuits for TLSv1.3, the old ciphersuits interfaces is only effective up to TLSv1.2, so changing it has no effect for TLSv1.3. And as currently almost no application has adopted the new interface, there is no way to change ciphersuits for TLSv1.3.
But there is a workaround: you can change the global openssl.cnf to change the default TLSv1.3 ciphersuits for OpenSSL itself, so every program in the system will use the your specified ciphersuits.
openssl_conf = default_conf

[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
Ciphersuites = TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256

After changing it, you'll see the new global default,
$ openssl ciphers -v ''
TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any      Au=any  Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_256_GCM_SHA384  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(256) Mac=AEAD
TLS_AES_128_GCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(128) Mac=AEAD

The path to global openssl.cnf is usually OPENSSLDIR, which can be obtained by...
$ openssl version -a | grep OPENSSLDIR
OPENSSLDIR: "/etc/ssl"

Hi! I'm using Fedora 29 (comes with OpenSSL 1.1.1), and I just modified /usr/share/crypto-policies/DEFAULT/opensslcnf.txt, it works perfectly for me now.

I'm glad I was able to help :smiley:

Hey, I'am using OpenSSL 1.1.1a (20 NOV 18). I modified /etc/ssl/openssl.cnf (Arch Linux), but nothing happened ...
Is it furthermore possible to change the priority or has it been disabled?
Thank you.

It is still possible to do this. What does openssl version -a | grep OPENSSLDIR report?

It is still possible to do this. What does openssl version -a | grep OPENSSLDIR report?

openssl: relocation error: openssl: symbol IDEA_options version OPENSSL_1_1_0 not defined in file libcrypto.so.1.1 with link time reference

That error seems to indicate that the version of the OpenSSL command line app you are using is linked against a different version of libcrypto than the one that it is finding at run time. Do you have two versions of OpenSSL installed? Perhaps a system provided one, and one you have compiled yourself?

Happened after a dist-upgrade from Debian stretch to buster. However my server seems to still work with both TLS1.3 and 1.2, the reason why and how I found this thread was that I wanted to disable a particular AES128 cipher, as I only want the stronger AES256 versions to be used. My intentions are to achieve this via openssl.cnf however there are 3-4 files named like this on my system:
/etc/ssl/openssl.cnf
/usr/lib/ssl/openssl.cnf
/usr/local/ssl/openssl.cnf
/usr/local/ssl/openssl.cnf.dist```

It should still be possible to configure the ciphersuites in the OpenSSL config file even if python does't support it (in theory), since the OpenSSL config file bypasses python altogether. You would need to figure out which config file is being used by your server though.

It is still possible to do this. What does openssl version -a | grep OPENSSLDIR report?

Got it.

openssl_conf = default_conf
[default_conf]
ssl_conf = ssl_sect
[ssl_sect]
........

must be at the beginning of openssl.cnf not at the end .... omg ;-)

Sorry but all the lines except Ciphersuites = ... were existing already, adding the latter did not have the desired effect at all. I still am forced to use AES128:

I edited /etc/ssl/openssl.cnf and the changed did propagate however to other conf files, so my system loaded the changes. Why is OPENSSL_1_1_1a ignoring my settings? In the manpages I also cannot find the Ciphersuites line being mentioned at all.

Your ciphersuites string is invalid. Drop the ":!AES128" text from the end. That isn't valid syntax for this setting.

Hello Matt, thanks for your help. I tried both with and without and the outcome is always that SSL Labs detects AES128 still being on. I have not found a single way since weeks to prevent that single AES128 cipher being auto-included when using TLS1.3
It is my only beef with 1.1.1a that keeps me from rolling out on more devices. Right now only with TLS1.2 I can run a pure AES256 and Chacha20 environment.
Please any ideas? I will test :(

Ah. I just noticed that you have other invalid ciphersuites in that setting. The Ciphersuites setting only accepts TLSv1.3 ciphersuites separated by ":". The two "ECDHE-ECDSA-*" ones are TLSv1.2 ciphersuites and should be removed. i.e. the whole thing should be:
openssl_conf = default_conf

[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
Ciphersuites = TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

Thank you so much Matt! All I can say now is: "Brain 'splode."
To sum up why this was really confusing:

/etc/ssl/openssl.cnf only allows me control over TLS1.3 ciphers
my python3.7 TLS socket server only gives me control over TLS1.2
had to fine-tune each cipher sets in different locations/methods for desired effect

I love the OpenSSL team and your software, but this was a wild goose chase without your help!
Success:

/etc/ssl/openssl.cnf only allows me control over TLS1.3 ciphers
my python3.7 TLS socket server only gives me control over TLS1.2

You can set TLSv1.2 ciphersuites in the OpenSSL config file, but I guess python might overwrite that with its own config settings. I suppose your python doesn't know about TLSv1.3 yet leading to this problem!
Anyway glad you got it sorted!

Note: TLSv1.2 ciphersuites are configured in the "CipherString" setting, TLSv1.3 ciphersuites in the "Ciphersuites" setting. Don't mix and match between the two!!

Just for curiosity, is this a valid setting then?
CipherString = ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305
Ciphersuites = TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

I just have a massive déjà-vu of the "Interview with an Ex-Microsoftie Who Used to Name OS Folders"

Yes this is valid. The thing is TLSv1.3 ciphersuites and TLSv1.2 ciphersuites are mutually exclusive. We did consider having them all configured as part of the "CipherString" setting anyway - but this actually causes other problems. Most importantly many existing CipherString values that would work perfectly well in OpenSSL 1.1.0 and before would inadvertently disable all TLSv1.3 ciphersuites in OpenSSL 1.1.1.

I just read the "Interview with an Ex-Microsoftie" thing. Funny! Nothing like our names of course.... ;-)

Pardon, I think one of my messages got dropped during a stealth edit of mine :)
I slowly begin to understand these config quirks and respect the teams choice of this approach. I guess this was the best possible way to break the least.
Anyway thanks again Matt! I see myself out, hope people didn't mind me flooding their inboxes with notifications of this issue being updated. Ciao ;)

Is it possible that your webserver is setting the default?

Adding this default conf line at the top of the file
# System default
openssl_conf = default_conf

Appending below conf at the bottom of the file.
[default_conf]
ssl_conf = ssl_section

[ssl_section]
system_default = system_default_section

[system_default_section]
Ciphersuites = TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256
CipherString = ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384

I used Ciphersuites to specify TLSv1.3 ciphers and CipherString to restrict other versions.


Add proposal SOAR-0008: OpenAPI document filtering

Motivation
We'd like to run a proposal for filtering the OpenAPI document for just the required parts prior to generating.
Modifications

Add SOAR-0008: OpenAPI document filtering

(See the proposal itself for details)^1
Result
n/a
Test Plan
n/a
Related Issues
#285

Thanks, @simonjbeaumont!
This proposal is now In Review, which will run until October 5 - feel free to leave your feedback either on this PR or on the corresponding Swift Forums post.

Should it be possible to exclude tags as well as include them?
I'm thinking of cases like an API where some endpoints are tagged as higher privileged, and a low-privilege client might want to exclude those endpoints.

I quite like the "!" prefix, and I agree this should all compose nicely, so folks are encouraged to propose further extensions of this feature.

Another possible option that doesn't add nesting but keeps out-of-band signaling would be:
filter:
  tags:
    - "t"
    - not: "rw"

Although I think ! is safe because tags are required to be valid URI characters.

@porglezomp On reflection, I think that we want to include filtering at the operation level (cf. path) from the start. I have updated the proposal to bring that part forward from the "Future directions" section into the proposed changes and updated the PoC branch with an implementation.
At this time I haven't added support for excludes or complement filters.
As this feedback was incorporated pretty late in the review period, I'm proposing we extend it for a few days.
Please let me know your thoughts on the updates.

Thanks @simonjbeaumont, looks great - okay, let's extend the review period into next week.


Stop propagation of some keys

For me, entering a "?" as part of an annotation or chat message opens the help screen.  Prevent this.
Also, I use the jump plugin, which jumps to a different slide after
pressing numbers and enter.   Prevent this.

As side note, I saw that you use meta-enter to send messages. On Firefox, I do not know how to invoke that. Is there a way? https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/metaKey
Maybe use ctrl-enter?

As side note, I saw that you use meta-enter to send messages. On Firefox, I do not know how to invoke that. Is there a way? https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/metaKey
Maybe use ctrl-enter?

I agree 👍🏽 Originally, I though meta key was also available with the Windows/Super key on other OSs, but it seems counter-intuitive to do so, even it was possible 😅
Latest main has this included


setting limit for queue is not working when i run multiple  sidekiq instances

Seems related (and maybe a dup of) https://github.com/brainopia/sidekiq-limit_fetch/issues/92 and https://github.com/brainopia/sidekiq-limit_fetch/issues/91

@KMadhuSudhan @srt32, sorry I am trying a long shot by replying to a very old issue.
Was the issue mentioned here was easily reproducible for you?
I have this issue in prod, but on local, it is pretty hard to reproduce.
I tried with below sidekiq.yml on local
---
:queues:
  - test3
  - default
  - test2
  - test1

:limits:
  test3: 3
  test2: 2
  test1: 1

Then scheduled around 100s of jobs in each queue from rails console, after that stated 2 sidekiq services.

Hey, thanks for your issue! I've just taken over this project/gem and am going through the PRs and issues. I see this issue is stale so I'm going to close it but if you are still experiencing issues, please feel free to re-open.


List editors by dynamic list and get back code changes

Hi, I would like to list some individual snippets from a json. Each snippet will be displayed and can be changed. List and initialize the editors is simple and works just by the code here. But now, when I change something on one of the snippets, how I reise a "code changed event" and how I can identify and read out the code from the specific snippet? Is there a solution to achieve that?
Note: actual I use the construction in the html "@" part as local function, and for snippet identification I used the "ExtraEditorClassName", which I use for snippet identification with wich I will identify later code changes..
html
@foreach (var item in CodeList)
{
    @*Local function (constructor)*@
    StandaloneEditorConstructionOptions EditorConstruction(StandaloneCodeEditor editor)
    {
        return new StandaloneEditorConstructionOptions
                    {
                        Language = "csharp",
                        GlyphMargin = true,
                        ExtraEditorClassName = item.Key, // i took that for snippet identification item, will have to read back that somehow
                        Value = item.Value
                    };
                    @*EditorCollection.Add(editor); // used for later data collection when inside editor changes*@
    }
    @*Editor control*@
    <StandaloneCodeEditor ConstructionOptions="EditorConstruction" OnDidInit="EditorOnDidInit" OnContextMenu="OnContextMenu" OnDidChangeModelContent="OnDidChangeModelContent" />
}

code behind
@code {
    public Dictionary<string, string> CodeList { get; set; } = new Dictionary<string, string>();

    protected override async Task OnInitializedAsync()
    {
        await Global.SetTheme("vs-dark");
        CodeList.Add("SnippetKey1", "snippet1 code.." );
        CodeList.Add("SnippetKey2", "snippet2 code.." );
    }
    public async Task OnCodeChanged(object sender) **// <- Event not available, just shows the idea what I am looking for**
    {
        // code change detected event, write back the change to code collection
        StandaloneCodeEditor editor = (StandaloneCodeEditor)sender;
        CodeList[editor.ConstructionOptions.Method.Name] = await editor.GetValue(); // <- write back snippet kec / code (value)
    }
    public void OnDidChangeModelContent(ModelContentChangedEvent changed)
    {
        // code change devection, but no object reference available to get the information..
    }
}

@serdarciplak Here the website view of how that somehow is listed, each editor with id and specific code which needs to be read back to "CodeList" when something changed (like description on top)

@serdarciplak Perhaps this approach is a use case that could get its own sample page in your project


How to upload general files to dragonfly??

Thank you for sharing the cool project!
Question
I'm planning to use dragonfly for general contents distribution inside the kubernetes clusters.
How to upload generic files to dragonfly networks from some node??  I think dfget server  is what I'm looking for.  But, I can't find any API document of dfget server.  Is there any document for that??  I would be happy if someone told me how to download the uploaded files from other peers.

Thanks for your interest in Dragonfly project.
Actually, the dfget can be used as a peer server in the p2p network. It isn't a file cache. If you want to distribute the file among kubernetes cluster with the help of Dragonfly, you can directly download it through dfget first time, the supernode will help you cache the file. After that if you want to distribute the same file,   it can be transferred among several dfget server.
You can follow this doc:
https://github.com/dragonflyoss/Dragonfly/blob/master/docs/user_guide/download_files.md

@fengzixu Thanks for the quick reply!

you can directly download it through dfget first time, the supernode will help you cache the file.

So, does dragonfly currently support only http/https protocol to download the contents?? Am I correct??

You also can detect this design doc to know how Dragonfly works:
https://github.com/dragonflyoss/Dragonfly/blob/master/docs/design/design.md

@fengzixu Thanks for the quick reply!

you can directly download it through dfget first time, the supernode will help you cache the file.

So, does dragonfly currently support only http/https protocol to download the contents?? Am I correct??

You are right.

So, does dragonfly currently support only http/https protocol to download the contents?? Am I correct??

In fact, we have plans to support more protocols in the future. And could you please describe your needs in more detail？ THX.

we have plans to support more protocols in the future.

I'm glad to here that!  In our expected use case, we would distribute the files mainly in two different locations:

in NFS volumes (file:// protocol)
in HDFS cluster (hdfs:// protocol)

as node-local contents cache

FTP/SFTP ？


[DRAFT] Add generic object controller

Issue #, if available:
Description of changes:
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Closing in favor of #89


Install Cookies and Consent Security Policy Plugin with TIKI WooCommerce plugins

TIKI WooCommerce plugins will use  Consent Security Policy Plugin to handle cookie policies.
Upon activation, the TIKI plugin should check if the Consent plugin is installed/activated and handle its installation and activation.

changed focus to another plugin se #18


Bug Fixes

Summary

This pull request fixes the following beta bugs.

[x] Make bottom bar tabs not jump - Monday
[x] Center modal buttons - Monday
[x] Move confirmation message to center of semester view - Monday
[x] Fix new semester dropdown height for duplicate semester -

[x] Some other small html/css fixes, including confirmation message width and new semester dropdown overflow-x

Test Plan

Most of these changes are UX-related, please test them on the temporary deployment.
The biggest change I made was for "Make bottom bar tabs not jump" (ea90202), let me know if I missed any edge cases.

Just a super nitpick, but can we have the title of the PR's be a little more descriptive next time? Bug Fixes can be anything


Terralith Biomes not displaying correctly

In Forge 47.3.0 and Minecraft 1.20.1, Biome Info fails to display/load Terralith Biomes in the correct format, and instead it pops up like this:
biome.terralith.snowy_badlands
It's not a huge issue, but it does look weird lol
For context, this happens regardless of any other mods installed

Looking at the mod file, Terralith doesn't add translations for their biomes, so this is a Terralith bug. If there are no translations, BiomeInfo can only display the internal name.

Looking at the mod file I can see that Terralith doesn't add translations for their biomes, so this is a Terralith bug. If there are no translations, BiomeInfo can only display the internal name.

So by translations do you mean language translations?
Cause if so, that's interesting that your mod requires that to display them properly, but also interesting that Terralith doesn't have those...
Anyhay, thanks! I'll go ask about it on their page

Yes, I mean language translations. It's not at all interesting that BiomeInfo needs them, because all things that have human readable names in Minecraft work that way. Without them, the game would not know what the correct words are for the language that the user has selected. You have some language key that is the same across all languages (this is what you see with Terralith's biomes), which is used as a lookup for the actual translation. Vanilla adds these for all its biomes, so you do see the proper names.

Yes, I mean language translations. It's not at all interesting that BiomeInfo needs them, because all things that have human readable names in Minecraft work that way. Without them, the game would not know what the correct words are for the language that the user has selected. You have some language key that is the same across all languages (this is what you see with Terralith's biomes), which is used as a lookup for the actual translation. Vanilla adds these for all its biomes, so you do see the proper names.

Gotcha. I mean it's interesting to me because I'm still very new to developing modpacks and mods for the game, so learning as much as I can about how it works is important heh
As far as other languages go, I guess I'm just so used to English that I didn't even consider that, oops >.<
If the Terralith team never gets back to me or never makes such language translations, do you think there's a way I could do so? I'd just hate to have to remove either mod because of something silly like this >.<

Yeah, all language files can be modified with resource packs. See the Minecraft wiki for an explanation. As an example, a language file that properly translates the biome in your screenshot above to English would look like this:
{
	"biome.terralith.snowy_badlands": "Snowy Badlands"
}```

Hi, Terralith dev here. Normally our translations work fine, but I broke something recently. More information on the issue made on the Terralith repo here: https://github.com/Stardust-Labs-MC/Terralith/issues/158#issuecomment-2289347487
Just making the comment so other people can see what's going on if they're curious.