Push Notifications not working after update to Firebase 4.0

I updated my pods yesterday to the new Firebase 4.0. I went through the suggested changes and grabbed code from this Github example. I installed the APNS key .p8 file from Apple. Re-Downloaded the google.plist file to my project. turned swizzling off. Replaced this examples code with my own. I will be honest I am at a loss, I take the FCM Token from the console and send a message from the firebase console and I get nothing.
I refresh and it says the message was sent but I check the xCode console and the device and nothing is there. What am I missing? Is there any way to figure out where the message is getting jammed up?

//
//  Created by Erik Grosskurth on 4/24/17.
//

import UIKit
import UserNotifications
import Firebase
import Quickblox
import QuickbloxWebRTC

let kQBApplicationID:UInt = 1234
let kQBAuthKey = "sfgsrvsrvsr"
let kQBAuthSecret = "wsevwrvwervwrv"
let kQBAccountKey = "wrvwrvwrvwrvwrvw"

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    let gcmMessageIDKey = "gcm.message_id"

    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        // [ START Quickblox config ]
        QBSettings.setApplicationID(kQBApplicationID)
        QBSettings.setAuthKey(kQBAuthKey)
        QBSettings.setAuthSecret(kQBAuthSecret)
        QBSettings.setAccountKey(kQBAccountKey)
        QBSettings.setApiEndpoint("https://apicaduceustelemed.quickblox.com", chatEndpoint: "chatcaduceustelemed.quickblox.com", forServiceZone: .production)
        QBSettings.setServiceZone(.production)
        QBSettings.setKeepAliveInterval(30)
        QBSettings.setAutoReconnectEnabled(true)
        QBRTCConfig.setStatsReportTimeInterval(1)
        QBRTCConfig.setDialingTimeInterval(5)
        QBRTCConfig.setAnswerTimeInterval(60)
        // [ END Quickblox config ]

        FirebaseApp.configure()

        // [START set_messaging_delegate]
        Messaging.messaging().delegate = self
        // [END set_messaging_delegate]
        // Register for remote notifications. This shows a permission dialog on first run, to
        // show the dialog at a more appropriate time move this registration accordingly.
        // [START register_for_notifications]
        if #available(iOS 10.0, *) {
            // For iOS 10 display notification (sent via APNS)
            UNUserNotificationCenter.current().delegate = self

            let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
            UNUserNotificationCenter.current().requestAuthorization(
                options: authOptions,
                completionHandler: {_, _ in })
        } else {
            let settings: UIUserNotificationSettings =
                UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
            application.registerUserNotificationSettings(settings)
        }

        application.registerForRemoteNotifications()

        // [END register_for_notifications]
        return true
    }

    // [START receive_message]
    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
        // If you are receiving a notification message while your app is in the background,
        // this callback will not be fired till the user taps on the notification launching the application.
        // TODO: Handle data of notification
        // With swizzling disabled you must let Messaging know about the message, for Analytics
        Messaging.messaging().appDidReceiveMessage(userInfo)
        // Print message ID.
        if let messageID = userInfo[gcmMessageIDKey] {
            print("Message ID: \(messageID)")
        }

        // Print full message.
        print(userInfo)
    }

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                     fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        // If you are receiving a notification message while your app is in the background,
        // this callback will not be fired till the user taps on the notification launching the application.
        // TODO: Handle data of notification
        // With swizzling disabled you must let Messaging know about the message, for Analytics
        Messaging.messaging().appDidReceiveMessage(userInfo)
        // Print message ID.
        if let messageID = userInfo[gcmMessageIDKey] {
            print("Message ID: \(messageID)")
        }

        // Print full message.
        print(userInfo)

        completionHandler(UIBackgroundFetchResult.newData)
    }
    // [END receive_message]
    func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
        print("Unable to register for remote notifications: \(error.localizedDescription)")
    }

    // This function is added here only for debugging purposes, and can be removed if swizzling is enabled.
    // If swizzling is disabled then this function must be implemented so that the APNs token can be paired to
    // the FCM registration token.
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        print("APNs token retrieved: \(deviceToken)")

        // With swizzling disabled you must set the APNs token here.
        Messaging.messaging().apnsToken = deviceToken
    }
}

// [START ios_10_message_handling]
@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {

    // Receive displayed notifications for iOS 10 devices.
    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                willPresent notification: UNNotification,
                                withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        let userInfo = notification.request.content.userInfo

        // With swizzling disabled you must let Messaging know about the message, for Analytics
        Messaging.messaging().appDidReceiveMessage(userInfo)
        // Print message ID.
        if let messageID = userInfo[gcmMessageIDKey] {
            print("Message ID: \(messageID)")
        }

        // Print full message.
        print(userInfo)

        // Change this to your preferred presentation option
        completionHandler([])
    }

    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                didReceive response: UNNotificationResponse,
                                withCompletionHandler completionHandler: @escaping () -> Void) {
        let userInfo = response.notification.request.content.userInfo
        // Print message ID.
        if let messageID = userInfo[gcmMessageIDKey] {
            print("Message ID: \(messageID)")
        }

        // Print full message.
        print(userInfo)

        completionHandler()
    }
}
// [END ios_10_message_handling]

extension AppDelegate : MessagingDelegate {
    // [START refresh_token]
    func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
        print("Firebase registration token: \(fcmToken)")
    }
    // [END refresh_token]
    // [START ios_10_data_message]
    // Receive data messages on iOS 10+ directly from FCM (bypassing APNs) when the app is in the foreground.
    // To enable direct data messages, you can set Messaging.messaging().shouldEstablishDirectChannel to true.
    func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {
        print("Received data message: \(remoteMessage.appData)")
    }
    // [END ios_10_data_message]
}

Hi @djErock,
Thanks for sharing your application delegate, everything looks good here. A couple of things to check though:
APNs Working?
Are you getting an APNs token? Just want to confirm that your app has been configured for APNs.
Correct GoogleService-Info.plist
Can you confirm that the GoogleService-Info.plist file you downloaded is for a matching Firebase app entry, and that BUNDLE_ID in the plist matches your app's plist, and that the .p8 file is added for that Firebase app's settings as well? I just saw this same type of issue with a developer who had downloaded a google plist for a different app in their Firebase project.
Testing in foreground?
By default, iOS shows no push notification if the app is running in the foreground. iOS 10 made it easy to allow a push notification to show even in the foreground, though. You can change the completion handler in userNotificationCenter(_:willPresent:withCompletionHandler:) from:
completionHandler([])

to
completionHandler([.alert, .badge, .sound])

Here are the logs:

2017-06-01 14:29:38.187779-0400 Telemed[2125:1076809] [Firebase/Analytics][I-ACS003016] Firebase Analytics App Delegate Proxy is disabled. To log deep link campaigns manually, call the methods in FIRAnalytics+AppDelegate.h.
2017-06-01 14:29:38.188 Telemed[2125] <Warning> [Firebase/Analytics][I-ACS003016] Firebase Analytics App Delegate Proxy is disabled. To log deep link campaigns manually, call the methods in FIRAnalytics+AppDelegate.h.
2017-06-01 14:29:38.267071-0400 Telemed[2125:1076815] [Firebase/Analytics][I-ACS005000] The AdSupport Framework is not currently linked. Some features will not function properly. Learn more at http://goo.gl/9vSsPb
2017-06-01 14:29:38.267 Telemed[2125] <Warning> [Firebase/Analytics][I-ACS005000] The AdSupport Framework is not currently linked. Some features will not function properly. Learn more at http://goo.gl/9vSsPb
2017-06-01 14:29:38.271773-0400 Telemed[2125:1076809] [Firebase/Analytics][I-ACS023007] Firebase Analytics v.4000000 started
2017-06-01 14:29:38.272 Telemed[2125] <Notice> [Firebase/Analytics][I-ACS023007] Firebase Analytics v.4000000 started
2017-06-01 14:29:38.274861-0400 Telemed[2125:1076809] [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see http://goo.gl/RfcP7r)
2017-06-01 14:29:38.275 Telemed[2125] <Notice> [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see http://goo.gl/RfcP7r)
**FCM token: euL290pzfCY:APA91bEIYldaSVz7AlgQ-nEnDh1ISC112VERT8ZgA6CTlU5NANFy7oqvz238gQ2iGJQZNwLf4ZCD-DsF2iL0YB8Qp9OEBxFRRhDQ9pbov9hl5FER-Q8Zn4ST_i3TrJSEaqV4S1w00Zed**
2017-06-01 14:29:38.360742-0400 Telemed[2125:1076809] [Firebase/Analytics][I-ACS032003] iAd framework is not linked. Search Ad Attribution Reporter is disabled.
2017-06-01 14:29:38.361 Telemed[2125] <Warning> [Firebase/Analytics][I-ACS032003] iAd framework is not linked. Search Ad Attribution Reporter is disabled.
2017-06-01 14:29:38.363630-0400 Telemed[2125:1076815] [Firebase/Analytics][I-ACS023012] Firebase Analytics enabled
2017-06-01 14:29:38.363 Telemed[2125] <Notice> [Firebase/Analytics][I-ACS023012] Firebase Analytics enabled
Destroyed Session but Saved Login
2017-06-01 14:29:38.388645-0400 Telemed[2125:1076765] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
2017-06-01 14:29:38.389130-0400 Telemed[2125:1076765] [MC] Reading from public effective user settings.
**APNs token retrieved: 32 bytes**

After refresh:

If it's not Firebase and its not te code that only leaves the testing environment and/or APNS...

@rsattar Here is a link to the whole project: https://github.com/djErock/Telemed/tree/master/Telemed

The message successfully completes in the firebase console but never hits the device/console logs... Is there a way to track the message as it goes through the APNS system? I seems as though its getting hung up there. Do I need to replace any provisioning profiles or create new certs or do anything on the Apple dev side of things other than generate the new .P8 file??

@rsattar
APNs Working?
Yes, I am receiving an APNS token in the console. See the logs screenshot above. thanks.
Correct GoogleService-Info.plist?
After I uploaded the APNS Auth Key I downloaded a new version of the google.plist file as well and installed it into the xCode project. I have confirmed that the data in the .plist file matches that of whats in the FB console.
Testing in foreground?
Thanks for this but I am not receiving any push notification at all. Nothing logs in the console letting me know that it had retrieved a message.

Here's something we can try to help debug: You can try sending your self push notifications using the FCM HTTP API, here's an example. Fill in your LEGACY_SERVER_KEY with the value in your Firebase Console > Project Settings > Cloud Messaging > Legacy Server Key. Replace FCM_TOKEN with your FCM token:
curl -X "POST" "https://fcm.googleapis.com/fcm/send" \
     -H "Authorization: key=LEGACY_SERVER_KEY" \
     -H "Content-Type: application/json" \
     -d $'{
  "notification": {
    "body": "Testing with direct FCM API",
    "title": "Test Message",
    "badge": "0",
    "sound": "default"
  },
  "registration_ids": [
    "FCM_TOKEN"
  ]
}'

You can paste the curl command into Terminal to see what error message (if any) you're getting.

Sweet: {"multicast_id":4850999595514789154,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidApnsCredential"}]}Eriks-Mac-mini:pushnotificationtest erikgrosskurth$

So does this mean that the APNS credential in the auth key or is it the APNS cerdential issued at the run time of the app?

What is the multicast_id?

According to: https://firebase.google.com/docs/cloud-messaging/http-server-ref

Invalid APNs credentials	200 + error:
InvalidApnsCredential	A message targeted to an iOS device could not be sent because the required APNs SSL certificate was not uploaded or has expired. Check the validity of your development and production certificates.

This is what it says in that section:

InvalidApnsCredential refers to an issue in the APNs Auth Key or certificate. Can we make sure that the plist's PROJECT_ID matches the project id for your Firebase app?

Looks good from here. Do you see anything out of the ordinary there?

Im going to revoke the initial one and upload a new one to the project and see if we can hit paydirt. One sec

Ran it again and received the same results. {"multicast_id":6377091940157475771,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidApnsCredential"}]}
Curious... in the chain of events in the appDelegate, I register for remote notifications before the APNS Token is generated in the console. Would that behavior affect the process at all? Should it be the other way around?

Thinking... so after reading here:  https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/LaunchingYourApponDevices/LaunchingYourApponDevices.html
This feels like a bug... Not sure on which side though...
It states that "Xcode automatically creates your development certificate and registers a connected device" and in the error documentation FCM states "Check the validity of your development and production certificates." Does this mean that the cert that xCode is generating is the invalid one the FCM docs are referring too? (I am running xCode 8.3.2 with iPhone 7 running 10.3.2 on a Mac Mini running Sierra)

Apologies for the confusion, but yeah in places where it says APNs certificates, it should also apply to APNs Auth Keys (Auth Keys were just rolled out a few weeks ago, and some bits of documentation still refer to only certificates).
In general, with Apple's Auth Keys, you don't need to create push notification certificates (sandbox or production). In your app info screenshot from the developer portal, it shows the notifications as Enabled. Does that means you've created certificates for them? I think it's a holdover from pre-Auth Key-Apple too. Those values can safely remain "Configurable" and APNs Auth Keys will still work.
I took a look at your project (thanks for sharing that), and the App Delegate stuff looks good. Is your GoogleService-Info.plist a dummy file, and the real values are actually put in in your app, right? Also: it looks like you are using swizzling, correct? Your Info.plist has:
	<key>FirebaseAppDelegateProxyEnabled</key>
	<true/>

However your logs seem to indicate that the app delegate proxy is disabled. Is that just in your Git workspace?

I have turned swizzling off, that is a dummy file yes, I can send it to you via private message or something if you would like. That is just the GIT workspace as I have been troubleshooting for two days now to no avail so what you see there is a snapshot of where i was at that moment.

Let me get those certs out of the apple config really quick and retry

Still failed: {"multicast_id":7995160101627937517,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidApnsCredential"}]}

I have to cut out now. Can we pick this up your time tomorrow? Skype maybe?

One more thing: Can you verify that the GOOGLE_APP_ID in the google plist matches your Firebase app's "App ID" in Firebase Console > Project Settings > Your App > App ID?
It should look something like this: 1:SOME_NUMBERS:ios:HEX_STRING
And just to make sure: the Team ID you entered for the APNs Auth Key is the Team ID for this app's bundle id in the Apple Developer Portal?

TRIED GOING BACK IN AND PUTTING NEW .P12 APNS certs in and it failed as well. I then created a new .p8 file as shown above uploaded and still:
{"multicast_id":7926595849536980756,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidApnsCredential"}]}

Hmm, so this is getting a bit weird. Let's try and eliminate some possible issues. First, let's make sure APNs is working using that APNs Auth Key directly. That will make sure that the APNs stuff is fine, and it's an issue on FCM's side.
If you have a way to send yourself push notifications directly using APNs, is that working? I just tried out this script on my Mac, though I had to make sure I installed the homebrew versions of curl and openssl which support HTTP/2. I also had to install curl as: brew install curl --with-nghttp2 to make sure HTTP/2 support was added. With that, I can send messages directly using an APNs Auth Key.
Note: there may be other online tools to help debug this.

I am in the process of doing that now. I have to make a .pem file that works first. I have a sinking feeling this has to do with having certs previous first and now changing over to the auth key. Give me some time as I have gotten homebrew and curl set up to send http/2 set up but it said my pem file i made was: curl: (58) could not load PEM client certificate, OpenSSL error error:02001002:system library:fopen:No such file or directory, (no key found, wrong pass phrase, or wrong file format?)

Do you know a way to test using the auth key with curl and the APNS token?

Yeah, this script supports curl with the APNs Auth Key (no certs/pems). However, you have to install a special curl (--with-nghttp2) and openssl from homebrew first.

I tried that but kept getting:
Warning: curl-7.54.0 already installed, it's just not linked.
Warning: openssl-1.0.2l already installed, it's just not linked.

I WAS TRYING TO GET THIS TO RUN: curl --http2 --cert myapp-push-cert.pem -H "apns-topic: com.caduceususa.telemed" -d '{"aps":{"alert":"Hello from APNs!","sound":"default"}}' https://api.development.push.apple.com/3/device/MYAPNSTOKEN

BUT THATS WHEN I GOT THE CERT ERROR

sorry for yelling LOL

OK so I used that script and got this:
< HTTP/2 400
< apns-id: 3D9092F4-2AAA-6FCF-EB60-A17CA6CDBEBC
<

Connection #0 to host api.development.push.apple.com left intact
{"reason":"BadDeviceToken"}

Is the device token the same as the APNS Token given from xCode? Also Am I using this to get the string here:
var readableAPNSToken: String = ""
for i in 0..<deviceToken.count {
readableAPNSToken += String(format: "%02.2hhx", deviceToken[i] as CVarArg)
}
print("Received an APNs device token: (readableAPNSToken)")

Is there a better way to get it the Device Token in a different format?
print("APNS Token: (deviceToken.hexByteString)") Maybe???

Here's a category I wrote on Data to print out the APNs device token.

Here is the whole curl response. can you tell me if this is similar to your successful turn at it?

deviceToken=b27371497b85611baf9052b4ccfb9641ab7fea1d01c91732149c99cc3ed9342f
Eriks-Mac-mini:telemed erikgrosskurth$
Eriks-Mac-mini:telemed erikgrosskurth$ authKey="APNsAuthKey_C257H2ZLF4.p8"
Eriks-Mac-mini:telemed erikgrosskurth$ authKeyId=C257H2ZLF4
Eriks-Mac-mini:telemed erikgrosskurth$ teamId=FPPC33KLR7
Eriks-Mac-mini:telemed erikgrosskurth$ bundleId=com.caduceususa.telemed
Eriks-Mac-mini:telemed erikgrosskurth$ endpoint=https://api.development.push.apple.com
Eriks-Mac-mini:telemed erikgrosskurth$
Eriks-Mac-mini:telemed erikgrosskurth$ read -r -d '' payload <<-'EOF'
> {
>    "aps": {
>       "badge": 2,
>       "category": "mycategory",
>       "alert": {
>          "title": "my title",
>          "subtitle": "my subtitle",
>          "body": "my body text message"
>       }
>    },
>    "custom": {
>       "mykey": "myvalue"
>    }
> }
> EOF

# --------------------------------------------------------------------------

base64() {
   $openssl base64 -e -A | tr -- '+/' '-_' | tr -d =
}

sign() {
   printf "$1"| $openssl dgst -binary -sha256 -sign "$authKey" | base64
}

time=$(date +%s)
header=$(printf '{ "alg": "ES256", "kid": "%s" }' "$authKeyId" | base64)
claims=$(printf '{ "iss": "%s", "iat": %d }' "$teamId" "$time" | base64)
jwt="$header.$claims.$(sign $header.$claims)"

$curl --verbose \
   --header "content-type: application/json" \
   --header "authorization: bearer $jwt" \
   --header "apns-topic: $bundleId" \
   --data "$payload" \
   $endpoint/3/device/$deviceToken
Eriks-Mac-mini:telemed erikgrosskurth$
Eriks-Mac-mini:telemed erikgrosskurth$ # --------------------------------------------------------------------------
Eriks-Mac-mini:telemed erikgrosskurth$
Eriks-Mac-mini:telemed erikgrosskurth$ base64() {
>    $openssl base64 -e -A | tr -- '+/' '-_' | tr -d =
> }
Eriks-Mac-mini:telemed erikgrosskurth$
Eriks-Mac-mini:telemed erikgrosskurth$ sign() {
>    printf "$1"| $openssl dgst -binary -sha256 -sign "$authKey" | base64
> }
Eriks-Mac-mini:telemed erikgrosskurth$
Eriks-Mac-mini:telemed erikgrosskurth$ time=$(date +%s)
Eriks-Mac-mini:telemed erikgrosskurth$ header=$(printf '{ "alg": "ES256", "kid": "%s" }' "$authKeyId" | base64)
claims=$(printf '{ "iss": "%s", "iat": %d }' "$teamId" "$time" | base64)
jwt="$header.$claims.$(sign $header.$claims)"

$curl --verbose \
   --header "content-type: application/json" \
   --header "authorization: bearer $jwt" \
   --header "apns-topic: $bundleId" \
   --data "$payload" \
   $endpoint/3/device/$deviceToken

Eriks-Mac-mini:telemed erikgrosskurth$ claims=$(printf '{ "iss": "%s", "iat": %d }' "$teamId" "$time" | base64)
Eriks-Mac-mini:telemed erikgrosskurth$ jwt="$header.$claims.$(sign $header.$claims)"
Eriks-Mac-mini:telemed erikgrosskurth$
Eriks-Mac-mini:telemed erikgrosskurth$ $curl --verbose \
>    --header "content-type: application/json" \
>    --header "authorization: bearer $jwt" \
>    --header "apns-topic: $bundleId" \
>    --data "$payload" \
>    $endpoint/3/device/$deviceToken
*   Trying <IP_ADDRESS>...
* TCP_NODELAY set
* Connected to api.development.push.apple.com (<IP_ADDRESS>) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /usr/local/etc/openssl/cert.pem
  CApath: /usr/local/etc/openssl/certs
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Request CERT (13):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=api.development.push.apple.com; OU=management:idms.group.533599; O=Apple Inc.; ST=California; C=US
*  start date: Jun 19 01:49:43 2015 GMT
*  expire date: Jul 18 01:49:43 2017 GMT
*  subjectAltName: host "api.development.push.apple.com" matched cert's "api.development.push.apple.com"
*  issuer: CN=Apple IST CA 2 - G1; OU=Certification Authority; O=Apple Inc.; C=US
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x7fe1b5009400)
> POST /3/device/b27371497b85611baf9052b4ccfb9641ab7fea1d01c91732149c99cc3ed9342f HTTP/2
> Host: api.development.push.apple.com
> User-Agent: curl/7.54.0
> Accept: */*
> content-type: application/json
> authorization: bearer eyAiYWxnIjogIkVTMjU2IiwgImtpZCI6ICJDMjU3SDJaTEY0IiB9.eyAiaXNzIjogIkZQUEMzM0tMUjciLCAiaWF0IjogMTQ5NjQyNDk0NiB9.MEUCICu19UcbEiQ59C0CvVM5DbGb9pBylTI_1q16_czEr10IAiEA2f7NgdTVCzz2wPQmha0mi2pZYAuKF00sVrT-y-Sd1uk
> apns-topic: com.caduceususa.telemed
> Content-Length: 247
>
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
* We are completely uploaded and fine
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 400
< apns-id: 3D9092F4-2AAA-6FCF-EB60-A17CA6CDBEBC
<
* Connection #0 to host api.development.push.apple.com left intact
{"reason":"BadDeviceToken"}

Here is the whole curl response. can you tell me if this is similar to your successful turn at it?

deviceToken=b27371497b85611baf9052b4ccfb9641ab7fea1d01c91732149c99cc3ed9342f
Eriks-Mac-mini:telemed erikgrosskurth$
Eriks-Mac-mini:telemed erikgrosskurth$ authKey="APNsAuthKey_C257H2ZLF4.p8"
Eriks-Mac-mini:telemed erikgrosskurth$ authKeyId=C257H2ZLF4
Eriks-Mac-mini:telemed erikgrosskurth$ teamId=FPPC33KLR7
Eriks-Mac-mini:telemed erikgrosskurth$ bundleId=com.caduceususa.telemed
Eriks-Mac-mini:telemed erikgrosskurth$ endpoint=https://api.development.push.apple.com
Eriks-Mac-mini:telemed erikgrosskurth$
Eriks-Mac-mini:telemed erikgrosskurth$ read -r -d '' payload <<-'EOF'
> {
>    "aps": {
>       "badge": 2,
>       "category": "mycategory",
>       "alert": {
>          "title": "my title",
>          "subtitle": "my subtitle",
>          "body": "my body text message"
>       }
>    },
>    "custom": {
>       "mykey": "myvalue"
>    }
> }
> EOF

# --------------------------------------------------------------------------

base64() {
   $openssl base64 -e -A | tr -- '+/' '-_' | tr -d =
}

sign() {
   printf "$1"| $openssl dgst -binary -sha256 -sign "$authKey" | base64
}

time=$(date +%s)
header=$(printf '{ "alg": "ES256", "kid": "%s" }' "$authKeyId" | base64)
claims=$(printf '{ "iss": "%s", "iat": %d }' "$teamId" "$time" | base64)
jwt="$header.$claims.$(sign $header.$claims)"

$curl --verbose \
   --header "content-type: application/json" \
   --header "authorization: bearer $jwt" \
   --header "apns-topic: $bundleId" \
   --data "$payload" \
   $endpoint/3/device/$deviceToken
Eriks-Mac-mini:telemed erikgrosskurth$
Eriks-Mac-mini:telemed erikgrosskurth$ # --------------------------------------------------------------------------
Eriks-Mac-mini:telemed erikgrosskurth$
Eriks-Mac-mini:telemed erikgrosskurth$ base64() {
>    $openssl base64 -e -A | tr -- '+/' '-_' | tr -d =
> }
Eriks-Mac-mini:telemed erikgrosskurth$
Eriks-Mac-mini:telemed erikgrosskurth$ sign() {
>    printf "$1"| $openssl dgst -binary -sha256 -sign "$authKey" | base64
> }
Eriks-Mac-mini:telemed erikgrosskurth$
Eriks-Mac-mini:telemed erikgrosskurth$ time=$(date +%s)
Eriks-Mac-mini:telemed erikgrosskurth$ header=$(printf '{ "alg": "ES256", "kid": "%s" }' "$authKeyId" | base64)
claims=$(printf '{ "iss": "%s", "iat": %d }' "$teamId" "$time" | base64)
jwt="$header.$claims.$(sign $header.$claims)"

$curl --verbose \
   --header "content-type: application/json" \
   --header "authorization: bearer $jwt" \
   --header "apns-topic: $bundleId" \
   --data "$payload" \
   $endpoint/3/device/$deviceToken

Eriks-Mac-mini:telemed erikgrosskurth$ claims=$(printf '{ "iss": "%s", "iat": %d }' "$teamId" "$time" | base64)
Eriks-Mac-mini:telemed erikgrosskurth$ jwt="$header.$claims.$(sign $header.$claims)"
Eriks-Mac-mini:telemed erikgrosskurth$
Eriks-Mac-mini:telemed erikgrosskurth$ $curl --verbose \
>    --header "content-type: application/json" \
>    --header "authorization: bearer $jwt" \
>    --header "apns-topic: $bundleId" \
>    --data "$payload" \
>    $endpoint/3/device/$deviceToken
*   Trying <IP_ADDRESS>...
* TCP_NODELAY set
* Connected to api.development.push.apple.com (<IP_ADDRESS>) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /usr/local/etc/openssl/cert.pem
  CApath: /usr/local/etc/openssl/certs
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Request CERT (13):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=api.development.push.apple.com; OU=management:idms.group.533599; O=Apple Inc.; ST=California; C=US
*  start date: Jun 19 01:49:43 2015 GMT
*  expire date: Jul 18 01:49:43 2017 GMT
*  subjectAltName: host "api.development.push.apple.com" matched cert's "api.development.push.apple.com"
*  issuer: CN=Apple IST CA 2 - G1; OU=Certification Authority; O=Apple Inc.; C=US
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x7fe1b5009400)
> POST /3/device/b27371497b85611baf9052b4ccfb9641ab7fea1d01c91732149c99cc3ed9342f HTTP/2
> Host: api.development.push.apple.com
> User-Agent: curl/7.54.0
> Accept: */*
> content-type: application/json
> authorization: bearer eyAiYWxnIjogIkVTMjU2IiwgImtpZCI6ICJDMjU3SDJaTEY0IiB9.eyAiaXNzIjogIkZQUEMzM0tMUjciLCAiaWF0IjogMTQ5NjQyNDk0NiB9.MEUCICu19UcbEiQ59C0CvVM5DbGb9pBylTI_1q16_czEr10IAiEA2f7NgdTVCzz2wPQmha0mi2pZYAuKF00sVrT-y-Sd1uk
> apns-topic: com.caduceususa.telemed
> Content-Length: 247
>
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
* We are completely uploaded and fine
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 400
< apns-id: 3D9092F4-2AAA-6FCF-EB60-A17CA6CDBEBC
<
* Connection #0 to host api.development.push.apple.com left intact
{"reason":"BadDeviceToken"}

This about sums it all up here LOL:
'''
Here's a category I wrote on Data to print out the APNs device token.
'''

Sorry, here's the fixed link
I receive a HTTP/2 200 response:
< HTTP/2 200
< apns-id: A15A3519-6276-D187-0DB3-CADA8FE28AF0
<
* Connection #0 to host api.development.push.apple.com left intact

The two reasons for "BadDeviceToken" are if the token is malformed, OR if the token doesn't match the environment (production or sandbox). Is there something unusual about your app signing? Does it work if you send the request to api.push.apple.com instead of api.development.push.apple.com?
BTW, an easier way to do this would be to save that command as a .sh file (e.g. apns.sh) and then you can execute it using sh apns.sh.

Give me a second to parse, Thanks

OK Good News, Now we get {"reason":"DeviceTokenNotForTopic"}

I also tried swapping out
api.push.apple.com with api.development.push.apple.com
the production gave: {"reason":"BadDeviceToken"}
the development gave: {"reason":"DeviceTokenNotForTopic"}

testAPNS.txt

Does this mean my bundle id is incorrect?

According to this: https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html
400
DeviceTokenNotForTopic
The device token does not match the specified topic.

Yeah, DeviceTokenNotForTopic usually means that the APNs device token doesn't match the bundle id. Apple Documentation. Something is strange with your app's bundle id or device token. Can you print out the bundle id while the app is running, to confirm it's the same bundle id as what you're sending to APNs? (usually Bundle.main.bundleIdentifier)

The bundle ID had a F****** typo... FML... SMGDH... Thank you for your time sir, You are the man! I'm going home to cry now...

The DeviceTokenNotForTopic error led me here: https://community.clevertap.com/t/after-uploading-ios-apns-auth-key-get-error/741

The bundle ID was fine everywhere except in xCode...

cam instead of com

@rsattar  Can you add an answer here so I can upvote on SO? https://stackoverflow.com/questions/44294144/push-notifications-not-working-in-firebase-4-0

Most of the time, this problem seems to be caused by improper configuration, such a typo in the bundle name, bad entitlements in App ID, etc. However, I discovered that one solution if all else fails is to use your Team ID instead of the App Prefix in the Firebase Cloud Settings. Not the answer here, but that might help someone else. The docs really need to be updated for this!


unrecognised option '--streographic' when running point2dem

Describe the bug
unrecognised option '--streographic' when running point2dem using command as stated in
https://stereopipeline.readthedocs.io/en/stable/examples/lronac.html#running-stereo
To Reproduce
After completing parallel_stereo, I run the following command:
point2dem --streographic --auto-proj-center
--errorimage --orthoimage
run/run-PC.tif run/run-L.tif
Expected behavior
Complete with no error
Error Logs, Terminal Captures, Screenshots
ERROR: Error parsing input:
unrecognised option '--streographic'
Usage: /home/ec2-user/SageMaker/ames_stereo_pipeline/StereoPipeline-3.5.0-alpha-2024-07-24-x86_64-Linux/libexec/point2dem [options]  [ --orthoimage  ]
[ASP 3.5.0-alpha]
Build date: 2024-07-24
General options:
--nodata-value arg (=-3.40282347e+38) Set the nodata value.
--use-alpha                           Create images that have an alpha
channel.
-n [ --normalized ]                   Also write a normalized version of the
DEM (for debugging).
--orthoimage                          Write an orthoimage based on the
texture files passed in as inputs
(after the point clouds).
-o [ --output-prefix ] arg            Specify the output prefix.
-t [ --output-filetype ] arg (=tif)   Specify the output file.
--errorimage                          Write an additional image, whose values
represent the triangulation ray
intersection error in meters (the
closest distance between the rays
emanating from the two cameras
corresponding to the same point on the
ground). Filename is -IntersectionErr.tif. If stereo
triangulation was done with the option
--compute-error-vector, this
intersection error will instead have 3
bands, corresponding to the coordinates
of that vector, unless the option
--scalar-error is set.
--scalar-error                        If the point cloud has a vector
triangulation error, ensure that the
intersection error produced by this
program is the rasterized norm of that
vector. See also --error-image.
--dem-hole-fill-len arg (=0)          Maximum dimensions of a hole in the
output DEM to fill in, in pixels.
--orthoimage-hole-fill-len arg (=0)   Maximum dimensions of a hole in the
output orthoimage to fill in, in
pixels.
--orthoimage-hole-fill-extra-len arg (=0)
This value, in pixels, will make
orthoimage hole filling more aggressive
by first extrapolating the point cloud.
A small value is suggested to avoid
artifacts. Hole-filling also works
better when less strict with outlier
removal, such as in --remove-outliers-p
arams, etc.
--remove-outliers                     Turn on outlier removal based on
percentage of triangulation error.
Obsolete, as this is the default.
--remove-outliers-params arg (=pct factor)
Outlier removal based on percentage.
Points with triangulation error larger
than pct-th percentile times factor and
points too far from the cluster of most
points will be removed as outliers.
[default: pct=75.0, factor=3.0]
--use-tukey-outlier-removal           Remove outliers above Q3 + 1.5*(Q3 -
Q1). Takes precedence over
--remove-outlier-params.
--max-valid-triangulation-error arg (=0)
Outlier removal based on threshold. If
positive, points with triangulation
error larger than this will be removed
from the cloud. Measured in meters.
This option takes precedence over
--remove-outliers-params and
--use-tukey-outlier-removal.
--max-output-size arg (=Vector2(9999999,9999999))
Don't write the output DEM if it is
calculated to be this size or greater.
--median-filter-params arg (=window_size threshold)
If the point cloud height at the
current point differs by more than the
given threshold from the median of
heights in the window of given size
centered at the point, remove it as an
outlier. Use for example 11 and 40.0.
--erode-length arg (=0)               Erode input point clouds by this many
pixels at boundary (after outliers are
removed, but before filling in holes).
--csv-format arg                      Specify the format of input CSV files
as a list of entries
column_index:column_type (indices start
from 1). Examples: '1:x 2:y 3:z',
'2:file 5:lon 6:lat 7:radius_m', '3:lat
2:lon 1:height_above_datum 5:file',
'1:easting 2:northing
3:height_above_datum' (need to set
--csv-proj4). Can also use radius_km
for column_type.
--csv-proj4 arg                       The PROJ.4 string to use to interpret
the entries in input CSV files, if
those files contain Easting and
Northing fields. If not specified,
--t_srs will be used.
--filter arg (=weighted_average)      The filter to apply to the heights of
the cloud points within a given
circular neighborhood when gridding
(its radius is controlled via
--search-radius-factor). Options:
weighted_average (default), min, max,
mean, median, stddev, count (number of
points), nmad (= 1.4826 * median(abs(X
- median(X)))), n-pct (where n is a
real value between 0 and 100, for
example, 80-pct, meaning, 80th
percentile). Except for the default,
the name of the filter will be added to
the obtained DEM file name, e.g.,
output-min-DEM.tif.
--rounding-error arg (=0.0009765625)  How much to round the output DEM and
errors, in meters (more rounding means
less precision but potentially smaller
size on disk). The inverse of a power
of 2 is suggested. Default: 1/2^10.
--search-radius-factor arg (=0)       Multiply this factor by dem-spacing to
get the search radius. The DEM height
at a given grid point is obtained as a
weighted average of heights of all
points in the cloud within search
radius of the grid point, with the
weights given by a Gaussian. Default
search radius: max(dem-spacing,
default_dem_spacing), so the default
factor is about 1.
--propagate-errors                    Write files with names
{output-prefix}-HorizontalStdDev.tif
and {output-prefix}-VerticalStdDev.tif
having the gridded stddev produced from
bands 5 and 6 of the input point cloud,
if this cloud was created with the
option --propagate-errors. The same
gridding algorithm is used as for
creating the DEM.
--gaussian-sigma-factor arg (=0)      The value s to be used in the Gaussian
exp(-s*(x/grid_size)^2) when computing
the DEM. The default is -log(0.25) =
1.3863. A smaller value will result in
a smoother terrain.
--default-grid-size-multiplier arg (=1)
If the output DEM grid size
(--dem-spacing) is not specified,
compute it automatically (as the mean
ground sample distance), and then
multiply it by this number. It is
suggested that this number be set to 4
though the default is 1.
--use-surface-sampling                Use the older algorithm, interpret the
point cloud as a surface made up of
triangles and interpolate into it
(prone to aliasing).
--fsaa arg (=1)                       Oversampling amount to perform
antialiasing (obsolete).
--no-dem                              Skip writing a DEM.
--input-is-projected                  Input data is already in projected
coordinates, or is a point cloud in
Cartesian coordinates that is small in
extent. See the doc for more info.
Manipulation options:
--x-offset arg (=0)                   Add a longitude offset (in degrees) to
the DEM.
--y-offset arg (=0)                   Add a latitude offset (in degrees) to
the DEM.
--z-offset arg (=0)                   Add a vertical offset (in meters) to
the DEM.
--rotation-order arg (=xyz)           Set the order of an Euler angle
rotation applied to the 3D points prior
to DEM rasterization.
--phi-rotation arg (=0)               Set a rotation angle phi.
--omega-rotation arg (=0)             Set a rotation angle omega.
--kappa-rotation arg (=0)             Set a rotation angle kappa.
Projection options:
--t_srs arg                           Specify the output projection as a GDAL
projection string (WKT, GeoJSON, or
PROJ.4). If not provided, will be read
from the point cloud, if available.
--t_projwin arg                       The output DEM will have corners with
these georeferenced coordinates. The
actual spatial extent (ground
footprint) is obtained by expanding
this box by half the grid size.
-s [ --dem-spacing ] arg              Set output DEM resolution (in target
georeferenced units per pixel). These
units may be in degrees or meters,
depending on your projection. If not
specified, it will be computed
automatically (except for LAS and CSV
files). Multiple spacings can be set
(in quotes) to generate multiple output
files. This is the same as the --tr
option.
--tr arg                              This is identical to the --dem-spacing
option.
--datum arg                           Set the datum. This will override the
datum from the input images and also
--t_srs, --semi-major-axis, and
--semi-minor-axis. Options: WGS_1984,
D_MOON (1,737,400 meters), D_MARS
(3,396,190 meters), MOLA (3,396,000
meters), NAD83, WGS72, and NAD27. Also
accepted: Earth (=WGS_1984), Mars
(=D_MARS), Moon (=D_MOON).
-r [ --reference-spheroid ] arg       This is identical to the datum option.
--semi-major-axis arg (=0)            Explicitly set the datum semi-major
axis in meters.
--semi-minor-axis arg (=0)            Explicitly set the datum semi-minor
axis in meters.
--sinusoidal                          Save using a sinusoidal projection.
--mercator                            Save using a Mercator projection.
--transverse-mercator                 Save using a transverse Mercator
projection.
--orthographic                        Save using an orthographic projection.
--stereographic                       Save using a stereographic projection.
See also --auto-proj-center.
--oblique-stereographic               Save using an oblique stereographic
projection.
--gnomonic                            Save using a gnomonic projection.
--lambert-azimuthal                   Save using a Lambert azimuthal
projection.
--utm arg                             Save using a UTM projection with the
given zone.
--proj-lat arg (=0)                   The center of projection latitude (if
applicable).
--proj-lon arg (=0)                   The center of projection longitude (if
applicable).
--auto-proj-center                    Automatically compute the projection
center, when the projection is
stereographic, etc. Use the median
longitude and latitude of cloud points.
This overrides the values of --proj-lon
and --proj-lat.
--proj-scale arg (=1)                 The projection scale (if applicable).
--false-easting arg (=0)              The projection false easting (if
applicable).
--false-northing arg (=0)             The projection false northing (if
applicable).
--threads arg (=0)                    Select the number of threads to use for
each process. If 0, use the value in
~/.vwrc.
--tile-size arg (=256 256)            Image tile size used for multi-threaded
processing.
--cache-size-mb arg (=1024)           Set the system cache size, in MB, for
each process.
--no-bigtiff                          Tell GDAL to not create bigtiffs.
--tif-compress arg (=LZW)             TIFF Compression method. [None, LZW,
Deflate, Packbits]
-v [ --version ]                      Display the version of software.
-h [ --help ]                         Display this help message.
Your Environment (please complete the following information):

OS: Amazon Linux 2
ASP Version: [ASP 3.5.0-alpha]

Additional context
Add any other context about the problem here.

I think you have a typo, it needs to be --stereographic with two "e"s.

Please update the command in example: https://stereopipeline.readthedocs.io/en/stable/examples/lronac.html#running-stereo
point2dem--stereographic --auto-proj-center
--errorimage --orthoimage
run/run-PC.tif run/run-L.tif

I think you have a typo, it needs to be --stereographic with two "e"s.

yes, thank you I spotted it too just now - the example itself on ASP website has typo. thank you @rbeyer

closing the issue - please update the documentation

That was a typo, and I put a fix. Thanks.


Layouts Question

How do you use a different layout for a specific route?  e.g. /login uses an AuthLayout instead of the CoreLayout.
Thanks!

Show my code
export const createRoutes = (store) => ([
{
    path: '/',
    component: CoreLayout,
    indexRoute: Home(store),
    childRoutes: [
    ]
},
{
    path: '/login',
    component: AuthLayout,
    indexRoute: Home(store),
    childRoutes: [
    ]
})

export default createRoutes

Thanks!


Expose orient of an axis

Without having the orient set, if I'm passed an anonymous axis object, I cannot inspect to see what orientation it is at.
If I wanted to transform containing elements based on orientation, there's no way to do that.
Added a PR for this #17.

I don’t think it’s a good idea to expose an enumeration of axis orientations. There might be other orientations in the future, such as for polar coordinates. And it feels icky, especially if the orientation is defined as a string.
By analogy, consider scales: there’s no scale.type method to distinguish different types of scales such as d3.scaleLinear and d3.scaleOrdinal. Occasionally you need to distinguish scale types; for example, d3-axis tests for the presence of scale.bandwidth to shift ticks to the middle of each band for band scales. But as that case demonstrates, it’s better to test for a specific feature (bandwidth) than to enumerate the scale types explicitly. Extending the analogy, when developing on the web, it’s better to test whether the current browser supports a feature than to write code that checks the user-agent.
It’d be nice, maybe, if you could use instanceof to test whether something is a particular type of scale, but alas that does not play nice with D3’s use of functions-as-objects, where a scale (like an axis) is both a function and an object. There’s no way to extend Function in JavaScript. (Actually that’s not totally true because you can say class Foo extends Function {}, but I think that requires using the Function constructor—there’s no way to extend a closure defined by a function expression, as far as I know.) So you can’t say x instanceof d3.scaleLinear, either, although that is supported for D3 classes that do not extend function, such as d3.selection.
I can’t see the code you’re writing, but it might be better for you to expose four of your own constructors, and then instantiate the axis internally. That way you’re in control of how the axis gets instantiated, and you know what orientation it is, and there’s no possibility of receiving an axis of an unsupported (or unknown) orientation.

I was considering either wrapping the axis construction or just adding a property to it (such as "type" or otherwise) -- doesn't need to be a string or the like. That's probably the avenue I'll take moving forward.


[chef/chef]Knife SSH to Windows 2016 hangs unexpectedly

Description

The knife ssh subcommand “freezes” after printing the name of a remote Windows 2016 host.
The knife ssh process doesn’t get into the ch.on_requst “exit-status” block on Windows 2016. It does on Ubuntu hosts.
Command output does not print to screen.
There are no issues connecting via native SSH client or executing commands via native SSH client on Windows 2016 hosts.
Related Issues
https://github.com/chef/customer-bugs/issues/115
https://getchef.zendesk.com/agent/tickets/23906
Chef Version

Platform Version

Replication Case

The possre_openssh recipe is attached to the Zendesk ticket.
// Steps to reproduce (kitchen)
Apply possre_openssh recipe to Windows 2016 host via WinRM transport.
Change transport to ssh.
// Steps to reproduce (datacenter)
Apply possre_openssh recipe to Windows 2016 host.
Run commands like knife ssh 'name:ms53885.starbucks.net' 'dir' -x m-00169-6 -Pcat ~/.169-6 -C 1. (attached: knife_ssh_command_ouput_1.png and knife_ssh_command_output_2.png)`.
// Steps to validate OpenSSH configuration
Apply possre_openssh recipe to Windows 2016 host.
Connect via native client e.g. ssh<EMAIL_ADDRESS>-> success.
Run remote command via native client e.g. ssh<EMAIL_ADDRESS>‘ls’ -> success.
Use attached test_ssh.txt to leverage Net::SSH.start on Windows 2016 host -> success.
Expected Behaviour
Knife SSH should work on Windows 2016 the same way it does on Windows 2019
Actual Behaviour
using knife ssh (mac, windows, anything we've tried as client) to reach a windows host (as the ssh server) via ssh hangs and never reaches.
If the server is 2019 you can just add ssh via feature activation.
If you try 2016, open_ssh needs to be installed and configured on the windows server.
Same results either way. Haven't located the detailed ssh output but it doesn't show any difference up to the hang...
Client Output

Stacktrace

Identified the issue, commenting out the line https://github.com/chef/chef/blob/master/lib/chef/knife/ssh.rb#L365 resolving the issue.
Figuring out possible solution.


Remove unnecessary rounding of metrics.

Rounding reported metrics to 3 decimals unnecessarily removes granularity that some users may need. It's better to remove this.
Resolves #190
Closes #190

@Matgrb if there are no objections, could you please fast-forward this simple (but important) change 🙂 ?

Hi @christophermadsen , thank you for your contribution to Probatus!
Could you update your fork to the latest commit, so that the checks are rerun?


Add datacenter compatibility

https://developer.atlassian.com/display/MARKET/Data+Center+add-on+development

Fixed.


Dbt cloud yml dict

this PR adds the dbt_cloud.yml file to the allowed set of yml files for 1.5+ (we may need a default, i'm  not postitive the set of dbt versions that are supported by cloud CLI)

@dave-connors-3 from the docs, CLI is 1.5+

You must be on dbt version 1.5 or higher. Refer to dbt Cloud versions to upgrade.


support chmod/chown

Fixes #497
There were several issues:

chown and chmod were non-functional (it was one of those thing set for "later" that never got addressed)
Uname and Gname were not being provided for the tar headers
Uname/Gname/UID/GID override were set, which caused everything to be owned by root, and thus nonrunnable

As an aside, this does show up some of the weaknesses in the memfs we are using. I more urgently want to fix the chown/chmod issues, but at a certain point, we should bite the bullet and just replace it.


Think about to fix the issues found by adapter checker

I am an automatic service that looks for possible errors in ioBroker and creates an issue for it. The link below leads directly to the test:
https://adapter-check.iobroker.in/?q=https://raw.githubusercontent.com/o0shojo0o/ioBroker.epson_ecotank_et_2750

[ ] [E605] No actual year found in copyright. Please add "Copyright (c) 2022 o0shojo0o" at the end of README.md
[ ] [E701] No actual year found in LICENSE. Please add "Copyright (c) 2022 o0shojo0o" at the start of LICENSE

Thanks,
your automatic adapter checker.
P.S.: There is a community in Github, which supports the maintenance and further development of adapters. There you will find many experienced developers who are always ready to assist anyone. New developers are always welcome there. For more informations visit: https://github.com/iobroker-community-adapters/info

Thanks, that all bugs have been fixed.


[ISSUE 3194] [PART C] Replace AtomicLong with LongAdder in StatsItem.java to improve performance

Make sure set the target branch to develop
What is the purpose of the change
improve performance
Brief changelog
[ISSUE 3194] [PART C] Replace AtomicLong with LongAdder in StatsItem.java to improve performance
Verifying this change
Follow this checklist to help us incorporate your contribution quickly and easily. Notice, it would be helpful if you could finish the following 5 checklist(the last one is not necessary)before request the community to review your PR.

[x] Make sure there is a Github issue filed for the change (usually before you start working on it). Trivial changes like typos do not require a Github issue. Your pull request should address just this issue, without pulling in other changes - one PR resolves one issue.
[x] Format the pull request title like [ISSUE #123] Fix UnknownException when host config not exist. Each commit in the pull request should have a meaningful subject line and body.
[x] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
[x] Write necessary unit-test(over 80% coverage) to verify your logic correction, more mock a little better when cross module dependency exist. If the new feature or significant change is committed, please remember to add integration-test in test module.
[x] Run mvn -B clean apache-rat:check findbugs:findbugs checkstyle:checkstyle to make sure basic checks pass. Run mvn clean install -DskipITs to make sure unit-test pass. Run mvn clean test-compile failsafe:integration-test  to make sure integration-test pass.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

Coverage decreased (-0.01%) to 54.301% when pulling e5183db5467d3b502b5571af7446162d543f0d51 on areyouok:4.9.1_speed_C into f9a0f530e6be319cfe2b2c66e2434ea530fa9f10 on apache:develop.

+1


Remove duplicate SetAccessTask tests from taskflowbackend

It seems we have a bunch of duplicate tests from back when this was still SetDataObjAccessTask. My bad, these will be removed.

Done.


installed syncfusion extension are not showing up in VS 2019 for Mac

I did a fresh new install for VS 2019 for mac and followed your documentation but the installed syncfusion extension are not showing up in VS 2019 for Mac...

Hi Ahmarz,
Greetings from Syncfusion.
We have analyzed your reported problem, and could you please check whether created Xamarin.Forms project have the Xamarin.Forms NuGet package since we are enabling the Syncfusion Essential UI Kit option when the project have the Xamarin.Forms NuGet package.
If your Xamarin project does not have Xamarin.Forms NuGet, please install the Xamarin.Forms NuGet package in your machine and try to use the Syncfusion Essential UI Kit using Syncfusion UI Kit documentation.
If still you are facing the issue, could you please update the below details to check the issue from our side.

Check whether the Syncfusion Essential UI Kit Visual Studio extension is installed or not from the Extension Manager dialog.
Screenshot for the reported issue.
Share the IDE.log file. Get this file by follow the steps form the below link.
https://docs.microsoft.com/en-us/visualstudio/mac/troubleshooting?view=vsmac-2019#viewing-logs-in-visual-studio-for-mac

Thanks,
Muneesh Kumar G.

I installed two versions:
1.Syncfusion.Xamarin.Mac.UIKit_<IP_ADDRESS>.mpack
2.Syncfusion.Xamarin.Mac.UIKit_<IP_ADDRESS>.mpack
both 1 and 2 display the same issue with VS 2019 for mac, they simply donot integrate although they report that they are correctly installed as extensions and yes i have restarted VS 3 times :)
also i have followed your documentation here:
https://help.syncfusion.com/xamarin/uikit/gettingstarted?_ga=2.133742222.1653685436.1581865891-47378656.1581865891
Could you just tell me from where i can download this file "Syncfusion Xamarin VS Mac Extensions.mpack" and i have listed the mpack files that i could download.. and yes the Prjoect is Xamarin.Forms and yes i have NuGet.
Please send a more descriptive reply with links and sources of the mpack files

Hi Ahmarz,
Syncfusion Xamarin.Forms UI Kit
Currently Syncfusion Xamarin controls supports to the NETStandard Xamarin Forms project only and not supported in the Shared library project. If you are using the Shared library Xamarin Forms project, the essential UI kit option will not show to add the Syncfusion Xamarin control pages to your project. So, please create the new NETStandard Xamarin Forms project and try to use the Syncfusion Essential UI kit.
Syncfusion Xamarin Project Template
But checking your updated screenshot, we suspect that you have installed the Syncfusion Essential UI kit which is used for add the Syncfusion Xamarin controls page in your Xamarin Forms project. But you are trying to find the Syncfusion Xamarin project template in the New project dialog. If you want to use the Syncfusion Xamarin project template in Visual Studio 2019 Mac to create the new Syncfusion Xamarin project, please follow the steps from the below links.
Extension Installation: https://help.syncfusion.com/xamarin/visual-studio-integration/visual-studio-mac-extensions/installation
Syncfusion Xamarin Project Template: https://help.syncfusion.com/xamarin/visual-studio-integration/visual-studio-mac-extensions/create-project
Also, currently we are providing the Syncfusion UI kit and Syncfusion Project Template extension support for Xamarin.Forms. To develop the Xamarin Forms using these extensions, you need to install the below mpack files in your Visual Studio.
UIKit: https://cdn.syncfusion.com/essential-ui-kit-for-xamarin.forms/Syncfusion.Xamarin.Mac.UIKit_<IP_ADDRESS>.mpack?_ga=2.119144841.1621146489.1581913172-412525225.1559890194
Project Template:  Follow the below steps,

Download the Syncfusion Xamarin Mac setup from here.
Extract the zip file and get the Syncfusion.Xamarin.VSMac.VSExtension.mpack file from the below location.
\Xamarin\Extension\ Syncfusion.Xamarin.VSMac.VSExtension.mpack.

Thanks,
Muneesh Kumar G.

Hi @ahmarz
We will update you in this thread once we have implemented your requirements. We are closing this ticket now, please feel free to open a new thread for any other requirements or queries.
Thanks
Meikandan


PENV-285_dep: exporter load tests

- What I did
Implemented load tests for exporter api
- How I did it
- How to verify it
- Description for the changelog

fill free to reopen on demand


Cross compile openssl1.0.0s, add no-tls1, compile error

Hello Team，
 I configure openssl1.0.0s by the following command：
 `./Configure linux-armv4 -march=armv7-a --cross-compile-prefix=/usr/petalinux-v2015.4-final/tools/linux-i386/arm-xilinx-linux-gnueabi/bin/arm-xilinx-linux-gnueabi- --prefix=/usr/local/openssl no-tls1 no-ssl`
 Prompt me to run **make depend** after configuration is complete，After I run **make depend**, I run **make** directly to compile，But an error occurred as follows:

I don't have a good solution, because if I change the configuration command to the following:
./Configure linux-armv4 -march=armv7-a --cross-compile-prefix=/usr/petalinux-v2015.4-final/tools/linux-i386/arm-xilinx-linux-gnueabi/bin/arm-xilinx-linux-gnueabi- --prefix=/usr/local/openssl no-tls1_1 no-ssl，Just replace no-tls1 with no-tls1_1, then the compilation succeeds, so that's weird, can you guys help. Thanks.
This seems to be a common problem.

The openssl-1.0.0 version is unsupported for a long time. Can you reproduce it with 1.1.1 or 3.0 versions?

The openssl-1.0.0 version is unsupported for a long time. Can you reproduce it with 1.1.1 or 3.0 versions?

Thank you for your reply, it can be compiled with 1.1.1 or 3.0 versions of openssl, I have tried it, but now I just want to use 1.0.0 to compile the past, because the original device is all 1.0.0 library, no Significant revisions are required.
I'm just very strange, why can't tls1 be removed when compiling openssl 1.0.0, other tls1_1 or tls1_2 can be removed, this is a problem, can you help me solve it?

The openssl-1.0.0 version is unsupported for a long time. Can you reproduce it with 1.1.1 or 3.0 versions?

This is mandatory in openssl1.0.0.  Other versions do not appear

When your openssl is configured, if you remove TLSv1, it will be in openssl1.0.2. no-tls1, an error will be reported when compiling.
I didn't solve how to remove TLSv1.0 version in openssl1.0.0 or 1.0.2

OpenSSL 1.0.0 is long out of support.  OpenSSL 1.0.2 is also out of support.  I doubt anyone will answer your questions.
Upgrade to 1.1.1 or later.


Broken suggestions for ' key

I have <leader> mapped to '
vim.g.mapleader = '\''
and this is what I get

there are some actual mappings at the bottom, but the text at the top clearly doesn't match my mappings

It even looks like an mapping injection 😀


Airdrop error

I cant seem to get airdrop working. bluetooth and wifi are working though.

The author of itlwm is in development, and you can get progress here, https://github.com/OpenIntelWireless/itlwm

Or use the following method, but I don't like it
http://bbs.pcbeta.com/viewthread-1870256-1-1.html


[SDPA-1585] Add alt text to campaign primary image

JIRA issue: https://digital-engagement.atlassian.net/browse/SDPA-1585
Changed

Change image prop to Object
Add alt text to img
Add title to Svg image if its not in a link
Remove deprecated :xlink:href - https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href

Screenshots

Need to remove link on image


Cannot read property 'id' of undefined

My actions before raising this issue

[x] Read/searched the docs
[x] Searched past issues

TypeError: Cannot read property 'id' of undefined
    at Worker.e.onerror (https://cvat.org/cvat-ui.9db7ed0e8341e910b6de.min.js:22:109591)

Expected Behaviour
Proper error message in the browser console
Current Behaviour
If a data chunk cannot be downloaded by the client by some reason this exception occurs.
Possible Solution
Handle the error event properly
Steps to Reproduce (for bugs)

Context

Your Environment

Git hash commit (git log -1):2b221d26fd65cd4f7c81d19247459f3f2416ed73
Docker version docker version (e.g. Docker 17.0.05):
Are you using Docker Swarm or Kubernetes?
Operating System and version (e.g. Linux, Windows, MacOS):
Code example or link to GitHub repo or gist to reproduce problem:
Other diagnostic information / logs:
Logs from `cvat` container

Next steps
You may join our Gitter channel for community support.

@azhavoro
The issue is still relevant and one of the most often email notifications we recieve.

The issue is quite old and maybe outdated.
Since it does not have a way to reproduce I will close the issue now and maybe will investigate it in the future if it appears again.


Fix types in the AST

Make explicit types for AST elements
Link gates to their semantic and remove querySemantic and querySignature


Add iOS support

Ability to build heapsize for iOS platform have been added in this PR.
For building could be used:
cargo build --target aarch64-apple-ios
r? @larsbergstrom , could you, please, make code review and accept changes?

This change is

:pushpin: Commit e251e76 has been approved by larsbergstrom

@bors-servo r+

:hourglass: Testing commit e251e76ad021866ea8f89ef8825fff303b38cf0c with merge 13f3929a70a3caf5afb6dc99ea5fe1dc01fc340b...

:broken_heart: Test failed - status-travis

That failure is #86.


Compatibility with Python 3.12

Hi there,
thank you very much for conceiving and maintaining the geojson package.
We are currently evaluating support for Python 3.12 on behalf of https://github.com/earthobservations/wetterdienst/pull/1008, and wanted to report an observation we just made over there ^1:
SolverProblemError

The current project's Python requirement (3.12.0rc3) is not compatible with some of the required packages Python requirement:
- geojson requires Python >=3.7, <3.12, so it will not be satisfied for Python 3.12.0rc3

Because geojson (3.0.1) requires Python >=3.7, <3.12
and no versions of geojson match >=3,<3.0.1 || >3.0.1,<4, geojson is forbidden.
So, because wetterdienst depends on geojson (>=3,<4), version solving failed.

Python 3.12 will be released on 2023-10-02 ^2, so, if nothing speaks against it, it might be applicable to relax the version constraint, and run another release in order to unlock a few other applications depending on geojson?
With kind regards,
Andreas.

This restriction was relaxed to 3.7 - 3.12 in https://github.com/jazzband/geojson/pull/215 (although I don't think there should be any upper bound).
What is missing is a release to PyPI.
@rayrrr After #222 is merged, please could you make a new release?

Hi again,
thank you for integrating GH-222 so quickly, @hugovk.
The package can now be installed well interactively, as a workaround, by invoking pip install git+https://github.com/jazzband/geojson, but it can't be used as a dependency in setup.py / setup.cfg / pyproject.toml, unless it will be released on PyPI, right?
So, in order to support the advent of Python 3.12, can we humbly ask you to run a release on PyPI?
With kind regards,
Andreas.

Yes, it's possible.
Here's an example: https://peps.python.org/pep-0508/#examples
For example in pyproject.toml:
dependencies = [
  "geojson @ https://github.com/jazzband/geojson/archive/refs/heads/main.zip",
]

Note this installs from a zip which should be quicker than from a Git clone.

What’s blocking to make a proper Pypi release?

New release forthcoming. I just need to write up the changelog and push it out. Will aim to get it done by this weekend at the latest.

3.1.0 has been released with Python 3.12 support. https://pypi.org/project/geojson/

Dear Ray,
thank you so much for running a release ❤. On two downstream projects, we've invoked corresponding CI runs. It seems to work well [^1].

https://github.com/crate/crate-python/pull/592
https://github.com/earthobservations/wetterdienst/pull/1008

With kind regards,
Andreas.
[^1]: Modulo Wetterdienst, now failing on h5py, but that's a different thing.


Cannot read property 'getBoundingClientRect' of null

Slider is totally broken on my install,
Cannot read property 'getBoundingClientRect' of null shows up whenever the slider is clicked

May need more sample code.


make the edit button yellow consistent with other edit buttons like on cases.

[x] make the edit button on profile yellow like it is elsewhere.

This is done.


Release Camunda Modeler RC.1

Checklist:

[x] make sure dependencies are released (rm -rf node_modules && npm i && npm run all works)

bpmn-js, dmn-js, cmmn-js, *-properties-panel, *-moddle, ...

[x] smoke test to verify all diagrams can be created
[x] update CHANGELOG before releasing (cf. https://github.com/camunda/camunda-modeler/pull/1181)
[x] semantic release (npm run release)
[x] wait for Travis to build the release
[ ] execute integration test on released artifacts

[x] Works on Linux
[x] Works on Mac
[ ] Works on Windows

[x] publish release on Github Releases
[x] write blog post on blog.camunda.org (https://github.com/camunda/blog.camunda.org/pull/72)

[x] Clarify supported environments (https://github.com/camunda/camunda-modeler/issues/1132)

[x] trigger mirroring of release to https://camunda.org/release/camunda-modeler/ via Jenkins
[ ] update download version of Camunda Modeler at camunda.com
[x] spread the word

[x] @alle to trigger customer mail
[x] tweet

[ ] close current milestone

I collected CHANGELOG items in PR https://github.com/camunda/camunda-modeler/pull/1181.

CHANGELOG has to be updated again after latest PRs got merged.

The first version of the blog post can be viewed here: https://github.com/camunda/blog.camunda.org/pull/72.
Waiting for the last merge to continue.

Plan for integration testing:

Windows
Linux
Mac

Any volunteers? @barmac @nikku @mschoe
I can do Mac 💪🏻

Done with Mac. Found one small bug (cf. https://github.com/camunda/camunda-modeler/issues/1221) which we should tackle in the next milestone.

Completed testing with Linux (excluding plug-ins).

Can we close this?

Yes we did it!

Blog post
Twitter
Download version


Using Marten's WriteTo throws swallowed exception when Wolverine tries to set empty status code

When using Marten's WriteTo with Wolverine, WriteEmptyBodyStatusCode generated code tries to set the status code to 204, after Marten has already started the response.  This fail silently, and is only discoverable when reviewing logs.

I meant to raise this in the Wolverine repo, ignore this


Create istio exclusion for CSI Driver in case of codeModules or public registry

Description
With this the CSI Driver is excluded from istio blocking traffic if:

codeModulesImage is set
public registry is enabled

VirtualService and ServiceEntry is created that points to the host where the image is stored. If this is not the case the injection into a pod would not work as everything got stuck because the CSI Driver could not be able to retrieve the image.
~I placed the reconciliation of the istioReconciler right before the injection reconciliation, please give me feedback if you are fine with this.~
I placed the reconciliation after the codeModules versionReconciler is finished.
Currently I am only checking if the ImageID is set in the status of the CodeModule, this should cover both cases (codeModulesImage set or public registry enabled).
Respective ticket: https://dt-rnd.atlassian.net/browse/K8S-9622

How can this be tested?
Deploy the operator with istio, do not forget to label the to be injected namespace accordingly (istio-injection:enabled)
Apply a dynakube with istio enabled and

with a codeModulesImage set
with public registry feature flag enabled

Also check for VirtualServices and ServiceEntries and look if they are created correctly.

Codecov Report
Attention: Patch coverage is 44.06780% with 33 lines in your changes missing coverage. Please review.

Please upload report for BASE (main@efff2cb). Learn more about missing BASE report.
Report is 7 commits behind head on main.

Files
Patch %
Lines

...mocks/pkg/controllers/dynakube/istio/reconciler.go
0.00%
23 Missing :warning:

pkg/controllers/dynakube/istio/reconciler.go
78.57%
3 Missing and 3 partials :warning:

pkg/controllers/dynakube/injection/reconciler.go
50.00%
2 Missing and 2 partials :warning:

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@           Coverage Diff           @@
##             main    #3343   +/-   ##
=======================================
  Coverage        ?   58.67%
=======================================
  Files           ?      330
  Lines           ?    18578
  Branches        ?        0
=======================================
  Hits            ?    10901
  Misses          ?     6438
  Partials        ?     1239

Flag
Coverage Δ

unittests
58.67% <44.06%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

closed this PR for now, as the way it is done here is way too hacky. We will revisit this and rework.


fix: correct admin URL

Signed-off-by: Mohan Narayana<EMAIL_ADDRESS>Resolves #791
Impact: minor
Type: docs*

:tada: This PR is included in version 5.0.1 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Does angular-summernote support angular 1.5?

If so, can you update bower.json to reflect this?

Yes, we are running it with angular 1.5

@simonlinj Thank you for your information.
@billyaraujo I missed the release schedule for angular 1.5. I should change primary target to angular 1.5 from angular 1.4 while keep to compatible with angular 1.4.
I will fix it soon.

@outsideris  thanks.


[sc189175] Use cursors on PG queries

Resources

Shortcut story

Changes

~Use export_timeout in OGR exports instead of the render timeout.~ -> https://github.com/CartoDB/CartoDB-SQL-API/pull/698
Update PG formats based on streams (json, geojson, svg) , to use cursors.

After increasing servers' memory, the error disappear, so using cursors is not needed anymore: https://app.shortcut.com/cartoteam/story/189175/sql-api-oom-errors-when-exporting-data#activity-198251


Allow structured EntityCache keys

I have hierarchical data which I am requesting using Siesta.  My API is designed so I can make requests at each level of the hierarchy.  They are journals which contain issues, which then contain articles.  So, if I use Siesta to request an issue, I get a list of articles in my response.  My understanding is that an implementation of EntityCache at the model stage would see this as a request to store an array of models, with the url as the key (I assume that's what would be in EntityCacheKey, although I also assume I'm not supposed to rely on it).  In my app, a user can choose one article to store and use (potentially offline) later.  So, when that request comes in, the url would be for a single article, not the issue that the article was originally requested in.  Since I'm not suppose to parse the EntityCacheKey, I'd have no way of knowing this in my EntityCache implementation, nor do I really want to have url parsing bolted onto that cache.
The thing that comes to mind to me is that I would want to be able to transform the EntityCacheKey into an array of keys just before we write to the cache (the issue url and all the article urls).  It might be handy at that point to convert from urls to a key type I can specify, so my cache isn't in the business of parsing urls.  Then I can store each article in my cache as a separate entity.  Then, when it's time to query the database, we can use a related conversion process, and the cache can lookup by an array of keys, which in the example I've laid out would be just one key (the article).  There are other cases where I want to lookup an arbitrary list of articles.
What would you think @pcantrell?  Do you have a different way to do this?

The reason the cache keys are opaque is that I want to leave room for Siesta to include more than just the URL in the cache key in the future. For example, you might want to make it a digest of (URL + secure auth token) so that you can securely cache data for multiple users on one device.

So, when that request comes in, the url would be for a single article, not the issue that the article was originally requested in.

This is a sticky situation. The one-to-one relationship between URLs and resources is baked pretty deeply into the cache, so storing something with one key and retrieving it with another certainly does break the mold.
I pondered making each EntityCache responsible for generating its own keys. Doing that gets complicated, but you make a compelling case for it:

I would want to be able to transform the EntityCacheKey into an array of keys just before we write to the cache (the issue url and all the article urls). It might be handy at that point to convert from urls to a key type I can specify, so my cache isn't in the business of parsing urls.

I suspect many users would like to use a structured database as a cache store instead of the “raw bytes on disk” approach that the current API assumes. I’ll poke at this when I find some time, and when I do, I’ll call on you to try whatever I come up with and see if it makes sense.

The one-to-one relationship between URLs and resources is baked pretty deeply into the cache, so storing something with one key and retrieving it with another certainly does break the mold.

It seems like this could be implemented to be totally transparent to Siesta, since it would be the responsibility of the EntityCache implementor to take the url and the Entity in the pipeline (at whichever stage the persistent cache is working at), and output a key of their choice.  Then when it's time to do a lookup in the cache, the implementor has to be able to take the url and turn it into a key which can produce an entity with the correct value.  I'm confident that I could do that with my data and urls.  It doesn't matter to Siesta if the url being looked up was never actually seen, and its my understanding that it would then proceed after the persistent cache hit to actually request the url in question, which is fine by me.
I do have some related EntitiyCache questions which the documentation doesn't cover (and I haven't yet dug in the code to find the answer for myself 😅).  Is there support for staleness in the EntityCache?  Since you don't know when something went into the cache, I assume there's no general support for that.  But what happens when a known resource is cleared from the in memory cache?  Is the EntityCache informed?

Got inspired, and put up an implementation of this and #90 on the structured-cache-keys branch. @jordanpwood, if you have a chance, give it a whirl!

Let me start off by saying, Wow!  You got this code change out blazingly fast!!  I'm incredibly impressed.
To test things out, I've made a little sample app which loads a resource from our API, and have hooked up a pseudo persistent cache to it, just to check your new branch out.
One possible bug I'm seeing is that the first time I call loadIfNeeded, I'm seeing a cache request for each of the resources in the path to the fully constructed URL.  What I mean is, I'm creating the resource like so:
func articleInPressPageResource(journalId: String, cursor: String?) -> Resource {
        return libraryResource
            .child(Endpoint.journals.rawValue)
            .child(journalId)
            .child(Endpoint.aip.rawValue)
            .withParam(QueryParameter.cursor.rawValue, cursor)
    }

And for every call to child, I'm seeing a key get created and a call to readEntity.  After that initial setup, everything behaves as I expect.
As to the behavior of wipe, I would say that I would expect Siesta to be generally in charge of the current state of caching, so when it gets a call to wipe it would pass that onto the persistent cache.  However, Siesta wouldn't know the full extent of which data should be purged, so maybe that wouldn't be good idea.  For my API, I can't really use an auth token as part of the persistent store, since they expire if they aren't used frequently enough.  So the same user can be authenticated with the same permissions, and have a different auth token.  I suppose I could update the cache when I get a new token... I'd love to hear any advice you have on the topic.
In general, I give a big 👍 to the cache key, it works just the way I would expect it to.

Thanks for kicking the tires! Having passed your sanity check, I’ll promote it to a PR to encourage further review.
The thing where you see cache misses for each child() and withParam() step bugs me too, and is on my list. The problem is that right now, resources try to load their content from the cache as soon as they’re instantiated. I think instead that they should do it on the first read of latestData and/or the first call to addObserver(). Not sure whether first, second, or both would be least confusing. Hmm.
On wipe(), my thinking is starting to clarify a bit. For forcing a new request on the next resource load, there’s already invalidate(). The purpose of wipe() is not just to say “please remove the cache entry,” but rather to say “config or context has changed in a way that changes the meaning of the load request” — with change of auth being the primary example. To that end, wipe() not only does not remove the entity from the EntityCache, but initiates a new cache load after the resource is wiped. I think that’s right. It’s up to you to make sure that your cache takes into account the same things that would change what the server returns, and if you’re not doing that properly, you’d be clued into the problem when you see the same data immediately pop back out of the cache after a wipe. This is all clear in my head, but I’m not sure it’s making sense as I type it out.

For my API, I can't really use an auth token as part of the persistent store, since they expire if they aren't used frequently enough.

Yeah. If you want to support caching on a single device, and you want to protect one user from being able to view another’s cached content, then the options I see are:

include some secure digest of the login as part of the cache key (e.g. bcrypt(login+password)), or
have the server provide a randomly generated encryption key, perhaps tied to the specific device, that remains the same over longer periods of time.

I used the latter approach on a project once, and it worked nicely. On that project, though, offline access was not a requirement; if you want offline, only the first approach works (I think?).


Remove legacy docsite

What are you trying to accomplish?

This PR removes our legacy Gatsby docsite and all related CI config, rake tasks, inline examples, etc.
Integration

No prod changes necessary.
List the issues that this change affects.

Partially addresses https://github.com/github/primer/issues/2014
Risk Assessment

[x] Low risk the change is small, highly observable, and easily rolled back.
[ ] Medium risk changes that are isolated, reduced in scope or could impact few users. The change will not impact library availability.
[ ] High risk changes are those that could impact customers and SLOs, low or no test coverage, low observability, or slow to rollback.

Accessibility

No new axe scan violation - This change does not introduce any new axe scan violations.

This is exciting 💯


Upgrade to bootstrap 4

This seeks to resolve #17.
Upgrades to Bootstrap 4 and also shifts around the HTML a bit to utilize some of Bootstrap's inherent styling features.

Ashley, this is fantastic! Thanks so much for the contribution! It looks great, and I suspect the changes you've made the header tags and making better use of the Bootstrap styling features will help from an accessibility perspective as well :)
I'm going to merge in as-is but might make a few CSS tweaks before deploying to the live Pythonanywhere instance.

Yes! I was trying to use the headers in a stricter way, instead of a way to change size. Please change anything!! Thank you!


Install selected toolchain via rustup

Hey :)
I'm not sure if this is the correct way to implement this. I wrote this to bridge a gap in a project that uses rust-toolchain.toml to select a toolchain (and possibly download it). It seems that corrosion does support choosing the toolchain that is specified in rust-toolchain.toml (because it appears as an override toolchain in rustup and corrosion sets the _TOOLCHAIN_OVERRIDE setting), but only if that toolchain is installed, contrary to cargo which downloads the toolchain automatically.
There seems to be a fundamental issue here where rustup doesn't show a toolchain override from rust-toolchain.toml until cargo (or something else) ran and installed it, and there doesn't seem to be any rustup subcommand to install whatever toolchain is required by the current project. I thought the corrosion-specific toolchain override is the place to bridge that gap until rustup gains the ability to bootstrap the correct toolchain as the override settings dictate.

Currently corrosion has a lot of complicated logic in FindRust.cmake which selects an actual rust toolchain, based on e.g. the Version criteria a user has set. Corrosion will directly use this toolchain, bypassing the rustup proxy. This is a bit fast when building, since the rustup invocation is skipped, and I would say also has less potential for surprises.
Background: The cargo and rustc that you have in .cargo/bin are actually just rustup. rustup will select and potentially install the selected toolchain before then executing cargo or rustc from that toolchain. This means additional overhead on every cargo command, since first rustup will be invoked and check all the potential override sources.
I do agree that having automatic installing of toolchains can be useful, but if you e.g. just want to use the rust version specified in your rust-toolchain.toml, then I would suggest adding an option to FindRust.cmake which skips all the complicated version resolution logic, and will just take the cargo / rustc that is in PATH (which would be the rustup proxy, which will automatically install toolchains ).

I see. How do you think I should implement that, as new CMake variable or some a magic value of Rust_TOOLCHAIN?

Also, this proxy behavior of rustup acting is cargo/rustc is pretty funny, makes it even weirder that rustup doesn't support installing the override toolchain when it's acting as rustup

I see. How do you think I should implement that, as new CMake variable or some a magic value of Rust_TOOLCHAIN?

I would add a new option() for this. With rustup toolchain link developers can add custom toolchains with arbitrary names, so I don't think a magic value would be good.

Also, this proxy behavior of rustup acting as cargo/rustc is pretty funny, makes it even weirder that rustup doesn't support installing the override toolchain when it's acting as rustup

Corrosion bypasses the rustup proxy and directly calls the real cargo / rustc, so that is expected.

I'll open it under a different PR


Enhancing sign up dashboard

I want to work on it by making the UI look good on laptops as well as on PC.
So, assign this issue to me.

I would like to work on this issue. I'm a GSSOC 22 participant. Please assign it to me, if the issue is not resolved. Thanks.

any updates? @iamtanya-22

@coding-geek21  Yes, I'm working on it and I'll complete it by today.

@coding-geek21  I'm finding some error in the code and still working on it so you can assign this issue to @HarshKumarChoudary .

@coding-geek21  I think this issue is still pending, can I go through this ??

yes, Sorry I was busy with some College works. You can go ahead with it. @coding-geek21  please unassign me. Thanks.

@coding-geek21 I think this issue is still pending, can I go through this ??

Since you were assigned #56 and this is almost the same issue.. I'm closing this


Organize imports removes type imports that are only referenced in @link (jsdoc)

Bug Report
🔎 Search Terms
organize imports link
🕗 Version & Regression Information
As far as I know this is the behavior ever since @link support was added.
⏯ Playground Link
Playground link with relevant code
💻 Code
/// <refenrece types="zod"/>
import type { ZodType } from 'zod';

/** Intended to be used in combination with {@link ZodType} */
export function fun() { /* ... */ }

🙁 Actual behavior
Import is shown as not being used and gets removed on executing "Organize imports".
🙂 Expected behavior
Keep it.

Hi @RyanCavanaugh, I would like to help out on this. Could you assign this issue to me?

Hi, the PR is ready for review. Please let me know what you think.

This is related to #47558.


keras fix layer sharing inputs and outputs names

fix layer-sharing inputs and outputs #1151
before fix

after fix

@Chizkiyahu double checking, this is a fix for the 1st screenshot in #1151, not the 2nd and 3rd?

@Chizkiyahu double checking, this is a fix for the 1st screenshot in #1151, not the 2nd and 3rd?

this fixes the 1st and 3nd
on the 2nd  I am undecided because when you click on the edge you see the current data

@Chizkiyahu is this the right approach? For Keras Functional there seems to be a differentiation between nodes and layers. The current graph is built from layers instead of node instances. For example, #3 should show multiple node instances of the Convolution layer. e.g. is the problem making the graph look more right or is it more that the layers don't match the underlying Keras Functional representation?

@lutzroeder
In Keras, a layer can have more than one node

Comparison Criteria
Nodes
Layers

Graph Clarity
✅ More accurate and clear
❌ Can become less clear with complexity

Interaction Requirement
✅ Clear without clicking
❌ May require interaction to understand fully

Shape Inference
✅ Can show shape inference
❌ Shape inference may not always be possible

Complexity
❌ Represents more complex graphs
✅ Simplifies to high-level abstractions

Readability
❌ Less readable as complexity increases
✅ More readable due to abstraction

Data Duplication
❌ May duplicate data like constants and attributes
✅ Tends to minimize data duplication

Netron Implementation
❌ Needs to implement
✅ Already implemented in Netron

Similarity to User Code
❌ May differ significantly
✅ Closely resembles user-written code

My personal view is that there is no clear advantage to moving away from the existing 'layers' mode to a 'nodes' mode. It would be beneficial to keep the visualization focused on layers and simply indicate places where multiple nodes are present.
Internal Project: Model Flattening
Overview
I'm engaged in an internal project that focuses on flattening complex neural network models. This process includes challenging scenarios such as embedding a model within another model ('model-in-model') and the sharing of layers between different parts of the network.
Demonstrating Complexity
To highlight the intricate nature of flattening such models, I've created a test and provided examples of both the original and the flattened models:

Original model: model.keras.zip
Flattened model: flat_model.pb.zip

These examples represent an extreme case, showcasing the increase in complexity when flattening models. It is important to note that the visualization tool Netron does not inherently flatten 'model-in-model' architectures.
Conclusion
The provided examples underscore the sophisticated nature of model architectures and the potential complications that arise from attempting to flatten such structures for visualization or analysis.

@Chizkiyahu yes, the table is clear.

Is it possible to implement this without relying on information from keras-metadata.json? For example, summarizing how many inputs are used shouldn't depend on looking at type.inputs?
Is this about flattening graphs? In the #3 example the output seems incorrect as the order in which ReLU is called is lost. Conv2D seems to be more a function module that is defined once and invoked via conv2d[0][0], conv2d[1][0], conv2d[2][0]` instance nodes?

@Chizkiyahu yes, the table is clear.

Is it possible to implement this without relying on information from keras-metadata.json? For example, summarizing how many inputs are used shouldn't depend on looking at type.inputs?
The question was less about flattening graphs. In the 2) and 3) examples, the output seems incorrect as the order in which ReLU is called is lost. Conv2D seems to be more a function module that is defined once and invoked via conv2d[0][0], conv2d[1][0], conv2d[2][0]` instance nodes? e.g. what is the exact meaning of a layer and node in Keras.

Keras Nodes vs Layers
In Keras, nodes represent the points within a network graph where layers can connect, whereas a layer is an instance of a Keras layer that performs a specific function within the neural network. It is possible to add multiple nodes to a network using the same instance of a Keras layer. This concept is represented in a Keras model as a single layer with multiple nodes.
Graph of Keras nodes is DAG but the graph of keras nodes can be a cyclic graph
Input and Output Order
The order of edges can be made clearer by numbering them instead of using "to" This can be observed when selecting the output edge of a conv layer.

Implementation Methods

Graph of Keras Layers (Main): Focuses solely on layers, which have the bugs.
Graph of Keras Nodes: Flattens the graph.
Graph of Keras Layers and considers/combines the Keras Nodes (PR):  graph of layers that show all the cyclic inputs numbered

Please tell me if you have another Idea of how to implant this
Possible Improvements

Add a numbered indicator on the Netron node (e.g., Conv2D) to reflect the number of Keras nodes (layer.inbound_nodes.length).
Number the edges for clear identification.
Add a 'Keras Nodes Mode'/DAG in settings for alternative visualization.

@Chizkiyahu main now has a node_mode (disabled by default) to experiment with flattening the graph. For model.keras.zip shared above, does the model have dependencies across multiple layers? For example, there is a reference to model_3[4] and model_3 has only 4 inbound nodes.

@Chizkiyahu main now has a node_mode experiment to partially inline layers with multiple inbound nodes. Layers with multiple nodes get lifted as functions.


Only include the 'sideEffects' field on webhooks in Kubernetes 1.12+

What this PR does / why we need it:
Adds a condition in the chart that avoids setting the 'sideEffects' field on Validating and Mutating webhooks if the Kubernetes version is less than 1.12.
We don't officially support Kubernetes 1.11, but given it's quite easy for us to include this gate I think we should, and it means users installing with Helm onto older k8s versions will have it 'just work'.
The legacy variant of the static manifests will include the sideEffects field still, as it is a field that is useful for users of 1.12-1.14, and these users can avoid warnings by setting --validate=false on the kubectl create command.
Release note:
NONE

/kind cleanup
/area deploy

/test pull-cert-manager-e2e-v1-11
/test pull-cert-manager-e2e-v1-12

/lgtm


Feature/360 update dv execution module

Tickets addressed: Confluence 360
Review: By commit
Merge strategy: Merge (no squash)

Description

This module was incomplete. Comments were changed and added to the module code. UnitTest and documentation were added as well. Some additions were included, such as module parameters that specify a minimum and maximum DV burn time.
Verification

A UnitTest was added.
Documentation

Documentation was added.
Future work

The name of the module may be changed, because this module stops the burn, and doesn't execute it like the current module name suggests.

@JulianHammerl, is this one waiting on @patkenneally, or what needs to happen?

@JulianHammerl, is this one waiting on @patkenneally, or what needs to happen?

Yes, waiting for @patkenneally


Incorrect error message given when changing activity description

Website gives an error saying no English summary was given even if it was actually given.

This error message probably referred to the title of the activity. The title is called 'summary' in the codebase, which might not be the best term to use here. However, for sake of consistency, I close this issue as the error is not incorrect.


Add regex visualizer to Regex.md

Hi, I added phprex (my website), an online regex visualizer to Regex.md

What's the use case for this compared to regex101?


How to use CartesianSolver with iCub legs?

Hi,
I don't have any experience with the CartesianSolver and I would like to ask if it's possible to use the CartesianSolver for our icub legs and how.
As our iCubHeidelberg01 has only legs, is it possible to use the solver as in the arm example  but with iCubLegCartesianSolver , or should we customize the CartesianInterface as in the tutorial?
What we would like to have is the two feet as end effectors and perform online inverse kinematics.
Thanks!

cc @kevinastein

Hi @hu-yue
Assuming your legs kinematics is "v2.5", you have first to make sure that the following conditions are met:

robotInterface is running with the legs Cartesian controllers launched.
To have an idea look at iCubGenova01 app directory where we set up configuration files for the arm controllers. The icub_all.xml should then contain pointers to those files. You'll find attached an example for such left_leg_cartesian.xml.

Do yarp-config context --import cartesianSolver cartesianSolver.ini to copy in your local path the configuration file and then edit the version to v2.5. The final file should look like as this cartesianSolver.ini.
Now you can launch the solver: iKinCartesianSolver --part left_leg.

Finally, within your code, you can do:
Property option;
option.put("device","cartesiancontrollerclient");
option.put("remote","/icub/cartesianController/left_arm");
option.put("local","/client/left_arm");
PolyDriver clientCartCtrl(option);
ICartesianControl *icart=NULL;
if (clientCartCtrl.isValid()) {
   clientCartCtrl.view(icart);
}

I've added the configuration files as suggested and it seems to work fine.
A question: when I perform a getPose, where exactly is the end effector? I've seen that it is possible to define different end effectors, but which frame is for example in the case of left_leg by default?
Thanks!

You can find the documentation of the DH chains used for the two legs in http://wiki.icub.org/wiki/ICubForwardKinematics , in particular http://wiki.icub.org/wiki/ICubWaistRightLegKinematicsV2.5 and http://wiki.icub.org/wiki/ICubWaistLeftLegKinematicsV2.5 .
They are the frames that in the iCubHeidelberg01 urdf are named as l_foot_dh_frame and r_foot_dh_frame (see http://wiki.icub.org/wiki/ICub_Model_naming_conventions ).

I see, thanks! =)

@hu-yue there was a typo (fixed now) in my previous comment.
The correct line is:
option.put("remote","/icub/cartesianController/left_leg");

I believe you figured it out anyway.

Yes, no problem with the code! I'm always aware that we don't have arms! =)

Eheh :smile: