Texts to add for better user comprehension

1. Du côté MY WALLET :
Gaming Cards : Here are your Gaming cards. Use them to get exclusive advantages in Web 3 Games like discounts, rewards...
Identity Cards : Here are your digital ID credentials. Use them to prove things about yourself, when its required by Web 3 Apps. Altme is self-custodial : only you can access your data.
Payment : Here are all the blockchain accounts you created or imported in Altme. Use and manage them securely with Altme.
Community cards : Here are your Web3 Communities cards. Use them to get access to benefits offered by the communities you like.
Other cards : Here are other types of credentials / cards you store in your Altme Wallet. Use them when needed.
2. Du côté DISCOVER :
GAMING CARDS : Here are exclusive benefits offered by Web 3 games that might interest you : NFT discounts, Cashback, Rewards...
IDENTITY CARDS : Here are digital ID credentials you can get to prove things about yourself to websites / apps that would require it. Remember that, in Altme your data always stay encrypted and under your control.
COMMUNITY CARDS : Here are Web 3 Communities cards you can add. Get exclusive advantages offered by communities you like.
OTHER CARDS : Here are other types of cards and credentials you can add in your Altme wallet like Tickets, Pass, etc.
3. SUR LES CARTES DISCOVER (TEXTES À AJOUTER) :
EMAIL PROOF  : This card is useful to prove your email ownership to Web 3 Apps.
GENDER PROOF : This card is useful to prove your gender (M/F) to Web 3 Apps.
AGE RANGE PROOF : This card is useful to prove your Age Range to Web 3 Apps.
NATIONALITY PROOF : This card is useful to prove your Nationality to Web 3 Apps.
OVER 18 PROOF : This card is used to prove that you are over 18 years old.
IDENTITY CARD : This card is your digital identity card and can be used in Web 3 for KYC verification, etc.
4. Est-ce que dans NFT et tokens on pourrait également rajouter un petit paragraphe d'intro
[Page NFT] My collection : Here are all NFTs and collectibles you have in your account.
[Page Token] My tokens : Here are all the tokens you have in your account and / or those you have choose to display.

Size: M


fix!: store job id instead of job instance

Fixes #463

[x] Tests and linter pass
[x] Code coverage does not decrease (if any source code was changed)
[x] Appropriate docs were updated (if necessary)

@cmath if you want to give this a test drive to see if it resolves your issue, that would be awesome!

Closing in favor of #465 which is not a breaking change.


Popup Windows not closing on Form click/move.

Problem description:

open combobox

We can move the form but combobox will stay open.

Maybe changing :
https://github.com/modern-forms/Modern.Forms/blob/20a1f069d6657371505876d282247bdd09f66931/src/Modern.Forms/FormTitleBar.cs#L105-L112
to :
protected override void OnMouseDown (MouseEventArgs e)
        {
            base.OnMouseDown (e);

            // Reset any popup left open
            FindForm ().adapter.SelectedControl?.Deselect ();
            FindForm ().adapter.SelectedControl?.Select ();

            // We won't get a MouseUp from the system for this, so don't capture the mouse
            Capture = false;
            FindForm ()?.BeginMoveDrag ();
        }

This way parent control (that is FindForm ().adapter.SelectedControl) will automatically trigger popup close.

Should be fixed with #66.  I tried to unify the code a bit with the existing mechanism that handles this for menus.


feat(attribute_value): Don't target NAN, INF, -INF and Doubles > 1e53…

Summary
Don't target NAN, INF, -INF or > 1e53 doubles.
Modified isValidAttributeValue and added it to NSObject Category.
Created new Test file for Validation testing.
Test plan
Issues
OASIS-3654
https://github.com/optimizely/python-sdk/pull/146#discussion_r237850806

Requested changes made, please review.

Requested changes made, please review.


datasette --version should also show the SQLite version

Idea came up here: https://discord.com/channels/823971286308356157/823971286941302908/1066026473003159783

Fell down a bit of a rabbit hole trying to figure out how to get Click's version_option() to evaluate a custom message. Got this far:
class _VersionMessage(UserString):
    @property
    def data(self):
        return "%(prog)s, version %(version)s (SQLite {})".format(
            sqlite3.connect(":memory:").execute("select sqlite_version()").fetchone()[0]
        )

    @data.setter
    def data(self, value):
        pass

@click.group(cls=DefaultGroup, default="serve", default_if_no_args=True)
@click.version_option(version=__version__, message=_VersionMessage(""))
def cli():
    """
    Datasette is an open source multi-tool for exploring and publishing data

    \b
    About Datasette: https://datasette.io/
    Full documentation: https://docs.datasette.io/
    """

But now:
% datasette --version
%(prog)s, version %(version)s (SQLite 3.40.1)

I was trying to avoid running that select sqlite_version() thing unless the --version option was used.

Simplest solution would be to ditch the version_option decorator and roll a custom option based on it instead, imitating what this code does:
https://github.com/pallets/click/blob/7586834cab38c5592d9d6de3ee0ebe75d4353bfb/src/click/decorators.py#L413-L524


test native ESM support

Leaving this here as follow up to #8837. To try this out run npm run debug and open http://localhost:3000/spec/esm.
Looks like the test suite almost works, weirdly I see a few different errors in both the bundled and native versions, and the total test count differs by 2.
Bundled:

Native:

oh lol that's passes not a total


Find behavior conflicts across threads

Adds a merge step for maps of class to "behavior" loc in Namer::symbolizeTrees. This ensures conflicts are found even if they are processed by different workers.
Motivation
This check was broken if the conflicting defs were processed by different workers.

Test plan

See included automated tests.
Introduced a conflict in Stripe's codebase and ensured this caught it.
Added timing. The merge ops are fast enough on the codebase that they don't appear in timing data.

cc @aadi-stripe

We have a policy of testing changes to Sorbet against Stripe's codebase before
merging them. I've kicked off a test run for the current PR.  When the build
finishes, I'll share with you whether or how it failed. Thanks!
Stripe employees can see the build results here:
→ https://go/builds/bui_LnCwXQM6mjiQBm
→ https://go/builds/bui_LnCwNdOLQfkvyf

Do you mind adding a test?

There's already a test for this in https://github.com/sorbet/sorbet/blob/master/test/cli/conflicting-definition/test.out
But it was passing because the same worker gets both files (I'm guessing this is because there are only two files). I'm not sure what a good way of testing this is given you need to rely on how the workers receive jobs. Do you have any ideas here?

The number of workers will be min(cores, numFiles / 2)
https://github.com/sorbet/sorbet/blob/d1bd0b2c0aa7a943737db6a7f3f7f08a624d5aa9/main/options/options.cc#L834
What do you think about making a CLI test with 10 files, where each file pairwise conflicts with all other files?

This is ready for re-review now.

We have a policy of testing changes to Sorbet against Stripe's codebase before
merging them. I've kicked off a test run for the current PR.  When the build
finishes, I'll share with you whether or how it failed. Thanks!
Stripe employees can see the build results here:
→ https://go/builds/bui_LpVYLkG4TuxsAQ
→ https://go/builds/bui_LpVYUFhzsj0svP

This looks mostly good to me. My one question is whether creating a map this big makes namer noticeably slower.

I took a look at the performance and there's no noticeable change.


on player drags event

on player drags in inventory
works fine
on player clicks  in custominv
works fine
on player drags in custominv
dosent work

Try build 260+ off http://ci.citizensnpcs.co/job/Denizen_Developmental/
I pushed a relevant fix which is in that build.

Using build 263, but not fixed. There is undefined behavior and it only cancels around 5-10% of the time, if I call cancels drags in a custom inventory it will let you drag and only sometimes cancels.


Persisting jwt information to database?

Hello @NovemberOscar ,
This has been a smooth ride doing auth with graphql with this pip.
However, when the flask application restarts, the jwt will no longer be valid.
Is there a way to persist this data into a database?
Let me know.
Thanks,
Mahesh

Hi! Thanks for using Flask-GraphQL-Auth :)
I think your application changes the secret key every time you restart it.
JWT is valid even after restarting the application if the secret key is not changed.
Sincerely,
Lewis


How to classify images using convolutional neural network(CNN) in Matlab

####[Machine Learning]How to classify images using convolutional neural network(CNN) in Matlab
Introduction
Convolutional Neural Network(CNN) is a powerful machine learning technique from the deep learning techniques from the deep learning domain. A collection of diverge image is required to train CNNs. The larger the collection, the richer the features that CNN learns.  Image classification is the process of categorizing and labeling groups of pixels or vectors within an image based on specific rules.
Training CNN with large collection of diverse image is not an easy task. However, there is an easy way. We can use pre-trained CNN to leverage the power of CNN. One advantage of image classification is that after you have learn this, you can do anything you want with it for example, you can train classifiers to identify brain tumor, cancer cell and skin diseases. In this tutorial, we will see on how to classify images using CNN in Matlab
Key takeaways

Plotting the structure of CNN.
Finding the number of classes of a CNN.
How to visualize the features of different layers of CNN.
Comparing features between training data set and testing data set.
Classifying images using CNN

Article quality
How is your article unique? Tell us what makes your approach different from similar articles that have published on the same topic?
Is yours more in-depth? Does it cover additional topics? Do you provide handy tips or anecdotal advice?
References
Please list links to any published content/research that you intend to use to support/guide this article.
Conclusion
Finally, remove the Pre-Submission advice section and all our blockquoted notes as you fill in the form before you submit.
We look forwarding to reviewing your topic suggestion.
Templates to use as guides

How To Guide Template
Software Review Template
Tutorial Template

Good afternoon @collince777  and thank you for submitting your topic to the EngEd program.
After some careful consideration, it struck us that this topic may be a bit over-saturated throughout other blog sites and official documentations.
We typically refrain from publishing content that is covered widely on the net or other blogs. We're more interested in original, practitioner-focused content that takes a deeper dive into programming-centric concepts.
But in order to approve the topic, it has to serve value to the larger developer community at large.
An option and a great way to write this as an in-depth article and make it more add value to the greater developer community at large would be to walk the reader through the USE of methods and functions by building a unique, different, useful project.

We would love to learn your thought process behind the solution you arrived at using these concepts and topics.

That way a developer could see them in action.
As mentioned above - we believe this topic is widely covered on other blog sites.
The best way for students to build a great portfolio is by building what does not exist and what can provide the most value.


Missing subscription level in the Eligibility table

My specific subscription is not listed.  It is

Visual Studio Enterprise (MPN)

When I view the benefit in my.visualstudio.com it shows me

This benefit is currently unavailable for new activations while we make important

Any idea what this means for me?

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

ID: 60b2872e-438a-b86e-9ff5-6dc0021f3fe8
Version Independent ID: 8b9e935e-07ad-4992-edb9-e8361d867617
Content: EMS Benefit
Content Source: subscriptions/vs-ems.md
Product: visual-studio-family
Technology: vs-subscriptions
GitHub Login: @evanwindom
Microsoft Alias: lank

@JeremyTBradshaw - Thanks for reaching out.  The MPN subscriptions are part of the NFR list that's referenced in the first line of the eligibility table and detailed in the first footnote as follows:
"1 Includes: Not for Resale (NFR), Visual Studio Industry Partner (VSIP), Microsoft Partner Network (MPN), FTE, MCT Software & Services Developer, BizSpark. Excludes: Most Valuable Professional (MVP), Regional Director (RD), MCT Software & Services, Imagine, Microsoft Partner Network (Professional)."
EMS is not currently accepting new sign-ups as we're making some updates and resolving a technical issue.  I hope to have news on this soon.  Thank you for your patience.
Are you on your own tenant, or part of an organization?

@evanwindom - Thanks for pointing me to that, I completely missed it 🤦♂!  I am a mix, I have activated the benefit twice in the past - 1st year into my own tenant, 2nd year into my company's.  I'm still all set for ~1 month, so was just checking into it while doing some planning for upcoming things I'll have on the go.  I also have some E3 IUR licenses available to hold me over after that.
Glad to hear the benefit isn't leaving MPN subscription🙏.

Hi, is there any update on when EMS sub will be resolved?


🌈 HXPhoto Picker & Nitro Modules

As mentioned in many previous issues. I will convert TLPhotoPicker to HXPhotoPicker because of the convenience and seamless commits from HXPhotoPicker.
Next I will use Nitro Modules instead of Turbo Module. Turbo Module limits my ability to write Swift and Nitro's speed is superior.
I will finish it in the next few weeks. Waiting for me 😗😗😗

Can't wait @baronha

Can't wait @baronha

No hope

Approved!

@anhquan291 Merged =))) But not /main


0.1.11 wireframe

In version 0.1.10 wireframe was created, however after detailed team discussion some changes were added (unfortunately dramatically changing workflow idea).
Biggest driver of the changes was that rider should see search in RideOffers screen mandatory - without search fields entered screens like RequestRide looses some functionality (can't show riders trip mapped to driver trip: form where to go, to catch a driver).
As search fields are shown, filtering all/your trips took too  much space, thus was moved to separate bottom tab.
The next change was that material-ui autocomplete doesn't work on mobile phones (see #72), so filling of search fields moved to separate screen. However filing new trip form they are still on the same page (should be fixed)
These changes totaly broke 0.1.10 wireframe feng shui and this issue was created to find the right way to restore it

Does NewTrip screen makes sense?
Maybe from offers screen, when search fields from/to entered and no result is not found this search form should turn into "Save trip form" - just adding few fields. This suggestion has some issues with requests screen.


"Save" and "Cancel" buttons for settings sections

Pull Request Description

Add "Save" and "Cancel" buttons in settings sections instead of sending request on unfocus

Important Notes
None
Screenshots
Before:

After:
(note that the "change password" section uses a custom component)

Checklist
Please ensure that the following checklist has been satisfied before submitting the PR:

[x] The documentation has been updated, if necessary.
[x] Screenshots/screencasts have been attached, if there are any visual changes. For interactive or animated visual changes, a screencast is preferred.
[x] All code follows the
Scala,
Java,
TypeScript,
and
Rust
style guides. In case you are using a language not listed above, follow the Rust style guide.
[x] Unit tests have been written where possible.

I would assume after successfully submit current form state become clean state. Right now e.g change account name -> save -> (name successfully changed) -> cancel -> will rollback to the previous (no longer valid) username

https://github.com/user-attachments/assets/8def33e0-e724-4f42-a635-46cc4bff9c72

User account -> cancel is disabled when form is empty. Change password -> cancel is always active
Settings -> Local -> form is in mess

Change password -> cancel is always active

good point! it currently uses a custom component, but upon further thought it's not like there's a reason to not use the new method...

@PabloBuchu should be ready for re-QA now?

@somebody1234 Settings -> local -> Form is still a mess

@PabloBuchu yup, good catch. looks like it is changed internally but because it's separate from the form, the displayed form value doesn't change

@PabloBuchu should be fixed now


Simulation running at <10fps, is that normal?

Training takes forever.

I got around 3 FPS on Lenovo T520.
But, you don't need to visualize when training.

Yes, definitely the visualizer is not needed in training. It should also run a bit faster with no obstacles (difficulty=0) and since they don't appear early anyway it's good for the first models. Also, I suggest making the episodes even shorter at the beginning.
But indeed, the environment is computationally expensive, that's a part of the problem.


importer special methods

We will need to define __repr__, __str__ and equality special methods. Anything else needed for the importers to be production ready? @jm-rivera
FYI @mharoruiz

I need a bit more context!


UI libraries in fronted added

Closes #1927
Changes proposed
added a sub category in Frontend section  named UI Libraries.

ok

@hritikbhattacharya
You don't need to rush or anything.
Just do it whenever you have time, we will just review it after you do the changes.

@Anmol-Baranwal
where is which folder the description of subcategory needed to be added, I didn't able to find it. would please hlep.

@hritikbhattacharya
You can find it here: https://github.com/rupali-codes/LinksHub/blob/main/components/TopBar/CategoryDescriptions.ts
TopBar/CategoryDescriptions.ts

thanks for the help.


wrong checking if thread stack overlaps the other

when you are checking if one stack overlaps the other,
at one point you assume that stack_end is pointing outside the stack:
https://github.com/azure-rtos/threadx/blob/609c75a2e51735fa3ad894e0caef595ab71ba6c9/common_modules/module_manager/src/txm_module_manager_thread_create.c#L159
few lines bellow it you assume that the end of the stack is pointing to part of the stack:
https://github.com/azure-rtos/threadx/blob/609c75a2e51735fa3ad894e0caef595ab71ba6c9/common_modules/module_manager/src/txm_module_manager_thread_create.c#L172
and then you are assuming some weird thing (it is bug, need to be <= not matter what you assume):
https://github.com/azure-rtos/threadx/blob/609c75a2e51735fa3ad894e0caef595ab71ba6c9/common_modules/module_manager/src/txm_module_manager_thread_create.c#L176
and you are not checking the option that:
stack_start < next_thread -> tx_thread_stack_start && next_thread -> tx_thread_stack_end < stack_end

@amgross - you are right. I have fixed it. How does this look:
        /* Check the stack pointer to see if it overlaps with this thread's stack.  */

        /* There are four cases the stacks can overlap:
           1. stack_start is less than tx_thread_stack_start; and stack_end is between tx_thread_stack_start and tx_thread_stack_end.
           2. stack_start is between tx_thread_stack_start and tx_thread_stack_end; and stack_end is greater than tx_thread_stack_end.
           3. stack_start and stack_end are both between tx_thread_stack_start and tx_thread_stack_end.
           4. stack_start is less than tx_thread_stack_start and stack_end is greater than tx_thread_stack_end.

           We can solve for cases 1-3 by checking if stack_start is between tx_thread_stack_start and tx_thread_stack_end OR stack_end
           is between tx_thread_stack_start and tx_thread_stack_end.
           We can solve case 4 by checking if tx_thread_stack_start is between stack_start and stack_end.
        */

        if ( ( (((UCHAR *) ((VOID *) stack_start)) >= ((UCHAR *) ((VOID *) next_thread -> tx_thread_stack_start))) &&
               (((UCHAR *) ((VOID *) stack_start)) <= ((UCHAR *) ((VOID *) next_thread -> tx_thread_stack_end))) ) ||
             ( (((UCHAR *) ((VOID *) stack_end)) >= ((UCHAR *) ((VOID *) next_thread -> tx_thread_stack_start))) &&
               (((UCHAR *) ((VOID *) stack_end)) <= ((UCHAR *) ((VOID *) next_thread -> tx_thread_stack_end))) ) )
       {
           /* Either stack_start or stack_end is in the existing thread's stack, clear the stack pointer to
              force a stack error below.  */
            stack_start =  TX_NULL;
            break;
       }

        if( (((UCHAR *) ((VOID *) stack_start)) <= ((UCHAR *) ((VOID *) next_thread -> tx_thread_stack_start))) &&
            (((UCHAR *) ((VOID *) stack_end)) >= ((UCHAR *) ((VOID *) next_thread -> tx_thread_stack_end))) )
       {
           /* The proposed stack envelopes the existing thread's stack, clear the stack pointer to
              force a stack error below.  */
            stack_start =  TX_NULL;
            break;
       }

hi
better solution should be:
if (stack_start<=next_thread -> tx_thread_stack_end && stack_end >= next_thread -> tx_thread_stack_start )
I think it covers all four options

Hi @amgross - your solution is better. I've made this fix internally and we will update it on our next release. Thanks!

hi @yuxin-azrtos , its a bug, not enhancement.


MINOR: Replacing for with foreach loop in common module

@ijuma Thanks for pointing it out. Please check I have fixed it.


Update Intel logo

There was a rebranding with a new logo.
The old logo from the old link is no longer available.
This PR is coordinated with<EMAIL_ADDRESS>and<EMAIL_ADDRESS>and<EMAIL_ADDRESS>

Thanks @AlexeyAB for the fix! This PR has been merged in 161a927da731b98049879dea7bc3043053056b29. The new logo will be visible on https://tfhub.dev/intel in a few hours.


Add max-height of 700px to StoryPreview image

I missed two properties earlier. This will fix the issue with overflowing image.


GHA: create post-release PR to update README.md

See discussion in #3300.

I second Francis here. I think it creates extra complexity we don't need. We can link to https://github.com/inspektor-gadget/inspektor-gadget/releases/latest/ and say something like "download the gadgetctl binary for your operating system..". In any case, this will be improved once we have #3304.


Add cache layer

Adds cache layer to system, because if i use exist in each page, then system send http requests to Gravatar. All system now works, i create a BC for all systems.
And, must:

Mask GravatarApi as deprecated, and remove in next versions.
Add another cache layer (redis, memcached, etc...)

Cool. I like the caching idea, but we should use an existing library, such as Doctrine :)

So, i not use a common libraries (Doctrine cache, or another), because the many systems creates without this libraries (as example, in my projects i not use doctrine cache system). If developer want use any caching system (Doctrine Cache as example), then he create a custom cache adapter and implement Cache\CacheInterface interface and after configure.
ornicar_gravatar:
    secure: true
    cache: my_custom_cache.service_id

As solution, we can add another cache adapters.

ping?!!

What about PSR-6?

Also since SF 3.1, a native cache system is provided, based on PSR-6: https://symfony.com/blog/new-in-symfony-3-1-cache-component

I vote in favor or the cache component in Symfony


We need a new Ripper!

Hey idk where to post this so i ask here; Can someone pls add an Ripper for https://yande.re :D?

you can use DanbooruDownloader.
https://github.com/Nandaka/DanbooruDownloader/releases

you can use DanbooruDownloader. https://github.com/Nandaka/DanbooruDownloader/releases

Sadly this downloader doesn't seem to handle the huge amount of Images and always crashes

https://github.com/mikf/gallery-dl supports yande.re, but I don't use the website so I dunno if it works.

https://github.com/mikf/gallery-dl supports yande.re, but I don't use the website so I dunno if it works.

This sadly don't help mei either. I'm not a coder, not someone with a "huge" knowledge. Idk why it just can't be added to Rip-Me.

What programming ? You'll need to understand JSON (and the complex internal processing of that JSON), sure, nothing else.

What programming ? You'll need to understand JSON (and the complex internal processing of that JSON, which is all explained in the config doc) and how to use a command line, sure, nothing else. The command line part is the very easiest of it all, too: not really any need for changing folders or anything, only building the command, and that has a few dead-simple universal rules.

It starts alone that the program needs several extra things like Python. I also want a ripper. And not 20 for every single page.

Python is nearly as easy to install as Java, but I see a point in that you'll probly use Java for something else already, but not Python. If one was to install Python, it would be best to use Miniconda which is much more involved but not rocket science, since that makes updating way easier in the long run.
gdl does have a Window$ binary which contains Python, though. Most Linux systems already have Python 3.

If you need a ripper for booru sites then I can recommend Grabber. https://bionus.github.io/imgbrd-grabber/


refactor(papyrus_base_layer): removed unused abi

Was replaced with the full contract Starknet-<IP_ADDRESS>.json

This change is


Iterators

Hey, amazing tutorial! It's already helped me a ton on onboarding (first native language in years tbh).
I've noticed there's no section on iterators. Ziglang has this section at the bottom of this page:
const std = @import("std");

pub fn main() void {
    const msg = "hello this is dog";
    var it = std.mem.tokenize(msg, " ");
    while (it.next()) |item| {
        std.debug.print("{}\n", .{item});
    }
}

...but that's the only place I've found documentation on it so far.
More advanced usage would be nice to. Like, I'm struggling currently iterating over directory entries. The std.fs.Dir object emits both error union with an optional, which doesn't play nicely with payload capture without unwrapping the error union with a try first.
const std = @import("std");

pub fn main() void {
    const cwd = try std.fs.cwd().openDir("", .{ .iterate = true });
    var itr = cwd.iterate();
    while (try itr.next()) |ent| {
        print("{}", .{ ent.name });
    }
}

Closed in https://github.com/Sobeston/ziglearn/commit/b943bfb69102802b8514d9169097c984654c1f70


Devoncarew embeddings

re-layout the embed-dart.html embedding (the two other embeddings are largely unchanged)
whitespace and style changes to the html and css code
move more style and layout behavior into the embed-dart.html file and out of the components file
use divs to help with the positioning and layout
prefer flexbox to width / height 100%
rename some custom elements to have more descriptive names

http://dev.dart-pad.appspot.com/embeddings_demo.html
@Georgehe4 for review; let's talk in person as well - I want to make sure that these changes make sense

lgtm

updated - merging


support for ol.source.Raster

The openlayers api provides a raster class ol.source.Raster that enables you to execute per-pixel operations on a given source image via ol.RasterOperation.
Unfortunately I didn't find any correspondence in your gwt wrapper.
Are there any technical difficulties and do you plan to add support for this class in the future?
Regards,
Daniel

Hello Daniel,
you are right, it isn't implemented yet. I see no technical difficulties to add this source. Do you want to provide a pull request?

Hi Tino,
i'm fairly new to this JsInterop stuff, but i will give it a try.
So, from a quick study of your wrapper classes, i derived the following todos:

create class ol.source.Raster with @JsType(isNative = true)
create class ol.source.RasterOptions with @JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "Object") providing setter Methods for the corresponding fields annotated with @JsProperty
create interface ol.RasterOperation with @FunctionalInterface and @JsFunction defining a single function for the operation call

The ol.RasterOperation in openlayers is defined as @typedef {function((Array.<Array.<number>>|Array.<ImageData>), Object): (Array.<number>|ImageData)}. How do does this translate to Java? Simple generic parameters, like GenericFunction.java or GeometryFunction.java?
If so, what will the actual parameters be? According to the openlayers documentation the ImageData is https://developer.mozilla.org/en-US/docs/Web/API/ImageData. Is that supported by your wrapper? In case of the raw pixel values, does the Array.<Array.<number>> translate to int[][] or double[][] or something else?
Regards,
Daniel


Built-in dataloader that batches findUnique queries fails on uppercase UUID values

Bug description
We have a table in our Postgres DB with a UUID column, like this:
model UploadedImage {
  clientID String? @unique @map("client_id") @db.Uuid
  // + other fields
}

And we query it by that UUID like this (DB is our Prisma client):
async function getByClientID(clientID: string) {
  return await DB.uploadedImage.findUnique({
    where: { clientID },
  });
}

If we make multiple queries in a single tick, like this:
async function getAllByClientID(clientIDs: string[]) {
  return await Promise.all(clientIDs.map(getByClientID);
}

We can see the calls getting batched into a single DB query using Prisma's built-in dataloader.
This works correctly when we pass only one UUID value — regardless of case (which is correct since UUIDs are case-insensitive in Postgres):
> await getAllByClientID(['B54E6D56-8134-4E01-8450-91B0080BA4BC'])
[
  {
    clientID: 'b54e6d56-8134-4e01-8450-91b0080ba4bc', // the value is returned in lowercase
    // ...
  }
]

But incorrectly returns all nulls if we pass multiple UUID values in uppercase:
> await getAllByClientID(['B54E6D56-8134-4E01-8450-91B0080BA4BC', '2576212F-FF76-4B52-934B-FA639C7BDF45'])
[ null, null ]

Fortunately, there's a workaround possible, which is to explicitly lowercase UUID values first:
async function getByClientID(clientID: string) {
  return await DB.uploadedImage.findUnique({
    where: { clientID: clientID.toLowerCase() },
  });
}

But this was an extremely surprising and difficult bug to find and debug in our production codebase and app.
How to reproduce
See above.
Expected behavior
No response
Prisma information
See above.
Environment & setup

OS: Mac OS 14.6.1
Database: PostgreSQL
Node.js version: 22.9.0

Prisma Version
prisma                  : 5.16.2
@prisma/client          : 5.16.2
Computed binaryTarget   : darwin-arm64
Operating System        : darwin
Architecture            : arm64
Node.js                 : v22.9.0
Query Engine (Node-API) : libquery-engine 34ace0eb2704183d2c05b60b52fba5c43c13f303 (at ../node_modules/.pnpm/@prisma+engines<EMAIL_ADDRESS>Schema Engine           : schema-engine-cli 34ace0eb2704183d2c05b60b52fba5c43c13f303 (at ../node_modules/.pnpm/@prisma+engines@5.16.2/node_modules/@prisma/engines/schema-engine-darwin-arm64)
Schema Wasm             : @prisma/prisma-schema-wasm 5.16.0-24.34ace0eb2704183d2c05b60b52fba5c43c13f303
Default Engines Hash    : 34ace0eb2704183d2c05b60b52fba5c43c13f303
Studio                  : 0.502.0

Hi @aseemk, thanks for reporting this! I can see why this would be a difficult thing to identify and debug.

Hey @aseemk, this issue sounds very familiar, I remember us fixing something similar. Your Prisma version is quite old, could you please try with a more recent one and see if you still face this issue?

Ah no, actually I think it might still not have been fixed. Related: https://github.com/prisma/prisma/issues/13552


Timers and Alarms do not go off in sampleapp

Briefly summarize your issue:

In the sampleapp, Alexa properly sets timers and alarms when prompted, but they never go off.
What is the expected behavior?

Timers and alarms go off at the designated time with a ringtone or at least a console message.
What behavior are you observing?

When I prompt Alexa to set a timer or an alarm, she can understand the request and trigger the AlertCapabilityAgent. For example, when I say "Alexa, set a timer for 10 seconds", she will respond with "10 seconds, starting now".
However, absolutely nothing happens 10 seconds later. Alexa does not play the alert ringtone and nothing shows up in the console even with the DEBUG9 flag. The same behavior extends to alarms and reminders.
Below is the debugger message when I say "Alexa, set a timer for 10 seconds":
########################################
Alexa is currently idle!
########################################
2020-03-18 21:37:57.685 [ 16] 5 FocusManager:releaseChannelHelper:channelToRelease=Dialog
2020-03-18 21:37:57.686 [ 16] 5 Channel:removeActivityHelperLocked:interface=SpeechSynthesizer
2020-03-18 21:37:57.686 [ 16] 0 Channel:addToChannelUpdatesLocked:interface=SpeechSynthesizer,focusState=NONE
2020-03-18 21:37:57.687 [ 16] 0 SpeechSynthesizer:onFocusChanged:newFocus=NONE,result=skip,state=FINISHED
2020-03-18 21:37:57.687 [ 16] 5 Channel:setFocus:name=Dialog,newfocusState=NONE,prevfocusState=FOREGROUND,newMixingBehavior=MUST_STOP,forceUpdate=false
2020-03-18 21:37:57.709 [ 16] W Channel:notifyActivitiesFailed::No Associated Activities Found
2020-03-18 21:37:57.711 [ 16] 1 FocusManager:notifyActivityTracker:name=Dialog,interfaceName=SpeechSynthesizer,focusState=NONE
2020-03-18 21:37:57.711 [ 16] 5 AudioActivityTracker:notifyOfActivityUpdates
2020-03-18 21:37:57.713 [ 15] 5 AudioActivityTracker:executeNotifyOfActivityUpdates
2020-03-18 21:37:57.792 [ 35] 9 LibcurlHTTP2Request:writeCallback:id=AVSDownChannel-1,size=1,nmemb=342,userData=0x10374c8
2020-03-18 21:37:57.792 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveData:size=342
2020-03-18 21:37:57.792 [ 35] 9 MimeResponseSink:onBeginMimePart
2020-03-18 21:37:57.792 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.792 [ 35] 9 MimeResponseSink:JsonContentDetected
2020-03-18 21:37:57.793 [ 35] 9 MimeResponseSink:onReceiveMimeData:size=288
2020-03-18 21:37:57.793 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.793 [ 35] 9 MimeResponseSink:onEndMimePart
2020-03-18 21:37:57.793 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.795 [  9] 5 JsonUtils:findNode:reason=missingDirectChild,child=instance
2020-03-18 21:37:57.795 [  9] 5 JsonUtils:findNode:reason=missingDirectChild,child=payloadVersion
2020-03-18 21:37:57.795 [  9] 5 JsonUtils:findNode:reason=missingDirectChild,child=correlationToken
2020-03-18 21:37:57.795 [  9] 5 JsonUtils:findNode:reason=missingDirectChild,child=eventCorrelationToken
2020-03-18 21:37:57.796 [  9] 5 JsonUtils:findNode:reason=missingDirectChild,child=endpoint
2020-03-18 21:37:57.796 [  9] 0 AvsDirective:parseEndpoint::noEndpoint
2020-03-18 21:37:57.797 [  9] I DirectiveSequencer:onDirective:directive=namespace:Alerts,name:SetAlert,messageId:a38a8ff6-9e23-4dd2-a127-5c0891e7381b,dialogRequestId:,correlationToken:,eventCorrelationToken:,payloadVersion:,instance:
2020-03-18 21:37:57.797 [ 3a] 5 DirectiveRouter:getHandlerAndPolicyLocked::configuration found
2020-03-18 21:37:57.798 [ 3a] 5 DirectiveRouter:getHandlerAndPolicyLocked::configuration found
2020-03-18 21:37:57.798 [ 3a] I DirectiveRouter:preHandleDirective:messageId=a38a8ff6-9e23-4dd2-a127-5c0891e7381b,action=calling
2020-03-18 21:37:57.798 [ 3a] 0 CapabilityAgent:addingMessageIdToMap:messageId=a38a8ff6-9e23-4dd2-a127-5c0891e7381b
2020-03-18 21:37:57.802 [  b] 9 DirectiveProcessor:processCancelingQueueLocked:size=0
2020-03-18 21:37:57.802 [  b] 9 DirectiveProcessor:handleQueuedDirectivesLocked:queue size=1
2020-03-18 21:37:57.803 [  b] 9 DirectiveProcessor:handleQueuedDirectivesLocked:proceeding with directive=a38a8ff6-9e23-4dd2-a127-5c0891e7381b,policy= Mediums:MEDIUMS_NONE00 .isBlocking:False
2020-03-18 21:37:57.803 [  b] 5 DirectiveRouter:getHandlerAndPolicyLocked::configuration found
2020-03-18 21:37:57.803 [  b] I DirectiveRouter:handleDirective:messageId=a38a8ff6-9e23-4dd2-a127-5c0891e7381b,action=calling
2020-03-18 21:37:57.804 [  b] 9 DirectiveProcessor:processCancelingQueueLocked:size=0
2020-03-18 21:37:57.805 [ 25] 1 AlertsCapabilityAgent:executeHandleDirectiveImmediately
2020-03-18 21:37:57.805 [ 25] 9 AlertsCapabilityAgent:handleSetAlert
2020-03-18 21:37:57.806 [ 25] E JsonUtils:lookupArrayExistsFailed:reason=keyNotFound,key=assets
2020-03-18 21:37:57.807 [ 25] 0 Alert:parseAlertAssetConfigurationFromJson : assets are not present.
2020-03-18 21:37:57.807 [ 25] E JsonUtils:lookupArrayExistsFailed:reason=keyNotFound,key=assetPlayOrder
2020-03-18 21:37:57.811 [ 25] 0 Alert:parseAlertAssetConfigurationFromJson : asset play order is not present.
2020-03-18 21:37:57.813 [ 25] 5 JsonUtils:findNode:reason=missingDirectChild,child=loopCount
2020-03-18 21:37:57.814 [ 25] 0 Alert:parseAlertAssetConfigurationFromJson : loop count is not present.
2020-03-18 21:37:57.815 [ 25] 5 JsonUtils:findNode:reason=missingDirectChild,child=loopPauseInMilliSeconds
2020-03-18 21:37:57.815 [ 25] 0 Alert:parseAlertAssetConfigurationFromJson : loop pause in milliseconds is not present.
2020-03-18 21:37:57.815 [ 25] 5 JsonUtils:findNode:reason=missingDirectChild,child=backgroundAlertAsset
2020-03-18 21:37:57.815 [ 25] 0 Alert:parseAlertAssetConfigurationFromJson : backgroundAssetId is not present.
2020-03-18 21:37:57.815 [ 25] 9 AlertScheduler:scheduleAlert:token=amzn1.as-ct.v1.Domain:Application:NotificationsV4#DNID#897df294-a9db-37af-abb4-5eb89ead0b28
2020-03-18 21:37:57.867 [ 25] 9 AlertScheduler:setTimerForNextAlertLocked
2020-03-18 21:37:57.867 [ 25] 9 AlertScheduler:notifyObserver:alertToken=amzn1.as-ct.v1.Domain:Application:NotificationsV4#DNID#8a9f1acc-337d-3a06-8c7c-ee8cc4b8c022,alertType=TIMER,state=READY,reason=
2020-03-18 21:37:57.868 [ 25] 1 AlertsCapabilityAgent:executeNotifyObservers:alertToken=amzn1.as-ct.v1.Domain:Application:NotificationsV4#DNID#897df294-a9db-37af-abb4-5eb89ead0b28,alertType=TIMER,state=SCHEDULED_FOR_LATER,reason=2020-03-18T21:38:07+0000
2020-03-18 21:37:57.869 [ 25] 5 ContextManager:setState
2020-03-18 21:37:57.872 [ 25] W UUIDGeneration:low entropy on call to generate UUID:current entropy=32
2020-03-18 21:37:57.872 [ 25] 0 EventBuilder:buildJsonEventString:messageId=f454dfb4-dc0a-4630-851c-ab58df19a97c,namespace=Alerts,name=SetAlertSucceeded
2020-03-18 21:37:57.873 [ 25] 0 EventBuilder:buildJsonEventString:event={"event":{"header":{"namespace":"Alerts","name":"SetAlertSucceeded","messageId":"f454dfb4-dc0a-4630-851c-ab58df19a97c"},"payload":{"token":"amzn1.as-ct.v1.Domain:Application:NotificationsV4#DNID#897df294-a9db-37af-abb4-5eb89ead0b28"}}}
2020-03-18 21:37:57.876 [ 24] 9 AlertsCapabilityAgent:onAlertStateChange:alertToken=amzn1.as-ct.v1.Domain:Application:NotificationsV4#DNID#8a9f1acc-337d-3a06-8c7c-ee8cc4b8c022,alertType=TIMER,state=READY,reason=
2020-03-18 21:37:57.877 [ 25] 1 AlertsCapabilityAgent:executeOnAlertStateChange:alertToken=amzn1.as-ct.v1.Domain:Application:NotificationsV4#DNID#8a9f1acc-337d-3a06-8c7c-ee8cc4b8c022,state=READY,reason=
2020-03-18 21:37:57.877 [ 25] 9 AlertsCapabilityAgent:acquireChannel
2020-03-18 21:37:57.878 [ 25] 1 FocusManager:acquireChannel:channelName=Alert,interface=Alerts
2020-03-18 21:37:57.878 [ 25] E FocusManager:acquireChannelFailed:reason=channelNotFound,channelName=Alert
2020-03-18 21:37:57.879 [ 25] 1 AlertsCapabilityAgent:executeNotifyObservers:alertToken=amzn1.as-ct.v1.Domain:Application:NotificationsV4#DNID#8a9f1acc-337d-3a06-8c7c-ee8cc4b8c022,alertType=TIMER,state=READY,reason=
2020-03-18 21:37:57.899 [ 35] 9 LibcurlHTTP2Request:headerCallback:id=AVSEvent-11,size=1,nmemb=13,userData=0x1038b48
2020-03-18 21:37:57.899 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveResponseCode:responseCode=204
2020-03-18 21:37:57.899 [ 35] 9 MimeResponseSink:onReceiveResponseCode:responseCode=204
2020-03-18 21:37:57.900 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.900 [ 35] 7 MessageRequestHandler:onReceiveResponseCode:responseCode=204
2020-03-18 21:37:57.900 [ 35] 7 MessageRequestHandler:reportMessageRequestAcknowledged
2020-03-18 21:37:57.900 [ 35] 7 HTTP2Transport:onMessageRequestAcknowledged
2020-03-18 21:37:57.900 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveHeaderLine:line=HTTP/2 204
2020-03-18 21:37:57.900 [ 35] 9 MimeResponseSink:onReceiveHeaderLine:line=HTTP/2 204
2020-03-18 21:37:57.900 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.900 [ 35] 9 LibcurlHTTP2Request:headerCallback:id=AVSEvent-11,size=1,nmemb=56,userData=0x1038b48
2020-03-18 21:37:57.900 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveHeaderLine:line=x-amzn-requestid: e3a7c3d6-5369-40ea-844a-759710114676
2020-03-18 21:37:57.900 [ 35] 9 MimeResponseSink:onReceiveHeaderLine:line=x-amzn-requestid: e3a7c3d6-5369-40ea-844a-759710114676
2020-03-18 21:37:57.900 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.900 [ 35] 0 MimeResponseSink:receivedRequestId:value=x-amzn-requestid: e3a7c3d6-5369-40ea-844a-759710114676
2020-03-18 21:37:57.901 [ 35] 9 LibcurlHTTP2Request:headerCallback:id=AVSEvent-11,size=1,nmemb=83,userData=0x1038b48
2020-03-18 21:37:57.901 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveHeaderLine:line=x-amzn-requestid: 120b34fffe9391d1-0001f37f-00fc51ca-e245b5d1c110e864-b3e27056-11
2020-03-18 21:37:57.901 [ 35] 9 MimeResponseSink:onReceiveHeaderLine:line=x-amzn-requestid: 120b34fffe9391d1-0001f37f-00fc51ca-e245b5d1c110e864-b3e27056-11
2020-03-18 21:37:57.901 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.901 [ 35] 0 MimeResponseSink:receivedRequestId:value=x-amzn-requestid: 120b34fffe9391d1-0001f37f-00fc51ca-e245b5d1c110e864-b3e27056-11
2020-03-18 21:37:57.901 [ 35] 9 LibcurlHTTP2Request:headerCallback:id=AVSEvent-11,size=1,nmemb=32,userData=0x1038b48
2020-03-18 21:37:57.901 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveHeaderLine:line=access-control-allow-origin: *
2020-03-18 21:37:57.902 [ 35] 9 MimeResponseSink:onReceiveHeaderLine:line=access-control-allow-origin: *
2020-03-18 21:37:57.902 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.902 [ 35] 9 LibcurlHTTP2Request:headerCallback:id=AVSEvent-11,size=1,nmemb=2,userData=0x1038b48
2020-03-18 21:37:57.902 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveHeaderLine:line=
2020-03-18 21:37:57.902 [ 35] 9 MimeResponseSink:onReceiveHeaderLine:line=
2020-03-18 21:37:57.902 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.902 [ 35] 9 HTTP2MimeResponseDecoder:onResponseFinished:status=COMPLETE
2020-03-18 21:37:57.902 [ 35] 9 MimeResponseSink:onResponseFinished:status=COMPLETE
2020-03-18 21:37:57.903 [ 35] 7 MessageRequestHandler:onResponseFinished:status=COMPLETE,responseCode=204
2020-03-18 21:37:57.903 [ 35] 7 MessageRequestHandler:reportMessageRequestAcknowledged
2020-03-18 21:37:57.903 [ 35] 7 MessageRequestHandler:reportMessageRequestFinished
2020-03-18 21:37:57.903 [ 35] 7 HTTP2Transport:onMessageRequestFinished:countOfUnfinishedMessageHandlers=0
2020-03-18 21:37:57.903 [ 35] 7 LibcurlHTTP2Connection:streamFinished:streamId=AVSEvent-11,result=No error,CURLcode=0
2020-03-18 21:37:57.903 [ 35] 9 LibcurlHTTP2Connection:releaseStream:streamId=AVSEvent-11
2020-03-18 21:37:57.904 [ 35] 7 MessageRequestHandler:reportMessageRequestAcknowledged
2020-03-18 21:37:57.904 [ 35] 7 MessageRequestHandler:reportMessageRequestFinished
2020-03-18 21:37:57.906 [ 3e] 7 HTTP2Transport:onRequestEnqueued
2020-03-18 21:37:57.906 [ 34] 7 MessageRequestHandler:create:context=0x10ecd50,messageRequest=0x71a16938
2020-03-18 21:37:57.907 [ 34] 5 ExchangeHandler:ExchangeHandler:context=0x10ecd50
2020-03-18 21:37:57.907 [ 34] 7 MessageRequestHandler:MessageRequestHandler:context=0x10ecd50,messageRequest=0x71a16938
2020-03-18 21:37:57.907 [ 34] 9 HTTP2MimeRequestEncoder:HTTP2MimeRequestEncoder:boundary=WhooHooZeerOoonie!,source=0x10a22a4
2020-03-18 21:37:57.907 [ 34] 9 MimeResponseSink:MimeResponseSink:handler=0x10a22a8
2020-03-18 21:37:57.907 [ 34] 9 HTTP2MimeResponseDecoder:HTTP2MimeResponseDecoder
2020-03-18 21:37:57.907 [ 34] 7 HTTP2Transport:onMessageRequestSent:countOfUnfinishedMessageHandlers=1
2020-03-18 21:37:57.908 [ 34] 7 HTTP2Transport:createAndSendRequest:type=POST
2020-03-18 21:37:57.908 [ 34] 9 HTTP2MimeRequestEncoder:getRequestHeaderLines
2020-03-18 21:37:57.908 [ 34] 9 MessageRequestHandler:getRequestHeaderLines
2020-03-18 21:37:57.908 [ 34] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.947 [ 35] 9 LibcurlHTTP2Request:writeCallback:id=AVSDownChannel-1,size=1,nmemb=197,userData=0x10374c8
2020-03-18 21:37:57.948 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveData:size=197
2020-03-18 21:37:57.948 [ 35] 9 MimeResponseSink:onBeginMimePart
2020-03-18 21:37:57.948 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.948 [ 35] 9 MimeResponseSink:JsonContentDetected
2020-03-18 21:37:57.948 [ 35] 9 MimeResponseSink:onReceiveMimeData:size=143
2020-03-18 21:37:57.948 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.948 [ 35] 9 MimeResponseSink:onEndMimePart
2020-03-18 21:37:57.948 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.949 [ 35] 9 LibcurlHTTP2Connection:insertActiveStream:handle=0x1196000,streamId=AVSEvent-13
2020-03-18 21:37:57.950 [ 35] 9 LibcurlHTTP2Request:readCallback:id=AVSEvent-13,size=1,nmemb=65536,userData=0x1038b48
2020-03-18 21:37:57.962 [  9] 5 JsonUtils:findNode:reason=missingDirectChild,child=instance
2020-03-18 21:37:57.963 [  9] 5 JsonUtils:findNode:reason=missingDirectChild,child=payloadVersion
2020-03-18 21:37:57.963 [  9] 5 JsonUtils:findNode:reason=missingDirectChild,child=correlationToken
2020-03-18 21:37:57.963 [  9] 5 JsonUtils:findNode:reason=missingDirectChild,child=eventCorrelationToken
2020-03-18 21:37:57.963 [  9] 5 JsonUtils:findNode:reason=missingDirectChild,child=endpoint
2020-03-18 21:37:57.963 [  9] 0 AvsDirective:parseEndpoint::noEndpoint
2020-03-18 21:37:57.964 [  9] I DirectiveSequencer:onDirective:directive=namespace:DuckingController,name:StopDucking,messageId:b4c2bd9a-e509-48fb-a1c4-62eeff8fc1c9,dialogRequestId:,correlationToken:,eventCorrelationToken:,payloadVersion:,instance:
2020-03-18 21:37:57.965 [ 3a] 5 DirectiveRouter:getHandlerAndPolicyLocked::noMatcher
2020-03-18 21:37:57.965 [ 35] 9 HTTP2MimeRequestEncoder:onSendData:size=65536,state=NEW
2020-03-18 21:37:57.965 [ 35] 9 HTTP2MimeRequestEncoder:setState:state=NEW,newState=GETTING_1ST_PART_HEADERS
2020-03-18 21:37:57.965 [ 35] 9 MessageRequestHandler:getMimePartHeaderLines
2020-03-18 21:37:57.965 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.965 [ 3a] 5 DirectiveRouter:getHandlerAndPolicyLocked::noMatcher
2020-03-18 21:37:57.965 [ 35] 9 HTTP2MimeRequestEncoder:setState:state=GETTING_1ST_PART_HEADERS,newState=SENDING_1ST_BOUNDARY
2020-03-18 21:37:57.965 [ 3a] 0 DirectiveRouter:noHandlerFoundForDirective:namespace=DuckingController,name=StopDucking
2020-03-18 21:37:57.965 [ 35] 9 HTTP2MimeRequestEncoder:setState:state=SENDING_1ST_BOUNDARY,newState=SENDING_PART_HEADERS
2020-03-18 21:37:57.966 [ 35] 9 HTTP2MimeRequestEncoder:setState:state=SENDING_PART_HEADERS,newState=SENDING_PART_DATA
2020-03-18 21:37:57.966 [ 35] 9 MessageRequestHandler:onSendMimePartData:size=65429
2020-03-18 21:37:57.966 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.966 [ 35] 9 MessageRequestHandler:onSendMimePartData:size=65194
2020-03-18 21:37:57.966 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.966 [ 35] 9 HTTP2MimeRequestEncoder:setState:state=SENDING_PART_DATA,newState=SENDING_END_BOUNDARY
2020-03-18 21:37:57.966 [ 35] 9 HTTP2MimeRequestEncoder:setState:state=SENDING_END_BOUNDARY,newState=GETTING_NTH_PART_HEADERS
2020-03-18 21:37:57.966 [ 35] 9 MessageRequestHandler:getMimePartHeaderLines
2020-03-18 21:37:57.967 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:57.967 [ 35] 9 HTTP2MimeRequestEncoder:setState:state=GETTING_NTH_PART_HEADERS,newState=SENDING_TERMINATING_DASHES
2020-03-18 21:37:57.967 [ 35] 9 HTTP2MimeRequestEncoder:setState:state=SENDING_TERMINATING_DASHES,newState=DONE
2020-03-18 21:37:57.968 [ 35] 9 LibcurlHTTP2Request:readCallback:id=AVSEvent-13,size=1,nmemb=65536,userData=0x1038b48
2020-03-18 21:37:57.968 [ 35] 9 HTTP2MimeRequestEncoder:onSendData:size=65536,state=DONE
2020-03-18 21:37:57.966 [ 3a] W DirectiveRouter:preHandleDirectiveFailed:messageId=b4c2bd9a-e509-48fb-a1c4-62eeff8fc1c9,reason=noHandlerRegistered
2020-03-18 21:37:57.972 [ 3a] I DirectiveSequencer:sendingExceptionEncountered:messageId=b4c2bd9a-e509-48fb-a1c4-62eeff8fc1c9
2020-03-18 21:37:57.972 [ 3a] 5 AVSContext:toJson
2020-03-18 21:37:57.974 [ 3a] W UUIDGeneration:low entropy on call to generate UUID:current entropy=32
2020-03-18 21:37:57.975 [ 3a] 0 EventBuilder:buildJsonEventString:messageId=d9f0c503-1191-4d64-9ace-f05fd51f2fb2,namespace=System,name=ExceptionEncountered
2020-03-18 21:37:57.975 [ 3a] 0 EventBuilder:buildJsonEventString:event={"context":{"properties":[]},"event":{"header":{"namespace":"System","name":"ExceptionEncountered","messageId":"d9f0c503-1191-4d64-9ace-f05fd51f2fb2"},"payload":{"unparsedDirective":"{\"directive\":{\"header\":{\"namespace\":\"DuckingController\",\"name\":\"StopDucking\",\"messageId\":\"b4c2bd9a-e509-48fb-a1c4-62eeff8fc1c9\"},\"payload\":{}}}","error":{"type":"UNSUPPORTED_OPERATION","message":"Unsupported operation"}}}}
2020-03-18 21:37:57.976 [ 3a] 7 HTTP2Transport:onRequestEnqueued
2020-03-18 21:37:58.223 [ 35] 9 LibcurlHTTP2Request:headerCallback:id=AVSEvent-13,size=1,nmemb=13,userData=0x1038b48
2020-03-18 21:37:58.223 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveResponseCode:responseCode=204
2020-03-18 21:37:58.224 [ 35] 9 MimeResponseSink:onReceiveResponseCode:responseCode=204
2020-03-18 21:37:58.224 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.224 [ 35] 7 MessageRequestHandler:onReceiveResponseCode:responseCode=204
2020-03-18 21:37:58.224 [ 35] 7 MessageRequestHandler:reportMessageRequestAcknowledged
2020-03-18 21:37:58.224 [ 35] 7 HTTP2Transport:onMessageRequestAcknowledged
2020-03-18 21:37:58.225 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveHeaderLine:line=HTTP/2 204
2020-03-18 21:37:58.225 [ 35] 9 MimeResponseSink:onReceiveHeaderLine:line=HTTP/2 204
2020-03-18 21:37:58.225 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.225 [ 34] 7 MessageRequestHandler:create:context=0x10ecd50,messageRequest=0x10e95ac
2020-03-18 21:37:58.225 [ 34] 5 ExchangeHandler:ExchangeHandler:context=0x10ecd50
2020-03-18 21:37:58.226 [ 34] 7 MessageRequestHandler:MessageRequestHandler:context=0x10ecd50,messageRequest=0x10e95ac
2020-03-18 21:37:58.225 [ 35] 9 LibcurlHTTP2Request:headerCallback:id=AVSEvent-13,size=1,nmemb=56,userData=0x1038b48
2020-03-18 21:37:58.226 [ 34] 9 HTTP2MimeRequestEncoder:HTTP2MimeRequestEncoder:boundary=WhooHooZeerOoonie!,source=0x10dbd64
2020-03-18 21:37:58.226 [ 34] 9 MimeResponseSink:MimeResponseSink:handler=0x10dbd68
2020-03-18 21:37:58.226 [ 34] 9 HTTP2MimeResponseDecoder:HTTP2MimeResponseDecoder
2020-03-18 21:37:58.227 [ 34] 7 HTTP2Transport:onMessageRequestSent:countOfUnfinishedMessageHandlers=2
2020-03-18 21:37:58.227 [ 34] 7 HTTP2Transport:createAndSendRequest:type=POST
2020-03-18 21:37:58.227 [ 34] 9 HTTP2MimeRequestEncoder:getRequestHeaderLines
2020-03-18 21:37:58.227 [ 34] 9 MessageRequestHandler:getRequestHeaderLines
2020-03-18 21:37:58.227 [ 34] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.226 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveHeaderLine:line=x-amzn-requestid: f88087ef-5161-4c29-a4f8-c4986172d76c
2020-03-18 21:37:58.228 [ 35] 9 MimeResponseSink:onReceiveHeaderLine:line=x-amzn-requestid: f88087ef-5161-4c29-a4f8-c4986172d76c
2020-03-18 21:37:58.228 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.228 [ 35] 0 MimeResponseSink:receivedRequestId:value=x-amzn-requestid: f88087ef-5161-4c29-a4f8-c4986172d76c
2020-03-18 21:37:58.229 [ 35] 9 LibcurlHTTP2Request:headerCallback:id=AVSEvent-13,size=1,nmemb=83,userData=0x1038b48
2020-03-18 21:37:58.229 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveHeaderLine:line=x-amzn-requestid: 120b34fffe9391d1-0001f37f-00fc51ca-e245b5d1c110e864-b3e27056-13
2020-03-18 21:37:58.229 [ 35] 9 MimeResponseSink:onReceiveHeaderLine:line=x-amzn-requestid: 120b34fffe9391d1-0001f37f-00fc51ca-e245b5d1c110e864-b3e27056-13
2020-03-18 21:37:58.229 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.229 [ 35] 0 MimeResponseSink:receivedRequestId:value=x-amzn-requestid: 120b34fffe9391d1-0001f37f-00fc51ca-e245b5d1c110e864-b3e27056-13
2020-03-18 21:37:58.230 [ 35] 9 LibcurlHTTP2Request:headerCallback:id=AVSEvent-13,size=1,nmemb=32,userData=0x1038b48
2020-03-18 21:37:58.230 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveHeaderLine:line=access-control-allow-origin: *
2020-03-18 21:37:58.230 [ 35] 9 MimeResponseSink:onReceiveHeaderLine:line=access-control-allow-origin: *
2020-03-18 21:37:58.230 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.230 [ 35] 9 LibcurlHTTP2Request:headerCallback:id=AVSEvent-13,size=1,nmemb=2,userData=0x1038b48
2020-03-18 21:37:58.231 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveHeaderLine:line=
2020-03-18 21:37:58.231 [ 35] 9 MimeResponseSink:onReceiveHeaderLine:line=
2020-03-18 21:37:58.231 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.232 [ 35] 9 HTTP2MimeResponseDecoder:onResponseFinished:status=COMPLETE
2020-03-18 21:37:58.232 [ 35] 9 MimeResponseSink:onResponseFinished:status=COMPLETE
2020-03-18 21:37:58.232 [ 35] 7 MessageRequestHandler:onResponseFinished:status=COMPLETE,responseCode=204
2020-03-18 21:37:58.232 [ 35] 7 MessageRequestHandler:reportMessageRequestAcknowledged
2020-03-18 21:37:58.233 [ 35] 7 MessageRequestHandler:reportMessageRequestFinished
2020-03-18 21:37:58.233 [ 35] 7 HTTP2Transport:onMessageRequestFinished:countOfUnfinishedMessageHandlers=1
2020-03-18 21:37:58.233 [ 35] 7 LibcurlHTTP2Connection:streamFinished:streamId=AVSEvent-13,result=No error,CURLcode=0
2020-03-18 21:37:58.234 [ 35] 9 LibcurlHTTP2Connection:releaseStream:streamId=AVSEvent-13
2020-03-18 21:37:58.234 [ 35] 7 MessageRequestHandler:reportMessageRequestAcknowledged
2020-03-18 21:37:58.234 [ 35] 7 MessageRequestHandler:reportMessageRequestFinished
2020-03-18 21:37:58.235 [ 35] 9 LibcurlHTTP2Connection:insertActiveStream:handle=0x134fdb0,streamId=AVSEvent-15
2020-03-18 21:37:58.236 [ 35] 9 LibcurlHTTP2Request:readCallback:id=AVSEvent-15,size=1,nmemb=65536,userData=0x127c2d8
2020-03-18 21:37:58.237 [ 35] 9 HTTP2MimeRequestEncoder:onSendData:size=65536,state=NEW
2020-03-18 21:37:58.237 [ 35] 9 HTTP2MimeRequestEncoder:setState:state=NEW,newState=GETTING_1ST_PART_HEADERS
2020-03-18 21:37:58.237 [ 35] 9 MessageRequestHandler:getMimePartHeaderLines
2020-03-18 21:37:58.237 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.237 [ 35] 9 HTTP2MimeRequestEncoder:setState:state=GETTING_1ST_PART_HEADERS,newState=SENDING_1ST_BOUNDARY
2020-03-18 21:37:58.238 [ 35] 9 HTTP2MimeRequestEncoder:setState:state=SENDING_1ST_BOUNDARY,newState=SENDING_PART_HEADERS
2020-03-18 21:37:58.238 [ 35] 9 HTTP2MimeRequestEncoder:setState:state=SENDING_PART_HEADERS,newState=SENDING_PART_DATA
2020-03-18 21:37:58.238 [ 35] 9 MessageRequestHandler:onSendMimePartData:size=65429
2020-03-18 21:37:58.238 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.238 [ 35] 9 MessageRequestHandler:onSendMimePartData:size=65006
2020-03-18 21:37:58.238 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.239 [ 35] 9 HTTP2MimeRequestEncoder:setState:state=SENDING_PART_DATA,newState=SENDING_END_BOUNDARY
2020-03-18 21:37:58.239 [ 35] 9 HTTP2MimeRequestEncoder:setState:state=SENDING_END_BOUNDARY,newState=GETTING_NTH_PART_HEADERS
2020-03-18 21:37:58.239 [ 35] 9 MessageRequestHandler:getMimePartHeaderLines
2020-03-18 21:37:58.239 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.239 [ 35] 9 HTTP2MimeRequestEncoder:setState:state=GETTING_NTH_PART_HEADERS,newState=SENDING_TERMINATING_DASHES
2020-03-18 21:37:58.239 [ 35] 9 HTTP2MimeRequestEncoder:setState:state=SENDING_TERMINATING_DASHES,newState=DONE
2020-03-18 21:37:58.241 [ 35] 9 LibcurlHTTP2Request:readCallback:id=AVSEvent-15,size=1,nmemb=65536,userData=0x127c2d8
2020-03-18 21:37:58.241 [ 35] 9 HTTP2MimeRequestEncoder:onSendData:size=65536,state=DONE
2020-03-18 21:37:58.342 [ 35] 9 LibcurlHTTP2Request:headerCallback:id=AVSEvent-15,size=1,nmemb=13,userData=0x127c2d8
2020-03-18 21:37:58.343 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveResponseCode:responseCode=204
2020-03-18 21:37:58.343 [ 35] 9 MimeResponseSink:onReceiveResponseCode:responseCode=204
2020-03-18 21:37:58.343 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.343 [ 35] 7 MessageRequestHandler:onReceiveResponseCode:responseCode=204
2020-03-18 21:37:58.343 [ 35] 7 MessageRequestHandler:reportMessageRequestAcknowledged
2020-03-18 21:37:58.343 [ 35] 7 HTTP2Transport:onMessageRequestAcknowledged
2020-03-18 21:37:58.343 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveHeaderLine:line=HTTP/2 204
2020-03-18 21:37:58.344 [ 35] 9 MimeResponseSink:onReceiveHeaderLine:line=HTTP/2 204
2020-03-18 21:37:58.344 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.344 [ 35] 9 LibcurlHTTP2Request:headerCallback:id=AVSEvent-15,size=1,nmemb=56,userData=0x127c2d8
2020-03-18 21:37:58.344 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveHeaderLine:line=x-amzn-requestid: c63b5954-32ee-4bdc-884e-964627e0493e
2020-03-18 21:37:58.344 [ 35] 9 MimeResponseSink:onReceiveHeaderLine:line=x-amzn-requestid: c63b5954-32ee-4bdc-884e-964627e0493e
2020-03-18 21:37:58.344 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.344 [ 35] 0 MimeResponseSink:receivedRequestId:value=x-amzn-requestid: c63b5954-32ee-4bdc-884e-964627e0493e
2020-03-18 21:37:58.344 [ 35] 9 LibcurlHTTP2Request:headerCallback:id=AVSEvent-15,size=1,nmemb=83,userData=0x127c2d8
2020-03-18 21:37:58.344 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveHeaderLine:line=x-amzn-requestid: 120b34fffe9391d1-0001f37f-00fc51ca-e245b5d1c110e864-b3e27056-15
2020-03-18 21:37:58.344 [ 35] 9 MimeResponseSink:onReceiveHeaderLine:line=x-amzn-requestid: 120b34fffe9391d1-0001f37f-00fc51ca-e245b5d1c110e864-b3e27056-15
2020-03-18 21:37:58.345 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.345 [ 35] 0 MimeResponseSink:receivedRequestId:value=x-amzn-requestid: 120b34fffe9391d1-0001f37f-00fc51ca-e245b5d1c110e864-b3e27056-15
2020-03-18 21:37:58.345 [ 35] 9 LibcurlHTTP2Request:headerCallback:id=AVSEvent-15,size=1,nmemb=32,userData=0x127c2d8
2020-03-18 21:37:58.345 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveHeaderLine:line=access-control-allow-origin: *
2020-03-18 21:37:58.347 [ 35] 9 MimeResponseSink:onReceiveHeaderLine:line=access-control-allow-origin: *
2020-03-18 21:37:58.347 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.348 [ 35] 9 LibcurlHTTP2Request:headerCallback:id=AVSEvent-15,size=1,nmemb=2,userData=0x127c2d8
2020-03-18 21:37:58.348 [ 35] 9 HTTP2MimeResponseDecoder:onReceiveHeaderLine:line=
2020-03-18 21:37:58.349 [ 35] 9 MimeResponseSink:onReceiveHeaderLine:line=
2020-03-18 21:37:58.349 [ 35] 9 HTTP2Transport:onActivity
2020-03-18 21:37:58.350 [ 35] 9 HTTP2MimeResponseDecoder:onResponseFinished:status=COMPLETE
2020-03-18 21:37:58.350 [ 35] 9 MimeResponseSink:onResponseFinished:status=COMPLETE
2020-03-18 21:37:58.350 [ 35] 7 MessageRequestHandler:onResponseFinished:status=COMPLETE,responseCode=204
2020-03-18 21:37:58.350 [ 35] 7 MessageRequestHandler:reportMessageRequestAcknowledged
2020-03-18 21:37:58.350 [ 35] 7 MessageRequestHandler:reportMessageRequestFinished
2020-03-18 21:37:58.351 [ 35] 7 HTTP2Transport:onMessageRequestFinished:countOfUnfinishedMessageHandlers=0
2020-03-18 21:37:58.351 [ 35] 7 LibcurlHTTP2Connection:streamFinished:streamId=AVSEvent-15,result=No error,CURLcode=0
2020-03-18 21:37:58.352 [ 35] 9 LibcurlHTTP2Connection:releaseStream:streamId=AVSEvent-15
2020-03-18 21:37:58.353 [ 35] 7 MessageRequestHandler:reportMessageRequestAcknowledged
2020-03-18 21:37:58.353 [ 35] 7 MessageRequestHandler:reportMessageRequestFinished
Provide the steps to reproduce the issue, if applicable:

I followed the instructions on the AVS developer portal to build the sampleapp on Raspberry Pi: https://developer.amazon.com/en-US/docs/alexa/alexa-voice-service/build-the-avs-device-sdk.html. I did not make any modifications.
Tell us about your environment:

What version of the AVS Device SDK are you using?
  <1.17.0>

Tell us what hardware you're using:

[ ] Desktop / Laptop
[1] Raspberry Pi
[ ] Other - tell us more:

Tell us about your OS (Type & version):

[ ] Linux
[ ] MacOS
[1] Raspbian Stretch
[ ] Raspbian Jessy
[ ] Other - tell us more:

Hi @Alexlizx, looking at the trace you provide, one thing that jumps out is the following:
2020-03-18 21:37:57.878 [ 25] 1 FocusManager:acquireChannel:channelName=Alert,interface=Alerts
2020-03-18 21:37:57.878 [ 25] E FocusManager:acquireChannelFailed:reason=channelNotFound,channelName=Alert
This should not happen - have you changed the FocusManager, or the channels which it expects to be available?  Alerts CapabilityAgent (CA) will request this channel in order to render its audio.  The error tells us the channel did not exist ( it is defined in AVSCommon/SDKInterfaces/ * /FocusManagerInterface.h along with the other default channels ).  In that case, Alerts CA will not get access to the channel, and so will not render its audio.
Please let us know, thanks.

Hi @dhpp, thank you for spotting this error! This is exactly what was causing the issue!
Yes, I did change the ALERT_CHANNEL_PRIORITY in FocusManagerInterface.h. I thought that alerts weren't going off because the priority was low, so I changed the channel priority from the default 200 to 100. However, this did not fix anything. I guess the reason was DIALOG already has 100.
I just changed the ALERT_CHANNEL_PRIORITY from 100 to 151 (between COMMUNICATION and CONTENT) and sure enough, the alert now works!
I am curious as to why the default ALERT_CHANNEL_PRIORITY of 200 did not work.

Great - pleased to hear this resolved your issue!  The default value of 200 should have been fine though, did you change other things in the SDK that pertain to Channels, or FocusManager in general?

Great - pleased to hear this resolved your issue! The default value of 200 should have been fine though, did you change other things in the SDK that pertain to Channels, or FocusManager in general?

No, the priority was the only thing I changed. I suspect that the reason alerts were not going off was because I did not run the sample application as root.

Hi @Alexlizx it sounds like your issue has been resolved.
I will close this issue but feel free to reopen if you are still encountering problems.


Correct parameter for certificate verification

We have seen users specifying the verification mode without quotes around them, which does not work

Please prefix the commit message with "Doc:" if the commit updates only documentation.


Test against Rails 5.x and Ruby 2.x

Rails 5.0 and 5.1
Ruby 2.2, 2.3, 2.4, and 2.5-dev
Dev: use default rbenv/chruby/rvm Ruby version
Travis: cache bundle between builds

Thanks @jeremy ---- green!


Add loading messages to the loading wheels

Expand the loading component from the Portis PR to include a message. The waiting times, in order, are these:

Connecting to provider
Connecting to server
Connecting to the DataVault
Confirming Identity

Also combines the disconnectProvider function from handleClose and disconnect.

Pull Request Test Coverage Report for Build 939051077

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 0.0%

Totals

Change from base Build 936147854:
0.0%

Covered Lines:
0

Relevant Lines:
39

💛  - Coveralls


Standardize JSON responses

The API server should return a bona fide JSON object in all responses, rather than just returning an array or a value. Extension of #29.
Possible examples:
{
  "success": true,
  "data": [
     {
       "name": "CS271"
     }
   ]
}

{
  "success": false,
  "error": "haha, oops"
}

Just to clarify from our talk, we all have agreed on this standardized JSON response, as follows:

The response object shall always be a JSON object.
The object shall always contain success field indicating whether the request was successfully handled or not.
If the success field is true, there shall be another field named data that shall be an array containing result object (or objects). Even if there is a single result object every time, the data field shall always be an array.
If the success field is false, there shall be another field named error that specifies an error message string.

This allows us to maintain the responses a lot more easily. If we need additional fields in the future, simply add them to the root object.

@philectron
I want to add on to the standardization rule if you agree.
I thought at first that data made sense for the return for all array responses, but as I have been updating the plan endpoints I realized it should be specific based on the request.
For example here is the newest response for a "get plan by id" request:
{
"planId": 310,
"status": 0,
"planName": "Han's cool plan",
"studentId": 5,
"created": "2020-01-02T11:35:42.000Z",
"lastUpdated": "2020-02-16T19:54:53.000Z",
"courses": [
{
...data about the first course...
},
{
...data about the second course...
},
...
]
}
In this case instead of just having the array as "data" we use a more specific named pair "courses".
For a list of plans returned by user id instead of "data" you would call your array "plans".
Let me know if this sounds okay to you.

This is a late reply, but my initial instinct would be to use the following structure for that request:
{
  "success": true,
  "data": {
    "id": 310,
    "name": "Han's Cool Plan",
    "status": 0,
    "author": 5,
    "created":<PHONE_NUMBER>,
    "updated":<PHONE_NUMBER>,
    "courses": [
      {
        "id": 32512,
        "name": "CS 462"
      },
      {
        "id": 37133,
        "name": "CS 492"
      }
    ]
  }
}

To elaborate, the idea behind standardizing our responses in this way is to ensure that the structure of certain parts of our responses (e.g., the top level keys) is consistent and immutable. From there, we define a specific key ("data") under which dynamic content is stored. Done correctly, this would theoretically allow us to hot-swap endpoints in the code without changing the parsing logic and still be able to retrieve data. This makes things more extensible (imo), easier for us, and (again, theoretically) easier for (hypothetical) people who might use our endpoints. I'd argue it's much cleaner to contain returned data under a single top-level key. For a contrived example, with this structure, we could use a "success" key in our data where previously we couldn't.

I guess an example for error responses will be like this?
{
  "success": false,
  "error": {
    "code": 400,
    "message": "Plan name must be at least 5-character long."
  }
}

I really like this standardized JSON response, by the way.

I have some objections still.
My biggest issue is that the response we get back already does all this wrapping for us, so it seems redundant to wrap it again.
Example of a response:
type: "cors" url: "http://localhost:5000/plan/375?accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjgyNzU3NTc5NTI3LCJyb2xlIjowLCJpYXQiOjE1ODI4NDk1MjksImV4cCI6MTU4MjkzNTkyOX0.0OaHpRjC3g1du3L5IOKUKKeWVgYf_iosU2SU_njNFG0" redirected: false status: 200 ok: true statusText: "OK" headers: Headers {} body: (...) bodyUsed: true
The success field does not make sense to me as that is already provided by the ok field.
Likewise wrapping everything else in data doesn't make sense as that is what the body does for us.
Having everything wrapped also makes the data more awkward to work with on the client side.
No wrappers:
            if (response.ok) {     obj = await response.json();     planName = obj.planName;     planId = obj.planId;     courses = obj.courses;   }
With wrappers:
            if (response.ok) {     obj = await response.json();     if (obj.success) {       planName = obj.data.planName;       planId = obj.data.planId;       courses = obj.data.courses;     }   }
Lastly it goes against the conventions of other popular REST APIs:
The Open Weather API:
https://openweathermap.org/current
{"coord": { "lon": 139,"lat": 35},   "weather": [     {       "id": 800,       "main": "Clear",       "description": "clear sky",       "icon": "01n"     }   ],   "base": "stations",   "main": {     "temp": 281.52,     "feels_like": 278.99,     "temp_min": 280.15,     "temp_max": 283.71,     "pressure": 1016,     "humidity": 93   },   "wind": {     "speed": 0.47,     "deg": 107.538   },   "clouds": {     "all": 2   },   "dt":<PHONE_NUMBER>,   "sys": {     "type": 3,     "id": 2019346,     "message": 0.0065,     "country": "JP",     "sunrise":<PHONE_NUMBER>,     "sunset":<PHONE_NUMBER>   },   "timezone": 32400,   "id": 1851632,   "name": "Shuzenji",   "cod": 200 }
GitHub API:
https://developer.github.com/v3/
{   "login": "octocat",   "id": 1,   "node_id": "MDQ6VXNlcjE=",   "avatar_url": "https://github.com/images/error/octocat_happy.gif",   "gravatar_id": "",   "url": "https://api.github.com/users/octocat",   "html_url": "https://github.com/octocat",   "followers_url": "https://api.github.com/users/octocat/followers",   "following_url": "https://api.github.com/users/octocat/following{/other_user}",   "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",   "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",   "subscriptions_url": "https://api.github.com/users/octocat/subscriptions",   "organizations_url": "https://api.github.com/users/octocat/orgs",   "repos_url": "https://api.github.com/users/octocat/repos",   "events_url": "https://api.github.com/users/octocat/events{/privacy}",   "received_events_url": "https://api.github.com/users/octocat/received_events",   "type": "User",   "site_admin": false,   "name": "monalisa octocat",   "company": "GitHub",   "blog": "https://github.com/blog",   "location": "San Francisco",   "email"<EMAIL_ADDRESS>  "hireable": false,   "bio": "There once was...",   "public_repos": 2,   "public_gists": 1,   "followers": 20,   "following": 0,   "created_at": "2008-01-14T04:33:35Z",   "updated_at": "2008-01-14T04:33:35Z" }
Microsoft Vision API:
https://azure.microsoft.com/en-us/services/cognitive-services/computer-vision/
{    "tags": [ "train", "platform", "station", "building", "indoor", "subway", "track", "walking", "waiting",      "pulling", "board", "people", "man", "luggage", "standing", "holding", "large", "woman", "yellow",      "suitcase" ],    "captions": [ { "text": "people waiting at a train station", "confidence": 0.8330992 } ]  }

@silverware13 I see your point. I've thought about it, and I'm going with keeping the API responses as simple as possible.
Still, to me, a JSON response must have curly brackets { } at the root level. So, if an API endpoint reponds with a single array, that array must be wrapped into the brackets, e.g.
{
  "items": [
    {
      "foo": "bar"
    },
    {
      "foo": "baz"
    },
    {
      "foo": "bruh"
    }
  ]
}

Other than that, even though I like Jackson's standardized format, I think it is redundant, as the responses the React server receives already have some helpful overheads to it.

I agree with your example of a JSON object. Arrays must be expressed as named fields.

@silverware13 I'm going to respectfully disagree. Rather than starting a back and forth providing examples of real-world APIs that either follow or buck the standard, I'll note that my proposal is consistent with the JSON:API standard, a widely used, community driven standard for API consistency. I fundamentally disagree with the notion that the fetch API makes encapsulation unnecessary. What if we switch to something other than fetch?
I also disagree that following my proposal makes manipulating the client side more difficult; on the contrary, I'd argue it makes the process simpler. For instance, you can simply call if (res.success) { ... }, instead of checking the response against a variety of possible status codes. If the success field is guaranteed to be in the response every time, there's no risk of an error being thrown if we try to access it on a non-compliant response.
In my view, it ultimately boils down to the same reason why you would include a count attribute along with an array, instead of just trusting users to compute the length themselves. It's shorter, bytes-wise, to omit it; it's arguably fewer lines of code to parse it -- but at the end of the day, it fails to simplify and standardize a very common use case.

I'm not the subject matter expert on the back-end, however, so I'll defer to your and Phi's judgement.

Honestly, at this point, I don't know. You both make very good points on why we should or shouldn't have overheads in the API responses, and that makes me very indecisive right now.
I don't think the array-count analogy applies here, though. In a hypothetical language, I think that the count attribute exists to make the operation that retrieves the size more efficient (O(1) instead of O(n), traded off with additional, say, 4 bytes of memory to hold an integer count). The problem here is just the consistency of the way we format our API responses. But I digress.
With the current format, the API responses are the data field itself--nothing more, nothing less. To check whether the response was okay or not, we only need to use response.ok. Plus, we always know the status of the response by response.status. What I like about this format is its simplicity. This is the part where I'd say "let abstraction happen naturally."
With Jackson's proposed format, we can dictate the success/failure, the status, the data, and any additional information that we may add in the future. What I like about this format is that we don't have to depend on anything besides the response itself to determine the success or failure of the operation. This format, to me, is more consistent and flexible.

If we're aiming for simplicity by reusing what's already available to us, I'm siding with the current format.
If we're aiming for consistency, I'm siding with the proposed format. However, keep in mind that I have not taken into account how much work we have to do to refactor all API responses to this format, compared with how much time we have until the next major version.

That's just my thought on each of the formats. I don't have a strong preference for either of those, but I'm a little bit inclined towards the new format. I'll take a few days to think about this issue.

@JacksGo
Some additional points I would make:
You give your example as being consistent with the JSON:API standard.
My example is also consistent with the JSON:API standard.
From the homepage of the JSON:API spec:
https://jsonapi.org/
{
  "links": {
    "self": "http://example.com/articles",
    "next": "http://example.com/articles?page[offset]=2",
    "last": "http://example.com/articles?page[offset]=10"
  },
  "data": [{
    "type": "articles",
    "id": "1",
    "attributes": {
      "title": "JSON:API paints my bikeshed!"
    },
    "relationships": {
      "author": {
        "links": {
          "self": "http://example.com/articles/1/relationships/author",
          "related": "http://example.com/articles/1/author"
        },
        "data": { "type": "people", "id": "9" }
      },
      "comments": {
        "links": {
          "self": "http://example.com/articles/1/relationships/comments",
          "related": "http://example.com/articles/1/comments"
        },
        "data": [
          { "type": "comments", "id": "5" },
          { "type": "comments", "id": "12" }
        ]
      }
    },
    "links": {
      "self": "http://example.com/articles/1"
    }
  }],
  "included": [{
    "type": "people",
    "id": "9",
    "attributes": {
      "firstName": "Dan",
      "lastName": "Gebhardt",
      "twitter": "dgeb"
    },
    "links": {
      "self": "http://example.com/people/9"
    }
  }, {
    "type": "comments",
    "id": "5",
    "attributes": {
      "body": "First!"
    },
    "relationships": {
      "author": {
        "data": { "type": "people", "id": "2" }
      }
    },
    "links": {
      "self": "http://example.com/comments/5"
    }
  }, {
    "type": "comments",
    "id": "12",
    "attributes": {
      "body": "I like XML better"
    },
    "relationships": {
      "author": {
        "data": { "type": "people", "id": "9" }
      }
    },
    "links": {
      "self": "http://example.com/comments/12"
    }
  }]
}

The example they give does not use a success field and while they use a data field, everything isn't encapsulated in it, but rather into many fields. So I think it would be fair to say that neither your or my example violates this standard.
As for accommodating methods other than fetch, I would say that whoever is designing the front-end will always have to be aware of the JS interface they are using. I assume that every modern interface has a way to check the status, success/ok, and the body of the response.
The last reason I don't really agree with including a success field is that it isn't safe to check.
For example, what if I make a request to an API server and the server is down? The response will not have a body. There will be no success field to check. However I can still check the ok field in the response safely.

This issue has been resolved in the 2020/03/03 meeting, so I'm closing it.


Possibly hacky fix for the zoom to nowhere bug.

Fixes #4855
I haven't updated CHANGES.md or even thought about writing a test for this yet, because I'm not confident in it.  It'd be good if @bagnell could take a quick look first.
The story is, there's a (slow) system in a demo lab here that I can reproduce #4855 on every single time.  I just pan over to Australia and zoom in to Cradle Mountain in Tasmania using right-click drag.  Before I manage to zoom in close, I'll suddenly end up somewhere in the Atlantic.
@duvifn noted that on his system, this happens when the target position that we're zooming toward is behind the camera.  Same thing on my system (thanks for that @duvifn, saved me a lot of time!).  That target comes from _zoomWorldPosition, and in the frame where this happens, _zoomWorldPosition is not updated because the mouse hasn't moved.
So I think what is happening is this:

I'm zooming in, and there's inertia.
Since the last frame, the mouse hasn't moved but (due to inertia) the camera has.  Because the system is super slow, the frame rate is low and the camera has actually moved quite a lot since the last frame.
Because the mouse position hasn't moved, handleZoom doesn't think it needs to update _zoomWorldPosition, but actually it does because the target point last frame was somewhere much different because the camera moved so much.

So my solution in this PR is to recompute _zoomWorldPosition even if the mouse didn't move.  Fixes it on my slow system.

Not a useful fix, see comments in #4855.  Closing.


Thanks!

Not an issue but just wanted to leave a note saying good job.  I was hunting for an automatic solution and was about to roll my own when I stumbled across this repo.  Thanks!

Thanks you too :smile:


Jio New Number ranges - pls update

Hi
New number ranges allocated to Jio. Please update yur systems

Hi,
Please see our guidelines for providing evidence.
In particular, we request a publicly available URL or that you sign the CLA and (after getting whitelisted) share non-public evidence with the mailing list only readable by core team members.
Thanks for providing all the details we need! We've accepted this issue and will fix this in an upcoming release. For your next metadata issue, we invite you to file issues in Google's new Issue Tracker, which we're currently testing.
Join our discussion group to be notified of the Maven release's completion, or watch the GitHub repository at https://github.com/googlei18n/libphonenumber to be notified when we publish the new release notes there.
Please note that you have submitted this information with the knowledge that we may use, modify, reproduce, publicly display, and distribute the information in accordance with our open source policies. Please let us know if you did not intend to submit the information for such use.

I'm closing as this issue is infeasible for us to fix at this point (we need
more information). For new issues, please use Issue Tracker. Thank you!


Gui slow / not responding with 150 vlan interfaces

When adding 150 vlan interfaces, the gui becomes unresponsive. If the interfaces widget is disabled it's possible to login, but still everything is slow.

Applied as discussed on the forum patch 9bba2092 by AdSchellevis, which makes the gui it more response again.
It's still having problem with the interface overview. And saw at boot one block of 5 interfaces IPv4 address not showing up.

The interfaces overview and widget seems to be one of the most annoying culprits... it's quite a call nightmare in get_interface_info() when owning multiple interfaces.

https://github.com/opnsense/core/commit/6401d20ec8de75f3435847e7b3097b21d3f32af9 already solves some of it, but there's more to do there.

Is get_interface_info() also used at the wireless status page?
Cause also at boot it's hanging a long time at wifi (with no wifi setup). So some massive processing getting done there as well.

@pthag no, that should be this one if I'm not mistaken https://github.com/opnsense/core/commit/b6e4e56e0c60a513434a69c42a27497b9418b537

@pthag ok, here we go, I've refactored quite some code to speed things up, in case you want to test, the easiest thing to do is first reinstall the current package to make sure none of my patches are already in:
pkg install -f opnsense
Then apply all patches in this issue:
opnsense-patch c14db1a 24c62ed b6e4e56 6401d20 6d2fa2b de5ff59 17a9a26 3b3ebbb
Make sure the new configd commands are executeable:
chmod 700 /usr/local/opnsense/scripts/system/list_interrupts.py
chmod 700 /usr/local/opnsense/scripts/filter/list_counters.py

And restart configd:
service configd restart
After inspection, I rebooted my machine to see if all started normally, which seems to be doing it, on my end the gaps in configured interfaces are also gone.

Page processing goes well now!
There is only one aesthetic detail left, all interfaces are now always listed as up. Even if they are not physically connected.

@pthag thanks for reporting back, missed a spot there.
https://github.com/opnsense/core/commit/f15eb3b203997ae36fd14887b92c882a336f982d should fix the status code (it was overwritten, although it would be better to always report the actual status from the interface I guess it's better to leave this as it was now).

@pthag, this seems to have been confused in the past code if it was so... "up" denotes interface status in software, and "status", however, would e.g. mean "active" or "no carrier", but the two got mixed as "no carrier" really is "up" as long as the interface is active. I don't know which other code parts rely on "up" and "down", but we should really pass all values through as is, so status would show "active" or "no carrier", etc.

This one seems to be empty now: Interrupts per Second	total rate

@fichtner have you restarted configd?

"make upgrade" always does, yes

on my end for status_interfaces.php

what does  configctl system list interrupts json report?

{"interrupts":{"irq260":{"rate":null,"total":null,"devices":["em1"]},"irq261":{"rate":null,"total":null,"devices":["em1"]},"irq257":{"rate":null,"total":null,"devices":["em0"]},"irq256":{"rate":null,"total":null,"devices":["em0"]},"cpu3":{"rate":34,"total":1686466,"devices":["timer"]},"cpu2":{"rate":49,"total":2412281,"devices":["timer"]},"irq259":{"rate":null,"total":null,"devices":["em1"]},"irq258":{"rate":null,"total":null,"devices":["em0"]},"cpu0":{"rate":1000,"total":49181676,"devices":["timer"]},"cpu1":{"rate":44,"total":2159142,"devices":["timer"]},"irq19":{"rate":2,"total":83332,"devices":["ahci0"]},"irq4":{"rate":0,"total":325,"devices":["uart0"]}},"interrupt_map":{"ahci0":"irq19","uart0":"irq4","em1":"irq261","em0":"irq258","timer":"cpu3"}}

interface statistics widget + GIF tunnel status are also problematic. I can take a look at the GIF tunnel thing because I have the setup here and checking against stable/17.1 confirms

ok, that's odd, what does vmstat -i say?

# vmstat -i
interrupt                          total       rate
irq4: uart0                          325          0
irq19: ahci0                       83937          2
cpu0:timer                      49342671       1000
irq256: em0:rx0                   692685         14
irq257: em0:tx0                  3247547         66
irq258: em0:link                       2          0
irq259: em1:rx0                  3164533         64
irq260: em1:tx0                   519908         11
irq261: em1:link                       4          0
cpu1:timer                       2225259         45
cpu2:timer                       2484403         50
cpu3:timer                       1740889         35
Total                           63502163       1286

ah, I see the issue, your driver is using two interrupts. what did the old code report? rx0, tx0, rx0+tx0?

oh, the old code does not show interrupt row, not kidding...

ah, that's logical then :) let me fix this on the page, one moment

@fichtner how about?

I've renamed "interrupts per second" to "interrupts" and filled out all the data accordingly.

@fichtner the GIF tunnel, did that work before? and if so, can you post an example before/after?

irq listing looks nice, thanks!
gif tunnel issue fixed in https://github.com/opnsense/core/commit/9bb3dd61a65b556220f434cf0ba74911c0a248d5
that only leaves the interface statistics widget :)

Maybe this is easier than explaining...
Interface list widget 17.1.7:

Interface list widget 17.7.a:

Interface statistics widget 17.1.7:

Interface statistics widget 17.7.a:

@fichtner https://github.com/opnsense/core/commit/89a81f3ea6fa07abf1346c9f0cecfdb669507833 brings the ipv4 address back, one more to go.

@fichtner I missed the pfctl counters in there https://github.com/opnsense/core/commit/a206e8f6de8f08c08154f546be2776e308f249e6
It's far from optimal, but at least way better then it was.

all good, thanks for doing this work. even with low interface count this feels faster now!

I think it will speed up the whole thing in many ways, there was constantly this huge call list being made. Great work! Would it be an idea to list all the patches to make it work?

yes, it should already be faster with only a few interfaces, the more interfaces there are the sloppier it gets ;) ... not exactly linear.

@pthag sure, the same instruction as above applies,  the patch should look like this:
opnsense-patch 9bba209 c14db1a 24c62ed b6e4e56 6401d20 6d2fa2b de5ff59 17a9a26 3b3ebbb f15eb3b 932a086 9bb3dd6 89a81f3 a206e8f

My config with 150 interfaces uses a little more time than usual, but perfectly acceptable now.

what do you mean by usual? the same config with only a few interfaces?

Sorry, for the open interpretation. Yes, I meant the sort of 'classic' setup with 2 interfaces.

no problem at all, good to hear it's way faster now :)

I don't want to clutter this feed here, but one last question I don't know where to ask elsewhere. Should I now use the patches after every update until it's included in a future update?

@pthag yes. I don't see this patch set in 17.1.8, maybe 17.1.9 or 17.1.10 after enough day-to-day testing, but you can also switch to opnsense-devel with 17.1.8 onward as it will have these patches included (development track).
# opnsense-update -t opnsense-devel

(but ony for 17.1.8 and up, if you run this now it will remove the patches again)

The issue can be closed then I would say?

It's your issue! :)

@pthag thank you for the help and testing


Campaign Goals description details [JT]

http://allready-d.azurewebsites.net/Admin/Goal/Edit/3
The numeric goal and current goal level descriptions need to be non technical.  I out in 20 for numeric and 1 for current goal level, save and then see on the campaign page it says it's at 5 already.  Something must not be right.

I can take this one


Request: CSS: separate declarations with 2 newlines

Actual Results
.myClass {
    color: #bada55;
}
.myOtherClass {
    color: #decca1;
}

Expected Results
Beautified CSS code should have 2 newlines between declarations:
.myClass {
    color: #bada55;
}

.myOtherClass {
    color: #decca1;
}

An empty line between declarations is dictated by all modern CSS formatting guides that I know of, including:
Google:
https://google.github.io/styleguide/htmlcssguide.xml?showone=Rule_Separation
Github:
http://primercss.io/guidelines/#spacing
Wordpress:
https://make.wordpress.org/core/handbook/best-practices/coding-standards/css/
AirBnb:
https://github.com/airbnb/css#formatting
Idiomatic CSS:
https://github.com/necolas/idiomatic-css#4-format
I suggest that this formatting be the default for beautified CSS and SCSS.
Thanks for an awesome tool!

Use the option "Newline between rules".  This is supported by both Pretty Diff and JS Beautify.

Yes. I know, my point is that option should be turned on by default. It's the wrong initial setting, according to virtually every industry standard.

Reopening for consideration.

It looks like JS-Beautify's default is also true for newline_between_rules: https://github.com/beautify-web/js-beautify/blob/57b89fcde24199b18dcbcb247c158420d79039dc/js/lib/beautify-css.js#L76
@albell : I would accept and merge a Pull Request making the appropriate changes to https://github.com/Glavin001/atom-beautify/blob/master/src/languages/css.coffee#L48
Please be sure all tests pass in Travis CI. Once Travis CI build is passing, I will merge.
Thank you.


Allow using custom trust anchor with drg stream

Currently drg stream with wss:// (TLS) requires a valid system trust anchor.
It should be possible to:

[ ] Provide a custom trust anchor (e.g. --ca-cert <file>)
[x] Allow disabling TLS validation (--insecure)

closing this, as it's a duplicate of https://github.com/drogue-iot/drg/issues/29


[Bug]: Navigation to UI mode does not happen on clicking any area of a widget.

Is there an existing issue for this?

[X] I have searched the existing issues

Description
Though there is a message to this effect -
💡 ⌘ click a widget to navigate to UI mode.
When we click any area in the widget, nothing happens. Only in clicking the name of the widget, the navigation happens.
This navigation to UI mode should happen on clicking any area of the widget.
Steps To Reproduce
Uploading Screen Recording 2024-03-13 at 7.43.34 PM.mov…
Public Sample App
No response
Environment
Release
Severity
Medium (Frustrating UX)
Issue video log
No response
Version
Cloud

I think the video upload failed, so I can't see the issue reproduction. My guess is that this is about the new "canvas selected mode". In this case, I have the same explanation as here


cks: fix k8s cluster deployment planner

Description
Fixes #4113
Check for compute offering host tags while finding suitable host/deployment destination for k8s cluster node VM during deploy and scale cluster.
Check for k8s cluster template's hypervisor type during scale as template is tied to the k8s cluster therefore new node VM must be deployed in the same hypervisor host.
Types of changes

[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] New feature (non-breaking change which adds functionality)
[x] Bug fix (non-breaking change which fixes an issue)
[ ] Enhancement (improves an existing feature and functionality)
[ ] Cleanup (Code refactoring and cleanup, that may add test cases)

Screenshots (if appropriate):
How Has This Been Tested?

@blueorangutan package

@shwstppr a Jenkins job has been kicked to build packages. I'll keep you posted as I make progress.

Packaging result: ✔centos7 ✔debian. JID-1254

@blueorangutan test

@shwstppr a Trillian-Jenkins test job (centos7 mgmt + kvm-centos7) has been kicked to run smoke tests

Trillian test result (tid-1589)
Environment: kvm-centos7 (x2), Advanced Networking with Mgmt server 7
Total time taken: 32128 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr4115-t1589-kvm-centos7.zip
Intermittent failure detected: /marvin/tests/smoke/test_kubernetes_clusters.py
Smoke tests completed. 82 look OK, 1 have error(s)
Only failed tests results shown below:

Test
Result
Time (s)
Test File

test_01_deploy_kubernetes_cluster
Error
0.05
test_kubernetes_clusters.py

test_02_deploy_kubernetes_ha_cluster
Error
0.03
test_kubernetes_clusters.py

test_04_deploy_and_upgrade_kubernetes_cluster
Error
0.03
test_kubernetes_clusters.py

test_05_deploy_and_upgrade_kubernetes_ha_cluster
Error
0.03
test_kubernetes_clusters.py

test_06_deploy_and_invalid_upgrade_kubernetes_cluster
Error
0.03
test_kubernetes_clusters.py

test_07_deploy_and_scale_kubernetes_cluster
Error
0.02
test_kubernetes_clusters.py

Packaging result: ✔centos7 ✔debian. JID-1312

Packaging result: ✔centos7 ✔debian. JID-1322

@blueorangutan test

@shwstppr a Trillian-Jenkins test job (centos7 mgmt + kvm-centos7) has been kicked to run smoke tests

@blueorangutan package

@rhtyd a Jenkins job has been kicked to build packages. I'll keep you posted as I make progress.

Packaging result: ✔centos7 ✖debian. JID-1339

Packaging result: ✔centos7 ✔debian. JID-1347

@blueorangutan test

@shwstppr a Trillian-Jenkins test job (centos7 mgmt + kvm-centos7) has been kicked to run smoke tests

Trillian test result (tid-1714)
Environment: kvm-centos7 (x2), Advanced Networking with Mgmt server 7
Total time taken: 50350 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr4115-t1714-kvm-centos7.zip
Intermittent failure detected: /marvin/tests/smoke/test_kubernetes_clusters.py
Smoke tests completed. 83 look OK, 0 have error(s)
Only failed tests results shown below:

Test
Result
Time (s)
Test File

@shwstppr is this ready for review/testing?

@shwstppr can you please add a bug description and a test scenario?

@shwstppr can you club your cks PRs, and at least change base branch to 4.14?

Closed in favour of #4116


Crash w/ Optifine

Minecraft v1.15.2
Forge v31.2.31
Double Slabs v2.10.0
Optifine pre30
After updating to the newest version of Double Slabs, my game now crashes immediately after rendering the double slabs. Seems to be related to Optifine.
Crash Report

The crash report link doesn't seem to be working unfortunately

Whoops, forgot to actually include the link. :D
Should be fixed now.

Same here with Forge v31.2.36 the only difference...

Fixed in the latest version for 1.15.2. Tested in the same environment you provided :)

Thank you
On Thu, Aug 6, 2020, 8:03 AM CJMinecraft<EMAIL_ADDRESS>wrote:

Fixed in the latest version for 1.15.2. Tested in the same environment you
provided :)
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/CJMinecraft01/DoubleSlabs/issues/97#issuecomment-669913269,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AIE5LN64KVCRRS3OHLMMHCLR7KS2XANCNFSM4PUVSHFA
.


add EvaluationBackgroundTask

added background evaluation polling
added sample project

@cre8ivejp do we need to send EventBackgroundTask as well? I think we don't because evaluations requests in the background make metrics events as usual, and the events queue eventually exceeds max count(and send events).

do we need to send EventBackgroundTask as well?

@yshrsmz, we need to keep sending events to the server. So we need to check every 30 seconds if there are new events or if it exceeds the max size.
It will be fine if the event foreground task keeps working in the background.

@cre8ivejp

we need to check every 30 seconds if there are new events or if it exceeds the max size.

Ok, I'm going to add the background task for events as well.

What do you think about doing this?
We use AlertManager for both cases.
EventTask

We use 1 minute for both foreground and background tasks
Before starting the background task, we flush the events

EvaluationTask

For foreground tasks, we use 10 minutes by default, but check for a minimum interval, in this case, 1 minute. Anything sooner than that, we set it to 1 minute (Like you implemented it before)
For background tasks, we use 1 hour by default, but check for a minimum interval, in this case, 20 minutes. Anything sooner than that, we set it to 20 minutes.
For background tasks, we would also have an option to use the WorkManager if needed.

Thanks, that sounds good.
I will add checks in BKTConfig.

For background tasks, we would also have an option to use the WorkManager if needed.

Yes, but then we need to add one more dependency, and I'd like to align implementations if possible(In this case, I prefer to use AlarmManager for both background tasks).

Oh, I didn't know the WorkManager needs another dependency.
Let's go with AlertManager!
Thank you.

thanks!


Merge main into v4.x-preview branch - through custom branch to resolve conflicts

Main branch merged into release/4.x-preview branch

extensions.json kept on same versions
bundlesConfig.json updated to latest hotfix version of preview release
NuGet.config file kept as is
kept Preview config mention in README.md
some formatting in markdown files
Resolves breaking pipeline for v4.x-preview

Discarding as the team has been doing cherry-pick previously


Rewrite all the things for v1.0.0

The updated README.md explains how things work now, but the TL;DR is:

Do way less things by default.

Do not be an EventEmitter
Make plugins simpler

Expose generic "hooks" from understudy

"12:04pm, press return"


Call to an undefined static method Illuminate\Support\Facades\Queue::after()

Laravel Version: 8.42.1
PHP Version: 8.0.5
Database Driver & Version: none

Description:
Code is available in documentation:

https://laravel.com/docs/8.x/queues#job-events

When running phpstan level 3, it complains:
Call to an undefined static method Illuminate\Support\Facades\Queue::after()
It is possible to workaround it using app('queue')->after() instead of Queue::after(), but it would be nice to have the documentation example passing the static code analysis.
All the other usages of Facades in the application pass the static code analysis (eg, Storage::disk()) - making me believe this is a "fixable" issue.
Steps To Reproduce:
Code is available in documentation:

https://laravel.com/docs/8.x/queues#job-events

To install PHPStan: composer require --dev phpstan/phpstan
This is the script in  composer.json:
    "scripts": {
        "phpstan": "phpstan analyse --level 3 app",
    }

To run it: composer run phpstan

Hey @jbruni. We don't optimize for tools like phpstan. If you think there's a bug we're welcoming PRs. Thanks.


Run benchmark in parallel

juicefs bench run basic benchmark using single threads, which can be run in parallel to know  how it works under concurrent workload.

Do you mean reading and writing blocks in parallel?

@suzaku hi, are you still working on this?

@Sandy4999 No, I'm not working on it recently.