Analyzer should distinguish two cases both under invalid_null_aware_operator now

List<int>? func(List? bob) => bob?.map((e) => e as int)?.toList();
//                                       warning here! ^

warning: The target expression can't be null, so the null-aware operator '?.' can't be used. (invalid_null_aware_operator)
In this case, (per @lrhn ) this is the new null safe behavior which makes follow-up ? unnecessary.
The wording here is very wrong. Likely need a new error code + message here – unnessesary_null_aware_operator or similar
See closed https://github.com/dart-lang/sdk/issues/42554

CC @scheglov @bwilkerson

Analyzer should distinguish two cases both under invalid_null_aware_operator now

I'm not clear as to what the two cases are, so I might be misinterpreting the rest of what you said. If so, I apologize.

In this case, ... this is the new null safe behavior which makes follow-up ? unnecessary.

In #42554 you also wrote:

Isn't something like "This is already a nullable expression, so the ? is not needed"
Seems like it should be more of a hint or something.

The problem I have with that is that the use of ?. here isn't "unnecessary", it's explicitly disallowed by the spec. Saying that it "isn't needed" sounds like "it's allowed, but really doesn't add anything so we recommend not doing it", which is misleading. It isn't a recommendation, it's a requirement. I think the wording needs to be strong enough to convey that.

The message is unclear here. I talked to @munificent and I finally understood what was happening.
The first .? effectively short-circuits the expression. This was very confusing to me, coming from Dart 2.8.
I've opened all of these issues because the new behavior was unclear.

Sorry, I should have tried harder to understand your point. I got caught up in evaluating your proposed solution rather than understanding the issue. But now I see what you mean, and I agree.
To paraphrase, analyzer should have a specialized message when the target is known to be non-null because it uses a null-aware operator, and the message should explain that the reason the target can't be null is because of the previous null-aware operator. The docs should explain the short-circuiting that happens.

Sorry, I should have tried harder to understand your point. I got caught up in evaluating your proposed solution rather than understanding the issue. But now I see what you mean, and I agree.
To paraphrase, analyzer should have a specialized message when the target is known to be non-null because it uses a null-aware operator, and the message should explain that the reason the target can't be null is because of the previous null-aware operator. The docs should explain the short-circuiting that happens.

Something like that.
Imagine coming from Dart 2.8 and seeing The target expression can't be null, so the null-aware operator '?.' can't be used. – If you don't know about the change to ?. you'll be completely thrown off!

To paraphrase, analyzer should have a specialized message when the target is known to be non-null because it uses a null-aware operator, and the message should explain that the reason the target can't be null is because of the previous null-aware operator.

Exactly right. The underlying error (warning, right?) is the same cause: you're using ?. on an expression statically known to be non-nullable. The but reason you got there in one case is because of another language change users may not be aware of:
int x = 123;
x?.abs(); // Warning here.

x?.abs()?.abs(); // Also a warning on the second "?." here.

Before we made null-aware method chains short-circuit, you would need both ?. on the second line, so it would be good if the warning clarified that you don't now because of short-circuiting.

The docs should explain the short-circuiting that happens.

I have docs in flight for that.

I have docs in flight for that.

Excellent! When those are publicly reachable, let me know where they live and I'll include a link in the documentation for the diagnostic.

This has landed as https://dart-review.googlesource.com/c/sdk/+/154161. We can continue to iterate on the actual message if it still doesn't seem clear.


Media error: Format(s) not supported or source(s) not found SSL / iOS / Safari (#2390)

This is an issue anyone can replicate:
Embed a video on an SSL website or website that forces all links to be SSL.
Try to watch it in Safari on any iOS device  If it plays once, refresh the page, or pause and resume, it will break, 100%, reporting the HTML5 video file is not found.
The error is a problem with SSL and Safari and embedded video.  This isn't necessarily a Media Element problem, but Media Element needs to work with Apple and the Safari team to resolve this as many websites are having this problem as SSL is now becoming very standardized for SEO best practices.  This is not native to Media Element, but will happen using any embedding technology or plugin.
Noted on #2390 but not really well documented.

@strayangelfilms we are using mediaelement with ssl certificates on our websites for some time now and don't have this problem. I guess this is an old issue which resolved itself, that's why I'm closing the issue. If this issue still exist, please reopen the issue.

https://github.com/mediaelement/mediaelement/issues/2884


Document LOCAL_PACKAGE syntax for lock

These can have version numbers.

I rebased and added a sentence about that.


Example app add_two_ints_service does not work on STM32: 1) Incorrect data received and 2) No server response

Issue template

Hardware description: Olimex STM32-E407
RTOS: freeRTOS
Installation type: micro_ros_setup
Version or commit hash: galactic

Steps to reproduce the issue

Follow steps mentioned in micro.ros.org using docker (ros:galactic)
Configure firmware with udp transport ros2 run micro_ros_setup configure_firmware.sh add_two_ints_service --transport udp --ip <our agent ip> --port 8888
Build firmware and flash through JTAG, just as in the tutorial.
Create and run the agent.
Service call on a new terminal: ros2 service call /addtwoints example_interfaces/srv/AddTwoInts "{a: 5, b: 10}"

Expected behavior
Should get a response (sum=15)
Actual behavior

Server receives request but there is no response.
waiting for service to become available... requester: making request: example_interfaces.srv.AddTwoInts_Request(a=5, b=10)
Received request has garbage values for a, and b is always 1.

Additional information
We basically have the same issue as this but with FreeRTOS on our STM32 board.
We using a router from Teltonika- RUT240 (which a decent router), and the computer running the agent and making service calls is connected though Ethernet.
Quick note: I had to include #include <rclc/executor.h> in the example code, and change "printk"s to printf to get it to compile.
Not very well-versed with uROS or DDS stuff, but we tried the following:

export RMW_IMPLEMENTATION=rmw_fastrtps_cpp before starting the agent, as suggested in this thread.
Making the response and request variables global suggested in this thread.

Logs from the agent:
$ ros2 run micro_ros_agent micro_ros_agent udp4 --port 8888 -v6
[1646402745.031716] info     | UDPv4AgentLinux.cpp | init                     | running...             | port: 8888
[1646402745.032007] info     | Root.cpp           | set_verbose_level        | logger setup           | verbose_level: 6
[1646402745.756195] debug    | UDPv4AgentLinux.cpp | recv_message             | [==>> UDP <<==]        | client_key: 0x00000000, len: 24, data:
0000: 80 00 00 00 00 01 10 00 58 52 43 45 01 00 01 0F 09 6C 59 A4 81 00 FC 03
[1646402745.756401] info     | Root.cpp           | create_client            | create                 | client_key: 0x096C59A4, session_id: 0x81
[1646402745.756505] info     | SessionManager.hpp | establish_session        | session established    | client_key: 0x096C59A4, address: <IP_ADDRESS>:12020
[1646402745.756658] debug    | UDPv4AgentLinux.cpp | send_message             | [** <<UDP>> **]        | client_key: 0x096C59A4, len: 19, data:
0000: 81 00 00 00 04 01 0B 00 00 00 58 52 43 45 01 00 01 0F 00
[1646402745.757560] debug    | UDPv4AgentLinux.cpp | recv_message             | [==>> UDP <<==]        | client_key: 0x096C59A4, len: 56, data:
0000: 81 80 00 00 01 07 2E 00 00 0A 00 01 01 03 00 00 20 00 00 00 00 01 00 20 18 00 00 00 61 64 64 5F
0020: 74 77 6F 69 6E 74 73 5F 73 65 72 76 65 72 5F 72 63 6C 63 00 00 00 00 00
[1646402745.771891] info     | ProxyClient.cpp    | create_participant       | participant created    | client_key: 0x096C59A4, participant_id: 0x000(1)
[1646402745.771982] debug    | UDPv4AgentLinux.cpp | send_message             | [** <<UDP>> **]        | client_key: 0x096C59A4, len: 14, data:
0000: 81 80 00 00 05 01 06 00 00 0A 00 01 00 00
[1646402745.771996] debug    | UDPv4AgentLinux.cpp | send_message             | [** <<UDP>> **]        | client_key: 0x096C59A4, len: 13, data:
0000: 81 00 00 00 0A 01 05 00 01 00 00 00 80
[1646402745.772787] debug    | UDPv4AgentLinux.cpp | recv_message             | [==>> UDP <<==]        | client_key: 0x096C59A4, len: 13, data:
0000: 81 00 00 00 0A 01 05 00 01 00 00 00 80
[1646402745.773173] debug    | UDPv4AgentLinux.cpp | recv_message             | [==>> UDP <<==]        | client_key: 0x096C59A4, len: 208, data:
0000: 81 80 01 00 01 07 C5 00 00 0B 00 08 08 03 00 00 B7 00 00 00 0C 00 00 00 2F 61 64 64 74 77 6F 69
0020: 6E 74 73 00 33 00 00 00 65 78 61 6D 70 6C 65 5F 69 6E 74 65 72 66 61 63 65 73 3A 3A 73 72 76 3A
0040: 3A 64 64 73 5F 3A 3A 41 64 64 54 77 6F 49 6E 74 73 5F 52 65 71 75 65 73 74 5F 00 08 34 00 00 00
0060: 65 78 61 6D 70 6C 65 5F 69 6E 74 65 72 66 61 63 65 73 3A 3A 73 72 76 3A 3A 64 64 73 5F 3A 3A 41
0080: 64 64 54 77 6F 49 6E 74 73 5F 52 65 73 70 6F 6E 73 65 5F 00 01 23 03 08 15 00 00 00 72 71 2F 61
00A0: 64 64 74 77 6F 69 6E 74 73 52 65 71 75 65 73 74 00 01 00 00 13 00 00 00 72 72 2F 61 64 64 74 77
00C0: 6F 69 6E 74 73 52 65 70 6C 79 00 00 01 00 00 00
[1646402745.773799] info     | ProxyClient.cpp    | create_replier           | replier created        | client_key: 0x096C59A4, requester_id: 0x000(7), participant_id: 0x000(1)
[1646402745.773880] debug    | UDPv4AgentLinux.cpp | send_message             | [** <<UDP>> **]        | client_key: 0x096C59A4, len: 14, data:
0000: 81 80 01 00 05 01 06 00 00 0B 00 08 00 00
[1646402745.773894] debug    | UDPv4AgentLinux.cpp | send_message             | [** <<UDP>> **]        | client_key: 0x096C59A4, len: 13, data:
0000: 81 00 00 00 0A 01 05 00 02 00 00 00 80
[1646402745.774660] debug    | UDPv4AgentLinux.cpp | recv_message             | [==>> UDP <<==]        | client_key: 0x096C59A4, len: 13, data:
0000: 81 00 00 00 0A 01 05 00 02 00 00 00 80
[1646402745.774678] debug    | UDPv4AgentLinux.cpp | recv_message             | [==>> UDP <<==]        | client_key: 0x096C59A4, len: 24, data:
0000: 81 80 02 00 08 01 10 00 00 0C 00 08 80 00 00 01 FF FF 00 00 00 00 00 00
[1646402745.774818] debug    | UDPv4AgentLinux.cpp | send_message             | [** <<UDP>> **]        | client_key: 0x096C59A4, len: 13, data:
0000: 81 00 00 00 0A 01 05 00 03 00 00 00 80
[1646402768.908714] debug    | Replier.cpp        | read_fn                  | [==>> DDS <<==]        | client_key: 0x00000000, len: 56, data:
0000: 69 F5 10 01 90 E8 E4 52 F3 48 EC 0C 00 00 14 03 00 00 00 00 01 00 00 00 AB CE 57 FA 4A 37 B3 F7
0020: 01 00 00 00 00 00 00 00 05 00 00 00 00 00 00 00 0A 00 00 00 00 00 00 00
[1646402768.908912] debug    | UDPv4AgentLinux.cpp | send_message             | [** <<UDP>> **]        | client_key: 0x096C59A4, len: 68, data:
0000: 81 80 02 00 09 01 3C 00 00 0C 00 08 69 F5 10 01 90 E8 E4 52 F3 48 EC 0C 00 00 14 03 00 00 00 00
0020: 01 00 00 00 AB CE 57 FA 4A 37 B3 F7 01 00 00 00 00 00 00 00 05 00 00 00 00 00 00 00 0A 00 00 00
0040: 00 00 00 00
[1646402768.973465] debug    | UDPv4AgentLinux.cpp | recv_message             | [==>> UDP <<==]        | client_key: 0x096C59A4, len: 13, data:
0000: 81 00 00 00 0A 01 05 00 03 00 00 00 80
[1646402768.977226] debug    | UDPv4AgentLinux.cpp | recv_message             | [==>> UDP <<==]        | client_key: 0x096C59A4, len: 44, data:
0000: 81 80 03 00 07 01 24 00 00 0D 00 08 69 F5 10 01 90 E8 E4 52 F3 48 EC 0C 00 00 14 03 00 00 00 00
0020: 01 00 00 00 AC CE 57 FA 4A 37 B3 F7
[1646402768.977451] debug    | Replier.cpp        | write                    | [** <<DDS>> **]        | client_key: 0x00000000, len: 32, data:
0000: 69 F5 10 01 90 E8 E4 52 F3 48 EC 0C 00 00 14 03 00 00 00 00 01 00 00 00 AC CE 57 FA 4A 37 B3 F7
[1646402768.977570] debug    | UDPv4AgentLinux.cpp | send_message             | [** <<UDP>> **]        | client_key: 0x096C59A4, len: 13, data:
0000: 81 00 00 00 0A 01 05 00 04 00 00 00 80

Request
Looks like there is some incorrect behavior either

in the serialization happening on the agent, or
in extracting the UDP data from the UDP packet.

Running the agent in debug mode shows that the request of the AddTwoInts, two int64_t integers of 8 bytes each, is transmitted in a UDP packet containing 40 bytes, thus 32 bytes of data instead of 16. The values of variables int64_t a and int64_t b are present in the last 16 bytes of the UDP packet. I don't know if this is intended behavior, but it is not matching the deserialization happening in the MCU side.
The MCU receives the UDP packet when the service is called and reads the 32 bytes of data. This can be validated by adding a breakpoint at rmw_microxrcedds/rmw_microxrcedds_c/src/rmw_request.c#L124 and validating the contents of static_buffer->buffer and static_buffer->length.
The buffer is then sent for deserialization, but it deserialized incorrectly since it expects the data to be at the beginning of the buffer and, in this case, the data is present after a 16 bytes offset.
Response
I still need to dig a little deeper, but there might be a similar issue (namely inconsistent serialization/deserialization) happening on the response. I say this because running the agent in debug mode clearly shows that the agent receives a UDP containing the response. The data, int64_t sum, is present in the last 8 bytes of a 24 bytes UDP packet.

I am pasting below a sample of the exchange reported by the agent when a service is called. Note that I have manually shifted the buffer in rmw_microxrcedds/rmw_microxrcedds_c/src/rmw_request.c#L122, i.e. changed the line to static_buffer->buffer + 16 to read from the correct address.
[1647331268.554430] debug    | Replier.cpp         | read_fn                  | [==>> DDS <<==]        | client_key: 0x00000000, len: 56, data:
0000: 35 A7 10 01 E7 EC 5B 14 9F 07 04 2B 00 00 14 03 00 00 00 00 01 00 00 00 A3 3D 25 01 73 6C D9 63
0020: 01 00 00 00 00 00 00 00 05 00 00 00 00 00 00 00 07 00 00 00 00 00 00 00

[1647331268.554594] debug    | UDPv4AgentLinux.cpp | send_message             | [** <<UDP>> **]        | client_key: 0x3C4C11D9, len: 68, data:
0000: 81 80 02 00 09 01 3C 00 00 0C 00 08 35 A7 10 01 E7 EC 5B 14 9F 07 04 2B 00 00 14 03 00 00 00 00
0020: 01 00 00 00 A3 3D 25 01 73 6C D9 63 01 00 00 00 00 00 00 00 05 00 00 00 00 00 00 00 07 00 00 00
0040: 00 00 00 00

[1647331268.555816] debug    | UDPv4AgentLinux.cpp | recv_message             | [==>> UDP <<==]        | client_key: 0x3C4C11D9, len: 13, data:
0000: 81 00 00 00 0A 01 05 00 03 00 00 00 80

[1647331272.343187] debug    | UDPv4AgentLinux.cpp | recv_message             | [==>> UDP <<==]        | client_key: 0x3C4C11D9, len: 44, data:
0000: 81 80 03 00 07 01 24 00 00 0D 00 08 35 A7 10 01 E7 EC 5B 14 9F 07 04 2B 00 00 14 03 00 00 00 00
0020: 01 00 00 00 A4 3D 25 01 73 6C D9 63

[1647331272.343431] debug    | Replier.cpp         | write                    | [** <<DDS>> **]        | client_key: 0x00000000, len: 32, data:
0000: 35 A7 10 01 E7 EC 5B 14 9F 07 04 2B 00 00 14 03 00 00 00 00 01 00 00 00 A4 3D 25 01 73 6C D9 63

[1647331272.343553] debug    | UDPv4AgentLinux.cpp | send_message             | [** <<UDP>> **]        | client_key: 0x3C4C11D9, len: 13, data:
0000: 81 00 00 00 0A 01 05 00 04 00 00 00 80


[GSSOC'23] T-shirt Competiton

Is your feature request related to a problem? Please describe.
Actually I want to introduce a  t-shirt competion where there users will like or dislike the t-shirt the majority points will be getting badges on it . Can u please assgin me this issue under GSSOC'23
Describe the solution you'd like
this implementation will increase the creative spirit of the individuals
Describe alternatives you've considered
No response
Additional context
No response
Code of Conduct

[X] I agree to follow this project's Code of Conduct
[ ] I'm a GSSoC'23 contributor
[ ] I want to work on this issue

i am raising this issue because the login and sign up is already created


update stable

update stable

Codecov Report

Merging #74 (cb7cf5a) into stable (06961e9) will not change coverage.
The diff coverage is 0.00%.

@@           Coverage Diff           @@
##           stable     #74    +/-   ##
=======================================
  Coverage        0   0.00%
=======================================
  Files           0       3     +3
  Lines           0     374   +374
=======================================
- Misses          0     374   +374

Impacted Files
Coverage Δ

cleaner.go
0.00% <0.00%> (ø)

config.go
0.00% <ø> (ø)

database.go
0.00% <0.00%> (ø)

Continue to review full report at Codecov.

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


Option for max attributes length

Hi!
I added an option to define the max length of the component's attributes.
I added tests for that.
The default stays the same 80 chars.
In the nuxt config, add this option:
mdcOptions: {
  maxAttributesLength: 100
},

I named the option maxAttributesLength but in fact, it's the length of the line, which include the name of the component and the decoration:
`::component{key="value"}` //  = 24 chars

Maybe we could found a better name for this. Naming is hard.
I didn't set this option in the experimental feature because it's a very small change...
Also, during development, maybe I found a possible issue that already exists before this merge request.
When this length is exceeded (default: 80), the attributes are converted to yaml format.
That's the point. But the fmAttributes are not properly filled and remains empty. You can see it in the snapshot.
This is not the case when we directly provide the component yaml props.
But  if the length is exceeded, we are now in yaml style, so I think the fmAttributes should have the props.
It needs review because I don't know if it's the normal behavior...

Thanks for the PR.
About the fmAttributes, I believe it is fine to keep fmAttributes empty on parsing.
parsing markdown and creating are separate from each other. Imagine If the limit in parse time is 80 and the limit for Stringify is 100.


Tab

This PR adds the Tab component

Please change project's typescript compiler rules so it doesn't allow usage of any

Please change project's typescript compiler rules so it doesn't allow usage of any

I'll do it in another PR and fix all the any

Travis automatic deployment:
https://pr13--safereactcomponents.review.gnosisdev.com

Travis automatic deployment:
https://pr13--safereactcomponents.review.gnosisdev.com

Travis automatic deployment:
https://pr13--safereactcomponents.review.gnosisdev.com


📰 Poster-Multi-task Learning of Hierarchical Vision-Language Representation

AMC Seminar Sign Up

Link to previous seminar meeting minutes comments issue:

https://github.com/BUPT/ai-ml.club/issues/320
1. Oral / Poster Selection

Select one of the following selections for Oral or Poster:

Oral should be prepared for 15 - 30 minutes, and no more than 45 minutes, including Q/A.
Posters should be prepared for 5 - 10 minutes, and no more than 15 minutes, including Q/A.

[ ] 🗣 Oral (15 MIN)
[x] 📰 Poster (5 MIN)

2. Paper Information

Please fill the follow table and provide all the information as many as possible, for sharing with others better. (delete the rows that you did not fill)

Paper
Information

Name
Multi-task Learning of Hierarchical Vision-Language Representation

Recommendation
a new idea of vision-language fusion for multi-task

Prior Knowledge
neural network, attention mechanism, image caption retrieval, visual question answering, visual grounding

Year
2019

Publish
CVPR

Author
Duy-Kien Nguyen, et. al.

Arxiv
https://arxiv.org/pdf/1812.00500.pdf

3. After Party 🍻

Everyone will be welcome. You can join or not join as you want (not required by the AMC), and change your mind at any time.

After Party will be started right after all the meeting agenda had been fulfilled.
We will find a bar and drink beers and talk whatever we want. (we can expect that it will be related to meeting topics of the day)
The bill will be paid AA

[ ] 🍻 YES! I'll definitely join the After Party!
[x] 🤔 Maybe. I'd like to decide later.
[ ] 🛌 No, I'm afraid not this time.

4. New Friend

Whether you have a new friend comes with you to the club.

[ ] 👥 I'll bring a new friend
[x] 👤 There's no new friend from me

Artificial Intelligence & Machine Learning CLUB, 2018 - 2019 AI ML Club - AMC Member Manual

docs/_people/liuyun.md: 16: MD009/no-trailing-spaces Trailing spaces [Expected: 0 or 2; Actual: 1]
docs/_people/liuyun.md: 26: MD012/no-multiple-blanks Multiple consecutive blank lines [Expected: 1; Actual: 2]
docs/_people/liuyun.md: 38: MD047/single-trailing-newline Files should end with a single newline character
格式出了点问题,空格和换行,还有结尾的部分


iowahills.com down since Sep 2021

According to web.archive.org recordings, iowahills.com website has been closed in Sep 2021. All content is still available in WayBack Machine https://web.archive.org/web/20171110201917/http://iowahills.com/
Anyone knows about Daniel Klostermann?

copied the link to wayback machine to the README.
my last contact (response from Daniel) was September 12, 2021.
it was the OK, that i put his sources to github.


EntityHarborContent is expecting a required prop entity

EntityHarborContent  is expecting a required entity prop which is not mentioned in readme and the
app is crashing on passing the entity from EntityPage.tsx
Also the widget component is giving an error
 Cannot read property 'severity' of undefined type=errorHandler stack=TypeError: Cannot read property 'severity' of undefined

Should be fixed soon, we haven't looked at this one in a while


Add new meta

And please add the [workspace] section with the metawasm crate like here: https://github.com/gear-dapps/app/blob/c762aeed4ce9e563bc58af5ca9115285deb4a60b/Cargo.toml#L32-L35.


Viewport extends outside of visible window in mobile browsers

Steps to reproduce issue
Open on a mobile browser (tested with Edge). Testing using the devtools emulators doesn't work, it needs to be a real device.
The bottom 'chrome' of the browser (e.g. forward/back links, menu etc.) hides the attribution/coordinates/scalebar. It also makes the page 'scrollable' which it should not be.

There is a potential workaround using a vendor specific prefix here:
CSS fix for 100vh in mobile WebKit - Matt Smith (allthingssmitty.com)
Adding min-height: -webkit-fill-available; to the giframeworkMap class seems to mitigate the issue.
Other mobile browsers need to be tested too.

This was fixed a while ago, only remaining issue is #38


Driver docker image jars should be automatically added

Currently when a custom docker image is provided with an application's jars mounted on it, the user has to explicitly specify the location of these jars in the docker image. They provide paths with local:// URI schemes to do this. In practice this would seem to be redundant. Multiple users that all submit the same application would have to specify the exact same set of URIs, and, the user would have to know where the jars live in the Docker image.
One idea is for the docker images to support the presence of an environment variable, say SPARK_DOCKER_JARS. The environment variable could be set on both the driver and the executor images. When the variable is set, the CMD of the base Spark image would add entries from SPARK_DOCKER_JARS to the driver and executor classpath, respectively.
For example, the base driver docker image that we can provide could have this:
CMD java $DRIVER_JAVA_OPTIONS -cp /opt/spark/jars/*:$SPARK_DOCKER_JARS $USER_CLASS $USER_ARGS

(spark-submit provides everything except SPARK_DOCKER_JARS) - and a custom Docker image implementation could have this:
ENV SPARK_DOCKER_JARS /app/jars/*

We will be changing the structure of the Docker images when submission is redone with the submission staging server, so we ought to include this change in that iteration as well.

@foxish @erikerlandson @ash211 as discussed yesterday.

One nuance is that one could want to include jars only in the driver docker image and have them be shipped over to the executors - but we can assume the simplest case for now. This is effectively allowing spark.driver.extraClassPath and spark.executor.extraClassPath to be provided in the Docker image.


ability to remove ROIs

by various criteria
delete (don't hide)
option to retain ROIs for which there are manual annotations

@joefutrelle We still need definition (from you or Heidi, right?) on what the various criteria are going to be? We could start on something will the ability to delete a single ROI if you want, since there's less involved to get that going, and it can be added on later. Something like right clicking on the image and having delete show up in a context menu (since that right click, show table is already going to be changed)
Also, item two is a hard delete, but then you mentioned retaining ROI's w/ manual annotations. Does it fall back to a soft delete in those cases? If not, how do you want to handle that part of it?

This is going to be a bulk operation that may first need to be implemented on the backend; I will need to get more details on the criteria.
The use case is cleaning out the database of ROIs that are not going to be looked at further (for various user task related reasons that can't be automatically determined).
For retaining ROIs with manual annotations, there would be no changes made--in other words, the ROI would not be deleted.

It should never be possible to use this feature to remove human annotations--just autoclassifier ones


Memory leak on objects with integer keys

{"items":[{"id":49687,"key":{"0":{"id":"23","name":"United States"},"1":{"id":"28","name":"Spain"},"3":{"id":"9","name":"United Kingdom"}}}]}

$this->fp_read = fopen($this->source, 'r');
$this->reader = new \Bcn\Component\Json\Reader($this->fp_read);
$this->reader->enter(\Bcn\Component\Json\Reader::TYPE_OBJECT);
$this->reader->enter('items', \Bcn\Component\Json\Reader::TYPE_ARRAY);
while ($data = $this->reader->read()) {}

mmap() failed: [12] Cannot allocate memory

mmap() failed: [12] Cannot allocate memory
PHP Fatal error:  Out of memory (allocated<PHONE_NUMBER>) (tried to allocate 262144 bytes) in /vendor/skolodyazhnyy/json-stream/Bcn/Component/Json/Reader.php on line 43

mmap() failed: [12] Cannot allocate memory
PHP Fatal error:  Out of memory (allocated<PHONE_NUMBER>) (tried to allocate 262144 bytes) in Unknown on line 0

Any ideas how to fix this?

Can be closed when new version tagged :tada:

I have added 0.4.1 tag.


[🔧 core]: get rid of direct DeviceDetector reverences in ESL code

Get rid of direct DeviceDetector reverences in ESL code.
DeviceDetector is the legacy one; a separate check is available in the environment module.
Recommended target: main

:tada: This issue has been resolved in version 5.0.0-beta.15 :tada:
The release is available on:

npm package (@beta dist-tag)
GitHub release

Your semantic-release bot :package::rocket:

:tada: This issue has been resolved in version 4.17.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Some optimizations in StringLineGroup

This PR contributes a few improvements to StringLineGroup.
RemoveAt(int)
A memory leak was fixed and code duplication reduced.
ToSlice(List<LineOffset>)
First, the case where Count == 1 has been moved before the case where Count == 0, simply because it is so much more common. Indeed, out of 1023 unit tests that call this method, 872 execute the Count == 1 branch, but none of them execute the Count == 0 branch.
Secondly, the loop was restructured to simplify it and reduce code duplication. Using ref var line = ref Lines[i];, the Lines array is indexed only once per iteration.
Iterator.NextChar()
_offset++; has been moved into the if branch, so that the _offset--; in the else branch can be removed.

Thanks!


Enable GetWindowHandle() on macOS

This isn't the nicest fix, but it works, because id is a typedef for struct objc_object *.

@Not-Nik Thanks for the review... not much elegant but it's ok for now


Merging p2p-master with master (Diffusion layer factorization)

This PR factors the Diffusion Layer in P2P and NonP2P and makes the necessary changes in both ouroboros-network and ouroboros-consensus repos, in order to enable a switch between starting a node as p2p or non-p2p

I see that one part of complexity that is pushed onto ouroboros-consensus comes from the difference between DiffusionApplications for non p2p and p2p versions, there are two parts that contribute to this:
1. different types in application fields

2. different auxiliaty members, e.g. `daErrorPolicies` vs `daRethrowPolicy`, and various additional fields in `p2p`: e.g. `daMiniProtocolParameters`, `daPeerMetrics`, `daBlockFetchMode`

To address 1. it could help if we made the non-p2p to use the same types as the p2p version
To address 2. we could either split the DiffusionArguments or provide a polymorphic member which would be instantiated to different types for p2p and non p2p. Whatever would make the use of the api simpler.

I tried to make the least decisions possible and to uniform everything between p2p and non-p2p. However, I figured the difference in the types would be too big and the needed modifications would be too complex. I like the way I have things because I believe it will make it easier to revert back once we decide to only keep the P2P part!

I tried to make the least decisions possible and to uniform everything between p2p and non-p2p. However, I figured the difference in the types would be too big and the needed modifications would be too complex. I like the way I have things because I believe it will make it easier to revert back once we decide to only keep the P2P part!

The most difficult part of this would be to modify the non-p2p part.  I am not 100% if this would work, but I'd like to experiment with it.  If it does work, we should be able to have PR to master which prepares that branch for merging p2p-master (it would include some other commits from p2p-master branch like  364a18ce6 and cb54ad7c2).  The modifications of p2p, i.e. the split of DiffusionApplications could stay with us for longer.

Hmm, I guess I can try open a PR against master that tries to achieve that, it might end up being simpler than I am imagining! 😄

Hmm, I guess I can try open a PR against master that tries to achieve that, it might end up being simpler than I am imagining! smile

To make sure we don't have a complex conflict, make  a PR against p2p-master first, later we'll try to rewrite the history of p2p-master so this lands at the bottom of it (this is where a conflict might surface).

@coot P2P and Non-P2P runDataDiffusion functions are very different, I was able to refactor DiffusionTracers and make everything run on IO (), but DiffusionApplications and DiffusionArguments are very difficult to refactor, there are a lot of implementation details in each one, so changing the non-p2p part would have to introduce quite some of the p2p features. Do you have any suggestion or guidance that you can provide? I still think that making a clear distinction between the p2p and non-p2p for now is the simplest and cleanest approach, whenever we decide to make the full switch to p2p, we just need to remove all the NonP2P.x things

NOTE: Before merging make sure that we are using the most recent versions of P2P ( p2p-master branch ) and NonP2P ( master branch ), and if not update the code.

Thanks @coot , will address your reviews!

Thank you @nfrisby ! Yes, thank you for pointing out the styling issues, I am more than happy to please the code owners, since I am manipulating their code base, so thank you as well for insisting on them!


Rank

This pull request adds new features to create pairwise ranks to train ordinal models.
It also fixes issues #160 and #135, which is relevant for pull request #149

There are a whole bunch of tests failing right now, which is super annoying.  I think we are going to need to add a binarize before apply_mask.  not sure why we've never run into these problems before.
Also need to fix pandas indexing of boolean values.  Doesn't work in iloc anymore see #144

fixed indexing problem with new version of pandas issue #144

Coverage decreased (-0.8%) to 52.77% when pulling 46182b7b35e8aa2f6ffaa5a8e8e3d83e4386ced1 on rank into b4f575e3b47bba482e1a57cea41a08c121528ec8 on master.


Setting Throughput At The Collection Level

I've seen examples of how to set throughput at the container level but I'd like to see how to set it at the collection level.  I have tried setting:
"options": { "throughput": 3000 }
in Microsoft.DocumentDb/databaseAccounts/apis/databases/containers
It works when I run the template for the first time but then fails on subsequent runs with the error:
"Throughput update is not allowed through options. Ensure to use throughput settings for updating throughput."
Since ARM templates are supposed to be idempotent, I think I must be missing something here.  How should I be doing this?

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

ID: cecb9c8e-133d-065b-314f-ff173f74a3d6
Version Independent ID: 0d9926b1-569f-d4af-ba21-609393e6d7fc
Content: Azure Resource Manager templates for Azure Cosmos DB
Content Source: articles/cosmos-db/manage-sql-with-resource-manager.md
Service: cosmos-db
GitHub Login: @markjbrown
Microsoft Alias: mjbrown

@brushwood24 Thank you for the detailed inquiry, we are investigating and will update you when we have additional information to provided. Is it possible to provide a copy of your ARM template minus any sensitive data such as subscription id. Just enough of it to show how you are passing the options. This will help us isolate the issue. Thank you.

Here's an ARM template that demonstrates what I am describing:
example.json.txt
You can run it once and it will create a cosmos db account, database and two collections with the throughput specified in the template.  Any subsequent runs will fail with the error:
"Throughput update is not allowed through options. Ensure to use throughput settings for updating throughput."
If you remove line 83:
"options": { "throughput": 400 },
it will run without errors.  Is there a different method I should be using to set the throughput (settings vs options)?  Regardless, I would expect any ARM template to be idempotent.

Investigating. Thanks.

Attached is an example of how to update the throughput for a database. We missed creating examples for this.
azuredeploy-sql-update-ru-database.json.txt
Thank you for reporting this. Will have this fully documented very soon with examples for changing throughput for database and containers.
Thanks.

I'm actually looking for how to set the throughout at the collection level, not database.

@brushwood24 I believe so, as I was attempting to create an ARM example but the functionality does not allow you to export the template with additional config items made post-deployment but, the following example should get you close:

   		{

		"type": "Microsoft.DocumentDb/databaseAccounts/apis/databases/containers",
		"name": "[concat(variables('accountName'), '/sql/', parameters('databaseName'), '/', parameters('container1Name'))]",
		"apiVersion": "2016-03-31",
		"dependsOn": [ "[resourceId('Microsoft.DocumentDB/databaseAccounts/apis/databases', variables('accountName'), 'sql', parameters('databaseName'))]" ],
		"properties":
		{
			"resource":{
				"id":  "[parameters('container1Name')]",
				"partitionKey": {
					"paths": [
					"/MyPartitionKey1"
					],
					"kind": "Hash"
				},
				"indexingPolicy": {
					"indexingMode": "consistent",
					"includedPaths": [{
							"path": "/*",
							"indexes": [
								{
									"kind": "Range",
									"dataType": "number",
									"precision": -1
								},
								{
									"kind": "Range",
									"dataType": "string",
									"precision": -1
								}
							]
						}
					],
					"excludedPaths": [{
							"path": "/MyPathToNotIndex/*"
						}
					],
                    		"throughput": {
		                    "type": "int",
		                    "defaultValue": 400,
		                    "minValue": 400,
		                    "maxValue": 1000000,
		                    "metadata": {
			                "description": "The throughput for the container"
		                }
	                },
				}
			}
		}
	},

@Mike-Ubezzi-MSFT This is incorrect. See attached for example on setting throughput at the container level.
azuredeploy-sql-container-ru.json.txt
thanks.

@brushwood24 I hope the example provided is a workable solution. Can you verify that running additional updates via ARM is not throwing an error, if you are looking to make changes to throughput via ARM.

@Mike-Ubezzi-MSFT / @markjbrown  , This looks like the same method I used in my example template that generates the error:
"Throughput update is not allowed through options. Ensure to use throughput settings for updating throughput."
It works the first time the template is run but then errors out for every subsequent run.  Am I missing something?

@brushwood24 Thank you for this additional detail. I am reaching out to the PG to get an answer. If you have any additional details (full error exception with GUIDs) that would be helpful if there is nothing obvious that might stand out.

@brushwood24 Please find a link to what should be the correct syntax for making an update to collection throughput. The difference is the use of a parameters.json file for options.
azuredeploy-sql-ru-update.zip
Please let us know if you have additional questions.

@brushwood24 We will now proceed to close this thread. If there are further questions regarding this matter, please comment and we will gladly continue the discussion.

This is now fixed. Thanks for reporting. can close this issue now.
thanks.

Using a separate template to update the throughput is ok. But usually, you would have a single template that you first use to create a resource and then run again to update.
The current behaviour of the templates makes this difficult. If the template contains the options-->throughput section on the database and the value differs from what is currently deployed you get
"Throughput update is not allowed through options. Ensure to use throughput settings for updating throughput."
If you remove that section and instead just try "Microsoft.DocumentDB/databaseAccounts/apis/databases/settings" for setting throughput in it tells you the property doesn't exist since the db created doesn't have throughput provisioned at the db level.
I've had to resort to a createDatabase Yes/No parameter as a workaround and skip the db creation after the first deploy.
Is there some better way to get around this?

I've uploaded an example of how I had to work around this behaviour https://gist.github.com/aaron-0/c69c0af9b29497297e46b5ea51b48abd
I also noted that even though  I specify index kinds when you view the settings in the portal you just end up with:
    "includedPaths": [         {             "path": "/*",             "indexes": []         }

@aaron-0 Hi and sorry for the delay in responding. If you are trying to set throughput for a database or container use one of these two templates below.
https://azure.microsoft.com/en-us/resources/templates/101-cosmosdb-sql-database-ru-update/
https://azure.microsoft.com/en-us/resources/templates/101-cosmosdb-sql-container-ru-update/
Let me know if you have any other questions. Thanks

@markjbrown thanks for the response. The mechanism you have linked for updating is already incorporated into the gist I added: https://gist.github.com/aaron-0/c69c0af9b29497297e46b5ea51b48abd
What I'm trying to achieve is a single idempotent arm template for creating the database initially and then update it over time. e.g when I add a new collection, change an index or change throughput.
Most other azure resources I've created via ARM template support this but the fact cosmos db has one place to set throughput on create(options) and another for update(settings) makes this difficult

Yes, I understand your frustration. The reason it is this way is our resource provider does not support PATCH. This is something we are evaluating for the future. I appreciate your feedback on this. It will be incorporated into our discussions on this topic.
btw, another customer has a similar requirement and he came up with a novel solution. Take a look at this blog post of his as it may suit your needs.
https://blog.annejanbarelds.nl/2019/05/21/leveraging-arm-templates-for-deploying-azure-cosmosdb/
Thanks again.

Thanks for your help, I'll make use of that solution, as I like it more than what I was doing

I had the same exact problem I am hoping it does not have to be so as I have to keep a readme of what needs to be done for new deployments and then check-in code with isUpdate : true in the source code based on the blog link above for CI CD to keep running.

I agree there should not be a separate template required for updating throughput.  This defeats the purpose of idempotent IaC.  I would consider this a bug.  It's inconsistent with how all other azure resources work.

Hi @joshschmitter we are actively working to update this now. I should have new ARM templates published in the next 30 days or sooner.
Thanks.

@markjbrown did your last comment mean you are updating the templates in the docs to reflect this deployment trickery, or that the resource provider is being updated so that it is idempotent and you don't have to do this deployment trickery?

It's the latter. We're fixing the broken behavior and implementing it such that redeploying the same template with new throughput will update the throughput for the resource.
Thanks.

Should this issue be re-opened or is there another issue where I can check the progress?

Working to get this out over the next couple of weeks.

@markjbrown is there some place where I could track the work you are describing?
You write:

It's the latter. We're fixing the broken behavior and implementing it such that redeploying the same template with new throughput will update the throughput for the resource.

I would love to have some place where I can come and check the status (whether it is in progress or done, etc) to be able to track the dependencies on my side.

@markjbrown has this been completed? I am no longer receiving this error.

Yes, if you are using our latest ARM version then this has been fixed.
https://docs.microsoft.com/en-us/azure/templates/microsoft.documentdb/2019-08-01/databaseaccounts
Thanks everyone for your patience. We are working on updating our docs and sample templates over the next week or two.


Component: Autocomplete

#149 Currently there is no possibility to pass an array of selected items when the component loads.

@MaartenDeWeerdt  I got that, but I'm suggesting that instead of passing an array of items, just ass a property on the existing items;


Backup Channels are not working

Backup channels are not working

OS Windows 11 x64
Threadfin Version and Build 1.2 (8)

Steps to reproduce the behavior:

Have one m3u playlist
Use ffmpeg or vlc for buffering
In channel mappings, add channels under Backup Channels 1, 2, 3..
Issue occurs

Expected behavior
If the primary channel is not functional, Threadfin does not switch to Backup Channel 1, then 2, and then 3.
Screenshots

Desktop (please complete the following information):

OS: Android / Nvidia Shield
Browser IPTV and Tivimate

Logs:
2024-10-04 07:05:45 [Threadfin] Buffer:                 true [ffmpeg]
2024-10-04 07:05:45 [Threadfin] Buffer Size:            1024 KB
2024-10-04 07:05:45 [Threadfin] Channel Name:           Paramount Network
2024-10-04 07:05:45 [Threadfin] Client User-Agent:      TiviMate/5.1.0 (Android 11)
2024-10-04 07:05:46 [Threadfin] Streaming Status:       Playlist: 28Jul2024 - Tuner: 1 / 2
2024-10-04 07:05:46 [Threadfin] FFMPEG path:            C:\Users\User\Documents!Apps\ffmpeg-full_build\bin\ffmpeg.exe
2024-10-04 07:05:46 [Threadfin] Streaming URL:          https://website.com/123/456/45678
2024-10-04 07:05:46 [Threadfin] FFMPEG:                 Processing data
2024-10-04 07:05:46 [Threadfin] Streaming Status:       Receive data from FFMPEG
2024-10-04 07:05:48 [Threadfin] FFMPEG log:             [in#0 @<PHONE_NUMBER>0603c0] Error opening input: Server returned 404 Not Found
2024-10-04 07:05:48 [Threadfin] Streaming Status:        Channel: Paramount Network (Clients: 0)
2024-10-04 07:05:48 [Threadfin] [ERROR] FFMPEG error (Streaming was stopped by third party transcoder (FFmpeg / VLC)) - EC: 1204
2024-10-04 07:05:48 [Threadfin] FFMPEG log:             Error opening input file https://website.com/123/456/45678.
2024-10-04 07:05:48 [Threadfin] FFMPEG log:             Error opening input files: Server returned 404 Not Found
2024-10-04 07:05:48 [Threadfin] Streaming Status:       Channel: Paramount Network - No client is using this channel anymore. Streaming Server connection has ended

That is correct. I didn't want to give access to my stream.

Also experiencing the same problem with exactly the same errors

Another example of this not working. Single channel tuner with a valid backup defined won't fail over to the backup when a second client tries to use it. Backup funcationality is definietly none-functional.
2024/11/01 10:54:21 [Threadfin] Buffer:                 true [ffmpeg]
2024/11/01 10:54:21 [Threadfin] Channel Name:           UK: TNT SPORTS 2 4K
2024/11/01 10:54:21 [Threadfin] Client User-Agent:      VLC/3.0.0-git LibVLC/3.0.0-git
2024/11/01 10:54:22 [Threadfin] Streaming Status:       Playlist: IPTV-2 - Tuner: 1 / 1
2024/11/01 10:54:22 [Threadfin] FFMPEG path:            /usr/bin/ffmpeg
2024/11/01 10:54:22 [Threadfin] Streaming URL:          http://xyz.com
2024/11/01 10:54:22 [Threadfin] FFMPEG:                 Processing data
2024/11/01 10:54:22 [Threadfin] Streaming Status:       Receive data from FFMPEG
2024/11/01 10:54:22 [Threadfin] FFMPEG log:             [h264 @ 0x62297d12d2c0] non-existing SPS 0 referenced in buffering period
2024/11/01 10:54:23 [Threadfin] Streaming Status:       Buffering data from FFMPEG
2024/11/01 10:55:05 [Threadfin] Buffer:                 true [ffmpeg]
2024/11/01 10:55:05 [Threadfin] Channel Name:           UK: TNT SPORTS 1 4K
2024/11/01 10:55:05 [Threadfin] Client User-Agent:      VLC/3.0.0-git LibVLC/3.0.0-git
2024/11/01 10:55:05 [Threadfin] Streaming Status:       Playlist: IPTV-2 - No new connections available. Tuner = 1

Another example of this not working. Single channel tuner with a valid backup defined won't fail over to the backup when a second client tries to use it. Backup funcationality is definietly none-functional.
2024/11/01 10:54:21 [Threadfin] Buffer: true [ffmpeg] 2024/11/01 10:54:21 [Threadfin] Channel Name: UK: TNT SPORTS 2 4K 2024/11/01 10:54:21 [Threadfin] Client User-Agent: VLC/3.0.0-git LibVLC/3.0.0-git 2024/11/01 10:54:22 [Threadfin] Streaming Status: Playlist: IPTV-2 - Tuner: 1 / 1 2024/11/01 10:54:22 [Threadfin] FFMPEG path: /usr/bin/ffmpeg 2024/11/01 10:54:22 [Threadfin] Streaming URL: http://xyz.com 2024/11/01 10:54:22 [Threadfin] FFMPEG: Processing data 2024/11/01 10:54:22 [Threadfin] Streaming Status: Receive data from FFMPEG 2024/11/01 10:54:22 [Threadfin] FFMPEG log: [h264 @ 0x62297d12d2c0] non-existing SPS 0 referenced in buffering period 2024/11/01 10:54:23 [Threadfin] Streaming Status: Buffering data from FFMPEG 2024/11/01 10:55:05 [Threadfin] Buffer: true [ffmpeg] 2024/11/01 10:55:05 [Threadfin] Channel Name: UK: TNT SPORTS 1 4K 2024/11/01 10:55:05 [Threadfin] Client User-Agent: VLC/3.0.0-git LibVLC/3.0.0-git 2024/11/01 10:55:05 [Threadfin] Streaming Status: Playlist: IPTV-2 - No new connections available. Tuner = 1

That is not how it was designed, so it wouldnt work that way.
I will be looking into this further but this is very very low on my to do list atm with Kernel stuff taking precedent

Fixed in 1.2.18


Possiblity to use domInjector within Vue scope

Would be nice to be able to use the Plugin out of the Vue scope like this:
Vue.domInjector(...)
This is especially useful when wanting to use this plugin within a store module.
See how its done in https://github.com/tserkov/vue-plugin-load-script

@srubio131 Would you mind if a would take a look and provide a Pull Request by myself?

Using Vue meta now instead.


Reload tabs when the computer resumes

Before submitting, please confirm you've

[x] read and understood our Contributing Guidelines
[x] completed Mattermost Contributor Agreement
[x] executed npm run lint:js for proper code formatting

Please provide the following information:
Summary
Reload tabs when the computer resumes.
If the computer is offline when resuming from sleep, the app doesn't reload any tabs to keep their contents.
Issue link
#461
Test Cases
Tested on macOS 10.12.3
Case 1:

Let the computer sleep.
Resume from sleep.
The app should reload all tabs immediately.

Case 2:

Turn off Wi-Fi or unplug LAN cable.
Let the computer sleep.
Resume from sleep.
The app should NOT reload any tabs immediately.
Connect the computer to a network.
The app should reload all tabs.

Additional Notes
https://circleci.com/gh/yuya-oc/desktop/200#artifacts

@yuya-oc tested on Windows 10
After waking computer from sleep, each tab begins to reload

However, it seems the reloading process takes a really long time -- the page doesn't actually appear until I refresh the tab. Reproduced on the pre-release server and one of our test servers. I attached some console errors that might be relevant

Thanks for catching! I missed that because badges was correctly updated.
I'm not sure the reason why this problem happens, but it's fixed by applying Electron's notes for webview on my Mac. Originally I worked on this at another branch though, I added it to this PR.
https://circleci.com/gh/yuya-oc/desktop/207#artifacts

I seem to be hitting the same issue - the tabs do start to reload, but it seems to take a long time

Interestingly, the tab loads properly for test sites like example.com

and test.com

Hmm...interesting. But I'm not sure. Perhaps it's too early to reload even when the computer is online in resuming.
And unfortunately I found another problem on my Windows 10 desktop. The reloading fails due to ERR_NETWORK_CHANGED error. Long (more than 5 seconds) delay was necessary to avoid it, so the delay might not comfortable.
Just curious, did https://github.com/mattermost/platform/pull/5120 make sense for the original problem?

Yeah, https://github.com/mattermost/platform/pull/5120 is related -- however the PR was included in Mattermost 3.6, and some people reported missing messages on that server.
However, we just had another PR merged (https://github.com/mattermost/platform/pull/5907), which adds a sequence number to WebSocket connections and events -- that sequence is used to determine if any events were missed and run reconnect logic to get that missed data.
So I can check on Monday whether that PR would be sufficient to cover #461

@yuya-oc chatted with Joram - although https://github.com/mattermost/platform/pull/5907 won't be the perfect solution for resolving missing messages, it might be enough for this purpose. So propose keeping this PR as pending until Mattermost v3.8 is released and asking the original issuer to report back whether missing messages continue

@jasonblais Okay. But the patch for webview seems necessary, so I will apply only it later.

Thanks @yuya-oc, sounds good

@yuya-oc Since Mattermost Server v3.8, there haven't been issues with missing messages. Hence, propose closing this PR as well as https://github.com/mattermost/desktop/issues/461

@jasonblais I agree. Thanks for feedback.


Running commands in sequence?

I want to run two commands, namely redis-cli flushall and a custom script node gen.js in sequence. This is my current task:
gulp.task('gen', function (done) {
  run('redis-cli flushall').exec('', function () {
    console.log('calling done after redis')
    run('node gen.js').exec('', function () {
      console.log('calling done after gen.js')
      done();
    })
  });
});

However, I see two issues with that code:

If I want to add more commands, this quickly becomes callback hell. I would like something cleaner as in with Promises, with then.
The result I get is this:

λ gulp gen
[18:22:28] Using gulpfile ~\Documents\app\gulpfile.js
[18:22:28] Starting 'gen'...
calling done after redis
$ redis-cli flushall
OK
calling done after gen.js
[18:22:51] Finished 'gen' after 22 s
$ node gen.js
DB dropped.

...but I expected this:
λ gulp gen
[18:22:28] Using gulpfile ~\Documents\app\gulpfile.js
[18:22:28] Starting 'gen'...
$ redis-cli flushall
OK
calling done after redis
$ node gen.js
DB dropped.
calling done after gen.js
[18:22:51] Finished 'gen' after 22 s

Good idea.
Would love to see a pull request.

Oh, I thought this was already possible and I just wasn't seeing it haha.

Jep. This works.
command()
  .pipe(...)
  .pipe(...)
  .pipe(...)
;

Hmm.. I changed the gulp task to this:
gulp.task('gen', function () {
   return gulp.src('.')
    .pipe(prompt.confirm({
        message: 'Clear Redis and regenerate SQL DB?',
        default: false
    }))
    .pipe(run('redis-cli flushall'))
    .pipe(run('node config/gen.js'))
    .pipe(run('node config/fill_users.js'))
});

And this is what I got. Notice how the order of execution is wrong for the node scripts:
λ gulp gen
[23:09:18] Using gulpfile ~\Documents\app\gulpfile.js
[23:09:18] Starting 'gen'...
? Clear Redis and regenerate SQL DB? Yes
$ redis-cli flushall
OK
$ node config/fill_users.js
finished creating users
$ node config/gen.js
DB dropped.
[23:09:47] Finished 'gen' after 29 s

Not sure if this might be a problem or not, but this is the gen.js script. When run on its own it takes some time.
return .sequelize
  .query('SET FOREIGN_KEY_CHECKS = 0')
  .then(function () {
    return models.sequelize.sync({ force: true })
  })
  .then(function () {
    return models.sequelize.query('SET FOREIGN_KEY_CHECKS = 1')
  })
  .then(function () {
    console.log('DB dropped.');
    process.exit(0);
  })
  .catch(function (err) {
    console.error(err);
    process.exit(-1);
  })


Fix Logo and Readme to enabling it in Helm Hub

Volcano Logo and README not visible in https://hub.helm.sh/charts/volcano/volcano
This PR fixes that.

@k82cn This should fix logo issue in helm hub. Please have a look.


Fixed connection pooling tests for more than one ODBC drivers

This change is

Coverage remained the same at 74.706% when pulling 17fa64ac79c55ce1d52006a9dfc542d1b57f99f5 on yitam:connPooltests into ea6381c34b2078f603b848e2014e8bb5303544e1 on Microsoft:dev.

Codecov Report

Merging #796 into dev will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##              dev     #796   +/-   ##
=======================================
  Coverage   80.06%   80.06%
=======================================
  Files          25       25
  Lines        7325     7325
=======================================
  Hits         5865     5865
  Misses       1460     1460

Continue to review full report at Codecov.

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


Unable to build AAR followed the readme

I tried to build aar based on the readme and also used same facedetectiongpu and modified the build and ran the commond, it showing the below error
using Ubuntu 18.04 on windows virtual box
bazel 3.1.0
sdk version 30.0.1 (from android Studio)
ndk downloaded from given setup script
sdk platform 29
python 3.7.5
please help me to build this thanks in advance
bazel build -c opt --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --fat_apk_cpu=arm64-v8a,armeabi-v7a     //mediapipe/examples/android/src/java/com/google/mediapipe/apps/facedetectiongpu:mp_face_detection_aar
ERROR: /home/ragavendranbala/MediapipeTest/mediapipe/mediapipe/java/com/google/mediapipe/mediapipe_aar.bzl:36:5: Traceback (most recent call last):
File "/home/ragavendranbala/MediapipeTest/mediapipe/mediapipe/examples/android/src/java/com/google/mediapipe/apps/facedetectiongpu/BUILD", line 35
mediapipe_aar(<2 more arguments>)
File "/home/ragavendranbala/MediapipeTest/mediapipe/mediapipe/java/com/google/mediapipe/mediapipe_aar.bzl", line 36, in mediapipe_aar
native.cc_binary(<4 more arguments>)
cc_binary rule 'libmediapipe_jni.so' in package 'mediapipe/examples/android/src/java/com/google/mediapipe/apps/facedetectiongpu' conflicts with existing cc_binary rule, defined at /home/ragavendranbala/MediapipeTest/mediapipe/mediapipe/examples/android/src/java/com/google/mediapipe/apps/facedetectiongpu/BUILD:19:1
ERROR: Skipping '//mediapipe/examples/android/src/java/com/google/mediapipe/apps/facedetectiongpu:mp_face_detection_aar': no such target '//mediapipe/examples/android/src/java/com/google/mediapipe/apps/facedetectiongpu:mp_face_detection_aar': target 'mp_face_detection_aar' not declared in package 'mediapipe/examples/android/src/java/com/google/mediapipe/apps/facedetectiongpu' defined by /home/ragavendranbala/MediapipeTest/mediapipe/mediapipe/examples/android/src/java/com/google/mediapipe/apps/facedetectiongpu/BUILD
WARNING: Target pattern parsing failed.
ERROR: no such target '//mediapipe/examples/android/src/java/com/google/mediapipe/apps/facedetectiongpu:mp_face_detection_aar': target 'mp_face_detection_aar' not declared in package 'mediapipe/examples/android/src/java/com/google/mediapipe/apps/facedetectiongpu' defined by /home/ragavendranbala/MediapipeTest/mediapipe/mediapipe/examples/android/src/java/com/google/mediapipe/apps/facedetectiongpu/BUILD
INFO: Elapsed time: 0.268s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (1 packages loaded)

The error is '//mediapipe/examples/android/src/java/com/google/mediapipe/apps/facedetectiongpu:mp_face_detection_aar': no such target. Basically, Bazel doesn't find mp_face_detection_aar target in mediapipe/examples/android/src/java/com/google/mediapipe/apps/facedetectiongpu. Can you show us how you write the mediapipe_aar rule and where you put it?

inside /mediapipe/examples/android/src/java/com/google/mediapipe/apps/facedetectiongpu
at this location there is an build file and i modified that file

@jiuqiant thanks for helping to fix this I have build an aar by creating a new folder and new build file. But I don't know how to add the calculators for other example

@jiuqiant thanks for helping to fix this. I have built an aar by creating a new folder and new build file. But I don't know how to add the
correct calculator files needed for other examples. Please help me to find the exact files.

Can you please explain how you fixed the issue? Where did you create a new folder and BUILD file, and what is inside the BUILD file? Can you please show me the BUILD file you created? Thank you.

@AlexYiningLiu asked:

Can you please explain how you fixed the issue? Where did you create a new folder and BUILD file, and what is inside the BUILD file? Can you please show me the BUILD file you created? Thank you.

I'm not @jiuqiant but I did something similar.
I created a new BUILD file in new subdirectory
mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example
with contents:
load("//mediapipe/java/com/google/mediapipe:mediapipe_aar.bzl", "mediapipe_aar")
mediapipe_aar(
name = "mp_hand_tracking_aar",
calculators = ["//mediapipe/graphs/hand_tracking:mobile_calculators",
"//mediapipe/gpu:image_frame_to_gpu_buffer_calculator"],
)
Change the name and calculators to suit your needs.
See documentation at:
https://github.com/google/mediapipe/blob/master/docs/getting_started/android_archive_library.md
https://github.com/google/mediapipe/blob/master/docs/getting_started/faq.md
etc.

Thanks for your response. After you created the custom AAR file, how did you put it to use? I plan on putting it inside the libs folder of the app I'm running which is the mediapipe_multihand_tracking_aar_example as so:

Thanks for your help.

@AlexYiningLiu asked:

Can you please explain how you fixed the issue? Where did you create a new folder and BUILD file, and what is inside the BUILD file? Can you please show me the BUILD file you created? Thank you.

I'm not @jiuqiant but I did something similar.
I created a new BUILD file in new subdirectory
mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example
with contents:
load("//mediapipe/java/com/google/mediapipe:mediapipe_aar.bzl", "mediapipe_aar")
mediapipe_aar(
name = "mp_hand_tracking_aar",
calculators = ["//mediapipe/graphs/hand_tracking:mobile_calculators",
"//mediapipe/gpu:image_frame_to_gpu_buffer_calculator"],
)
Change the name and calculators to suit your needs.
See documentation at:
https://github.com/google/mediapipe/blob/master/docs/getting_started/android_archive_library.md
https://github.com/google/mediapipe/blob/master/docs/getting_started/faq.md
etc.

Thanks for you response. I am receiving the error

There is a BUILD file in mediapipe/gpu so I am unsure why this occurs. Please let me know if you have any idea. Thanks.

Try removing the line "//mediapipe/gpu:image_frame_to_gpu_buffer_calculator" that I mentioned I had in my
aar_example/BUILD
You might not need that in your case

Try removing the line "//mediapipe/gpu:image_frame_to_gpu_buffer_calculator" that I mentioned I had in my
aar_example/BUILD
You might not need that in your case

Thanks again for reply. I figured out the cause of that error and was able to fix it by replacing a '/' with a ':' in the BUILD file. However, I am now receiving a C++ compilation error:
ERROR: /home/alex715/mediapipe/mediapipe/calculators/tflite/BUILD:269:11: C++ compilation of rule '//mediapipe/calculators/tflite:tflite_converter_calculator' failed (Exit 1) clang failed: error executing command external/androidndk/ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -gcc-toolchain external/androidndk/ndk/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64 -target ... (remaining 138 argument(s) skipped)

Use --sandbox_debug to see verbose messages from the sandbox
Target //mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example:mp_multi_hand_aar failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 6692.317s, Critical Path: 6020.05s
INFO: 1621 processes: 1565 linux-sandbox, 56 worker.
FAILED: Build did NOT complete successfully

I got this error after nearly 2 hours of compilation time. I am running this on a Ubuntu virtual machine. I just need want to compile an AAR file to put in the multihandtracking AAR example's libs directory found here: https://github.com/jiuqiant/mediapipe_multi_hands_tracking_aar_example


Readme for the Testing - detailed instructions for functional testing usage and addition of new tests

🗣 Description
Create a high-level Readme for the testing folder with detailed instructions for:

Functional Testing - Structure and High Level Details
Functional Testing Usage with Examples
Functional Testing - Adding New Test Cases with Examples

💭 Motivation and context
closes #735
🧪 Testing

Run functional tests for a product using the instructions
Add a new test using the instructions

✅ Pre-approval checklist

[x] This PR has an informative and human-readable title.
[x] PR targets the correct parent branch (e.g., main or release-name) for merge.
[x] Changes are limited to a single goal - eschew scope creep!
[x] Changes are sized such that they do not touch excessive number of files.
[x] All future TODOs are captured in issues, which are referenced in code comments.
[x] These code changes follow the ScubaGear content style guide.
[x] Related issues these changes resolve are linked preferably via closing keywords.
[x] All relevant type-of-change labels added.
[x] All relevant project fields are set.
[x] All relevant repo and/or project documentation updated to reflect these changes.
[x] All automated checks (e.g., linting, static analysis, unit/smoke tests) passed.

✅ Pre-merge checklist

[ ] PR passed smoke test check.

[ ] Feature branch has been rebased against changes from parent branch, as needed
Use Rebase branch button below or use this reference to rebase from the command line.

[ ] Resolved all merge conflicts on branch

[ ] Notified merge coordinator that PR is ready for merge via comment mention

✅ Post-merge checklist

[ ] Feature branch deleted after merge to clean up repository.
[ ] Verified that all checks pass on parent branch (e.g., main or release-name) after merge.

Pushed to halibut so that we have more time to make content revisions and complete a review.

In the instructions where Pester is installed and you have prerequisites, you are missing a step to install Selenium. That is before running the Update Selenium script.
Install-Module Selenium

I noticed in the section where we tell the reader to "kill any ChromeDriver.exe processes", I found that those processes are sometimes hidden under the Powershell app and you cannot locate them in the main process list. Although the ChromeDriver.exe is not shown in my screenshot below, that is where I saw an instance of it earlier. Add this information to the instructions.

Today when I tried running the functional tests, I was a getting a random error (forgot to take a screenshot) that was unrelated to any of our code. Selenium just wasn't working right for whatever reason and I cannot recall this ever happening before. I updated the ChromeDriver.exe but that didn't fix the problem so I ended up having to do what's below and now I can run the orchestrator again:
uninstall-module Selenium
install-module Selenium
./Testing/Functional/SmokeTest/UpdateSelenium.ps1

The README created for this PR is oriented to users (i.e. developers, testers) that want to execute the test orchestrator. I think you should add a couple of sentences at the top that makes this more obvious and change the title of the document to ScubaGear Functional Testing Automation for Developers and Testers.
On that note, I had developed a couple of ancillary guides for us admins which are related to setting up the infrastructure (service principals, user provisioning, etc.). Can we add a link to those GitHub issues in this document for easy reference?

How to setup the permissions required to execute the automated functional test orchestrator #589

How to setup a tenant with the necessary AAD conditional access policies to run the Automated Functional Test Orchestrator #591

In your Functional Testing Usage section make it clear that the addition of the Thumbprint field to the -Data parameter is what makes the orchestrator run in service principal mode and that the thumbprint must correspond to the end user's client certificate which should be installed on the machine running the test plans.

Throughout the document I think it would be better to use the voice "you need to do this" instead of the third person "the user should do this". This makes the document easier to follow as a set of instructions directed at the reader.

Replace "AAD functional testing in service principal mode by filtering specific test cases" with "When developing or if you are testing pull requests you may need to execute just a single baseline policy in the respective YAML test plan file. To do that you will add Pester filter tags to the PesterConfig parameter. See an example to execute the policy MS.AAD.2.1v1 test cases below."

"Product functional tests are being run for multiple product-tenant combinations. Development team should check the successful completion of these runs for any regressions. "
It is not clear when the development team should check this? Is this more the job of the operations team?
Also, for performing regression tests, one option that a developer can exercise is to run the nightly product functional test via the GitHub actions against their branch although since that runs all of the products and all of the test cases, I think we should determine a more efficient way to do that if we ever want this option.

I don't see a reference to the sample functional test execution script that is reference in this comment. That might make it easier for developers.
https://github.com/cisagov/ScubaGear/issues/592#issuecomment-1779479798

New Functional tests section. "Ensure that any changes to HTML report output are tested." Not sure what the developer is supposed to do here and how those changes would be tested.
Also, for "Validate that all new functional tests pass on CI for the branch before creating the PR" not sure what CI stands for.

When reviewing this PR, please note that there are 2 branches that begin with "735".  The correct branch to review is this one:
https://github.com/cisagov/ScubaGear/tree/735-FunctionalTests-Documentation

In the instructions where Pester is installed and you have prerequisites, you are missing a step to install Selenium. That is before running the Update Selenium script. Install-Module Selenium

Added


Sync up from adobe/express-website to adobecom/express

I really wanna get the main synched, so then we can get the stage synched, and then we can port template-list and templates.js performance improvements again back from adobe/express-website to adobecom/express 😢 this is kindda blocking my and @qiyundai 's work at the moment

https://github.com/adobecom/express/tree/MWPW-132431-from-main is created from https://github.com/adobecom/express
Post merging, individual files fstab.yaml file and config.json will be modified.


async uploads

Upload media async

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.Aayush Chhabra seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.


Problem With Forge and minecraft 1.10

JVM_OPTS=-Xmx5024M -Xms5024M
VERSION=1.10
FORGEVERSION=<IP_ADDRESS>0
TYPE=FORGE
EULA=TRUE
Above is what i have set as my variables but for some reason it dont load forge but just loads vanilla. tryed checking the log (via docker logs -f mc) but the log dont show any errors about loading forge only thing it shows is this

Downloading minecraft_server.1.10.jar
[20:24:23] [Server thread/INFO]: Starting minecraft server version 1.10
[20:24:23] [Server thread/INFO]: Loading properties
[20:24:23] [Server thread/INFO]: Default game type: SURVIVAL
[20:24:23] [Server thread/INFO]: Generating keypair
[20:24:23] [Server thread/INFO]: Starting Minecraft server on *:25565
[20:24:23] [Server thread/INFO]: Using epoll channel type
[20:24:23] [Server thread/WARN]: Failed to load user banlist:
java.io.FileNotFoundException: banned-players.json (No such file or directory)
at java.io.FileInputStream.open(Native Method) ~[?:1.7.0_65]
at java.io.FileInputStream.(FileInputStream.java:146) ~[?:1.7.0_65]
at com.google.common.io.Files.newReader(Files.java:86) ~[minecraft_server.1.10.jar:?]
at mt.g(SourceFile:136) ~[minecraft_server.1.10.jar:?]
at lc.z(SourceFile:99) [minecraft_server.1.10.jar:?]
at lc.(SourceFile:25) [minecraft_server.1.10.jar:?]
at ld.j(SourceFile:185) [minecraft_server.1.10.jar:?]
at net.minecraft.server.MinecraftServer.run(SourceFile:428) [minecraft_server.1.10.jar:?]
at java.lang.Thread.run(Thread.java:745) [?:1.7.0_65]
[20:24:23] [Server thread/WARN]: Failed to load ip banlist:
java.io.FileNotFoundException: banned-ips.json (No such file or directory)
at java.io.FileInputStream.open(Native Method) ~[?:1.7.0_65]
at java.io.FileInputStream.(FileInputStream.java:146) ~[?:1.7.0_65]
at com.google.common.io.Files.newReader(Files.java:86) ~[minecraft_server.1.10.jar:?]
at mt.g(SourceFile:136) ~[minecraft_server.1.10.jar:?]
at lc.y(SourceFile:91) [minecraft_server.1.10.jar:?]
at lc.(SourceFile:27) [minecraft_server.1.10.jar:?]
at ld.j(SourceFile:185) [minecraft_server.1.10.jar:?]
at net.minecraft.server.MinecraftServer.run(SourceFile:428) [minecraft_server.1.10.jar:?]
at java.lang.Thread.run(Thread.java:745) [?:1.7.0_65]
[20:24:23] [Server thread/WARN]: Failed to load operators list:
java.io.FileNotFoundException: ops.json (No such file or directory)
at java.io.FileInputStream.open(Native Method) ~[?:1.7.0_65]
at java.io.FileInputStream.(FileInputStream.java:146) ~[?:1.7.0_65]
at com.google.common.io.Files.newReader(Files.java:86) ~[minecraft_server.1.10.jar:?]
at mt.g(SourceFile:136) ~[minecraft_server.1.10.jar:?]
at lc.A(SourceFile:107) [minecraft_server.1.10.jar:?]
at lc.(SourceFile:29) [minecraft_server.1.10.jar:?]
at ld.j(SourceFile:185) [minecraft_server.1.10.jar:?]
at net.minecraft.server.MinecraftServer.run(SourceFile:428) [minecraft_server.1.10.jar:?]
at java.lang.Thread.run(Thread.java:745) [?:1.7.0_65]
[20:24:23] [Server thread/WARN]: Failed to load white-list:
java.io.FileNotFoundException: whitelist.json (No such file or directory)
at java.io.FileInputStream.open(Native Method) ~[?:1.7.0_65]
at java.io.FileInputStream.(FileInputStream.java:146) ~[?:1.7.0_65]
at com.google.common.io.Files.newReader(Files.java:86) ~[minecraft_server.1.10.jar:?]
at mt.g(SourceFile:136) ~[minecraft_server.1.10.jar:?]
at lc.C(SourceFile:123) [minecraft_server.1.10.jar:?]
at lc.(SourceFile:30) [minecraft_server.1.10.jar:?]
at ld.j(SourceFile:185) [minecraft_server.1.10.jar:?]
at net.minecraft.server.MinecraftServer.run(SourceFile:428) [minecraft_server.1.10.jar:?]
at java.lang.Thread.run(Thread.java:745) [?:1.7.0_65]
[20:24:23] [Server thread/INFO]: Preparing level "world"
[20:24:23] [Server thread/INFO]: Preparing start region for level 0
[20:24:24] [Server thread/INFO]: Preparing spawn area: 10%
[20:24:25] [Server thread/INFO]: Preparing spawn area: 26%
[20:24:26] [Server thread/INFO]: Preparing spawn area: 44%
[20:24:27] [Server thread/INFO]: Preparing spawn area: 63%
[20:24:28] [Server thread/INFO]: Preparing spawn area: 82%
[20:24:29] [Server thread/INFO]: Done (6.276s)! For help, type "help" or "?"

I think you actually found a legit issue; however, my observed output is different. With the compose file:
version: '2'

services:
  minecraft:
    image: itzg/minecraft-server
    ports:
      - "25565:25565"
    environment:
      EULA: "TRUE"
      JVM_OPTS: "-Xmx5024M -Xms5024M"
      VERSION: "1.10"
      TYPE: "FORGE"

It's not properly downloading (or something) the Forge file according to the output:
Recreating issue91_minecraft_1
Attaching to issue91_minecraft_1
minecraft_1  | usermod: no changes
minecraft_1  | Switching to user 'minecraft'
minecraft_1  | Checking version information.
minecraft_1  | Checking type information.
minecraft_1  | Checking Forge version information.
minecraft_1  | Downloading forge-1.10-<IP_ADDRESS>0-installer.jar ...
minecraft_1  | Installing forge-1.10-<IP_ADDRESS>0-universal.jar
minecraft_1  | Error: Unable to access jarfile forge-1.10-<IP_ADDRESS>0-installer.jar
minecraft_1  | Error: Unable to access jarfile forge-1.10-<IP_ADDRESS>0-universal.jar

Ran into the same problem as you itzg. Same output:
minecraft |
minecraft | Downloading forge-1.10--installer.jar ...
minecraft | Installing forge-1.10--universal.jar
minecraft | Error: Unable to access jarfile forge-1.10--installer.jar
minecraft | Error: Unable to access jarfile forge-1.10--universal.jar

I can confirm this is still an issue.

@c650 , @Snorremd , @Alacard  it has taken me forever, but I finally have conquered the different URL and launcher variants especially to fix the download of 1.10. Please pull the latest itzg/minecraft-server and this should now work properly.


Arithmetic Sequence Calculator and Geometric Sequence Calculator feature

Description
It will allow user to calculate the sum of terms, given the first term, common difference, and number of terms in the given Arithmetic sequence(AP) or Geometric Sequence(GP).
Screenshots
No response
Checklist

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

Code of Conduct

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

Do you want to create AP and GP merged in one calculator ? @Dhairya1Gupta

No it will have two different div one for AP calculations and one for GP calculations @Rakesh9100

What will be the short name of this calc you will keep @Dhairya1Gupta

AP Calculator and GP Calculator respectively @Rakesh9100

Okay proceed @Dhairya1Gupta

assign me this task under swoc 24


SSZ spec: Merkleization - Typo in wording

In simple-serialize.md, within the Merkelization section it says:
We now define Merkleization hash_tree_root(value) of an object value recursively:

merkleize(pack(value)) if value is a basic object or a vector of basic objects.

This part should exclude bitvectors as they are dealt with separately.
A suggested wording to correct this typo could be:
merkleize(pack(value)) if value is a basic object or a vector of basic objects, excluding bitvectors.

The case for basic lists should also be amended to exclude bitlists, which are also dealt with separately. Hence
mix_in_length(merkleize(pack(value), limit=chunk_count(type)), len(value)) if value is a list of basic objects.
should read:
mix_in_length(merkleize(pack(value), limit=chunk_count(type)), len(value)) if value is a list of basic objects, excluding bit lists.

Bitvectors and bitlists are not considered to be part of "basic" lists and vectors category. Bitlists have a special delimiter bit in serialization, and basic element types are all aligned to bytes. Adding "excluding" may clarify it, but at the same time it gives the impression they would be included otherwise, while they should not be.

@protolambda Thank you for the reply. My thinking was that when it says if value is a basic object ... that it was referring to a basic type of either a boolean or uintN, and so when the rest of the sentence said or a vector of basic objects I read it in the same way as if it said or a vector of booleans or uintNs - hence the suggestion to exclude. Can I check that the initial reference to a basic object is meant to be include a boolean? Such that a boolean would be packed using the pack function rather than pack_bits?

There are two ways to represent a series of booleans: List[boolean, N] and Bitlist[N], these are different.
A List will pack basic element types, but does so on a byte level, without any special information about the element type except 1. if it's fixed-length or not, and 2. its byte length. One boolean is serialized as a single byte, so it takes one byte in the list. Also note that empty lists can be serialized as zero bytes thanks to this. A bitlist has a delimiter bit however, which forces a minimum of 1 byte. The one byte per element minimum in hash-tree-root of a regular list is mostly for consistency with serialization.
Because this is rather inefficient, and bitfields have other desired use cases as well (big integers, bitshifts, etc.), a separate bitlist type was introduced. And the same thing applies to Vector[boolean, N] vs Bitvector[N].
So yes, that's why List/Vector uses pack and Bitlist/Bitvector uses pack_bits

@protolambda Thank you for the clarification, the extra detail helps. When I thought about a List[boolean,N] I just assumed it would be implemented as a Bitlist[N] and so read the types as equivalent. Two final queries if that is ok. 1. Would a List[boolean, N] ever be used? Or rather, should it be considered redundant? 2. I just wanted to check that a single boolean is its own type and not a bitvector[1]?
Thank you.

Would a List[boolean, N] ever be used?

If you need to generalize something, some situaation where you can have any element type, and the list is small, the ability to use a List[boolean, N] helps avoid inconsistencies and allows you to make more assumptions about sizes (especially the 0-element list case).

Or rather, should it be considered redundant because only bitlists would be used?

No, not redundant. But definitely not preferred in most common situations.

Just wanted to check that a single boolean is its own type and not to be treated as a bitvector[1]

Serialization and merkleization of indiviudal boolean is the same as a Bitvector[1]. But this is more of a coincidence, and I prefer treating a boolean as a separate type, since it matches the boolean definitions in a lot of programming languages as well. E.g. a bool in Go is represented as a single byte, that can be either 0 or 1. Since it does not make sense to try and describe something with bits,  when all memory addresses are in bytes. At the same time, it also does not make sense to support all lengths of a bitvector, except length 1. Thus both are valid.

@protolambda Thank you again. This makes sense, I was assuming that say a List[boolean, N] would just (not sure if it is the correct word to use) default to a Bitlist[N], and similarly for vectors/bitvectors, even though I can appreciate that they would be implemented differently - but so knowing there is an intention to allow both makes the wording in the spec clearer. Thank you.
You mentioned in your comment above:

At the same time, it also does not make sense to support all lengths of a bitvector, except length 1.

I am not sure if I have missed something, but I wanted to ask if you could please clarify what lengths of a bitvector aren't supported? I read the spec as that for a Bitvector[N], N could be anything greater than 0? Have I missed something? I haven't been able to find anything in py-ssz to restrict N for Bitvectors, other than N > 0, and so I thought I should check.
I wanted to also note that I saw your new issue #1901 and I will post any further queries to that repo, but just thought it made sense to finish this thread here.
Thank you.

clarify what lengths of a bitvector aren't supported?

Every length is supported, except 0 because bitvectors are fixed-length and we cannot have 0-length fixed-length data. Sorry if that previous comment was confusing, I was thinking of what it would be like if we tried to remove bitvector[1] in favor of boolean, but that would just be weird.

that is ok?

Yes no problem, feel free to make as many issues you like if you see more issues, the more critical ones may still be worth resolving before we shift to the new ssz specs repo. That said, any help with polishing the new repo, and going through the edge cases in the longer (but hopefully more clear) descriptions is appreciated. Then once there is a more complete transition plan, and ethereum/eth2.0-ssz or something similar is set up on github, we can move future SSZ discussion there.

For now, while the future of the other SSZ repo is uncertain (painful discussion about formatting and spec style), shall we get the bitlist/vectors vs basic list/vector thing clarified in the current spec? I could open a PR, or do you want to give it a try, to get started with a small PR to the specs?

@protolambda great, thank you. It has taken me a little while to get to where I feel like I understand how the different parts fit together and so being able to ask some questions to clarify a few more things will be great - I am planning to add more notes to our formal verification project to help with understanding background/motivations/intentions - and so hopefully this will also be of help more broadly :)
And well, I was reading over one of your earlier replies and hoped to clarify a couple more things:

A List will pack basic element types, but does so on a byte level, without any special information about the element type except 1. if it's fixed-length or not, and 2. its byte length.

I wasn't sure if I was reading this correctly. When you make the reference to special information about whether it is fixed-length or not I wasn't sure if this was still with reference to lists of basic element types or lists more generally? (as basic element types are always fixed-length??)

One boolean is serialized as a single byte, so it takes one byte in the list. Also note that empty lists can be serialized as zero bytes thanks to this.

Can I just confirm - Is it just that empty lists can be serialized to zero bytes because that don't need anything extra, like the delimiter needed for bitlists? (i.e. I wasn't sure if I am reading the thanks to this reference correctly.)

Thank you :)

as basic element types are always fixed-length??

You are right, I was talking about lists in general there. For lists with a basic element type, the element type is always fixed length, and so you only have to look at the element byte length to handle the serialization.

empty lists can be serialized to zero bytes because that don't need anything extra, like the delimiter needed for bitlists?

Exactly, the information of the "scope" (the available bytes to decode a value, or the length of the resulting bytes when encoding) is enough to say everything about a basic list: if each element is A bytes, and we have B elements in the list, then the result is simply A*B bytes long, which will be the "scope" when decoding it. And all we need for later decoding is to divide the "scope" by A to get B. For that to be valid we will have to check if the scope is a multiple A, otherwise the input data would be incomplete, and thus invalid. (And more decoding checks, such as checking the list limit, are all the same as with the other list-like types).
And to clarify some more: lists of complex but fixed-length elements work the same w.r.t. scope and length, except you just need to compute the length of the element type first. Merkleization is different however, since the non-basic types utilize the full 32 bytes of their hash-tree-root, so there is no such thing as packing them together into 32 bytes.
Long story short, SSZ serialization is really just recursive concatenation, sometimes some offsets to deal with the dynamic-length types, and a few type-specific things like bitlist delimiter bits, or selecting the value in an union.

For now, while the future of the other SSZ repo is uncertain (painful discussion about formatting and spec style), shall we get the bitlist/vectors vs basic list/vector thing clarified in the current spec? I could open a PR, or do you want to give it a try, to get started with a small PR to the specs?

@protolambda I think I was typing my comment when you posted this and so only just realised that I missed this comment!
Sure, that would be great. In some ways I can't believe that it didn't occur to me that the reason the spec is worded that way is because of both, say, Vector[boolean,N] and Bitvector[N] being valid, it seems obvious now!! And so yes, I would be happy to have a go at a PR if that is ok. I will keep it minimal, and certainly please let me know if you think there is a better way.

closed via #1912


refactor: use vite-node to load globalSetup

and add test launching a vite instance
suggested by @antfu on discord
related: #522

addition of .gitattributes and .editorconfig  was done to enforce LF line endings on all platforms.  see https://github.com/vitejs/vite/pull/5092


Fixes Custom context path

Fixes #653
Exposes jetty.contextPath configuration setting and updates Web Server to serve resources relative to the defined context path setting.
Using the pull request, it is possible to host azkaban at mydomain:8081/azkaban and then use a reverse proxy (such as Apache HTTPD) to server azkaban at mydomain/azkaban along with other web apps on the same server (eg. mydomain/jira).

+1

@bmsq are you still interested in working on this PR? Sorry about the delay.
This seems to be a useful feature although we don't have a need for it now. And testing this change may be tricky since we currently don't have automated UI testing. Can you think of any way to include some automated tests?

why the merge is stop. we need the feature now. what can I do for the merge

Another change that resolves a problem  i've suffered applying this solution to get a custom context path.
Change azkaban-web-server/src/web/js/azkaban/view/job-edit.js (line 32) :
this.projectURL = contextURL + "manager" changed with     this.projectURL = contextURL + "/manager"
Now job-edit is working with custom context path :)


test: add unit testing

Split up in a separate PR to reduce noise and focus on changes if needed.

Too hard to fix extracting the change into a new PR.


Improve (remove?) Harmony facade (and/or provide better examples)

The whole IPatch/PatchBase infrastructure (or possibly it's lack of examples) feel like a very limited facade over Harmony.
Most (all?) current patches make exclusive use of the Harmony.Patch method to apply changes.
There's an entire additional surface to the Harmony API that is ignored by this:

[HarmonyPriority] - you can set where in the order of multiple patches per method a patch is to be applied
[HarmonyBefore]/[HarmonyAfter]/ - you explicitly set which patches to apply before or after a certain patch.
The entire attributed syntax for patching via [HarmonyPatch] - you don't have to do method lookups yourself

Example:
  public sealed class MaxFoodVarietyPartyMoralePatch : PatchBase<MaxFoodVarietyPartyMoralePatch> {

    public override bool Applied { get; protected set; }

    [HarmonyPatch]
    public static class Patches {
        private static Lazy<MethodInfo> lzTarget = new Lazy<MethodInfo>(
            () => AccessTools.Method(typeof(DefaultPartyMoraleModel), "CalculateFoodVarietyMoraleBonus"))

        [HarmonyTargetMethod]
        public static MethodInfo Target() => lzTarget.Value

        [HarmonyPostfix]
        public static void AddExtraMorale(MobileParty party, ref ExplainedNumber result) {
          if (party.ItemRoster.FoodVariety > 10) {
            result.Add(party.ItemRoster.FoodVariety - 4f, GameTexts.FindText("str_food_bonus_morale", (string) null));
          }
        }
    }

    public override IEnumerable<MethodBase> GetMethodsChecked() {
      yield return Patches.Target();
    }

    private static readonly byte[][] Hashes = {
      new byte[] {
        // e<IP_ADDRESS>785
        0x7B, 0x08, 0xE2, 0x53, 0x78, 0x94, 0x9A, 0x7A,
        0x5D, 0x36, 0x5F, 0xA4, 0x39, 0xF2, 0xF0, 0xE9,
        0xE5, 0x6E, 0x08, 0x46, 0xD0, 0x30, 0x94, 0x58,
        0x1F, 0xF6, 0x18, 0xBC, 0x19, 0xCC, 0x0C, 0xAB
      }
    };

    public override void Reset() {
    }

    public override bool? IsApplicable(Game game)
      // ReSharper disable once CompareOfFloatsByEqualityOperator
    {
      var patchInfo = Harmony.GetPatchInfo(Patches.Target());
      if (AlreadyPatchedByOthers(Patches.Target()))
        return false;

      var hash = Patches.Target().MakeCilSignatureSha256();
      return hash.MatchesAnySha256(Hashes);
    }

    public override void Apply(Game game) {
      if (Applied) return;

      CommunityPatchSubModule.Harmony.CreateClassProcessor(typeof(Patches)).Patch();
      Applied = true;
    }

  }

Not inherently better or worse than patching via method call, but allows more explicit and fine grained specification of patches.

IPatch and PatchBase don't necessarily use Harmony.
They part of establishing a life-cycle and description pattern for the patches.
They are also used to indicate which methods to generate hashes for (e.g. GetMethodsChecked).
They will in future have other user preference, static analysis, testing components.
There are patches like the very first patch, for Disciplinarian, that do not use Harmony at all.
There are other attribute-only patches that are applied when PatchAll is invoked, and they are not invoked at the same time as the Patch collection.
I don't know for sure, but I think having a nested class inside of a patch will not avoid the PatchAll invocation of the patch.
The use of AccessTools instead of System.Reflection is user preference.

Well yes, if IPatch & PatchBase have architecture/lifetime functionality then they indeed serve a purpose.
I'd argue then that they are possibly misnamed. "Patch" as a concept is already in use for actual IL patches via Harmony. And if the purpose of the interface & class is to do something more than patching (or even not anything to any actual patching at all), then maybe call things "Change"/"Functionality"/"Modification"/"Feature" ?
Again, of those "Modification" is already blocked by the concept of the whole "Mod". "Change" seems very bland... I think "Functionality" is equally non-descript. Which leaves "Feature"...
Ultimately the name could be anything, but I think the double use of the same term for multiple concepts is confusing in the design.

I just checked again, and both on the direct Harmony.Patch overloads and via the indirect Harmony.CreatePatchProcessor there are no options to specify patch priorities (see https://harmony.pardeike.net/articles/priorities.html ). I understand that "playing nice with others" is not currently too high on your priority list, but there may be actual "sub-patches" where multiple harmony patches are to be applied to the same method. And there may come a case where those patches need to happen in a certain order. Specifying priorities is the only way to guarantee orders here.
Furthermore there are additional steps (Prepare, TargetMethod[s], Cleanup) which can be performed via attributed patching.
There is also some semi advanced stuff that can be at least easier to understand via attributed patching (adding auto mapped private class fields into pre/postfixes without them having assanine parameter names).
But yes attributed patching will be picked up via (careless) use of harmony.PatchAll(). That should at least be harmony.PatchAll(fooAssembly) or even harmony.CreatePatchProcessor(typeof(PatchOwner)).Patch().
That would need examples & explanations.

As for

If another mod wishes to apply a patch before we apply a patch, we opt out by default.

 It would be trivial to create a tiny mod using Harmony which makes all implementations of PatchBase.IsApplicable always just return true.

Well yes, if IPatch & PatchBase have architecture/lifetime functionality then they indeed serve a purpose.
I'd argue then that they are possibly misnamed. "Patch" as a concept is already in use for actual IL patches via Harmony. And if the purpose of the interface & class is to do something more than patching (or even not anything to any actual patching at all), then maybe call things "Change"/"Functionality"/"Modification"/"Feature" ?

Uhh... splitting hairs here. Sure. I don't know. The mod was originally named Community Patch and had IPatch before introducing Harmony. Chicken and egg, personal preference, all come into play here. If there's a better name that's fine, but I think all of those ("Change"/"Functionality"/"Modification"/"Feature") don't work. I'm open to more suggestions.

I just checked again, and both on the direct Harmony.Patch overloads and via the indirect Harmony.CreatePatchProcessor there are no options to specify patch priorities (see https://harmony.pardeike.net/articles/priorities.html ).
I understand that "playing nice with others" is not currently too high on your priority list, but there may be actual "sub-patches" where multiple harmony patches are to be applied to the same method. And there may come a case where those patches need to happen in a certain order. Specifying priorities is the only way to guarantee orders here.

HarmonyMethod exposes priority as a public member. When manually applying patches, we can change it before passing in the HarmonyMethod to the prefix/postfix/transpiler/finalizer arguments.
See HarmonyMethod.cs.
As far as "playing nice with others," it is high on the priority list.

Furthermore there are additional steps (Prepare, TargetMethod[s], Cleanup) which can be performed via attributed patching.
There is also some semi advanced stuff that can be at least easier to understand via attributed patching (adding auto mapped private class fields into pre/postfixes without them having assanine parameter names).

 I haven't gotten this feedback from any current developers actively working on the project. To which individual asinine parameter names are you referring to?

But yes attributed patching will be picked up via (careless) use of harmony.PatchAll(). That should at least be harmony.PatchAll(fooAssembly) or even harmony.CreatePatchProcessor(typeof(PatchOwner)).Patch().
That would need examples & explanations.
As for

If another mod wishes to apply a patch before we apply a patch, we opt out by default.

 It would be trivial to create a tiny mod using Harmony which makes all implementations of PatchBase.IsApplicable always just return true.

I'm not sure where you're going with this, but yeah you could do that, or just check out the project and take out the IsApplicable check and make your own build, but why would you do that?

FTR
The IPatch / PatchBase has several intermediate subclasses now, and are part of target method hash generation


Repetition off by 1

The regex: color: #[0-9A-F]{6};
Erroneous:

Should be:

The path goes through the letters at least once, so we can do that only 5 times more, not 6 times.

invalid request.


feat: add @capacitor-mlkit/selfie-segmentation package

Pull request checklist
Please check if your PR fulfills the following requirements:

[X] The changes have been tested successfully.
[ ] A changeset has been created (npm run changeset).

I have finally implemented the iOS part. However, I was not able to return an absolute path to the temporary image file that can be displayed in the web app. I am not sure what I am doing wrong, maybe you could have a look at that. It works if I send it as base64 encoded data URI.

@trancee LGTM! Can we merge this?

Yes, it should be complete now. Thanks for the refactoring!


Add collections controller

This pull request adds the concept of a 'collection' to the operator. When a resource of kind 'collection' is created, the controller responds by installing the related assets onto the current kubernetes cluster.
For example, the resource:
apiVersion: kabanero.io/v1alpha1
kind: Collection
metadata:
  name: java-microprofile
spec:
  version: 1.0.0

will pull the collection named 'java-microprofile' from the default collections repository. This collection includes a number of Tekton resources. The controller will kubectl apply each of these resources to the current cluster.

We should probably add the new CRD to the owned section of the CSV.  I don't know whether that happens now, or some time in the future when we have version 0.0.2 (or some other version) of the CSV.
https://github.com/kabanero-io/kabanero-operator/blob/master/deploy/olm-catalog/kabanero-operator/0.0.1/kabanero-operator.v0.0.1.clusterserviceversion.yaml