Fundamental issues

Why do you need DID and why public key cryptography is not enough?
How does the normies (individual with usually just a smartphone) can become liquidity providers (PFIs)?
How does P2P Fiat payment transaction work in very detail?
Bitcoin is the enemies currency. What if a PFIs is my enemy?  Where is the atomic swap or at least the escrow mechanism.

I'm not a part of the TBDev team, but I will try to answer those questions based on my views an understanding of the whitepaper.

DID uses public key cryptography, it is an entire PKI system. Using a DID instead of just a single keypair comes with several advantages.

One having the ability to roll over keys, so that when a user looks up a DID for another user, they can be sure they are encrypting with the latest keys, or they are validating a signature from the latest key.
Another advantage is the schema itself.  When a user fetches your DID document, they are getting more than just a public key, they are getting a schema that describes the services that the user is available to interact with.

From my understanding, this would just be a module/service loaded into the user's identity hub. If the user has a module that provides the service that someone is looking for, they can interact with that service. Although I'm not 100% sure of the details here.

& 4. I don't thinks this is fully defined yet, and it may not be defined as a single protocol. I think you will have choices of service providers and various contracts that they offer.  Depending on the asset, some might work in an atomic fashion.  But as the paper outlines, that doesn't always work when you are mixing something that is not native to a chain (like FIAT). This is where the DIDs come into place, and the idea of reputation.  You, as the user, have the ability to choose from any PFI that will accept your credentials.  If there is a PFI that is your enemy, you are free to choose a different PFI.

Again, I'm not on the TBD(ex) team, so this is just my personal take on the whitepaper and how DIDs/Identity Hubs work.
Also, I wouldn't call any of these things "fundamental issues", seems more like questions about the details of the system being proposed.

Why does a user need to look up for another user in trustless network? Makes no sense unless you are dishonest with yourself and others by calling this a "decentralised" solution.  Second, there is no need a DID for a lookup. You can lookup with the hash of a public key.
I'm not asking about technical details. I'm asking about UX. I'm curious what user experience can be achieved for a normie . How easy would be for him to become a PFI. Do they need to manage a server? Most people have zero knowledge of how to manage a server. Will be just an app on the phone? I think I know the answers. But I want to hear from you.
&4  That is precisely the hardest part in constructing a DEX. You don't have these details, you don't have a DEX. I don't want to hear "is not possible" in a paper you claim "is possible". Is possible or is not possible?  Make up your mind. If it's not possible then just be honest and do not label it DEX. Label it SEX (Square Exchange). This is in the best case a federated exchange but clearly not a decentralised exchange.

Once again, I'm not part of the TBDex team, but I am an interested party.
I'm not sure why you are asking these questions if you feel you know the answers? The questions don't seem to quite describe the protocol correctly. I'll do my best to try and understand your concerns/questions and see if I can provide some of my own ideas around them.

The paper clearly states that this protocol is not trustless. It actually promotes a sense of trust built upon reputation. FIAT is inherently centralized, so that side of the equation would require trust.  If you were using this protocol to exchange between 2 different blockchains you might be able to create a trustless contract, but this protocol is more general purpose that would allow transacting between parties that may require trust.  It is still decentralized because the user themselves looks for what party they would like to transact with, and submits their own ASK/BID to the parties it would like to deal with.

Additionally to #1 you mention that there is no need for a DID.  The DID allows you to find the most recent service endpoints and keys for a specific identity. It also offers key rotation and recover for a specific identity in a standardized way.

How "easy" would depend on the assets they are trading most likely.  It would probably be a bit difficult to become a PFI for FIAT trading as you would need a way to transfer this FIAT to/from the user that is requesting the trade. If you were to become a PFI for another digital asset, that would likely be as simple as installing a module on your IdentityHub that supports those smart contracts. Whether this service is run on a mobile phone or a long-running service depends on the implementation.  That is open to implementers to figure out what the best UX they can come up with that satisfies the protocol and contracts.

I really don't understand your statements/questions here. This is a general purpose exchange protocol... you could use this same protocol to purchase a cone at your local ice cream shop. There is no way to "define" any kind of atomic swap there. But there will be some PFIs that will be able to create trustless swaps between 2 different digital assets. It's just not defined in the protocol because the protocol is not limiting to ONLY digital assets.

I hope I was able to clear up some ideas, and I also hope that I didn't mis-understand the protocol and paper myself.

I think I can help here. Take a step back out of the tech world.

Why do you need DID and why public key cryptography is not enough?

If a new key is issued for every transaction, there is no chain of trust. If you don't want a reputation, you don't need it...

How does the normies (individual with usually just a smartphone) can become liquidity providers (PFIs)?

They already are. People do stuff for each other all the time, it's just not measured. This is a standard that can pave the way for the tech world to get in on that... it gives a standard foundation on which techies can try to fit existing things.

How does P2P Fiat payment transaction work in very detail?

Here is an example: Localbitcoins adopts some concepts from this paper, and now their API automatically speaks to a whole world of other apps... spreads narrow, traffic and liquidity picks up.

Bitcoin is the enemies currency. What if a PFIs is my enemy?  Where is the atomic swap or at least the escrow mechanism.

This is not the level at which to address this problem... you will need to build your own market and economy, where you are efficient enough to not need them. A standard can pave the way, but it is just a brick and you want to build a road...
Again, this is about a standard and getting different parties to be able to do more together by virtue of having common definitions, and thus a better understanding of the similar moving parts and how they can interact. Why do we have internet? Because someone released TCP/IP as a standard. How much productivity did the USB standard unlock?
Back to the 1st question: Reputation. DID would be part of a solution to differentiate scammers from parties who have not yet scammed. (Theoretically doing transactions much smaller than total volume, would be safe? "Safety in numbers". Favorite scam is  anonymous intermediaries waiting for a whale transaction as a pay day... and then do not complete the transaction but take the money. Their pay day, for rendering a cheap and popular service... so just DID is not enough, but it is a foundation on which to build, which is better than just endless string of random keys with no chain of trust... some combination of verified volume, escrow, and proof of funds, that goes several levels deep on the escrow, would be necessary... (Does this sound familiar?... the chain part?... ) (otherwise you can just escrow yourself via indirection) but this is similar to back link and reputation problem for search engines and how they get gamed, a whole industry has had decades of practice in this by now, to an extent everything is an arms race - so how do you curb an arms race, or even better, use it to curb itself? In terms of your last message saying it's not possible... it's not "absolutely" possible. But it is approachable, and you have to give the centralized world credit for the extent to which they have held the line. Personally I don't see a way to track untainted trust, other than the way the banking industry does it: rate limiting: SLOW transactions (aka paperwork, and bureaucracy), transfer limits, and anything above a threshold is tainted, forever. Who will police the exceptions? Power cuts both ways.

If a new key is issued for every transaction, there is no chain of trust. If you don't want a reputation, you don't need it...

You don't need to issue a new identity for every transaction, but you should definitely be able to do this if you want by deriving new key pairs like in BIP 0032. I don't want a probabilistic chain of trust (reputation is just a probabilistic chain of trust that can be hacked anyway). Again, Bitcoin is the enemy currency. This is the difference between federation and decentralisation. You want a federated exchange? Great, it's much better than centralised. But again, be honest and call it federated exchange with centralised flavour.

They already are. People do stuff for each other all the time, it's just not measured. This is a standard that can pave the way for the tech world to get in on that... it gives a standard foundation on which techies can try to fit existing things.

No, they are not. You do not understand the value of giving power to the plebs for having the opportunity to get passive income on their liquidity like in proof of stake. That's why PoS have such a great succes on plebs, because people love the idea of staking their liquidity. But there is no system yet where plebs can operate like investment banking on NYSE. This is the true power. The technical barrier for people to become PFIs are huge in this paper. They just through some abstract ideas without giving the implementation details. I don't even know the authors of this paper. I only read it because came from Square and Jack. I can follow the commits but why no authors? Are they ashamed of theirs ideas?

Here is an example: Localbitcoins adopts some concepts from this paper, and now their API automatically speaks to a whole world of other apps... spreads narrow, traffic and liquidity picks up.

Again, you come with abstraction. I love engineering, I work on this ideea. These details makes the difference between a concept that works and one that not. The devil is in the implementation details.

This is not the level at which to address this problem... you will need to build your own market and economy, where you are efficient enough to not need them. A standard can pave the way, but it is just a brick and you want to build a road...

I've heard same rhetoric before Bitcoin and before Lightning Network. Not even Satoshi believed in the ideea of Lightning Network. Still, it is here and it works pretty well.

Again, this is about a standard and getting different parties to be able to do more together by virtue of having common definitions, and thus a better understanding of the similar moving parts and how they can interact. Why do we have internet? Because someone released TCP/IP as a standard. How much productivity did the USB standard unlock?

Did you ever read the TCP/IP RFC paper from DARPA? There you can find in very fine details how to implement. Same for USB and many RFC. When Satoshi wrote the paper, he already had the implementation done. He only wrote the paper after the implementation? Why? I hope you can answer for yourself.

Back to the 1st question: Reputation. DID would be part of a solution to differentiate scammers from parties who have not yet scammed...

I do not agree. Just because you don't see how, doesn't mean can not be achieved. FIAT is also a digital form of money. Can be done atomic swap. We will have true DEX. There are many ideas that can work. For hard cash excahnge you can have physical tellers with LN PoS in small shops. Then you can have RGB on top of LN where you can mint RGB assets back by BTC. The hardest problem is to create 2WP (2 way peg) but there are many guys, including me that work on this problem and are optimistic that will work. First implementation and then paper.

PKI can be handled nicely by the existing, production-ready https://github.com/decentralized-identity/ion .   Maybe skip that part and rely on something that's already working.

Why do you need DID and why public key cryptography is not enough?

If your identifier is a public key, and you have/want to roll that key for any reason (which a few scenarios require), you would lose your whole identity attached to that identifier. DIDs allow you to have an identifier that remains stable across PKI changes, so you can durably retain it over a long period of time.

How does the normies (individual with usually just a smartphone) can become liquidity providers (PFIs)?

You would snag a DID and load up a wallet that implements the standard P2P messaging/data protocol (being defined in DIF) and use that to offer up whatever you want to exchange.

How does P2P Fiat payment transaction work in very detail?

You would request Bitcoin, for example, in exchange for USD, and a PFI would send you requirements and data you need to complete the transmission of funds, after which they would send you Bitcoin to a specified address you send via the messaging layer. The trust eval between both parties will help you know you are talking to a reputable PFI (ex: a bank presents a valid credential that it's chartered and you can check its reputation).

Bitcoin is the enemies currency. What if a PFIs is my enemy?  Where is the atomic swap or at least the escrow mechanism.

You can include a third-party signer if both Asker/Bidder agree to it, and that party can be the determining one to execute the final send.

Can you link to a discussion on the scenarios that require key rollover? i haven't found it in the DID threads i follow.
because my question would actually be why use ion/element instead of peer did?
I see an advantage of having a format for your PKI, so i wouldn't argue with using DIDs at all, just which kind.


Update status bar action colors

Closes #2550

Cf. Design

In the prototype the icon color remains unchanged when active but the color is changing here:
https://user-images.githubusercontent.com/25825387/141268383-46c256ab-d002-4063-bb57-6c7aeb1236d8.mov

In the prototype the icon color remains unchanged when active but the color is changing here:
Screen.Recording.2021-11-11.at.09.57.07.mov

I force updated the branch to fix that. Is it still visible on your machine?

I force updated the branch to fix that. Is it still visible on your machine?

Don't know what happened before but I see it now.
LGTM ✅


Make "Listen" view unconfusable with "Edit" view

Easy to mistake "Listen" view as the place to edit transcripts.

For this version, there will only be one mode: "edit mode"


Fix issue comment number

Fix #30549

How much work would it be to add a migration that fixes the counts on existing issues? Would probably be a long-running migration on big instances, right?

How much work would it be to add a migration that fixes the counts on existing issues? Would probably be a long-running migration on big instances, right?

Yes, so I don't think the migration is necessary. The number will be corrected when next comment created/updated.

Also, not sure if such a migration would be backportable at all as it would likely skip migration numbers (a design flaw in the migration system).

Yeah it's not really a requirement from me, more like a "nice to have" but likely too complicated with the migration backport to really be justified.

Willing to approve this without migration once you fix the tests :)

CI failure is related


git: new article

This is probably better under software as well. The software index.txt file can be broken down into "cosmetic" subsections later on.

This is probably better under software as well. The software index.txt file can be broken down into "cosmetic" subsections later on.

moved to the appropriate "software" directory.

Thanks! I'll handle the tiny nitpicks :P


How to handle child view click event

I have a child's point of view, this is a picture, it's big.
I'll give it a set the click event. But then the sliding event doesn't work.
I want to do is to click on the image processing click event, sliding images to slide the whole card,
Do you have what method? Thank you very much.

Any progress on this issue? I am trying to do something similar.
Currently I am trying to pass the Touch event through even if a child is blocking the container but, below code fails to trigger OnTouchListener.onTouch under FlingCardListener;
package com.***.***;

import android.content.Context;
import android.support.v4.view.MotionEventCompat;
import android.support.v7.widget.CardView;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

/**
 * Created by erdin on 012, July, 12, 07, 2015.
 */
public class SwipeCardView extends CardView {
    public SwipeCardView(Context context)
    {
        super(context);
    }

    public SwipeCardView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public SwipeCardView(Context context, AttributeSet attrs, int defStyleAttr)
    {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev)
    {
        onTouchEvent(ev);
        return false;
    }
}

I have solved the issue by download and editing some classes in repository.
On SwipeFlingAdapterView;
added following method
    public void addOnTouchListenersRecursive(ViewGroup vg)
    {
        vg.setOnTouchListener(flingCardListener);
        for(int i=0; i< vg.getChildCount(); ++i) {
            View nextChild = vg.getChildAt(i);
            if(nextChild instanceof ViewGroup) addOnTouchListenersRecursive((ViewGroup)nextChild);
            else nextChild.setOnTouchListener(flingCardListener);
        }
    }

and replaced last line of setTopView method with
addOnTouchListenersRecursive((ViewGroup) mActiveCard);

I have also modified the FlingCardListener class to have a treshold before starting the actual dragging. You can find it below.
package com.lorentzos.flingswipe;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.graphics.PointF;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.OvershootInterpolator;

/**
 * Created by dionysis_lorentzos on 5/8/14
 * for package com.lorentzos.swipecards
 * and project Swipe cards.
 * Use with caution dinausaurs might appear!
 */

public class FlingCardListener implements View.OnTouchListener {

    private static final String TAG = FlingCardListener.class.getSimpleName();
    private static final int INVALID_POINTER_ID = -1;

    private final float objectX;
    private final float objectY;
    private final int objectH;
    private final int objectW;
    private final int parentWidth;
    private final FlingListener mFlingListener;
    private final Object dataObject;
    private final float halfWidth;
    private float BASE_ROTATION_DEGREES;

    private float aPosX;
    private float aPosY;
    private float aDownTouchX;
    private float aDownTouchY;

    // The active pointer is the one currently moving our object.
    private int mActivePointerId = INVALID_POINTER_ID;
    private View frame = null;

    private final int TOUCH_ABOVE = 0;
    private final int TOUCH_BELOW = 1;
    private int touchPosition;
    private final Object obj = new Object();
    private boolean isAnimationRunning = false;
    private boolean isDragging = false;
    private float MAX_COS = (float) Math.cos(Math.toRadians(45));

    public FlingCardListener(View frame, Object itemAtPosition, FlingListener flingListener) {
        this(frame, itemAtPosition, 15f, flingListener);
    }

    public FlingCardListener(View frame, Object itemAtPosition, float rotation_degrees, FlingListener flingListener) {
        super();
        this.frame = frame;
        this.objectX = frame.getX();
        this.objectY = frame.getY();
        this.objectH = frame.getHeight();
        this.objectW = frame.getWidth();
        this.halfWidth = objectW / 2f;
        this.dataObject = itemAtPosition;
        this.parentWidth = ((ViewGroup) frame.getParent()).getWidth();
        this.BASE_ROTATION_DEGREES = rotation_degrees;
        this.mFlingListener = flingListener;

    }

    public boolean onTouch(View view, MotionEvent event) {

        switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:

                // from http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html
                // Save the ID of this pointer

                mActivePointerId = event.getPointerId(0);
                float x = 0;
                float y = 0;
                boolean success = false;
                try {
                    x = event.getX(mActivePointerId);
                    y = event.getY(mActivePointerId);
                    success = true;
                } catch (IllegalArgumentException e) {
                    Log.w(TAG, "Exception in onTouch(view, event) : " + mActivePointerId, e);
                }
                if (success) {
                    // Remember where we started
                    aDownTouchX = x;
                    aDownTouchY = y;
                    //to prevent an initial jump of the magnifier, aposX and aPosY must
                    //have the values from the magnifier frame
                    if (aPosX == 0) {
                        aPosX = frame.getX();
                    }
                    if (aPosY == 0) {
                        aPosY = frame.getY();
                    }

                    if (y < objectH / 2) {
                        touchPosition = TOUCH_ABOVE;
                    } else {
                        touchPosition = TOUCH_BELOW;
                    }
                }

                view.getParent().requestDisallowInterceptTouchEvent(true);
                break;

            case MotionEvent.ACTION_UP:
                mActivePointerId = INVALID_POINTER_ID;
                resetCardViewOnStack();
                view.getParent().requestDisallowInterceptTouchEvent(false);
                isDragging = false;
                break;

            case MotionEvent.ACTION_POINTER_DOWN:
                break;

            case MotionEvent.ACTION_POINTER_UP:
                // Extract the index of the pointer that left the touch sensor
                final int pointerIndex = (event.getAction() &
                        MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
                final int pointerId = event.getPointerId(pointerIndex);
                if (pointerId == mActivePointerId) {
                    // This was our active pointer going up. Choose a new
                    // active pointer and adjust accordingly.
                    final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
                    mActivePointerId = event.getPointerId(newPointerIndex);
                }
                isDragging = false;
                break;
            case MotionEvent.ACTION_MOVE:

                // Find the index of the active pointer and fetch its position
                final int pointerIndexMove = event.findPointerIndex(mActivePointerId);
                final float xMove = event.getX(pointerIndexMove);
                final float yMove = event.getY(pointerIndexMove);

                //from http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html
                // Calculate the distance moved
                final float dx = xMove - aDownTouchX;
                final float dy = yMove - aDownTouchY;

                if(Math.abs(dx) > objectW * 0.1f || Math.abs(dy) > objectH * 0.1f || isDragging)
                {
                    Log.d(TAG, "Scrolling: " + dx + ":" + dy);

                    isDragging = true;

                    // Move the frame
                    aPosX += dx;
                    aPosY += dy;

                    // calculate the rotation degrees
                    float distobjectX = aPosX - objectX;
                    float rotation = BASE_ROTATION_DEGREES * 2.f * distobjectX / parentWidth;
                    if (touchPosition == TOUCH_BELOW)
                    {
                        rotation = -rotation;
                    }

                    //in this area would be code for doing something with the view as the frame moves.
                    frame.setX(aPosX);
                    frame.setY(aPosY);
                    frame.setRotation(rotation);
                    mFlingListener.onScroll(getScrollProgressPercent());
                }
                else Log.d(TAG, "Ignored: " + dx + ":" + dy);
                break;

            case MotionEvent.ACTION_CANCEL: {
                mActivePointerId = INVALID_POINTER_ID;
                view.getParent().requestDisallowInterceptTouchEvent(false);
                isDragging = false;
                break;
            }
        }

        return false;
    }

    private float getScrollProgressPercent() {
        if (movedBeyondLeftBorder()) {
            return -1f;
        } else if (movedBeyondRightBorder()) {
            return 1f;
        } else {
            float zeroToOneValue = (aPosX + halfWidth - leftBorder()) / (rightBorder() - leftBorder());
            return zeroToOneValue * 2f - 1f;
        }
    }

    private boolean resetCardViewOnStack() {
        if (movedBeyondLeftBorder()) {
            // Left Swipe
            onSelected(true, getExitPoint(-objectW), 100);
            mFlingListener.onScroll(-1.0f);
        } else if (movedBeyondRightBorder()) {
            // Right Swipe
            onSelected(false, getExitPoint(parentWidth), 100);
            mFlingListener.onScroll(1.0f);
        } else {
            float abslMoveDistance = Math.abs(aPosX - objectX);
            aPosX = 0;
            aPosY = 0;
            aDownTouchX = 0;
            aDownTouchY = 0;
            frame.animate()
                    .setDuration(200)
                    .setInterpolator(new OvershootInterpolator(1.5f))
                    .x(objectX)
                    .y(objectY)
                    .rotation(0);
            mFlingListener.onScroll(0.0f);
            if (abslMoveDistance < 4.0) {
                mFlingListener.onClick(dataObject);
            }
        }
        return false;
    }

    private boolean movedBeyondLeftBorder() {
        return aPosX + halfWidth < leftBorder();
    }

    private boolean movedBeyondRightBorder() {
        return aPosX + halfWidth > rightBorder();
    }

    public float leftBorder() {
        return parentWidth / 4.f;
    }

    public float rightBorder() {
        return 3 * parentWidth / 4.f;
    }

    public void onSelected(final boolean isLeft,
                           float exitY, long duration) {

        isAnimationRunning = true;
        float exitX;
        if (isLeft) {
            exitX = -objectW - getRotationWidthOffset();
        } else {
            exitX = parentWidth + getRotationWidthOffset();
        }

        this.frame.animate()
                .setDuration(duration)
                .setInterpolator(new AccelerateInterpolator())
                .x(exitX)
                .y(exitY)
                .setListener(new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        if (isLeft) {
                            mFlingListener.onCardExited();
                            mFlingListener.leftExit(dataObject);
                        } else {
                            mFlingListener.onCardExited();
                            mFlingListener.rightExit(dataObject);
                        }
                        isAnimationRunning = false;
                    }
                })
                .rotation(getExitRotation(isLeft));
    }

    /**
     * Starts a default left exit animation.
     */
    public void selectLeft() {
        if (!isAnimationRunning)
            onSelected(true, objectY, 200);
    }

    /**
     * Starts a default right exit animation.
     */
    public void selectRight() {
        if (!isAnimationRunning)
            onSelected(false, objectY, 200);
    }

    private float getExitPoint(int exitXPoint) {
        float[] x = new float[2];
        x[0] = objectX;
        x[1] = aPosX;

        float[] y = new float[2];
        y[0] = objectY;
        y[1] = aPosY;

        LinearRegression regression = new LinearRegression(x, y);

        //Your typical y = ax+b linear regression
        return (float) regression.slope() * exitXPoint + (float) regression.intercept();
    }

    private float getExitRotation(boolean isLeft) {
        float rotation = BASE_ROTATION_DEGREES * 2.f * (parentWidth - objectX) / parentWidth;
        if (touchPosition == TOUCH_BELOW) {
            rotation = -rotation;
        }
        if (isLeft) {
            rotation = -rotation;
        }
        return rotation;
    }

    /**
     * When the object rotates it's width becomes bigger.
     * The maximum width is at 45 degrees.
     * <p/>
     * The below method calculates the width offset of the rotation.
     */
    private float getRotationWidthOffset() {
        return objectW / MAX_COS - objectW;
    }

    public void setRotationDegrees(float degrees) {
        this.BASE_ROTATION_DEGREES = degrees;
    }

    public boolean isTouching() {
        return this.mActivePointerId != INVALID_POINTER_ID;
    }

    public PointF getLastPoint() {
        return new PointF(this.aPosX, this.aPosY);
    }

    protected interface FlingListener {
        void onCardExited();

        void leftExit(Object dataObject);

        void rightExit(Object dataObject);

        void onClick(Object dataObject);

        void onScroll(float scrollProgressPercent);
    }

}

@Nidre why not send a PR?

@hy9be  I haven't really done any optimizations and tested this code thoroughly. I have already many changes after that. But I could push those changes. I haven't really contributed to anyoneelses repo before. Do you know guide that would explain how create a pull request? I would be happy to send one.

Got it.
For PR, just do a fork and then follow the instruction here: https://help.github.com/articles/creating-a-pull-request/

Cool. I will take a look into it when I'm free. I have done some customizations with animations and other systems in my own codebase. Might take while to pick stuff that is relevant only for this library. But will definitely try to create a PR as soon as I can.

Cool man.

@Diolor Do you think this is a valid fix?

that's great!
I met some problems , When I gave childview set the click event is invalid.
but can handle all click event at OnItemClicked.
it looks fine.thank you!

Will close this thread for the sake of #169 . It's implemented on v2.0


Implements Bifunctor.Traversable Phase 1 (Tupling)

@masaeedu I'm not sure if this belongs here, cofree-bot, or somewhere else.


label = self.cat2label[name] KeyError: 'w', 'w' wasn't my class name

Thanks for your error report and we appreciate it a lot.
Checklist

I have searched related issues but cannot get the expected help.
The bug has not been fixed in the latest version.

Describe the bug
Recently when I trained the model, I met with the error: label = self.cat2label[name] KeyError: 'grain', 'grain' is my class name. I followed the solution of https://github.com/open-mmlab/mmdetection/issues/283 to modify CLASSES = ('.....') to CLASSES = ('grain',) in voc.py, and it can train successfully, but when I use the command of 'python tools/test.py configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py /home/drl/workspace/mmdetection-1.1.0-for-grain/output/latest.pth --eval mAP' to see the mAP value, I met the error: label = self.cat2label[name] KeyError: 'w', I don't know how to do, please help me.
Reproduction

What command or script did you run?

python tools/test.py configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py /home/drl/workspace/mmdetection-1.1.0-for-grain/output/latest.pth --eval mAP

Did you make any modifications on the code or config? Did you understand what you have modified? Yes
What dataset did you use?

Environment

Please run python mmdet/utils/collect_env.py to collect necessary environment infomation and paste it here.
sys.platform: linux
Python: 3.6.10 |Anaconda, Inc.| (default, May  8 2020, 02:54:21) [GCC 7.3.0]
CUDA available: True
CUDA_HOME: /usr/local/cuda-9.0
NVCC: Cuda compilation tools, release 9.0, V9.0.176
GPU 0: GeForce GTX 1080 Ti
GCC: gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
PyTorch: 1.1.0
PyTorch compiling details: PyTorch built with:

GCC 4.9
Intel(R) Math Kernel Library Version 2020.0.1 Product Build 20200208 for Intel(R) 64 architecture applications
Intel(R) MKL-DNN v0.18.1 (Git Hash 7de7e5d02bf687f971e7668963649728356e0c20)
OpenMP 201307 (a.k.a. OpenMP 4.0)
NNPACK is enabled
CUDA Runtime 9.0
NVCC architecture flags: -gencode;arch=compute_35,code=sm_35;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_70,code=sm_70;-gencode;arch=compute_50,code=compute_50
CuDNN 7.5.1
Magma 2.5.0
Build settings: BLAS=MKL, BUILD_TYPE=Release, CXX_FLAGS=  -Wno-deprecated -fvisibility-inlines-hidden -fopenmp -O2 -fPIC -Wno-narrowing -Wall -Wextra -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -Wno-unused-result -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=deprecated-declarations -Wno-error=pedantic -Wno-error=redundant-decls -Wno-error=old-style-cast -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math, DISABLE_NUMA=1, PERF_WITH_AVX=1, PERF_WITH_AVX2=1, USE_CUDA=True, USE_EXCEPTION_PTR=1, USE_GFLAGS=OFF, USE_GLOG=OFF, USE_MKL=ON, USE_MKLDNN=ON, USE_MPI=OFF, USE_NCCL=True, USE_NNPACK=True, USE_OPENMP=ON,

TorchVision: 0.3.0
OpenCV: 4.2.0
MMCV: 0.5.9
MMDetection: 1.1.0+unknown
MMDetection Compiler: GCC 5.4
MMDetection CUDA Compiler: 9.0

You may add addition that may be helpful for locating the problem, such as

How you installed PyTorch [e.g., pip, conda, source]
conda install pytorch torchvision cudatoolkit=9.0 -c pytorch
Other environment variables that may be related (such as $PATH, $LD_LIBRARY_PATH, $PYTHONPATH, etc.) No

Error traceback
(mm) drl@drl-Precision:~/workspace/mmdetection-1.1.0-for-grain$ python tools/test.py configs/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712.py /home/drl/workspace/mmdetection-1.1.0-for-grain/output/latest.pth --eval mAP
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 160/160, 21.3 task/s, elapsed: 8s, ETA:     0sTraceback (most recent call last):
  File "tools/test.py", line 316, in <module>
    main()
  File "tools/test.py", line 312, in main
    dataset.evaluate(outputs, args.eval, **kwargs)
  File "/home/drl/workspace/mmdetection-1.1.0-for-grain/mmdet/datasets/voc.py", line 33, in evaluate
    annotations = [self.get_ann_info(i) for i in range(len(self))]
  File "/home/drl/workspace/mmdetection-1.1.0-for-grain/mmdet/datasets/voc.py", line 33, in <listcomp>
    annotations = [self.get_ann_info(i) for i in range(len(self))]
  File "/home/drl/workspace/mmdetection-1.1.0-for-grain/mmdet/datasets/xml_style.py", line 47, in get_ann_info
    label = self.cat2label[name]
KeyError: 'w'

Bug fix
If you have already identified the reason, you can provide the information here. If you are willing to create a PR to fix it, please also leave a comment here and that would be much appreciated!

The solution is out-of-date. To use customized classes, you can refer to this tutorial

@hellock @ZwwWayne I haven't solved my question, why did you close this issue? could you please help me how to solve it?

The solution is out-of-date. To use customized classes, you can refer to this tutorial


Be explicit about the daily funding rate

The API contract states that the value supplied here is the daily
funding rate. We make this clear by renaming the variable but apply
#[serde(rename] to avoid breaking the API.

bors r+


Defunct ssh processes and CPU load are kept after executing powershell through ssh on linux

Steps to reproduce
Setup powershell ssh on linux system using the following guide: https://docs.microsoft.com/en-us/powershell/scripting/learn/remoting/ssh-remoting-in-powershell-core?view=powershell-7
On the host machine (debian 10) execute the following command.
Invoke-Command -ScriptBlock {return "kaas";} -SSHTransport -HostName ps@localhost -KeyFilePath /home/ps/.ssh/id_rsa

Expected behavior
No defunct processes from SSH on the machine executing PowerShell.
Actual behavior
Each execution of the PowerShell script leaves a defunct ssh process. See example of 'ps aux' below.
On the parent process there remains a CPU load which is unexpected for a server application. This becomes a major issue with a large amount defunct processes which seems to stack the CPU load on the parent process.
root@<machine>:/app# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   3880  1504 ?        Ss   09:34   0:00 /bin/bash /entrypoint.sh
root        21  0.1  1.1 3794740 70496 ?       Sl   09:34   0:02 dotnet <dll>
root        81  0.0  0.0   4012  3116 pts/0    Ss   09:35   0:00 bash
root       338  0.0  0.0   4012  3196 pts/1    Ss   09:39   0:00 bash
root      1201  0.0  0.4 2968504 27624 pts/0   Sl+  09:53   0:00 pwsh
root      1209  1.9  2.0 4157756 125756 pts/0  Sl+  09:53   0:04 dotnet /root/.dotnet/tools/.store/powershell/7.0.3/powershe
root      1240  0.0  0.0      0     0 pts/0    Z+   09:53   0:00 [ssh] <defunct>
root      1247  0.0  0.0      0     0 pts/0    Z+   09:53   0:00 [ssh] <defunct>
root      1253  0.0  0.0      0     0 pts/0    Z+   09:53   0:00 [ssh] <defunct>
root      1267  0.0  0.0      0     0 pts/0    Z+   09:53   0:00 [ssh] <defunct>
root      1274  0.0  0.0      0     0 pts/0    Z+   09:53   0:00 [ssh] <defunct>
root      1373  0.3  0.0      0     0 pts/0    Z+   09:57   0:00 [ssh] <defunct>
root      1377  0.0  0.0   7652  2684 pts/1    R+   09:57   0:00 ps aux

Environment data

Host machine:
Name                           Value
----                           -----
PSVersion                      7.0.3
PSEdition                      Core
GitCommitId                    7.0.3
OS                             Linux 4.19.104-microsoft-standard #1 SMP Wed Feb 19 06:37:35 UTC 2020
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           <IP_ADDRESS>
WSManStackVersion              3.0

Target machine:
Name                           Value
----                           -----
PSVersion                      7.0.3
PSEdition                      Core
GitCommitId                    7.0.3
OS                             Linux 4.19.104-microsoft-standard #1 SMP Wed Feb 19 06:37:35 UTC 2020
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           <IP_ADDRESS>
WSManStackVersion              3.0

The configuration is that this is a Docker container (host) running a sidecar container (target).
The used image for the host is: 'mcr.microsoft.com/dotnet/core/aspnet:3.1'
The used image for the target is 'mcr.microsoft.com/powershell'

Quoted from https://askubuntu.com/questions/201303/what-is-a-defunct-process-and-why-doesnt-it-get-killed

"defunct" means the process has either completed its task or has been corrupted or killed, but its child processes are still running or these parent process is monitoring its child process.

Processes marked  are dead processes (so-called "zombies") that remain because their parent has not destroyed them properly.

/cc @PaulHigin for insights.

I suspect this is due to the way we create the SSH client process to ignore the termination signal (SIG_IGN):
https://github.com/PowerShell/PowerShell/blob/master/src/System.Management.Automation/engine/remoting/common/RunspaceConnectionInfo.cs#L2220
This was done so that a 'Ctrl+C' keyboard command during a remote session does not terminate the SSH client process (and thus the remote connection), but instead is passed on through the PSRP protocol to stop a running remote command, as expected.
These defunct SSH processes are terminated when the parent pwsh process is terminated.  So that is a (not very satisfactory) workaround.
But I am not enough of a Linux expert to know the right way to have PowerShell ensure the process is terminated, on remote connection close.  Perhaps someone in the community would know?

I found the following from the wiki Zombie process

defunct process is a process that has completed execution (via the exit system call) but still has an entry in the process table: it is a process in the "Terminated state". This occurs for the child processes, where the entry is still needed to allow the parent process to read its child's exit status: once the exit status is read via the wait system call, the zombie's entry is removed from the process table and it is said to be "reaped".

I think we probably just need to call waitpid after the ssh process is terminated. An example from the wiki:
int main(void)

{
  pid_t pids[10];
  int i;

for (i = 9; i >= 0; --i) {
    pids[i] = fork();
    if (pids[i] == 0) {
        printf("Child%d\n",i);
        sleep(i+1);
        _exit(0);
    }
}

for (i = 9; i >= 0; --i){
    printf("parent%d\n",i);
    waitpid(pids[i], NULL, 0);
    }
return 0;
}

We can experiment with this.  I am concerned about calling a blocking function.  Since the child process is created without SIG_IGN, I don't know if it will respond to the call, and I hope we don't end up with a hang.  I just don't know enough about Linux processes, but we can see what works.

Hi guys, any update on this ticket?

I'm experiencing the same issue, any update?

We are facing the same issue, PowerShell leaves defunct ssh processes after the connection is closed. We are working on implementing PowerShell remoting over SSH, without SSH (https://blog.devolutions.net/2020/07/powershell-remoting-over-ssh-without-ssh) with a drop-in replacement for the 'ssh' executable. We originally thought this was limited to our custom way of doing it, until we figured out that the real PowerShell remoting over SSH with the OpenSSH client exhibited the same symptoms.

I found more information about the Ctrl+C / SIGINT behaviour in a regular SSH session here: https://goteleport.com/blog/ssh-client-signal-handling/
It appears to me that in a regular OpenSSH session, the client does not ignore but forwards the signals to the remote host. This effectively means the OpenSSH client does not process the signal for itself, I tried doing Ctrl+C multiple times locally and it wouldn't kill the OpenSSH client. This appears to be close to the approach taken by PowerShell: it spawns the OpenSSH client process but makes it ignore the signals so the PowerShell client can forward them over PSRP to the remote host.
The main issue I see with the current code is that the defunct ssh processes remain until the parent process (pwsh) is killed. This can be very problematic when spawning multiple PowerShell sessions within the same pwsh process, because you would get a defunct ssh process for each.
Other people have suggested calling waitpid, which is normally a blocking call. There is a WNOHANG flag that can be passed to waitpid, but we'd have to look into how portable this flag is (is it only with a Linux glibc?).
In all cases, I think attempts to fix this would need to be added in the part of code called when the PowerShell remoting session is freed. Can anybody point to where that would be? The code creating the ssh process is easy to find, but it is not so clear to me where the code freeing the PowerShell remoting session for SSH is being called. The goal would be to call some cleanup code at that point in time where we are sure that the ssh process should either be cleaned up if defunct, or force killed if still there.
This procedure would attempt the following, in order:

waitpid + WNOHANG for a defunct process
force kill process (SIGKILL) if process is "alive"

Force killing the process is obvious the last resort, but it shouldn't happen under normal circumstances, it's just there to ensure we clean up the process in all possible cases. Most of the time, we would just find the defunct process and clean it up by calling waitpid.

The code already tries to terminate the SSH client process on remote session termination (and other error conditions).  We need to investigate why that isn't happening, but I know that .NET 'System.Diagnostics.Process' does not always work the same over different platforms.
https://github.com/PowerShell/PowerShell/blob/master/src/System.Management.Automation/engine/remoting/fanin/OutOfProcTransportManager.cs#L1654
The fact that terminating the parent pwsh process terminates the SSH client process mitigates this somewhat.

I verified that the clean up code does run.  However, the issue is not terminating the SSH process, it is terminated, but the fact that it still exists as a 'zombie' process to the parent process as @daxian-dbw  describes above.  We can try using waitpid during clean up as Dongbo suggests above, but again my concern with that is hanging PowerShell during the wait.

@PaulHigin waitpid + the WNOHANG flag should make the call non-blocking. I think this flag may be Linux-specific, but it can't hurt to try it out. Here is an example: https://stackoverflow.com/a/7255053

After looking a bit into this, it seems like OutOfProcTransportManager (and therefore RunspaceConnectionInfo) uses its own implementation of fork/exec in libpsl for spawning SSH instead of using System.Diagnostics.Process. I'm not sure why it's done this way so could someone chime in?
Regardless, the easiest fix for this would be to fix System.Diagnostics.Process.WaitForExit() to call waitpid() for unmanaged processes, and then calling WaitForExit() after killing SSH.

After looking a bit into this, it seems like OutOfProcTransportManager (and therefore RunspaceConnectionInfo) uses its own implementation of fork/exec in libpsl for spawning SSH instead of using System.Diagnostics.Process. I'm not sure why it's done this way so could someone chime in?
Regardless, the easiest fix for this would be to fix System.Diagnostics.Process.WaitForExit() to call waitpid() for unmanaged processes, and then calling WaitForExit() after killing SSH.

The custom fork/exec was added to modify the 'Ctrl+C' sigint, which interferes with PowerShell remoting.  .NET team declined to support it so it had to be added as custom.
I am not optimistic that .NET will accept a change like this for WaitForExit(), but it may be worth a try.  Otherwise more custom code will have to be added.

The custom fork/exec was added to modify the 'Ctrl+C' sigint, which interferes with PowerShell remoting.  .NET team declined to support it so it had to be added as custom.
I am not optimistic that .NET will accept a change like this for WaitForExit(), but it may be worth a try.  Otherwise more custom code will have to be added.

waitpid() is safe for nonchild processes, and it's arguable that WaitForExit() reaping unmanaged children is actually what we want. Another solution is to add waitpid() to libpsl and call it ourselves.
In any case, this is a behavior I need to fix so I can help with making a patch.

waitpid() is safe for nonchild processes, and it's arguable that WaitForExit() reaping unmanaged children is actually what we want. Another solution is to add waitpid() to libpsl and call it ourselves.
In any case, this is a behavior I need to fix so I can help with making a patch.

@adityamandaleeka  This is still an issue with 7.2:

41 root      0:00 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups
124 scriptin  0:17 [pwsh]
326 scriptin  0:15 [pwsh]
531 scriptin  0:17 [pwsh]
743 scriptin  0:16 [pwsh]
946 scriptin  0:16 [pwsh]
1154 scriptin  0:16 [pwsh]
1361 scriptin  0:17 [pwsh]
1571 scriptin  0:16 [pwsh]
1775 scriptin  0:17 [pwsh]
1983 scriptin  0:16 [pwsh]

The use case is creating a Runspace via SSH. I'm available on Teams for details if needed.

@et1975 Can you share ps aux output?

I can't reproduce the issue with manual runspace creation.
I used the following script:
PS > $ssh=[System.Management.Automation.Runspaces.SSHConnectionInfo]::new($null, "*****", $null)
PS > $rs=[runspacefactory]::CreateRunspace($ssh)
PS > $rs.Open()
PS > $ps=[powershell]::Create($rs)
PS > $ps.Commands.AddCommand("uname").AddArgument("-a")

Commands
--------
{uname}

PS > $ps.Invoke()
Linux *****
PS > $ps.Dispose()
PS > $rs.Close()

After the runspace is closed I couldn't see any zombie processes on either side of the connection.

Intersting, this is more or less what I'm doing as well, but I'm using this workaround: https://github.com/PowerShell/PowerShell/issues/15641
I'm also calling Dispose() instead of Close() on the Runspace.

PID   USER     TIME  COMMAND
1 root      1:09 /opt/agent/Agent
41 root      0:00 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups
124 scriptin  0:17 [pwsh]
326 scriptin  0:15 [pwsh]
531 scriptin  0:17 [pwsh]
743 scriptin  0:16 [pwsh]
946 scriptin  0:16 [pwsh]
1154 scriptin  0:16 [pwsh]
1361 scriptin  0:17 [pwsh]
1571 scriptin  0:16 [pwsh]
1775 scriptin  0:17 [pwsh]
1983 scriptin  0:16 [pwsh]

This is on Alpine after 10 runs, the Agent is the one opening the runspaces.

This is on Alpine after 10 runs, the Agent is the one opening the runspaces.

If the process is still live this could be the reason. Do you see zombie processes after Agent termination?


feat: add enforceSizeThreshold in split chunks plugin

Document new option in SplitChunksPlugin

[x] Read and sign the [CLA][1]. PRs that haven't signed it won't be accepted.
[x] Make sure your PR complies with the [writer's guide][2].
[x] Review the diff carefully as sometimes this can reveal issues.
[x] Do not abandon your Pull Request: [Stale Pull Requests][3].

#3836

Thanks!


Make more icons required for iOS export per new Apple guidelines

This closes https://github.com/godotengine/godot/issues/53631.
Is 167×167 (iPad Pro) and 180×180 (iPhone @3x) required now?

Maybe we should make all icons optional and enable icons/generate_missing by default.

That sounds like a good idea. In fact, is there much of a point for disabling icons/generate_missing? If not, we could always enable it and rename the optional_icons section to icon_overrides. We'd only require setting one base icon (with the largest size).

Should we merge this PR, or implement this instead?

Superseded by #56861.


Fixed some typos in the Instant Router documentation

Thanks. I'll merge this and then I'm gonna add the rest of the docs that are on the site to this repo as well.

Thanks. I'll merge this and then I'm gonna add the rest of the docs that are on the site to this repo as well.

:+1:


PerdidosRPG

Changes / Comments
Character sheet for PerdidosRPG by creator marcelo paschoalin, using PBTA system.
Roll20 Requests
Comments are very helpful for reviewing the code changes. Please answer the relevant questions below in your comment.

[ ] Does the pull request title have the sheet name(s)? Include each sheet name.
[ ] Is this a bug fix?
[ ] Does this add functional enhancements (new features or extending existing features) ?
[ ] Does this add or change functional aesthetics (such as layout or color scheme) ?
[ ] If changing or removing attributes, what steps have you taken, if any, to preserve player data ?
[x] If this is a new sheet, did you follow Building Character Sheets standards ?

If you do not know English. Please leave a comment in your native language.

Hi @Dimi2102 a couple things here need fixing and then we can talk about getting it merged in. Take a look at https://wiki.roll20.net/Building_Character_Sheets#Sheet_Structure for more detailed info.
but at first glance:
1)It needs to be in a folder that has the game name so 'PerdidiosRPG/'
2)Needs a "sheet.json" not a "Perdidos.json" so it can populate in the dropdowns in Roll20
3)A preview image of what the sheet looks like.

Hello! Looks like there are still a couple of problems with your Pull Request:

Please add the Perdidos.png to your PR. It does not exist in your Pull Request.
Your files do not exist in a folder. They currently exist in the root folder. Please create a "Perdidos" folder and put your files within.

Thanks!
Olivia

Hello,
Since we have been requesting changes for about a month, I am going to close this Pull Request. Please make the changes requested (seen above in the comments) to your branch and open a new Pull Request when that is completed.
Thanks!
Olivia


Numba 0.54.0 rc1 llvmlite 0.37.0 RC1 Checklist

llvmlite

[x] Merge to master (when approved):

None?

[x] merge change log changes (https://github.com/numba/llvmlite/pull/738)
[x] Create 0.37 release branch
[x] Annotated tag v0.37.0rc1 on branch
[x] build on buildfarm (remember to check the "upload" box)
[x] move conda packages from numba/label/dev to numba/label/main
[x] verify conda packages uploaded to Anaconda Cloud and in main channel

Post RC:

[ ] Tag v0.38.0dev0 on master to start new cycle

Numba 0.54.0  RC1

[x] Merge to master.

[x] "remaining Pull-Requests from milestone".

[x] Merge change log changes.

[x] https://github.com/numba/numba/pull/7154

[x] Create 0.54 release branch.
[x] Pin llvmlite to >=0.37.0rc1,<0.38.0.
[x] Annotated tag 0.54.0rc1 on release branch.
[x] Build and upload conda packages on buildfarm (check "upload").
[x] Verify packages uploaded to Anaconda Cloud and move to
numba/label/main.
[x] Verify ReadTheDocs build.
[ ] Review, merge and check execution of release notebook.
[x] Post announcement to discourse group.
[x] Post link to Twitter.
[x] Post link to EveryoneSocial
[ ] Post link to<EMAIL_ADDRESS>
Post Release:

[ ] Tag 0.55.0dev0 to start new development cycle on master.
[ ] Update llvmlite dependency spec to match next version via PR to master.
[ ] Update release checklist template with any additional bullet points that
may have arisen during the release.
[ ] Close milestone (and then close this release issue).

Q: not sure it makes sense to post about an RC on python-announce, maybe only for the final, don't want to flood peoples inboxes with noisy RC announcements. Anyone else have an opinion?

i also think we should only post once we have the final to  not spam python-announce

i also think we should only post once we have the final to not spam python-announce

OK, I have removed that task from the list above.

i also think we should only post once we have the final to not spam python-announce

OK, I have removed that task from the list above.

Does this need also patching out of the issue template?

i also think we should only post once we have the final to not spam python-announce

OK, I have removed that task from the list above.

Does this need also patching out of the issue template?

https://github.com/numba/numba/pull/7197

To close this checklist I have created two additional PRs:
https://github.com/numba/numba/pull/7219
And:
https://github.com/numba/numba/pull/7220
And the milestone is almost empty (only this issue left):
https://github.com/numba/numba/milestone/52

All complete, closing issue now.


Improve: Prohibit the removal of nested object required fields.

version: 2.7.1
schema:
{
  version: '0.0.1',
  indexes: {
    primary: { hash: 'pk', sort: 'sk' },
  },
  models: {
    PERSON: {
      pk: { type: String, value: 'PERSON#${id}' },
      sk: { type: String, value: 'PERSON#${id}' },
      id: { type: String, generate: 'ulid', required: true },

      name: {
        type: Object,
        schema: {
          first: { type: String, required: true },
          last: { type: String },
        },
      },
    },
  },
  params: {
    timestamps: true,
    isoDates: true,
  },
}

I can remove name.first field by following command.
let result = await oneTable.getModel('PERSON').update({
    id: '01HAKE2N9KH0CWD5MHN2X9A197',
    name: {
      first: undefined,
    }
  })

https://github.com/sensedeep/dynamodb-onetable/blob/v2.7.1/src/Model.js#L1721C16-L1721C16
I think that should be edited to following condition:
(
  (op == 'put' && properties[field.name] == null) ||
  (this.getPartial() && op == 'update' && properties[field.name] === null) ||
  (!this.getPartial() && op == 'update' && properties[field.name] == null)
)

we need to make different judgments based on the partial parameter.

Did a quick add, and all the tests fail. So that isn't quite right.
The existing code says you cannot set a property explicitly to null (i.e. you want to remove it) if it is required. This is the case for both partial and non-partial settings.
To remove you should be setting name.first to null. Setting to undefined will remove if partial is false, because you are saying you want to set "name" to {}. This is removing first correctly.


[Bug]: Theme translations are lost when pulling / pushing between different themes

Please confirm that you have:

[x] Searched existing issues to see if your issue is a duplicate. (If you’ve found a duplicate issue, feel free to add additional information in a comment on it.)
[x] Reproduced the issue in the latest CLI version.

In which of these areas are you experiencing a problem?
Theme
Expected behavior
Using shopify theme pull with the published theme, followed by shopify theme push --unpublished should preserve theme translations in the new unpublished theme. This is particularly relevant for CI/CD, where an automation may pull the latest content changes from the published theme and queue up a new unpublished theme for a release.
Actual behavior
Translations are not preserved. The translations have to be manually exported while the original theme is published. Once the new theme is created the theme ID has to be replaced in the translation .csv. Then the new theme has to be published, and finally the translations need to be imported. This is error prone and makes CI/CD using a blue-green deployment strategy impossible.
Verbose output
n/a
Reproduction steps

Use shopify theme pull to pull the published theme
Merge a branch that contains a new feature you want to release
Run shopify theme push --unpublished to create a new on-deck theme with your new feature, while preserving the previously published theme so you can roll back etc.
See that translations are not carried over from the live theme to the new theme

Operating System
Mac OS Ventura
Shopify CLI version (check your project's package.json if you're not sure)
All
Shell
No response
Node version (run node -v if you're not sure)
No response
What language and version are you using in your application?
No response

Hi @karreiro,
Thanks for the quick reply. The issue is specifically for user-provided translations of theme sections. As I understand it, those translations are stored in the same place in Shopify Admin (Settings > Languages) regardless of whether you use a CSV, or an app such as Translate & Adapt to mange them.
While those translations are attached to a specific theme instance via theme ID, when you manually duplicate a theme in Shopify Admin (... context menu > Duplicate), translations are carried over to the new theme.
Perhaps there could be a flag on the push command to facilitate this? It could allow you to pass a theme ID for a translation source, or use the published theme as the source. Something like:
shopify theme push --unpublished --copy-translations

or
shopify theme push --unpublished --copy-translations <source theme id>


pillow9.4.0

Type: Incorrect
Summary:
pillow9.4.0
Details:
Correcting Declared License to HPND
Resolution:
https://github.com/python-pillow/Pillow/blob/9.4.0/LICENSE
Affected definitions:

pillow 9.4.0

Cancelling. Duplicate.


SASS version of normalize.css

This pull request adds a SASS version of normalize.css, I needed something like this in the past for my web projects so I thought I'd create one and add it for anyone to use on the official Github repo of normalize.css.

Pls unsubscribe me
Sent from my iPhone
On 15 Nov 2020, at 4:18 AM, JOHN F<EMAIL_ADDRESS>wrote:

This pull request adds a SASS version of normalize.css, I needed something like this in the past for my web projects so I thought I'd create one and add it for anyone to use on the official Github repo of normalize.css.

You can view, comment on, or merge this pull request online at:
https://github.com/necolas/normalize.css/pull/846
Commit Summary

Create normalize.scss
Update normalize.scss
Update normalize.scss
Adding more sass
Merge pull request #1 from JohnFromme/scss

File Changes

A normalize.scsshttps://github.com/necolas/normalize.css/pull/846/files#diff-366ad771c6f0e0b6900864b3859e3bdb22b56d7ccae2d7b9345eea736e293f00 (455)

Patch Links:

https://github.com/necolas/normalize.css/pull/846.patch
https://github.com/necolas/normalize.css/pull/846.diff

—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHubhttps://github.com/necolas/normalize.css/pull/846, or unsubscribehttps://github.com/notifications/unsubscribe-auth/APNYIF2QYCHEIJIUXPKMOQLSP3QYLANCNFSM4TVXXQHQ.

Please search existing issues and PRs before submitting a new one. You're not the first one to try to get this added, and it's been denied every time.
Here are links to prior PRs which in turn have links to all the rest of the similar PRs: #240 #340 #557
... as well as an issue: #645


License?

This looks like an awesome project. Really cool.
How are y'all thinking about licensing it?

Thanks, @jdenen and thank you for bringing up the license. We are working on adding that now and are leaning towards the MIT License.


Update and fix Serbian localization

Updated some old strings, added new ones
Renamed to sr (there really is no need for sr-rRs code, especially since Serbian is not official only in Serbia)

thanks!


Added Layout Change Notification

Related Issue
Fixed #4835
Description

Added layout change notification such that if ACRView is used inside UITableView, the view would know that the row has changed.

How Verified
How you verified the fix, including one or all of the following:

The notification already exists, so checked that notification are sent when there are layout changes with all existing Input cards.
Run the existing relevant test cards.

Microsoft Reviewers: Open in CodeFlow

/azp run


Bag

When adapting slide shows is not true, and it can be seen of the other slide (shown on the screen, right side)
https://yadi.sk/i/QMjm7rN9ovPAf

I'm not sure I understand. I will need a live example.
Cheers.


Prevent double compile on nuxt.config.js update

https://github.com/nuxt/nuxt.js/pull/2190
Earlier I thought that the double compilation is due to the compiler.watch. I made a mistake. This makes "webpack-dev-middleware", because when builder.build() started, it still works.
I add unwatch for old builder.

Codecov Report

Merging #2199 into dev will increase coverage by 0.01%.
The diff coverage is 100%.

@@            Coverage Diff             @@
##              dev    #2199      +/-   ##
==========================================
+ Coverage   98.04%   98.05%   +0.01%
==========================================
  Files          15       15
  Lines         972      978       +6
==========================================
+ Hits          953      959       +6
  Misses         19       19

Impacted Files
Coverage Δ

lib/builder/builder.js
98.97% <100%> (+0.03%)
:arrow_up:

Continue to review full report at Codecov.

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


Support new Elasticsearch "composable" index template format

Is your feature request related to a problem? Please describe.
I am using the logging operator (helm chart) version 3.17.7 with the Elasticsearch output plugin for Fluentd. It would seem that it uses the deprecated Elastic legacy index template rather than the newer composable index templates.
The problem is that I have is that it does not appear to be possible to configure the logging operator to use the newer composable index templates.
I've written this as a feature request because I am able to use the logging operator with legacy templates fine, so this isn't a bug. However legacy templates are deprecated so a way of using the composable templates is desirable.
Although the plugin supports a use_legacy_template switch this does not appear to be recognised by the CRD io.banzaicloud.logging.v1beta1.ClusterOutput.spec.elasticsearch (it's documented in the plugin but not on the logging operator plugin page).
There is a warning output to the fluentd log about the deprecation
fluentd warning: 299 Elasticsearch-7.13.2-4d960a0733be83dd2543ca018aa4ddc42e956800 "Legacy index templates are deprecated in favor of composable templates."

Describe the solution you'd like
I would like to be able to add use_legacy_template: false to the Elasticsearch output spec so that the plugin works with composable index templates.
Describe alternatives you've considered
I did try to add use_legacy_template: false to a clusterOutput spec anyway:
# clusteroutputs.logging.banzaicloud.io "elasticsearch" was not valid:
# * <nil>: Invalid value: "The edited file failed validation": ValidationError(ClusterOutput.spec.elasticsearch): unknown field "use_legacy_template" in io.banzaicloud.logging.v1beta1.ClusterOutput.spec.elasticsearch

I also manually edited the generated fluentd.conf to include this feature and this did change the plugin to use the composable templates. However I didn't follow through with a working configuration because I need to drive it from the logging operator CRD - therefore I can't comment on whether the plugin actually works with composable templates (although I expect it likely does, given that it's documented).

remove stale

Hey @johnlane
Can you please give a go to https://github.com/kube-logging/logging-operator/pull/1441? I published the docker image (based on latest master) at ghcr.io/aslafy-z/logging-operator:v4.3.0-dev.1.


⚠ Bofrost.be has degraded performance

In dc16747, Bofrost.be (https://www.bofrost.be) experienced degraded performance:

HTTP code: 200
Response time: 1397 ms

Resolved: Bofrost.be performance has improved in fd09e82.


change number of comment upon request

can you see whether it works  now? I'm sorry that i messed up a bit because the code in each steps have so many overlaps


Remove the --all machinery. Fix #26

Update the package for modifications introduces in poetry 1.5.0

Codecov Report
Patch coverage: 90.00% and project coverage change: -0.28 :warning:

Comparison is base (036a348) 96.82% compared to head (7dc2c56) 96.55%.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
Additional details and impacted files
@@            Coverage Diff             @@
##             main      #27      +/-   ##
==========================================
- Coverage   96.82%   96.55%   -0.28%
==========================================
  Files           3        3
  Lines          63       58       -5
  Branches       15       12       -3
==========================================
- Hits           61       56       -5
  Misses          1        1
  Partials        1        1

Impacted Files
Coverage Δ

sync_with_poetry/swp.py
96.42% <88.88%> (-0.30%)
:arrow_down:

sync_with_poetry/__init__.py
100.00% <100.00%> (ø)

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


Some questions

Hello,
I like the idea of mini-services using cluster. It makes my application more modular and as an added benefit I can scale out DDP traffic.
Now, I actually made a separate build process using gulp to separate my front-end from my back-end (as we have some specific requirements on how to serve the front-end).
Therefore I do not need webapp (since I do not want autoupdate etc either).
Clusters package.js specifies it needs webapp. Therefore my first question is how hard this dependency is between cluster and webapp.
My second question is how session data is handled. If I make mini services using cluster and use the accounts package is session and authentication data shared between these services?
Also,

It's hard to remove the webapp package since that's place where all the HTTP goes.
User authentication syncing is in the pipeline. It'll be available soon.
see: #14

Thanks for the fast reply!
Well my situation is somewhat specific, but to summarize:
-I have control of the browser environment of my users, and everyone has websocket support
-I must serve my application from a different server than the one running meteor.
So in this case I'd actually never need HTTP going to the meteor server except for the websocket handshake, or does this also pass through webapp?

Yes. it's also handled by webapp.
On Thu, Mar 19, 2015 at 2:34 PM sebakerckhof<EMAIL_ADDRESS>wrote:

Thanks for the fast reply!
Well my situation is somewhat specific, but to summarize:
-I have control of the browser environment of my users, and everyone has
websocket support
-I must serve my application from a different server than the one running
meteor.
So in this case I'd actually never need HTTP going to the meteor server
except for the websocket handshake, or does this also pass through webapp?
—
Reply to this email directly or view it on GitHub
https://github.com/meteorhacks/cluster/issues/31#issuecomment-83429512.

Thanks! In that case I'll just create a stripped down version of webapp, with static file serving etc thrown out.

Okay.
On Thu, Mar 19, 2015 at 2:42 PM sebakerckhof<EMAIL_ADDRESS>wrote:

Thanks! In that case I'll just create a stripped down version of webapp,
with static file serving etc thrown out.
—
Reply to this email directly or view it on GitHub
https://github.com/meteorhacks/cluster/issues/31#issuecomment-83432684.

Hey @sebakerckhof, it would be cool, if you could open source it, and describe what the benefits are.

@dropfen yeah, I've seen quite a bunch of questions on the meteor forum from people that want to separate the client-side from server-side. I'm sure I'll do a write up and probably create an atmosphere package if it makes sense. Most of the build process stuff is in place, but I'm still figuring out what's the best way to keep the development fast (so you don't have to do a build on every change).


Cannot hit breakpoints in VS Code since 1.7.0

Versions
The issue occurs with angular cli 1.7.0 onward:
I have rolled back to 1.6.8 and angular 5.1.1 to restore functionality.

Repro steps
The after the upgrade to 1.7.1, if I put a break point in a component, it either doesn't get hit, or shows a 'readonly inline' version of the code breaking in a completely different place.
Apologies that these repro steps aren't specific, but it's a rather general issue, as per other users:
https://stackoverflow.com/questions/48892311/angular-cli-1-7-0-and-visual-studio-code-cant-set-breakpoints/49006195#49006195
Observed behavior
Break point doesn't get hit or opens readonly inline file with break in wrong place:
https://stackoverflow.com/questions/48892311/angular-cli-1-7-0-and-visual-studio-code-cant-set-breakpoints/49006195#49006195
Desired behavior
Restore previously working debugging from 1.6.8

Thanks for reporting this issue. However, this issue is a duplicate of an existing issue https://github.com/angular/angular-cli/issues/9729. Please subscribe to that issue for future updates.


Update Deps to latest

:tada: This PR is included in version 1.2.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


sst console RDS not showing array values

When viewing results in the RDS page, if a column was of an Array type, that column just says null. Ideally it should show the actual value in there, or at least indicate that it is not empty.

We are transition this repo to https://github.com/sst/v2 and are closing this issue for now. If it is still relevant please reopen it there - sorry for the trouble


Upgrade deprecated libraries

Describe the feature
The following libraries have been deprecated:
Microsoft.AspNetCore.Http.Abstractions - 2.2.0
Microsoft.Net.Http.Headers version - 2.2.8

This issue should be solved prior to completing #360


It would be better if you can include the timezone info in log folder

C:\Users\clu\AppData\Local\Temp\Fusion++\2<IP_ADDRESS>.47.14.7452\Default\Everything.exe
can be convert to
C:\Users\clu\AppData\Local\Temp\Fusion++\2<IP_ADDRESS>.47.14.7452+0800\Default\Everything.exe
private const string DATE_FORMAT = "yyyy.MM.dd.HH.mm.ss.ffffzzz";
var folder=DateTime.Now.ToString(DATE_FORMAT).Replace(":", string.Empty);
Path = System.IO.Path.Combine(TopLevelPath, folder);

The following parse datetime will not work. maybe write a custom method to parse the time.
	if (DateTime.TryParseExact(result, UTC_DATE_FORMAT, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeUniversal, out DateTime date))
				result = date.ToShortDateString() + " " + date.ToLongTimeString();

Why do you want me to add the time zone to an UTC date?

In addition, this one is not releated to #16 so I'm closing it.

@awaescher The problem is the time on personal computer is not the UTC time.
The standard behavior is record the time with timezone
log4net component can record log with timezone info
<conversionPattern value="[%d{dd MMM yyyy HH:mm:ss.fff**zzz**}{GMT}] [%5level] (%identity-%username) %message%newline" />


 is crashing post Flutter roll fbabb2

https://b.corp.google.com/issues/144093523. Conversation should occur there, please.
@liyuqian is working the roll now; assigning to him.

According to @liyuqian a fix has rolled internally and we are currently waiting on verification.

Fix verified; closing.


bug: Swipe back and hide-nav-bar

Type: bug
Platform: ios all webview
I've found an issue with the new swipe back functionality when a "back" view has an ion-view with hide-nav-bar="true".  The ion-nav-bar will disappear when starting a swipe back (and stay hidden even if the swipe back gesture is not completed).
Here is a CodePen that illustrates the issue- http://codepen.io/rossmartin/pen/jEXYvz
To replicate the issue in this CodePen do the following:

Click on the Scientific Facts button.
  The ion-nav-bar disappears on the Facts view.

Let me know if there is a way to solve this without requiring the ion-nav-bar or ion-header-bar for each view.  Thanks!

Greetings @rossmartin!
My sensors indicate that you need to update your issue through our custom issue form. We are now requiring all issues to be submitted this way, to ensure that we have all of the information necessary to fix them as quickly as possible.
Click Here To Update Your Issue
I will have no choice but to close this issue if it is not resubmitted through the form. Please fill out the rest of the form, so that I may use my friendly robot powers to assist you.
Thank you!

I think I've found a variation on this issue in IOS . I'm using v1.0.0-rc.1.
When swiping right on iOS8 to navigate back to the preview view, if the gesture is not competed (i) the current view's nav bar will get the title of the back view. The nav bar loses it's controls as well.
In the absence of a fix, is there a way to disable the iOS swipe to navigate feature?

You can disable it with
$ionicConfigProvider.views.swipeBackEnabled(false);

https://github.com/driftyco/ionic/commit/0936f78c307e284da9525a56634d5b5bb416d746

In 1.0.1, I'm seeing the nav bar re-appear correctly, but the top part of the content is stuck under the nav bar after that. It looks like it needs to refresh scroll position after making the nav bar re-appear.

I am still seeing this on 1.1. The new file is definitely present in my code. Am I missing something?

I have the same issue with version 1.1.0.

I'm having the same issue with latest version... :S

I see the difference now between the original issue and mine. The nav bar itself is still there when the swipe back is started, but its content (title, buttons etc) disappear and do not reappear if the swipe movement it cancelled. @adamdbradley should i raise this as a separate issue?

I don't know whether this will help anyone else, but I was using a separate  element in each of my views. I did a bit of playing and found that by putting one  element in the top level index.html and then setting the properties with the view ( etc) this problem is solved.

This bug still exists in 1.3.0. Any workarounds?

+1 with above

I can confirm both the bug and the workaround sugested by @stianjensen, BUT I'm not using hide-nav-bar="true".
Tested on iOS 9.3 iPhone 6 both device and emulator.
Ionic v1.3.1

Hi,
I'm having a similar issue with unfinished swipeback.
The footer is hidden when I start swiping back and it doesn't shows up if I cancel.
Any way to fix this issue?
Thanks,
Artur
++++++++++++++++++++++++++++++++++++
Your system information:
Cordova CLI: 6.4.0
Ionic Framework Version: 2.0.1
Ionic CLI Version: 2.2.1
Ionic App Lib Version: 2.2.0
Ionic App Scripts Version: 1.1.4
ios-deploy version: 1.9.0
ios-sim version: Not installed
OS: macOS Sierra
Node Version: v6.9.1
Xcode version: Xcode 8.2.1 Build version 8C1002


Copy all assets (not just fonts) ?

Hi,
I just discovered the assets possibility, but it seems that it only copy fonts assets.
Why did it not copy other assets types (images, sounds, etc.) ? Is there something I did not understand ?
Thank you

Hey,
Well, you don't need to copy other assets types since you can just require them with the standard syntax, so there's no need to do anything extra.
The copyAssets part of rnpm is intended to handle special cases, like fonts (in fact, we only copy them on Android since on iOS, there's no need and we can just reference them from another location).

Ok, my problem was for launchscreen and stuff like that on ios, but I will investigate further on how to use assets that are not present in Xcode project to do so.
Thank you !

Awesome :) good luck!


Remove vendor in Makefile

Signed-off-by: Hui Kang<EMAIL_ADDRESS>

Codecov Report

Merging #245 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #245   +/-   ##
=======================================
  Coverage   73.44%   73.44%
=======================================
  Files         112      112
  Lines        6516     6516
=======================================
  Hits         4786     4786
  Misses       1489     1489
  Partials      241      241

Continue to review full report at Codecov.

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


Unified license to MIT

Proposed change to unify all license to MIT (c) Red Hat, Inc.

thanx a lot,. ok by me! (not sure if  need to wait for anyone else :)


How to get HttpServletRequest in resolvers?

I need to extract some headers from HttpServletRequest. I am trying to use DataFetchingEnvironment as a parameter in resolver method, but it gives me an error:
env.getContext<GraphQLContext>()
//java.lang.ClassCastException: graphql.GraphQLContext$Builder cannot be cast to graphql.servlet.GraphQLContext
graphql-springboot version: 5.9.0

i use 5.10.0,
// DataFetchingEnvironment dataFetchingEnvironment
dataFetchingEnvironment.getContext().getHttpServletRequest();
or
you can use spring to get HttpServletRequest
	RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
	return (HttpServletRequest) requestAttributes.resolveReference(RequestAttributes.REFERENCE_REQUEST);

dataFetchingEnvironment.getContext().getHttpServletRequest()

There is no getHttpServletRequest() method anymore: https://github.com/graphql-java-kickstart/graphql-java-servlet/releases/tag/v8.0.0
Any tips on how to use this?

Cast the context to GraphQLServletContext and grab the HttpServletRequest from there.

But the DataFetchingEnvironment contains graphql.GraphQLContext - not the graphql.servlet.context.GraphQLContext, so it cannot be casted to GraphQLServletContext

You need to update to 5.10.0 then. Otherwise the getHttpServletRequest should just be there depending on the graphql-java-servlet version you're using.

I have updated and still getting the class cast exception - my previous comment is for 5.10.0.
And for version 5.9.0 its even more strange:
java.lang.ClassCastException: graphql.GraphQLContext$Builder cannot be cast to graphql.servlet.GraphQLContext
How is it possible that there is a Builder in Context?

That's not correct. graphql-spring-boot pulls in version 8.0.0 of graphql-java-servlet, not 7.5.0. So something is overriding it. You should not be including graphql-java-servlet or graphql-java-tools yourself, but just let graphql-spring-boot pull that in. Sounds like something is pulling in incompatible versions now which is causing this.

The only dependencies i have are: graphql-spring-boot-starter, graphiql-spring-boot-starter and graphql-spring-boot-starter-test.
If I specify the 5.9.0 version - it pulls 7.5.0 graphql-java-servlet and getContext() returns graphql.GraphQLContext$Builder
If I specify 5.10.0 - it pulls 8.0.0 graphql-java-servlet and getContext() returns graphql.GraphQLContext
The problem that in both cases getContext() returns incorrect objects

5.10.0 uses graphql-java 13.0, which defines this method as follows:
<T> T getContext();

See https://github.com/graphql-java/graphql-java/blob/c454ba295f27de6e814c3a5c1af0e2b2d83cd699/src/main/java/graphql/schema/DataFetchingEnvironment.java#L73.
I'm using these versions like this without any problems in multiple projects.

I think I found the problem. I was getting these results in my Integrations tests, where i was executing queries via GraphQL.execute(executionInput) and instead of that i should have used GraphQLTestTemplate. Thanks!

I don't get how this is solved. I run into the same issue, the version I use is 6.1.3 of graphql-java-servlet under com.graphql-java and 15.0 for graphql-java. The error I got is class graphql.GraphQLContext cannot be cast to class graphql.servlet.GraphQLContext . Is that a version thing?

I don't get how this is solved. I run into the same issue, the version I use is 6.1.3 of graphql-java-servlet under com.graphql-java and 15.0 for graphql-java. The error I got is class graphql.GraphQLContext cannot be cast to class graphql.servlet.GraphQLContext . Is that a version thing?

Maybe my video on custom context will help you.
You can pull the HttpServletRequest from the context: https://www.youtube.com/watch?v=YsM2VSnWUcg

I don't get how this is solved. I run into the same issue, the version I use is 6.1.3 of graphql-java-servlet under com.graphql-java and 15.0 for graphql-java. The error I got is class graphql.GraphQLContext cannot be cast to class graphql.servlet.GraphQLContext . Is that a version thing?

Maybe my video on custom context will help you.
You can pull the HttpServletRequest from the context: https://www.youtube.com/watch?v=YsM2VSnWUcg

Thanks for the detailed video. I have referred and implemented the same to get the context from the DataFetchingEnvironment. But I am getting this error. context.CustomGraphQLContext cannot be cast to graphql.kickstart.servlet.context.DefaultGraphQLServletContext. Could you please assist me with this? Thanks.

I don't get how this is solved. I run into the same issue, the version I use is 6.1.3 of graphql-java-servlet under com.graphql-java and 15.0 for graphql-java. The error I got is class graphql.GraphQLContext cannot be cast to class graphql.servlet.GraphQLContext . Is that a version thing?

Maybe my video on custom context will help you.
You can pull the HttpServletRequest from the context: https://www.youtube.com/watch?v=YsM2VSnWUcg

Thanks for the detailed video. I have referred and implemented the same to get the context from the DataFetchingEnvironment. But I am getting this error. context.CustomGraphQLContext cannot be cast to graphql.kickstart.servlet.context.DefaultGraphQLServletContext. Could you please assist me with this? Thanks.

This issue is resolved now. I have made a mistake in the dependency list and import.

Hello,
I'm getting a similar error... @oliemansm , when trying to use your sample https://github.com/graphql-java-kickstart/samples/tree/master/subscription-with-authentication :
"message": "class graphql.servlet.GraphQLContext cannot be cast to class graphql.kickstart.servlet.context.GraphQLWebSocketContext (graphql.servlet.GraphQLContext and graphql.kickstart.servlet.context.GraphQLWebSocketContext are in unnamed module of loader 'app')"
Any idea of how to resolve it? The problem is appearing here:
GraphQLWebSocketContext context = env.getContext();
Thanks in advance !

5.10.0 uses graphql-java 13.0, which defines this method as follows:
<T> T getContext();

See https://github.com/graphql-java/graphql-java/blob/c454ba295f27de6e814c3a5c1af0e2b2d83cd699/src/main/java/graphql/schema/DataFetchingEnvironment.java#L73.
I'm using these versions like this without any problems in multiple projects.

I'm using graphQL:
```
"com.graphql-java-kickstart:graphql-spring-boot-starter:12.0.0",
"com.graphql-java-kickstart:graphql-java-tools:12.0.0",
getContext(); is deprectated, how can I retrieve HttpServletRequest from DataFetchingEnvironment

@oliemansm/ @vojtapol  Can you kindly help and provide a way to tackle this?
I'm using graphQL:
"com.graphql-java-kickstart:graphql-spring-boot-starter:12.0.0",
"com.graphql-java-kickstart:graphql-java-tools:12.0.0",
getContext(); is deprecated, how can I retrieve HttpServletRequest from DataFetchingEnvironment?
An example would surely help.

I'm having the same issue as @abhi170392
Javadoc states that getGraphQlContext() should be used instead but it can't be used in the same way as getContext(). Any example on how to retrieve HttpServletRequest would be highly appreciated.

Hello,
GraphQLContext context = env.getGraphQlContext();
var httpServelet=context.getOrEmpty(HttpServletRequest.class).orElseThrow(() -> new Exception(""));
return (HttpServletRequest) httpServelet;
this worked for me


condor_submit command

Reference Issue
Fixes #105
What does this pull request implement/fix? Explain your changes.
shlex.split() removes path separators in Windows, so isn't a suitable solution.
I propose:
command = ['condor_submit']
if submit_options is not None:
  for option in submit_options.split(' '):
    command.append(option)
command.append(self.submit_file)

proc = subprocess.Popen(command,
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE)
out, err = proc.communicate()

Any other comments?

Seems to work.
I've added it as a function to utils so we can use it without repetition in job.py and dagman.py (and potentially elsewhere in the future), and I've added a test around it.
What do you think?

I've added it as a function to utils so we can use it without repetition in job.py and dagman.py (and potentially elsewhere in the future), and I've added a test around it.

Wow, thanks so much!

I'm new to this - has that fixed it?

Yep, everything looks good to me 👍 Thanks @karlhornlund!


docsinstalled by helm-dash disappear once restart emacs

I installed some docs via helm-dash-install-docset, and use helm-dash-at-point to view. It works fine, but once I restart emacs, I cannot find any of these docs.
But I find all docs are in /home/firstlove/.emacs.d/.local/etc/docsets. So it seems helm cannot find them after restartup.

This depends on the major mode in question. What docset are you trying to install, and for what major mode?
You must declare docsets for major modes. Some modes already have this, for example:
;; from modules/lang/emacs-lisp/config.el
(set-docset! 'emacs-lisp-mode "Emacs Lisp")

Some modes do not, like javascript modes, but that can be fixed with:
(set! :docset 'js2-mode "JavaScript" "JQuery")
;; Add docsets to minor modes by starting DOCSETS with :add
(set! :docset 'rjsx-mode :add "React")
;; Or remove docsets from minor modes
(set! :docset 'nodejs-mode :remove "JQuery")

Thanks! Fixed now.


S6 [User Story] Integrate the record retrieved from queue_outbound insertion event to Active Directory

Title
Send the record retrieved from outbound_queue to Active Directory

Epic
#50

T-shirt size default is S(mall)
S

Story Points - Fibonacci (1,2,3,5)
2

User Story
As an administrator of NEXT, I want to modify Active Directory based on incoming changes in the queue_outbound, to allow both AD and NEXT to sync with each other.

Description
Send the message retrieved in #313 to Active Directory. Once Sawtooth data has been imported into outbound_queue, go through the outbound_queue to modify AD according to match data in Sawtooth blockchain.

Business Need (the why):
Changes in NEXT should be reflected in Active Directory

Acceptance Criteria/Tests
Any changes to user or group objects in NEXT will be changed within AD. If new users or groups need to be created in AD, they must have the required attribute fields first before they can be created. Any new users or group that will be created, must be unique.

[x] Build out initial feature
[ ] Merge refactored WIP from AD/AAD common functionality

Updating the estimate to 3 points as I am on day 2 of this integration. It is now creating the user, failing on db connection... Close!

Hit a few merge conflicts with the refactoring WIP that took place last week. Sorting it out.


DEV: WITSML <IP_ADDRESS> (Add To Store Failing)

When calling AddToStore for creating Log objects fails in <IP_ADDRESS> and returns the following error:
JSONObject["logData"] is not a JSONArray.

This item has been identified as a bug: Test cases have already been created is pending dev update.  Dev card created for tracking

Client has provided a screen shot of how WITSML <IP_ADDRESS> server is connected using RTC.
See email from
From: Chongwei Wan<EMAIL_ADDRESS>Sent: Monday, July 8, 2019 7:19 PM
Please Review the email and advise if this has an impact on this card and if we are still on target to complete this card  on today (7/9) as planned


fix(cli): migration of Frankfurt organizational accounts

During a migration of Frankfurt organizational accounts, we needed to
cleanup the cluster name from the account before using it as a
sub-account. This PR is adding that cleanup.
For testing purposes, add the --debug flag to see the following log
messages:
{"level":"debug","ts":"2021-06-16T11:04:24-07:00","caller":"cmd/migration.go:89","msg":"updating account settings for APIv2","old_account":"subaccount.fra","new_account":"account.fra"}
{"level":"debug","ts":"2021-06-16T11:04:24-07:00","caller":"cmd/migration.go:97","msg":"subaccount needs cleanup","subaccount":"subaccount.fra"}

JIRA: ALLY-541
Signed-off-by: Salim Afiune Maya<EMAIL_ADDRESS>

Users who have already migrated  CfgVersion is 2 will have to manually change their lacework.toml?

@dmurray-lacework Yes, unfortunately. They will have to manually change it but hey, guess what?! We have telemetry and we can identify who those users are and reach out to help them directly! 🌮🎉


v1.0.0 Production Release

1.0.0 September 23 2020

Upgraded to Akka.NET v1.3.18
Migrated all packages to .NET Standard 2.0
Switched StatsD component to use JustEat.StatsD

Phobos vs. Akka.Monitoring
In 2018 Petabridge, the makers of Akka.Monitoring, published a propreitary product for Akka.NET monitoring and tracing called Phobos.
Phobos is much more fully-featured than Akka.Monitoring, as it:

Doesn't require users to decorate their actors with any code - monitoring and tracing happens automatically;
Supports a much larger number of metric systems and types out of the box;
Includes traceability with actors, including over the network with Akka.Remote, and other parts of your system such as ASP.NET Core; and
Comes with 1 business day SLA support for Phobos and installing it into your Akka.NET applications.

That said, a Phobos license costs your company $4,000 per year.
It's the belief of Petabridge that there should be a low-cost alternative to that in order to make Akka.NET accessible to students, startups, DIY developers, and anyone who doesn't want to pay for that license. That's what Akka.Monitoring is - a simple, straightforward alternative that is free and open source. We will continue to support Akka.Monitoring and respond to end-user requests, but you should expect the majority of our development efforts to go into Phobos.
Please open an issue or contact Petabridge if you have any questions.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.4 out of 5 committers have signed the CLA.:white_check_mark: robp-technotects:white_check_mark: Horusiath:white_check_mark: izavala:white_check_mark: Aaronontheweb:x: dependabot-preview[bot]You have signed the CLA already but the status is still pending? Let us recheck it.


Feat: Owner Reference will now be checked before manifest is applied.

Currently, we create a "workObj", which we use to retrieve the actual object (resource) from the member cluster.
However, if the object was to have a different owner than work-api controller
(OwnerReference with different values than the one specified in the work controller)
(Or has a different UID)
then the object should be abandoned and logged as so.

Please rebase after the CI is checked in.


Add appVersion to DeployCommand

Goal
Allow for an optional --appVersion to be specified in DeployCommand
This allows applications/build tools that use timestamp or hash based versioning, as opposed to only supporting semVer.
Changeset
Changed
DeployCommand.php
Add $this->option('appVersion') to the Bugsnag::build call.
Tests
No tests were modified for this call.
Discussion
This PR is blocked by a PR in the bugsnag-php repository. If that PR is approved, it will also require a minimum revision of "bugsnag/bugsnag" dependency in composer.json
Alternative Approaches

Outstanding Questions

Linked issues
Bugsnag-PHP PR : Allow for optional appVersion to be passed into build function #524
Review

For the submitter, initial self-review:

[X] Commented on code changes inline explain the reasoning behind the approach
[X] Reviewed the test cases added for completeness and possible points for discussion
[ ] A changelog entry was added for the goal of this pull request
[X] Check the scope of the changeset - is everything in the diff required for the pull request?
This pull request is ready for:

[X] Initial review of the intended approach, not yet feature complete
[X] Structural review of the classes, functions, and properties modified
[ ] Final review

For the pull request reviewer(s), this changeset has been reviewed for:

[ ] Consistency across platforms for structures or concepts added or modified
[ ] Consistency between the changeset and the goal stated above
[ ] Internal consistency with the rest of the library - is there any overlap between existing interfaces and any which have been added?
[ ] Usage friction - is the proposed change in usage cumbersome or complicated?
[ ] Performance and complexity - are there any cases of unexpected O(n^3) when iterating, recursing, flat mapping, etc?
[ ] Concurrency concerns - if components are accessed asynchronously, what issues will arise
[ ] Thoroughness of added tests and any missing edge cases
[ ] Idiomatic use of the language

I needed this today.  Using the bugsnag:deploy command from a deployment script I received:

Notified Bugsnag of the build!
Bugsnag Warning: App version is not set. Unable to send build report.

Side note: this is a confusing message. It feels like

success!!
JK LOL

But back to my main point, I don't place an official version number in a config file anywhere.
I was hoping to use a timestamp in format 'YmdHis' as the version number from a deploy script. Seeing this merged would make me happy.
My only contribution here is maybe the new option appVersion  should be app-version just to be consistent with laravel's built in multi-word command options?
Thanks for the pull request!


Can't make a signed build

Throws the error while making a signed build in android studio =>
error: method onPermissionRequest(PermissionRequest) is already defined in class RNCWebChromeClient
Environment:

OS:MacOS
OS version:10.15.7
react-native version:0.63.4
react-native-webview version:11.6.1

Same issue.

I also have the same issue.
Looks like the duplicate was introduced to RNCWebViewManager.java in v11.5.0.
I thought v11.4.7 would work without issue since it does not have the duplicate but I get a different build failure on that version.

@aleppos @makenova I downgraded to version 11.3.2, it works fine for me.

Fixed in 11.6.2