Video stream keepalive

Fixes #806.
This PR is ready for review.
Risk
This PR makes no API changes.
Testing Plan
A unit test uses SdlProxyBase.createOpenGLInputSurface to get a Surface and sends frames sparingly, e.g. once every 5 seconds. The sent H.264 stream must contain NAL units not more than one second apart.
Summary
This PR forces SdlEncoder to send NAL units even if it doesn't have a continuous stream of input frames to compress. This can happen if the client uses createOpenGLInputSurface and doesn't refresh the returned Surface often enough. Not doing so will cause the head unit, running SDL Core, to trigger a video timeout, close the video stream and change the state to HMI Limited.
Changelog
Bug Fixes

Solved issue #806.

CLA

[X] I have signed the CLA

Codecov Report

Merging #808 into develop will decrease coverage by 0.02%.
The diff coverage is 0%.

@@              Coverage Diff              @@
##             develop     #808      +/-   ##
=============================================
- Coverage      42.74%   42.72%   -0.03%
  Complexity      2900     2900
=============================================
  Files            369      369
  Lines          17187    17198      +11
  Branches        1732     1732
=============================================
  Hits            7347     7347
- Misses          9523     9534      +11
  Partials         317      317

Impacted Files
Coverage Δ
Complexity Δ

...n/java/com/smartdevicelink/encoder/SdlEncoder.java
0% <0%> (ø)
0 <0> (ø)
:arrow_down:

Continue to review full report at Codecov.

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


Where to find Supplementary Material?

Appreciating your work very much. But the SM seems to not be available on the arXiv, and I can't find it on the ICLR 2023 website probably for the reason that it has not been set public. Could you tell me where can I get access to the SM of your paper?

Hi Coincidance-Levi,
Supplementary material should be available for download in the OpenReview. You can find the paper in OpenReview website here.
Here is the link I found for you to download the supplementary material directly: https://openreview.net/attachment?id=2RwXVje1rAh&name=supplementary_material
Hope this can help you.

Hi Coincidance-Levi,
I also uploaded a full paper with supp attached in the repo just in case if the OpenReview link is not working.
Cheers,
Yadan

Hi zhuoxiao-chen and Luoyadan!
Thanks for the instant response and help! Thanks for share the OpenReview platform for me to get a further understanding of your work through the rebuttal. Expect to learn more from the materials and discuss deeper.
Best wishes,
Coincidance-Levi


[Bug]: Show and Hide Button is not working

ISSUE NO:#1043
Show and Hide button is working now
https://github.com/khushi-joshi-05/Food-ordering-website/assets/121508628/0ae49287-f43c-4b4e-8b45-10f042d2cb95
If it's not good, please assign me again I will do it better

Please add level labels for this PR


feature Enable period time with cron expr

Proposed changes
Support such grammar
ANALYZE TABLE test WITH CRON "* * * * * ?"

Such job would be scheduled as the cron expr specifie, but natively support minute-level schedule only
Further comments
If this is a relatively large or complex change, kick off the discussion at<EMAIL_ADDRESS>by explaining why you chose the solution you did and what alternatives you considered, etc...

run buildall

run buildall

TeamCity pipeline, clickbench performance test result:
the sum of best hot time: 39.76 seconds
stream load tsv:          450 seconds loaded<PHONE_NUMBER>9 Bytes, about 158 MB/s
stream load json:         19 seconds loaded<PHONE_NUMBER> Bytes, about 118 MB/s
stream load orc:          56 seconds loaded<PHONE_NUMBER> Bytes, about 18 MB/s
stream load parquet:          28 seconds loaded 861443392 Bytes, about 29 MB/s
insert into select:          69.6 seconds inserted 10000000 Rows, about 143K ops/s
https://doris-community-test-1308700295.cos.ap-hongkong.myqcloud.com/tmp/20230704105043_clickbench_pr_172001.html

run buildall

TeamCity pipeline, clickbench performance test result:
the sum of best hot time: 47.65 seconds
stream load tsv:          441 seconds loaded<PHONE_NUMBER>9 Bytes, about 161 MB/s
stream load json:         19 seconds loaded<PHONE_NUMBER> Bytes, about 118 MB/s
stream load orc:          56 seconds loaded<PHONE_NUMBER> Bytes, about 18 MB/s
stream load parquet:          28 seconds loaded 861443392 Bytes, about 29 MB/s
insert into select:          68.2 seconds inserted 10000000 Rows, about 146K ops/s
https://doris-community-test-1308700295.cos.ap-hongkong.myqcloud.com/tmp/20230706121211_clickbench_pr_173764.html

(From new machine)TeamCity pipeline, clickbench performance test result:
the sum of best hot time: 51.62 seconds
stream load tsv:          499 seconds loaded<PHONE_NUMBER>9 Bytes, about 142 MB/s
stream load json:         19 seconds loaded<PHONE_NUMBER> Bytes, about 118 MB/s
stream load orc:          64 seconds loaded<PHONE_NUMBER> Bytes, about 16 MB/s
stream load parquet:          30 seconds loaded 861443392 Bytes, about 27 MB/s
insert into select:          88.3 seconds inserted 10000000 Rows, about 113K ops/s
storage size:<PHONE_NUMBER>1 Bytes
https://doris-community-test-1308700295.cos.ap-hongkong.myqcloud.com/tmp/20230706201748_clickbench_pr_173766.html

run buildall

TeamCity pipeline, clickbench performance test result:
the sum of best hot time: 46.63 seconds
stream load tsv:          440 seconds loaded<PHONE_NUMBER>9 Bytes, about 162 MB/s
stream load json:         20 seconds loaded<PHONE_NUMBER> Bytes, about 112 MB/s
stream load orc:          56 seconds loaded<PHONE_NUMBER> Bytes, about 18 MB/s
stream load parquet:          29 seconds loaded 861443392 Bytes, about 28 MB/s
insert into select:          69.9 seconds inserted 10000000 Rows, about 143K ops/s
https://doris-community-test-1308700295.cos.ap-hongkong.myqcloud.com/tmp/20230706162535_clickbench_pr_173914.html


⚠ Bofrost.at has degraded performance

In 7e8d694, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 1398 ms

Resolved: Bofrost.at performance has improved in 0309f7c after 6 minutes.


Fix for cover message always sending to other players

Reference #112
Current issue:
Login on foundry as 3 users (GM, User 1, User 2).
Try to mark a creature as User 1 with Hide GM info from Cover Report ON
What you expect:
Only the GM and the player that checked the cover should get the message.
What happens:
GM, User 1 and User 2 get the cover info, and if User 2 tries clicking the cover buttons, an error about lacking permission to the message appears.
This check is false for all the users except for the GM, which causes the else statement to execute for them.

Thank you for the writeup, very helpful. Will double check this behavior and likely pull this in directly.


How does Drogon compare to other C++ frameworks?

For the database layer, I am currently weighing up ODB, Oat++, SOCI, cppdb, and sqlpp11 [if sqlpp adds support for CREATE TABLE]. You here at drogon seem to have your own ORM layer, but with only PostgreSQL and MySQL support I'm a little worried from a testing and server-less perspective (really would be nice to see support for an embedded database like SQLite).
For the REST API layer I haven't started investigating, although do remember actix being dethroned and a C++ framework taking its place (which is how I found myself here!).

I am planning to use LLVM (clang, libclang, libtooling) to synchronise [bidirectionally] OpenAPI with C++ code. I've done the same in Python, and WiP for Rust, Swift, Java, Kotlin, and TypeScript.
With my compiler driven approach, I expect people to be able to rapidly produce REST API + db backends with full test and doc coverage, and be able to immediately translate the interfaces across language boundaries (e.g., to frontends, or to rewrite a slow-performing Python backend in C++ or Rust).
Currently focussing on the non-Turing-complete as aspect of this, translating just the interfaces, tests, docs, defaults, and types.

I am writing tools to allow engineers to develop faster, and with higher quality. Will only target one ORM and one REST API layer for C++, at least in the short-term.
So my question is, and I understand that posting here will provide a heavily biased answer, how do I decide between the various C++ frameworks?
Thanks

For the database layer, I am currently weighing up ODB, Oat++, SOCI, cppdb, and sqlpp11 [if sqlpp adds support for CREATE TABLE]. You here at drogon seem to have your own ORM layer, but with only PostgreSQL and MySQL support I'm a little worried from a testing and server-less perspective (really would be nice to see support for an embedded database like SQLite).

Sqlite3 has been supported by Drogon. and recently, the Redis is also supported.

For the REST API layer I haven't started investigating, although do remember actix being dethroned and a C++ framework taking its place (which is how I found myself here!).
I am planning to use LLVM (clang, libclang, libtooling) to synchronise [bidirectionally] OpenAPI with C++ code. I've done the same in Python, and WiP for Rust, Swift, Java, Kotlin, and TypeScript.

With my compiler driven approach, I expect people to be able to rapidly produce REST API + db backends with full test and doc coverage, and be able to immediately translate the interfaces across language boundaries (e.g., to frontends, or to rewrite a slow-performing Python backend in C++ or Rust).
Currently focussing on the non-Turing-complete as aspect of this, translating just the interfaces, tests, docs, defaults, and types.
I am writing tools to allow engineers to develop faster, and with higher quality. Will only target one ORM and one REST API layer for C++, at least in the short-term.

This is really a great plan. There are a lot of requirements of Drogon to support swigger, I'm looking forward to your tool. Does it need some special comments in the C++ code?

So my question is, and I understand that posting here will provide a heavily biased answer, how do I decide between the various C++ frameworks?
Thanks

IMO, performance and rich features are good considerations, I think Drogon is quite competitive in this regards :)

I forgot to mention the MIT license under which Drogon is released that is very liberal and allows to use the framework for commercial projects. In some projects you aren’t allowed to develop in an open source model where licenses like GPL simply wouldn’t work.

I'll try my best to be neutral.

How do I decide between the various C++ frameworks?

For me it's the mix of performance, features and weight. I started using Drogon after I tried a few C++ web frameworks for a commercial HPC project.  Drogon provides the right mix of features to be useful but not too removed from the underlying technology. And it gives the user enough control to fine tune it's performance. Drogon can be really fast used correctly. Once (in development environment) few bugged clients sent >10000 requests/min for an hour. And Drogon handles it smoothly, 0 requests are dropped.
BTW, we are working on drogon2. The API should be mostly compatible while bringing more modern features. There should be better test coverage, more optimizations, greater coroutine support, cleaner error messages, etc.. (and hopefully I can get HTTP/2 working).

I agree with all of the above, in the C++ community, performance can hardly be overstated and any framework worth consideration has to be performant. Thus the conversation shifts to which framework is easier to use, how feature rich is it, how it fits into the current technology ecosystem, does it have an ecosystem of its own and so on.
Going by performance on TFB, choices narrow to either Lithium or Drogon, with Lithium beaing more performant by slim margins except in json serialization. Json library is going to be replaced with a more performant one in drogon2. Next I'll point out that lithium is compiled with PGO, LTO and -march=native while Drogon is not, as can be seen here lithium and here drogon. The performance difference comes down to more aggressive compiler optimizations.
On ease of use and feature richness, I think drogon wins here hands down, outside the core api and registering handlers, as drogon has filters, AOP interface, support for server rendering, and a plugin interface. I've been thinking about writing a plugin that is a dynamic plugin manager, and can at runtime load other plugins. That would enable drogon to be modular after compiling. One drawback I see with Lithium on this front is that while this is also possible with manual implementation it doesn't have a de facto standard, resulting in a roadblock for a community ecosystem of plugins to emerge.
Some benchmarks for reference:
PGO
LTO
Also note, they have synergistic effects, and when combined provide awesome results.

Thanks for your feedback

@an-tao: Great to hear! - Yeah I think I just read past the Postgres and MySQL line (also redis hasn't made the README yet)
In terms of Swagger/OpenAPI, it probably does need some special comments. I always try to get away without, although in this case that would require tracing all possible status codes that could be returned, and all possible outputs (e.g., to match the output to a specific schema, then in the OpenAPI link it to a definitions key in JSON-Schema format).
Which, TBH, would be easier for the programmer if it was all present just under/above the route. Whether in a new C++ syntax, like:
https://github.com/oatpp/example-crud/blob/4aff328/src/controller/UserController.hpp#L68-L74
(+ https://github.com/oatpp/example-crud/blob/4aff328/src/SwaggerComponent.hpp)
Or you can take the approach I do in Python, with special comments like:
https://github.com/offscale/cdd-python/blob/5aaa940/cdd/routes/emit_constants.py#L9-L29

@rbugajewski: nano > emacs & vim :P
Great, yeah I wouldn't be surprised if I start using it for mobile dev. My initial targets are server and desktop (macOS, Windows), but with the open-source nature of my compiler driven approach, the fewer target limitations the better.
Speed FTW
Yeah, on the license side I release all my stuff under (Apache-2.0 OR MIT), a.k.a., the Rust license. So definitely good to see here. I do try and always avoid LGPL, GPL, and AGPL.

@marty1885: I remember giving a C++ back in 2016 on C++ web frameworks, and talking about Crow, and maybe in 2013 was talking about Wt (really was aiming for users who disabled JavaScript back then, and doing crazy things with PDFs on the C++ side).
On the drogon2 side, for the aforementioned code parsers and code generators, can one assume just drogon2—assuming I pick your framework—should be targeted?

@interfector18: In terms of dynamic plugins, I remember playing around with Kore back in the day with C. It's a good concept, the trick is in guaranteeing no clients are dropped during the reload. Lithium does look good also, their ORM isn't too ugly, and the rest of their syntax is nice also (although I don't know how I feel about no Windows support… I need Windows, maybe if they link me the MSVC bug I can take a look and try and fix / workaround)…

But honestly I was a little surprised about how much feedback I've received in half a day from the community here. Amazing! - That alone probably suffices to choose drogon ^_^

I think it will, but with two minor notes. You can count on most APIs to keep working as they are. But drogon2 will be on C++20; mainly to fully utilize coroutine, concepts and reduce the use of SFINAE. Yet clang hasn't move coroutines out of experimental as of clang 12. And we are planing on using a new JSON library due to performance issues (most likely nlohmann/json, boost.json looks attractive). You might want to use GCC for compilation while clang works on coroutines and overload fromRequest to use a non-default JSON parser.
Note of performance: Drogon2 beats lithium without LTO and PGO as of now. I hope it doesn't get slower as we add missing features back.

@marty1885 I don't mind using trunk versions of compilers, just so long as I can support all the target OSs I care about. Which today is macOS, Windows, and Linux. I also have some unrelated projects targeting SunOS (Solaris -> OpenSolaris -> illumos), BSDs (FreeBSD, NetBSD, OpenBSD), iOS, and Android. So when I get around to unification, then it's important to have support there. But if it's as trivial as switching to gcc, then no qualms from my side.
On a side note I'm looking forward to reflection and executors in C++, hopefully by C++23.
Impressive that you're now beating lithium. You're making a damn good case for drogon!

@marty1885 I don't mind using trunk versions of compilers, just so long as I can support all the target OSs I care about. Which today is macOS, Windows, and Linux. I also have some unrelated projects targeting SunOS (Solaris -> OpenSolaris -> illumos), BSDs (FreeBSD, NetBSD, OpenBSD), iOS, and Android. So when I get around to unification, then it's important to have support there. But if it's as trivial as switching to gcc, then no qualms from my side.
On a side note I'm looking forward to reflection and executors in C++, hopefully by C++23.
As a different aside, I write in C89 when I target portability, happy to use the latest standard for my C++ projects though…
Impressive that you're now beating lithium.

Just took another look. Does drogon not have a CREATE TABLE in C++ code? - A quick search brought up https://github.com/an-tao/drogon/blob/ffda846/orm_lib/tests/db_test.cc#L91-L103 (I'm asking because https://drogon.docsforge.com/master/database-general/database-orm/#model-class-interface)
Orm++ does proper schema migration stuff, and Lithium has an odd but usable syntax for its schema definition with C++.

Hi, The operating mechanism of ORM is different from what you think, in Drogon,  we create model classes via drogon_ctl from existing tables, not the other way around.
Please refer to the ORM saction for more information.

@an-tao Yeah I saw that but was a little confused. So you can generate model classes from existing tables, but you can't create new tables from existing model classes? - Is this planned?

Yes. we will discuss your suggestion about creating tables from model classes, @marty1885 , @rbugajewski , @interfector18 do we need this feature?

This is not needed at all, as the database is our only source of truth and I would like to keep it that way. I don’t see any sense to make classes the source of truth, and if both would be the source of truth we would have conflicts and probably new messy issues.
Database migrations are a little bit unfortunate right now, because you need to keep around two SQL files (setup & teardown) for every database change if you want to have VC-like functionality. I thought about adding a couple of simple commands to drogon_ctl which could perform migrations (create, migrate, rollback etc.), and then some kind of simple interface where you could define migrations in C++ code with the Drogon syntax you already know, but I simply didn’t had the time, yet.

@SamuelMarks As you already guessed, the answers provided here may be heavily biased. This is like asking on an Emacs mailing list if Vim is still the best editor, if you understand what I mean slightly_smiling_face
I’ll try to be as objective as possible, maybe this can help you decide which framework is the best one for your use case. But be aware that there were subjective decisions why I settled on Drogon. I cannot tell you a lot about the other C++ frameworks in practice, because I don’t use them, but I can tell you what ultimately led to my decision to use Drogon after evaluating these frameworks, the ecosystem around them, and their documentation. I’ll exclude frameworks in other languages that I used for over two decades and assume that you know what you do if you decide on a C++ web framework.
I successfully use Drogon in a couple of production environments (currently still behind a proxy, but this is something for another discussion).
1. Drogon has a very open development model. Every contribution is welcome, we are pretty open to every PR if it doesn’t affect performance very much (just check this for yourself). In case we decide against integrating something into the main development branch, there is still the possibility to create a plugin from a PR and publish it as a separate project, as Drogon already has a public plugin API. The other projects have a rather more conservative C++ development model, partially development is closed on some Git server, or PRs aren’t as welcome. Personally I’m critical of GitHub in the recent months, but it definitely democratized development and makes it easier to push development forward and create a community around Drogon.

2. We’re a small and in my opinion pretty friendly community. You’ll usually get help fast either in our official Gitter channel, or in case it is a bug, right here in the issue tracker.

3. Combined with the more modern development model compared to some older C++ frameworks, Drogon also tries to use modern C++ idioms. We even already integrated features from the yet to be released upcoming C++ version, so development is full steam ahead as far as time of the main contributors allows (@an-tao and @marty1885 are very active in this regard).

4. I also really like most parts of Drogon’s syntax and prefer it over most of the other C++ frameworks, but this is heavily subjective.

5. Drogon’s batteries included approach is the perfect one in my opinion. In the C++ world I don’t really see a lot of sense to combine multiple frameworks together to something that is as feature-complete as Drogon. In this case I would probably just go with Boost, and write small layers around the dependencies. YMMV and that’s also the reason why so many different frameworks with different approaches exist.

6. While Drogon’s documentation is a little bit convoluted in some places (meaning that you would expect it at another place in the docs), it is rather on the complete side, and additionally gives clear examples. It is also easy to make changes or start discussions in case something is unclear. Furthermore we have tests that also show how you can use the framework and launch your new project based on Drogon.

7. Drogon is fast. While I don’t care about being 1st_place_medal, it is good to know that this framework can scale. Even if you don’t need the scale, you can run Drogon on resource-restricted hardware with a pretty decent performance (this is already successfully done).

8. I use Drogon for web projects and share the same source code with a mobile iOS backend (PostgreSQL on the server, SQLite on the clients). This is of course possible due to C++, but also due to Drogon’s speed. I haven’t ported the backend to Android yet, but there’s at least one person who already successfully runs Drogon on Android devices. This is very versatile in my opinion, and allows code reuse and code sharing (Drogon is also climate-friendly, because it uses less resources for the same tasks wink)

I also use the LLVM toolchain, there shouldn’t be any issues here.
I hope I can ease your decision and wish you good luck with your project, as it looks pretty interesting!

hello sir, you said " there’s at least one person who already successfully runs Drogon on Android devices", can you tell me the right way to run Drogon on Android?  using the "Android Studio + Ndk +CMake" or develop a native c++ source code in Android open source project? or other way...?

@Elwin-zhu Yes, going the NDK / JNI route is what I recommend.

yes, I based the ndk and compile succuess on trantor, but compile failed on drogon because the uuid lib.

What error are you getting? - Probably best creating a new issue…
PS: You can probably just macro the UUID lib and use https://android.googlesource.com/platform/development/+/73a5a3b/ndk/platforms/android-20/include/linux/uuid.h directly. Older solutions: https://stackoverflow.com/q/11888055

Please open a new issue if you think it is a bug/something the devs needs to address. Commenting below other threads is distracting and makes progress tracking difficult.

drogon vs actix
https://www.youtube.com/watch?v=3Sn1tedG9zw

BTW, we are working on drogon2. The API should be mostly compatible while bringing more modern features. There should be better test coverage, more optimizations, greater coroutine support, cleaner error messages, etc.. (and hopefully I can get HTTP/2 working).

Where is drogon2 source github, the same in https://github.com/drogonframework/drogon?

@nobody93 We ended up backporting most changes drogon2 has back into drogon. Migrating off trantor into ASIO was hard and not worth it.
I'm working on HTTP/2 support right now. You are missing out nothing :)
https://github.com/drogonframework/drogon/pull/1554


#476 applying deedoc's patch that fixes polygon drawing issues with p…

…ole wrapping

@MKergall any opinions on this?

I didn't tested yet. Looking at the code:
General idea seems good (even if comments would be helpful to understand the logic).
But it's a draft: I'm quite sure that it doesn't handle properly neither holes, nor tap detection.
And - as already raised - I don't like the principle of vertical replication at all.

oook, it's at least an improvement but may not a solution then?

@MKergall so i just tested this. Points for holes are reversed, counter clockwise creates the whole. The strange part is that the polygon is double painted and the hole will retain the first paint's fill color. See https://youtu.be/S4Pf2u9WSyQ
On master, its clockwise holes that function normally with a transparent hole. I'm not entirely sure what's going on here. Although this patch improves upon the initial bug, it creates several other bugs. I am therefore hesitant to merge this at this time. What are your thoughts?


How to send push notification to more than 10000 users using firebase in nodejs?

If I have more than 10k user, and I have an array of token, how can I send to all of user ? I tried to chunk array 1000 user each time, push 1000 user to a Topic, and remove the user from a topic ( in a loop). But it is running false. Does anyone meet this case? thank you!
Sample code:
let registrationTokens =[
token1,
token2,...
token10000
]
let promises = [];

for (let i = 0; i < 10; i++) {
    promises.push(
        admin
            .messaging()
            .subscribeToTopic(registrationTokens, topic) // subscrible topic
            .then(function(response) {
                // send message to topic
                admin
                    .messaging()
                    .send(message)
                    .then(response => {
                        // remove user from topic
                        admin
                            .messaging()
                            .unsubscribeFromTopic(registrationTokens, topic);
                    })
                    .catch(error => {
                        console.log('Error sending message:', error);
                    });
            })
            .catch(function(error) {
                console.log('Error subscribing to topic:', error);
                console.log(error);
                return res.send(error);
            })
    );
}

Promise.all(promises);

You should add each 1k to a topic and use it send it. Notes: Each topic limit 1k regis token!

I think asking this question on StackOverflow or filing a ticket with Firebase Support will give better responses for this kind of question. Closing out this issue as it's not directly related to the quickstarts.


Rebase trunk 20210119

PR comparing apache/trunk 7214794e3f86b67d96371c78815c1ce03b3a5d6b code with ds-trunk rebased on it.
See https://github.com/datastax/cassandra/pull/53 for merge-trunk-20210119 comparison.
The rebased branch and merged branch have the same end result code:
[jeremiah]:~/github/riptano/cassandra  (merge-trunk-20210119)$ git diff rebase-trunk-20210119
[jeremiah]:~/github/riptano/cassandra  (merge-trunk-20210119)$

https://jenkins-stargazer.build.dsinternal.org/job/ds-cassandra-build/111/

https://jenkins-stargazer.build.dsinternal.org/job/ds-cassandra-build/111/

Test failures don't look concerning to me given the other failures I see in previous stuff.  @jacek-lewandowski WDYT?

Test failures don't look concerning to me given the other failures I see in previous stuff.  @jacek-lewandowski WDYT?


Empty editable element returns a br tag in the hallomodified event data

When deleting all contents from an editable element, data.content contains a single <br> tag, when accessed from withing the hallomodified event handler.
editor.on('hallomodified', function(event, data) {
	console.log(data.content);
});

I confirm the same issue from my side. Is there a workaround for that ? Thank you


WebChat test harness crashes when PoI event returned.

Project
Virtual Assistant
Description
It would appear the event returned by the PoI skill (which the web-app detects and should set the panel on the right) causes the browser page to crash.
To Reproduce

Ask Find Starbucks
Click Find a Route

Expected behavior
Event to be processed by webchat and address is set on the right panel.

This should be resolved in the latest interface.


refactor: Remove deprecated endpoints, methods and properties.

Removes bits that were marked as deprecated a while ago, as far as I can tell they were no longer in use. Tests still pass.
  total:     1343
  passing:   1343
  duration:  12.1s

/cc @BerkeleyTrue

Are these in production?

/modern-challenge-completed definitely was. I was hoping you would have more confidence in what is out there at the moment -I have no insight in how you deploy FCC.

Hi @ojongerius I am closing this for now, and lets revisit the cleanup once again.


Show active node "active time" and "uptime" in https://myurl.example.com/web/status

The current /web/status url shows the list of members of the orchestrator cluster and which node is active. We also show the version of orchestrator that is running.
A couple of things that are not shown for each orchestrator node:

process uptime
if an active node: time active

This gives you some idea of the stability of the cluster and also how long it has been running. Without that it's pretty hard to tell.
Why is this useful? Basically it allows you to see if your network is stable, if the servers have been running for the amount of time you might expect and you can do all of this at the click of a button and without dropping into the OS or using other monitoring tools to see it.

Fixed by #53


getting key error

hey man hope you can maybe help...im getting this error???
TASK [radiusdesk : Adding RadiusDesk MAO Apt Repository Key (Ubuntu 14+)] *******************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "Failed to download key at http://maomuffy.com/apt/ubuntu/apt_keys/rd_installer_mao.asc: Request failed: <urlopen error [Errno -3] Temporary failure in name resolution>"}
to retry, use: --limit @/root/radiusdesk-installer/rd-installer-ansible.retry
PLAY RECAP **********************************************************************************************************************************************************
localhost                  : ok=37   changed=16   unreachable=0    failed=1
seems like you website may be down???

I'm having the same error :(
The installer is unusable without that website.

The URL has been update guys. Sorry for the delay also.


sync error log.  ES6.3 potential problem..

close sync with err: ERROR 1236 (HY000): A slave with the same server_uuid/server_id as this slave has connected to the master; the first event 'mysql-bin-changelog.004070' at 1990379, the last event read from '/rdsdbdata/log/binlog/mysql-bin-changelog.011105' at 3320314, the last byte read from '/rdsdbdata/log/binlog/mysql-bin-changelog.011105' at 3320314.

Does not have slave node.

No slave node.


iOS TikiClient email authentication

Description
Implement the methods with TIikiClient.email which handles the email authentication services with Gmail and Outlook
Issues

[x] tiki/publish-client-ios/issues/2
[x] tiki/publish-client-ios/issues/3
[ ] tiki/publish-client-ios/issues/4
[ ] tiki/publish-client-ios/issues/5
[ ] tiki/publish-client-ios/issues/6

moved to #26


TTLs should be saved per row, not per cell.

Looking over the Redis documentation, it seems like TTLs are always saved at "key level" (one TTL per key). There isn't a way to set a TTL on a specific hash entry.
This will probably have some merge conflicts with #65. I can sort that out if you decide you want to merge both.
Fixes #57

I'm not sure why that one test is failing (it's passing locally), would you be able to trigger a re-build?


Asset library can't be reached when AdGuard is running on macOS

Godot version
3.4.4 stable
System information
Mac Os 12.4, M1
Issue description
When I launch Godot for the first time (self contained) I cannot load assets and I have this error: "Can't connect to host: https://godotengine.org/asset-library/api"
In fact, the url in a web browser is a not found page.

Steps to reproduce
Download latest stable version, self contained. Screenshots are attached
Minimal reproduction project
N.A. this happens with the assets library ad not inside a project.

Are you behind an HTTP proxy?
That said, the root page of the API doesn't actually exist, so this error is expected when opening that URL in a web browser. Instead, /api/asset is the main endpoint for getting a list of assets.

Hi, I am on Mac Os, no proxy but ad guard installed, which is sort of a VPN configuration. When disabled, everything works properly. I can confirm that this doesn't work also with 4.0 alpha12

I am running into this issue as well. I disable AdGuard and I am able to download assets. I will update if I can figure out a workaround.

FWIW, I added @@||godotengine.org^$important,document to the User rules (Adguard's allow list) and added Godot itself to the list of filtered applications (By selecting "Automatically filter applications" under Preferences > Network > General and then clicking the Applications button to add it to the list) , and restarted both apps -- no issues since.

FWIW, I added @@||godotengine.org^$important,document to the User rules (Adguard's allow list) and added Godot itself to the list of filtered applications (By selecting "Automatically filter applications" under Preferences > Network > General and then clicking the Applications button to add it to the list) , and restarted both apps -- no issues since.

I can confirm that this works. It worked for me! :) Thanks @CodeCooler


Duplicated draggable element

http://screencast.com/t/aZq1x749a
I was playing around with the demo example in the source code. The draggable container with the 2 programmatic handlers attached to it was duplicated at some point, it may have happened when I dragged it off the initial page width. Another symptom that came from this is the ever increasing number of "Active Handlers" on the page. It was increasing when I kept dragging the problem container.
By the way this is one of the more superior libraries I've used that adds dragging capability seemlessly, thanks for the great work!

Hi - sorry, in order to fix this I'm going to need something else; or at least an animated gif and some steps, this computer does not run Flash.


Eloquent Custom Casts fire database queries on each save()

Laravel Version: 7.x
PHP Version: 7.4.3

Description:
When using an Eloquent custom cast on a model, if the value has been retrieved but not changed and we hit the save() method, a database query will be fired to re-insert the value and update the timestamps.
I believe this is because the originalIsEquivalent method on the Illuminate\Database\Eloquent\Concerns\HasAttributes trait does not support custom casts and will always return false.
Steps To Reproduce:
Assuming we have a custom cast on the address property of the User model:
$user = User::first();
if ($user->address) {
  // Nothing changed...
}
$user->save();

Possible solution:
We could add a method to be implemented on the cast class, for instance isEquivalent($attribute, $original), to determine if the value was changed or not.

I'm going to convert this to a discussion since it is a bit of a feature request atm instead of a "bug".


Remove ember-cli-test-loader bower dependency

I tried this with a demo app, by

generating a new Ember app
Installing ember-cli-mocha (this branch)
Removing the ember-cli-test-loader from the package.json and reinstalling all the dependencies, so that the test loader must have come from the shouldIncludeChildAddon hook
Ran ember test in the demo addon

Everything works as you'd expect.
I did run into the problem that the tests for this repo are not passing after this change.  For some reason, requiredModules doesn't include valid.jshint.  Any idea why that might be?
Closes #122

I tend to like this approach better than https://github.com/ember-cli/ember-cli-qunit/commit/115d56bff12ad01ef08c34a1ae9f9011e7e6904b ...
@trentmwillis any comments?
we should probably remove ember-cli-test-loader from the app package.json though if we have it as a dependency ourselves.

we should probably remove ember-cli-test-loader from the app package.json though if we have it as a dependency ourselves.

Yeah, that's true. We could check for/remove it after install.

Ahh, yup. Accidentally committed those VS Code files, removed them but missed that one.

Finally got around to looking at this. The change makes sense to me, not even sure what I was thinking with the one from ember-cli-qunit now that I look back at it. Moving it to be a straight dependency would allow us to ditch the blueprint in ember-cli-qunit altogether.

That's the idea! Once this lands, I'm going to figure out how to pull in ember-mocha-adapter through NPM.
I feel like it's a bad experience for a user to install an addon and then have their package.json or bower.json polluted with additional dependencies.  It makes it hard to remove and update things, too, since they never explicitly added them in the first place.
A bonus perk of doing this is that, with the community migration away from Bower, this addon no longer requires it.  I think it would be smart to eliminate it as a need from the high-profile addons like this one as much as possible.

thanks everyone! :)

Can we remove ember-cli-test-loader from bower.json as well?

@alexlafroscia yeah, that would probably make sense.


Fix regression in the strip implementation

The internal spawn() utility function's API recently changed, but the strip() implementation did not follow along. This fixes the regression.
Sadly this PR introduces a new dependency in order to do proper quoting -- though I'm not familiar enough with prebuild to say whether we can assume that quoting will never be needed, i.e. the file argument never contains spaces.
/cc @ralphtheninja

thanks for reporting this. i ended up with a little different fix for this in master as i rather not get into argument escaping to not risk potential security bugs.

Sounds great. Thanks for addressing this so quickly! ❤


[Bug] Agenta Variant container fails to start due to missing env var

Traceback (most recent call last):
  File "/app/main.py", line 3, in <module>
    import _app  # This will register the routes with the FastAPI application
  File "/app/_app.py", line 2, in <module>
    from shared.constants import UserType
  File "/app/shared/constants.py", line 39, in <module>
    REDACTED_BUCKET= os.environ["REDACTED_BUCKET"]
  File "/usr/local/lib/python3.10/os.py", line 680, in __getitem__
    raise KeyError(key) from None
KeyError: 'REDACTED_BUCKET'

Expected behavior

It should use the environment variables I defined in .env. This environment variable is present there, it seems that the docker container never grabbed my environment variables when deploying this variant.
docker inspect (my variant container) outputs for "Env":
            "Env": [
                "PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "LANG=C.UTF-8",
                "GPG_KEY=A035C8C19219BA821ECEA86B64E628F8D684696D",
                "PYTHON_VERSION=3.10.14",
                "PYTHON_PIP_VERSION=23.0.1",
                "PYTHON_SETUPTOOLS_VERSION=65.5.1",
                "PYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/dbf0c85f76fb6e1ab42aa672ffca6f0a675d9ee4/public/get-pip.py",
                "PYTHON_GET_PIP_SHA256=dfe9fd5c28dc98b5ac17979a953ea550cec37ae1b47a5116007395bfacff2ab9"
            ],

Stale. Would love more information and I could reopen this. (and sorry for missing the issue)


[Android] NoClassDefFoundError: Failed resolution of: Landroidx/core/view/WindowInsetsControllerCompat

Steps to Reproduce

flutter run on the code sample

Expected results:
I want my status bar colour to change according to my code
Actual results:
I get an error that in the platform channel android for android 31, I'm getting this error after upgrading my flutter to flutter 2.8

Code sample

SystemChrome.setSystemUIOverlayStyle(
      const SystemUiOverlayStyle(
        statusBarColor: Colors.deepOrange,
        statusBarIconBrightness: Brightness.light,
      ),
    );

Logs

[ +548 ms] D/TransportRuntime.SQLiteEventStore( 5656): Storing event with priority=HIGHEST, name=FIREBASE_CRASHLYTICS_REPORT for destination cct
[   +5 ms] D/TransportRuntime.JobInfoScheduler( 5656): Scheduling upload for context TransportContext(cct, HIGHEST, MSRodHRwczovL2NyYXNobHl0aWNzcmVwb3J0cy1wYS5nb29nbGVhcGlzLmNvbS92MS9maXJlbG9nL2xlZ2FjeS9iYXRjaGxvZ1xBSXphU3lCcnBTWVQ0RkZMMDlyZUhKaTZIOUZZZGVpU25VVE92Mk0=) with jobId=-1505283734 in 1000ms(Backend next call timestamp<PHONE_NUMBER>600). Attempt 1
[  +54 ms] E/AndroidRuntime( 5656): FATAL EXCEPTION: main
[        ] E/AndroidRuntime( 5656): Process: id.go.weypay.atozgo, PID: 5656
[        ] E/AndroidRuntime( 5656): java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/core/view/WindowInsetsControllerCompat;
[        ] E/AndroidRuntime( 5656): 	at io.flutter.plugin.platform.PlatformPlugin.setSystemChromeSystemUIOverlayStyle(PlatformPlugin.java:368)
[        ] E/AndroidRuntime( 5656): 	at io.flutter.plugin.platform.PlatformPlugin.access$700(PlatformPlugin.java:30)
[        ] E/AndroidRuntime( 5656): 	at io.flutter.plugin.platform.PlatformPlugin$1.setSystemUiOverlayStyle(PlatformPlugin.java:108)
[        ] E/AndroidRuntime( 5656): 	at io.flutter.embedding.engine.systemchannels.PlatformChannel$1.onMethodCall(PlatformChannel.java:130)
[        ] E/AndroidRuntime( 5656): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:262)
[        ] E/AndroidRuntime( 5656): 	at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:178)
[        ] E/AndroidRuntime( 5656): 	at io.flutter.embedding.engine.dart.DartMessenger.lambda$handleMessageFromDart$0$DartMessenger(DartMessenger.java:206)
[        ] E/AndroidRuntime( 5656): 	at io.flutter.embedding.engine.dart.-$$Lambda$DartMessenger$6ZD1MYkhaLxyPjtoFDxe45u43DI.run(Unknown Source:12)
[        ] E/AndroidRuntime( 5656): 	at android.os.Handler.handleCallback(Handler.java:938)
[        ] E/AndroidRuntime( 5656): 	at android.os.Handler.dispatchMessage(Handler.java:99)
[        ] E/AndroidRuntime( 5656): 	at android.os.Looper.loop(Looper.java:246)
[        ] E/AndroidRuntime( 5656): 	at android.app.ActivityThread.main(ActivityThread.java:8544)
[        ] E/AndroidRuntime( 5656): 	at java.lang.reflect.Method.invoke(Native Method)
[        ] E/AndroidRuntime( 5656): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
[        ] E/AndroidRuntime( 5656): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
[        ] E/AndroidRuntime( 5656): Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.core.view.WindowInsetsControllerCompat" on path: DexPathList[[zip file "/data/app/~~1FwohiDQuF72xoMYWCr8Fg==/id.go.weypay.atozgo-qMnLzjgDNaGtm3zmQ6PwLA==/base.apk"],nativeLibraryDirectories=[/data/app/~~1FwohiDQuF72xoMYWCr8Fg==/id.go.weypay.atozgo-qMnLzjgDNaGtm3zmQ6PwLA==/lib/arm64, /data/app/~~1FwohiDQuF72xoMYWCr8Fg==/id.go.weypay.atozgo-qMnLzjgDNaGtm3zmQ6PwLA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
[        ] E/AndroidRuntime( 5656): 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
[        ] E/AndroidRuntime( 5656): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
[        ] E/AndroidRuntime( 5656): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
[        ] E/AndroidRuntime( 5656): 	... 15 more
[  +81 ms] I/Process ( 5656): Sending signal. PID: 5656 SIG: 9
[ +478 ms] Service protocol connection closed.
[        ] Lost connection to device.
[   +3 ms] DevFS: Deleting filesystem on the device (file:///data/user/0/id.go.weypay.atozgo/code_cache/atozgo_flutterTQASIZ/atozgo_flutter/)
[  +13 ms] executing: /Users/mac/Library/Android/sdk/platform-tools/adb -s RR8N400KDDM shell am force-stop id.go.weypay.atozgo

flutter doctor -v
[✓] Flutter (Channel stable, 2.8.0, on Mac OS X 10.15.7 19H15 darwin-x64, locale en-ID)
    • Flutter version 2.8.0 at /Users/mac/development/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision cf44000065 (6 days ago), 2021-12-08 14:06:50 -0800
    • Engine revision 40a99c5951
    • Dart version 2.15.0

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    • Android SDK at /Users/mac/Library/Android/sdk
    • Platform android-31, build-tools 30.0.3
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165)
    • All Android licenses accepted.

[!] Xcode - develop for iOS and macOS (Xcode 12.4)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    ! Flutter recommends a minimum Xcode version of 13.0.0.
      Download the latest version or update via the Mac App Store.
    • CocoaPods version 1.10.2

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

[✓] Android Studio (version 4.2)
    • Android Studio at /Applications/Android Studio 4.2.2.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)

[✓] Android Studio (version 2020.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165)

[✓] IntelliJ IDEA Community Edition (version 2021.1.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart

[✓] Connected device (3 available)
    • SM A715F (mobile) • RR8N400KDDM • android-arm64  • Android 11 (API 30)
    • macOS (desktop)   • macos       • darwin-x64     • Mac OS X 10.15.7 19H15 darwin-x64
    • Chrome (web)      • chrome      • web-javascript • Google Chrome 96.0.4664.110
    ! Error: ini iphone is not connected. Xcode will continue when ini iphone is connected. (code -13)

! Doctor found issues in 1 category.

<!--
      Consider also attaching screenshots and/or videos to better
      illustrate the issue.
<pre>  You can upload them directly on GitHub.
  Beware that video file size is limited to 10MB.

-->

Same here.
On Flutter 2.5.3 runs smooth

Hi @dwikyhardi, Thanks for filing the issue, I verified on Xiaomi k20 pro (Android 11)  and emulator(android 12) by running the below code sample and I did not see any error on the stable 2.8.0 I see status bar color changing.

Emulator(Android 12)
Xiaomi k20 pro(Android 11)

code sample
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
  SystemChrome.setSystemUIOverlayStyle(
      const SystemUiOverlayStyle(
        statusBarColor: Colors.deepOrange,
        statusBarIconBrightness: Brightness.light,
      ),
    );
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  @override
  void dispose() {
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: SizedBox(),
      floatingActionButton: FloatingActionButton(
        onPressed: (){},
        tooltip: 'Add text',
        child: const Icon(Icons.add),
      ),
    );
  }
}

flutter doctor -v
[✓] Flutter (Channel stable, 2.8.0, on macOS 12.0.1 21A559 darwin-arm, locale en-GB)
    • Flutter version 2.8.0 at /Users/mahesh/Documents/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision cf44000065 (7 days ago), 2021-12-08 14:06:50 -0800
    • Engine revision 40a99c5951
    • Dart version 2.15.0

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-31, build-tools 31.0.0
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.10.2

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

[✓] Android Studio (version 4.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 60.1.4
    • Dart plugin version 212.5080.8

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

[✓] Connected device (4 available)
    • Redmi K20 Pro (mobile) • <IP_ADDRESS>:5555                     • android-arm64  • Android 11 (API 30)
    • iPhone 11 (mobile)     • FC644E6C-7F02-40E5-9998-1F0CD162FBD8 • ios            •
      com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64   • macOS 12.0.1 21A559
      darwin-arm
    • Chrome (web)           • chrome                               • web-javascript • Google Chrome
      96.0.4664.93

• No issues found!

[√] Flutter (Channel stable, 2.8.0, on Microsoft Windows [Version 10.0.19042.1348], locale en-US)
    • Flutter version 2.8.0 at C:\flutter_sdk\stable
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision cf44000065 (6 days ago), 2021-12-08 14:06:50 -0800
    • Engine revision 40a99c5951
    • Dart version 2.15.0

[√] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at C:\Users\mahesh\AppData\Local\Android\sdk
    • Platform android-31, build-tools 31.0.0
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[√] Visual Studio - develop for Windows (Visual Studio Community 2019 16.11.4)
    • Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
    • Visual Studio Community 2019 version 16.11.31727.386
    • Windows 10 SDK version 10.0.19041.0

[√] Android Studio (version 2020.3)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)

[√] VS Code (version 1.61.2)
    • VS Code at C:\Users\mahesh\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.29.0

[√] Connected device (4 available)
    • sdk gphone64 x86 64 (mobile) • emulator-5554 • android-x64    • Android 12 (API 31) (emulator)
    • Windows (desktop)            • windows       • windows-x64    • Microsoft Windows [Version 10.0.19042.1348]
    • Chrome (web)                 • chrome        • web-javascript • Google Chrome 96.0.4664.110
    • Edge (web)                   • edge          • web-javascript • Microsoft Edge 96.0.1054.53

• No issues found!

Hi @dwikyhardi, Thanks for filing the issue, I verified on Xiaomi k20 pro (Android 11) and emulator(android 12) by running the below code sample and I did not see any error on the stable 2.8.0 I see status bar color changing.
Emulator(Android 12)	Xiaomi k20 pro(Android 11)

code sample
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
  SystemChrome.setSystemUIOverlayStyle(
      const SystemUiOverlayStyle(
        statusBarColor: Colors.deepOrange,
        statusBarIconBrightness: Brightness.light,
      ),
    );
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  @override
  void dispose() {
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: SizedBox(),
      floatingActionButton: FloatingActionButton(
        onPressed: (){},
        tooltip: 'Add text',
        child: const Icon(Icons.add),
      ),
    );
  }
}

flutter doctor -v
[✓] Flutter (Channel stable, 2.8.0, on macOS 12.0.1 21A559 darwin-arm, locale en-GB)
    • Flutter version 2.8.0 at /Users/mahesh/Documents/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision cf44000065 (7 days ago), 2021-12-08 14:06:50 -0800
    • Engine revision 40a99c5951
    • Dart version 2.15.0

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-31, build-tools 31.0.0
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.10.2

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

[✓] Android Studio (version 4.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 60.1.4
    • Dart plugin version 212.5080.8

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

[✓] Connected device (4 available)
    • Redmi K20 Pro (mobile) • <IP_ADDRESS>:5555                     • android-arm64  • Android 11 (API 30)
    • iPhone 11 (mobile)     • FC644E6C-7F02-40E5-9998-1F0CD162FBD8 • ios            •
      com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64   • macOS 12.0.1 21A559
      darwin-arm
    • Chrome (web)           • chrome                               • web-javascript • Google Chrome
      96.0.4664.93

• No issues found!

[√] Flutter (Channel stable, 2.8.0, on Microsoft Windows [Version 10.0.19042.1348], locale en-US)
    • Flutter version 2.8.0 at C:\flutter_sdk\stable
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision cf44000065 (6 days ago), 2021-12-08 14:06:50 -0800
    • Engine revision 40a99c5951
    • Dart version 2.15.0

[√] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at C:\Users\mahesh\AppData\Local\Android\sdk
    • Platform android-31, build-tools 31.0.0
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[√] Visual Studio - develop for Windows (Visual Studio Community 2019 16.11.4)
    • Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
    • Visual Studio Community 2019 version 16.11.31727.386
    • Windows 10 SDK version 10.0.19041.0

[√] Android Studio (version 2020.3)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)

[√] VS Code (version 1.61.2)
    • VS Code at C:\Users\mahesh\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.29.0

[√] Connected device (4 available)
    • sdk gphone64 x86 64 (mobile) • emulator-5554 • android-x64    • Android 12 (API 31) (emulator)
    • Windows (desktop)            • windows       • windows-x64    • Microsoft Windows [Version 10.0.19042.1348]
    • Chrome (web)                 • chrome        • web-javascript • Google Chrome 96.0.4664.110
    • Edge (web)                   • edge          • web-javascript • Microsoft Edge 96.0.1054.53

• No issues found!

Thanks for the reply @maheshmnj.
I forgot to mention another log I stumble upon debugging
maybe this is an issue with androidX integration?
 Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.core.view.WindowInsetsControllerCompat" on path: DexPathList[[zip file "/data/app/~~AYeeu6ZyF57aKMLqHYhv2w==/id.go.weypay.atozgo-Ejk_cffcb0IfAHhIAM56Uw==/base.apk"],nativeLibraryDirectories=[/data/app/~~AYeeu6ZyF57aKMLqHYhv2w==/id.go.weypay.atozgo-Ejk_cffcb0IfAHhIAM56Uw==/lib/arm64, /data/app/~~AYeeu6ZyF57aKMLqHYhv2w==/id.go.weypay.atozgo-Ejk_cffcb0IfAHhIAM56Uw==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]

 Logs
E/AndroidRuntime(25276): FATAL EXCEPTION: main
E/AndroidRuntime(25276): Process: id.go.weypay.atozgo, PID: 25276
E/AndroidRuntime(25276): java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/core/view/WindowInsetsControllerCompat;
E/AndroidRuntime(25276): 	at io.flutter.plugin.platform.PlatformPlugin.setSystemChromeSystemUIOverlayStyle(PlatformPlugin.java:368)
E/AndroidRuntime(25276): 	at io.flutter.plugin.platform.PlatformPlugin.access$700(PlatformPlugin.java:30)
E/AndroidRuntime(25276): 	at io.flutter.plugin.platform.PlatformPlugin$1.setSystemUiOverlayStyle(PlatformPlugin.java:108)
E/AndroidRuntime(25276): 	at io.flutter.embedding.engine.systemchannels.PlatformChannel$1.onMethodCall(PlatformChannel.java:130)
E/AndroidRuntime(25276): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:262)
E/AndroidRuntime(25276): 	at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:178)
E/AndroidRuntime(25276): 	at io.flutter.embedding.engine.dart.DartMessenger.lambda$handleMessageFromDart$0$DartMessenger(DartMessenger.java:206)
E/AndroidRuntime(25276): 	at io.flutter.embedding.engine.dart.-$$Lambda$DartMessenger$6ZD1MYkhaLxyPjtoFDxe45u43DI.run(Unknown Source:12)
E/AndroidRuntime(25276): 	at android.os.Handler.handleCallback(Handler.java:938)
E/AndroidRuntime(25276): 	at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(25276): 	at android.os.Looper.loop(Looper.java:246)
E/AndroidRuntime(25276): 	at android.app.ActivityThread.main(ActivityThread.java:8544)
E/AndroidRuntime(25276): 	at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(25276): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
E/AndroidRuntime(25276): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
E/AndroidRuntime(25276): Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.core.view.WindowInsetsControllerCompat" on path: DexPathList[[zip file "/data/app/~~AYeeu6ZyF57aKMLqHYhv2w==/id.go.weypay.atozgo-Ejk_cffcb0IfAHhIAM56Uw==/base.apk"],nativeLibraryDirectories=[/data/app/~~AYeeu6ZyF57aKMLqHYhv2w==/id.go.weypay.atozgo-Ejk_cffcb0IfAHhIAM56Uw==/lib/arm64, /data/app/~~AYeeu6ZyF57aKMLqHYhv2w==/id.go.weypay.atozgo-Ejk_cffcb0IfAHhIAM56Uw==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
E/AndroidRuntime(25276): 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
E/AndroidRuntime(25276): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
E/AndroidRuntime(25276): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
E/AndroidRuntime(25276): 	... 15 more
I/Process (25276): Sending signal. PID: 25276 SIG: 9

Please check this guide for AndroidX migration https://docs.flutter.dev/development/androidx-migration, Can you share a complete output of flutter run -v and possibly a minimal sample project to have a look.
Thanks

Hi, I'm facing the same issue. Unable to build the app. Already went through the migration docs and everything is fine on that end.
Really need a solution for this.

@prakharb10, Is the issue reproducible on a newly created flutter project on stable 2.8.1  or some old project? If the latter would It be possible for you to share a minimal project?

The issue is occurring on an old project. The project is quite complex, and the repository is unfortunately private. However, I'm receiving a similar error log. I can share the build.gradle files if they would help.

Same here.
On Flutter 2.5.3 runs smooth

Me too.

make sure androidx.core:core >= 1.5

make sure androidx.core:core >= 1.5

mine is implementation 'androidx.core:core-ktx:1.7.0' and still got that error

@dwikyhardi, Can you please share your app/build.gradle and android/build.gradle?

@dwikyhardi, Please share your app/build.gradle and android/build.gradle along with flutter run -v logs

here's the android/build.gradle
buildscript {
    repositories {
        google()
        jcenter()
        maven { url 'https://plugins.gradle.org/m2/' }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.4'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.10"
        classpath 'com.google.gms:google-services:4.3.4'
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.2.0'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven{
            url "https://jcenter.bintray.com/"
        }
    }

    configurations.all {
//            resolutionStrategy.force "com.google.firebase:firebase-messaging:20.0.1"
        resolutionStrategy.force "androidx.media:media:1.1.0"
        resolutionStrategy.force "com.google.android.gms:play-services-basement:17.2.1"
        resolutionStrategy.force "com.google.android.gms:play-services-base:17.2.1"
//        resolutionStrategy.force "com.google.needed_dependency"
    }
    configurations.all {
//            resolutionStrategy.force "com.google.firebase:firebase-messaging:20.0.1"
        resolutionStrategy.force "androidx.media:media:1.1.0"
        resolutionStrategy.force "com.google.android.gms:play-services-basement:17.2.1"
        resolutionStrategy.force "com.google.android.gms:play-services-base:17.2.1"
//        resolutionStrategy.force "com.google.needed_dependency"
    }

}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}
subprojects {
    project.configurations.all {
        resolutionStrategy.eachDependency { details ->

            if (details.requested.group == 'androidx.legacy'
                    && !details.requested.name.contains('androidx') ) {
                details.useVersion "1.0.0"
            }
            if (details.requested.group == 'androidx.versionedparcelable'
                    && !details.requested.name.contains('androidx') ) {
                details.useVersion "1.0.0"
            }
            if (details.requested.group == 'androidx.core'
                    && !details.requested.name.contains('androidx') ) {
                details.useVersion "1.1.0"
            }
            if (details.requested.group == 'androidx.media'
                    && !details.requested.name.contains('androidx') ) {
                details.useVersion "1.1.0"
            }
            if (details.requested.group == 'androidx.vectordrawable'
                    && !details.requested.name.contains('androidx') ) {
                details.useVersion "1.1.0"
            }
            if (details.requested.group == 'androidx.appcompat'
                    && !details.requested.name.contains('androidx') ) {
                details.useVersion "1.1.0"
            }
            if (details.requested.group == 'androidx.lifecycle'
                    && !details.requested.name.contains('androidx') ) {
                details.useVersion "2.0.0"
            }
            if (details.requested.group == 'androidx.fragment'
                    && !details.requested.name.contains('androidx') ) {
                details.useVersion "1.0.0"
            }
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

apply plugin: 'com.google.gms.google-services'

and this the app/build.gradle
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}

def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
    flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    flutterVersionName = '1.0'
}

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'com.google.firebase.crashlytics'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android {
    compileSdkVersion 30

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }

    lintOptions {
        disable 'InvalidPackage'
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "id.go.weypay.atozgo"
        minSdkVersion 21
        targetSdkVersion 30
        multiDexEnabled true
        versionCode 39
        versionName "v1.4.0"
        testInstrumentationRunner "androidx.support.test.runner.AndroidJUnitRunner"
    }

    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
        debug {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
        debug {
            signingConfig signingConfigs.debug
        }
    }

}

flutter {
    source '../..'
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61"
    testImplementation 'junit:junit:4.13.1'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.multidex:multidex:2.0.1'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    implementation 'com.google.firebase:firebase-messaging:21.0.0'
    implementation 'com.google.firebase:firebase-analytics:18.0.0'
    implementation platform('com.google.firebase:firebase-bom:26.1.1')
    implementation 'com.google.firebase:firebase-analytics-ktx'
    implementation 'com.google.android.gms:play-services-base:17.2.1'
    implementation 'com.google.android.gms:play-services-location:17.1.0'
    implementation 'com.google.android.material:material:1.4.0'
}

apply plugin: 'com.google.gms.google-services'

Thanks for the info leaving this issue open for further investigation.
This issue is reproducible on an old flutter project and works fine on the newly created project.

Thanks for the info leaving this issue open for further investigation. This issue is reproducible on an old flutter project and works fine on the newly created project.

No Problem @maheshmnj, I hope this issue will close soonly
Thanks for your works mate 🚀🚀🚀

Hi, any updates on this?

cc: @blasten

Same here, got this error after I migrated from flutter 2.5.1 -> 2.8.1.

make sure androidx.core:core >= 1.5

mine is implementation 'androidx.core:core-ktx:1.7.0' and still got that error

you can try:
configurations.all {
resolutionStrategy.force 'androidx.core:core:1.7.0'
}
in app/build.gradle

Same here, got this error after I migrated from flutter 2.5.1 -> 2.8.1.

Me too... Old project, already migrated to androidx few flutter updates ago and suddendly this with the latest flutter version

Hi everyone
In order to address the issue, we need complete reproducible steps.
Here is what I have tried

Using Flutter 1.22.6 and 2.5.1 versions, I have created new projects on those versions respectively and tried to reproduce the issue on 2.8.0 (aside from obvious error such changing kotlin version and adding android:exported="true" for API 31, there are no other steps needed to run the app.

I manage to solved the issue: new template projcet with flutter cli and copying clean gradle config files and properties. I alse needed to updated these files to setup signing and some plugin and custom configs again, updated Kotlin Gradle plugin

I manage to solved the issue: new template projcet with flutter cli and copying clean gradle config files and properties. I alse needed to updated these files to setup signing and some plugin and custom configs again, updated Kotlin Gradle plugin

I managed to solve the issue:

Create a new template project with flutter cli.
Copy clean gradle config files and properties from the template project.
Update these files to setup signing and some custom configs again.
Update Kotlin Gradle plugin and Gradle to the latest versions and sync project.

I suppose that the issue could be related to Gradle and Kotlin plugin versions and other dependencies incompatibilities.

I managed to solve the issue:

Create a new template project with flutter cli.
Copy clean Gradle config files and properties from the template project.
Update these files to set up signing and some custom configs again.
Update Kotlin Gradle plugin and Gradle to the latest versions and sync project.

I suppose that the issue could be related to Gradle and Kotlin plugin versions and other dependencies incompatibilities.

This resolved it for me.
If your project is an older flutter project and you have done a lot of migrations I would recommend this. This seemed to also get rid of a lot of old code that could have been causing issues.

In my case I used this code:
 details.useVersion "1.3.0-alpha01" -> 1.5.0

Android project build.gradle

subprojects {
project.configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'androidx.core'
&& !details.requested.name.contains('androidx') ) {
details.useVersion "1.5.0"
}
}
}
}

In my case I used this code:
 details.useVersion "1.3.0-alpha01" -> 1.5.0

Android project build.gradle
subprojects {
        project.configurations.all {
            resolutionStrategy.eachDependency { details ->
                if (details.requested.group == 'androidx.core'
                        && !details.requested.name.contains('androidx') ) {
                    details.useVersion "1.5.0"
                }
            }
        }
    }

Setting this to "1.5.0" worked for me.


gofabric8 deploy -y --domain=foo.bar should make sure it updates the fabric8 oauthclient if one exists with a different domain?

Or maybe just delete it and force it to be recreated?

Yes, please fix that.
People forget to do an "oc delete oauthclient fabric8" because "oc get all" doesn't show oauthclients and OpenShift documentation is far from perferct.
The current situation is that if you ever do a "gofabric8 deploy" with a wrong --domain or without --domain then you'll never get fabric8 to work... unless you do a "oc delete oauthclient fabric8".

I think i'm facing this issue.
I have a native installation of openshift V3.0.2, and trying to install fabric8.
But, when I try to open fabric on my web browser it redirects me to login page even if I currently logged in.
Look at the oauthclients:
http://postimg.org/image/z7e1birw1/full/
Running gofabric8 validate I get an error too:
http://postimg.org/image/s64kw94rv/full
Any hint?

@hodrigohamalho the serviceaccount looks fine to me - if your domain is cloud.devops.org; though the second output shows master.devops.org so maybe you wanted the domain to be just devops.org instead of cloud.devops.org?
If you want to switch domains then try deleting the fabric8 ServiceAccount and rerunning gofabric8
oc delete sa fabric8
gofabric8 deploy -y
gofabric8 secrets -y
oc get sa

BTW a work around for this issue for now is to type:
oc delete sa fabric8

to delete the ServiceAccount prior to running gofabric8 deploy with the different domain

@jstrachan thanks for you attention.
The problem was CORS.
I added the entry below on /etc/openshift/master/master-config.yaml and worked. I think it should be more explicit on documentation.
corsAllowedOrigins:
  - .*

Agreed. To be fair the docs do mention passing cors-allowed: http://fabric8.io/guide/getStarted/openshift.html#alternative-installation-route
I've added a trouble shooting section to the docs though to make this more clear:
https://github.com/jstrachan/fabric8/blob/fixes/docs/getStarted/openshift.md#troubleshooting

I've just fixed this - its available in the new 0.4.21 release. So now gofabric8 deploy will delete the fabric8 OAuthClient first to ensure that after the fabric8 console is installed its got the latest greatest domain etc


UI: group/role mapping: Avoid repeating tutorial text

Currently there are 3 lines of text after every group/role saying basically the same:

For a bigger amount of wp-roles this can harm the overview.
My suggestion is this:

Good idea! Thanks!
Can you create a PullRequest for that?

Wow, you are really fast ;)
But sorry, no, i have no idea about this.
For the screenshot i just did some HTML-manipulation locally in my browser.
The only help i can give is, that the width must be reduced again (ticket #195 ) to avoid a line break.

:smile: Sometimes I'm fast.
Can you specify the issue with the width in #195 a bit more in detail? And possibly reopen it?
And I'll see to rearranging the stuff here :wink:

How does this look like?

It's included with v2.4.9 ;-)

Remove duplicate text: 100 % happyness
Regarding "shall match to" - see how it looks in my case.
As soon the role names are a bit longer, line breaks occur.
Also we carefully named our roles to clearly reveal their hierarchy:

Contributor
Contributor_accreditation
Contributor_coordination

This is lost with align right:

My proposal would be to

either put the "shall match to" in a separate
or add it to the  with the  tag
(but here you would need to reduce the width eg. to 80% to avoid line break here)

Does this look better?

Das ist nicht nur better, das ist perfect ;)

The modification has also been released, so I can close this.