[2.0] Add dotnet-store and runtime-package-store topics

Fixes #2139

@mairaw Ready for :eyes:.
Note that the main push here is for the dotnet store and runtime-package-store topics. There are a few touches here to dotnet publish, but the other (broader) dotnet publish updates are coming up in https://github.com/dotnet/docs/pull/2480 after these other update PR's are merged.
WRT the file system layout at the top of this topic ...

I did this on at least one other topic, where I'm trying to use a less "muddy" approach to laying out the file structure. The use of underscores, pipes, and slashes (/, \) seems messy imho and putting these file layouts into code blocks seems like an ugly hack (again, imho). However (of course), I'll change it on review if you want to go a different way. Maybe this is ok? ... perhaps it just needs a little more indentation (4-spaces instead of 2).

... and side note: I composed the runtime-package-store topic thinking that they'll make a few minor adjustments to artifacts.xml via https://github.com/dotnet/cli/issues/7010. However, they might say that putting the package names into human-friendly casing isn't going to happen. I put the file in here how I think they're going to do it, but I'll adjust accordingly based on the dev team's response to that issue.

The files also need to be added to the TOC

@mairaw Couple of questions:

When you said 'remove preview warning,' I took it off of the title and H1 but left the includes in place. Did you mean remove it everywhere or just as I did from the title and H1?
The --manifest option on dotnet publish: I have a line in the paragraph saying its available with preview bits. If we kill it for now, then we'll need to open another issue to track adding it back. Let me know tho if you want it 🔪 out of there.

Should the runtime-package-store article also mention that all this only applies to framework-dependent deployments?

@svick Hopefully, this is at least headed in the right direction.

I do postpone discussion of the ASP.NET Core target manifests until the topic gets down to that section.
I try to convey that when the ASP.NET Core target manifests are used (as they come in with Microsoft.NET.Sdk.Web), then the required packages better be on the target system when the app gets there or they'll have a nice :boom: :cry:!
I add a bit to say that you can't use the ASP.NET Core target manifests if its an SCD app. It will throw an error on publish if one tries to set <PublishWithAspNetCoreTargetManifest> to true.
As for the package store that's part of the SDK, I try not to talk about it much on purpose here. Too many package stores described in detail may spoil the stew 🍲, and two stores described in any detail here is probably one too many. I don't see anything great to link either, but I'm open to suggestions.

@GuardRex  see updates in https://github.com/dotnet/designs/issues/8

@GuardRex can you address Rick's comments? I'll ask folks on that other thread to review the topics on staging as well.

@mairaw @Rick-Anderson Yes ... this weekend I'll get it fixed up.

@DamianEdwards do you want to take a look at this too?
Main new topics on staging are:
https://review.docs.microsoft.com/en-us/dotnet/core/tools/dotnet-store?branch=pr-en-us-2496
https://review.docs.microsoft.com/en-us/dotnet/core/deploying/runtime-package-store?branch=pr-en-us-2496

I think we should add the following information:
The store directory is intended to contain all runtime package store files. Currently,  only ASP.NET core stores packages in the runtime store.
@DamianEdwards  is that OK? Otherwises it's confusing.

Update: I was busy this weekend working on the custom templates topics and didn't get to this. I plan to hit this on Monday morning. I'll ping here when it's ready for :eyes:.

@GuardRex What is this PR waiting for?

[@]DamianEdwards I guess. 🤷♂

@guardrex the title in the doc and in the intro and in the toc is still Runtime Store  -- was a decision made to omit Package?

I'll TAL and see ... yes, it was supposed to be removed. I'll double-check it.

Yep ... It's all good. It's "runtime store" everywhere AFAICT. https://github.com/dotnet/docs/pull/2496#discussion_r129976576

@guardrex the title in the doc and in the intro and in the toc is still Runtime Store -- was a decision made to omit Package?

The installer uses Runtime Package Store. I think it might be safer to be consistent with the installer.  See https://github.com/dotnet/cli/issues/7301
@richlander  @DamianEdwards  Should we be consistent now?

I think both are out @Rick-Anderson. We might have to check with them later and make a decision ourselves. I'll review it now to see if I see any other issues.

I just left the name of the file runtime store because we'll need redirects to change later. Made some edits. As soon as this finishes building I'll merge, unless someone else has something else to add.

And when you ask, what is the PR waiting for? The answer is usually me. LOL 😄

It would help if someone didn't turn in MASSIVE giant PR's that need A LOT of work. lol

We're almost there. Just a couple left now to be reviewed and merged.


chore(deps): upgrade jenkins-x/jx3-versions to version 1.1.22

from: https://github.com/jenkins-x/lighthouse.git

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by:
To complete the pull request process, please assign macox
You can assign the PR to them by writing /assign @macox in a comment when ready.
The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment


Currency symbol in RTL languages

Is your feature request related to a problem? Please describe.
In RTL languages, the currency symbol should be on the left of the price.
Describe the solution you'd like
In Webkul/Core/Core.php we can add below code in formatPrice method
if (core()->getCurrentLocale()->direction === 'rtl') {             $formatter->setPattern("#,##0" . "¤");    }
Describe alternatives you've considered
No response
Additional context
No response

Hi @hamedslyn, I understand that the development of this feature is already underway, alongside the currency format feature. Thank you for the update.


xcfmvgbmn

Issue Id you have worked upon -
Kindly write your answer here
Briefly explain your program logic -
Kindly write your answer here
Screenshots(Attach 2 screenshots of your own input and output) -
Attach here

Checklist:
Eg - If your code follow the below guidelines. Kindly change [] to [x]
All the conditions should be fulfilled for considering your code for merging -

[] I have mentioned the question as comment in my solution file.

[] My code follows the guidelines of this project.

[] I have performed a self-review of my own code.

[] I have commented my code.

[] My code gives the correct output.

[] I confirm that I have not copied the code from anywhere. In case its found that I have copied even after successful merge then I can be banned from the repository and hacktoberfest.

[] I affirm that I strictly follow contributing guidelines and code of conduct.

@RuchithaVirashan,
Kindly read #275,
Submission guidlines says -
Submission process - Attach your created logo image in the comment section below
So kindly attach your logo there itself. Once the winner is called out that contributor will be allowed to create a PR.
You may close this PR after reading this comment. I will NOT mark this PR invalid.

Thnks for ur concern.. i wil be waiting


[Event Modification Request] page 50 "Purchase Order" - OnPostDocumentBeforeNavigateAfterPosting

Describe the request
Could the DocumentIsPosted Boolean be adjusted and passed as a reference, as below? This way I could control what a Posted document means for different business processes.
 [IntegrationEvent(true, false)]
    local procedure OnPostDocumentBeforeNavigateAfterPosting(var PurchaseHeader: Record "Purchase Header"; var PostingCodeunitID: Integer; var Navigate: Enum "Navigate After Posting"; var DocumentIsPosted: Boolean; var IsHandled: Boolean)
    begin
    end;

local procedure PostDocument(PostingCodeunitID: Integer; Navigate: Enum "Navigate After Posting")
    var
        PurchaseHeader: Record "Purchase Header";
        InstructionMgt: Codeunit "Instruction Mgt.";
        LinesInstructionMgt: Codeunit "Lines Instruction Mgt.";
        IsScheduledPosting: Boolean;
        IsHandled: Boolean;
    begin
        LinesInstructionMgt.PurchaseCheckAllLinesHaveQuantityAssigned(Rec);

        Rec.SendToPosting(PostingCodeunitID);

        IsScheduledPosting := Rec."Job Queue Status" = Rec."Job Queue Status"::"Scheduled for Posting";
        DocumentIsPosted := (not PurchaseHeader.Get(Rec."Document Type", Rec."No.")) or IsScheduledPosting;

        if IsScheduledPosting then
            CurrPage.Close();
        CurrPage.Update(false);

        IsHandled := false;
        OnPostDocumentBeforeNavigateAfterPosting(Rec, PostingCodeunitID, Navigate, DocumentIsPosted, IsHandled);
        if IsHandled then
            exit;

        if PostingCodeunitID <> CODEUNIT::"Purch.-Post (Yes/No)" then
            exit;

        case Navigate of
            Enum::"Navigate After Posting"::"Posted Document":
                begin
                    if InstructionMgt.IsEnabled(InstructionMgt.ShowPostedConfirmationMessageCode()) then
                        ShowPostedConfirmationMessage();

                    if IsScheduledPosting or DocumentIsPosted then
                        CurrPage.Close();
                end;
            Enum::"Navigate After Posting"::"New Document":
                if DocumentIsPosted then begin
                    Clear(PurchaseHeader);
                    PurchaseHeader.Init();
                    PurchaseHeader.Validate("Document Type", PurchaseHeader."Document Type"::Order);
                    OnPostDocumentOnBeforePurchaseHeaderInsert(PurchaseHeader);
                    PurchaseHeader.Insert(true);
                    PAGE.Run(PAGE::"Purchase Order", PurchaseHeader);
                end;
        end;
    end;

Additional context
We have a client that chose to add additional Statuses to their Purchase orders which lead to the Purchase Header not being deleted after the Purchase Header has been fully invoiced. I cannot control the closing of the page with the current setup.
Internal work item: AB#557532

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.
Build ID: 26919.


implement epoch reducers

implement EpochSpikeReducer and EpochTraceReducer transformers which perform "reduce" operations using a user-defined function all of the data within a time range for each operation.
e.g.
epoch_reducer = ng.epoch.EpochTraceReducer(
    traces=TRACES,
    agg_func=np.mean,
)

mean_responses = epoch_reducer.fit_transform(EPOCHS)

open question: what should the expected format of EPOCHS be?
option 1: a 'time' columns and a 'duration' column
this maintains consistency with the EVENTS dataframes expected with other transformers in this package.
option 2: a 'start' column and an 'end' column
this is likely closer to the native representation of this kind of data
option 3: both

implemented in #83


Move babel-core and rollup-plugin-babel to dev dependencies

Sorry this is been left to go stale. Thanks for the Pull Request!


Shoppe

Deploy the eCommerce Shoppe.

CNAME will need DNS to propagate
shoppe.domains.payhip.com
resolving
https://shoppe.moodylass.com/

Here are some iframe examples, thats the only thing I see broken in your code.
This is an external website iframe example

Instead you can put all the pictures in a folder named “ASSETS” then point to it internally with href=
src="https://yourdomain.com/ASSETS/PICTURE OF CAT.jpg" width="660px" height="450" frameborder="0">
Then taking it a step further you can place a complete website in a folder “project 1”
index.html
style.css
script.js
Then use and an iframe or  tag to link “project 1”
<a href=“yourdomain.com/project 1" src=“https://yourdomain.com/project 1”
src is the actual picture while href is where the item is in an iframe or what happens on mouse click in a hyperlink.
Its how my entire GitHub Page is set up
Almost every repo is a template feel free to use them as needed. And the attached html is a 4 iframe examples
￼
￼

On Sep 9, 2023, at 4:18 AM, Moody Lass @.***> wrote:
Assigned #3 https://github.com/MoodyLass/Teacup/issues/3 to @sudo-self https://github.com/sudo-self.
—
Reply to this email directly, view it on GitHub https://github.com/MoodyLass/Teacup/issues/3#event-10324004676, or unsubscribe https://github.com/notifications/unsubscribe-auth/A4S4OI3OI5TJJ4ABDTYZEN3XZQ67FANCNFSM6AAAAAA4RLHO6U.
You are receiving this because you were assigned.


Add Audit Log Mixin Wrapper Around Audit Log Mixin

Is your feature request related to a problem? Please describe.
add audit log mixin wrapper around mixin, that will let user to decide whether to generate audit logs or not
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


V2 - Contributor has to request for authorization even when contributor is already added to approved list

Prerequisite

Create a CLA group with CCLA enabled
Add github repository for the CLA group
Generate template
Company should have signed CLA for the project
Contributor should be added to the approved list for the project

Steps to Follow

Login to Github as individual contributor
Navigate to the repository used in prerequisite
Create PR
CLA check fails
Click on CLA NOT SIGNED
Contributor is redirected to Contributor Console
Click on Proceed as a Corporate Contributor
Search and Select the Company
Click Proceed
Contributor has to Request Authorization even if the contributor is already added to approved list

@pranab-bajpai
This scenario is not included in the PRD. Could you please provide the design for the scenario when contributor is  already whitelisted. We need design and explanation for below sceanrios

Corporate Contributor has to sign ICLA (when the check box for employee to sign ICLA is also checked)
Corporate does not have to sign the ICLA and can proceed with contribution

Let's discuss with @dealako

@dealako
Test data used
company(BAKBONE) 4d9c760b-f5b3-4fe6-89b8-f7d9bd4d965c
CLA Group(ICLA CCLA Group) e2923e14-9d3d-4326-ae1e-00a198125e6f
Foundation (The Presto Foundation Fund) a092M00001IfCa5QAF

Testing In Progress. Logged below bugs
#1319

Testing is blocked due to #1319

Testing is blocked due to #1448, #1411

All scenarios passed for github flow except for scenario for contribution when githuborg is whitelisted. Issue is tracked in #1498 and hence closing this ticket


Failed to get image for client id - 8.60 v1

Hello, I'm having some problems to open an otb with a custom client because it always give the error below with some items:

And I can't understand why because I can see all this sprites on Object Builder, for example:

I tried to change otb version and even creating a new one, but I always get the same error on the same sprites, it just "doesn't load them". Am I doing something wrong or it is a bug?
edit: the client DOESN'T have transparency and isn't extended

Commit history says this was closed with https://github.com/ottools/ItemEditor/commit/6775fd4f61b937bf193740aff0bf42469c5c710d


Create long life AWS test accounts

Description of the issue
Currently the AWS credentials associated to an account (project set) last six hours. This is a problem  to automate certain tests. Specifically, I am thinking the test that will check the BCGov iam-role permission boundary
Additional context
At this moment these test are in the drawing board, so they may change, but at this moment the approach will be to use the AWS CLI to execute some allowed and non-allowed actions. The allowed action should results in the action being completed (for example to create a new service instance) or denied (unable to created/use some service).
Probably will need one long life test account per role, to test each role individually.
Information about the  BC Gov iam-role permission boundary can be found at
https://github.com/BCDevOps/terraform-aws-keycloak-lz-sso-setup
https://github.com/BCDevOps/terraform-aws-keycloak-lz-sso-setup/blob/a185c0cfca1299ddc5ada1551767a5291002a0f7/main.tf#L68
Definition of Done
A set of accounts that will not have the AWS credentials limited to 6h

Related to #1615

This ticket will not be done for several reason. The main is that long live AWS accounts are a security risk. Also, the test are run in the context of regression testing in opposition to CI/CD, and the step to copy and paste the ephemeral credentials is neither critical nor time consuming.

This issue can be closed. The implementation of the OIDC authentication means that it may be possible to create a trust relationship between a process running in GitHub and AWS making the long life AWS unnecesary.


Scaling the scene adds a node rather than scaling each node

Scaling the scene adds a node rather than reconstructing each node to be different.
Here is some example code, if there's a maya function to do it'll work too.
https://github.com/assimp/assimp/blob/master/code/PostProcessing/ScaleProcess.cpp#L136

There's a flag for that, -bakeScalingFactor or -bsf, but I haven't tested this very well. Baking the scale factors will currently change the vertex positions, it will not change the nodes at all.


Make the tests runnable

Moved test dependencies from setup.py to tox.ini
Fixed cli entry points so they can be imported in tests
To setup your venv, you can now run "make env".
To run tests, you can now run "make test".
Thanks to @jsancio for guiding me

@mgummelt Looks good. Let's update the README to document the process for setting up the environment and running tests.

Done

@mgummelt It looks like you are missing the shell scripts: bin/env.sh and bin/test.sh

Fixed.  It looks like bin/ was in the .gitignore, so I had to force add those files

@mgummelt, now that you're here, let's get this finished off :)


Ensure to not depend on sun.rmi.registry.RegistryImpl

I don't have all the rational of JmxRegistry impl but the comment tend to mean it was a lazy implementation so let's do a portable lazy implementation and not one preventing the project to compile until you tune your environment/IDE/maven.

I'd like to merge this by this weekend to get builds and CI going again on other PRs.


Seems to be in conflict with gevent monkey.patch_all()

First Check

[X] I added a very descriptive title to this issue.
[X] I used the GitHub search to find a similar issue and didn't find it.
[X] I searched the FastAPI documentation, with the integrated search.
[X] I already searched in Google "How to X in FastAPI" and didn't find any information.
[X] I already read and followed all the tutorial in the docs and didn't find an answer.
[X] I already checked if it is not related to FastAPI but to Pydantic.
[X] I already checked if it is not related to FastAPI but to Swagger UI.
[X] I already checked if it is not related to FastAPI but to ReDoc.

Commit to Help

[X] I commit to help with one of those options 👆

Example Code
from gevent import monkey;monkey.patch_all()
import uvicorn, time, gevent
from fastapi import FastAPI

app = FastAPI()

def test(sleep=10):
    print('aaaaaaaaa')
    time.sleep(sleep)
    print('bbbbbbbbb')

@app.get("/")
async def root():
    gevent.spawn(test, 5)
    return {"message": "Hello World"}

if __name__ == '__main__':
    uvicorn.run('app:app',
                host='<IP_ADDRESS>',
                port=8000,
                reload=True)

Description
The program did not start successfully

Operating System
Windows
Operating System Details
Windows10
FastAPI Version
0.75.2
Python Version
Python 3.6.5
Additional Context
Failure example：

Successful examples：

Ah, yeah, Gevent does a lot of weird things (monkey patching internal stuff) that won't interact well with code using async. It sort of breaks the contracts of standard modern Python.
You probably shouldn't use Gevent. If you need concurrency, use async and await, with AnyIO or Asyncer.
Otherwise, at least, to debug your code, you might want to do it from the terminal, at least remove the chance of PyCharm causing any problem there.


Output of the async sample is incorrect

Description:
Additional "17839763" is included in the output in [1]
[1] https://github.com/ballerina-platform/ballerina-examples/blob/master/examples/async/async.sh
Affected Product Version:
Ballerina Platform - beta1
OS, DB, other environment details and versions:
In-built JAVA
Windows 7

Fixed in https://github.com/ballerina-platform/ballerina-examples/pull/375


Add docker support

will test in prod before committing because can't exactly run the bot on my host rn

waiting for check before merging


'Already seen' banner persisting / only a few images showing in new dataset

We have a new dataset up on Whales as Individuals -- https://www.zooniverse.org/projects/tedcheese/whales-as-individuals -- yet the 'project is out of data banner' persists, all images show up with a 'finished' or 'already seen' tag, and only a few images are showing up. How do we overcome this? (Happens repeatedly when we upload new data)
Thank you ~ Ted

the banner will update after ~1hr when the next project completness worker runs. this is a work in progress and it's being improved specifically in #2646


Update style.mdx

Updated use of "heading" to be "group label", as per the Usage tab and discussion.
@laurenmrice NOTE that there is an image (checkbox-style-3.png) which should be changed to match. "Label" should become "Group label". "Check option 1" etc should become "Checkbox label 1" etc.

Closing in favor of #2854


e2e tests

Test different sync directions (default is arm-to-node) and conflict policies (default is arm-precedence). Test VMs only if deemed important.
Do I test on AKS cluster and aks-engine cluster?

Added in #34 and #31, though node-to-arm and two-way sync would need to be debugged.


Test Run Export Feature Adjustment

The export test run feature happens to show a popup message for the user, after the operation is complete.
The thing is that the message may appear even before.
That occurs because the browser may ask for permission or the path to download the file.
The image below shows Safari asking to allow the download with the success message already in screen:

So, the question is:
Is it possible to verify the download actually started before showing the confirmation message?

Addressed in this PR:
Implements custom saveAs function with callback #9


fix pluto_grid_popup.dart completion PlutoGridPopup onRowsMoved ...

fix pluto_grid_popup.dart completion PlutoGridPopup onRowsMoved,onRowDoubleTap,onRowSecondaryTap

Thanks for your code contribution.
I will apply it to the next version.

Updated this PR to version 5.0.4 of PlutoGrid.
Thanks you.


Valid orb

what
Fix #12 #11
why
Bugs and features
references
N/A

Your development orb has been published. It will expire in 30 days.
You can preview what this will look like on the CircleCI Orb Registry at the following link:
https://circleci.com/developer/orbs/orb/bjd2385/dynamic-continuation?version=dev:dab10702a6d60095f3b17b04899d432ec215185d

Your development orb has been published. It will expire in 30 days.
You can preview what this will look like on the CircleCI Orb Registry at the following link:
https://circleci.com/developer/orbs/orb/bjd2385/dynamic-continuation?version=dev:93e58d1affcd7ee010a6f128d74df9010a39ca06


dx12 option: GFXRECON_CAPTURE_DRAWCALLS

dx12 option: GFXRECON_CAPTURE_DRAWCALLS
Specify one index or a range indices drawacalls(include dispatch) based on a ExecuteCommandList index and a CommandList index to capture. The index is 1-based. The args are one submit index, one command index, one or a range indices of draw calls, one or a range indices of bundle drawcalls(option), like "1,1,1" or "1,1,1-2" or "1,1,1-2,1". The forth arg is an option for bundle case. If the the 3rd arg is a bundle commandlist, but it doesn't set the 4th arg, it will set 1 as default. Default is: Empty string (all drawcalls are captured).

Not unwrapped objects for override functions
Override functions need wrapped objects and wrappers.

Split commandlist into three for target drawcalls
It does something similar to dump resources, but a bit different. Trimming drawcalls is not like dump resources that could browse the captured file to find target commandlist and drawcall before replay.
For trimming drawcalls, it doesn't know the target commandlist until running the target ExecuteCommandLists. In this case, it assumes every commandlist could be the target commandlist. Every commandlist has three splitted commandlists and add command to the splitted commandlists.
It also can't know which drawcall is the target in advance, commandlist has a drawcall_count to count it. Splitted commandlists will add some redundant commands since it couldn't know the target drawcall in advance, But it shouldn't affect the result and performance.

CI gfxreconstruct build queued with queue ID 240395.

CI gfxreconstruct build # 4641 running.

CI gfxreconstruct build # 4641 passed.

CI gfxreconstruct build queued with queue ID 240636.

CI gfxreconstruct build # 4649 running.

CI gfxreconstruct build queued with queue ID 240733.

CI gfxreconstruct build # 4651 running.

CI gfxreconstruct build # 4651 passed.

CI gfxreconstruct build queued with queue ID 240809.

CI gfxreconstruct build # 4652 running.

CI gfxreconstruct build queued with queue ID 240824.

CI gfxreconstruct build queued with queue ID 240825.

CI gfxreconstruct build # 4654 running.

CI gfxreconstruct build # 4654 passed.

CI gfxreconstruct build queued with queue ID 240912.

CI gfxreconstruct build queued with queue ID 240914.

CI gfxreconstruct build queued with queue ID 240932.

CI gfxreconstruct build queued with queue ID 240933.

CI gfxreconstruct build queued with queue ID 240954.

CI gfxreconstruct build # 4661 running.

CI gfxreconstruct build # 4661 passed.

CI gfxreconstruct build queued with queue ID 242245.

CI gfxreconstruct build # 4678 running.

CI gfxreconstruct build queued with queue ID 242270.

CI gfxreconstruct build queued with queue ID 242277.

CI gfxreconstruct build queued with queue ID 242279.

CI gfxreconstruct build # 4681 running.

CI gfxreconstruct build # 4681 failed.

CI gfxreconstruct build queued with queue ID 243047.

CI gfxreconstruct build # 4685 running.

CI gfxreconstruct build # 4685 passed.

CI gfxreconstruct build queued with queue ID 243657.

CI gfxreconstruct build # 4689 running.

CI gfxreconstruct build # 4689 passed.

CI gfxreconstruct build queued with queue ID 247927.

CI gfxreconstruct build # 4742 running.

CI gfxreconstruct build # 4742 passed.

CI gfxreconstruct build queued with queue ID 248942.

CI gfxreconstruct build # 4756 running.

CI gfxreconstruct build # 4756 passed.

CI gfxreconstruct build queued with queue ID 248978.

CI gfxreconstruct build # 4758 running.

CI gfxreconstruct build # 4758 passed.

CI gfxreconstruct build queued with queue ID 250335.

CI gfxreconstruct build # 4780 running.

CI gfxreconstruct build # 4780 passed.

CI gfxreconstruct build queued with queue ID 250594.

CI gfxreconstruct build # 4785 running.

CI gfxreconstruct build queued with queue ID 250629.

CI gfxreconstruct build # 4786 running.

CI gfxreconstruct build # 4786 passed.

CI gfxreconstruct build queued with queue ID 251324.

CI gfxreconstruct build # 4795 running.

CI gfxreconstruct build # 4795 passed.

CI gfxreconstruct build queued with queue ID 253106.

CI gfxreconstruct build # 4804 running.

CI gfxreconstruct build # 4804 passed.

CI gfxreconstruct build queued with queue ID 259203.

CI gfxreconstruct build # 4860 running.

Some discussion about trim swapchain buffer in https://github.com/LunarG/gfxreconstruct/pull/1727

CI gfxreconstruct build queued with queue ID 259219.

CI gfxreconstruct build queued with queue ID 259223.

CI gfxreconstruct build # 4862 running.

CI gfxreconstruct build # 4862 passed.

CI gfxreconstruct build queued with queue ID 259912.

CI gfxreconstruct build # 4869 running.

CI gfxreconstruct build # 4869 failed.

CI gfxreconstruct build queued with queue ID 260121.

CI gfxreconstruct build # 4873 running.

CI gfxreconstruct build # 4873 passed.

CI gfxreconstruct build queued with queue ID 260546.

CI gfxreconstruct build # 4877 running.

CI gfxreconstruct build # 4877 passed.

CI gfxreconstruct build queued with queue ID 260626.

CI gfxreconstruct build # 4878 running.

CI gfxreconstruct build # 4878 passed.

CI gfxreconstruct build queued with queue ID 263572.

CI gfxreconstruct build # 4890 running.

CI gfxreconstruct build # 4890 passed.

CI gfxreconstruct build queued with queue ID 263708.

CI gfxreconstruct build # 4891 passed.

CI gfxreconstruct build queued with queue ID 264524.

CI gfxreconstruct build # 4899 running.

CI gfxreconstruct build # 4899 passed.

CI gfxreconstruct build queued with queue ID 264588.

CI gfxreconstruct build # 4900 running.

CI gfxreconstruct build # 4900 passed.

CI gfxreconstruct build queued with queue ID 264636.

CI gfxreconstruct build # 4901 running.

CI gfxreconstruct build # 4901 passed.

CI gfxreconstruct build queued with queue ID 264661.

CI gfxreconstruct build # 4902 running.

CI gfxreconstruct build # 4902 passed.

CI gfxreconstruct build queued with queue ID 264722.

CI gfxreconstruct build # 4903 running.

CI gfxreconstruct build # 4903 passed.

CI gfxreconstruct build queued with queue ID 264813.

CI gfxreconstruct build # 4905 running.

CI gfxreconstruct build # 4905 passed.

CI gfxreconstruct build queued with queue ID 265682.

CI gfxreconstruct build # 4908 running.

CI gfxreconstruct build # 4908 passed.

CI gfxreconstruct build queued with queue ID 265824.

CI gfxreconstruct build # 4912 running.

CI gfxreconstruct build # 4912 passed.

CI gfxreconstruct build queued with queue ID 265859.

CI gfxreconstruct build # 4913 running.

CI gfxreconstruct build # 4913 passed.

CI gfxreconstruct build queued with queue ID 266668.

CI gfxreconstruct build # 4923 running.

CI gfxreconstruct build # 4923 passed.

PR https://github.com/LunarG/gfxreconstruct/pull/1711 makes some changes to the way mutex locking is handled in ActivateTrimming(). When PR https://github.com/LunarG/gfxreconstruct/pull/1711 is merged, those changes may also need to be added here to ActivateTrimmingDrawCalls().

https://github.com/LunarG/gfxreconstruct/pull/1711 was merged

CI gfxreconstruct build queued with queue ID 270798.

CI gfxreconstruct build queued with queue ID 270815.

CI gfxreconstruct build queued with queue ID 270833.

CI gfxreconstruct build queued with queue ID 270866.

CI gfxreconstruct build # 4953 running.

CI gfxreconstruct build # 4953 passed.

CI gfxreconstruct build queued with queue ID 276110.

CI gfxreconstruct build # 5040 running.

CI gfxreconstruct build # 5040 failed.

CI gfxreconstruct build queued with queue ID 278671.

CI gfxreconstruct build # 5067 running.

CI gfxreconstruct build queued with queue ID 278687.

CI gfxreconstruct build queued with queue ID 278689.

CI gfxreconstruct build queued with queue ID 278715.

CI gfxreconstruct build # 5070 running.

CI gfxreconstruct build # 5070 passed.

CI gfxreconstruct build queued with queue ID 279177.

CI gfxreconstruct build # 5073 running.

CI gfxreconstruct build # 5073 passed.

CI gfxreconstruct build queued with queue ID 279314.

CI gfxreconstruct build # 5078 passed.

CI gfxreconstruct build queued with queue ID 280317.

CI gfxreconstruct build # 5091 running.

CI gfxreconstruct build # 5091 passed.


Can we implement volume calculation on the viewer?

Its already in there, look at the information dialog.


Prepare RTDIP demo

User Story

As an AMOS PO
I want to demo our RTDIP components in a visually appealing way
So that people who are unfamiliar with the project get an idea of what it does

Additional context

We (the POs) will have to demo the project on "mid-project review" (27.11.2024) and on AMOS demo day (05.02.2025)
One way to make the demo visually appealing could be to plot some data before and after transformation by our components in a Jupyter notebook

Acceptance Criteria

There exists a demo folder in the repository
The repository contains a script/jupyter notebook that can be executed
In the demo the RTDIP library is imported, the same way a real RTDIP engineer would do it
The data source is free of choice (doesn't have to be Shells data) but should be directly available, either checked into the repository or through a private link
During the demo plots are shown, not only logs or dataframes are printed out, to make it visually appealing and easier to understand for project outsiders
Make it as easy as possible for a non-technical PO, ideally just "one click"

Definition of Done

Test cases have been created and are running successfully
Documentation for the new component was added
Github Actions are running without errors

@sanalmert @luccalb
What software are you using to view Phython Notebooks?

usually jupyter notebook in vs code or pycharmAm 13.11.2024 13:59 schrieb Timm638 @.***>:
@sanalmert @luccalb
What software are you using to view Phython Notebooks?
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***>

@luccalb @sanalmert
I've drafted up the plots for all components and put it into the notebook located in the respective branch.
Are the plots okay for the upcoming demo? Or should I change something?

@Timm638 @chris-1187 Could you add the ARIMA, and data imputation to the demo as well? I think they are our most "impressive" components.

I finished adding both showcases to the demo.

@FelipeTrost I think linear regression is the only component missing in the demo now. It's not a must, but would definitely be cool to show :)


clear day filter

Make a clear atmosphere filter to filter out the days in favour of a UHI. This is done by:

windspeed < threshold
no clouds
no precipitation

This filter is applied on 24h periods (starting at midnight), and is accepted/rejected as a whole.

Get the windspeed, cloud fraction, precipitation timeseries from GEE
Make daily filter (crop the beginning/end of the records if needed)
return multiindex for the records with clear day observations

@ACovaci99 I will do the extraction from google earth engine (GEE)

suggestion to use the pandas.DataFrame.query() method


Spinner is not topmost over a dialog

How do I set it above a dialog. I'm using MZFormController

I solved it by adding always
UIApplication.sharedApplication().keyWindow?.addSubview(SwiftSpinner.sharedInstance)
before calling SwiftSpinner.show

Hope it helps anyone.


Include documentation from event listener methods in module canvas

A typical event listener method looks like this:
@Component
class MyEventListeners {

  /**
   * Some documentation about what this does.
   *
   * @param event
   */
  @EventListener
  void on(SomethingHappened event) { … }
}

It would be cool if the method comment was included in the module canvas generated and listed under the event listeners section.

That's available now:


Bump VisualStudioVersion to 16.0

This will allow MSBuild to find Visual Studio 16 instances and is part
of the larger versioning approach for MSBuild 16.

@dotnet-bot test RHEL7.2 Build for CoreCLR please

Superseded by #3779.


[QUESTION] 自定义进程中怎么捕获异常

Before you submit this issue, you has been search all existed issues and search the documentation

[] I've been search all existed issues
[] I've been read all documentation

Describe your question
逻辑里很多地方调用了redis，异常的时候怎么捕获，在文档异常处理没看到关于自定义进程的内容

自定义进程最外层，手动 try catch

3q


RStudio Connect: EFS Mount Issues - lchown operation not permitted

Hi,
I'm deploying RStudio Connect on EKS (Elastic Kubernetes Service). I'm using the sharedStorage option backed by EFS (Elastic File System).  The RStudio Connect deployment comes online.  The issue is when deploying apps, I keep seeing the following filesystem issues:
2022/01/14 20:31:32 POST to /__api__/applications/1/upload caused a non-API error: lchown /mnt/rs-connect/data/apps/1/1: operation not permitted

Helm Chart Version: 0.2.20
Helm Chart Values (I omitted some values like passwords, and other non relevant info like SMPT, Postgres details, etc...):
sharedStorage:
  create: true
  name: "rs-connect"
  mount: true
  path: /mnt/rs-connect/data
  storageClassName: rs-connect
  accessModes:
    - ReadWriteMany
  requests:
    storage: "100Gi"

rbac:
  create: true
  clusterRoleCreate: true
  serviceAccount:
    create: true

extraObjects: []

image:
  repository: ghcr.io/rstudio/rstudio-connect
  tag: ""
  imagePullPolicy: "IfNotPresent"
  imagePullSecrets: []

service:
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"
  type: LoadBalancer
  nodePort: false
  port: 80

pod:
  haste: true
  env: []
  serviceAccountName: false
  annotations: {}
  labels: {}
  sidecar: false
  command: []
  args: []
  replicas: 1

license:
  key: "XXX"
  server: false
  file:
    contents: false
    mountPath: "/etc/rstudio-licensing"
    mountSubPath: false
    secretKey: "license.lic"
    secret: false

securityContext: null

prometheusExporter:
  enabled: false

livenessProbe:
  enabled: false
  httpGet:
    path: /__ping__
    port: 3939
  initialDelaySeconds: 10
  periodSeconds: 5
  timeoutSeconds: 2
  failureThreshold: 10

startupProbe:
  enabled: false
  httpGet:
    path: /__ping__
    port: 3939
  initialDelaySeconds: 10
  periodSeconds: 10
  timeoutSeconds: 1
  failureThreshold: 30

readinessProbe:
  enabled: true
  httpGet:
    path: /__ping__
    port: 3939
  initialDelaySeconds: 3
  periodSeconds: 3
  timeoutSeconds: 1
  successThreshold: 1
  failureThreshold: 3

initContainers: false

ingress:
  enabled: false

launcher:
  enabled: true
  customRuntimeYaml: false
  launcherKubernetesProfilesConf: {}
  contentInitContainer:
    repository: ghcr.io/rstudio/rstudio-connect-content-init
    tag: ""

config:
  HTTP:
    Listen: :3939
  Authentication:
   Provider: password
  Authorization:
    UserInfoEditableBy: AdminAndSelf
  Password:
    SelfRegistration: true
  Server:
    RVersionScanning: false
    RVersion: "/opt/R/4.1.1"
    TempDir: "/tmp"
    Address: http://localhost:3939
    DataDir: "/mnt/rs-connect/data"
  Launcher:
    DataDir: "/mnt/rs-connect/data"
  Database:
    Provider: "Postgres"
    Dir: "/mnt/rs-connect/data"

We can close the issue now. This issue was resolved by upgraded to the development EFS drivers that allowed me to specify guid and uid in the storageclass. It appears RStudio Connect is needing to use guid: 999 and uid: 999.
Must have devevolpment drivers installed
kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/dev/?ref=master"

Example StorageClass that fixed file permissions for me:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
  name: rstudio-connect
parameters:
  basePath: /rstudio-connect
  fileSystemId: XXX
  gid: "999"
  provisioningMode: efs-ap
  uid: "999"
provisioner: efs.csi.aws.com
reclaimPolicy: Delete
volumeBindingMode: Immediate

Rstudio connect now uses the root user (uid/gid 0). For me I was able to fix this by specifying uid/gid 0 in the storageclass, like so:
# helm chart
{{- range .Values.efsStorageClasses }}
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: "{{ .namePrefix | lower }}-efs"
parameters:
{{ .parameters | toYaml | indent 2 }}
provisioner: efs.csi.aws.com
---
{{- end }}

# values passed to helm chart
storage-classes:
  enabled: True
  efsStorageClasses:
    - namePrefix: posit-connect
      parameters:
        fileSystemId: fs-13d16515b57a3320d
        provisioningMode: efs-ap
        directoryPerms: "700"
        uid: "0"
        gid: "0"


Resize images to standardize (to ensure that classifiers work on images different sizes to training data)

I have added
FaceDetection.notifyUser("Loading test faces...")

      facesTesting = FaceDetection.loadImages(posTestingPath)
      # facesIITesting = map(FaceDetection.toIntegralImage, facesTesting)
      facesIITesting = map(i -> imresize(i, (19,19)), map(FaceDetection.toIntegralImage, facesTesting))
      println("...done. ", length(facesTesting), " faces loaded.")

      FaceDetection.notifyUser("Loading test non-faces..")

      nonFacesTesting = FaceDetection.loadImages(negTestingPath)
      nonFacesIITesting = map(i -> imresize(i, (19,19)), map(FaceDetection.toIntegralImage, nonFacesTesting))
      println("...done. ", length(nonFacesTesting), " non-faces loaded.\n")

but is this enough?  Instead of resizing the images, it would be ideal to resize the classifiers.


Fix missing reference to GhidraServer

This is fix broken gradle integrationTestJar
Closes: #876

What is the name of your Ghidra source directory?  After looking into this, it seems that if it's not ghidra, you will get the error about GhidraServer.  I think this is the root of the problem:
https://github.com/NationalSecurityAgency/ghidra/blob/ca6c01268e4f9bc09e276420fb21f21d99e27ab3/Ghidra/Test/IntegrationTest/build.gradle#L17
If it properly went into that if, GhidraServer would get included.

That looks like an real thing. My root folder is Ghidra-1 so looks like you are right

I'll go ahead and close this pull request, and fix up that loop which should address #876.


system-tests: new test for auto scaleup after manual scaledown

create plan for queue which consume 0.5 broker resource
create queue1, queue2 create queue3, queue4
send 1000 messages into each of queues above
manually scale broker StatefulSet to 1 pod
wait until StatefulSet will be automatically scaled up to 2 pods
try to receive mesages from all queues above

Scenario above changed a little bit, because I misunderstood. Message persistence is not supported after manual scale-down. So send/receive was removed from this scenario and now this test verify that address is scaled to correct count of replicas.

test merged with master, works fine


Examples refactoring and cleanup

I made a few changes in this one so here's a summary of what I did:

Removed some code that was out of context, now each example should contain only what's relevant (there were some event listeners or chat commands that were probably added as a test)
Added a description on top of each file so it's clear what each example does
Changed the way chat commands are parsed and separated most reactions to commands in smaller  functions so it's easier to see what each command does without reading all the code
Added comments explaining the syntax of the most complicated commands
Reordered some code so functions are easier to find
Separated a few other functions and statements so each example is easier to follow
Fixed a few style inconsistencies

I tested every example manually to check that they were working and everything seems to be fine.
I think there are a few other optimizations that can be done, especially since there's some repetitive code that can be put in a reusable functions instead and some code that could be shared between examples but I didn't want to do too much at once. If everything looks good to you I might do that before merging.

Comments are nice, and creating new functions is nice too indeed !
Some problems :

I see you uncommented some stuff in chatterbox.js : isn't it too spammy ?
the bot.on('experience in chest.js was useful for the enchantment table (some enchantment can only be done at some level)
I don't really like switch over if / else if, but ok I guess we can do that. What's the point of these switch true in chest.js though ?

Ok so my main complaint is about these switch case, imho if/else if are better. But we can improve on if/else if with something like this :
var commands = {
 /^list$/:listInventory,
 /^toss \d+ \w+$/:tossItem
}
for(var regex in Object.keys(commands))
{
  var results=message.exec(regex);
  if(results!=null)
  {
   results.shift();
   var f=commands[regex];
   f.apply(null,results);
   break;
  }
}

It makes the examples a little bit more complex but maybe that's worth it ?

Just made a few more changes.
@rom1504:

I tried chatterbox.js and it seems fine but I tested it on a server that was pretty much empty, it may cause some problems on a server with a lot of players but I think in that case it shouldn't be used anyway since it's just an example.
You're right, I didn't notice that, I just put it back
I used switch(true) when one or more strings are matched against a regex to keep things consistent between examples.

I personally like switches more because I found them easier to read, but I guess your idea might be even better. I don't think there's a way to use a regex as key but something like this should work:
var commands = {
  '^list$': sayItems,
  '^toss (\\d+) (\\w+)$': tossItem,
};

bot.on('chat', function(username, message) {
  if (username === bot.username) return;
  parseCommand(message);

  function parseCommand(message) {
    var match;
    for (var key in commands) {
      match = new RegExp(key).exec(message);
      if (match) break;
    }
    commands[key].apply(null, match.slice(1));
    return match;
  }
});

I do intend to merge this but I need to look at some of the stuff, maybe add a commit or two, didn't have time to do that recently ;)

I finally took time to merge this !
Thanks for this PR @Pietro210
In the end, the swich case look okay, we might put in place that solution with an array of commands later.
I added a commit to put findBlock in blocks.js, it's better to have the function in only one place in mineflayer and it's a good thing to have kept a similar API to mineflayer-blockfinder function.


train error

Hello, when I train the model, I get an error. Have you encountered it before?
Traceback (most recent call last):
File "pose_estimator.py", line 878, in
model_dir=args.logs)
File "/home/flyvideo/nan_file/cloth_keypoint_detect/UrsoNet/net.py", line 581, in init
self.keras_model = self.build(mode=mode, config=config)
File "/home/flyvideo/nan_file/cloth_keypoint_detect/UrsoNet/net.py", line 644, in build
loc_pred = build_loc_graph(C6, config, nr_features)
File "/home/flyvideo/nan_file/cloth_keypoint_detect/UrsoNet/net.py", line 300, in build_loc_graph
x = KL.Reshape((nr_features,))(feature_map)
File "/home/flyvideo/anaconda2/envs/py35/lib/python3.5/site-packages/keras/engine/topology.py", line 621, in call
output_shape = self.compute_output_shape(input_shape)
File "/home/flyvideo/anaconda2/envs/py35/lib/python3.5/site-packages/keras/layers/core.py", line 376, in compute_output_shape
input_shape[1:], self.target_shape)
File "/home/flyvideo/anaconda2/envs/py35/lib/python3.5/site-packages/keras/layers/core.py", line 364, in _fix_unknown_dimension
original = np.prod(input_shape, dtype=int)
File "/home/flyvideo/anaconda2/envs/py35/lib/python3.5/site-packages/numpy/core/fromnumeric.py", line 2566, in prod
out=out, **kwargs)
File "/home/flyvideo/anaconda2/envs/py35/lib/python3.5/site-packages/numpy/core/_methods.py", line 35, in _prod
return umr_prod(a, axis, dtype, out, keepdims)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

I get the same error. Have you solved it？

pip uninstall h5py
pip install h5py==2.10


Motion Sensor Status over Internet

Hi ,
anyone notice that motion sensors are not react to changes when the phone is remote only?
AppleTV 4 works correctly i see my other things will send push notification when for example i open my windows. But the Motion Sensor added via Homebridge will send only notifications when i am on the same wlan. I configurated the sensor to send notifciations on changes.

sorry, wich motion sensor plugin are u using? Try to find one...

@sbpaul I do get Motion detected in ... notifications from Home on my iPhone over 4G.  I suspect you need a Home Hub for that, though.  Maybe the sync of your HomeKit configuration to your AppleTV failed?  Mine does every once in a while...
@StefanMeGit I'm using Philips Hue motion sensors through my homebirdge-hue plugin.

Ah ok. Thx!
The over cellular notifications are also working for me now quiet good. I use a AppleTV 4 as HomeKit Bridge.

Found a solution for me: https://github.com/jspv/HAP-NodeJS/commit/932ef587bee27cd3788c066d52cfd559ab556b3a#diff-00b357729430bdec42cba36540307f8a


Fprime-gds GUI not handling NaNs

F´ Version
3.1.4

Affected Component
fprime-gds loader.js

Problem Description
When a telemetry channel sent to fprime-gds contains a value of NaN, it appears that the GUI does not know how to handle it, and so the telemetry stops updating in the Channels window. When looking at developer tools in chrome, I get the following error message:
VM251:1 Uncaught SyntaxError: Unexpected token 'N', ..."2, "val": NaN, "disp"... is not valid JSON
    at JSON.parse (<anonymous>)
    at xhttp.onreadystatechange (loader.js:198:40)
xhttp.onreadystatechange @ loader.js:198
XMLHttpRequest.send (async)
(anonymous) @ loader.js:216
load @ loader.js:191
poller @ loader.js:248

Inspecting the JSON that it complains about:
{
  "time": {
    "base": 2,
    "context": 0,
    "seconds":<PHONE_NUMBER>,
    "microseconds": 197687
  },
  "id": 8972,
  "val": NaN,
  "display_text": "nanC"
},
{
  "time": {
    "base": 2,
    "context": 0,
    "seconds":<PHONE_NUMBER>,
    "microseconds": 197694
  },
  "id": 8973,
  "val": NaN,
  "display_text": "nanC"
},

I verified that fprime-gds actually receives the value just fine, as you can see below if I use the CLI to view the data.
$ fprime-cli channels -d ~/dev-working-tlm-power/CadreFlightDeploymentTopologyAppDictionary.xml -p 50058 -s nan
2024-04-01 00:08:11: power.PWR_BattExtTemp1 (8972) (2(0)-1711930091:106129) nanC
2024-04-01 00:08:11: power.PWR_BattExtTemp2 (8973) (2(0)-1711930091:106134) nanC
2024-04-01 00:08:12: power.PWR_BattExtTemp1 (8972) (2(0)-1711930092:156472) nanC
2024-04-01 00:08:12: power.PWR_BattExtTemp2 (8973) (2(0)-1711930092:156491) nanC
2024-04-01 00:08:13: power.PWR_BattExtTemp1 (8972) (2(0)-1711930093:199988) nanC
2024-04-01 00:08:13: power.PWR_BattExtTemp2 (8973) (2(0)-1711930093:199993) nanC
2024-04-01 00:08:14: power.PWR_BattExtTemp1 (8972) (2(0)-1711930094:253030) nanC
2024-04-01 00:08:14: power.PWR_BattExtTemp2 (8973) (2(0)-1711930094:253048) nanC

How to Reproduce

Create an fprime component that sends telemetry channel with a value of NaN
Run fprime-gds with the GUI enabled
Open the web browser fprime-gds GUI and go to the channels tab
Run fprime deployment with above component
Observe that the GUI channels tab stops updating.

Expected Behavior
It should gracefully handle a NaN and probably just display Nan in the browser.

The issue comes with the JSON serialization in Python.  We should update that serialization to mark items as NaN in text and re-translate in the webui.

This was fixed with PR #134


Do you have an example of lemonade.apply?

Working on a little application and Lemonade.js sounds like a perfect match. I have a main area with shows a list of input fields based on self.
Is it possible to modify the self from a separate function? I was thinking about bidding the self scope to an existing DOMElement already in the DOM. I would like to use external functions to modify the self and render when self has changed. Is this possible?

Lemonade.apply is for bind the self to an existing element already appended to DOM.
it would be:
lemonade.apply(document.getElementById('yourRootId'), self);
On version 2 there is a new concept called SUGAR, which you can put your self on a common registry and get it back anytime. Which version are you using? We will be releasing the documentation in the next few days...

{{self.title}}

    <input type="button" value="Update" onclick="self.title = 'New title'" />

Thanks for your fast reply. I'm on version v2.1.10.

I got things working in a little proof of concept. Chose a slightly different route after reading the Array binding docs.
Would you be open to give it a quick look to see if this is inline with Lemonade? Goal is to create a simple client side form builder (adding fields, removing fields, update properties).
var self = {};
self.count = 0;
self.fields = [{label:"Example input", type:"input", placeholder:"hello world"}];

function addField( fieldType) {
    self.count++;

    var field = {}
    field.label= 'Example input ' + self.count
    field.type = fieldType
    field.placeholder = "lorem ipsum"

    self.fields.push( field )
    self.refresh('fields')

}

function uploadFieldLabelTest() {
    self.fields[0].label = "Hello world"
    self.refresh('fields')
}

function deleteFieldTest( idx) {
    self.fields.splice( idx ,1 )
    self.refresh('fields')
}

var App = (function() {

    self.fields.toString = function(v) {
        var str = ''
        for (var i = 0; i < this.length; i++) {
            str += self[ this[i].type + 'Tpl' ]( this[i] )
        }
        return str;
    }

    self.inputTpl = function( field ) {
        return `

        ${field.label}
        <input type="text" class="form-control" placeholder="${field.placeholder}">

`
    }

    self.textareaTpl = function( field ) {
        return `

        ${field.label}
        <textarea class="form-control" placeholder="${field.placeholder}" rows="3"></textarea>

`
    }

    let template = `

You clicked {{self.count}} times

{{ self.fields }}

        <button class="btn btn-primary" onclick="addField( 'textarea' )">Add textarea</button>
        <button class="btn btn-primary" onclick="addField( 'input' )">Add input</button>
        <button class="btn btn-outline-primary" onclick="uploadFieldLabelTest()">Upload label test</button>
        <button class="btn btn-outline-primary" onclick="deleteFieldTest(1)">Delete field test</button>

`;

    return lemonade.element(template, self);

});

lemonade.render(App, document.getElementById('theForm'));

I got things working in a little proof of concept. Chose a slightly different route after reading the Array binding docs.
Would you be open to give it a quick look to see if this is inline with Lemonade? Goal is to create a simple client side form builder (adding fields, removing fields, update properties).
var self = {};
self.count = 0;
self.fields = [{label:"Example input", type:"input", placeholder:"hello world"}];

function addField( fieldType) {
    self.count++;

    var field = {}
    field.label= 'Example input ' + self.count
    field.type = fieldType
    field.placeholder = "lorem ipsum"

    self.fields.push( field )
    self.refresh('fields')

}

function uploadFieldLabelTest() {
    self.fields[0].label = "Hello world"
    self.refresh('fields')
}

function deleteFieldTest( idx) {
    self.fields.splice( idx ,1 )
    self.refresh('fields')
}

var App = (function() {

    self.fields.toString = function(v) {
        var str = ''
        for (var i = 0; i < this.length; i++) {
            str += self[ this[i].type + 'Tpl' ]( this[i] )
        }
        return str;
    }

    self.inputTpl = function( field ) {
        return `

        ${field.label}
        <input type="text" class="form-control" placeholder="${field.placeholder}">

`
    }

    self.textareaTpl = function( field ) {
        return `

        ${field.label}
        <textarea class="form-control" placeholder="${field.placeholder}" rows="3"></textarea>

`
    }

    let template = `

You clicked {{self.count}} times

{{ self.fields }}

        <button class="btn btn-primary" onclick="addField( 'textarea' )">Add textarea</button>
        <button class="btn btn-primary" onclick="addField( 'input' )">Add input</button>
        <button class="btn btn-outline-primary" onclick="uploadFieldLabelTest()">Upload label test</button>
        <button class="btn btn-outline-primary" onclick="deleteFieldTest(1)">Delete field test</button>

`;

    return lemonade.element(template, self);

});

lemonade.render(App, document.getElementById('theForm'));

This is more inline with version 1. Version 2 brings the @loop where is handler that much better. If you don't mind I will rewrite your code and send you soon.

This is more inline with version 1. Version 2 brings the @loop where is handler that much better. If you don't mind I will rewrite your code and send you soon.

Yes no problem, much appreciated!

Yes no problem, much appreciated!

Please find the version of your code using the new features from version 2. The documentation with more details about that is on the way.

Please find the version of your code using the new features from version 2. The documentation with more details about that is on the way.

Thanks, works like a charm. I like the @loop approach and makes much sense. Pretty nifty!
What if the buttons live outside the HTML of App (toolbar). Would I make the self global or is it better the bring the other HTML to the template of the App? The only thing the toolbar items need to do is adding fields to list in the self which is currently in external code.

Thanks, works like a charm. I like the @loop approach and makes much sense. Pretty nifty!
What if the buttons live outside the HTML of App (toolbar). Would I make the self global or is it better the bring the other HTML to the template of the App? The only thing the toolbar items need to do is adding fields to list in the self which is currently in external code.

SUGAR is a global container, basically you can register your SELF, and get recover in any scope you wish.

SUGAR is a global container, basically you can register your SELF, and get recover in any scope you wish.

Thanks and crystal clear. Got things working now, all I needed was some sugar! ;)

Thanks and crystal clear. Got things working now, all I needed was some sugar! ;)

Sorry for keeping this thread going. On the @loop example. Would there be a way to reuse parts like ""
I managed to add it using a separate component but this breaks the onclick. I encounter the following error:
TypeError: undefined is not an object (evaluating 'self.parent.delete')

Sorry for keeping this thread going. On the @loop example. Would there be a way to reuse parts like ""
I managed to add it using a separate component but this breaks the onclick. I encounter the following error:
TypeError: undefined is not an object (evaluating 'self.parent.delete')

Can you explain a bit better, it seems part of your message is gone. Or, you can share the code... maybe create something on codesandbox?

Can you explain a bit better, it seems part of your message is gone. Or, you can share the code... maybe create something on codesandbox?

Ah yes, you are right I forgot to paste the code between the two quotes.
The code in my templates list is growing and I would like to extract and isolate some repetitive elements for convenience sake. As an example I thought about centralizing the following line in the example you provided (my actual code is more complex so'll focus on the "Delete this" button).
<input type="button" onclick="self.parent.delete(self)" value="Delete this "/>
I replaced that with the  component and added that to template entries.
var Delete = (function() {
    var self = this;
    var templates = `<input type="button" onclick="self.parent.delete(self)" value="Delete this "/>`
    return lemonade.element(templates, self);
});

All the entries in my templates refer to that component and the button is nicely added to the DOM. But... on clicking the button I encounter the TypeError
TypeError: undefined is not an object (evaluating 'self.parent.delete')

Ah yes, you are right I forgot to paste the code between the two quotes.
The code in my templates list is growing and I would like to extract and isolate some repetitive elements for convenience sake. As an example I thought about centralizing the following line in the example you provided (my actual code is more complex so'll focus on the "Delete this" button).
<input type="button" onclick="self.parent.delete(self)" value="Delete this "/>
I replaced that with the  component and added that to template entries.
var Delete = (function() {
    var self = this;
    var templates = `<input type="button" onclick="self.parent.delete(self)" value="Delete this "/>`
    return lemonade.element(templates, self);
});

All the entries in my templates refer to that component and the button is nicely added to the DOM. But... on clicking the button I encounter the TypeError
TypeError: undefined is not an object (evaluating 'self.parent.delete')

Ok, Firstly, self.parent is only available for the @loop children. So, basically each child of the array of objects has to know his parent. So, as a solution for your problem, you need to use SUGAR. This time, using the concept of function dispatcher.
Basically, instead of registering the whole self, you will register only a function dispatcher. Them call when approprieated.
var Delete = function () {
  var self = this;
  self.del = function () {
    // self.controller is defined as a attribute of the <Delete/> component to bind the button and the position of the array.
    // The FIELDS_DELETE is declared in the main method as a data dispatcher.
    lemonade.dispatch("FIELDS_DELETE", self.controller);
  };
  var templates = `<input type="button" onclick="self.del()" value="Delete this "/>`;
  return lemonade.element(templates, self);
};

var Fields = function () {
  // For each interaction in the loop a new self is created
  var self = this;

  // @loop allow you to call the self of the parent as below.
  var templates = {
    input: `

            {{self.label}}
            <input type="text" class="form-control" placeholder="{{self.placeholder}}">
            <Delete controller="{{self}}" />

`,
    textarea: `

            {{self.label}}
            <textarea class="form-control" placeholder="{{self.placeholder}}" rows="3"></textarea>
            <Delete controller="{{self}}" />

`
  };

  // Don't forget to declare Delete, since it is used inside this component template.
  return lemonade.element(templates[self.type], self, { Delete });
};

var App = function () {
  var self = {};

  /**
   * Using @loop each entry of this method would be a independent self
   **/
  self.fields = [
    { label: "Example input", type: "input", placeholder: "hello world" },
    { label: "Example input", type: "input", placeholder: "hello world" }
  ];

  self.uploadFieldLabelTest = function () {
    // Using @loop each element on the array is an independent self, so no refresh in this case is needed.
    self.fields[0].label = "Hello world";
  };

  self.addField = function (fieldType) {
    self.count++;

    var field = {};
    field.label = "Example input " + self.count;
    field.type = fieldType;
    field.placeholder = "lorem ipsum";
    self.fields.push(field);

    // In this case refresh is needed since you change the number of elements in the array
    self.refresh("fields");
  };

  /**
   * Delete an existing s from the loop.
   * @param s
   */
  self.deleteFieldTest = function (index) {
    self.fields.splice(index, 1);

    // Need since you change the number of elements in the array.
    self.refresh("fields");
  };

  // The <Fields> should have a parent to hold the sub elements in this case a single
 is enough.
  let template = `

You clicked {{self.count}} times

<Fields @loop="self.fields" />

        <button class="btn btn-primary" onclick="self.addField( 'textarea' )">Add textarea</button>
        <button class="btn btn-primary" onclick="self.addField( 'input' )">Add input</button>
        <button class="btn btn-outline-primary" onclick="self.uploadFieldLabelTest()">Upload label test</button>
        <button class="btn btn-outline-primary" onclick="self.deleteFieldTest(1)">Delete field test</button>

`;

  // Register a dispatcher delete method on Sugar
  lemonade.set("FIELDS_DELETE", function (s) {
    // Find the position of the self passed
    self.fields.splice(self.fields.indexOf(s), 1);

    // Need since you change the number of elements in the array.
    self.refresh("fields");
  });

  return lemonade.element(template, self, { Fields });
};

lemonade.render(App, document.getElementById("app"));

Ok, Firstly, self.parent is only available for the @loop children. So, basically each child of the array of objects has to know his parent. So, as a solution for your problem, you need to use SUGAR. This time, using the concept of function dispatcher.
Basically, instead of registering the whole self, you will register only a function dispatcher. Them call when approprieated.
var Delete = function () {
  var self = this;
  self.del = function () {
    // self.controller is defined as a attribute of the <Delete/> component to bind the button and the position of the array.
    // The FIELDS_DELETE is declared in the main method as a data dispatcher.
    lemonade.dispatch("FIELDS_DELETE", self.controller);
  };
  var templates = `<input type="button" onclick="self.del()" value="Delete this "/>`;
  return lemonade.element(templates, self);
};

var Fields = function () {
  // For each interaction in the loop a new self is created
  var self = this;

  // @loop allow you to call the self of the parent as below.
  var templates = {
    input: `

            {{self.label}}
            <input type="text" class="form-control" placeholder="{{self.placeholder}}">
            <Delete controller="{{self}}" />

`,
    textarea: `

            {{self.label}}
            <textarea class="form-control" placeholder="{{self.placeholder}}" rows="3"></textarea>
            <Delete controller="{{self}}" />

`
  };

  // Don't forget to declare Delete, since it is used inside this component template.
  return lemonade.element(templates[self.type], self, { Delete });
};

var App = function () {
  var self = {};

  /**
   * Using @loop each entry of this method would be a independent self
   **/
  self.fields = [
    { label: "Example input", type: "input", placeholder: "hello world" },
    { label: "Example input", type: "input", placeholder: "hello world" }
  ];

  self.uploadFieldLabelTest = function () {
    // Using @loop each element on the array is an independent self, so no refresh in this case is needed.
    self.fields[0].label = "Hello world";
  };

  self.addField = function (fieldType) {
    self.count++;

    var field = {};
    field.label = "Example input " + self.count;
    field.type = fieldType;
    field.placeholder = "lorem ipsum";
    self.fields.push(field);

    // In this case refresh is needed since you change the number of elements in the array
    self.refresh("fields");
  };

  /**
   * Delete an existing s from the loop.
   * @param s
   */
  self.deleteFieldTest = function (index) {
    self.fields.splice(index, 1);

    // Need since you change the number of elements in the array.
    self.refresh("fields");
  };

  // The <Fields> should have a parent to hold the sub elements in this case a single
 is enough.
  let template = `

You clicked {{self.count}} times

<Fields @loop="self.fields" />

        <button class="btn btn-primary" onclick="self.addField( 'textarea' )">Add textarea</button>
        <button class="btn btn-primary" onclick="self.addField( 'input' )">Add input</button>
        <button class="btn btn-outline-primary" onclick="self.uploadFieldLabelTest()">Upload label test</button>
        <button class="btn btn-outline-primary" onclick="self.deleteFieldTest(1)">Delete field test</button>

`;

  // Register a dispatcher delete method on Sugar
  lemonade.set("FIELDS_DELETE", function (s) {
    // Find the position of the self passed
    self.fields.splice(self.fields.indexOf(s), 1);

    // Need since you change the number of elements in the array.
    self.refresh("fields");
  });

  return lemonade.element(template, self, { Fields });
};

lemonade.render(App, document.getElementById("app"));

As explained, you just got us in the middle of the version 2 release, which brings a lot of new concepts. All the documentation is on the way and would be available in the next few days.
About SUGAR and the dispatcher. Here is another example that it would be available in the website. It is the persistence for the dispatcher.

As explained, you just got us in the middle of the version 2 release, which brings a lot of new concepts. All the documentation is on the way and would be available in the next few days.
About SUGAR and the dispatcher. Here is another example that it would be available in the website. It is the persistence for the dispatcher.

Thanks, once again! Looking forward to the new docs.

Thanks, once again! Looking forward to the new docs.

Making great progress on my little project. Currently struggling with the part where I need to show a series of input controls based on information stored in self.type (being either: heading, text or textarea). Each type will have it's own set of options. Below a simplified version  of the code.
I'm currently using a hard coded reference to the respective template (templates['text']). I need to replace the 'text' with the type stored in self.type but when changing the code to templates[ self.type ] I get an error in the console (TypeError: undefined is not an object (evaluating 'e.replace') line 573). I cannot get my head around this. Do you have any suggestions?
var Options = (function() {
    var self = this;

    var templates = {
        heading: `<p>Heading options {{self.type}}</p>`,
        text: `<p>Text options {{self.type}}</p>`,
        textarea: `<p>Textarea options {{self.type}}</p>`,
    }

    return lemonade.element( templates['text'], self );
});

A more complete snippet of the code:
var Options = (function() {
    var self = this;

    var templates = {
        heading: `<p>Heading options {{self.type}}</p>`,
        text: `<p>Text options {{self.type}}</p>`,
        textarea: `<p>Textarea options {{self.type}}</p>`,
    }

    return lemonade.element( templates[self.type], self );
});

function Properties() {
    let self = {};

    let s = lemonade.get('OLCLCAP:Form');

    lemonade.set('Properties', function(p) {
        self.active = p.active;
        self.type = p.type;
        self.label = s.fields[p.active].label;
    }, false);

    let template = `

Selected entry
{{self.active}}

Type
{{self.type}}

Label type
{{self.label}}

Options

<Options type="{{self.type}}" />

`;

    return lemonade.element(template, self, { Options } );

}

lemonade.render(Properties, document.getElementById('properties'));

I believe you should add a self.type in the Properties as default. it seems your first load has no type, that's why you are getting this error.

When you are using loop, as you have noticed each position in the array would have a unique self connect the the HTML generated by the template, in your case based on your type. This HTML is created only at the first time. Thus, I believe if you give the user hability to change the type you might need to handler that in some more special way.

The new lemonadejs is live. https://lemonadejs.net/v2


Fix typo from React to app into LitElement template

Changes
Fix typo into LitElement template README

Testing
Currently no tests added.

Docs
Currently not documented

Thanks!

Thanks!


Move cloud provider and instance timeline buttons into a separate class

@miq-bot remove_label wip

@durandom @Fryguy @martinpovolny Review anyone?

Looks good.

looks good. Nice clean PR :cake:

Merged - we can always rename Instance in a separate PR

I created pull request #7394 for removing the 'Instance' class as discussed above.


Update de.js

Mostly corrected grammar and Spelling. One general question for me is - what is more appropriate, using the formal you (Sie) or the unformal (Du)? I would prefer Du.

@Neugierdsnase & @Mawalu - any thoughts?
I would lean towards informal as well as most of the English is generally very laid back and informal. However that is based on my personality, and I obviously don't really know what, if any, the cultural implications would be in another language.
What do you most commonly see around the web?

I think the informal variant represents more the (as I understand you) community idea of the project. Or as I see the project too. So it's not so much about "laid back" to me, it's more about is the side/the project speaking to friends or to costumers.

Well I use the English interface on most websites so I don't know whats common there. To be honest I just continued with formal since it was the one already used.
But if I think about it the informal one makes more sense in this project.

I personally agree, I chose the formal version for sake of consistency since the one(s) before me chose it. Fun fact though, the English "you" linguistically derives from the German "Sie", not "du".

Fine, I could start to convert it to "Du" this evening.

I'm going to merge this in now but looking forward to watch it evolve! Thank you so much!


Not compatible with Refined Storage Addons

Issue description:
It crashes when used with Refined Storage Addons because some APIs have changed.
Steps to reproduce:
Install the latest versions of Refined Storage Addons and More Refined Storage.
Version (make sure you are on the latest version before reporting):

Minecraft: 1.12.2
Forge: <IP_ADDRESS>54
Refined Storage: 2.2.1

I haven't tested on a server.
If a (crash)log is relevant for this issue, link it here:
This is the first message you get upon trying to load a world:
java.lang.NoClassDefFoundError: com/raoulvdberge/refinedstorage/apiimpl/util/OneSixMigrationHelper
	at com.raoulvdberge.refinedstorageaddons.proxy.ProxyCommon.fixBlockMappings(ProxyCommon.java:37) ~[ProxyCommon.class:?]
	at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_1580_ProxyCommon_fixBlockMappings_MissingMappings.invoke(.dynamic) ~[?:?]
	at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90) ~[ASMEventHandler.class:?]
	at net.minecraftforge.fml.common.eventhandler.EventBus$1.invoke(EventBus.java:144) ~[EventBus$1.class:?]
	at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182) ~[EventBus.class:?]
	at net.minecraftforge.registries.GameData.lambda$injectSnapshot$20(GameData.java:684) ~[GameData.class:?]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) [?:1.8.0_201]
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) [?:1.8.0_201]
	at java.util.Iterator.forEachRemaining(Iterator.java:116) [?:1.8.0_201]

I rebuilt the addons locally to remove references to OneSixMigrationHelper, which then fails because of API changes to onCrafted, onCraftedShift, etc.
Is there an alternative version of the addons I should be using?

The RS Addons mod is not required anymore. The Wireless Crafting Grid is built into More Refined Storage already.
Forgot to state it in the README, my bad.

Sorry; I should have checked the code more closely before opening this issue. Glad to hear that! Looking forward to the performance improvements.

You will not be dissapointed.

@tth05
[offtop] do you have a discord profile? would you like to write a message

@bigenergy Bagga#3886


Acrolinx quality improvements: Planning-Regional-Domain-Controller-Placement.md

#assign: @robinharwood, @Xelu86
@robinharwood @Xelu86
Can you review the proposed changes?
#label:"aq-pr-triaged"
@MicrosoftDocs/public-repo-pr-review-team


CI Attempt 1

Overall this looks alright, it's just the unit tests that need work. Let's merge this and create a new branch with the latest tests.


static_file is serving gzipped files as uncompressed

When using static_file without mimetype to serve a file compressed with gzip, bottle seems to uncompress it on the fly.
How to reproduce it:

create a gzipped text file:

$ echo 'Hello, world!' > hello
$ gzip hello

serve the file with and without mimetype:

>>> from bottle import route, run, static_file
>>> @route("/static/<filename:path>")
... def send_static(filename):
...     return static_file(filename, root=".")
...
>>> @route("/mimetype/<filename:path>")
... def send_static_with_mimetype(filename):
...     return static_file(filename, root=".", mimetype="application/x-gzip")
...
>>> run(host="localhost", port=8080, debug=True)
Bottle v0.12.19 server starting up (using WSGIRefServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.

in a second shell, download the file using both endpoint and check its type:

>>> import requests
>>> import os
>>> def dl_file(type):
...     url = f"http://localhost:8080/{type}/hello.gz"
...     response = requests.get(url)
...     path = type
...     if not os.path.exists(path):
...         os.makedirs(path)
...     else:
...         os.remove(f"{path}/hello.gz")
...     open(f"{path}/hello.gz", "wb").write(response.content)
...     os.system(f"file {path}/hello.gz")
...
>>> dl_file("static")
static/hello.gz: ASCII text
>>> dl_file("mimetype")
mimetype/hello.gz: gzip compressed data, was "hello", last modified: Wed Sep 15 08:29:37 2021, from Unix, truncated

The file is not decompressed by bottle, but if the file-name looks stream-compressed (e.g. foo.txt.gz), bottle sets the Content-Encoding header in addition to Content-Type and most HTTP clients will decompress the body automatically. Not sure if that was a good idea in hindsight. HTTP is a mess sometimes. If you want to serve gzip files as is, you must explicitly set the mimetype parameter to bypass mime-guessing.

Hi @defnull, thanks for the quick answer and explanation.

bottle sets the Content-Encoding header in addition to Content-Type and most HTTP clients will decompress the body automatically.

Indeed requests is uncompressing the file while wget isn't which made me confused a lot 😄.

If you want to serve gzip files as is, you must explicitly set the mimetype parameter to bypass mime-guessing.

To be able to serve gzip and non-gzip files in the same route without Content-Encoding, detecting files mimetype and passing it to static_file seems fine:
from bottle import route, run, static_file
import mimetypes

@route("/static/<filename:path>")
def send_static(filename):
    mimetype = mimetypes.guess_type(filepath)
    return static_file(filename, root=".", mimetype=mimetype)

Do you think it could make sense to add a new param to static_file to be able to disable setting the Content-Encoding?

The problem is in one additional (Content-Encoding) and one different content (Content-Type) response header.

download_file.txt

When calling the bottle.static_file function with the default mimetype value (True), the mimetypes.guess_type (filename) function is called, which incorrectly determines the mime type of the file content. But it correctly determines what the file is encoded (compressed) with.
Then the 'Content-Encoding' header is set to gzip, the 'Content-Type' header somewhere before is set to "text / html; charset = UTF-8".
When downloading a file, based on the response headers, the client concludes that it is gzip-compressed, text / html in UTF-8 encoding, and automatically unpacks it (requests module).
To prevent this from happening (the easiest way), you need to prohibit the call to mimetypes.guess_type (filename), since it incorrectly determines the mime type of the file. The python-magic / libmagic module could be used, but this contradicts the words "micro web-framework" in the definition of bottle at http://bottlepy.org/docs/dev/.
To do this, you need to remove the default value (= True) from the mimetype parameter of the bottle.static_file function. Thus, the user will have to manually set this parameter.

Perhaps I found a solution for the mimetype is True parameter in static_file (..). You need to change the code in static_file to the code highlighted in the picture. Content-Type is forced to application/octet-stream.
This change on the server side tells the client downloading the file that the data type of the file is unknown. The client does not unpack the file!


Include thing/action object's vector position when ?meta=true

Proposal
When ?meta=true is set on GET /v1/things/<id> we can include the raw vector position. This will help @fefi42 (and all users) debug classification performance.

Any objections @bobvanluijt ?

Not only I don't object, but this is also great for demos ;-)
While you're on it, would it be possible to /v1/c11y/concepts/{UUID} to show relations etc?

While you're on it, would it be possible to /v1/c11y/concepts/{UUID} to show relations etc?

Can you explain what that would do?

No objections, good idea!

Can you explain what that would do? Also feel free to open a separate issue, I want to keep this one as small as possible, so I can unblock Felix asap.

Now, one gets a vector position for a concept by doing: /v1/concepts/{word} it would be awesome if this would also work for /v1/concepts/{UUID}.
@laura-ham I think this might also be great for the docs, this might allow people to build ML models outside Weaviate.

Addition: can we also show the nearest neighbors like the c11y/concepts endpoint?

Sure, something like
GET /v1/things/{uuid}/neighbors sounds like the perfect place to put them.
What would the neighbors contain? Only neighboring objects? Or neighboring words? Or both?
If we inlcude objects, it's essentially the same (which isn't negative, just want to highlight it) as #1085

Actually, the exact same way as described in this answer.

Scoped the "neighbors" feature out to #1098, so we can close this issue as soon as we have vector position in the object's meta.


feat: Funnel/tooltip-customization

SUMMARY

Added customization to funnel chart tooltips as well as the option to disable the tooltip
BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF

BEFORE:

AFTER:

/testenv up

Could you update the default for the tooltip contents to be "Category, Value, and Percentage" so it's in line with what the tooltips contain today?

This is an awesome feature. Can this be extended to all popular charts?

This is an awesome feature. Can this be extended to all popular charts?

I hate to be "that guy" on the open-source project, but we'd be happy to review PRs for this from you or anyone reading this. Hopefully this can be followed up on as an example implementation.


MM-9773 Fixed permalinks on IE11

It turns out that calling substring and passing a string as the argument does nothing so we were passing the whole link URL through to the click handler where we would remove the domain name. Unfortunately, the way that we were doing that on IE11 worked slightly differently because it removed the preceding slash from the URL path
Ticket Link
https://mattermost.atlassian.net/browse/MM-9773

@hmhealey FYI Christopher is off until Thursday.

@amyblais Thanks for the heads up. I've re-assigned the review


Throw error on repeated identifiers

Right now JSON configuration allows repeated identifiers.

This issue has no sense with the arrival of Barkley for configuration management.


zotero.lua throwing an error when internet disabled

Debug log ID
R6SDZ2VY-apse/6.7.226-6
What happened?
When was converting a file from .md to .docx using pandoc, I received the following error while I had wifi disabled on my computer:

Error running filter /Users/MYNAME/.local/share/pandoc/filters/zotero.lua:
Could not fetch https://retorque.re/zotero-better-bibtex/exporting/zotero.lua.revision
HttpExceptionRequest Request {
host                 = "retorque.re"
port                 = 443
secure               = True
requestHeaders       = []
path                 = "/zotero-better-bibtex/exporting/zotero.lua.revision"
queryString          = ""
method               = "GET"
proxy                = Nothing
rawBody              = False
redirectCount        = 10
responseTimeout      = ResponseTimeoutDefault
requestVersion       = HTTP/1.1
proxySecureMode      = ProxySecureWithConnect
}
(ConnectionFailure Network.Socket.getAddrInfo (called with preferred socket type/protocol: AddrInfo {addrFlags = [AI_ADDRCONFIG], addrFamily = AF_UNSPEC, addrSocketType = Stream, addrProtocol = 0, addrAddress = <IP_ADDRESS>:0, addrCanonName = Nothing}, host name: "retorque.re", service name: "443"): does not exist (nodename nor servname provided, or not known))
stack traceback:
/Users/MYNAME/.local/share/pandoc/filters/zotero.lua:3: in main chunk

When I turned wifi back on, the file processed without any issue. The part of the zotero.lua file that is at issue is:

local mt, latest = pandoc.mediabag.fetch('https://retorque.re/zotero-better-bibtex/exporting/zotero.lua.revision')

I would like to be able to process files with wifi off, so is there some way to get around this? Many thanks in advance for your time.

New version online that makes the call soft-fail

Hmm, now I get the following error, which throws whether I am online or not:

Error running filter /Users/MYNAME/.local/share/pandoc/filters/zotero.lua:
/Users/MYNAME/.local/share/pandoc/filters/zotero.lua:3: attempt to index a nil value (global 'json')
stack traceback:

zotero-live-citations 199d652

new version is up

Yes, that works perfectly, thank you.

Yes, that works perfectly, thank you.


All route middleware getting resolved for every request with version 3.2.2

I opened a Stack Overflow question about this, which led me to issue #1716 here. However, it turns out that I am using version 3.2.2 and I still see the behavior. I will re-paste my question here:
While building a small Slim app, I noticed that all my middleware instances are getting created for every request. I have four routes in my app, only one of which requires a PDO instance, but all of which create an instance. Another route requires a SoapClient instance, but again, requests to any route result in instances being created. Can I do something differently to avoid that?
Here is a stripped down example showing what I mean:
<?php
require __DIR__ . '/../vendor/autoload.php';

class Middleware {
    private $dep;
    public function __construct($dep = null) {
        $this->dep = $dep;
    }
    public function __invoke($req, $res) {
        $res->getBody()->write($this->dep ? 'Got dependency' : 'No dependency');
        return $res;
    }
}

$app = new \Slim\App();

$c = $app->getContainer();

$c['pdo'] = function ($c) {
    echo "PDO connection here<br/>\n";
    return (object) ['pdo' => true];
};

$c['middleware.nodep'] = function ($c) {
    return new Middleware();
};

$c['middleware.withdep'] = function ($c) {
    return new Middleware($c['pdo']);
};

$app->get('/nopdo', function () {})->add($c['middleware.nodep']);
$app->get('/withpdo', function () {})->add($c['middleware.withdep']);

$app->run();

Requests to /withpdo get the following response, as you would expect:

PDO connection hereGot dependency

Requests to /nopdo get this, which I don't want:

PDO connection hereNo dependency

Am I just doing something wrong?

I've answered on StackOverflow.


B 20943 INT

B-20943
B-20944
B-20945
Summary
Fixes improper use of the SIT estimated entry and departure dates  instead of actual dates on payment packets. Also fixed issue where days in storage was calculated using estimated instead of actual dates for SIT on payment packets.
Verification Steps for the Author
These are to be checked by the author.

[ ] Tested in the Experimental environment (for changes to containers, app startup, or connection to data stores)
[ ] Have the Agility acceptance criteria been met for this change?

Verification Steps for Reviewers
These are to be checked by a reviewer.

[ ] Has the branch been pulled in and checked out?
[ ] Have the BL acceptance criteria been met for this change?
[ ] Was the CircleCI build successful?
[ ] Has the code been reviewed from a standards and best practices point of view?

Setup to Run the Code

Instructions for starting storybook
Instructions for starting the MilMove application
Instructions for running tests

How to test

Access the Milmove application
Login as a customer
Create a PPM, ensure that it has storage planned
Submit the PPM
Login as a Service Counselor
Submit move details for your created move
Login as the Customer you create the PPM for
Upload documents and enter Storage Expense details for the PPM (pick different actual dates that estimated dates entered previously for ease of testing)
Login as a Service Counselor
Review the documents and approve the storage
Login as the Customer
Download the Payment Packet
Ensure the Actual dates listed on the Storage Expense object are used on the packet, and not the estimated dates
Login as a Service Counselor
Locate the PPM you created
Download the Payment Packet
Ensure the Actual dates listed on the Storage Expense object are used on the packet, and not the estimated dates

Frontend

[ ] There are no aXe warnings for UI.
[ ] This works in Supported Browsers and their phone views (Chrome, Firefox, Edge).
[ ] There are no new console errors in the browser devtools.
[ ] There are no new console errors in the test output.
[ ] If this PR adds a new component to Storybook, it ensures the component is fully responsive, OR if it is intentionally not, a wrapping div using the officeApp class or custom min-width styling is used to hide any states the would not be visible to the user.
[ ] This change meets the standards for Section 508 compliance.

Backend

[ ] Code follows the guidelines for Logging.
[ ] The requirements listed in Querying the Database Safely have been satisfied.

Database
Any new migrations/schema changes:

[ ] Follows our guidelines for Zero-Downtime Deploys.
[ ] Have been communicated to #g-database.
[ ] Secure migrations have been tested following the instructions in our docs.

Screenshots

Verified packet is using the actual dates and not estimated for Customer and SC.